diff options
Diffstat (limited to 'libre')
25 files changed, 369 insertions, 49 deletions
diff --git a/libre/cdfs-libre/PKGBUILD b/libre/cdfs-libre/PKGBUILD index 5afccbcfb..011b94f3a 100644 --- a/libre/cdfs-libre/PKGBUILD +++ b/libre/cdfs-libre/PKGBUILD @@ -6,7 +6,7 @@ _pkgname=cdfs pkgname=cdfs-libre pkgver=2.6.27 -pkgrel=31 +pkgrel=32 pkgdesc="File system module libre that 'exports' all tracks and boot images on a CD as normal files." arch=(i686 x86_64) url="http://www.elis.UGent.be/~ronsse/cdfs/" diff --git a/libre/linux-libre-kmod-alx/PKGBUILD b/libre/linux-libre-kmod-alx/PKGBUILD index fc86511e9..7dc94ab41 100644 --- a/libre/linux-libre-kmod-alx/PKGBUILD +++ b/libre/linux-libre-kmod-alx/PKGBUILD @@ -1,9 +1,11 @@ # Maintainer: André Silva <emulatorman@lavabit.com> -_kernver=3.6.2 +_kernver=3.6.3 +_kernrel=1 pkgname=('linux-libre-kmod-alx') +_pkgver=2012-10-03 pkgver=20121003 -pkgrel=1 +pkgrel=2 pkgdesc='Atheros alx ethernet device driver for linux-libre kernel' arch=('i686' 'x86_64') url='http://linuxwireless.org/' @@ -11,7 +13,7 @@ license=('GPL2') depends=("linux-libre=$_kernver") makedepends=("linux-libre-headers=$_kernver") install=linux-libre-kmod-alx.install -source=(http://linuxwireless.org/download/compat-wireless-2.6/compat-wireless-2012-10-03-pc.tar.bz2) +source=(http://linuxwireless.org/download/compat-wireless-2.6/compat-wireless-$_pkgver-pc.tar.bz2) md5sums=('7d541af2ae06eeaaadaba5b4fbcbfb13') @@ -20,17 +22,17 @@ build() { # current extramodules version _extraver=extramodules-3.6-LIBRE - cd ${srcdir}/compat-wireless-2012-10-03-pc + cd $srcdir/compat-wireless-$_pkgver-pc # replacing to specific linux-libre kernel version - sed -i -e 's/lib\/modules\/\$(shell uname -r)/usr\/lib\/modules\/3.6.2-1-LIBRE/' Makefile + sed -i -e "s/lib\/modules\/\$(shell uname -r)/usr\/lib\/modules\/$_kernver-$_kernrel-LIBRE/" Makefile ./scripts/driver-select alx make - cd ${srcdir}/compat-wireless-2012-10-03-pc/compat + cd $srcdir/compat-wireless-$_pkgver-pc/compat gzip -9 compat.ko - install -D -m 0644 compat.ko.gz ${pkgdir}/lib/modules/$_extraver/compat.ko.gz - cd ${srcdir}/compat-wireless-2012-10-03-pc/drivers/net/ethernet/atheros/alx + install -D -m 0644 compat.ko.gz $pkgdir/lib/modules/$_extraver/compat.ko.gz + cd $srcdir/compat-wireless-$_pkgver-pc/drivers/net/ethernet/atheros/alx gzip -9 alx.ko - install -D -m 0644 alx.ko.gz ${pkgdir}/lib/modules/$_extraver/alx.ko.gz + install -D -m 0644 alx.ko.gz $pkgdir/lib/modules/$_extraver/alx.ko.gz } diff --git a/libre/linux-libre-lts-kmod-alx/PKGBUILD b/libre/linux-libre-lts-kmod-alx/PKGBUILD index 646b3658a..c94d23b3d 100644 --- a/libre/linux-libre-lts-kmod-alx/PKGBUILD +++ b/libre/linux-libre-lts-kmod-alx/PKGBUILD @@ -1,9 +1,11 @@ # Maintainer: André Silva <emulatorman@lavabit.com> -_kernver=3.0.46 +_kernver=3.0.47 +_kernrel=1 pkgname=('linux-libre-lts-kmod-alx') +_pkgver=2012-10-03 pkgver=20121003 -pkgrel=1 +pkgrel=2 pkgdesc='Atheros alx ethernet device driver for linux-libre-lts kernel' arch=('i686' 'x86_64') url='http://linuxwireless.org/' @@ -11,7 +13,7 @@ license=('GPL2') depends=("linux-libre-lts=$_kernver") makedepends=("linux-libre-lts-headers=$_kernver") install=linux-libre-lts-kmod-alx.install -source=(http://linuxwireless.org/download/compat-wireless-2.6/compat-wireless-2012-10-03-pc.tar.bz2) +source=(http://linuxwireless.org/download/compat-wireless-2.6/compat-wireless-$_pkgver-pc.tar.bz2) md5sums=('7d541af2ae06eeaaadaba5b4fbcbfb13') @@ -20,17 +22,17 @@ build() { # current extramodules version _extraver=extramodules-3.0-LIBRE-LTS - cd ${srcdir}/compat-wireless-2012-10-03-pc + cd ${srcdir}/compat-wireless-$_pkgver-pc # replacing to specific linux-libre-lts kernel version - sed -i -e 's/lib\/modules\/\$(shell uname -r)/usr\/lib\/modules\/3.0.46-1-LIBRE-LTS/' Makefile + sed -i -e "s/lib\/modules\/\$(shell uname -r)/usr\/lib\/modules\/$_kernver-$_kernrel-LIBRE-LTS/" Makefile ./scripts/driver-select alx make - cd ${srcdir}/compat-wireless-2012-10-03-pc/compat + cd $srcdir/compat-wireless-$_pkgver-pc/compat gzip -9 compat.ko - install -D -m 0644 compat.ko.gz ${pkgdir}/lib/modules/$_extraver/compat.ko.gz - cd ${srcdir}/compat-wireless-2012-10-03-pc/drivers/net/ethernet/atheros/alx + install -D -m 0644 compat.ko.gz $pkgdir/lib/modules/$_extraver/compat.ko.gz + cd $srcdir/compat-wireless-$_pkgver-pc/drivers/net/ethernet/atheros/alx gzip -9 alx.ko - install -D -m 0644 alx.ko.gz ${pkgdir}/lib/modules/$_extraver/alx.ko.gz + install -D -m 0644 alx.ko.gz $pkgdir/lib/modules/$_extraver/alx.ko.gz } diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index d544abb26..65e5e55b0 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -7,10 +7,10 @@ pkgbase=linux-libre-lts # Build stock -LIBRE-LTS kernel #pkgbase=linux-libre-custom # Build kernel with a different name _basekernel=3.0 -_sublevel=46 +_sublevel=47 pkgver=${_basekernel}.${_sublevel} pkgrel=1 -_lxopkgver=${_basekernel}.45 # nearly always the same as pkgver +_lxopkgver=${_basekernel}.46 # nearly always the same as pkgver arch=('i686' 'x86_64' 'mips64el') url="http://linux-libre.fsfla.org/" license=('GPL2') @@ -28,9 +28,11 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn 'change-default-console-loglevel.patch' 'i915-fix-ghost-tv-output.patch' 'ext4-options.patch' + 'module-symbol-waiting-3.0.patch' + 'module-init-wait-3.0.patch' "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2") md5sums=('5f64180fe7df4e574dac5911b78f5067' - 'a2ced38cb23963b9efef79100f5885c5' + '6ad7f8f5b7230d1425dcb2c0bc336cf8' 'aed25ab047e1c0b020a1516c235c6a74' '7d37e8ce0f4bd5a957172b12ae742ea0' 'c072b17032e80debc6a8626299245d46' @@ -40,7 +42,9 @@ md5sums=('5f64180fe7df4e574dac5911b78f5067' '9d3c56a4b999c8bfbd4018089a62f662' '263725f20c0b9eb9c353040792d644e5' 'f36222e7ce20c8e4dc27376f9be60f6c' - '2fb6f217d649733bd5d977bf32c1f292') + '670931649c60fcb3ef2e0119ed532bd4' + '8a71abc4224f575008f974a099b5cf6f' + '546d9b9893e49bddf13a106f890caf94') if [ "$CARCH" != "mips64el" ]; then # Don't use the Loongson-specific patches on non-mips64el arches. unset source[${#source[@]}-1] @@ -78,6 +82,11 @@ build() { # https://bugs.archlinux.org/task/28653 patch -Np1 -i "${srcdir}/ext4-options.patch" + # fix module initialisation + # https://bugs.archlinux.org/task/32122 + patch -Np1 -i "${srcdir}/module-symbol-waiting-3.0.patch" + patch -Np1 -i "${srcdir}/module-init-wait-3.0.patch" + if [ "$CARCH" == "mips64el" ]; then sed -i "s|^EXTRAVERSION.*|EXTRAVERSION =-libre-lts|" Makefile sed -r "s|^( SUBLEVEL = ).*|\1$_sublevel|" \ diff --git a/libre/linux-libre-lts/linux-libre-lts.install b/libre/linux-libre-lts/linux-libre-lts.install index 57f19a417..3dc3be117 100644 --- a/libre/linux-libre-lts/linux-libre-lts.install +++ b/libre/linux-libre-lts/linux-libre-lts.install @@ -2,7 +2,7 @@ # arg 2: the old package version KERNEL_NAME=-lts -KERNEL_VERSION=3.0.46-1-LIBRE-LTS +KERNEL_VERSION=3.0.47-1-LIBRE-LTS # set a sane PATH to ensure that critical utils like depmod will be found export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' diff --git a/libre/linux-libre-lts/module-init-wait-3.0.patch b/libre/linux-libre-lts/module-init-wait-3.0.patch new file mode 100644 index 000000000..1bcfd2491 --- /dev/null +++ b/libre/linux-libre-lts/module-init-wait-3.0.patch @@ -0,0 +1,77 @@ +From: Rusty Russell <rusty@rustcorp.com.au> +Date: Fri, 28 Sep 2012 05:01:03 +0000 (+0930) +Subject: module: wait when loading a module which is currently initializing. +X-Git-Tag: v3.7-rc1~2^2~32 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=9bb9c3be568346538 + +module: wait when loading a module which is currently initializing. + +The original module-init-tools module loader used a fnctl lock on the +.ko file to avoid attempts to simultaneously load a module. +Unfortunately, you can't get an exclusive fcntl lock on a read-only +fd, making this not work for read-only mounted filesystems. +module-init-tools has a hacky sleep-and-loop for this now. + +It's not that hard to wait in the kernel, and only return -EEXIST once +the first module has finished loading (or continue loading the module +if the first one failed to initialize for some reason). It's also +consistent with what we do for dependent modules which are still loading. + +Suggested-by: Lucas De Marchi <lucas.demarchi@profusion.mobi> +Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> +--- + +diff --git a/kernel/module.c b/kernel/module.c +index 63cf6e7..74bc195 100644 +--- a/kernel/module.c ++++ b/kernel/module.c +@@ -2845,6 +2845,20 @@ static int post_relocation(struct module *mod, const struct load_info *info) + return module_finalize(info->hdr, info->sechdrs, mod); + } + ++/* Is this module of this name done loading? No locks held. */ ++static bool finished_loading(const char *name) ++{ ++ struct module *mod; ++ bool ret; ++ ++ mutex_lock(&module_mutex); ++ mod = find_module(name); ++ ret = !mod || mod->state != MODULE_STATE_COMING; ++ mutex_unlock(&module_mutex); ++ ++ return ret; ++} ++ + /* Allocate and load the module: note that size of section 0 is always + zero, and we rely on this for optional sections. */ + static struct module *load_module(void __user *umod, +@@ -2852,7 +2866,7 @@ static struct module *load_module(void __user *umod, + const char __user *uargs) + { + struct load_info info = { NULL, }; +- struct module *mod; ++ struct module *mod, *old; + long err; + + pr_debug("load_module: umod=%p, len=%lu, uargs=%p\n", +@@ -2918,8 +2932,18 @@ static struct module *load_module(void __user *umod, + * function to insert in a way safe to concurrent readers. + * The mutex protects against concurrent writers. + */ ++again: + mutex_lock(&module_mutex); +- if (find_module(mod->name)) { ++ if ((old = find_module(mod->name)) != NULL) { ++ if (old->state == MODULE_STATE_COMING) { ++ /* Wait in case it fails to load. */ ++ mutex_unlock(&module_mutex); ++ err = wait_event_interruptible(module_wq, ++ finished_loading(mod->name)); ++ if (err) ++ goto free_arch_cleanup; ++ goto again; ++ } + err = -EEXIST; + goto unlock; + } diff --git a/libre/linux-libre-lts/module-symbol-waiting-3.0.patch b/libre/linux-libre-lts/module-symbol-waiting-3.0.patch new file mode 100644 index 000000000..b87a38ff5 --- /dev/null +++ b/libre/linux-libre-lts/module-symbol-waiting-3.0.patch @@ -0,0 +1,66 @@ +From: Rusty Russell <rusty@rustcorp.com.au> +Date: Fri, 28 Sep 2012 05:01:03 +0000 (+0930) +Subject: module: fix symbol waiting when module fails before init +X-Git-Tag: v3.7-rc1~2^2~33 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=6f13909f4fe9652f1 + +module: fix symbol waiting when module fails before init + +We use resolve_symbol_wait(), which blocks if the module containing +the symbol is still loading. However: + +1) The module_wq we use is only woken after calling the modules' init + function, but there are other failure paths after the module is + placed in the linked list where we need to do the same thing. + +2) wake_up() only wakes one waiter, and our waitqueue is shared by all + modules, so we need to wake them all. + +3) wake_up_all() doesn't imply a memory barrier: I feel happier calling + it after we've grabbed and dropped the module_mutex, not just after + the state assignment. + +Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> +--- + +diff --git a/kernel/module.c b/kernel/module.c +index 7f2ee45f..63cf6e7 100644 +--- a/kernel/module.c ++++ b/kernel/module.c +@@ -2959,7 +2959,7 @@ static struct module *load_module(void __user *umod, + /* Unlink carefully: kallsyms could be walking list. */ + list_del_rcu(&mod->list); + module_bug_cleanup(mod); +- ++ wake_up_all(&module_wq); + ddebug: + dynamic_debug_remove(info.debug); + unlock: +@@ -3034,7 +3034,7 @@ SYSCALL_DEFINE3(init_module, void __user *, umod, + blocking_notifier_call_chain(&module_notify_list, + MODULE_STATE_GOING, mod); + free_module(mod); +- wake_up(&module_wq); ++ wake_up_all(&module_wq); + return ret; + } + if (ret > 0) { +@@ -3046,9 +3046,8 @@ SYSCALL_DEFINE3(init_module, void __user *, umod, + dump_stack(); + } + +- /* Now it's a first class citizen! Wake up anyone waiting for it. */ ++ /* Now it's a first class citizen! */ + mod->state = MODULE_STATE_LIVE; +- wake_up(&module_wq); + blocking_notifier_call_chain(&module_notify_list, + MODULE_STATE_LIVE, mod); + +@@ -3071,6 +3070,7 @@ SYSCALL_DEFINE3(init_module, void __user *, umod, + mod->init_ro_size = 0; + mod->init_text_size = 0; + mutex_unlock(&module_mutex); ++ wake_up_all(&module_wq); + + return 0; + } diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index a0f8777e6..8fd3e3138 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -10,10 +10,10 @@ pkgbase=linux-libre # Build stock -LIBRE kernel #pkgbase=linux-libre-custom # Build kernel with a different name _basekernel=3.6 -_sublevel=2 +_sublevel=3 pkgver=${_basekernel}.${_sublevel} pkgrel=1 -_lxopkgver=${_basekernel}.1 # nearly always the same as pkgver +_lxopkgver=${_basekernel}.2 # nearly always the same as pkgver arch=('i686' 'x86_64' 'mips64el') url="http://linux-libre.fsfla.org/" license=('GPL2') @@ -29,17 +29,21 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn 'Kbuild.platforms' 'boot-logo.patch' 'change-default-console-loglevel.patch' + 'module-symbol-waiting-3.6.patch' + 'module-init-wait-3.6.patch' "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2") md5sums=('a2312edd0265b5b07bd4b50afae2b380' - '1014a197e2bea449600d7b2cca415eec' - '600af9b069c8a1c18dd5ef1f25bf7080' - 'c18004748092bf4ee57ade7e25fdef22' + '844bd14e9f58225274e096c31bbb8a8f' + 'e4a3a4677e1fac6ecf0e0fb44c41ca08' + '68fc36a4efb6ade0eca409b9444fef0c' 'e49ac236dfeef709f91a3d993ea7b62c' '2967cecc3af9f954ccc822fd63dca6ff' '8267264d9a8966e57fdacd1fa1fc65c4' '04b21c79df0a952c22d681dd4f4562df' '9d3c56a4b999c8bfbd4018089a62f662' - '1690532ad271b11a87e8824f7da65101') + '670931649c60fcb3ef2e0119ed532bd4' + '8a71abc4224f575008f974a099b5cf6f' + '34508a324c3704662e9fc115d07735a3') if [ "$CARCH" != "mips64el" ]; then # Don't use the Loongson-specific patches on non-mips64el arches. unset source[${#source[@]}-1] @@ -64,6 +68,11 @@ build() { # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227) patch -Np1 -i "${srcdir}/change-default-console-loglevel.patch" + # fix module initialisation + # https://bugs.archlinux.org/task/32122 + patch -Np1 -i "${srcdir}/module-symbol-waiting-3.6.patch" + patch -Np1 -i "${srcdir}/module-init-wait-3.6.patch" + if [ "$CARCH" == "mips64el" ]; then sed -i "s|^EXTRAVERSION.*|EXTRAVERSION =-libre|" Makefile sed -r "s|^( SUBLEVEL = ).*|\1$_sublevel|" \ diff --git a/libre/linux-libre/config.i686 b/libre/linux-libre/config.i686 index e553c3d44..6533b0402 100644 --- a/libre/linux-libre/config.i686 +++ b/libre/linux-libre/config.i686 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/i386 3.6.0 Kernel Configuration +# Linux/i386 3.6.3 Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -134,7 +134,10 @@ CONFIG_CPUSETS=y CONFIG_PROC_PID_CPUSET=y CONFIG_CGROUP_CPUACCT=y CONFIG_RESOURCE_COUNTERS=y -# CONFIG_MEMCG is not set +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +# CONFIG_MEMCG_SWAP_ENABLED is not set +CONFIG_MEMCG_KMEM=y # CONFIG_CGROUP_HUGETLB is not set # CONFIG_CGROUP_PERF is not set CONFIG_CGROUP_SCHED=y diff --git a/libre/linux-libre/config.x86_64 b/libre/linux-libre/config.x86_64 index 479c39929..fbc1c7588 100644 --- a/libre/linux-libre/config.x86_64 +++ b/libre/linux-libre/config.x86_64 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86_64 3.6.0 Kernel Configuration +# Linux/x86_64 3.6.3 Kernel Configuration # CONFIG_64BIT=y # CONFIG_X86_32 is not set @@ -136,7 +136,10 @@ CONFIG_CPUSETS=y CONFIG_PROC_PID_CPUSET=y CONFIG_CGROUP_CPUACCT=y CONFIG_RESOURCE_COUNTERS=y -# CONFIG_MEMCG is not set +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +# CONFIG_MEMCG_SWAP_ENABLED is not set +CONFIG_MEMCG_KMEM=y # CONFIG_CGROUP_HUGETLB is not set # CONFIG_CGROUP_PERF is not set CONFIG_CGROUP_SCHED=y diff --git a/libre/linux-libre/linux-libre.install b/libre/linux-libre/linux-libre.install index e5af2a1bd..e327cd7ea 100644 --- a/libre/linux-libre/linux-libre.install +++ b/libre/linux-libre/linux-libre.install @@ -2,7 +2,7 @@ # arg 2: the old package version KERNEL_NAME= -KERNEL_VERSION=3.6.2-1-LIBRE +KERNEL_VERSION=3.6.3-1-LIBRE # set a sane PATH to ensure that critical utils like depmod will be found export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' diff --git a/libre/linux-libre/module-init-wait-3.6.patch b/libre/linux-libre/module-init-wait-3.6.patch new file mode 100644 index 000000000..1bcfd2491 --- /dev/null +++ b/libre/linux-libre/module-init-wait-3.6.patch @@ -0,0 +1,77 @@ +From: Rusty Russell <rusty@rustcorp.com.au> +Date: Fri, 28 Sep 2012 05:01:03 +0000 (+0930) +Subject: module: wait when loading a module which is currently initializing. +X-Git-Tag: v3.7-rc1~2^2~32 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=9bb9c3be568346538 + +module: wait when loading a module which is currently initializing. + +The original module-init-tools module loader used a fnctl lock on the +.ko file to avoid attempts to simultaneously load a module. +Unfortunately, you can't get an exclusive fcntl lock on a read-only +fd, making this not work for read-only mounted filesystems. +module-init-tools has a hacky sleep-and-loop for this now. + +It's not that hard to wait in the kernel, and only return -EEXIST once +the first module has finished loading (or continue loading the module +if the first one failed to initialize for some reason). It's also +consistent with what we do for dependent modules which are still loading. + +Suggested-by: Lucas De Marchi <lucas.demarchi@profusion.mobi> +Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> +--- + +diff --git a/kernel/module.c b/kernel/module.c +index 63cf6e7..74bc195 100644 +--- a/kernel/module.c ++++ b/kernel/module.c +@@ -2845,6 +2845,20 @@ static int post_relocation(struct module *mod, const struct load_info *info) + return module_finalize(info->hdr, info->sechdrs, mod); + } + ++/* Is this module of this name done loading? No locks held. */ ++static bool finished_loading(const char *name) ++{ ++ struct module *mod; ++ bool ret; ++ ++ mutex_lock(&module_mutex); ++ mod = find_module(name); ++ ret = !mod || mod->state != MODULE_STATE_COMING; ++ mutex_unlock(&module_mutex); ++ ++ return ret; ++} ++ + /* Allocate and load the module: note that size of section 0 is always + zero, and we rely on this for optional sections. */ + static struct module *load_module(void __user *umod, +@@ -2852,7 +2866,7 @@ static struct module *load_module(void __user *umod, + const char __user *uargs) + { + struct load_info info = { NULL, }; +- struct module *mod; ++ struct module *mod, *old; + long err; + + pr_debug("load_module: umod=%p, len=%lu, uargs=%p\n", +@@ -2918,8 +2932,18 @@ static struct module *load_module(void __user *umod, + * function to insert in a way safe to concurrent readers. + * The mutex protects against concurrent writers. + */ ++again: + mutex_lock(&module_mutex); +- if (find_module(mod->name)) { ++ if ((old = find_module(mod->name)) != NULL) { ++ if (old->state == MODULE_STATE_COMING) { ++ /* Wait in case it fails to load. */ ++ mutex_unlock(&module_mutex); ++ err = wait_event_interruptible(module_wq, ++ finished_loading(mod->name)); ++ if (err) ++ goto free_arch_cleanup; ++ goto again; ++ } + err = -EEXIST; + goto unlock; + } diff --git a/libre/linux-libre/module-symbol-waiting-3.6.patch b/libre/linux-libre/module-symbol-waiting-3.6.patch new file mode 100644 index 000000000..b87a38ff5 --- /dev/null +++ b/libre/linux-libre/module-symbol-waiting-3.6.patch @@ -0,0 +1,66 @@ +From: Rusty Russell <rusty@rustcorp.com.au> +Date: Fri, 28 Sep 2012 05:01:03 +0000 (+0930) +Subject: module: fix symbol waiting when module fails before init +X-Git-Tag: v3.7-rc1~2^2~33 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=6f13909f4fe9652f1 + +module: fix symbol waiting when module fails before init + +We use resolve_symbol_wait(), which blocks if the module containing +the symbol is still loading. However: + +1) The module_wq we use is only woken after calling the modules' init + function, but there are other failure paths after the module is + placed in the linked list where we need to do the same thing. + +2) wake_up() only wakes one waiter, and our waitqueue is shared by all + modules, so we need to wake them all. + +3) wake_up_all() doesn't imply a memory barrier: I feel happier calling + it after we've grabbed and dropped the module_mutex, not just after + the state assignment. + +Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> +--- + +diff --git a/kernel/module.c b/kernel/module.c +index 7f2ee45f..63cf6e7 100644 +--- a/kernel/module.c ++++ b/kernel/module.c +@@ -2959,7 +2959,7 @@ static struct module *load_module(void __user *umod, + /* Unlink carefully: kallsyms could be walking list. */ + list_del_rcu(&mod->list); + module_bug_cleanup(mod); +- ++ wake_up_all(&module_wq); + ddebug: + dynamic_debug_remove(info.debug); + unlock: +@@ -3034,7 +3034,7 @@ SYSCALL_DEFINE3(init_module, void __user *, umod, + blocking_notifier_call_chain(&module_notify_list, + MODULE_STATE_GOING, mod); + free_module(mod); +- wake_up(&module_wq); ++ wake_up_all(&module_wq); + return ret; + } + if (ret > 0) { +@@ -3046,9 +3046,8 @@ SYSCALL_DEFINE3(init_module, void __user *, umod, + dump_stack(); + } + +- /* Now it's a first class citizen! Wake up anyone waiting for it. */ ++ /* Now it's a first class citizen! */ + mod->state = MODULE_STATE_LIVE; +- wake_up(&module_wq); + blocking_notifier_call_chain(&module_notify_list, + MODULE_STATE_LIVE, mod); + +@@ -3071,6 +3070,7 @@ SYSCALL_DEFINE3(init_module, void __user *, umod, + mod->init_ro_size = 0; + mod->init_text_size = 0; + mutex_unlock(&module_mutex); ++ wake_up_all(&module_wq); + + return 0; + } diff --git a/libre/lirc-libre/PKGBUILD b/libre/lirc-libre/PKGBUILD index d4d91c412..fe03ab28d 100644 --- a/libre/lirc-libre/PKGBUILD +++ b/libre/lirc-libre/PKGBUILD @@ -6,7 +6,7 @@ _pkgbase=lirc pkgbase=lirc-libre pkgname=('lirc-libre' 'lirc-utils-libre') pkgver=0.9.0 -pkgrel=31 +pkgrel=32 epoch=1 _extramodules=extramodules-3.6-LIBRE arch=('i686' 'x86_64' 'mips64el') diff --git a/libre/parabola-keyring/PKGBUILD b/libre/parabola-keyring/PKGBUILD index 9d77543ce..cb0930c8c 100644 --- a/libre/parabola-keyring/PKGBUILD +++ b/libre/parabola-keyring/PKGBUILD @@ -2,7 +2,7 @@ # Maintainer: André Silva <emulatorman@lavabit.com> pkgname=parabola-keyring -pkgver=20121012 +pkgver=20121023 pkgrel=1 pkgdesc='Parabola GNU/Linux-libre PGP keyring' arch=('any') @@ -16,5 +16,5 @@ package() { cd "${srcdir}/${pkgname}-${pkgver}" make PREFIX=/usr DESTDIR=${pkgdir} install } -md5sums=('386550a6b179ebd158bc7469362bf0b8' - '4794d17dd40d51069eca315c2243528b') +md5sums=('8a9036ae921c4f94fbadfaa264801a68' + '187123f4517f90ac325da8b58fc6e3e5') diff --git a/libre/parabolaweb-utils/parabolaweb-fcgi b/libre/parabolaweb-utils/parabolaweb-fcgi index 3dec02e10..e42aec3cd 100644 --- a/libre/parabolaweb-utils/parabolaweb-fcgi +++ b/libre/parabolaweb-utils/parabolaweb-fcgi @@ -3,9 +3,9 @@ set -e . /etc/conf.d/parabolaweb -[[ -e /srv/http/web/manage.py ]] +[[ -e ${WEBDIR}/manage.py ]] -sudo -u "${WEBUSER:-$USER}" python2 /srv/http/web/manage.py runfcgi \ +sudo -u "${WEBUSER:-$USER}" python2 "${WEBDIR}/manage.py" runfcgi \ host=${HOST} \ port=${PORT} \ --settings=settings \ diff --git a/libre/parabolaweb-utils/parabolaweb-update b/libre/parabolaweb-utils/parabolaweb-update index e4d65c2d9..b8ac5bf5e 100644 --- a/libre/parabolaweb-utils/parabolaweb-update +++ b/libre/parabolaweb-utils/parabolaweb-update @@ -1,8 +1,11 @@ #!/bin/bash set -e -_install_dir=/srv/http -_gitname=web +. /etc/conf.d/parabolaweb + + +_install_dir=${WEBDIR%/*} +_gitname=${WEBDIR##*/} _gitroot=git://parabolagnulinux.org/parabolaweb.git _gitbranch=master diff --git a/libre/parabolaweb-utils/parabolaweb.conf b/libre/parabolaweb-utils/parabolaweb.conf index c53b19cb8..467e62e2c 100644 --- a/libre/parabolaweb-utils/parabolaweb.conf +++ b/libre/parabolaweb-utils/parabolaweb.conf @@ -1,3 +1,4 @@ HOST=127.0.0.1 PORT=8090 # 80 is nginx +WEBDIR=/srv/http/web WEBUSER=nobody diff --git a/libre/parabolaweb-utils/parabolaweb.rc b/libre/parabolaweb-utils/parabolaweb.rc index 087a3fcb0..5e310b01d 100644 --- a/libre/parabolaweb-utils/parabolaweb.rc +++ b/libre/parabolaweb-utils/parabolaweb.rc @@ -8,6 +8,7 @@ PIDFILE=/run/web/parabolaweb.pid case $1 in start) stat_busy "Starting ParabolaWeb" + install -dm777 ${PIDFILE%/*} if parabolaweb-fcgi pidfile=${PIDFILE}; then add_daemon parabolaweb stat_done diff --git a/libre/parabolaweb-utils/parabolaweb.service b/libre/parabolaweb-utils/parabolaweb.service index 4c3fb8c7f..a59d58512 100644 --- a/libre/parabolaweb-utils/parabolaweb.service +++ b/libre/parabolaweb-utils/parabolaweb.service @@ -5,8 +5,9 @@ Description=ParabolaWeb [Service] Type=forking -ExecStart=/usr/sbin/parabolaweb-fcgi pidfile=/run/web/parabolaweb.pid PIDFile=/run/web/parabolaweb.pid +ExecStartPre=/usr/bin/install -dm777 /run/web +ExecStart=/usr/sbin/parabolaweb-fcgi pidfile=/run/web/parabolaweb.pid [Install] WantedBy=multi-user.target diff --git a/libre/tp_smapi-libre-lts/PKGBUILD b/libre/tp_smapi-libre-lts/PKGBUILD index 91ae34864..18b474d64 100644 --- a/libre/tp_smapi-libre-lts/PKGBUILD +++ b/libre/tp_smapi-libre-lts/PKGBUILD @@ -12,7 +12,7 @@ pkgname=tp_smapi-libre-lts _pkgname=tp_smapi _extramodules=/usr/lib/modules/extramodules-3.0-LIBRE-LTS pkgver=0.41 -pkgrel=9 +pkgrel=9.1 pkgdesc="linux-libre-lts modules for ThinkPad's SMAPI functionality" arch=('i686' 'x86_64') url='https://github.com/evgeni/tp_smapi' diff --git a/libre/tp_smapi-libre/PKGBUILD b/libre/tp_smapi-libre/PKGBUILD index 4c8910c2b..9db910c9e 100644 --- a/libre/tp_smapi-libre/PKGBUILD +++ b/libre/tp_smapi-libre/PKGBUILD @@ -11,7 +11,7 @@ _pkgname=tp_smapi pkgname=tp_smapi-libre pkgver=0.41 -pkgrel=9 +pkgrel=10 pkgdesc="Modules for ThinkPad's SMAPI functionality" arch=('i686' 'x86_64') url='https://github.com/evgeni/tp_smapi' diff --git a/libre/vhba-module-libre/PKGBUILD b/libre/vhba-module-libre/PKGBUILD index f35ba99c9..ba6448702 100644 --- a/libre/vhba-module-libre/PKGBUILD +++ b/libre/vhba-module-libre/PKGBUILD @@ -8,7 +8,7 @@ _pkgname=vhba-module pkgname=vhba-module-libre pkgver=20120422 _extramodules=extramodules-3.6-LIBRE -pkgrel=12 +pkgrel=13 pkgdesc="Kernel libre module that emulates SCSI devices" arch=('i686' 'x86_64') url="http://cdemu.sourceforge.net/" diff --git a/libre/virtualbox-libre-modules-lts/PKGBUILD b/libre/virtualbox-libre-modules-lts/PKGBUILD index 7a95b4c7b..3067a780e 100644 --- a/libre/virtualbox-libre-modules-lts/PKGBUILD +++ b/libre/virtualbox-libre-modules-lts/PKGBUILD @@ -8,7 +8,7 @@ pkgbase=virtualbox-libre-modules-lts pkgname=('virtualbox-libre-host-modules-lts' 'virtualbox-libre-guest-modules-lts') pkgver=4.2.2 -pkgrel=1 +pkgrel=1.1 arch=('i686' 'x86_64') url='http://virtualbox.org' license=('GPL') diff --git a/libre/virtualbox-libre-modules/PKGBUILD b/libre/virtualbox-libre-modules/PKGBUILD index 3fcbd7069..7c8a53bb5 100644 --- a/libre/virtualbox-libre-modules/PKGBUILD +++ b/libre/virtualbox-libre-modules/PKGBUILD @@ -7,7 +7,7 @@ pkgbase=virtualbox-libre-modules pkgname=('virtualbox-libre-host-modules' 'virtualbox-libre-guest-modules') pkgver=4.2.2 -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64') url='http://virtualbox.org' license=('GPL') |