remove not needed patches
This commit is contained in:
parent
ed46d9df24
commit
43b4e19ca9
|
@ -1,74 +0,0 @@
|
||||||
From 5d77ba2d26110c678b40fd723866a17d4036de12 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lucas De Marchi <lucas.demarchi@intel.com>
|
|
||||||
Date: Tue, 18 Feb 2014 02:19:26 -0300
|
|
||||||
Subject: [PATCH 01/10] Bluetooth: allocate static minor for vhci
|
|
||||||
|
|
||||||
Commit bfacbb9 (Bluetooth: Use devname:vhci module alias for virtual HCI
|
|
||||||
driver) added the module alias to hci_vhci module so it's possible to
|
|
||||||
create the /dev/vhci node. However creating an alias without
|
|
||||||
specifying the minor doesn't allow us to create the node ahead,
|
|
||||||
triggerring module auto-load when it's first accessed.
|
|
||||||
|
|
||||||
Starting with depmod from kmod 16 we started to warn if there's a
|
|
||||||
devname alias without specifying the major and minor.
|
|
||||||
|
|
||||||
Let's do the same done for uhid, kvm, fuse and others, specifying a
|
|
||||||
fixed minor. In systems with systemd as the init the following will
|
|
||||||
happen: on early boot systemd will call "kmod static-nodes" to read
|
|
||||||
/lib/modules/$(uname -r)/modules.devname and then create the nodes. When
|
|
||||||
first accessed these "dead" nodes will trigger the module loading.
|
|
||||||
|
|
||||||
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
|
|
||||||
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
||||||
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
|
||||||
---
|
|
||||||
Documentation/devices.txt | 1 +
|
|
||||||
drivers/bluetooth/hci_vhci.c | 3 ++-
|
|
||||||
include/linux/miscdevice.h | 1 +
|
|
||||||
3 files changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/Documentation/devices.txt b/Documentation/devices.txt
|
|
||||||
index 10378cc..04356f5 100644
|
|
||||||
--- a/Documentation/devices.txt
|
|
||||||
+++ b/Documentation/devices.txt
|
|
||||||
@@ -353,6 +353,7 @@ Your cooperation is appreciated.
|
|
||||||
133 = /dev/exttrp External device trap
|
|
||||||
134 = /dev/apm_bios Advanced Power Management BIOS
|
|
||||||
135 = /dev/rtc Real Time Clock
|
|
||||||
+ 137 = /dev/vhci Bluetooth virtual HCI driver
|
|
||||||
139 = /dev/openprom SPARC OpenBoot PROM
|
|
||||||
140 = /dev/relay8 Berkshire Products Octal relay card
|
|
||||||
141 = /dev/relay16 Berkshire Products ISO-16 relay card
|
|
||||||
diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c
|
|
||||||
index 1ef6990..add1c6a 100644
|
|
||||||
--- a/drivers/bluetooth/hci_vhci.c
|
|
||||||
+++ b/drivers/bluetooth/hci_vhci.c
|
|
||||||
@@ -359,7 +359,7 @@ static const struct file_operations vhci_fops = {
|
|
||||||
static struct miscdevice vhci_miscdev= {
|
|
||||||
.name = "vhci",
|
|
||||||
.fops = &vhci_fops,
|
|
||||||
- .minor = MISC_DYNAMIC_MINOR,
|
|
||||||
+ .minor = VHCI_MINOR,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int __init vhci_init(void)
|
|
||||||
@@ -385,3 +385,4 @@ MODULE_DESCRIPTION("Bluetooth virtual HCI driver ver " VERSION);
|
|
||||||
MODULE_VERSION(VERSION);
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_ALIAS("devname:vhci");
|
|
||||||
+MODULE_ALIAS_MISCDEV(VHCI_MINOR);
|
|
||||||
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h
|
|
||||||
index 3737f72..7bb6148 100644
|
|
||||||
--- a/include/linux/miscdevice.h
|
|
||||||
+++ b/include/linux/miscdevice.h
|
|
||||||
@@ -23,6 +23,7 @@
|
|
||||||
#define TEMP_MINOR 131 /* Temperature Sensor */
|
|
||||||
#define RTC_MINOR 135
|
|
||||||
#define EFI_RTC_MINOR 136 /* EFI Time services */
|
|
||||||
+#define VHCI_MINOR 137
|
|
||||||
#define SUN_OPENPROM_MINOR 139
|
|
||||||
#define DMAPI_MINOR 140 /* DMAPI */
|
|
||||||
#define NVRAM_MINOR 144
|
|
||||||
--
|
|
||||||
1.9.2
|
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
From 9bc5b710f5957763d6944f38143b627d127c15ff Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tom Gundersen <teg@jklm.no>
|
|
||||||
Date: Mon, 3 Feb 2014 11:14:13 +1030
|
|
||||||
Subject: [PATCH 02/10] module: allow multiple calls to MODULE_DEVICE_TABLE()
|
|
||||||
per module
|
|
||||||
|
|
||||||
Commit 78551277e4df5: "Input: i8042 - add PNP modaliases" had a bug, where the
|
|
||||||
second call to MODULE_DEVICE_TABLE() overrode the first resulting in not all
|
|
||||||
the modaliases being exposed.
|
|
||||||
|
|
||||||
This fixes the problem by including the name of the device_id table in the
|
|
||||||
__mod_*_device_table alias, allowing us to export several device_id tables
|
|
||||||
per module.
|
|
||||||
|
|
||||||
Suggested-by: Kay Sievers <kay@vrfy.org>
|
|
||||||
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
||||||
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
|
||||||
Signed-off-by: Tom Gundersen <teg@jklm.no>
|
|
||||||
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
|
|
||||||
---
|
|
||||||
include/linux/module.h | 2 +-
|
|
||||||
scripts/mod/file2alias.c | 14 +++++++++-----
|
|
||||||
2 files changed, 10 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/linux/module.h b/include/linux/module.h
|
|
||||||
index eaf60ff..ad18f60 100644
|
|
||||||
--- a/include/linux/module.h
|
|
||||||
+++ b/include/linux/module.h
|
|
||||||
@@ -142,7 +142,7 @@ extern const struct gtype##_id __mod_##gtype##_table \
|
|
||||||
#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
|
|
||||||
|
|
||||||
#define MODULE_DEVICE_TABLE(type, name) \
|
|
||||||
- MODULE_GENERIC_TABLE(type##_device, name)
|
|
||||||
+ MODULE_GENERIC_TABLE(type##__##name##_device, name)
|
|
||||||
|
|
||||||
/* Version of form [<epoch>:]<version>[-<extra-version>].
|
|
||||||
* Or for CVS/RCS ID version, everything but the number is stripped.
|
|
||||||
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
|
|
||||||
index 25e5cb0..ce16404 100644
|
|
||||||
--- a/scripts/mod/file2alias.c
|
|
||||||
+++ b/scripts/mod/file2alias.c
|
|
||||||
@@ -42,7 +42,7 @@ typedef unsigned char __u8;
|
|
||||||
|
|
||||||
/* This array collects all instances that use the generic do_table */
|
|
||||||
struct devtable {
|
|
||||||
- const char *device_id; /* name of table, __mod_<name>_device_table. */
|
|
||||||
+ const char *device_id; /* name of table, __mod_<name>__*_device_table. */
|
|
||||||
unsigned long id_size;
|
|
||||||
void *function;
|
|
||||||
};
|
|
||||||
@@ -146,7 +146,8 @@ static void device_id_check(const char *modname, const char *device_id,
|
|
||||||
|
|
||||||
if (size % id_size || size < id_size) {
|
|
||||||
fatal("%s: sizeof(struct %s_device_id)=%lu is not a modulo "
|
|
||||||
- "of the size of section __mod_%s_device_table=%lu.\n"
|
|
||||||
+ "of the size of "
|
|
||||||
+ "section __mod_%s__<identifier>_device_table=%lu.\n"
|
|
||||||
"Fix definition of struct %s_device_id "
|
|
||||||
"in mod_devicetable.h\n",
|
|
||||||
modname, device_id, id_size, device_id, size, device_id);
|
|
||||||
@@ -1206,7 +1207,7 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
|
|
||||||
{
|
|
||||||
void *symval;
|
|
||||||
char *zeros = NULL;
|
|
||||||
- const char *name;
|
|
||||||
+ const char *name, *identifier;
|
|
||||||
unsigned int namelen;
|
|
||||||
|
|
||||||
/* We're looking for a section relative symbol */
|
|
||||||
@@ -1217,7 +1218,7 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
|
|
||||||
if (ELF_ST_TYPE(sym->st_info) != STT_OBJECT)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- /* All our symbols are of form <prefix>__mod_XXX_device_table. */
|
|
||||||
+ /* All our symbols are of form <prefix>__mod_<name>__<identifier>_device_table. */
|
|
||||||
name = strstr(symname, "__mod_");
|
|
||||||
if (!name)
|
|
||||||
return;
|
|
||||||
@@ -1227,7 +1228,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
|
|
||||||
return;
|
|
||||||
if (strcmp(name + namelen - strlen("_device_table"), "_device_table"))
|
|
||||||
return;
|
|
||||||
- namelen -= strlen("_device_table");
|
|
||||||
+ identifier = strstr(name, "__");
|
|
||||||
+ if (!identifier)
|
|
||||||
+ return;
|
|
||||||
+ namelen = identifier - name;
|
|
||||||
|
|
||||||
/* Handle all-NULL symbols allocated into .bss */
|
|
||||||
if (info->sechdrs[get_secindex(info, sym)].sh_type & SHT_NOBITS) {
|
|
||||||
--
|
|
||||||
1.9.2
|
|
||||||
|
|
|
@ -1,75 +0,0 @@
|
||||||
From 06d2e746733a83469944481cb7f4fb1c7134a8ce Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rusty Russell <rusty@rustcorp.com.au>
|
|
||||||
Date: Mon, 3 Feb 2014 11:15:13 +1030
|
|
||||||
Subject: [PATCH 03/10] module: remove MODULE_GENERIC_TABLE
|
|
||||||
|
|
||||||
MODULE_DEVICE_TABLE() calles MODULE_GENERIC_TABLE(); make it do the
|
|
||||||
work directly. This also removes a wart introduced in the last patch,
|
|
||||||
where the alias is defined to be an unknown struct type "struct
|
|
||||||
type##__##name##_device_id" instead of "struct type##_device_id" (it's
|
|
||||||
an extern so GCC doesn't care, but it's wrong).
|
|
||||||
|
|
||||||
The other user of MODULE_GENERIC_TABLE (ISAPNP_CARD_TABLE) is unused,
|
|
||||||
so delete it.
|
|
||||||
|
|
||||||
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
|
|
||||||
---
|
|
||||||
include/linux/isapnp.h | 4 ----
|
|
||||||
include/linux/module.h | 19 ++++++++-----------
|
|
||||||
2 files changed, 8 insertions(+), 15 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/linux/isapnp.h b/include/linux/isapnp.h
|
|
||||||
index e2d28b0..3c77bf9 100644
|
|
||||||
--- a/include/linux/isapnp.h
|
|
||||||
+++ b/include/linux/isapnp.h
|
|
||||||
@@ -56,10 +56,6 @@
|
|
||||||
#define ISAPNP_DEVICE_ID(_va, _vb, _vc, _function) \
|
|
||||||
{ .vendor = ISAPNP_VENDOR(_va, _vb, _vc), .function = ISAPNP_FUNCTION(_function) }
|
|
||||||
|
|
||||||
-/* export used IDs outside module */
|
|
||||||
-#define ISAPNP_CARD_TABLE(name) \
|
|
||||||
- MODULE_GENERIC_TABLE(isapnp_card, name)
|
|
||||||
-
|
|
||||||
struct isapnp_card_id {
|
|
||||||
unsigned long driver_data; /* data private to the driver */
|
|
||||||
unsigned short card_vendor, card_device;
|
|
||||||
diff --git a/include/linux/module.h b/include/linux/module.h
|
|
||||||
index ad18f60..5686b37 100644
|
|
||||||
--- a/include/linux/module.h
|
|
||||||
+++ b/include/linux/module.h
|
|
||||||
@@ -82,15 +82,6 @@ void sort_extable(struct exception_table_entry *start,
|
|
||||||
void sort_main_extable(void);
|
|
||||||
void trim_init_extable(struct module *m);
|
|
||||||
|
|
||||||
-#ifdef MODULE
|
|
||||||
-#define MODULE_GENERIC_TABLE(gtype, name) \
|
|
||||||
-extern const struct gtype##_id __mod_##gtype##_table \
|
|
||||||
- __attribute__ ((unused, alias(__stringify(name))))
|
|
||||||
-
|
|
||||||
-#else /* !MODULE */
|
|
||||||
-#define MODULE_GENERIC_TABLE(gtype, name)
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
/* Generic info of form tag = "info" */
|
|
||||||
#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
|
|
||||||
|
|
||||||
@@ -141,8 +132,14 @@ extern const struct gtype##_id __mod_##gtype##_table \
|
|
||||||
/* What your module does. */
|
|
||||||
#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
|
|
||||||
|
|
||||||
-#define MODULE_DEVICE_TABLE(type, name) \
|
|
||||||
- MODULE_GENERIC_TABLE(type##__##name##_device, name)
|
|
||||||
+#ifdef MODULE
|
|
||||||
+/* Creates an alias so file2alias.c can find device table. */
|
|
||||||
+#define MODULE_DEVICE_TABLE(type, name) \
|
|
||||||
+ extern const struct type##_device_id __mod_##type##__##name##_device_table \
|
|
||||||
+ __attribute__ ((unused, alias(__stringify(name))))
|
|
||||||
+#else /* !MODULE */
|
|
||||||
+#define MODULE_DEVICE_TABLE(type, name)
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* Version of form [<epoch>:]<version>[-<extra-version>].
|
|
||||||
* Or for CVS/RCS ID version, everything but the number is stripped.
|
|
||||||
--
|
|
||||||
1.9.2
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,110 +0,0 @@
|
||||||
From 720a9dbf61c88bd57d6f8198ed8ccb2bd4a6abd8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Matt Fleming <matt@console-pimps.org>
|
|
||||||
Date: Wed, 9 Apr 2014 10:33:49 +0200
|
|
||||||
Subject: [PATCH 07/10] x86/efi: Correct EFI boot stub use of code32_start
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
code32_start should point at the start of the protected mode code, and
|
|
||||||
*not* at the beginning of the bzImage. This is much easier to do in
|
|
||||||
assembly so document that callers of make_boot_params() need to fill out
|
|
||||||
code32_start.
|
|
||||||
|
|
||||||
The fallout from this bug is that we would end up relocating the image
|
|
||||||
but copying the image at some offset, resulting in what appeared to be
|
|
||||||
memory corruption.
|
|
||||||
|
|
||||||
Reported-by: Thomas Bächler <thomas@archlinux.org>
|
|
||||||
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|
||||||
---
|
|
||||||
arch/x86/boot/compressed/eboot.c | 5 +++--
|
|
||||||
arch/x86/boot/compressed/head_32.S | 14 ++++++++------
|
|
||||||
arch/x86/boot/compressed/head_64.S | 9 +++------
|
|
||||||
3 files changed, 14 insertions(+), 14 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
|
|
||||||
index a7677ba..78cbb2d 100644
|
|
||||||
--- a/arch/x86/boot/compressed/eboot.c
|
|
||||||
+++ b/arch/x86/boot/compressed/eboot.c
|
|
||||||
@@ -425,6 +425,9 @@ void setup_graphics(struct boot_params *boot_params)
|
|
||||||
* Because the x86 boot code expects to be passed a boot_params we
|
|
||||||
* need to create one ourselves (usually the bootloader would create
|
|
||||||
* one for us).
|
|
||||||
+ *
|
|
||||||
+ * The caller is responsible for filling out ->code32_start in the
|
|
||||||
+ * returned boot_params.
|
|
||||||
*/
|
|
||||||
struct boot_params *make_boot_params(void *handle, efi_system_table_t *_table)
|
|
||||||
{
|
|
||||||
@@ -483,8 +486,6 @@ struct boot_params *make_boot_params(void *handle, efi_system_table_t *_table)
|
|
||||||
hdr->vid_mode = 0xffff;
|
|
||||||
hdr->boot_flag = 0xAA55;
|
|
||||||
|
|
||||||
- hdr->code32_start = (__u64)(unsigned long)image->image_base;
|
|
||||||
-
|
|
||||||
hdr->type_of_loader = 0x21;
|
|
||||||
|
|
||||||
/* Convert unicode cmdline to ascii */
|
|
||||||
diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
|
|
||||||
index 9116aac..f45ab7a 100644
|
|
||||||
--- a/arch/x86/boot/compressed/head_32.S
|
|
||||||
+++ b/arch/x86/boot/compressed/head_32.S
|
|
||||||
@@ -50,6 +50,13 @@ ENTRY(efi_pe_entry)
|
|
||||||
pushl %eax
|
|
||||||
pushl %esi
|
|
||||||
pushl %ecx
|
|
||||||
+
|
|
||||||
+ call reloc
|
|
||||||
+reloc:
|
|
||||||
+ popl %ecx
|
|
||||||
+ subl reloc, %ecx
|
|
||||||
+ movl %ecx, BP_code32_start(%eax)
|
|
||||||
+
|
|
||||||
sub $0x4, %esp
|
|
||||||
|
|
||||||
ENTRY(efi_stub_entry)
|
|
||||||
@@ -63,12 +70,7 @@ ENTRY(efi_stub_entry)
|
|
||||||
hlt
|
|
||||||
jmp 1b
|
|
||||||
2:
|
|
||||||
- call 3f
|
|
||||||
-3:
|
|
||||||
- popl %eax
|
|
||||||
- subl $3b, %eax
|
|
||||||
- subl BP_pref_address(%esi), %eax
|
|
||||||
- add BP_code32_start(%esi), %eax
|
|
||||||
+ movl BP_code32_start(%esi), %eax
|
|
||||||
leal preferred_addr(%eax), %eax
|
|
||||||
jmp *%eax
|
|
||||||
|
|
||||||
diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S
|
|
||||||
index c5c1ae0..b10fa66 100644
|
|
||||||
--- a/arch/x86/boot/compressed/head_64.S
|
|
||||||
+++ b/arch/x86/boot/compressed/head_64.S
|
|
||||||
@@ -217,6 +217,8 @@ ENTRY(efi_pe_entry)
|
|
||||||
cmpq $0,%rax
|
|
||||||
je 1f
|
|
||||||
mov %rax, %rdx
|
|
||||||
+ leaq startup_32(%rip), %rax
|
|
||||||
+ movl %eax, BP_code32_start(%rdx)
|
|
||||||
popq %rsi
|
|
||||||
popq %rdi
|
|
||||||
|
|
||||||
@@ -230,12 +232,7 @@ ENTRY(efi_stub_entry)
|
|
||||||
hlt
|
|
||||||
jmp 1b
|
|
||||||
2:
|
|
||||||
- call 3f
|
|
||||||
-3:
|
|
||||||
- popq %rax
|
|
||||||
- subq $3b, %rax
|
|
||||||
- subq BP_pref_address(%rsi), %rax
|
|
||||||
- add BP_code32_start(%esi), %eax
|
|
||||||
+ movl BP_code32_start(%esi), %eax
|
|
||||||
leaq preferred_addr(%rax), %rax
|
|
||||||
jmp *%rax
|
|
||||||
|
|
||||||
--
|
|
||||||
1.9.2
|
|
||||||
|
|
|
@ -1,94 +0,0 @@
|
||||||
From aafcd8f8692fb9e389608c1efad2e57c0bbb9362 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Linus Torvalds <torvalds@linux-foundation.org>
|
|
||||||
Date: Tue, 8 Apr 2014 15:30:07 -0700
|
|
||||||
Subject: [PATCH 08/10] futex: avoid race between requeue and wake
|
|
||||||
|
|
||||||
commit 69cd9eba38867a493a043bb13eb9b33cad5f1a9a upstream.
|
|
||||||
|
|
||||||
Jan Stancek reported:
|
|
||||||
"pthread_cond_broadcast/4-1.c testcase from openposix testsuite (LTP)
|
|
||||||
occasionally fails, because some threads fail to wake up.
|
|
||||||
|
|
||||||
Testcase creates 5 threads, which are all waiting on same condition.
|
|
||||||
Main thread then calls pthread_cond_broadcast() without holding mutex,
|
|
||||||
which calls:
|
|
||||||
|
|
||||||
futex(uaddr1, FUTEX_CMP_REQUEUE_PRIVATE, 1, 2147483647, uaddr2, ..)
|
|
||||||
|
|
||||||
This immediately wakes up single thread A, which unlocks mutex and
|
|
||||||
tries to wake up another thread:
|
|
||||||
|
|
||||||
futex(uaddr2, FUTEX_WAKE_PRIVATE, 1)
|
|
||||||
|
|
||||||
If thread A manages to call futex_wake() before any waiters are
|
|
||||||
requeued for uaddr2, no other thread is woken up"
|
|
||||||
|
|
||||||
The ordering constraints for the hash bucket waiter counting are that
|
|
||||||
the waiter counts have to be incremented _before_ getting the spinlock
|
|
||||||
(because the spinlock acts as part of the memory barrier), but the
|
|
||||||
"requeue" operation didn't honor those rules, and nobody had even
|
|
||||||
thought about that case.
|
|
||||||
|
|
||||||
This fairly simple patch just increments the waiter count for the target
|
|
||||||
hash bucket (hb2) when requeing a futex before taking the locks. It
|
|
||||||
then decrements them again after releasing the lock - the code that
|
|
||||||
actually moves the futex(es) between hash buckets will do the additional
|
|
||||||
required waiter count housekeeping.
|
|
||||||
|
|
||||||
Reported-and-tested-by: Jan Stancek <jstancek@redhat.com>
|
|
||||||
Acked-by: Davidlohr Bueso <davidlohr@hp.com>
|
|
||||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
|
||||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
|
||||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
|
||||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
||||||
---
|
|
||||||
kernel/futex.c | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/kernel/futex.c b/kernel/futex.c
|
|
||||||
index 08ec814..16b1f2c 100644
|
|
||||||
--- a/kernel/futex.c
|
|
||||||
+++ b/kernel/futex.c
|
|
||||||
@@ -1450,6 +1450,7 @@ retry:
|
|
||||||
hb2 = hash_futex(&key2);
|
|
||||||
|
|
||||||
retry_private:
|
|
||||||
+ hb_waiters_inc(hb2);
|
|
||||||
double_lock_hb(hb1, hb2);
|
|
||||||
|
|
||||||
if (likely(cmpval != NULL)) {
|
|
||||||
@@ -1459,6 +1460,7 @@ retry_private:
|
|
||||||
|
|
||||||
if (unlikely(ret)) {
|
|
||||||
double_unlock_hb(hb1, hb2);
|
|
||||||
+ hb_waiters_dec(hb2);
|
|
||||||
|
|
||||||
ret = get_user(curval, uaddr1);
|
|
||||||
if (ret)
|
|
||||||
@@ -1508,6 +1510,7 @@ retry_private:
|
|
||||||
break;
|
|
||||||
case -EFAULT:
|
|
||||||
double_unlock_hb(hb1, hb2);
|
|
||||||
+ hb_waiters_dec(hb2);
|
|
||||||
put_futex_key(&key2);
|
|
||||||
put_futex_key(&key1);
|
|
||||||
ret = fault_in_user_writeable(uaddr2);
|
|
||||||
@@ -1517,6 +1520,7 @@ retry_private:
|
|
||||||
case -EAGAIN:
|
|
||||||
/* The owner was exiting, try again. */
|
|
||||||
double_unlock_hb(hb1, hb2);
|
|
||||||
+ hb_waiters_dec(hb2);
|
|
||||||
put_futex_key(&key2);
|
|
||||||
put_futex_key(&key1);
|
|
||||||
cond_resched();
|
|
||||||
@@ -1592,6 +1596,7 @@ retry_private:
|
|
||||||
|
|
||||||
out_unlock:
|
|
||||||
double_unlock_hb(hb1, hb2);
|
|
||||||
+ hb_waiters_dec(hb2);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* drop_futex_key_refs() must be called outside the spinlocks. During
|
|
||||||
--
|
|
||||||
1.9.2
|
|
||||||
|
|
|
@ -1,125 +0,0 @@
|
||||||
From 06af061dd673d749d5516bea41e2becb034e00b8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Eyal Shapira <eyal@wizery.com>
|
|
||||||
Date: Sun, 16 Mar 2014 05:23:21 +0200
|
|
||||||
Subject: [PATCH 09/10] iwlwifi: mvm: rs: fix search cycle rules
|
|
||||||
|
|
||||||
commit 8930b05090acd321b1fc7c642528c697cb105c42 upstream.
|
|
||||||
|
|
||||||
We should explore all possible columns when searching to be
|
|
||||||
as resilient as possible to changing conditions. This fixes
|
|
||||||
for example a scenario where even after a sudden creation of
|
|
||||||
rssi difference between the 2 antennas we would keep doing MIMO
|
|
||||||
at a low rate instead of switching to SISO at a higher rate using
|
|
||||||
the better antenna which was the optimal configuration.
|
|
||||||
|
|
||||||
Signed-off-by: Eyal Shapira <eyalx.shapira@intel.com>
|
|
||||||
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
|
||||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
||||||
---
|
|
||||||
drivers/net/wireless/iwlwifi/mvm/rs.c | 36 +++++++++++++++++------------------
|
|
||||||
1 file changed, 18 insertions(+), 18 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c
|
|
||||||
index 6abf74e..5bc8715 100644
|
|
||||||
--- a/drivers/net/wireless/iwlwifi/mvm/rs.c
|
|
||||||
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.c
|
|
||||||
@@ -211,9 +211,9 @@ static const struct rs_tx_column rs_tx_columns[] = {
|
|
||||||
.next_columns = {
|
|
||||||
RS_COLUMN_LEGACY_ANT_B,
|
|
||||||
RS_COLUMN_SISO_ANT_A,
|
|
||||||
+ RS_COLUMN_SISO_ANT_B,
|
|
||||||
RS_COLUMN_MIMO2,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
+ RS_COLUMN_MIMO2_SGI,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[RS_COLUMN_LEGACY_ANT_B] = {
|
|
||||||
@@ -221,10 +221,10 @@ static const struct rs_tx_column rs_tx_columns[] = {
|
|
||||||
.ant = ANT_B,
|
|
||||||
.next_columns = {
|
|
||||||
RS_COLUMN_LEGACY_ANT_A,
|
|
||||||
+ RS_COLUMN_SISO_ANT_A,
|
|
||||||
RS_COLUMN_SISO_ANT_B,
|
|
||||||
RS_COLUMN_MIMO2,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
+ RS_COLUMN_MIMO2_SGI,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[RS_COLUMN_SISO_ANT_A] = {
|
|
||||||
@@ -234,8 +234,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
|
|
||||||
RS_COLUMN_SISO_ANT_B,
|
|
||||||
RS_COLUMN_MIMO2,
|
|
||||||
RS_COLUMN_SISO_ANT_A_SGI,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
+ RS_COLUMN_SISO_ANT_B_SGI,
|
|
||||||
+ RS_COLUMN_MIMO2_SGI,
|
|
||||||
},
|
|
||||||
.checks = {
|
|
||||||
rs_siso_allow,
|
|
||||||
@@ -248,8 +248,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
|
|
||||||
RS_COLUMN_SISO_ANT_A,
|
|
||||||
RS_COLUMN_MIMO2,
|
|
||||||
RS_COLUMN_SISO_ANT_B_SGI,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
+ RS_COLUMN_SISO_ANT_A_SGI,
|
|
||||||
+ RS_COLUMN_MIMO2_SGI,
|
|
||||||
},
|
|
||||||
.checks = {
|
|
||||||
rs_siso_allow,
|
|
||||||
@@ -263,8 +263,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
|
|
||||||
RS_COLUMN_SISO_ANT_B_SGI,
|
|
||||||
RS_COLUMN_MIMO2_SGI,
|
|
||||||
RS_COLUMN_SISO_ANT_A,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
+ RS_COLUMN_SISO_ANT_B,
|
|
||||||
+ RS_COLUMN_MIMO2,
|
|
||||||
},
|
|
||||||
.checks = {
|
|
||||||
rs_siso_allow,
|
|
||||||
@@ -279,8 +279,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
|
|
||||||
RS_COLUMN_SISO_ANT_A_SGI,
|
|
||||||
RS_COLUMN_MIMO2_SGI,
|
|
||||||
RS_COLUMN_SISO_ANT_B,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
+ RS_COLUMN_SISO_ANT_A,
|
|
||||||
+ RS_COLUMN_MIMO2,
|
|
||||||
},
|
|
||||||
.checks = {
|
|
||||||
rs_siso_allow,
|
|
||||||
@@ -292,10 +292,10 @@ static const struct rs_tx_column rs_tx_columns[] = {
|
|
||||||
.ant = ANT_AB,
|
|
||||||
.next_columns = {
|
|
||||||
RS_COLUMN_SISO_ANT_A,
|
|
||||||
+ RS_COLUMN_SISO_ANT_B,
|
|
||||||
+ RS_COLUMN_SISO_ANT_A_SGI,
|
|
||||||
+ RS_COLUMN_SISO_ANT_B_SGI,
|
|
||||||
RS_COLUMN_MIMO2_SGI,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
},
|
|
||||||
.checks = {
|
|
||||||
rs_mimo_allow,
|
|
||||||
@@ -307,10 +307,10 @@ static const struct rs_tx_column rs_tx_columns[] = {
|
|
||||||
.sgi = true,
|
|
||||||
.next_columns = {
|
|
||||||
RS_COLUMN_SISO_ANT_A_SGI,
|
|
||||||
+ RS_COLUMN_SISO_ANT_B_SGI,
|
|
||||||
+ RS_COLUMN_SISO_ANT_A,
|
|
||||||
+ RS_COLUMN_SISO_ANT_B,
|
|
||||||
RS_COLUMN_MIMO2,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
- RS_COLUMN_INVALID,
|
|
||||||
},
|
|
||||||
.checks = {
|
|
||||||
rs_mimo_allow,
|
|
||||||
--
|
|
||||||
1.9.2
|
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c
|
|
||||||
index 8034706..e01ea4a 100644
|
|
||||||
--- a/fs/kernfs/file.c
|
|
||||||
+++ b/fs/kernfs/file.c
|
|
||||||
@@ -484,6 +484,8 @@ static int kernfs_fop_mmap(struct file *file, struct vm_area_struct *vma)
|
|
||||||
|
|
||||||
ops = kernfs_ops(of->kn);
|
|
||||||
rc = ops->mmap(of, vma);
|
|
||||||
+ if (rc)
|
|
||||||
+ goto out_put;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PowerPC's pci_mmap of legacy_mem uses shmem_zero_setup()
|
|
Loading…
Reference in New Issue