devtools/cocci: add script for ethdev namespace

Message ID 20211123084719.1313-1-aman.deep.singh@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers
Series devtools/cocci: add script for ethdev namespace |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/github-robot: build success github build: passed
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS

Commit Message

Singh, Aman Deep Nov. 23, 2021, 8:47 a.m. UTC
  The cocci script is to help add prefix 'RTE_ETH' namespace to enum
& macro of ethdev library. It helps in automating these changes for
applications. The script won't make changes in the code comment part.
Usage: spatch <script path> <app path>

Signed-off-by: Aman Singh <aman.deep.singh@intel.com>
---
 devtools/cocci/namespace_ethdev.cocci | 48 +++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100644 devtools/cocci/namespace_ethdev.cocci
  

Comments

Ferruh Yigit Nov. 25, 2021, 6:41 p.m. UTC | #1
On 11/23/2021 8:47 AM, Aman Singh wrote:
> The cocci script is to help add prefix 'RTE_ETH' namespace to enum
> & macro of ethdev library. It helps in automating these changes for
> applications. The script won't make changes in the code comment part.
> Usage: spatch <script path> <app path>
> 

Hi Aman,

I am trying to test the script, I thought an easy way can be to run
the script in an old version of the DPDK release and expecting it
build successfully after script run.
For that I am using 'spatch --include-headers --in-place' option on p
the repo.

Getting build error for the OFFLOAD macros, header files seems not
updated for the offloads, but .c files are updated.
Like:
DEV_TX_OFFLOAD_TCP_CKSUM --> RTE_ETH_TX_OFFLOAD_TCP_CKSUM
DEV_RX_OFFLOAD_UDP_CKSUM --> RTE_ETH_RX_OFFLOAD_UDP_CKSUM
...

Am I missing something, or .h left out intentionally?
Is there a way to update all?

> Signed-off-by: Aman Singh <aman.deep.singh@intel.com>
> ---
>   devtools/cocci/namespace_ethdev.cocci | 48 +++++++++++++++++++++++++++
>   1 file changed, 48 insertions(+)
>   create mode 100644 devtools/cocci/namespace_ethdev.cocci
> 
> diff --git a/devtools/cocci/namespace_ethdev.cocci b/devtools/cocci/namespace_ethdev.cocci
> new file mode 100644
> index 0000000000..d5de41e117
> --- /dev/null
> +++ b/devtools/cocci/namespace_ethdev.cocci
> @@ -0,0 +1,48 @@
> +@rule1@
> +identifier I =~  "^(RTE_FC_|ETH_MQ_|ETH_RSS|DEV_RX_|DEV_TX_|ETH_LINK|RTE_RETA|
> +|ETH_DCB|RTE_TUNNEL|ETH_VLAN|ETH_4|ETH_8|ETH_16|ETH_32|ETH_64|RTE_FDIR|RTE_L2|
> +|ETH_SPEED|ETH_MIRROR|ETH_VMDQ|ETH_NUM|ETH_QINQ|ETH_MAX_)";
> +@@
> +I
> +
> +@ script : python p@
> +I << rule1.I;
> +J;
> +@@
> +coccinelle .J="RTE_ETH_" + I[4:];
> +
> +exception_matches = ["ETH_VLAN_FILTER_CLASSIFY","ETH_VLAN_FILTER_ANY",
> +"ETH_VLAN_FILTER_SPEC","ETH_RSS_MODE","ETH_RSS_UPDATE","RTE_FDIR_MODE",
> +"RTE_FDIR_NO","RTE_FDIR_REPORT","ETH_MAX_RX_CLIENTS_E1H",
> +"ETH_MAX_AGGREGATION_QUEUES_E1","ETH_RSS_ENGINE_NUM","ETH_NUM_MAC_FILTERS",
> +"ETH_MAX_NUM_RX_QUEUES_PER_VF_QUAD","ETH_RSS_IND_TABLE_ENTRIES_NUM",
> +"ETH_RSS_KEY_SIZE_REGS","ETH_NUM_STATISTIC_COUNTERS","ETH_SPEED_"]
> +
> +if any(x in I for x in exception_matches):
> +        coccinelle .J= I;
> +
> +@ identifier@
> +identifier rule1.I;
> +identifier p.J;
> +@@
> +- I
> ++ J
> +
> +// Below rule for structures only
> +@rule2@
> +identifier A  =~  "rte_fdir_conf|rte_intr_conf";
> +@@
> +struct A
> +
> +@ script : python p2@
> +A << rule2.A;
> +B;
> +@@
> +coccinelle .B="rte_eth_" + A[4:];
> +
> +@ identifier2@
> +identifier rule2.A;
> +identifier p2.B;
> +@@
> +- struct A
> ++ struct B
>
  
