bump to 3.7 series
This commit is contained in:
parent
86fe51174a
commit
d540b8dab4
82
PKGBUILD
82
PKGBUILD
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
pkgbase=linux # Build stock -ARCH kernel
|
pkgbase=linux # Build stock -ARCH kernel
|
||||||
#pkgbase=linux-custom # Build kernel with a different name
|
#pkgbase=linux-custom # Build kernel with a different name
|
||||||
_srcname=linux-3.6
|
_srcname=linux-3.7
|
||||||
pkgver=3.6.9
|
pkgver=3.7
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
arch=('i686' 'x86_64')
|
arch=('i686' 'x86_64')
|
||||||
url="http://www.kernel.org/"
|
url="http://www.kernel.org/"
|
||||||
@ -13,16 +13,19 @@ license=('GPL2')
|
|||||||
makedepends=('xmlto' 'docbook-xsl')
|
makedepends=('xmlto' 'docbook-xsl')
|
||||||
options=('!strip')
|
options=('!strip')
|
||||||
source=("http://www.kernel.org/pub/linux/kernel/v3.x/${_srcname}.tar.xz"
|
source=("http://www.kernel.org/pub/linux/kernel/v3.x/${_srcname}.tar.xz"
|
||||||
"http://www.kernel.org/pub/linux/kernel/v3.x/patch-${pkgver}.xz"
|
#"http://www.kernel.org/pub/linux/kernel/v3.x/patch-${pkgver}.xz"
|
||||||
# the main kernel config files
|
# the main kernel config files
|
||||||
'config' 'config.x86_64'
|
'config' 'config.x86_64'
|
||||||
# standard config files for mkinitcpio ramdisk
|
# standard config files for mkinitcpio ramdisk
|
||||||
'linux.preset'
|
'linux.preset'
|
||||||
'change-default-console-loglevel.patch'
|
'change-default-console-loglevel.patch'
|
||||||
'module-symbol-waiting-3.6.patch'
|
|
||||||
'module-init-wait-3.6.patch'
|
|
||||||
'irq_cfg_pointer-3.6.6.patch'
|
|
||||||
'fat-3.6.x.patch')
|
'fat-3.6.x.patch')
|
||||||
|
md5sums=('21223369d682bcf44bcdfe1521095983'
|
||||||
|
'94910add7f2687dc6fc8d48364e0bba4'
|
||||||
|
'2dd29b36cbb013eca263427e9c391fcd'
|
||||||
|
'eb14dcfd80c00852ef81ded6e826826a'
|
||||||
|
'9d3c56a4b999c8bfbd4018089a62f662'
|
||||||
|
'88d501404f172dac6fcb248978251560')
|
||||||
|
|
||||||
_kernelname=${pkgbase#linux}
|
_kernelname=${pkgbase#linux}
|
||||||
|
|
||||||
@ -30,7 +33,7 @@ build() {
|
|||||||
cd "${srcdir}/${_srcname}"
|
cd "${srcdir}/${_srcname}"
|
||||||
|
|
||||||
# add upstream patch
|
# add upstream patch
|
||||||
patch -p1 -i "${srcdir}/patch-${pkgver}"
|
#patch -p1 -i "${srcdir}/patch-${pkgver}"
|
||||||
|
|
||||||
# add latest fixes from stable queue, if needed
|
# add latest fixes from stable queue, if needed
|
||||||
# http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git
|
# http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git
|
||||||
@ -40,14 +43,6 @@ build() {
|
|||||||
# (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227)
|
# (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227)
|
||||||
patch -Np1 -i "${srcdir}/change-default-console-loglevel.patch"
|
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"
|
|
||||||
|
|
||||||
# fix FS#32615 - Check for valid irq_cfg pointer in smp_irq_move_cleanup_interrupt
|
|
||||||
patch -Np1 -i "${srcdir}/irq_cfg_pointer-3.6.6.patch"
|
|
||||||
|
|
||||||
# fix cosmetic fat issue
|
# fix cosmetic fat issue
|
||||||
# https://bugs.archlinux.org/task/32916
|
# https://bugs.archlinux.org/task/32916
|
||||||
patch -Np1 -i "${srcdir}/fat-3.6.x.patch"
|
patch -Np1 -i "${srcdir}/fat-3.6.x.patch"
|
||||||
@ -183,7 +178,7 @@ _package-headers() {
|
|||||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include"
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include"
|
||||||
|
|
||||||
for i in acpi asm-generic config crypto drm generated linux math-emu \
|
for i in acpi asm-generic config crypto drm generated linux math-emu \
|
||||||
media mtd net pcmcia scsi sound trace video xen; do
|
media net pcmcia scsi sound trace video xen; do
|
||||||
cp -a include/${i} "${pkgdir}/usr/src/linux-${_kernver}/include/"
|
cp -a include/${i} "${pkgdir}/usr/src/linux-${_kernver}/include/"
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -210,13 +205,22 @@ _package-headers() {
|
|||||||
cp arch/${KARCH}/kernel/asm-offsets.s "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/kernel/"
|
cp arch/${KARCH}/kernel/asm-offsets.s "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/kernel/"
|
||||||
|
|
||||||
# add headers for lirc package
|
# add headers for lirc package
|
||||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video"
|
# pci
|
||||||
|
for i in bt8xx cx88 saa7134; do
|
||||||
cp drivers/media/video/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/"
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/pci/${i}"
|
||||||
|
cp -a drivers/media/pci/${i}/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/pci/${i}"
|
||||||
for i in bt8xx cpia2 cx25840 cx88 em28xx pwc saa7134 sn9c102; do
|
done
|
||||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
|
# usb
|
||||||
cp -a drivers/media/video/${i}/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
|
for i in cpia2 em28xx pwc sn9c102; do
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/usb/${i}"
|
||||||
|
cp -a drivers/media/usb/${i}/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/usb/${i}"
|
||||||
|
done
|
||||||
|
# i2c
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/i2c"
|
||||||
|
cp drivers/media/i2c/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/i2c/"
|
||||||
|
for i in cx25840; do
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/i2c/${i}"
|
||||||
|
cp -a drivers/media/i2c/${i}/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/i2c/${i}"
|
||||||
done
|
done
|
||||||
|
|
||||||
# add docbook makefile
|
# add docbook makefile
|
||||||
@ -238,8 +242,8 @@ _package-headers() {
|
|||||||
# add dvb headers for external modules
|
# add dvb headers for external modules
|
||||||
# in reference to:
|
# in reference to:
|
||||||
# http://bugs.archlinux.org/task/9912
|
# http://bugs.archlinux.org/task/9912
|
||||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core"
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb-core"
|
||||||
cp drivers/media/dvb/dvb-core/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core/"
|
cp drivers/media/dvb-core/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb-core/"
|
||||||
# and...
|
# and...
|
||||||
# http://bugs.archlinux.org/task/11194
|
# http://bugs.archlinux.org/task/11194
|
||||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/"
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/"
|
||||||
@ -248,19 +252,19 @@ _package-headers() {
|
|||||||
# add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
|
# add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
|
||||||
# in reference to:
|
# in reference to:
|
||||||
# http://bugs.archlinux.org/task/13146
|
# http://bugs.archlinux.org/task/13146
|
||||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb-frontends/"
|
||||||
cp drivers/media/dvb/frontends/lgdt330x.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
cp drivers/media/dvb-frontends/lgdt330x.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb-frontends/"
|
||||||
cp drivers/media/video/msp3400-driver.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
cp drivers/media/i2c/msp3400-driver.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/i2c/"
|
||||||
|
|
||||||
# add dvb headers
|
# add dvb headers
|
||||||
# in reference to:
|
# in reference to:
|
||||||
# http://bugs.archlinux.org/task/20402
|
# http://bugs.archlinux.org/task/20402
|
||||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb"
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/usb/dvb-usb"
|
||||||
cp drivers/media/dvb/dvb-usb/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb/"
|
cp drivers/media/usb/dvb-usb/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/usb/dvb-usb/"
|
||||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends"
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb-frontends"
|
||||||
cp drivers/media/dvb/frontends/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
cp drivers/media/dvb-frontends/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb-frontends/"
|
||||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners"
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/tuners"
|
||||||
cp drivers/media/common/tuners/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners/"
|
cp drivers/media/tuners/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/tuners/"
|
||||||
|
|
||||||
# add xfs and shmem for aufs building
|
# add xfs and shmem for aufs building
|
||||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/fs/xfs"
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/fs/xfs"
|
||||||
@ -317,13 +321,9 @@ for _p in ${pkgname[@]}; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
# vim:set ts=8 sts=2 sw=2 et:
|
# vim:set ts=8 sts=2 sw=2 et:
|
||||||
md5sums=('1a1760420eac802c541a20ab51a093d1'
|
md5sums=('21223369d682bcf44bcdfe1521095983'
|
||||||
'a7c656034599f90dcbc50895b69022aa'
|
'94910add7f2687dc6fc8d48364e0bba4'
|
||||||
'65f7ff39775f20f65014383564d3cb65'
|
'2dd29b36cbb013eca263427e9c391fcd'
|
||||||
'3adbfa45451c4bcf9dd7879bed033d77'
|
|
||||||
'eb14dcfd80c00852ef81ded6e826826a'
|
'eb14dcfd80c00852ef81ded6e826826a'
|
||||||
'9d3c56a4b999c8bfbd4018089a62f662'
|
'9d3c56a4b999c8bfbd4018089a62f662'
|
||||||
'670931649c60fcb3ef2e0119ed532bd4'
|
|
||||||
'8a71abc4224f575008f974a099b5cf6f'
|
|
||||||
'4909a0271af4e5f373136b382826717f'
|
|
||||||
'88d501404f172dac6fcb248978251560')
|
'88d501404f172dac6fcb248978251560')
|
||||||
|
725
config.x86_64
725
config.x86_64
File diff suppressed because it is too large
Load Diff
@ -1,16 +0,0 @@
|
|||||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux.git;a=blobdiff_plain;f=arch%2Fx86%2Fkernel%2Fapic%2Fio_apic.c;h=1817fa911024f07151d3edf91bd350722c9f79f8;hp=c265593ec2cdc3df35fda1586aaf91514fab62fa;hb=94777fc51b3ad85ff9f705ddf7cdd0eb3bbad5a6;hpb=3e8fa263a97079c74880675c451587bb6899e661
|
|
||||||
|
|
||||||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
|
|
||||||
index c265593..1817fa9 100644
|
|
||||||
--- a/arch/x86/kernel/apic/io_apic.c
|
|
||||||
+++ b/arch/x86/kernel/apic/io_apic.c
|
|
||||||
@@ -2257,6 +2257,9 @@ asmlinkage void smp_irq_move_cleanup_interrupt(void)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
cfg = irq_cfg(irq);
|
|
||||||
+ if (!cfg)
|
|
||||||
+ continue;
|
|
||||||
+
|
|
||||||
raw_spin_lock(&desc->lock);
|
|
||||||
|
|
||||||
/*
|
|
@ -2,7 +2,7 @@
|
|||||||
# arg 2: the old package version
|
# arg 2: the old package version
|
||||||
|
|
||||||
KERNEL_NAME=
|
KERNEL_NAME=
|
||||||
KERNEL_VERSION=3.6.9-1-ARCH
|
KERNEL_VERSION=3.7.0-1-ARCH
|
||||||
|
|
||||||
# set a sane PATH to ensure that critical utils like depmod will be found
|
# 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'
|
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
|
||||||
|
@ -1,77 +0,0 @@
|
|||||||
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;
|
|
||||||
}
|
|
@ -1,66 +0,0 @@
|
|||||||
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;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user