101 lines
4.2 KiB
Diff
101 lines
4.2 KiB
Diff
From d23159a69c818274486f1287ba6267b96f3febb7 Mon Sep 17 00:00:00 2001
|
|
From: John Reiser <jreiser@bitwagon.com>
|
|
Date: Fri, 23 Sep 2011 09:17:13 -0700
|
|
Subject: [PATCH] dracut [PATCH]es: parallelize block_module filter and
|
|
net_module_filter
|
|
|
|
Filtering modules requires enough work that instmods() in the
|
|
next pipeline stage was rarely busy. Parallelize the two
|
|
filters which do the most work. Also fix a filename-vs-contents
|
|
mistake in net_module_filter.
|
|
|
|
--
|
|
John Reiser, jreiser@BitWagon.com
|
|
|
|
>From f4533a2ceca52c443ddebec01eeaa35d51c39c1b Mon Sep 17 00:00:00 2001
|
|
From: John Reiser <jreiser@BitWagon.com>
|
|
Date: Tue, 13 Sep 2011 17:41:43 -0700
|
|
Subject: [PATCH 1/3] Parallelize block_module_filter
|
|
---
|
|
modules.d/40network/module-setup.sh | 33 +++++++++++++++++----------
|
|
modules.d/90kernel-modules/module-setup.sh | 22 +++++++++++++-----
|
|
2 files changed, 37 insertions(+), 18 deletions(-)
|
|
|
|
diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh
|
|
index cb81269..03684f1 100755
|
|
--- a/modules.d/40network/module-setup.sh
|
|
+++ b/modules.d/40network/module-setup.sh
|
|
@@ -27,18 +27,27 @@ installkernel() {
|
|
net_module_filter() {
|
|
local _net_drivers='eth_type_trans|register_virtio_device'
|
|
local _unwanted_drivers='/(wireless|isdn|uwb)/'
|
|
- local _fname
|
|
- while read _fname; do
|
|
- local _fcont
|
|
- case "$_fname" in
|
|
- *.ko) _fcont="$(< $_fname)" ;;
|
|
- *.ko.gz) _fcont="$(gzip -dc $_fname)" ;;
|
|
- esac
|
|
- [[ $_fcont =~ $_net_drivers
|
|
- && ! $_fcont =~ iw_handler_get_spy \
|
|
- && ! $_fname =~ $_unwanted_drivers ]] \
|
|
- && echo "$_fname"
|
|
- done
|
|
+ function nmf1() {
|
|
+ local _fname _fcont
|
|
+ while read _fname; do
|
|
+ [[ $_fname =~ $_unwanted_drivers ]] && continue
|
|
+ case "$_fname" in
|
|
+ *.ko) _fcont="$(< $_fname)" ;;
|
|
+ *.ko.gz) _fcont="$(gzip -dc $_fname)" ;;
|
|
+ esac
|
|
+ [[ $_fcont =~ $_net_drivers
|
|
+ && ! $_fcont =~ iw_handler_get_spy ]] \
|
|
+ && echo "$_fname"
|
|
+ done
|
|
+ }
|
|
+ # Use two parallel streams to filter alternating modules.
|
|
+ local merge side2
|
|
+ ( ( local _f1 _f2
|
|
+ while read _f1; do echo "$_f1"
|
|
+ if read _f2; then echo "$_f2" 1>&${side2}; fi
|
|
+ done \
|
|
+ | nmf1 1>&${merge} ) {side2}>&1 \
|
|
+ | nmf1 ) {merge}>&1
|
|
}
|
|
|
|
find_kernel_modules_by_path drivers/net | net_module_filter | instmods
|
|
diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh
|
|
index 9fc4248..09bd87e 100755
|
|
--- a/modules.d/90kernel-modules/module-setup.sh
|
|
+++ b/modules.d/90kernel-modules/module-setup.sh
|
|
@@ -11,12 +11,22 @@ installkernel() {
|
|
}
|
|
block_module_filter() {
|
|
local _blockfuncs='ahci_init_controller|ata_scsi_ioctl|scsi_add_host|blk_init_queue|register_mtd_blktrans|scsi_esp_register|register_virtio_device'
|
|
- local _f
|
|
- while read _f; do case "$_f" in
|
|
- *.ko) [[ $(< $_f) =~ $_blockfuncs ]] && echo "$_f" ;;
|
|
- *.ko.gz) [[ $(gzip -dc <$_f) =~ $_blockfuncs ]] && echo "$_f" ;;
|
|
- esac
|
|
- done
|
|
+ function bmf1() {
|
|
+ local _f
|
|
+ while read _f; do case "$_f" in
|
|
+ *.ko) [[ $(< $_f) =~ $_blockfuncs ]] && echo "$_f" ;;
|
|
+ *.ko.gz) [[ $(gzip -dc <$_f) =~ $_blockfuncs ]] && echo "$_f" ;;
|
|
+ esac
|
|
+ done
|
|
+ }
|
|
+ # Use two parallel streams to filter alternating modules.
|
|
+ local merge side2
|
|
+ ( ( local _f1 _f2
|
|
+ while read _f1; do echo "$_f1"
|
|
+ if read _f2; then echo "$_f2" 1>&${side2}; fi
|
|
+ done \
|
|
+ | bmf1 1>&${merge} ) {side2}>&1 \
|
|
+ | bmf1 ) {merge}>&1
|
|
}
|
|
hostonly='' instmods sr_mod sd_mod scsi_dh scsi_dh_rdac scsi_dh_emc
|
|
hostonly='' instmods pcmcia firewire-ohci
|