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.shdiff --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 $resultdiff --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_compareevent_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