[v7,11/11] devtools: check event device doc tables

Message ID 20211122075414.1834651-11-skori@marvell.com (mailing list archive)
State Superseded, archived
Delegated to: Jerin Jacob
Headers
Series [v7,01/11] doc: add skeleton for eventdevs feature matrices |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/github-robot: build success github build: passed
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-x86_64-unit-testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS

Commit Message

Sunil Kumar Kori Nov. 22, 2021, 7:54 a.m. UTC
  From: Sunil Kumar Kori <skori@marvell.com>

In this commit, check is added for event device, Rx,
Tx, Crypto and Timer adapters tables for all supported
drivers.

Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
---
v7:
 - Rebased to 21.11 rc3
 - Fix Tx adapter capabilities for SW driver
v6:
 - Rebased to 21.11 rc2
 - Added feature matrices for all supported drivers
 - Added doc vs code check script
 
v5:
 - Rebased to 21.11
 - Added feature matrix for cnxk.
v4:
 - Rebased to 20.02
v3:
 - Removed .txt files to generate tables.
 - Use conf.py script to generate tables.
 - Add .ini file for all supported PMDs.
v2:
 - Review comments incorporated

 devtools/check-doc-vs-code.sh   |  35 ++++++++
 devtools/parse-event-support.sh | 149 ++++++++++++++++++++++++++++++++
 2 files changed, 184 insertions(+)
 create mode 100755 devtools/parse-event-support.sh
  

Comments

Jerin Jacob Nov. 22, 2021, 6:35 p.m. UTC | #1
On Mon, Nov 22, 2021 at 1:33 PM <skori@marvell.com> wrote:
>
> From: Sunil Kumar Kori <skori@marvell.com>
>
> In this commit, check is added for event device, Rx,
> Tx, Crypto and Timer adapters tables for all supported
> drivers.
>
> Signed-off-by: Sunil Kumar Kori <skori@marvell.com>

Following errors[2] need to be taken care in
devtools/parse-event-support.sh by detecting it is using a common Rx
adapter or not?
I have spent some time fixing it, Please find below a test patch for same[1].
Please send the next version with fix. I am planning to merge all doc
patches(1-10) to next-event-dev tree and delegate this
patch(11/11) to Thomas as he is the maintainer for tooling.

[2]
doc out of sync for dsw
        Eth Rx adapter Features event_vector
        Eth Rx adapter Features multi_eventq
        Eth Rx adapter Features override_flow_id
doc out of sync for sw
        Eth Rx adapter Features event_vector
        Eth Rx adapter Features multi_eventq
        Eth Rx adapter Features override_flow_id


