aboutsummaryrefslogtreecommitdiff
path: root/libexec/rc
diff options
context:
space:
mode:
authorChris Rees <crees@FreeBSD.org>2019-04-10 07:51:13 +0000
committerChris Rees <crees@FreeBSD.org>2019-04-10 07:51:13 +0000
commitb11974c250671368e1eb869ca8ce2ed70622917f (patch)
tree6a72929289abd316b748c481b2d507a155555aea /libexec/rc
parent7b8b0fdba02ab829870d1b60d997e577c225a7a8 (diff)
Notes
Diffstat (limited to 'libexec/rc')
-rwxr-xr-xlibexec/rc/rc.d/abi4
-rwxr-xr-xlibexec/rc/rc.d/bthidd8
-rwxr-xr-xlibexec/rc/rc.d/cfumass2
-rwxr-xr-xlibexec/rc/rc.d/kld2
-rwxr-xr-xlibexec/rc/rc.d/mdconfig2
-rwxr-xr-xlibexec/rc/rc.d/mdconfig22
-rwxr-xr-xlibexec/rc/rc.d/mountcritremote2
-rwxr-xr-xlibexec/rc/rc.d/syscons2
-rw-r--r--libexec/rc/rc.subr43
9 files changed, 43 insertions, 24 deletions
diff --git a/libexec/rc/rc.d/abi b/libexec/rc/rc.d/abi
index 49766abb3895e..bf582219a1f79 100755
--- a/libexec/rc/rc.d/abi
+++ b/libexec/rc/rc.d/abi
@@ -27,10 +27,10 @@ linux_start()
local _tmpdir
echo -n ' linux'
- load_kld linux
+ load_kld -e 'linux(aout|elf)' linux
case `sysctl -n hw.machine_arch` in
amd64)
- load_kld linux64
+ load_kld -e 'linux64elf' linux64
;;
esac
if [ -x /compat/linux/sbin/ldconfigDisabled ]; then
diff --git a/libexec/rc/rc.d/bthidd b/libexec/rc/rc.d/bthidd
index 6ebc52f3c4c19..6471522641878 100755
--- a/libexec/rc/rc.d/bthidd
+++ b/libexec/rc/rc.d/bthidd
@@ -34,11 +34,11 @@ evdev_enabled()
bthidd_prestart()
{
if evdev_enabled; then
- load_kld uinput
+ load_kld -m uinput uinput
fi
- load_kld kbdmux
- load_kld vkbd
- load_kld ng_btsocket
+ load_kld -m kbdmux kbdmux
+ load_kld -m vkbd vkbd
+ load_kld -m ng_btsocket ng_btsocket
return 0
}
diff --git a/libexec/rc/rc.d/cfumass b/libexec/rc/rc.d/cfumass
index 7612462bba300..9e34ddaf4b73f 100755
--- a/libexec/rc/rc.d/cfumass
+++ b/libexec/rc/rc.d/cfumass
@@ -75,7 +75,7 @@ cfumass_start()
return "${err}"
fi
- load_kld cfumass
+ load_kld -e cfumass cfumass
# If the template is already switched to Mass Storage, then reset
# it to -1 to force the host to reenumerate it; otherwise it might
diff --git a/libexec/rc/rc.d/kld b/libexec/rc/rc.d/kld
index 3a77a73525ad1..d3829efe824a0 100755
--- a/libexec/rc/rc.d/kld
+++ b/libexec/rc/rc.d/kld
@@ -46,7 +46,7 @@ kld_start()
echo 'Loading kernel modules:'
for _kld in $kld_list ; do
- load_kld $_kld
+ load_kld -e ${_kld}.ko $_kld
done
}
diff --git a/libexec/rc/rc.d/mdconfig b/libexec/rc/rc.d/mdconfig
index 9efcead132b1e..26f282bbe9508 100755
--- a/libexec/rc/rc.d/mdconfig
+++ b/libexec/rc/rc.d/mdconfig
@@ -114,7 +114,7 @@ mdconfig_start()
continue
fi
if [ "${_file}" != "${_file%.uzip}" ]; then
- load_kld geom_uzip || return 3
+ load_kld -m g_uzip geom_uzip || return 3
# sleep a bit to allow creation of /dev/mdX.uzip
sleep 2
fi
diff --git a/libexec/rc/rc.d/mdconfig2 b/libexec/rc/rc.d/mdconfig2
index 25ac903da6a3e..3a7f263d19e14 100755
--- a/libexec/rc/rc.d/mdconfig2
+++ b/libexec/rc/rc.d/mdconfig2
@@ -123,7 +123,7 @@ mdconfig2_start()
# been created.
if [ "${_type}" = "vnode" -a "${_fs}" != "/" ]; then
if [ "${_file}" != "${_file%.uzip}" ]; then
- load_kld geom_uzip || return 3
+ load_kld -m g_uzip geom_uzip || return 3
fi
if is_readonly ${_fs}; then
warn "${_fs} is mounted read-only, skipping ${_md}."
diff --git a/libexec/rc/rc.d/mountcritremote b/libexec/rc/rc.d/mountcritremote
index c87f6e76518ab..dede14f194682 100755
--- a/libexec/rc/rc.d/mountcritremote
+++ b/libexec/rc/rc.d/mountcritremote
@@ -27,7 +27,7 @@ mountcritremote_precmd()
case "`mount -d -a -t nfs 2> /dev/null`" in
*mount_nfs*)
# Handle absent nfs client support
- load_kld nfscl || return 1
+ load_kld -m nfs nfscl || return 1
;;
esac
return 0
diff --git a/libexec/rc/rc.d/syscons b/libexec/rc/rc.d/syscons
index d2512dc071438..7c0c8035be2ea 100755
--- a/libexec/rc/rc.d/syscons
+++ b/libexec/rc/rc.d/syscons
@@ -346,7 +346,7 @@ syscons_start()
for i in `kldstat | awk '$5 ~ "_saver\.ko$" { print $5 }'`; do
kldunload ${i}
done
- load_kld ${saver}_saver
+ load_kld -e _saver ${saver}_saver
;;
esac
diff --git a/libexec/rc/rc.subr b/libexec/rc/rc.subr
index 2677cf4de7f84..93d2cfda87b77 100644
--- a/libexec/rc/rc.subr
+++ b/libexec/rc/rc.subr
@@ -1853,29 +1853,48 @@ mount_md()
}
# Code common to scripts that need to load a kernel module
-# if it isn't in the kernel yet. Syntax:
-# load_kld file
+# if it isn't in the kernel yet. Syntax:
+# load_kld [-e regex] [-m module] file
+# where -e or -m chooses the way to check if the module
+# is already loaded:
+# regex is egrep'd in the output from `kldstat -v',
+# module is passed to `kldstat -m'.
+# The default way is as though `-m file' were specified.
load_kld()
{
- local _opt
+ local _loaded _mod _opt _re
- # Silently ignore legacy options; they are unnecessary
while getopts "e:m:" _opt; do
case "$_opt" in
- e) ;;
- m) ;;
- *) err 3 'USAGE: load_kld file' ;;
+ e) _re="$OPTARG" ;;
+ m) _mod="$OPTARG" ;;
+ *) err 3 'USAGE: load_kld [-e regex] [-m module] file' ;;
esac
done
shift $(($OPTIND - 1))
if [ $# -ne 1 ]; then
- err 3 'USAGE: load_kld file'
+ err 3 'USAGE: load_kld [-e regex] [-m module] file'
fi
- if ! kldload -n "$1"; then
- warn "Unable to load kernel module $1"
- return 1
+ _mod=${_mod:-$1}
+ _loaded=false
+ if [ -n "$_re" ]; then
+ if kldstat -v | egrep -q -e "$_re"; then
+ _loaded=true
+ fi
+ else
+ if kldstat -q -m "$_mod"; then
+ _loaded=true
+ fi
+ fi
+ if ! $_loaded; then
+ if ! kldload "$1"; then
+ warn "Unable to load kernel module $1"
+ return 1
+ else
+ info "$1 kernel module loaded."
+ fi
else
- info "$1 kernel module loaded."
+ debug "load_kld: $1 kernel module already loaded."
fi
return 0
}