diff options
| author | Chris Rees <crees@FreeBSD.org> | 2019-04-10 07:51:13 +0000 |
|---|---|---|
| committer | Chris Rees <crees@FreeBSD.org> | 2019-04-10 07:51:13 +0000 |
| commit | b11974c250671368e1eb869ca8ce2ed70622917f (patch) | |
| tree | 6a72929289abd316b748c481b2d507a155555aea /libexec/rc | |
| parent | 7b8b0fdba02ab829870d1b60d997e577c225a7a8 (diff) | |
Notes
Diffstat (limited to 'libexec/rc')
| -rwxr-xr-x | libexec/rc/rc.d/abi | 4 | ||||
| -rwxr-xr-x | libexec/rc/rc.d/bthidd | 8 | ||||
| -rwxr-xr-x | libexec/rc/rc.d/cfumass | 2 | ||||
| -rwxr-xr-x | libexec/rc/rc.d/kld | 2 | ||||
| -rwxr-xr-x | libexec/rc/rc.d/mdconfig | 2 | ||||
| -rwxr-xr-x | libexec/rc/rc.d/mdconfig2 | 2 | ||||
| -rwxr-xr-x | libexec/rc/rc.d/mountcritremote | 2 | ||||
| -rwxr-xr-x | libexec/rc/rc.d/syscons | 2 | ||||
| -rw-r--r-- | libexec/rc/rc.subr | 43 |
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 } |
