Package: hotplug Version: 0.0.20040329-25 Severity: wishlist Tags: patch
Attached is a patch for '/etc/hotplug/isapnp.rc'. To make the code line up better I put in about a dozen indentations, that may make it seem very busy, but it's simpler than it looks. Here's a diff without any cosmetic whitespace, only three lines changed: % diff -w /etc/hotplug/isapnp.rc /tmp/isapnp.rc 28,29c28,29 < cat /sys/bus/pnp/devices/*/id \ < | while read PNPID; do --- > for PNPDEVFILE in /sys/bus/pnp/devices/*/id ; do # loop through PNP device names > while read PNPID; do 54a55 > done < $PNPDEVFILE # like "cat FOO* | while read BAR", but faster Note: the variable name $PNPDEVFILE is arbitrary, and can safely be renamed to something more appropriate. How it works; the old loop did it this way: % cat /sys/bus/pnp/devices/*/id | while read F ; do echo $F ; done PNP0c01 PNP0c02 { ...etc...} PNP0303 ...the 'for ... | while' version does this: % for f in /sys/bus/pnp/devices/*/id ; do while read F ; do echo $F ; done < $f ; done PNP0c01 PNP0c02 { ...etc...} PNP0303 The code's a little longer, but 4x faster because it stays in the shell -- on my system anyway. A quick benchmark: % N=`seq 10000` # run it 10,000 times % time for n in $N ; do cat /sys/bus/pnp/devices/*/id | while read F ; do : ; done ; done real 1m4.128s user 0m18.254s sys 0m43.230s % time for n in $N ; do for f in /sys/bus/pnp/devices/*/id ; do while read F ; do : ; done < $f ; done done real 0m22.051s user 0m14.614s sys 0m6.989s Hope this helps... -- System Information: Debian Release: testing/unstable APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/dash Kernel: Linux 2.6.11-1-686 Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) (ignored: LC_ALL set to C) Versions of packages hotplug depends on: ii bash 3.0-15 The GNU Bourne Again SHell ii debconf [debconf-2.0] 1.4.54 Debian configuration management sy ii grep 2.5.1.ds1-5 GNU grep, egrep and fgrep ii module-init-tools 3.2-pre1-2 tools for managing Linux kernel mo ii modutils 2.4.27.0-3 Linux module utilities ii procps 1:3.2.5-1 /proc file system utilities ii sed 4.1.4-2 The GNU sed stream editor Versions of packages hotplug recommends: ii ifupdown 0.6.7 high level tools to configure netw ii pciutils 1:2.1.11-15 Linux PCI Utilities ii usbutils 0.71-5 USB console utilities -- debconf information: hotplug/ignore_pci_class_display: true hotplug/net_agent_policy: hotplug hotplug/static_module_list: * hotplug/usb_keyboard: hotplug/x11_usbmice_hack: false
--- /etc/hotplug/isapnp.rc 2005-07-11 13:59:14.000000000 -0400 +++ /tmp/isapnp.rc 2005-08-05 06:39:56.000000000 -0400 @@ -25,33 +25,34 @@ return 0 fi - cat /sys/bus/pnp/devices/*/id \ - | while read PNPID; do - # get the name of the module which should be loaded - MODULE=$(modprobe --show-depends -q pnp:d$PNPID \ + for PNPDEVFILE in /sys/bus/pnp/devices/*/id ; do # loop through PNP device names + while read PNPID; do + # get the name of the module which should be loaded + MODULE=$(modprobe --show-depends -q pnp:d$PNPID \ | sed -e '$!d;s/.*\/\(.*\)\.ko .*/\1/') - case "$MODULE" in - "") # continue if there is no alias available - continue - ;; - install*) # skip the blacklist check if install is used - MODULE="pnp:d$PNPID" - ;; - *) # ignore blacklisted devices - if is_blacklisted $MODULE; then - mesg " $MODULE: blacklisted" - continue - fi - ;; - esac + case "$MODULE" in + "") # continue if there is no alias available + continue + ;; + install*) # skip the blacklist check if install is used + MODULE="pnp:d$PNPID" + ;; + *) # ignore blacklisted devices + if is_blacklisted $MODULE; then + mesg " $MODULE: blacklisted" + continue + fi + ;; + esac - # see do_pnp_entry() in /usr/src/linux/scripts/file2alias.c - if $MODPROBE -q $MODULE; then - mesg " $MODULE: loaded successfully" - else - mesg " $MODULE: can't be loaded" - fi + # see do_pnp_entry() in /usr/src/linux/scripts/file2alias.c + if $MODPROBE -q $MODULE; then + mesg " $MODULE: loaded successfully" + else + mesg " $MODULE: can't be loaded" + fi + done < $PNPDEVFILE # like "cat FOO* | while read BAR", but faster done }