summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/kmod/0001-depmod-fix-parsing-of-modules.order-with-compressed-.patch165
-rw-r--r--core/kmod/0001-libkmod-Add-support-for-.-in-module-parameter-on-kcm.patch33
-rw-r--r--core/kmod/PKGBUILD14
3 files changed, 210 insertions, 2 deletions
diff --git a/core/kmod/0001-depmod-fix-parsing-of-modules.order-with-compressed-.patch b/core/kmod/0001-depmod-fix-parsing-of-modules.order-with-compressed-.patch
new file mode 100644
index 000000000..8c4ecf83c
--- /dev/null
+++ b/core/kmod/0001-depmod-fix-parsing-of-modules.order-with-compressed-.patch
@@ -0,0 +1,165 @@
+From 88c247f7f18ac25181ddcaff97fbbecbd3a29f57 Mon Sep 17 00:00:00 2001
+From: Lucas De Marchi <lucas.de.marchi@gmail.com>
+Date: Wed, 3 Oct 2012 16:28:24 -0300
+Subject: [PATCH] depmod: fix parsing of modules.order with compressed modules
+
+We now index the modules by uncompressed-relative-path instead of
+relative-path. This is because the file modules.order, coming from
+kernel, always comes with uncompressed paths. This fixes the issue of
+not sorting the aliases correctly due to paths not matching when using
+compressed modules.
+---
+ tools/depmod.c | 46 +++++++++++++++++++++++++++++-----------------
+ 1 file changed, 29 insertions(+), 17 deletions(-)
+
+diff --git a/tools/depmod.c b/tools/depmod.c
+index 0bf2dea..ff19d6e 100644
+--- a/tools/depmod.c
++++ b/tools/depmod.c
+@@ -39,6 +39,8 @@
+ #define DEFAULT_VERBOSE LOG_WARNING
+ static int verbose = DEFAULT_VERBOSE;
+
++#define KMOD_EXT_UNC 0
++
+ static const struct kmod_ext {
+ const char *ext;
+ size_t len;
+@@ -1001,6 +1003,7 @@ struct mod {
+ uint16_t idx; /* index in depmod->modules.array */
+ uint16_t users; /* how many modules depend on this one */
+ uint8_t dep_loop : 1;
++ char *uncrelpath; /* same as relpath but ending in .ko */
+ char modname[];
+ };
+
+@@ -1014,7 +1017,7 @@ struct depmod {
+ const struct cfg *cfg;
+ struct kmod_ctx *ctx;
+ struct array modules;
+- struct hash *modules_by_relpath;
++ struct hash *modules_by_uncrelpath;
+ struct hash *modules_by_name;
+ struct hash *symbols;
+ unsigned int dep_loops;
+@@ -1025,6 +1028,7 @@ static void mod_free(struct mod *mod)
+ DBG("free %p kmod=%p, path=%s\n", mod, mod->kmod, mod->path);
+ array_free_array(&mod->deps);
+ kmod_module_unref(mod->kmod);
++ free(mod->uncrelpath);
+ free(mod);
+ }
+
+@@ -1066,10 +1070,10 @@ static int depmod_init(struct depmod *depmod, struct cfg *cfg,
+
+ array_init(&depmod->modules, 128);
+
+- depmod->modules_by_relpath = hash_new(512, NULL);
+- if (depmod->modules_by_relpath == NULL) {
++ depmod->modules_by_uncrelpath = hash_new(512, NULL);
++ if (depmod->modules_by_uncrelpath == NULL) {
+ err = -errno;
+- goto modules_by_relpath_failed;
++ goto modules_by_uncrelpath_failed;
+ }
+
+ depmod->modules_by_name = hash_new(512, NULL);
+@@ -1089,8 +1093,8 @@ static int depmod_init(struct depmod *depmod, struct cfg *cfg,
+ symbols_failed:
+ hash_free(depmod->modules_by_name);
+ modules_by_name_failed:
+- hash_free(depmod->modules_by_relpath);
+-modules_by_relpath_failed:
++ hash_free(depmod->modules_by_uncrelpath);
++modules_by_uncrelpath_failed:
+ return err;
+ }
+
+@@ -1100,7 +1104,7 @@ static void depmod_shutdown(struct depmod *depmod)
+
+ hash_free(depmod->symbols);
+
+- hash_free(depmod->modules_by_relpath);
++ hash_free(depmod->modules_by_uncrelpath);
+
+ hash_free(depmod->modules_by_name);
+
+@@ -1114,7 +1118,7 @@ static void depmod_shutdown(struct depmod *depmod)
+ static int depmod_module_add(struct depmod *depmod, struct kmod_module *kmod)
+ {
+ const struct cfg *cfg = depmod->cfg;
+- const char *modname;
++ const char *modname, *lastslash;
+ size_t modnamelen;
+ struct mod *mod;
+ int err;
+@@ -1134,7 +1138,8 @@ static int depmod_module_add(struct depmod *depmod, struct kmod_module *kmod)
+ array_init(&mod->deps, 4);
+
+ mod->path = kmod_module_get_path(kmod);
+- mod->baselen = strrchr(mod->path, '/') - mod->path;
++ lastslash = strrchr(mod->path, '/');
++ mod->baselen = lastslash - mod->path;
+ if (strncmp(mod->path, cfg->dirname, cfg->dirnamelen) == 0 &&
+ mod->path[cfg->dirnamelen] == '/')
+ mod->relpath = mod->path + cfg->dirnamelen + 1;
+@@ -1144,25 +1149,32 @@ static int depmod_module_add(struct depmod *depmod, struct kmod_module *kmod)
+ err = hash_add_unique(depmod->modules_by_name, mod->modname, mod);
+ if (err < 0) {
+ ERR("hash_add_unique %s: %s\n", mod->modname, strerror(-err));
+- free(mod);
+- return err;
++ goto fail;
+ }
+
+ if (mod->relpath != NULL) {
+- err = hash_add_unique(depmod->modules_by_relpath,
+- mod->relpath, mod);
++ size_t uncrelpathlen = lastslash - mod->relpath + modnamelen
++ + kmod_exts[KMOD_EXT_UNC].len;
++ mod->uncrelpath = memdup(mod->relpath, uncrelpathlen + 1);
++ mod->uncrelpath[uncrelpathlen] = '\0';
++ err = hash_add_unique(depmod->modules_by_uncrelpath,
++ mod->uncrelpath, mod);
+ if (err < 0) {
+ ERR("hash_add_unique %s: %s\n",
+ mod->relpath, strerror(-err));
+ hash_del(depmod->modules_by_name, mod->modname);
+- free(mod);
+- return err;
++ goto fail;
+ }
+ }
+
+ DBG("add %p kmod=%p, path=%s\n", mod, kmod, mod->path);
+
+ return 0;
++
++fail:
++ free(mod->uncrelpath);
++ free(mod);
++ return err;
+ }
+
+ static int depmod_module_del(struct depmod *depmod, struct mod *mod)
+@@ -1170,7 +1182,7 @@ static int depmod_module_del(struct depmod *depmod, struct mod *mod)
+ DBG("del %p kmod=%p, path=%s\n", mod, mod->kmod, mod->path);
+
+ if (mod->relpath != NULL)
+- hash_del(depmod->modules_by_relpath, mod->relpath);
++ hash_del(depmod->modules_by_uncrelpath, mod->relpath);
+
+ hash_del(depmod->modules_by_name, mod->modname);
+
+@@ -1472,7 +1484,7 @@ static void depmod_modules_sort(struct depmod *depmod)
+ continue;
+ line[len - 1] = '\0';
+
+- mod = hash_find(depmod->modules_by_relpath, line);
++ mod = hash_find(depmod->modules_by_uncrelpath, line);
+ if (mod == NULL)
+ continue;
+ mod->sort_idx = idx - total;
+--
+1.7.12.4
+
diff --git a/core/kmod/0001-libkmod-Add-support-for-.-in-module-parameter-on-kcm.patch b/core/kmod/0001-libkmod-Add-support-for-.-in-module-parameter-on-kcm.patch
new file mode 100644
index 000000000..4ef3d2775
--- /dev/null
+++ b/core/kmod/0001-libkmod-Add-support-for-.-in-module-parameter-on-kcm.patch
@@ -0,0 +1,33 @@
+From 66f3228d17d66d7e2dd484427259290fbc82b2f0 Mon Sep 17 00:00:00 2001
+From: Lucas De Marchi <lucas.demarchi@profusion.mobi>
+Date: Mon, 8 Oct 2012 19:04:16 -0300
+Subject: [PATCH] libkmod: Add support for '.' in module parameter on kcmdline
+
+Otherwise we fail to parse arguments in kernel command line like
+testmodule.testparam=1.5G
+
+Suggested-by: Selim T. Erdogan <selim@alumni.cs.utexas.edu>
+---
+ libkmod/libkmod-config.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/libkmod/libkmod-config.c b/libkmod/libkmod-config.c
+index 70044f0..398468e 100644
+--- a/libkmod/libkmod-config.c
++++ b/libkmod/libkmod-config.c
+@@ -567,8 +567,10 @@ static int kmod_config_parse_kcmdline(struct kmod_config *config)
+ modname = p + 1;
+ break;
+ case '.':
+- *p = '\0';
+- param = p + 1;
++ if (param == NULL) {
++ *p = '\0';
++ param = p + 1;
++ }
+ break;
+ case '=':
+ if (param != NULL)
+--
+1.7.12.4
+
diff --git a/core/kmod/PKGBUILD b/core/kmod/PKGBUILD
index a35c01a4a..e5f78609e 100644
--- a/core/kmod/PKGBUILD
+++ b/core/kmod/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 166572 2012-09-12 13:25:27Z dreisner $
+# $Id: PKGBUILD 169581 2012-10-23 22:08:40Z dreisner $
# Maintainer: Dave Reisner <dreisner@archlinux.org>
pkgname=kmod
pkgver=10
-pkgrel=1
+pkgrel=2
pkgdesc="Linux kernel module handling"
arch=('i686' 'x86_64')
url='http://git.kernel.org/?p=utils/kernel/kmod/kmod.git;a=summary'
@@ -15,13 +15,23 @@ provides=('module-init-tools=3.16')
conflicts=('module-init-tools')
replaces=('module-init-tools')
source=("ftp://ftp.kernel.org/pub/linux/utils/kernel/$pkgname/$pkgname-$pkgver.tar.xz"
+ '0001-depmod-fix-parsing-of-modules.order-with-compressed-.patch'
+ '0001-libkmod-Add-support-for-.-in-module-parameter-on-kcm.patch'
"depmod-search.conf")
md5sums=('e2a883c4df15a50f78a7a61d5b64089f'
+ '47005a6e70496d429d40e3fc4fd89755'
+ 'ecf5bfd4fd9ed14cf0dc1ce4025d256b'
'dd62cbf62bd8f212f51ef8c43bec9a77')
build() {
cd "$pkgname-$pkgver"
+ # upstream commit 88c247f7f18ac25181ddcaff97fbbecbd3a29f57
+ patch -Np1 < "$srcdir/0001-depmod-fix-parsing-of-modules.order-with-compressed-.patch"
+
+ # upstream commit 66f3228d17d66d7e2dd484427259290fbc82b2f0
+ patch -Np1 < "$srcdir/0001-libkmod-Add-support-for-.-in-module-parameter-on-kcm.patch"
+
./configure \
--sysconfdir=/etc \
--enable-gtk-doc \