Ferruh Yigit Nov. 26, 2021, 4:37 p.m. UTC | #2
On 11/25/2021 6:41 PM, Ferruh Yigit wrote:
> On 11/23/2021 8:47 AM, Aman Singh wrote:
>> The cocci script is to help add prefix 'RTE_ETH' namespace to enum
>> & macro of ethdev library. It helps in automating these changes for
>> applications. The script won't make changes in the code comment part.
>> Usage: spatch <script path> <app path>
>>
> 
> Hi Aman,
> 
> I am trying to test the script, I thought an easy way can be to run
> the script in an old version of the DPDK release and expecting it
> build successfully after script run.
> For that I am using 'spatch --include-headers --in-place' option on p
> the repo.
> 
> Getting build error for the OFFLOAD macros, header files seems not
> updated for the offloads, but .c files are updated.
> Like:
> DEV_TX_OFFLOAD_TCP_CKSUM --> RTE_ETH_TX_OFFLOAD_TCP_CKSUM
> DEV_RX_OFFLOAD_UDP_CKSUM --> RTE_ETH_RX_OFFLOAD_UDP_CKSUM
> ...
> 
> Am I missing something, or .h left out intentionally?
> Is there a way to update all?
> 

What I missed was script is not updating "#define ..." usage,
this make sense since target is for applications to update their code,
so script should update usage, not defines.

And as I tested with v21.08 with latest ethdev.h defines, some macros
seems not updated:
ETH_TUNNEL_FILTER_*
ETH_SPEED_NUM_*

Deprecated and removed macros are not updated, like:
RTE_ETH_DCB_NONE

And for some cases, like a new PMD specific macro is defined using
old existing macros, old macros are not updated.


Except from above issues, script updates majority of the macros,
and can be useful for application developers, also script can be
improved more later.

With above notes:
Tested-by: Ferruh Yigit <ferruh.yigit@intel.com>


>> Signed-off-by: Aman Singh <aman.deep.singh@intel.com>

<...>
  
Thomas Monjalon Nov. 26, 2021, 4:58 p.m. UTC | #3
26/11/2021 17:37, Ferruh Yigit:
> On 11/25/2021 6:41 PM, Ferruh Yigit wrote:
> > On 11/23/2021 8:47 AM, Aman Singh wrote:
> >> The cocci script is to help add prefix 'RTE_ETH' namespace to enum
> >> & macro of ethdev library. It helps in automating these changes for
> >> applications. The script won't make changes in the code comment part.
> >> Usage: spatch <script path> <app path>
[...]
> Except from above issues, script updates majority of the macros,
> and can be useful for application developers, also script can be
> improved more later.
> 
> With above notes:
> Tested-by: Ferruh Yigit <ferruh.yigit@intel.com>

Applied, thanks.
  

Patch

diff --git a/devtools/cocci/namespace_ethdev.cocci b/devtools/cocci/namespace_ethdev.cocci
new file mode 100644
index 0000000000..d5de41e117
--- /dev/null
+++ b/devtools/cocci/namespace_ethdev.cocci
@@ -0,0 +1,48 @@ 
+@rule1@
+identifier I =~  "^(RTE_FC_|ETH_MQ_|ETH_RSS|DEV_RX_|DEV_TX_|ETH_LINK|RTE_RETA|
+|ETH_DCB|RTE_TUNNEL|ETH_VLAN|ETH_4|ETH_8|ETH_16|ETH_32|ETH_64|RTE_FDIR|RTE_L2|
+|ETH_SPEED|ETH_MIRROR|ETH_VMDQ|ETH_NUM|ETH_QINQ|ETH_MAX_)";
+@@
+I
+
+@ script : python p@
+I << rule1.I;
+J;
+@@
+coccinelle .J="RTE_ETH_" + I[4:];
+
+exception_matches = ["ETH_VLAN_FILTER_CLASSIFY","ETH_VLAN_FILTER_ANY",
+"ETH_VLAN_FILTER_SPEC","ETH_RSS_MODE","ETH_RSS_UPDATE","RTE_FDIR_MODE",
+"RTE_FDIR_NO","RTE_FDIR_REPORT","ETH_MAX_RX_CLIENTS_E1H",
+"ETH_MAX_AGGREGATION_QUEUES_E1","ETH_RSS_ENGINE_NUM","ETH_NUM_MAC_FILTERS",
+"ETH_MAX_NUM_RX_QUEUES_PER_VF_QUAD","ETH_RSS_IND_TABLE_ENTRIES_NUM",
+"ETH_RSS_KEY_SIZE_REGS","ETH_NUM_STATISTIC_COUNTERS","ETH_SPEED_"]
+
+if any(x in I for x in exception_matches):
+        coccinelle .J= I;
+
+@ identifier@
+identifier rule1.I;
+identifier p.J;
+@@
+- I
++ J
+
+// Below rule for structures only
+@rule2@
+identifier A  =~  "rte_fdir_conf|rte_intr_conf";
+@@
+struct A
+
+@ script : python p2@
+A << rule2.A;
+B;
+@@
+coccinelle .B="rte_eth_" + A[4:];
+
+@ identifier2@
+identifier rule2.A;
+identifier p2.B;
+@@
+- struct A
++ struct B