> ---
> v7:
>  - Rebased to 21.11 rc3
>  - Fix Tx adapter capabilities for SW driver
> v6:
>  - Rebased to 21.11 rc2
>  - Added feature matrices for all supported drivers
>  - Added doc vs code check script
>
> v5:
>  - Rebased to 21.11
>  - Added feature matrix for cnxk.
> v4:
>  - Rebased to 20.02
> v3:
>  - Removed .txt files to generate tables.
>  - Use conf.py script to generate tables.
>  - Add .ini file for all supported PMDs.
> v2:
>  - Review comments incorporated
>
>  devtools/check-doc-vs-code.sh   |  35 ++++++++
>  devtools/parse-event-support.sh | 149 ++++++++++++++++++++++++++++++++
>  2 files changed, 184 insertions(+)
>  create mode 100755 devtools/parse-event-support.sh
>
> diff --git a/devtools/check-doc-vs-code.sh b/devtools/check-doc-vs-code.sh
> index c58c239c87..608d6e0e2e 100755
> --- a/devtools/check-doc-vs-code.sh
> +++ b/devtools/check-doc-vs-code.sh
> @@ -66,11 +66,35 @@ check_rte_flow() # <driver>
>         fi
>  }
>
> +all_event_drivers()
> +{
> +       find $rootdir/drivers/event -mindepth 1 -maxdepth 1 -type d |
> +       sed 's,.*/,,' |
> +       sort
> +}
> +
> +check_event_dev() # <driver>
> +{
> +       code=$rootdir/drivers/event/$1
> +       doc=$rootdir/doc/guides/eventdevs/features/$1.ini
> +       [ -d $code ] || return 0
> +       [ -f $doc ] || return 0
> +       report=$($selfdir/parse-event-support.sh $code $doc)
> +       if [ -n "$report" ]; then
> +               error "doc out of sync for $1"
> +               echo "$report" | sed 's,^,\t,'
> +       fi
> +}
> +
>  if [ -z "$trusted_commit" ]; then
>         # check all
>         for driver in $(all_net_drivers); do
>                 check_rte_flow $driver
>         done
> +
> +       for driver in $(all_event_drivers); do
> +               check_event_dev $driver
> +       done
>         exit $result
>  fi
>
> @@ -81,4 +105,15 @@ if has_code_change 'RTE_FLOW_.*_TYPE_' ||
>                 check_rte_flow $driver
>         done
>  fi
> +
> +if has_code_change 'RTE_EVENT_DEV_CAP_*' ||
> +               has_code_change 'RTE_EVENT_ETH_RX_ADAPTER_CAP_*' ||
> +               has_code_change 'RTE_EVENT_ETH_TX_ADAPTER_CAP_*' ||
> +               has_code_change 'RTE_EVENT_CRYPTO_ADAPTER_CAP_*' ||
> +               has_code_change 'RTE_EVENT_TIMER_ADAPTER_CAP_*' ||
> +               has_file_change 'doc/guides/eventdevs/features'; then
> +       for driver in $(all_event_drivers); do
> +               check_event_dev $driver
> +       done
> +fi
>  exit $result
> diff --git a/devtools/parse-event-support.sh b/devtools/parse-event-support.sh
> new file mode 100755
> index 0000000000..d756977eec
> --- /dev/null
> +++ b/devtools/parse-event-support.sh
> @@ -0,0 +1,149 @@
> +#! /bin/sh -e
> +# SPDX-License-Identifier: BSD-3-Clause
> +# Copyright(C) 2021 Marvell.
> +
> +# Parse event dev support of a driver directory,
> +# and optionally show difference with a doc file in .ini format.
> +
> +dir=$1 # drivers/event/foo
> +ref=$2 # doc/guides/eventdevs/features/foo.ini
> +
> +if [ -z "$dir" ]; then
> +       echo "directory argument is required" >&2
> +       exit 1
> +fi
> +
> +# sorting order
> +export LC_COLLATE=C
> +
> +# generate INI section
> +list() # <title> <pattern>
> +{
> +       echo "[$1]"
> +       git grep -who "$2[[:alnum:]_]*" $dir | sort -u |
> +       awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}'
> +}
> +
> +event_dev_sched_support()
> +{
> +       title="Scheduling Features"
> +       pattern=$(echo "RTE_EVENT_DEV_CAP_" | awk '{print toupper($0)}')
> +       list "$title" "$pattern" | grep -vwE 'void|indirect|end'

void| in... copy-paste issue from rte_flow.

> +}
> +
> +event_dev_rx_adptr_support()
> +{
> +       title="Eth Rx adapter Features"
> +       pattern=$(echo "RTE_EVENT_ETH_RX_ADAPTER_CAP_" |
> +               awk '{print toupper($0)}')
> +       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
> +}
> +
> +event_dev_tx_adptr_support()
> +{
> +       title="Eth Tx adapter Features"
> +       pattern=$(echo "RTE_EVENT_ETH_TX_ADAPTER_CAP_" |
> +               awk '{print toupper($0)}')
> +       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
> +}
> +
> +event_dev_crypto_adptr_support()
> +{
> +       title="Crypto adapter Features"
> +       pattern=$(echo "RTE_EVENT_CRYPTO_ADAPTER_CAP_" |
> +               awk '{print toupper($0)}')
> +       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
> +}
> +
> +event_dev_timer_adptr_support()
> +{
> +       title="Timer adapter Features"
> +       pattern=$(echo "RTE_EVENT_TIMER_ADAPTER_CAP_" |
> +               awk '{print toupper($0)}')
> +       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
> +}
> +
> +if [ -z "$ref" ]; then # generate full tables
> +       event_dev_sched_support
> +       echo
> +       event_dev_rx_adptr_support
> +       echo
> +       event_dev_tx_adptr_support
> +       echo
> +       event_dev_crypto_adptr_support
> +       echo
> +       event_dev_timer_adptr_support
> +       exit 0
> +fi
> +
> +# compare with reference input
> +event_dev_sched_compare()
> +{
> +       section="Scheduling Features]"
> +       {
> +               event_dev_sched_support
> +               sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
> +       } |
> +       sed '/]/d' | # ignore section title
> +       sed 's, *=.*,,' | # ignore value (better in doc than generated one)
> +       sort | uniq -u | # show differences
> +       sed "s,^,Scheduling Features ," # prefix with category name
> +}
> +
> +event_dev_rx_adptr_compare()
> +{
> +       section="Eth Rx adapter Features]"
> +       {
> +               event_dev_rx_adptr_support
> +               sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
> +       } |
> +       sed '/]/d' | # ignore section title
> +       sed 's, *=.*,,' | # ignore value (better in doc than generated one)
> +       sort | uniq -u | # show differences
> +       sed "s,^,Eth Rx adapter Features ," # prefix with category name
> +}
> +
> +event_dev_tx_adptr_compare()
> +{
> +       section="Eth Tx adapter Features]"
> +       {
> +               event_dev_tx_adptr_support
> +               sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
> +       } |
> +       sed '/]/d' | # ignore section title
> +       sed 's, *=.*,,' | # ignore value (better in doc than generated one)
> +       sort | uniq -u | # show differences
> +       sed "s,^,Eth Tx adapter Features ," # prefix with category name
> +}
> +
> +event_dev_crypto_adptr_compare()
> +{
> +       section="Crypto adapter Features]"
> +       {
> +               event_dev_crypto_adptr_support
> +               sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
> +       } |
> +       sed '/]/d' | # ignore section title
> +       sed 's, *=.*,,' | # ignore value (better in doc than generated one)
> +       sort | uniq -u | # show differences
> +       sed "s,^,Crypto adapter Features ," # prefix with category name
> +}
> +
> +event_dev_crypto_adptr_compare()

