Thread (86 messages) 86 messages, 7 authors, 2021-11-26

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

From: Jerin Jacob <hidden>
Date: 2021-11-22 18:36:25
Subsystem: the rest · Maintainer: Linus Torvalds

On Mon, Nov 22, 2021 at 1:33 PM [off-list ref] wrote:
From: Sunil Kumar Kori <redacted>

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 <redacted>
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

quoted hunk ↗ jump to hunk
---
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help