backports: add blacklist module support
authorLuis R. Rodriguez <mcgrof@do-not-panic.com>
Wed, 10 Apr 2013 20:00:26 +0000 (13:00 -0700)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 10 Apr 2013 20:02:51 +0000 (22:02 +0200)
This lets us provide a simple map of new drivers and old
drivers that it replaces at install time. This generates
a blacklist via the file:

/etc/modprobe.d/backports.conf

Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
backport/.blacklist.map [new file with mode: 0644]
backport/Makefile.real
backport/scripts/blacklist.sh [new file with mode: 0755]
gentree.py

diff --git a/backport/.blacklist.map b/backport/.blacklist.map
new file mode 100644 (file)
index 0000000..dd58203
--- /dev/null
@@ -0,0 +1,10 @@
+# Update this map when a driver gets renamed or
+# symbols from old drivers get moved to a newer
+# driver. If you have the driver on the right
+# hand side it will be blacklisted upon installation
+# only if you actually installed the driver on the
+# left.
+
+# new-driver   old-driver
+iwlwifi                iwlagn
+iwl4965                iwlagn
index 40668c24d785bcb83b1f8c964bb8aace6c58330e..032a8d755539f2c24d1c17c3f40b1f48549b2b57 100644 (file)
@@ -87,6 +87,7 @@ install: modules
        @$(MAKE) -C $(KLIB_BUILD) M=$(BACKPORT_PWD)                     \
                INSTALL_MOD_DIR=$(KMODDIR) $(KMODPATH_ARG)              \
                modules_install
+       @./scripts/blacklist.sh $(KLIB)/ $(KLIB)/$(KMODDIR)
        @/sbin/depmod -ae
        @echo
        @echo Your backported driver modules should be installed now.
@@ -95,7 +96,5 @@ install: modules
 # FIXME:
 #      compress modules
 #      check depmod
-#      iwlwifi vs. iwlagn
-#      iwl4965 vs. iwlagn
 #      install/load/unload/... scripts?
 #      compat firmware class udev stuff
diff --git a/backport/scripts/blacklist.sh b/backport/scripts/blacklist.sh
new file mode 100755 (executable)
index 0000000..f941c4a
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+BLACKLIST_CONF="/etc/modprobe.d/backports.conf"
+BLACKLIST_MAP=".blacklist.map"
+
+MODULE_DIR=$1
+MODULE_UPDATES=$2
+
+if [[ ! -d $MODULE_DIR ]]; then
+       exit
+fi
+
+if [[ ! -d $MODULE_UPDATES ]]; then
+       exit
+fi
+
+mkdir -p $(dirname $BLACKLIST_CONF)
+rm -f $BLACKLIST_CONF
+
+echo "# To be used when using backported drivers" > $BLACKLIST_CONF
+
+for i in $(grep -v ^# $BLACKLIST_MAP | awk '{print $2}'); do
+       MODULE="${i}.ko"
+       MODULE_UPDATE="$(grep -v ^# $BLACKLIST_MAP | grep $i | awk '{print $1}' | head -1).ko"
+
+       COUNT=$(find $MODULE_DIR -type f -name ${MODULE} -or -name ${MODULE}.gz | wc -l)
+       COUNT_REPLACE=$(find $MODULE_UPDATES -type f -name ${MODULE_UPDATE} -or -name ${MODULE_UPDATE}.gz | wc -l)
+
+       if [ $COUNT -ne 0 ]; then
+               if [ $COUNT_REPLACE -ne 0 ]; then
+                       echo "Blacklisting $MODULE ..."
+                       echo blacklist $i >> $BLACKLIST_CONF
+               fi
+       fi
+done
index adef899c84f5ecced602e76d2a9a3e75f092b22e..199a2c97410f07d03370f83bc644f95a8b846ad7 100755 (executable)
@@ -324,6 +324,7 @@ def process(kerneldir, outdir, copy_list_file, git_revision=None,
     backport_files = [(x, x) for x in [
         'Kconfig', 'Makefile', 'Makefile.build', 'Makefile.kernel', '.gitignore',
         'Makefile.real', 'compat/', 'include/', 'kconfig/', 'defconfigs/',
+        'scripts/', '.blacklist.map',
     ]]
     if not args.git_revision:
         logwrite('Copy original source files ...')