]> git.pld-linux.org Git - packages/geninitrd.git/commitdiff
- rel 2; replace buggy shell code for find_modules_by_class and use lspci only.
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Wed, 26 Oct 2011 19:55:53 +0000 (19:55 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    geninitrd-svn.patch -> 2.7
    geninitrd.spec -> 2.189

geninitrd-svn.patch
geninitrd.spec

index a513e042bea208527fad0f49b7f1bb112350d125..af55f9552d341c855d88fdc13782f38cb62cc601 100644 (file)
-Index: mod-usbkbd.sh
-===================================================================
---- mod-usbkbd.sh      (wersja 0)
-+++ mod-usbkbd.sh      (wersja 12376)
-@@ -0,0 +1,45 @@
-+#!/bin/sh
-+SATA_RCSID='$Revision$ $Date$'
-+
-+# geninitrd mod: usbkbd
-+
-+# setup geninitrd module
-+# @access     public
-+setup_mod_usbkbd() {
-+}
-+
-+find_modules_usbkbd() {
-+      debug "Finding USB keyboard modules"
-+
-+      if [ "$(echo /sys/class/input/input*)" = "/sys/class/input/input*" ]; then
-+              return
-+      fi
-+
-+      local modules
-+
-+      for i in /sys/class/input/input*; do
-+              [ ! -f $i/device/bInterfaceClass -o ! -f $i/device/bInterfaceProtocol ] && continue
-+              bInterfaceClass=$(cat $i/device/bInterfaceClass)
-+              bInterfaceProtocol=$(cat $i/device/bInterfaceProtocol)
-+              if [ "$bInterfaceClass" = "03" -a "$bInterfaceProtocol" = "01" ]; then
-+                      module=$(readlink $i/device/driver/module)
-+                      module=$(basename $module)
-+
-+                      if [ -n "$module" ]; then
-+                              debug "Found USB Keyboard: $(cat $i/name)"
-+                              modules="$modules $module"
-+                      fi
-+              fi
-+      done
-+
-+      if [ -n "$modules" ]; then
-+              # usb controllers
-+              for m in $(find_modules_by_class "0c03"); do
-+                      find_module $m
-+              done
-+
-+              for m in $modules; do
-+                      find_module $m
-+              done
-+      fi
-+}
-Index: geninitrd
-===================================================================
---- geninitrd  (wersja 12345)
-+++ geninitrd  (kopia robocza)
-@@ -613,7 +613,7 @@
-                       [ "$FIRMWAREDIR" != "$firmware" ] && inst_d /lib/firmware/$FIRMWAREDIR
-                       inst /lib/firmware/$firmware /lib/firmware/$firmware
-               else
--                      die "firmware file /lib/firmware/$firmware nor /lib/firmware/$kernel/$firmware found."
-+                      warn "Possible missing firmware file /lib/firmware/$firmware or /lib/firmware/$kernel/$firmware for module $module."
-               fi
-       done
-@@ -915,7 +915,7 @@
-       warn "/proc filesystem not mounted, may cause wrong results or failure."
- fi
--geninitrd_load_mods ide luks multipath dmraid lvm md blkid udev tuxonice suspend fbsplash condecor bootsplash uvesafb nfs sata scsi
-+geninitrd_load_mods ide luks multipath dmraid lvm md blkid udev tuxonice suspend fbsplash condecor bootsplash uvesafb nfs sata scsi usbkbd
- while [ $# -gt 0 ]; do
-       case $1 in
-@@ -1157,6 +1157,9 @@
-       find_module "$FBMODULE"
- fi
-+# autodetect USB keyboards
-+find_modules_usbkbd
-+
- # allow forcing loading SCSI and/or IDE modules
- # XXX: where ADDSCSI cames from? drop?
- if is_yes "$ADDSCSI"; then
-Index: mod-luks.sh
-===================================================================
---- mod-luks.sh        (wersja 12345)
-+++ mod-luks.sh        (kopia robocza)
-@@ -119,7 +119,7 @@
-       while read dst src key opt; do
-               [ -z "$dst" -o "${dst#\#}" != "$dst" ] && continue
--              [ "$src" != "$LUKSDEV" ] && continue
-+              [ "$src" != "$LUKSDEV" ] && [ "$(readlink -f $src)" != "$LUKSDEV" ] && continue
-               if [ -n "$key" -a "x$key" != "xnone" ]; then
-                       if test -e "$key" ; then
-@@ -155,11 +155,23 @@
-                       # cryptsetup can be called twice and in case on crypt on lvm only second
-                       # will succeed because there will be no src device in first cryptsetup call
-                       # this can be called multiple times, before lvm and after lvm.
--                      if [ -e "$src" ]; then
-+                      luksdev='$src'
-+                      if [ \${luksdev##/dev/disk/by-uuid/} != \${luksdev} ]; then
-+                              src_uuid=\${luksdev##/dev/disk/by-uuid/}
-+                              while read x y z name; do
-+                                      found_uuid=\$(cryptsetup luksUUID /dev/\${name} 2>/dev/null)
-+                                      if [ "\$found_uuid" = "\$src_uuid" ]; then
-+                                              luksdev=/dev/\$name
-+                                              break
-+                                      fi
-+                              done < /proc/partitions
-+                      fi
-+
-+                      if [ -e "\$luksdev" ]; then
-                               crypt_status=\$(cryptsetup status '$dst')
-                               if [ "\${crypt_status%%is inactive.}" != "\$crypt_status" ]; then
-                                       # is inactive
--                                      cryptsetup ${keyfile:+-d $keyfile} luksOpen '$src' '$dst' <&1
-+                                      cryptsetup ${keyfile:+-d $keyfile} luksOpen "\$luksdev" '$dst' <&1
-                               fi
-                       fi
 Index: functions
 ===================================================================
---- functions  (wersja 12345)
+--- functions  (wersja 12390)
 +++ functions  (kopia robocza)
-@@ -166,3 +166,46 @@
-       local node="$1"
-       printf "/dev/mapper/%s" $(dm_name "$node")
- }
-+
-+# find modules by class eg
-+# find_modules_by_class 0106 - finds modules for SATA devices in the system
-+# find_modules_by_class 0c03 - finds modules for USB controllers
-+find_modules_by_class() {
-+      local req_class="$1"
-+
-+      pcimap="/lib/modules/$kernel/modules.pcimap"
-+
-+      lspci=$(find_tool /sbin/lspci)
-+      if [ ! -x "$lspci" ]; then
-+              warn "Failed to execute lspci. Is pciutils package installed?"
-+      fi
-+
-+      # no pcimap, nothing to lookup from
-+      if [ ! -f "$pcimap" ]; then
-+              return
-+      fi
-+
-+      if [ -z "$lspci" ]; then
-+              return
-+      fi
-+
-+      set -- $($lspci -n | awk -vclass=$req_class '$2 == class":" {split($3, p, ":"); printf("0x0000%s 0x0000%s\n", p[1], p[2])}')
-+
-+      req_class="0x${req_class}00"
-+
-+      local PCI_ANY_ID=0xffffffff pci_module vendor device subvendor subdevice class class_mask driver_data
-+      while read pci_module vendor device subvendor subdevice class class_mask driver_data; do
-+              # ignore program interface (last two digits) - we want any
-+              class_mask=$(($class_mask & 0xffffff00))
-+              # some devices (like hcd) have very specific class
-+              class=$(($class & $class_mask))
-+              [ "$(($req_class & $class_mask))" = "$class" ] || continue
-+              # match vendor
-+              [ "$1" = "$vendor" -o "$vendor" = "$PCI_ANY_ID" ] || continue
-+              # match device, allow PCI_ANY_ID
-+              [ "$2" = "$device" -o "$device" = "$PCI_ANY_ID" ] || continue
-+
-+              echo "$pci_module"
-+      done < $pcimap
-+}
-+
-Index: Makefile
-===================================================================
---- Makefile   (wersja 12345)
-+++ Makefile   (kopia robocza)
-@@ -1,6 +1,6 @@
- # when making release, make sure you do it as RELEASE document describes
- VERSION               := 12345
--MODS          := ide luks multipath dmraid lvm md blkid udev tuxonice suspend fbsplash condecor bootsplash uvesafb nfs sata scsi
-+MODS          := ide luks multipath dmraid lvm md blkid udev tuxonice suspend fbsplash condecor bootsplash uvesafb nfs sata scsi usbkbd
- FILES_MODS  := $(MODS:%=mod-%.sh)
- FILES_ADDON := extract-ikconfig
- FILES         := Makefile geninitrd.sysconfig geninitrd functions $(FILES_MODS) $(FILES_ADDON) geninitrd.8 geninitrd.8.xml ChangeLog
-Index: mod-sata.sh
-===================================================================
---- mod-sata.sh        (wersja 12345)
-+++ mod-sata.sh        (kopia robocza)
-@@ -6,43 +6,8 @@
- # setup geninitrd module
- # @access     public
- setup_mod_sata() {
--      lspci=$(find_tool /sbin/lspci)
--
--      pcimap="/lib/modules/$kernel/modules.pcimap"
--
--      if [ ! -x "$lspci" ]; then
--              warn "Failed to execute lspci. Is pciutils package installed?"
--      fi
- }
+@@ -189,23 +189,33 @@
+               return
+       fi
  
--# private until only mod-sata uses the function
--find_modules_by_class() {
--      local req_class=$1
--
--      # no pcimap, nothing to lookup from
--      if [ ! -f "$pcimap" ]; then
--              return
--      fi
--
--      if [ -z "$lspci" ]; then
--              return
--      fi
--
 -      set -- $($lspci -n | awk -vclass=$req_class '$2 == class":" {split($3, p, ":"); printf("0x0000%s 0x0000%s\n", p[1], p[2])}')
 -
--      local PCI_ANY_ID=0x0000ffff pci_module vendor device subvendor subdevice class class_mask driver_data
+-      req_class="0x${req_class}00"
+-
+-      local PCI_ANY_ID=0xffffffff pci_module vendor device subvendor subdevice class class_mask driver_data
 -      while read pci_module vendor device subvendor subdevice class class_mask driver_data; do
--              # match class
--              [ "$(($req_class & $class_mask))" = "$(($class))" ] || continue
+-              # ignore program interface (last two digits) - we want any
+-              class_mask=$(($class_mask & 0xffffff00))
+-              # some devices (like hcd) have very specific class
+-              class=$(($class & $class_mask))
+-              [ "$(($req_class & $class_mask))" = "$class" ] || continue
 -              # match vendor
--              [ "$1" = "$vendor" ] || continue
+-              [ "$1" = "$vendor" -o "$vendor" = "$PCI_ANY_ID" ] || continue
 -              # match device, allow PCI_ANY_ID
--              [ "$2" = "$device" -o $device = $PCI_ANY_ID ] || continue
+-              [ "$2" = "$device" -o "$device" = "$PCI_ANY_ID" ] || continue
 -
 -              echo "$pci_module"
 -      done < $pcimap
--}
--
- find_modules_sata() {
-       debug "Finding SATA modules (class=0x0106)"
++      lspci -p "$pcimap" -kvmmn | awk -vreq_class="${req_class}" '
++                                      BEGIN      { skip_modules[1]=""; modules[1]=""; xhci=""; ehci=""; ohci=""; uhci="" }
++                                      /^Slot:/   { found=0 }
++                                      /^Class:/  { if (req_class == $2) { found=1 } }
++                                      /^Driver:/ { if (found) {
++                                                              module=$2;
++                                                              if (module == "xhci_hcd") {
++                                                                      xhci="xhci_hcd"
++                                                              } else if (module == "ehci_hcd") {
++                                                                      ehci="ehci_hcd"
++                                                              } else if (module == "ohci_hcd") {
++                                                                      ohci="ohci_hcd"
++                                                              } else if (module == "uhci_hcd") {
++                                                                      uhci="uhci_hcd"
++                                                              } else if (!(module in skip_modules)) {
++                                                                      modules[cnt]=module
++                                                              }
++                                                              skip_modules[cnt]=module;
++                                                              cnt++;
++                                                 };
++                                                 found=0
++                                      }
++                                      END { 
++                                                 # xhci/ehci/ohci/uhci hack to preserve such order
++                                                 printf "%s %s %s %s", xhci, ehci, ohci, uhci;
++                                                 for (i in modules) { printf "%s ", modules[i]; };
++                                      }
++      '
+ }
  
index d73cb16bdb3d9621b692ade428ad39b048185585..1ef21ae85a7cf79e269cb86e5445f319537ad5e1 100644 (file)
@@ -7,7 +7,7 @@ Summary:        Creates an initial ramdisk image for preloading modules
 Summary(pl.UTF-8):     Narzędzie do tworzenia inicjalnego ramdysku używanego przy starcie systemu
 Name:          geninitrd
 Version:       12385
-Release:       1
+Release:       2
 License:       GPL
 Group:         Applications/System
 Source0:       %{name}-%{version}.tar.gz
@@ -93,7 +93,7 @@ bieżących informacji zawartych w /etc/modules.conf.
 %patch0 -p1
 %patch1 -p1
 %endif
-#%patch2 -p0
+%patch2 -p0
 
 %build
 %{__make}
This page took 0.116344 seconds and 4 git commands to generate.