Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Aug 2018 05:06:27 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r338238 - in head/sbin/init: . rc.d
Message-ID:  <201808230506.w7N56RTX063052@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Thu Aug 23 05:06:27 2018
New Revision: 338238
URL: https://svnweb.freebsd.org/changeset/base/338238

Log:
  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

Modified:
  head/sbin/init/rc.conf
  head/sbin/init/rc.d/devmatch

Modified: head/sbin/init/rc.conf
==============================================================================
--- head/sbin/init/rc.conf	Thu Aug 23 05:06:22 2018	(r338237)
+++ head/sbin/init/rc.conf	Thu Aug 23 05:06:27 2018	(r338238)
@@ -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.

Modified: head/sbin/init/rc.d/devmatch
==============================================================================
--- head/sbin/init/rc.d/devmatch	Thu Aug 23 05:06:22 2018	(r338237)
+++ head/sbin/init/rc.d/devmatch	Thu Aug 23 05:06:27 2018	(r338238)
@@ -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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201808230506.w7N56RTX063052>