Implement blacklisting for devmatch

devmatch_blacklist is a space separated list of modules (w/o the .ko
or full path) to exclude from devmatch's processing.

Differential Revision: https://reviews.freebsd.org/D16735
This commit is contained in:
Warner Losh 2018-08-23 05:06:27 +00:00
parent ce1ba01c8a
commit 8a317ce4b3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=338238
2 changed files with 12 additions and 5 deletions

View file

@ -42,6 +42,7 @@ ddb_config="/etc/ddb.conf" # ddb(8) config file.
devd_enable="YES" # Run devd, to trigger programs on device tree changes.
devd_flags="" # Additional flags for devd(8).
devmatch_enable="YES" # Demand load kernel modules based on device ids.
devmatch_blacklist="" # List of modules (w/o .ko) to exclude from devmatch.
#kld_list="" # Kernel modules to load after local disks are mounted
kldxref_enable="YES" # Build linker.hints files with kldxref(8).
kldxref_clobber="NO" # Overwrite old linker.hints at boot.

View file

@ -41,15 +41,15 @@ one_nomatch="$2"
devmatch_start()
{
local x
local x m list
if [ -n "$one_nomatch" ]; then
x=$(devmatch -p "${one_nomatch}" | sort -u)
list=$(devmatch -p "${one_nomatch}" | sort -u)
else
x=$(devmatch | sort -u)
list=$(devmatch | sort -u)
fi
[ -n "$x" ] || return
[ -n "$list" ] || return
# While kldload can accept multiple modules
# on the line at once, we loop here in case
@ -57,8 +57,14 @@ devmatch_start()
# We also optimize against the false positives
# or drivers that have symbolic links that
# confuse devmatch by running it -n.
# Finally, we filter out all items in the
# devmactch_blacklist.
devctl freeze
for m in ${x}; do
x=$(echo ${devmatch_blacklist} | tr ' ' '#')
for m in ${list}; do
case "#${x}#" in
*"#${m}#"*) continue ;;
esac
echo "Autoloading module: ${m}"
kldload -n ${m}
done