event_dev_crypto_timer_compare

> +{
> +       section="Timer adapter Features]"
> +       {
> +               event_dev_timer_adptr_support
> +               sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
> +       } |
> +       sed '/]/d' | # ignore section title
> +       sed 's, *=.*,,' | # ignore value (better in doc than generated one)
> +       sort | uniq -u | # show differences
> +       sed "s,^,Timer adapter Features ," # prefix with category name
> +}
> +
> +event_dev_sched_compare
> +event_dev_rx_adptr_compare
> +event_dev_tx_adptr_compare
> +event_dev_crypto_adptr_compare
> +event_dev_crypto_adptr_compare

event_dev_crypto_timer_compare

[1

 event_dev_crypto_adptr_support()
@@ -52,7 +65,7 @@ event_dev_crypto_adptr_support()
        title="Crypto adapter Features"
        pattern=$(echo "RTE_EVENT_CRYPTO_ADAPTER_CAP_" |
                awk '{print toupper($0)}')
-       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+       list "$title" "$pattern" ""
 }

 event_dev_timer_adptr_support()
@@ -60,7 +73,7 @@ event_dev_timer_adptr_support()
        title="Timer adapter Features"
        pattern=$(echo "RTE_EVENT_TIMER_ADAPTER_CAP_" |
                awk '{print toupper($0)}')
-       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+       list "$title" "$pattern" ""
 }

 if [ -z "$ref" ]; then # generate full tables
@@ -129,7 +142,7 @@ event_dev_crypto_adptr_compare()
        sed "s,^,Crypto adapter Features ," # prefix with category name
 }

