From aff92fcbb9389c891329e3508fc718f5599823c0 Mon Sep 17 00:00:00 2001 From: Doug Barton Date: Sat, 18 Jun 2011 19:41:05 +0000 Subject: [PATCH] Add rc.d/kld to load kernel modules after local disks are up. This method is many times faster than doing it in /boot/loader.conf. --- etc/defaults/rc.conf | 1 + etc/rc.d/Makefile | 2 +- etc/rc.d/kld | 53 ++++++++++++++++++++++++++++++++++++++++ etc/rc.d/var | 2 +- share/man/man5/rc.conf.5 | 10 +++++++- 5 files changed, 65 insertions(+), 3 deletions(-) create mode 100755 etc/rc.d/kld diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf index 2faf7fb59bcd..8dfd5e128789 100644 --- a/etc/defaults/rc.conf +++ b/etc/defaults/rc.conf @@ -38,6 +38,7 @@ ddb_enable="NO" # Set to YES to load ddb scripts at boot. 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). +#kld_list="" # Kernel modules to load after local disks are mounted kldxref_enable="NO" # Build linker.hints files with kldxref(8). kldxref_clobber="NO" # Overwrite old linker.hints at boot. kldxref_module_path="" # Override kern.module_path. A ';'-delimited list. diff --git a/etc/rc.d/Makefile b/etc/rc.d/Makefile index 887db41c891a..ada10f8f388c 100644 --- a/etc/rc.d/Makefile +++ b/etc/rc.d/Makefile @@ -18,7 +18,7 @@ FILES= DAEMON FILESYSTEMS LOGIN NETWORKING SERVERS \ ip6addrctl ipfilter ipfs ipfw ipmon \ ipnat ipsec ipxrouted \ jail \ - kadmind kerberos keyserv kldxref kpasswdd \ + kadmind kerberos keyserv kld kldxref kpasswdd \ ldconfig local localpkg lockd lpd \ mixer motd mountcritlocal mountcritremote mountlate \ mdconfig mdconfig2 mountd moused mroute6d mrouted msgs \ diff --git a/etc/rc.d/kld b/etc/rc.d/kld new file mode 100755 index 000000000000..946ec6951ce1 --- /dev/null +++ b/etc/rc.d/kld @@ -0,0 +1,53 @@ +#!/bin/sh + +# Copyright (c) 2011 Douglas Barton +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# +# PROVIDE: kld +# REQUIRE: FILESYSTEMS +# KEYWORD: nojail + +. /etc/rc.subr + +name="kld" + +start_cmd="${name}_start" +stop_cmd=':' + +kld_start() +{ + [ -n "$kld_list" ] || return + + local _kld + + echo 'Loading kernel modules:' + for _kld in $kld_list ; do + load_kld -e ${_kld}.ko $_kld + done +} + +load_rc_config $name +run_rc_command "$1" diff --git a/etc/rc.d/var b/etc/rc.d/var index 8e5bddefb84e..0655658bd967 100755 --- a/etc/rc.d/var +++ b/etc/rc.d/var @@ -28,7 +28,7 @@ # # PROVIDE: var -# REQUIRE: FILESYSTEMS +# REQUIRE: FILESYSTEMS kld . /etc/rc.subr diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5 index cf062c57c3be..fddb4f5e9301 100644 --- a/share/man/man5/rc.conf.5 +++ b/share/man/man5/rc.conf.5 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 27, 2011 +.Dd June 18, 2011 .Dt RC.CONF 5 .Os .Sh NAME @@ -196,6 +196,14 @@ Configuration file for .Xr ddb 8 . Default .Pa /etc/ddb.conf . +.It Va kld_list +.Pq Vt str +A list of kernel modules to load right after the local +disks are mounted. +Loading modules at this point in the boot process is +much faster than doing it via +.Pa /boot/loader.conf +for those modules not necessary for mounting local disk. .It Va kldxref_enable .Pq Vt bool Set to