[v2] devtools: spell check

Message ID 20211112181444.168035-1-hnadeau@iol.unh.edu (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series [v2] devtools: spell check |

Checks

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

Commit Message

Henry Nadeau Nov. 12, 2021, 6:14 p.m. UTC
  A spell check script that checks for spelling errors in modified .rst files
using git. There is also an optional flag to have the script check the entire
doc directory for errors. The dictionary is used for word exceptions, and the 
regex file will exclude any regex patterns supplied on each line.

Errors will be logged and printed to console, and by default the log will be
stored in devtools. The output directory can be modified with a flag.

The script can be executed from anywhere within the dpdk repo.

Signed-off-by: Henry Nadeau <hnadeau@iol.unh.edu>
---
 devtools/spell_check.sh             |  202 +++
 devtools/spell_check_dictionary.txt | 2154 +++++++++++++++++++++++++++
 devtools/spell_check_regex.txt      |    2 +
 3 files changed, 2358 insertions(+)
 create mode 100755 devtools/spell_check.sh
 create mode 100644 devtools/spell_check_dictionary.txt
 create mode 100644 devtools/spell_check_regex.txt
  

Comments

Stephen Hemminger Nov. 12, 2021, 7:23 p.m. UTC | #1
On Fri, 12 Nov 2021 13:14:45 -0500
Henry Nadeau <hnadeau@iol.unh.edu> wrote:

> +# Compares diff between current branch and it's remote counterpart
> +if [ ! $all_check = 'true' ]; then
> +  git diff "$branch" origin/"$remote_branch" --name-only |
> +	  grep ".*\.rst" |
> +	  # run the spellcheck function over each file in parallel, appending
> +	  # misspellings to the output file
> +	  parallel -j "$(nproc)" spellcheck_file {} "$allowed_words" "$dpdk_dir" \
> +	  "$regex_pattern" >> "$output"
> +  else
> +    cd "$dpdk_dir"
> +    find . -name "*.rst" -type f | parallel -j "$(nproc)" spellcheck_file {} \
> +    "$allowed_words" "$dpdk_dir" "$regex_pattern" >>"$output"
> +fi
> +
> +
> +cat "$output"
> +
> +# remove empty lines in the output
> +sed -i '/^$/d' "$output"
> +
> +# Errors can be counted by counting the number of lines in the output
> +errors="$(wc -l "$output" | cut -d ' ' -f 1)"
> +printf "Errors found: %d\n" "$errors" | tee -a "$output"
> +
> +# Make the exit code the number of errors
> +exit "$errors"

Seems like this is adding alot of git stuff to what could just be
a tool to report the spelling errors in the current branch.
  

Patch

diff --git a/devtools/spell_check.sh b/devtools/spell_check.sh
new file mode 100755
index 0000000000..548d0d8e85
--- /dev/null
+++ b/devtools/spell_check.sh
@@ -0,0 +1,202 @@ 
+#!/bin/bash
+
+dpdk_dir=$(git rev-parse --show-toplevel)
+if [ -z "$dpdk_dir" ]; then
+  echo "Please execute this script from within a git repo"
+  exit 1
+fi
+
+set -e
+allowed_words=''  # path to allowed words file
+all_check='false' # optional flag to check all documentation
+verbose_logging='false'
+branch=$(git rev-parse --abbrev-ref HEAD) # Gets current working branch
+regex_dir=''
+
+while test $# -gt 0; do
+	case "$1" in
+	-h | --help)
+		echo "Spell Check"
+		echo " "
+		echo "spell_check [options] [arguments]"
+		echo " "
+		echo "options:"
+		echo "-h, --help
+			Show shows list of flags and usages."
+		echo "-a, --all-doc
+			Specify if all documentation should be checked."
+		echo "-b
+			Specify a different branch to be checked against."
+		echo "-d
+			Specify a different dictionary to be used by aspell."
+		echo "-o, --output-dir=DIR
+			Specify a directory to store output in."
+		echo "-r
+			Specify a different regex pattern file."
+		echo "-v
+			Specify verbose logging."
+		exit 0
+		;;
+	-a | --all-doc)
+		shift
+		export all_check='true'
+		;;
+	-b)
+		shift
+		export remote_branch=$1
+		shift
+		;;
+	-r)
+		shift
+		export regex_dir=$1
+		shift
+		;;
+	-d)
+		shift
+		export allowed_words=$1
+		shift
+		;;
+	-v)
+		shift
+		echo "Verbose logging active!"
+		export verbose_logging='true'
+		;;
+	-o)
+		shift
+		if test $# -gt 0; then
+			export output=$1
+		else
+			echo "no output dir specified"
+			exit 1
+		fi
+		shift
+		;;
+	--output-dir*)
+		export output=$(echo $1 | sed -e 's/^[^=]*=//g')
+		shift
+		;;
+	*)
+		break
+		;;
+	esac
+done
+
+if [ "" = "$output" ]; then
+	output="$dpdk_dir/devtools/spell_check.log"
+else
+	output+=/spell_check.log
+fi
+
+if [ "" = "$regex_dir" ]; then
+	regex_dir="$dpdk_dir/devtools/spell_check_regex.txt"
+fi
+
+PKG_OK=$(which aspell)
+
+if [ $verbose_logging = 'true' ]; then
+	echo Checking for Aspell: "$PKG_OK"
+fi
+
+if [ "" = "$PKG_OK" ]; then
+	echo "Missing Required Package: Aspell"
+	exit 1
+fi
+
+PKG_OK=$(which git)
+
+if [ $verbose_logging = 'true' ]; then
+	echo Checking for Git: "$PKG_OK"
+fi
+
+if [ "" = "$PKG_OK" ]; then
+	echo "Missing Required Package: Git"
+	exit 1
+fi
+
+PKG_OK=$(which parallel)
+
+if [ $verbose_logging = 'true' ]; then
+	echo Checking for Parallel: "$PKG_OK"
+fi
+
+if [ "" = "$PKG_OK" ]; then
+	echo "Missing Required Package: Parallel"
+	exit 1
+fi
+
+# Checking if remote branch flag was set
+if [ "" = "$remote_branch" ]; then
+	remote_branch=$branch
+fi
+
+# Checking if separate dictionary was supplied, if not defaults to
+# spell_check_dictionary.txt in current dir
+if [ "" = "$allowed_words" ]; then
+	allowed_words=$dpdk_dir'/devtools/spell_check_dictionary.txt'
+fi
+
+# function to spell check a single file
+function spellcheck_file() {
+	file="$3/$1"
+	dictionary="$2"
+	sed -e "$4" "$file" | # used to simplify lines sent to aspell
+	  tr -d '*' |
+	  tr -d '`' |
+	  aspell --lang=en --encoding=utf-8 --ignore-case \
+	  --ignore-repl pipe list -d en --ignore=3 --personal="$dictionary" |
+	  sed -r '/\*/d; /^\s*$/d' |
+	  cut -d ' ' -f 2 |
+	  sort -u |
+	  sed '/International/d' |
+	  grep -Z "" |
+	  xargs -0 -I % grep -on "%" "$file" |
+	  awk -v file="$file" -F ':' '{ printf "%s:%s %s\n", file, $1, $2 }'
+}
+
+# Build regex pattern from files
+regex_pattern="'s/(R)//; "
+while IFS= read -r line; do
+  if [[ ! $line =~ "#" ]]; then
+    regex_pattern+="s/$line/ /; "
+  fi
+done < "$regex_dir"
+regex_pattern="${regex_pattern::-1}'"
+
+if [ "'" = "$regex_pattern" ]; then
+  regex_pattern=''
+fi
+
+# Make sure output file is present and empty
+touch "$output"
+truncate -s 0 "$output"
+
+# setup so that parallel can use the function
+export -f spellcheck_file
+export SHELL="$(type -p bash)"
+
+# Compares diff between current branch and it's remote counterpart
+if [ ! $all_check = 'true' ]; then
+  git diff "$branch" origin/"$remote_branch" --name-only |
+	  grep ".*\.rst" |
+	  # run the spellcheck function over each file in parallel, appending
+	  # misspellings to the output file
+	  parallel -j "$(nproc)" spellcheck_file {} "$allowed_words" "$dpdk_dir" \
+	  "$regex_pattern" >> "$output"
+  else
+    cd "$dpdk_dir"
+    find . -name "*.rst" -type f | parallel -j "$(nproc)" spellcheck_file {} \
+    "$allowed_words" "$dpdk_dir" "$regex_pattern" >>"$output"
+fi
+
+
+cat "$output"
+
+# remove empty lines in the output
+sed -i '/^$/d' "$output"
+
+# Errors can be counted by counting the number of lines in the output
+errors="$(wc -l "$output" | cut -d ' ' -f 1)"
+printf "Errors found: %d\n" "$errors" | tee -a "$output"
+
+# Make the exit code the number of errors
+exit "$errors"
diff --git a/devtools/spell_check_dictionary.txt b/devtools/spell_check_dictionary.txt
new file mode 100644
index 0000000000..ceb2694c30
--- /dev/null
+++ b/devtools/spell_check_dictionary.txt
@@ -0,0 +1,2154 @@ 
+personal_ws-1.1 en 2153
+AArch
+ABI's
+ABIs
+ACAT
+ACKs
+ACLs
+ADAT
+AEEOT
+AENQ
+AESN
+AFUs
+AIOP
+ALEF
+ALTQ
+AMDA
+APCI
+API's
+APIs
+ARKA
+ARKP
+ARMv
+ASCAT
+ASIC
+ASLR
+ASan
+AUPE
+AddressSanitizer
+AdminQ
+Agilex
+Agilio
+AltArch
+AltiVec
+Alveo
+Aquantia
+Aquantia's
+Arkville
+Arkville's
+Arria
+BBDev
+BBdev
+BCAT
+BDFs
+BMan
+BPSK
+BSPs
+BUFS
+BXNT
+Backports
+Blocklisting
+BlueField
+Broadcom
+Broadwell
+Broder
+BusA
+CAVP
+CAVS
+CBAR
+CBDMA
+CBFC
+CCAT
+CCITT
+CCed
+CDAT
+CEIL
+CFLAG
+CIDR
+CIMC
+CLIs
+CNTRS
+COMPDEV
+CPUFLAG
+CPUFreq
+CPUIdle
+CPUs
+CamelCase
+Cavium
+Cavium's
+CentOS
+Centos
+Cesnet
+Chelsio
+CollectD
+CommitID
+CompressDev
+ConnectX
+Coverity
+CryptoDev
+DALLOW
+DCBX
+DDEBUG
+DDIO
+DEINTERLEAVE
+DEINTERLEAVER
+DESTDIR
+DEVMEM
+DEVS
+DIMM
+DIMMs
+DLActive
+DLB's
+DMAdev
+DMFS
+DOCSISBPI
+DPBP
+DPBPs
+DPDK's
+DPDKVMS
+DPIO
+DPIOs
+DPMAC
+DPMCP
+DPRCs
+DRHD
+DRTE
+DSPs
+DTLB
+DVPT
+DWRR
+Dbuildtype
+Ddisable
+Deinitialising
+Denable
+DevA
+DevB
+DevC
+DevD
+DevF
+DevX
+DevxEnabled
+DevxFsRules
+Dexamples
+Dflexran
+DiffServ
+Diffie
+Dmachine
+Dmax
+Dmitry
+Dockerfile
+DomBDF
+Doption
+Dplatform
+DrvA
+DrvB
+DstMAC
+Dwerror
+EBUSY
+ECAT
+ECDSA
+ECPFs
+ECPM
+EDAT
+EEARBC
+EEXIST
+EFD's
+EINVAL
+ENAv
+ENOSPC
+ENOSYS
+ENOTSUP
+EPOLLIN
+ERANGE
+ESXi
+ETAG
+ETHPORTS
+ETQF
+ETrackId
+EVLAN
+EZchip
+Enablement
+EncryptExtIV
+EqualizationComplete
+Ericsson
+EthApp
+EtherType
+EventDev
+Extranet
+FAILOVER
+FALLTHROUGH
+FANOUT
+FCCT
+FDIRCTL
+FEXTNVM
+FFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF
+FIFOs
+FMan
+FPGAs
+FQID
+FRAMESIZE
+FastLinQ
+FleXRAN
+FlexRAN
+FlexSparc
+FortPark
+Fortville
+Foxville
+FpgaDev
+FrameCheckSequenceErrors
+FreeBSD
+FreeBSD's
+Freescale
+GBASE
+GCAT
+GCMVS
+GFSbox
+GGAs
+GGRP
+GGRPs
+GLINKSETTINGS
+GNinja
+GPAs
+GPGPU
+GPIO
+GPLv
+GPUs
+GRE's
+GRENAT
+GROed
+GSET
+GSO'd
+GSOed
+GTPC
+GTPU
+GTPoGRE
+GTPv
+Gbps
+HCAT
+HIFS
+HQoS
+HTSS
+HUGEFILE
+HUGETLB
+HWRM
+HWaddr
+Haswell
+HiSilicon
+HowTo
+Huawei
+HugePages
+Hugepagesize
+IANA
+ICMPv
+IFCVF's
+IGEL
+IGMP
+INTLBK
+INTx
+IOPL
+IOSF
+IOTLB
+IOVM
+IPADs
+IPHDR
+IPSec
+IPsec
+IRQs
+ITERS
+IXIA
+InfiniBand
+InifiniBand
+Inkscape
+IntN
+Intels
+Ironpond
+JITed
+KBytes
+Kaminsky
+KeySbox
+Kozlyuk
+Kunpeng
+Kunpeng's
+LDFLAG
+LEDs
+LETCAM
+LF's
+LFSR
+LIBDIR
+LIBEAL
+LINEARBUF
+LINKINFO
+LKCF
+LKML
+LLDP
+LLQv
+LLRs
+LSB's
+LSBs
+LSDK
+LTTng
+Linaro
+LineSidePort
+LiquidIO
+LnkSta
+Lpmcore
+MACSec
+MACsec
+MAIA
+MAINT
+MBUFs
+MBytes
+MDATA
+MDIO
+MEMLOCK
+MESI
+MKEY
+MMAP's
+MMIO
+MODINV
+MPLSoGRE
+MPLSoUDP
+MPMC
+MPMCF
+MPSC
+MSBs
+MSDN
+MSIx
+MSRs
+MSVC
+MTUs
+MWAIT
+Maipo
+Mellanox
+MemC
+MemCache
+MinGW
+Mitzenmacher
+Moongen
+MySpecialDev
+MySpecialDrv
+NASM
+NCSI
+NDIS
+NGIO
+NIC's
+NICs
+NICsfor
+NIST
+NNNNN
+NOFILE
+NOLIVE
+NOTREACHED
+NREGIONS
+NSDI
+NSECPERSEC
+NXP's
+NetUIO
+NetVSC
+NetXtreme
+Netcope
+Netlink
+Netmap
+Netronome's
+Niantic
+Npcap
+OFPAT
+OKTET
+OPADs
+OPAE
+OR'd
+OcteonTX
+OcteonTx
+Ootpa
+OpenCL
+OpenFabrics
+OpenFlow
+OpenSSL
+OpenWRT
+OpenWrt
+PBSIZE
+PCDs
+PCIADDR
+PCIe
+PCRE
+PCTYPES
+PF's
+PFVF
+PFVMTXSSW
+PGSIZE
+PHYREG
+PMD's
+PMDs
+POSIX
+PPPOED
+PPPOES
+PPPoE
+PPPoL
+PQoS
+PRIu
+PRNG
+PROBLEMTYPE
+PYTHONPATH
+Pankaj
+Parallelize
+Paravirtual
+Pensando
+Permop
+Pfaff
+Pipelevel
+Powerlinux
+Prepend
+QATE
+QEMU's
+QLogic
+QMan
+QNUM
+QSFP
+QinQ
+QorIQ
+QuickAssist
+QuickData
+RETA's
+RETAs
+RFCE
+RFOE
+RHEL
+RINGSIZE
+ROUNDROBIN
+RSERV
+RSMBL
+RSPCIPHY
+ReEx
+ReTa
+Readme
+Redhat
+Regexes
+Retransmit
+Rootfile
+RxQs
+RxTx
+SA's
+SADB
+SAIDX
+SATP
+SCLK
+SELINUXTYPE
+SELinux
+SFID
+SFNX
+SGBT
+SGLs
+SIGBUS
+SIGCOMM
+SIGHUP
+SIGINT
+SLAs
+SLES
+SLINKSETTINGS
+SMMU
+SMMUv
+SMTP
+SOC's
+SOCs
+SPDK
+SPDX
+SPSC
+SRAM
+SRTD
+SSET
+SSOW
+SSOWS
+SXGMII
+ScaleBricks
+SeLockMemoryPrivilege
+SecMon
+Semihalf
+Sendto
+Shumway
+Silicom
+Skylake
+SlotClk
+SmartNICs
+SoCs
+SoftNIC
+SolarCapture
+Solarflare
+SpeedStep
+StrataGX
+Subfield
+Subkey
+Subtarget
+Sunsetting
+TAGCTRL
+TCAM
+TCPHDR
+TCPv
+TDES
+TIMvf
+TIPG
+TLBs
+TLVs
+TPAUSE
+TPID's
+TSDL
+TSOed
+TSOv
+TestPMD
+TestPoint
+TestPointShared
+Testpoint
+ThunderX
+Timebase
+ToolChain
+TrErr
+TruFlow
+Twinpond
+UCSM
+UCTX
+UDPv
+UEFI
+UMWAIT
+UTRA
+Unary
+UniPHY
+Unregistration
+VADT
+VCBs
+VDAT
+VEBs
+VF's
+VFTA
+VICs
+VIRQFD
+VLANs
+VLVF
+VLXAN
+VM's
+VMBus
+VMDq
+VMware
+VPCLMULQDQ
+VRRP
+VTEP
+VTune
+VXLan
+VarText
+Varkey
+Versal
+VirtIO
+VirtQ
+Virtio's
+VxLAN
+WAITPKG
+WORKDIR
+WQEs
+WangXun
+Wangxun
+WinOF
+WinPcap
+Wmissing
+XCAT
+XGBE
+XORed
+XXCC
+XXXXXXXXXX
+Xenial
+Xeon
+Xilinx
+XtremeScale
+Yocto
+ZIPVF
+Zhou
+aQtion
+aaaa
+aarch
+abar
+abcdefgh
+abidiff
+accel
+accessor
+acked
+acking
+acks
+acpi
+activeate
+addif
+addr
+addrs
+adminq
+adptrs
+aead
+aesni
+affinitize
+affinitized
+affinitizing
+aflag
+algo
+algos
+allmulti
+allmulticast
+alloc
+allocator
+allocator's
+allocators
+allowlist
+allports
+alrt
+altivec
+amumble
+amzn
+antispoof
+apis
+argc
+args
+argv
+armv
+asan
+asym
+async
+atexit
+atmost
+atoi
+atomicNN
+atomicity
+atomics
+attr
+auth
+autoconf
+autodetected
+autogen
+autoload
+autoneg
+autonegotiation
+autotest
+autotests
+autotools
+axgbe
+babeltrace
+backend
+backends
+backplane
+backport
+backported
+backporting
+backpressure
+backquotes
+baddr
+balancer
+barcharts
+baseband
+basegraph
+basename
+bbdev
+bbdevs
+bcac
+bcast
+bcde
+bcmfs
+beefd
+benchmarking
+bflag
+binded
+binutils
+bitcnt
+bitfield
+bitfields
+bitmask
+bitmasks
+bitrate
+bitrates
+bitratestats
+bitstream
+bitwidth
+bitwidths
+bitwise
+bler
+blocklist
+blocksz
+bluefield
+bnxt
+bondingX
+bool
+bootargs
+bootindex
+boxplot
+bphy
+bpid
+bpool
+branchless
+brctl
+breakpoint
+bsize
+bufring
+bufsz
+bugfixes
+builddir
+buildroot
+buildtools
+buildtype
+builtins
+bursty
+busybox
+byname
+bytecode
+byteswap
+cBPF
+caam
+caba
+cacheline
+cack
+calc
+callee
+callfd
+calloc
+callout
+capa
+cbaf
+cbps
+ccac
+ccbbffffaa
+cdev
+cdfd
+centric
+cfgfile
+cfilter
+cflags
+cgroup
+cgroups
+chacha
+changings
+charcrypto
+chardev
+charp
+cheatsheet
+checkpatch
+checkpatches
+checksumming
+checksums
+chipset
+chipsets
+chkr
+chksum
+chlen
+chmod
+chnk
+chown
+cint
+ciphertext
+cksum
+classif
+cldemote
+clks
+cmac
+cmake
+cman
+cmdif
+cmdline
+cmds
+cmit
+cnic
+cntvct
+cnxk
+codespell
+combov
+commandline
+committer's
+comms
+compN
+comparator
+comparators
+compat
+compilervars
+compressdev
+compressdevs
+cond
+conf
+config
+configfile
+configruration
+configs
+connectx
+conntrack
+const
+contig
+contigmalloc
+contigmem
+contiguousness
+contrib
+conv
+copybreak
+coredump
+coredumpsize
+corei
+corelist
+coremask
+cperf
+cppc
+cpuX
+cpufreq
+cpuinfo
+cpumask
+cpus
+cpuset
+cputune
+cron
+crypto
+cryptodev
+cryptodev's
+cryptodevs
+cryptographic
+cryptolib
+cryptoperf
+csiostor
+cstream
+csum
+csumonly
+ctod
+ctrl
+ctrlmbuf
+cuda
+cudaStream
+currentMemory
+cvlan
+cvss
+cxgb
+cxgbe
+cxgbetool
+cxgbevf
+cxgbtool
+cyclecount
+dPacket
+daemonize
+data's
+datagram
+datagrams
+datapath
+datapaths
+dataplane
+dataroom
+datasheet
+dataunit
+dbdf
+deallocate
+deallocated
+deallocates
+deallocating
+deallocation
+debugbuild
+debugfs
+debugoptimized
+decap
+decaped
+decaps
+decapsulate
+decapsulated
+decapsulating
+decapsulation
+decomp
+decrementing
+decrypt
+decrypted
+dedent
+dedented
+defs
+degradations
+deinit
+deinitialization
+deinitialized
+denylist
+deps
+deqd
+deque
+dequeing
+dequeue
+dequeued
+dequeueing
+dequeues
+dequeuing
+dereference
+dereferenced
+dereferencing
+desc
+descs
+dest
+deterministically
+devarg
+devargs
+devbind
+devel
+develconfig
+deviceID
+deviceid
+devid
+devinfo
+devinit
+devlink
+devtools
+devtype
+devuninit
+diag
+dirname
+disaggregated
+distr
+distrib
+distro
+distros
+dlopen
+dmac
+dmadev
+dmadevs
+dmafwd
+dmar
+dmarXXX
+dmas
+dmesg
+dmidecode
+docsis
+dont
+dostuff
+downlink
+downscript
+doxy
+doxygen
+dpaa
+dpci
+dpcon
+dpdk
+dpdmai
+dpni
+dport
+dprc
+dpseci
+dptmapi
+dqud
+dracut
+driverctl
+dropless
+droppper
+drvinfo
+drwxr
+dscp
+dsts
+dtap
+dtunX
+dumpcap
+dynf
+dynfield
+dynflag
+eBPF
+eCPRI
+eMPW
+ecid
+ecmp
+ecpri
+edab
+eeprom
+eetrack
+elftools
+elif
+elts
+emulatorpin
+encap
+encaped
+encapped
+endPtr
+endian
+endianness
+endif
+enetc
+enic
+enqd
+enqueue
+enqueued
+enqueueing
+enqueues
+enqueuing
+entrancy
+entres
+entryx
+enum
+enums
+enumtype
+epoll
+errno
+essb
+eswitch
+ethdev
+ethdev's
+ethdevs
+ethertype
+ethertypes
+ethtool
+evdev
+eventdev
+eventdevs
+eventport
+eventq
+evtim
+ewma
+exdsa
+executables
+expirations
+extbuf
+extconf
+extern
+extmbuf
+extmem
+extstats
+fPIC
+facto
+failsafe
+fastpath
+fbarray
+fd's
+fdir
+fdir's
+fdirmatch
+fdirmiss
+fdisk
+fdopen
+ffadc
+ffade
+ffea
+ffff
+ffffff
+filepath
+filesystem
+filetype
+fillcrypto
+filtermask
+filtermode
+fini
+fips
+firmwares
+fixline
+flexbytes
+flexpayload
+flexran
+flib
+flowapi
+flowgen
+flowid
+flowptr
+flowttl
+flowtype
+flushtime
+fman
+fmlib
+foohead
+foreach
+formatters
+fpavf
+fpga
+fprintf
+framecnt
+framesz
+freebsd
+freqs
+frontend
+frontends
+fslmc
+fstab
+ftag
+fullbuild
+fullchk
+fullq
+func
+funcs
+fwdbuild
+fwding
+geneve
+getcpuclockid
+getopt
+getschedparam
+getspecific
+getwork
+gfni
+glibc
+globbing
+glort
+gmac
+gmake
+gnueabihf
+goto
+gpudev
+gpus
+gragment
+grehdr
+grep'ed
+groupinstall
+guarant
+gzip
+hairpinq
+hardcoded
+harq
+hdls
+helloworld
+hexmask
+hier
+highlevel
+higig
+hinic
+hisilicon
+hmac
+hostdev
+hostfwd
+hostname
+hostnet
+hotplug
+hotplugged
+hotplugging
+howto
+hpet
+hrtp
+hthresh
+htonl
+hugepage
+hugepages
+hugepagesz
+hugetlbfs
+hwcap
+hwgrp
+hwissue
+hwloc
+hyperthreading
+hyst
+iAVF
+iSCSI
+iavf
+ibadcrc
+ibadlen
+ibverbs
+ibytes
+icmp
+icmpecho
+icmpv
+idxd
+ient
+ierrors
+ietf
+iface
+ifaceX
+ifconfig
+ifcvf
+ifdef
+ifname
+ifndef
+ifpga
+ifup
+igbvf
+imcasts
+imissed
+imix
+impl
+implementers
+incrementing
+infa
+infiniband
+inflight
+inflights
+infos
+init
+initializer
+initializers
+initializion
+inlined
+inlining
+inmigrate
+inorder
+insmod
+intXX
+interleaver
+interprocedural
+intf
+intr
+intra
+intrinsics
+ints
+intx
+ioat
+ioeventfd
+iofwd
+iomem
+iommu
+ioport
+ioports
+iova
+ipackets
+ipip
+iproute
+ipsec
+irqs
+isal
+iscard
+isdigit
+isolcpus
+isonum
+iter
+ivshmem
+ixgbe
+ixgbevf
+jansson
+jhash
+jitter
+jobstats
+json
+kaleido
+kasumi
+kbytes
+kdrv
+keepalive
+keepcfg
+kenv
+keyX
+keygen
+keytag
+keywidth
+kflows
+killall
+kldload
+kldstat
+kldunload
+kmod
+kmods
+kni's
+kqueue
+kstrtoul
+kthread
+kthreads
+ktrace
+kvargs
+lacp
+latencystats
+layerscape
+lbrm
+lcore
+lcoreid
+lcores
+ldconfig
+ldflags
+ldpc
+ldpcdec
+ldpcenc
+libAArch
+libSSO
+libX
+libabigail
+libarchive
+libasan
+libatomic
+libbpf
+libc
+libcrypto
+libcryptodev
+libdpdk
+libefx
+libelf
+libeventdev
+libexecinfo
+libgcc
+libibverbs
+libisal
+libjansson
+libmemif
+libmlx
+libmusdk
+libname
+libnfb
+libnl
+libnuma
+libpcap
+libpqos
+librte
+libs
+libsze
+libtool
+libudev
+libvhost
+libvirt
+libz
+linearization
+linearize
+linearized
+linearizing
+linuxapp
+liovf
+liquidio
+literalinclude
+liveness
+lkup
+lladdr
+llvm
+lmac
+loadcfg
+loadfw
+loadu
+lockfree
+lockless
+loglevel
+loglevels
+logtype
+lookaside
+lookups
+loopback
+lossy
+lrand
+lrte
+lrwxrwxrwx
+lscpu
+lsmod
+lspci
+lstopo
+lthread
+lthreads
+lundef
+macExtS
+macaddr
+macaddrs
+macsec
+macswap
+mainloop
+makefile
+makefiles
+malloc
+manpages
+mappable
+maskable
+maskbits
+masklen
+maxdepth
+maxflows
+maxhash
+maxlen
+maxp
+maxth
+mbcache
+mbox
+mbps
+mbuf
+mbuf's
+mbufs
+mcam
+mcast
+mcfg
+mcpu
+mcus
+mdev
+memAccess
+memconfig
+memcopy
+memcpy
+memdev
+memdump
+memfd
+memhdr
+memif
+meminfo
+memoryBacking
+mempool
+mempool's
+mempools
+memseg
+memsegs
+memset
+memsize
+memzone
+memzones
+menthod
+menuconfig
+mergeable
+mesonconf
+mgmt
+microarchitecture
+microarchitectures
+microblock
+middleboxes
+milli
+mingw
+miniCQE
+mins
+minth
+misalign
+misprediction
+mkconfig
+mkdir
+mlnx
+mlnxofedinstall
+mlockall
+mlxconfig
+mlxdevm
+mlxfwreset
+mlxreg
+mmap
+mmap'ed
+mmaping
+mmapped
+mmaps
+modex
+modexp
+modinfo
+modprobe
+mountpoint
+mpls
+mplsogre
+mplsoudp
+mpool
+mpps
+mprq
+mrvl
+msgs
+msix
+mspdc
+mtod
+mtophys
+mtrapi
+mtrr
+mtune
+multicast
+multicasting
+multicasts
+multicore
+multilib
+multiline
+multiport
+multiprocess
+multiqueue
+multithread
+multithreaded
+multithreading
+musdk
+musl
+mutex
+mutexes
+mvneta
+mvpp
+mvsam
+myapp
+mydoc
+mynet
+nack
+namespace
+nano
+nanosleep
+napi
+natively
+nbcore
+nbport
+negllr
+neoverse
+neta
+netcat
+netdev
+netdev's
+netdevice
+netif
+netlogdecode
+netperf
+netronome
+netuio
+netvf
+netvsc
+newdir
+newsize
+nexts
+nffw
+ngbe
+nics
+nicvf
+nitrox
+nixlf
+nocbs
+nodefaults
+nodeid
+nodeps
+nodesc
+nodeset
+nodev
+nodrop
+nographic
+nohz
+nointxmask
+noiommu
+nombuf
+noncontiguous
+nonleaf
+noreturn
+nowait
+npalf
+nrange
+nsec
+nseg
+ntohl
+ntuple
+numa
+numactl
+numatune
+numref
+numvfs
+nvgre
+oUDP
+obase
+objdump
+objhdr
+objs
+obytes
+octeon
+octeontx
+oerror
+oerrors
+ofed
+offsetof
+olflags
+onchip
+onwards
+opackets
+opdl
+openibd
+openssl
+openwrt
+optype
+osdep
+outb
+outes
+outoffset
+overcommitted
+oversubscription
+ovlan
+ovrd
+pCPU
+pCPUs
+packetbuffer
+pagefault
+pagemap
+pagemaps
+pagesize
+param
+paramX
+paramY
+paramZ
+params
+paravirtualized
+parm
+parsers
+passlist
+passthrough
+passthru
+patchset
+patchsets
+pcap
+pcapng
+pcaps
+pciconf
+pcidb
+pcifunc
+pcisf
+pcpu
+pctype
+pdcp
+pdev
+pdpe
+pdump
+perf
+performant
+personalization
+pfcp
+pflink
+pfnum
+phdr
+physaddr
+physmem
+pipelined
+pipelining
+pkgconf
+pkgconfig
+pkgo
+pkill
+pkivf
+pkmbuf
+pkovf
+pktgen
+pktlen
+pktmbuf
+pktmbufs
+pktmode
+pkts
+plaintext
+plcores
+plotly
+pluggable
+plugindir
+pmdinfo
+pmdinfogen
+pmds
+pmgmt
+policer
+popd
+portId
+portconf
+portid
+portlist
+portmap
+portmask
+portn
+portnum
+portstats
+postcopy
+postfix
+postmigrate
+powermonitor
+ppfe
+pppoe
+pqos
+prealloc
+preallocate
+preallocated
+preallocating
+prebuilt
+precompiled
+precomputed
+preconfigured
+preemptible
+prefetch
+prefetchable
+prefetched
+prefetches
+prefetching
+prefree
+prepended
+prepends
+preprocessor
+prerelease
+printf
+printk
+prio
+priv
+proc
+processfor
+procinfo
+procs
+profileid
+prog
+programmatically
+promisc
+promiscusity
+proto
+prototyped
+psec
+pseudocode
+pstate
+psutil
+ptest
+ptests
+pthread
+pthreads
+pthresh
+ptpclient
+ptrs
+ptype
+ptypes
+pushd
+pvalue
+pvid
+pyelftools
+qavg
+qbman
+qconf
+qcow
+qdisc
+qdma
+qede
+qedf
+qedi
+qedr
+qemu
+qidA
+qidB
+qidx
+qinq
+qint
+qmap
+qmapping
+qoriq
+qpairs
+qsbr
+qsize
+qtime
+queueid
+rarp
+rawdev
+rawdevice
+rawdevices
+rawdevs
+rdline
+rdlock
+rdma
+rdtsc
+reStructuredText
+readline
+readlink
+realloc
+rebalanced
+rebalancing
+reconfigurable
+reconfiguring
+reconnection
+recv
+refcnt
+refdir
+regbit
+regexdev
+regexdevs
+regfield
+regs
+reinitializes
+reinitializing
+repo
+representator
+representor
+representors
+reqs
+requestor
+responder
+restool
+resv
+reta
+retransmission
+retransmissions
+retval
+ringparam
+rlimit
+rmmod
+roadmap
+rootfs
+rply
+rqmts
+rsize
+rsrc
+rsvd
+rsync
+rtecryptodev
+rtemap
+rudimental
+runstate
+runtime
+rvIndex
+rwlock
+rwlocks
+rxbuf
+rxconf
+rxfreet
+rxht
+rxmode
+rxoffload
+rxoffs
+rxonly
+rxpkts
+rxportconf
+rxpt
+rxqs
+rxtx
+rxwt
+sPAPR
+sact
+sadv
+safexcel
+sbin
+scalability
+scalable
+scaleup
+scapy
+sched
+scheduler's
+sctp
+sdap
+secgw
+secpol
+segs
+segsize
+segsz
+seid
+selectable
+selftest
+selinux
+sendemail
+sendmsg
+sendp
+seqn
+sess
+sessionless
+setaffinity
+setcancelstate
+setcanceltype
+setcap
+setpci
+setschedparam
+setspecific
+setspeed
+sfboot
+sfnum
+sgmii
+shaper
+shapers
+shconf
+shmfd
+shortname
+signoff
+simd
+sizeof
+skiplist
+smac
+smallbuild
+smap
+smartNIC
+smartnic
+smtpencryption
+smtpserver
+smtpserverport
+smtpuser
+snat
+snprintf
+socat
+socketid
+socktype
+socs
+softirqs
+softmmu
+softnic
+softrss
+soname
+sonames
+spinlock
+spinlocks
+spoofable
+srTCM
+srcs
+sriov
+srtcm
+srtcmp
+ssopf
+ssovf
+stateful
+statefully
+stderr
+stdin
+stdint
+stdlib
+stdout
+stlist
+stmt
+strace
+strcmp
+strcpy
+strerror
+stripq
+strlen
+stroul
+strscpy
+strtoll
+strtoull
+struct
+structs
+stty
+stype
+subblock
+subdir
+subdirectories
+subdirectory
+subdirs
+subexpression
+subfolder
+sublists
+submode
+submodes
+subnet
+subport
+subports
+substream
+subtuple
+subvariant
+sudo
+sunsetted
+superpages
+svlan
+switchdev
+syncthreads
+sysctl
+sysfile
+sysfs
+syslog
+sysroot
+systemd
+szedata
+szedataII
+tabularcolumns
+taildrop
+tailroom
+tapvm
+taskset
+tcpdump
+tcpv
+teid
+telco
+testapp
+testbbdev
+testcancel
+testcase
+testcases
+testeventdev
+testpmd
+testpmd's
+testregex
+testsuite
+testsuites
+thash
+threadIdx
+threadfence
+thunderx
+timedlock
+timedrdlock
+timedwait
+timedwrlock
+timerdev
+timespec
+timestamping
+timesync
+timvf
+titi
+tmapi
+tmgr
+toctree
+toeplitz
+toolchain
+toolchains
+topologies
+totalvfs
+tpid
+tpmd
+trTCM
+tracebuild
+tracecompass
+tracepoint
+tracepoints
+tradeoff
+transactional
+transceiving
+trie
+trtcm
+trylock
+tryrdlock
+trywrlock
+tshark
+tswap
+ttyAMA
+tunX
+tuntap
+turb
+tuser
+txconf
+txfreet
+txgbe
+txgbevf
+txht
+txmode
+txoffload
+txonly
+txpkts
+txport
+txportconf
+txpt
+txqflags
+txqnum
+txqs
+txqueuelen
+txrate
+txrst
+txsplit
+txtimes
+txwt
+typedef
+typedefs
+ucast
+udata
+udevd
+udpv
+uevent
+uint
+uintXX
+uintptr
+uioX
+ulimit
+umem
+umount
+unack
+unacked
+uname
+uncachable
+uncomment
+uncompiled
+uncompress
+uncompressing
+unencrypted
+unfree
+unicast
+uninit
+uninitialization
+uninitialize
+uninitializes
+unint
+unioned
+uniq
+unittest
+unlink
+unmap
+unmapped
+unmapping
+unmount
+unregister
+unregistering
+unreserve
+unreserving
+unrouted
+unsetting
+untag
+untagged
+untags
+untar
+upgradable
+uplink
+upstreamable
+upstreamed
+uptime
+usec
+userdata
+userland
+userspace
+usertools
+usleep
+usvhost
+uucp
+uuid
+uverbs
+uwire
+vCPE
+vCPU
+vCPUs
+vDPA
+vEth
+vHost
+vIOMMU
+vNIC
+vNICs
+vPMD
+vPro
+vRAN
+vSphere
+vSwitch
+vSwitches
+validator
+vals
+variadic
+vchan
+vcpu
+vcpupin
+vdev
+vdevarg
+vdevs
+vdmq
+vdpa
+vdpadevs
+vdrv
+vect
+vectorization
+vectorize
+vectorized
+vendid
+vendorID
+verwrite
+verylongtypename
+vfio
+vhost
+vhostforce
+vhostuser
+virbr
+virsh
+virt
+virtaddr
+virtenv
+virtio
+virtq
+virtqueue
+virtqueues
+virtualised
+virtualized
+virtualport
+vlan
+vmbus
+vmdq
+vmname
+vmware
+vmxnet
+vnic
+vring
+vrings
+vswitch
+vsym
+vxlan
+wakeup
+webpage
+werror
+werrorbuild
+wget
+whitespace
+wireshark
+wlcore
+wlcores
+workqueue
+workqueues
+workslot
+wred
+writeback
+wrlock
+wrptr
+wthresh
+wwww
+xFEE
+xFFEF
+xFFF
+xFFFD
+xFFFELLU
+xFFFF
+xFFFFEF
+xFFFFFFFF
+xJvf
+xXXXXXXXX
+xbzrle
+xcast
+xcbc
+xdata
+xefff
+xenvirt
+xffff
+xffffff
+xffffffff
+xffffffffffffffff
+xform
+xforms
+xmem
+xmemhuge
+xmeta
+xmit
+xmode
+xoff
+xored
+xstat
+xstats
+xtype
+xxxx
+xxxxxx
+xxxxxxx
+yyyy
+zcat
+zlib
+zmalloc
+zxof
diff --git a/devtools/spell_check_regex.txt b/devtools/spell_check_regex.txt
new file mode 100644
index 0000000000..efa8f63450
--- /dev/null
+++ b/devtools/spell_check_regex.txt
@@ -0,0 +1,2 @@ 
+# This file is used to exclude regex patterns from being passed to Aspell.
+# Each line is read as a single pattern.