-event_dev_crypto_adptr_compare()
+event_dev_timer_adptr_compare()
 {
        section="Timer adapter Features]"
        {
@@ -146,4 +159,4 @@ event_dev_sched_compare
 event_dev_rx_adptr_compare
 event_dev_tx_adptr_compare
 event_dev_crypto_adptr_compare
-event_dev_crypto_adptr_compare
+event_dev_timer_adptr_compare]
diff --git a/devtools/parse-event-support.sh b/devtools/parse-event-support.sh
index d756977eec..f8e6bb0db2 100755
--- a/devtools/parse-event-support.sh
+++ b/devtools/parse-event-support.sh
@@ -16,19 +16,31 @@ fi
 # sorting order
 export LC_COLLATE=C

+check_sw_capa()
+{
+       driver=$(echo "$dir" | cut -d / -f 3)
+       if [ "$driver" == "dsw" ] || [ "$driver" == "sw" ] ; then
+               return 1
+       else
+               return 0
+       fi
+}
+
 # generate INI section
-list() # <title> <pattern>
+list() # <title> <pattern> <extra_patterns>
 {
        echo "[$1]"
-       git grep -who "$2[[:alnum:]_]*" $dir | sort -u |
-       awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}'
+       words=$(git grep -who "$2[[:alnum:]_]*" $dir)
+       words+=$(echo -e "$3")
+       echo "$words" | sort -u |
+               awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}'
 }

 event_dev_sched_support()
 {
        title="Scheduling Features"
        pattern=$(echo "RTE_EVENT_DEV_CAP_" | awk '{print toupper($0)}')
-       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+       list "$title" "$pattern" ""
 }

 event_dev_rx_adptr_support()
@@ -36,7 +48,8 @@ event_dev_rx_adptr_support()
        title="Eth Rx adapter Features"
        pattern=$(echo "RTE_EVENT_ETH_RX_ADAPTER_CAP_" |
                awk '{print toupper($0)}')
-       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+       check_sw_capa ||
extra='RTE_EVENT_ETH_RX_ADAPTER_CAP_OVERRIDE_FLOW_ID\nRTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ\nRTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR\n'
+       list "$title" "$pattern" "$extra"
 }

 event_dev_tx_adptr_support()
@@ -44,7 +57,7 @@ event_dev_tx_adptr_support()
        title="Eth Tx adapter Features"
        pattern=$(echo "RTE_EVENT_ETH_TX_ADAPTER_CAP_" |
                awk '{print toupper($0)}')
-       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+       list "$title" "$pattern" ""
 }



> --
> 2.25.1
>
  

Patch

diff --git a/devtools/check-doc-vs-code.sh b/devtools/check-doc-vs-code.sh
index c58c239c87..608d6e0e2e 100755
--- a/devtools/check-doc-vs-code.sh
+++ b/devtools/check-doc-vs-code.sh
@@ -66,11 +66,35 @@  check_rte_flow() # <driver>
 	fi
 }
 
+all_event_drivers()
+{
+	find $rootdir/drivers/event -mindepth 1 -maxdepth 1 -type d |
+	sed 's,.*/,,' |
+	sort
+}
+
+check_event_dev() # <driver>
+{
+	code=$rootdir/drivers/event/$1
+	doc=$rootdir/doc/guides/eventdevs/features/$1.ini
+	[ -d $code ] || return 0
+	[ -f $doc ] || return 0
+	report=$($selfdir/parse-event-support.sh $code $doc)
+	if [ -n "$report" ]; then
+		error "doc out of sync for $1"
+		echo "$report" | sed 's,^,\t,'
+	fi
+}
+
 if [ -z "$trusted_commit" ]; then
 	# check all
 	for driver in $(all_net_drivers); do
 		check_rte_flow $driver
 	done
+
+	for driver in $(all_event_drivers); do
+		check_event_dev $driver
+	done
 	exit $result
 fi
 
@@ -81,4 +105,15 @@  if has_code_change 'RTE_FLOW_.*_TYPE_' ||
 		check_rte_flow $driver
 	done
 fi
+
+if has_code_change 'RTE_EVENT_DEV_CAP_*' ||
+		has_code_change 'RTE_EVENT_ETH_RX_ADAPTER_CAP_*' ||
+		has_code_change 'RTE_EVENT_ETH_TX_ADAPTER_CAP_*' ||
+		has_code_change 'RTE_EVENT_CRYPTO_ADAPTER_CAP_*' ||
+		has_code_change 'RTE_EVENT_TIMER_ADAPTER_CAP_*' ||
+		has_file_change 'doc/guides/eventdevs/features'; then
+	for driver in $(all_event_drivers); do
+		check_event_dev $driver
+	done
+fi
 exit $result
diff --git a/devtools/parse-event-support.sh b/devtools/parse-event-support.sh
new file mode 100755
index 0000000000..d756977eec
--- /dev/null
+++ b/devtools/parse-event-support.sh
@@ -0,0 +1,149 @@ 
+#! /bin/sh -e
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(C) 2021 Marvell.
+
+# Parse event dev support of a driver directory,
+# and optionally show difference with a doc file in .ini format.
+
+dir=$1 # drivers/event/foo
+ref=$2 # doc/guides/eventdevs/features/foo.ini
+
+if [ -z "$dir" ]; then
+	echo "directory argument is required" >&2
+	exit 1
+fi
+
+# sorting order
+export LC_COLLATE=C
+
+# generate INI section
+list() # <title> <pattern>
+{
+	echo "[$1]"
+	git grep -who "$2[[:alnum:]_]*" $dir | sort -u |
+	awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}'
+}
+
+event_dev_sched_support()
+{
+	title="Scheduling Features"
+	pattern=$(echo "RTE_EVENT_DEV_CAP_" | awk '{print toupper($0)}')
+	list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+}
+
+event_dev_rx_adptr_support()
+{
+	title="Eth Rx adapter Features"
+	pattern=$(echo "RTE_EVENT_ETH_RX_ADAPTER_CAP_" |
+		awk '{print toupper($0)}')
+	list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+}
+
+event_dev_tx_adptr_support()
+{
+	title="Eth Tx adapter Features"
+	pattern=$(echo "RTE_EVENT_ETH_TX_ADAPTER_CAP_" |
+		awk '{print toupper($0)}')
+	list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+}
+
+event_dev_crypto_adptr_support()
+{
+	title="Crypto adapter Features"
+	pattern=$(echo "RTE_EVENT_CRYPTO_ADAPTER_CAP_" |
+		awk '{print toupper($0)}')
+	list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+}
+
+event_dev_timer_adptr_support()
+{
+	title="Timer adapter Features"
+	pattern=$(echo "RTE_EVENT_TIMER_ADAPTER_CAP_" |
+		awk '{print toupper($0)}')
+	list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+}
+
+if [ -z "$ref" ]; then # generate full tables
+	event_dev_sched_support
+	echo
+	event_dev_rx_adptr_support
+	echo
+	event_dev_tx_adptr_support
+	echo
+	event_dev_crypto_adptr_support
+	echo
+	event_dev_timer_adptr_support
+	exit 0
+fi
+
+# compare with reference input
+event_dev_sched_compare()
+{
+	section="Scheduling Features]"
+	{
+		event_dev_sched_support
+		sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+	} |
+	sed '/]/d' | # ignore section title
+	sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+	sort | uniq -u | # show differences
+	sed "s,^,Scheduling Features ," # prefix with category name
+}
+
+event_dev_rx_adptr_compare()
+{
+	section="Eth Rx adapter Features]"
+	{
+		event_dev_rx_adptr_support
+		sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+	} |
+	sed '/]/d' | # ignore section title
+	sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+	sort | uniq -u | # show differences
+	sed "s,^,Eth Rx adapter Features ," # prefix with category name
+}
+
+event_dev_tx_adptr_compare()
+{
+	section="Eth Tx adapter Features]"
+	{
+		event_dev_tx_adptr_support
+		sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+	} |
+	sed '/]/d' | # ignore section title
+	sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+	sort | uniq -u | # show differences
+	sed "s,^,Eth Tx adapter Features ," # prefix with category name
+}
+
+event_dev_crypto_adptr_compare()
+{
+	section="Crypto adapter Features]"
+	{
+		event_dev_crypto_adptr_support
+		sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+	} |
+	sed '/]/d' | # ignore section title
+	sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+	sort | uniq -u | # show differences
+	sed "s,^,Crypto adapter Features ," # prefix with category name
+}
+
+event_dev_crypto_adptr_compare()
+{
+	section="Timer adapter Features]"
+	{
+		event_dev_timer_adptr_support
+		sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+	} |
+	sed '/]/d' | # ignore section title
+	sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+	sort | uniq -u | # show differences
+	sed "s,^,Timer adapter Features ," # prefix with category name
+}
+
+event_dev_sched_compare
+event_dev_rx_adptr_compare
+event_dev_tx_adptr_compare
+event_dev_crypto_adptr_compare
+event_dev_crypto_adptr_compare