Update to 3.9
Drop many patches and refresh a few others. [rt] Disable until it is updated for Linux 3.9 or later svn path=/dists/trunk/linux/; revision=20052
This commit is contained in:
parent
f0b5fe588b
commit
56e6ea5572
|
@ -1,3 +1,12 @@
|
|||
linux (3.9-1~experimental.1) UNRELEASED; urgency=low
|
||||
|
||||
* New upstream release: http://kernelnewbies.org/Linux_3.9
|
||||
|
||||
[ Ben Hutchings ]
|
||||
* [rt] Disable until it is updated for Linux 3.9 or later
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Mon, 06 May 2013 13:17:52 +0100
|
||||
|
||||
linux (3.8.5-1~experimental.1) experimental; urgency=high
|
||||
|
||||
* New upstream stable update:
|
||||
|
|
|
@ -28,7 +28,7 @@ featuresets:
|
|||
rt
|
||||
|
||||
[featureset-rt_base]
|
||||
enabled: true
|
||||
enabled: false
|
||||
|
||||
[description]
|
||||
part-long-up: This kernel is not suitable for SMP (multi-processor,
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
From: Andy Honig <ahonig@google.com>
|
||||
Date: Wed, 20 Feb 2013 14:49:16 -0800
|
||||
Subject: KVM: Fix bounds checking in ioapic indirect register reads
|
||||
(CVE-2013-1798)
|
||||
|
||||
commit a2c118bfab8bc6b8bb213abfc35201e441693d55 upstream.
|
||||
|
||||
If the guest specifies a IOAPIC_REG_SELECT with an invalid value and follows
|
||||
that with a read of the IOAPIC_REG_WINDOW KVM does not properly validate
|
||||
that request. ioapic_read_indirect contains an
|
||||
ASSERT(redir_index < IOAPIC_NUM_PINS), but the ASSERT has no effect in
|
||||
non-debug builds. In recent kernels this allows a guest to cause a kernel
|
||||
oops by reading invalid memory. In older kernels (pre-3.3) this allows a
|
||||
guest to read from large ranges of host memory.
|
||||
|
||||
Tested: tested against apic unit tests.
|
||||
|
||||
Signed-off-by: Andrew Honig <ahonig@google.com>
|
||||
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
|
||||
---
|
||||
virt/kvm/ioapic.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
|
||||
index ce82b94..5ba005c 100644
|
||||
--- a/virt/kvm/ioapic.c
|
||||
+++ b/virt/kvm/ioapic.c
|
||||
@@ -74,9 +74,12 @@ static unsigned long ioapic_read_indirect(struct kvm_ioapic *ioapic,
|
||||
u32 redir_index = (ioapic->ioregsel - 0x10) >> 1;
|
||||
u64 redir_content;
|
||||
|
||||
- ASSERT(redir_index < IOAPIC_NUM_PINS);
|
||||
+ if (redir_index < IOAPIC_NUM_PINS)
|
||||
+ redir_content =
|
||||
+ ioapic->redirtbl[redir_index].bits;
|
||||
+ else
|
||||
+ redir_content = ~0ULL;
|
||||
|
||||
- redir_content = ioapic->redirtbl[redir_index].bits;
|
||||
result = (ioapic->ioregsel & 0x1) ?
|
||||
(redir_content >> 32) & 0xffffffff :
|
||||
redir_content & 0xffffffff;
|
|
@ -1,160 +0,0 @@
|
|||
From: Seiji Aguchi <seiji.aguchi@hds.com>
|
||||
Date: Tue, 12 Feb 2013 13:04:41 -0800
|
||||
Subject: efi_pstore: Introducing workqueue updating sysfs
|
||||
|
||||
commit a93bc0c6e07ed9bac44700280e65e2945d864fd4 upstream.
|
||||
|
||||
[Problem]
|
||||
efi_pstore creates sysfs entries, which enable users to access to NVRAM,
|
||||
in a write callback. If a kernel panic happens in an interrupt context,
|
||||
it may fail because it could sleep due to dynamic memory allocations during
|
||||
creating sysfs entries.
|
||||
|
||||
[Patch Description]
|
||||
This patch removes sysfs operations from a write callback by introducing
|
||||
a workqueue updating sysfs entries which is scheduled after the write
|
||||
callback is called.
|
||||
|
||||
Also, the workqueue is kicked in a just oops case.
|
||||
A system will go down in other cases such as panic, clean shutdown and emergency
|
||||
restart. And we don't need to create sysfs entries because there is no chance for
|
||||
users to access to them.
|
||||
|
||||
efi_pstore will be robust against a kernel panic in an interrupt context with this patch.
|
||||
|
||||
Signed-off-by: Seiji Aguchi <seiji.aguchi@hds.com>
|
||||
Acked-by: Matt Fleming <matt.fleming@intel.com>
|
||||
Signed-off-by: Tony Luck <tony.luck@intel.com>
|
||||
[bwh: Backported to 3.8: adjust context]
|
||||
---
|
||||
drivers/firmware/efivars.c | 85 +++++++++++++++++++++++++++++++++++++++++---
|
||||
include/linux/efi.h | 3 +-
|
||||
2 files changed, 82 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/firmware/efivars.c
|
||||
+++ b/drivers/firmware/efivars.c
|
||||
@@ -165,6 +165,13 @@ efivar_create_sysfs_entry(struct efivars
|
||||
efi_char16_t *variable_name,
|
||||
efi_guid_t *vendor_guid);
|
||||
|
||||
+/*
|
||||
+ * Prototype for workqueue functions updating sysfs entry
|
||||
+ */
|
||||
+
|
||||
+static void efivar_update_sysfs_entries(struct work_struct *);
|
||||
+static DECLARE_WORK(efivar_work, efivar_update_sysfs_entries);
|
||||
+
|
||||
/* Return the number of unicode characters in data */
|
||||
static unsigned long
|
||||
utf16_strnlen(efi_char16_t *s, size_t maxlength)
|
||||
@@ -1428,11 +1435,8 @@ static int efi_pstore_write(enum pstore_
|
||||
|
||||
spin_unlock_irqrestore(&efivars->lock, flags);
|
||||
|
||||
- if (size)
|
||||
- ret = efivar_create_sysfs_entry(efivars,
|
||||
- utf16_strsize(efi_name,
|
||||
- DUMP_NAME_LEN * 2),
|
||||
- efi_name, &vendor);
|
||||
+ if (reason == KMSG_DUMP_OOPS)
|
||||
+ schedule_work(&efivar_work);
|
||||
|
||||
*id = part;
|
||||
return ret;
|
||||
@@ -1670,6 +1674,75 @@ static ssize_t efivar_delete(struct file
|
||||
return count;
|
||||
}
|
||||
|
||||
+static bool variable_is_present(efi_char16_t *variable_name, efi_guid_t *vendor)
|
||||
+{
|
||||
+ struct efivar_entry *entry, *n;
|
||||
+ struct efivars *efivars = &__efivars;
|
||||
+ unsigned long strsize1, strsize2;
|
||||
+ bool found = false;
|
||||
+
|
||||
+ strsize1 = utf16_strsize(variable_name, 1024);
|
||||
+ list_for_each_entry_safe(entry, n, &efivars->list, list) {
|
||||
+ strsize2 = utf16_strsize(entry->var.VariableName, 1024);
|
||||
+ if (strsize1 == strsize2 &&
|
||||
+ !memcmp(variable_name, &(entry->var.VariableName),
|
||||
+ strsize2) &&
|
||||
+ !efi_guidcmp(entry->var.VendorGuid,
|
||||
+ *vendor)) {
|
||||
+ found = true;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ return found;
|
||||
+}
|
||||
+
|
||||
+static void efivar_update_sysfs_entries(struct work_struct *work)
|
||||
+{
|
||||
+ struct efivars *efivars = &__efivars;
|
||||
+ efi_guid_t vendor;
|
||||
+ efi_char16_t *variable_name;
|
||||
+ unsigned long variable_name_size = 1024;
|
||||
+ efi_status_t status = EFI_NOT_FOUND;
|
||||
+ bool found;
|
||||
+
|
||||
+ /* Add new sysfs entries */
|
||||
+ while (1) {
|
||||
+ variable_name = kzalloc(variable_name_size, GFP_KERNEL);
|
||||
+ if (!variable_name) {
|
||||
+ pr_err("efivars: Memory allocation failed.\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ spin_lock_irq(&efivars->lock);
|
||||
+ found = false;
|
||||
+ while (1) {
|
||||
+ variable_name_size = 1024;
|
||||
+ status = efivars->ops->get_next_variable(
|
||||
+ &variable_name_size,
|
||||
+ variable_name,
|
||||
+ &vendor);
|
||||
+ if (status != EFI_SUCCESS) {
|
||||
+ break;
|
||||
+ } else {
|
||||
+ if (!variable_is_present(variable_name,
|
||||
+ &vendor)) {
|
||||
+ found = true;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ spin_unlock_irq(&efivars->lock);
|
||||
+
|
||||
+ if (!found) {
|
||||
+ kfree(variable_name);
|
||||
+ break;
|
||||
+ } else
|
||||
+ efivar_create_sysfs_entry(efivars,
|
||||
+ variable_name_size,
|
||||
+ variable_name, &vendor);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Let's not leave out systab information that snuck into
|
||||
* the efivars driver
|
||||
@@ -2000,6 +2073,8 @@ err_put:
|
||||
static void __exit
|
||||
efivars_exit(void)
|
||||
{
|
||||
+ cancel_work_sync(&efivar_work);
|
||||
+
|
||||
if (efi_enabled(EFI_RUNTIME_SERVICES)) {
|
||||
unregister_efivars(&__efivars);
|
||||
kobject_put(efi_kobj);
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -740,7 +740,8 @@ struct efivars {
|
||||
* 1) ->list - adds, removals, reads, writes
|
||||
* 2) ops.[gs]et_variable() calls.
|
||||
* It must not be held when creating sysfs entries or calling kmalloc.
|
||||
- * ops.get_next_variable() is only called from register_efivars(),
|
||||
+ * ops.get_next_variable() is only called from register_efivars()
|
||||
+ * or efivar_update_sysfs_entries(),
|
||||
* which is protected by the BKL, so that path is safe.
|
||||
*/
|
||||
spinlock_t lock;
|
|
@ -1,156 +0,0 @@
|
|||
From: Matt Fleming <matt.fleming@intel.com>
|
||||
Date: Thu, 7 Mar 2013 11:59:14 +0000
|
||||
Subject: efivars: Handle duplicate names from get_next_variable()
|
||||
|
||||
commit e971318bbed610e28bb3fde9d548e6aaf0a6b02e upstream.
|
||||
|
||||
Some firmware exhibits a bug where the same VariableName and
|
||||
VendorGuid values are returned on multiple invocations of
|
||||
GetNextVariableName(). See,
|
||||
|
||||
https://bugzilla.kernel.org/show_bug.cgi?id=47631
|
||||
|
||||
As a consequence of such a bug, Andre reports hitting the following
|
||||
WARN_ON() in the sysfs code after updating the BIOS on his, "Gigabyte
|
||||
Technology Co., Ltd. To be filled by O.E.M./Z77X-UD3H, BIOS F19e
|
||||
11/21/2012)" machine,
|
||||
|
||||
[ 0.581554] EFI Variables Facility v0.08 2004-May-17
|
||||
[ 0.584914] ------------[ cut here ]------------
|
||||
[ 0.585639] WARNING: at /home/andre/linux/fs/sysfs/dir.c:536 sysfs_add_one+0xd4/0x100()
|
||||
[ 0.586381] Hardware name: To be filled by O.E.M.
|
||||
[ 0.587123] sysfs: cannot create duplicate filename '/firmware/efi/vars/SbAslBufferPtrVar-01f33c25-764d-43ea-aeea-6b5a41f3f3e8'
|
||||
[ 0.588694] Modules linked in:
|
||||
[ 0.589484] Pid: 1, comm: swapper/0 Not tainted 3.8.0+ #7
|
||||
[ 0.590280] Call Trace:
|
||||
[ 0.591066] [<ffffffff81208954>] ? sysfs_add_one+0xd4/0x100
|
||||
[ 0.591861] [<ffffffff810587bf>] warn_slowpath_common+0x7f/0xc0
|
||||
[ 0.592650] [<ffffffff810588bc>] warn_slowpath_fmt+0x4c/0x50
|
||||
[ 0.593429] [<ffffffff8134dd85>] ? strlcat+0x65/0x80
|
||||
[ 0.594203] [<ffffffff81208954>] sysfs_add_one+0xd4/0x100
|
||||
[ 0.594979] [<ffffffff81208b78>] create_dir+0x78/0xd0
|
||||
[ 0.595753] [<ffffffff81208ec6>] sysfs_create_dir+0x86/0xe0
|
||||
[ 0.596532] [<ffffffff81347e4c>] kobject_add_internal+0x9c/0x220
|
||||
[ 0.597310] [<ffffffff81348307>] kobject_init_and_add+0x67/0x90
|
||||
[ 0.598083] [<ffffffff81584a71>] ? efivar_create_sysfs_entry+0x61/0x1c0
|
||||
[ 0.598859] [<ffffffff81584b2b>] efivar_create_sysfs_entry+0x11b/0x1c0
|
||||
[ 0.599631] [<ffffffff8158517e>] register_efivars+0xde/0x420
|
||||
[ 0.600395] [<ffffffff81d430a7>] ? edd_init+0x2f5/0x2f5
|
||||
[ 0.601150] [<ffffffff81d4315f>] efivars_init+0xb8/0x104
|
||||
[ 0.601903] [<ffffffff8100215a>] do_one_initcall+0x12a/0x180
|
||||
[ 0.602659] [<ffffffff81d05d80>] kernel_init_freeable+0x13e/0x1c6
|
||||
[ 0.603418] [<ffffffff81d05586>] ? loglevel+0x31/0x31
|
||||
[ 0.604183] [<ffffffff816a6530>] ? rest_init+0x80/0x80
|
||||
[ 0.604936] [<ffffffff816a653e>] kernel_init+0xe/0xf0
|
||||
[ 0.605681] [<ffffffff816ce7ec>] ret_from_fork+0x7c/0xb0
|
||||
[ 0.606414] [<ffffffff816a6530>] ? rest_init+0x80/0x80
|
||||
[ 0.607143] ---[ end trace 1609741ab737eb29 ]---
|
||||
|
||||
There's not much we can do to work around and keep traversing the
|
||||
variable list once we hit this firmware bug. Our only solution is to
|
||||
terminate the loop because, as Lingzhu reports, some machines get
|
||||
stuck when they encounter duplicate names,
|
||||
|
||||
> I had an IBM System x3100 M4 and x3850 X5 on which kernel would
|
||||
> get stuck in infinite loop creating duplicate sysfs files because,
|
||||
> for some reason, there are several duplicate boot entries in nvram
|
||||
> getting GetNextVariableName into a circle of iteration (with
|
||||
> period > 2).
|
||||
|
||||
Also disable the workqueue, as efivar_update_sysfs_entries() uses
|
||||
GetNextVariableName() to figure out which variables have been created
|
||||
since the last iteration. That algorithm isn't going to work if
|
||||
GetNextVariableName() returns duplicates. Note that we don't disable
|
||||
EFI variable creation completely on the affected machines, it's just
|
||||
that any pstore dump-* files won't appear in sysfs until the next
|
||||
boot.
|
||||
|
||||
Reported-by: Andre Heider <a.heider@gmail.com>
|
||||
Reported-by: Lingzhu Xiang <lxiang@redhat.com>
|
||||
Tested-by: Lingzhu Xiang <lxiang@redhat.com>
|
||||
Cc: Seiji Aguchi <seiji.aguchi@hds.com>
|
||||
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
||||
---
|
||||
drivers/firmware/efivars.c | 48 +++++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 47 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
|
||||
index 1e9d9b9..d64661f 100644
|
||||
--- a/drivers/firmware/efivars.c
|
||||
+++ b/drivers/firmware/efivars.c
|
||||
@@ -170,6 +170,7 @@ efivar_create_sysfs_entry(struct efivars *efivars,
|
||||
|
||||
static void efivar_update_sysfs_entries(struct work_struct *);
|
||||
static DECLARE_WORK(efivar_work, efivar_update_sysfs_entries);
|
||||
+static bool efivar_wq_enabled = true;
|
||||
|
||||
/* Return the number of unicode characters in data */
|
||||
static unsigned long
|
||||
@@ -1444,7 +1445,7 @@ static int efi_pstore_write(enum pstore_type_id type,
|
||||
|
||||
spin_unlock_irqrestore(&efivars->lock, flags);
|
||||
|
||||
- if (reason == KMSG_DUMP_OOPS)
|
||||
+ if (reason == KMSG_DUMP_OOPS && efivar_wq_enabled)
|
||||
schedule_work(&efivar_work);
|
||||
|
||||
*id = part;
|
||||
@@ -1975,6 +1976,35 @@ void unregister_efivars(struct efivars *efivars)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(unregister_efivars);
|
||||
|
||||
+/*
|
||||
+ * Print a warning when duplicate EFI variables are encountered and
|
||||
+ * disable the sysfs workqueue since the firmware is buggy.
|
||||
+ */
|
||||
+static void dup_variable_bug(efi_char16_t *s16, efi_guid_t *vendor_guid,
|
||||
+ unsigned long len16)
|
||||
+{
|
||||
+ size_t i, len8 = len16 / sizeof(efi_char16_t);
|
||||
+ char *s8;
|
||||
+
|
||||
+ /*
|
||||
+ * Disable the workqueue since the algorithm it uses for
|
||||
+ * detecting new variables won't work with this buggy
|
||||
+ * implementation of GetNextVariableName().
|
||||
+ */
|
||||
+ efivar_wq_enabled = false;
|
||||
+
|
||||
+ s8 = kzalloc(len8, GFP_KERNEL);
|
||||
+ if (!s8)
|
||||
+ return;
|
||||
+
|
||||
+ for (i = 0; i < len8; i++)
|
||||
+ s8[i] = s16[i];
|
||||
+
|
||||
+ printk(KERN_WARNING "efivars: duplicate variable: %s-%pUl\n",
|
||||
+ s8, vendor_guid);
|
||||
+ kfree(s8);
|
||||
+}
|
||||
+
|
||||
int register_efivars(struct efivars *efivars,
|
||||
const struct efivar_operations *ops,
|
||||
struct kobject *parent_kobj)
|
||||
@@ -2025,6 +2055,22 @@ int register_efivars(struct efivars *efivars,
|
||||
case EFI_SUCCESS:
|
||||
variable_name_size = var_name_strnsize(variable_name,
|
||||
variable_name_size);
|
||||
+
|
||||
+ /*
|
||||
+ * Some firmware implementations return the
|
||||
+ * same variable name on multiple calls to
|
||||
+ * get_next_variable(). Terminate the loop
|
||||
+ * immediately as there is no guarantee that
|
||||
+ * we'll ever see a different variable name,
|
||||
+ * and may end up looping here forever.
|
||||
+ */
|
||||
+ if (variable_is_present(variable_name, &vendor_guid)) {
|
||||
+ dup_variable_bug(variable_name, &vendor_guid,
|
||||
+ variable_name_size);
|
||||
+ status = EFI_NOT_FOUND;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
efivar_create_sysfs_entry(efivars,
|
||||
variable_name_size,
|
||||
variable_name,
|
|
@ -1,101 +0,0 @@
|
|||
From: Matt Fleming <matt.fleming@intel.com>
|
||||
Date: Fri, 1 Mar 2013 14:49:12 +0000
|
||||
Subject: efivars: explicitly calculate length of VariableName
|
||||
|
||||
commit ec50bd32f1672d38ddce10fb1841cbfda89cfe9a upstream.
|
||||
|
||||
It's not wise to assume VariableNameSize represents the length of
|
||||
VariableName, as not all firmware updates VariableNameSize in the same
|
||||
way (some don't update it at all if EFI_SUCCESS is returned). There
|
||||
are even implementations out there that update VariableNameSize with
|
||||
values that are both larger than the string returned in VariableName
|
||||
and smaller than the buffer passed to GetNextVariableName(), which
|
||||
resulted in the following bug report from Michael Schroeder,
|
||||
|
||||
> On HP z220 system (firmware version 1.54), some EFI variables are
|
||||
> incorrectly named :
|
||||
>
|
||||
> ls -d /sys/firmware/efi/vars/*8be4d* | grep -v -- -8be returns
|
||||
> /sys/firmware/efi/vars/dbxDefault-pport8be4df61-93ca-11d2-aa0d-00e098032b8c
|
||||
> /sys/firmware/efi/vars/KEKDefault-pport8be4df61-93ca-11d2-aa0d-00e098032b8c
|
||||
> /sys/firmware/efi/vars/SecureBoot-pport8be4df61-93ca-11d2-aa0d-00e098032b8c
|
||||
> /sys/firmware/efi/vars/SetupMode-Information8be4df61-93ca-11d2-aa0d-00e098032b8c
|
||||
|
||||
The issue here is that because we blindly use VariableNameSize without
|
||||
verifying its value, we can potentially read garbage values from the
|
||||
buffer containing VariableName if VariableNameSize is larger than the
|
||||
length of VariableName.
|
||||
|
||||
Since VariableName is a string, we can calculate its size by searching
|
||||
for the terminating NULL character.
|
||||
|
||||
Reported-by: Frederic Crozat <fcrozat@suse.com>
|
||||
Cc: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||
Cc: Josh Boyer <jwboyer@redhat.com>
|
||||
Cc: Michael Schroeder <mls@suse.com>
|
||||
Cc: Lee, Chun-Yi <jlee@suse.com>
|
||||
Cc: Lingzhu Xiang <lxiang@redhat.com>
|
||||
Cc: Seiji Aguchi <seiji.aguchi@hds.com>
|
||||
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
||||
---
|
||||
drivers/firmware/efivars.c | 32 +++++++++++++++++++++++++++++++-
|
||||
1 file changed, 31 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/firmware/efivars.c
|
||||
+++ b/drivers/firmware/efivars.c
|
||||
@@ -1044,6 +1044,31 @@ static bool variable_is_present(efi_char
|
||||
return found;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Returns the size of variable_name, in bytes, including the
|
||||
+ * terminating NULL character, or variable_name_size if no NULL
|
||||
+ * character is found among the first variable_name_size bytes.
|
||||
+ */
|
||||
+static unsigned long var_name_strnsize(efi_char16_t *variable_name,
|
||||
+ unsigned long variable_name_size)
|
||||
+{
|
||||
+ unsigned long len;
|
||||
+ efi_char16_t c;
|
||||
+
|
||||
+ /*
|
||||
+ * The variable name is, by definition, a NULL-terminated
|
||||
+ * string, so make absolutely sure that variable_name_size is
|
||||
+ * the value we expect it to be. If not, return the real size.
|
||||
+ */
|
||||
+ for (len = 2; len <= variable_name_size; len += sizeof(c)) {
|
||||
+ c = variable_name[(len / sizeof(c)) - 1];
|
||||
+ if (!c)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return min(len, variable_name_size);
|
||||
+}
|
||||
+
|
||||
static void efivar_update_sysfs_entries(struct work_struct *work)
|
||||
{
|
||||
struct efivars *efivars = &__efivars;
|
||||
@@ -1084,10 +1109,13 @@ static void efivar_update_sysfs_entries(
|
||||
if (!found) {
|
||||
kfree(variable_name);
|
||||
break;
|
||||
- } else
|
||||
+ } else {
|
||||
+ variable_name_size = var_name_strnsize(variable_name,
|
||||
+ variable_name_size);
|
||||
efivar_create_sysfs_entry(efivars,
|
||||
variable_name_size,
|
||||
variable_name, &vendor);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1318,6 +1346,8 @@ int register_efivars(struct efivars *efi
|
||||
&vendor_guid);
|
||||
switch (status) {
|
||||
case EFI_SUCCESS:
|
||||
+ variable_name_size = var_name_strnsize(variable_name,
|
||||
+ variable_name_size);
|
||||
efivar_create_sysfs_entry(efivars,
|
||||
variable_name_size,
|
||||
variable_name,
|
|
@ -95,7 +95,7 @@ upstream submission.
|
|||
fw_size = firmware->size / sizeof(u32);
|
||||
--- a/drivers/bluetooth/ath3k.c
|
||||
+++ b/drivers/bluetooth/ath3k.c
|
||||
@@ -317,10 +317,8 @@ static int ath3k_load_patch(struct usb_d
|
||||
@@ -325,10 +325,8 @@ static int ath3k_load_patch(struct usb_d
|
||||
fw_version.rom_version);
|
||||
|
||||
ret = request_firmware(&firmware, filename, &udev->dev);
|
||||
|
@ -107,7 +107,7 @@ upstream submission.
|
|||
|
||||
pt_version.rom_version = *(int *)(firmware->data + firmware->size - 8);
|
||||
pt_version.build_version = *(int *)
|
||||
@@ -379,10 +377,8 @@ static int ath3k_load_syscfg(struct usb_
|
||||
@@ -387,10 +385,8 @@ static int ath3k_load_syscfg(struct usb_
|
||||
fw_version.rom_version, clk_value, ".dfu");
|
||||
|
||||
ret = request_firmware(&firmware, filename, &udev->dev);
|
||||
|
@ -231,7 +231,7 @@ upstream submission.
|
|||
where = 0;
|
||||
--- a/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
|
||||
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
|
||||
@@ -497,10 +497,8 @@ nvc0_graph_ctor_fw(struct nvc0_graph_pri
|
||||
@@ -499,10 +499,8 @@ nvc0_graph_ctor_fw(struct nvc0_graph_pri
|
||||
if (ret) {
|
||||
snprintf(f, sizeof(f), "nouveau/%s", fwname);
|
||||
ret = request_firmware(&fw, f, &device->pdev->dev);
|
||||
|
@ -260,7 +260,7 @@ upstream submission.
|
|||
printk(KERN_ERR
|
||||
--- a/drivers/gpu/drm/radeon/ni.c
|
||||
+++ b/drivers/gpu/drm/radeon/ni.c
|
||||
@@ -398,10 +398,6 @@ out:
|
||||
@@ -400,10 +400,6 @@ out:
|
||||
platform_device_unregister(pdev);
|
||||
|
||||
if (err) {
|
||||
|
@ -287,7 +287,7 @@ upstream submission.
|
|||
rdev->me_fw->size, fw_name);
|
||||
--- a/drivers/gpu/drm/radeon/r600.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600.c
|
||||
@@ -2099,10 +2099,6 @@ out:
|
||||
@@ -2248,10 +2248,6 @@ out:
|
||||
platform_device_unregister(pdev);
|
||||
|
||||
if (err) {
|
||||
|
@ -300,7 +300,7 @@ upstream submission.
|
|||
release_firmware(rdev->me_fw);
|
||||
--- a/drivers/gpu/drm/radeon/r600_cp.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600_cp.c
|
||||
@@ -374,10 +374,6 @@ out:
|
||||
@@ -376,10 +376,6 @@ out:
|
||||
platform_device_unregister(pdev);
|
||||
|
||||
if (err) {
|
||||
|
@ -313,7 +313,7 @@ upstream submission.
|
|||
release_firmware(dev_priv->me_fw);
|
||||
--- a/drivers/gpu/drm/radeon/radeon_cp.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_cp.c
|
||||
@@ -528,10 +528,7 @@ static int radeon_cp_init_microcode(drm_
|
||||
@@ -530,10 +530,7 @@ static int radeon_cp_init_microcode(drm_
|
||||
|
||||
err = request_firmware(&dev_priv->me_fw, fw_name, &pdev->dev);
|
||||
platform_device_unregister(pdev);
|
||||
|
@ -341,7 +341,7 @@ upstream submission.
|
|||
ret = qib_ibsd_ucode_loaded(dd->pport, fw);
|
||||
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
@@ -954,10 +954,8 @@ static int mxt_load_fw(struct device *de
|
||||
@@ -986,10 +986,8 @@ static int mxt_load_fw(struct device *de
|
||||
int ret;
|
||||
|
||||
ret = request_firmware(&fw, fn, dev);
|
||||
|
@ -548,7 +548,7 @@ upstream submission.
|
|||
/*
|
||||
--- a/drivers/media/dvb-frontends/ds3000.c
|
||||
+++ b/drivers/media/dvb-frontends/ds3000.c
|
||||
@@ -401,12 +401,8 @@ static int ds3000_firmware_ondemand(stru
|
||||
@@ -362,12 +362,8 @@ static int ds3000_firmware_ondemand(stru
|
||||
DS3000_DEFAULT_FIRMWARE);
|
||||
ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE,
|
||||
state->i2c->dev.parent);
|
||||
|
@ -609,14 +609,14 @@ upstream submission.
|
|||
if (ret) {
|
||||
--- a/drivers/media/dvb-frontends/or51211.c
|
||||
+++ b/drivers/media/dvb-frontends/or51211.c
|
||||
@@ -379,12 +379,8 @@ static int or51211_init(struct dvb_front
|
||||
"(%s)...\n", OR51211_DEFAULT_FIRMWARE);
|
||||
@@ -375,12 +375,8 @@ static int or51211_init(struct dvb_front
|
||||
OR51211_DEFAULT_FIRMWARE);
|
||||
ret = config->request_firmware(fe, &fw,
|
||||
OR51211_DEFAULT_FIRMWARE);
|
||||
- printk(KERN_INFO "or51211:Got Hotplug firmware\n");
|
||||
- pr_info("Got Hotplug firmware\n");
|
||||
- if (ret) {
|
||||
- printk(KERN_WARNING "or51211: No firmware uploaded "
|
||||
- "(timeout or file not found?)\n");
|
||||
- pr_warn("No firmware uploaded "
|
||||
- "(timeout or file not found?)\n");
|
||||
+ if (ret)
|
||||
return ret;
|
||||
- }
|
||||
|
@ -963,7 +963,7 @@ upstream submission.
|
|||
printk(KERN_ERR "ERROR: Firmware size mismatch "
|
||||
--- a/drivers/media/pci/cx23885/cx23885-cards.c
|
||||
+++ b/drivers/media/pci/cx23885/cx23885-cards.c
|
||||
@@ -1681,11 +1681,7 @@ void cx23885_card_setup(struct cx23885_d
|
||||
@@ -1795,11 +1795,7 @@ void cx23885_card_setup(struct cx23885_d
|
||||
cinfo.rev, filename);
|
||||
|
||||
ret = request_firmware(&fw, filename, &dev->pci->dev);
|
||||
|
@ -1066,7 +1066,7 @@ upstream submission.
|
|||
|
||||
--- a/drivers/media/usb/s2255/s2255drv.c
|
||||
+++ b/drivers/media/usb/s2255/s2255drv.c
|
||||
@@ -2587,10 +2587,8 @@ static int s2255_probe(struct usb_interf
|
||||
@@ -2585,10 +2585,8 @@ static int s2255_probe(struct usb_interf
|
||||
}
|
||||
/* load the first chunk */
|
||||
if (request_firmware(&dev->fw_data->fw,
|
||||
|
@ -1080,7 +1080,7 @@ upstream submission.
|
|||
pdata = (__le32 *) &dev->fw_data->fw->data[fw_size - 8];
|
||||
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
|
||||
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
|
||||
@@ -40,10 +40,8 @@ int s5p_mfc_alloc_and_load_firmware(stru
|
||||
@@ -88,10 +88,8 @@ int s5p_mfc_load_firmware(struct s5p_mfc
|
||||
|
||||
err = request_firmware((const struct firmware **)&fw_blob,
|
||||
dev->variant->fw_name, dev->v4l2_dev.dev);
|
||||
|
@ -1089,10 +1089,10 @@ upstream submission.
|
|||
+ if (err != 0)
|
||||
return -EINVAL;
|
||||
- }
|
||||
dev->fw_size = dev->variant->buf_size->fw;
|
||||
if (fw_blob->size > dev->fw_size) {
|
||||
mfc_err("MFC firmware is too big to be loaded\n");
|
||||
@@ -133,10 +131,8 @@ int s5p_mfc_reload_firmware(struct s5p_m
|
||||
release_firmware(fw_blob);
|
||||
@@ -121,10 +119,8 @@ int s5p_mfc_reload_firmware(struct s5p_m
|
||||
|
||||
err = request_firmware((const struct firmware **)&fw_blob,
|
||||
dev->variant->fw_name, dev->v4l2_dev.dev);
|
||||
|
@ -1245,7 +1245,7 @@ upstream submission.
|
|||
if (bp->mips_firmware->size < sizeof(*mips_fw) ||
|
||||
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
|
||||
@@ -11939,11 +11939,8 @@ static int bnx2x_init_firmware(struct bn
|
||||
@@ -12166,11 +12166,8 @@ static int bnx2x_init_firmware(struct bn
|
||||
BNX2X_DEV_INFO("Loading %s\n", fw_file_name);
|
||||
|
||||
rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev);
|
||||
|
@ -1260,7 +1260,7 @@ upstream submission.
|
|||
if (rc) {
|
||||
--- a/drivers/net/ethernet/broadcom/tg3.c
|
||||
+++ b/drivers/net/ethernet/broadcom/tg3.c
|
||||
@@ -10449,11 +10449,8 @@ static int tg3_request_firmware(struct t
|
||||
@@ -10572,11 +10572,8 @@ static int tg3_request_firmware(struct t
|
||||
{
|
||||
const __be32 *fw_data;
|
||||
|
||||
|
@ -1289,7 +1289,7 @@ upstream submission.
|
|||
*bfi_image_size = fw->size/sizeof(u32);
|
||||
--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
|
||||
+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
|
||||
@@ -1030,12 +1030,8 @@ int t3_get_edc_fw(struct cphy *phy, int
|
||||
@@ -1034,12 +1034,8 @@ int t3_get_edc_fw(struct cphy *phy, int
|
||||
snprintf(buf, sizeof(buf), get_edc_fw_name(edc_idx));
|
||||
|
||||
ret = request_firmware(&fw, buf, &adapter->pdev->dev);
|
||||
|
@ -1303,7 +1303,7 @@ upstream submission.
|
|||
|
||||
/* check size, take checksum in account */
|
||||
if (fw->size > size + 4) {
|
||||
@@ -1072,11 +1068,8 @@ static int upgrade_fw(struct adapter *ad
|
||||
@@ -1076,11 +1072,8 @@ static int upgrade_fw(struct adapter *ad
|
||||
struct device *dev = &adap->pdev->dev;
|
||||
|
||||
ret = request_firmware(&fw, FW_FNAME, dev);
|
||||
|
@ -1316,7 +1316,7 @@ upstream submission.
|
|||
ret = t3_load_fw(adap, fw->data, fw->size);
|
||||
release_firmware(fw);
|
||||
|
||||
@@ -1121,11 +1114,8 @@ static int update_tpsram(struct adapter
|
||||
@@ -1125,11 +1118,8 @@ static int update_tpsram(struct adapter
|
||||
snprintf(buf, sizeof(buf), TPSRAM_NAME, rev);
|
||||
|
||||
ret = request_firmware(&tpsram, buf, dev);
|
||||
|
@ -1346,7 +1346,7 @@ upstream submission.
|
|||
vers = ntohl(hdr->fw_ver);
|
||||
--- a/drivers/net/ethernet/intel/e100.c
|
||||
+++ b/drivers/net/ethernet/intel/e100.c
|
||||
@@ -1289,9 +1289,6 @@ static const struct firmware *e100_reque
|
||||
@@ -1293,9 +1293,6 @@ static const struct firmware *e100_reque
|
||||
|
||||
if (err) {
|
||||
if (required) {
|
||||
|
@ -1427,7 +1427,7 @@ upstream submission.
|
|||
dev_err(&kaweth->intf->dev, "Firmware too big: %zu\n",
|
||||
--- a/drivers/net/wimax/i2400m/fw.c
|
||||
+++ b/drivers/net/wimax/i2400m/fw.c
|
||||
@@ -1583,11 +1583,8 @@ int i2400m_dev_bootstrap(struct i2400m *
|
||||
@@ -1582,11 +1582,8 @@ int i2400m_dev_bootstrap(struct i2400m *
|
||||
}
|
||||
d_printf(1, dev, "trying firmware %s (%d)\n", fw_name, itr);
|
||||
ret = request_firmware(&fw, fw_name, dev);
|
||||
|
@ -1440,7 +1440,7 @@ upstream submission.
|
|||
i2400m->fw_name = fw_name;
|
||||
ret = i2400m_fw_bootstrap(i2400m, fw, flags);
|
||||
release_firmware(fw);
|
||||
@@ -1630,8 +1627,6 @@ void i2400m_fw_cache(struct i2400m *i240
|
||||
@@ -1629,8 +1626,6 @@ void i2400m_fw_cache(struct i2400m *i240
|
||||
kref_init(&i2400m_fw->kref);
|
||||
result = request_firmware(&i2400m_fw->fw, i2400m->fw_name, dev);
|
||||
if (result < 0) {
|
||||
|
@ -1548,7 +1548,7 @@ upstream submission.
|
|||
hdr = (struct b43legacy_fw_header *)((*fw)->data);
|
||||
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
|
||||
@@ -3208,10 +3208,8 @@ static int brcmf_sdbrcm_download_code_fi
|
||||
@@ -3179,10 +3179,8 @@ static int brcmf_sdbrcm_download_code_fi
|
||||
|
||||
ret = request_firmware(&bus->firmware, BRCMF_SDIO_FW_NAME,
|
||||
&bus->sdiodev->func[2]->dev);
|
||||
|
@ -1560,7 +1560,7 @@ upstream submission.
|
|||
bus->fw_ptr = 0;
|
||||
|
||||
memptr = memblock = kmalloc(MEMBLOCK + BRCMF_SDALIGN, GFP_ATOMIC);
|
||||
@@ -3327,10 +3325,8 @@ static int brcmf_sdbrcm_download_nvram(s
|
||||
@@ -3295,10 +3293,8 @@ static int brcmf_sdbrcm_download_nvram(s
|
||||
|
||||
ret = request_firmware(&bus->firmware, BRCMF_SDIO_NV_NAME,
|
||||
&bus->sdiodev->func[2]->dev);
|
||||
|
@ -1574,7 +1574,7 @@ upstream submission.
|
|||
|
||||
--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
|
||||
@@ -807,19 +807,13 @@ static int brcms_request_fw(struct brcms
|
||||
@@ -376,19 +376,13 @@ static int brcms_request_fw(struct brcms
|
||||
sprintf(fw_name, "%s-%d.fw", brcms_firmwares[i],
|
||||
UCODE_LOADER_API_VER);
|
||||
status = request_firmware(&wl->fw.fw_bin[i], fw_name, device);
|
||||
|
@ -1598,7 +1598,7 @@ upstream submission.
|
|||
}
|
||||
--- a/drivers/net/wireless/ipw2x00/ipw2100.c
|
||||
+++ b/drivers/net/wireless/ipw2x00/ipw2100.c
|
||||
@@ -8464,12 +8464,8 @@ static int ipw2100_get_firmware(struct i
|
||||
@@ -8446,12 +8446,8 @@ static int ipw2100_get_firmware(struct i
|
||||
|
||||
rc = request_firmware(&fw->fw_entry, fw_name, &priv->pci_dev->dev);
|
||||
|
||||
|
@ -1628,7 +1628,7 @@ upstream submission.
|
|||
IPW_ERROR("%s is too small (%zd)\n", name, (*raw)->size);
|
||||
--- a/drivers/net/wireless/iwlegacy/3945-mac.c
|
||||
+++ b/drivers/net/wireless/iwlegacy/3945-mac.c
|
||||
@@ -1846,7 +1846,6 @@ il3945_read_ucode(struct il_priv *il)
|
||||
@@ -1866,7 +1866,6 @@ il3945_read_ucode(struct il_priv *il)
|
||||
sprintf(buf, "%s%u%s", name_pre, idx, ".ucode");
|
||||
ret = request_firmware(&ucode_raw, buf, &il->pci_dev->dev);
|
||||
if (ret < 0) {
|
||||
|
@ -1638,7 +1638,7 @@ upstream submission.
|
|||
else
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-drv.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-drv.c
|
||||
@@ -846,13 +846,8 @@ static void iwl_req_fw_callback(const st
|
||||
@@ -852,13 +852,8 @@ static void iwl_req_fw_callback(const st
|
||||
|
||||
memset(&pieces, 0, sizeof(pieces));
|
||||
|
||||
|
@ -1681,7 +1681,7 @@ upstream submission.
|
|||
adapter->firmware = firmware;
|
||||
--- a/drivers/net/wireless/mwl8k.c
|
||||
+++ b/drivers/net/wireless/mwl8k.c
|
||||
@@ -5320,16 +5320,12 @@ static int mwl8k_firmware_load_success(s
|
||||
@@ -5497,16 +5497,12 @@ static int mwl8k_firmware_load_success(s
|
||||
static void mwl8k_fw_state_machine(const struct firmware *fw, void *context)
|
||||
{
|
||||
struct mwl8k_priv *priv = context;
|
||||
|
@ -1699,7 +1699,7 @@ upstream submission.
|
|||
priv->fw_helper = fw;
|
||||
rc = mwl8k_request_fw(priv, priv->fw_pref, &priv->fw_ucode,
|
||||
true);
|
||||
@@ -5364,11 +5360,8 @@ static void mwl8k_fw_state_machine(const
|
||||
@@ -5541,11 +5537,8 @@ static void mwl8k_fw_state_machine(const
|
||||
break;
|
||||
|
||||
case FW_STATE_LOADING_ALT:
|
||||
|
@ -1712,7 +1712,7 @@ upstream submission.
|
|||
priv->fw_ucode = fw;
|
||||
rc = mwl8k_firmware_load_success(priv);
|
||||
if (rc)
|
||||
@@ -5406,10 +5399,8 @@ retry:
|
||||
@@ -5583,10 +5576,8 @@ retry:
|
||||
|
||||
/* Ask userland hotplug daemon for the device firmware */
|
||||
rc = mwl8k_request_firmware(priv, fw_image, nowait);
|
||||
|
@ -1760,9 +1760,9 @@ upstream submission.
|
|||
|
||||
--- a/drivers/net/wireless/orinoco/orinoco_usb.c
|
||||
+++ b/drivers/net/wireless/orinoco/orinoco_usb.c
|
||||
@@ -1683,7 +1683,6 @@ static int ezusb_probe(struct usb_interf
|
||||
if (firmware.size && firmware.code) {
|
||||
ezusb_firmware_download(upriv, &firmware);
|
||||
@@ -1690,7 +1690,6 @@ static int ezusb_probe(struct usb_interf
|
||||
if (ezusb_firmware_download(upriv, &firmware))
|
||||
goto error;
|
||||
} else {
|
||||
- err("No firmware to download");
|
||||
goto error;
|
||||
|
@ -1794,7 +1794,7 @@ upstream submission.
|
|||
if (ret) {
|
||||
--- a/drivers/net/wireless/p54/p54usb.c
|
||||
+++ b/drivers/net/wireless/p54/p54usb.c
|
||||
@@ -935,7 +935,6 @@ static void p54u_load_firmware_cb(const
|
||||
@@ -929,7 +929,6 @@ static void p54u_load_firmware_cb(const
|
||||
err = p54u_start_ops(priv);
|
||||
} else {
|
||||
err = -ENOENT;
|
||||
|
@ -1881,7 +1881,7 @@ upstream submission.
|
|||
wl1251_error("nvs size is not multiple of 32 bits: %zu",
|
||||
--- a/drivers/net/wireless/ti/wlcore/main.c
|
||||
+++ b/drivers/net/wireless/ti/wlcore/main.c
|
||||
@@ -712,10 +712,8 @@ static int wl12xx_fetch_firmware(struct
|
||||
@@ -723,10 +723,8 @@ static int wl12xx_fetch_firmware(struct
|
||||
|
||||
ret = request_firmware(&fw, fw_name, wl->dev);
|
||||
|
||||
|
@ -2000,7 +2000,7 @@ upstream submission.
|
|||
}
|
||||
--- a/drivers/scsi/ipr.c
|
||||
+++ b/drivers/scsi/ipr.c
|
||||
@@ -3779,10 +3779,8 @@ static ssize_t ipr_store_update_fw(struc
|
||||
@@ -3907,10 +3907,8 @@ static ssize_t ipr_store_update_fw(struc
|
||||
len = snprintf(fname, 99, "%s", buf);
|
||||
fname[len-1] = '\0';
|
||||
|
||||
|
@ -2037,7 +2037,7 @@ upstream submission.
|
|||
}
|
||||
--- a/drivers/scsi/qla2xxx/qla_init.c
|
||||
+++ b/drivers/scsi/qla2xxx/qla_init.c
|
||||
@@ -5020,8 +5020,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha,
|
||||
@@ -5108,8 +5108,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha,
|
||||
/* Load firmware blob. */
|
||||
blob = qla2x00_request_firmware(vha);
|
||||
if (!blob) {
|
||||
|
@ -2046,7 +2046,7 @@ upstream submission.
|
|||
ql_log(ql_log_info, vha, 0x0084,
|
||||
"Firmware images can be retrieved from: "QLA_FW_URL ".\n");
|
||||
return QLA_FUNCTION_FAILED;
|
||||
@@ -5122,8 +5120,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t *
|
||||
@@ -5210,8 +5208,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t *
|
||||
/* Load firmware blob. */
|
||||
blob = qla2x00_request_firmware(vha);
|
||||
if (!blob) {
|
||||
|
@ -2057,7 +2057,7 @@ upstream submission.
|
|||
QLA_FW_URL ".\n");
|
||||
--- a/drivers/scsi/qla2xxx/qla_nx.c
|
||||
+++ b/drivers/scsi/qla2xxx/qla_nx.c
|
||||
@@ -2440,11 +2440,8 @@ try_blob_fw:
|
||||
@@ -2447,11 +2447,8 @@ try_blob_fw:
|
||||
|
||||
/* Load firmware blob. */
|
||||
blob = ha->hablob = qla2x00_request_firmware(vha);
|
||||
|
@ -2072,7 +2072,7 @@ upstream submission.
|
|||
if (qla82xx_validate_firmware_blob(vha,
|
||||
--- a/drivers/scsi/qla2xxx/qla_os.c
|
||||
+++ b/drivers/scsi/qla2xxx/qla_os.c
|
||||
@@ -4902,8 +4902,6 @@ qla2x00_request_firmware(scsi_qla_host_t
|
||||
@@ -5017,8 +5017,6 @@ qla2x00_request_firmware(scsi_qla_host_t
|
||||
goto out;
|
||||
|
||||
if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) {
|
||||
|
@ -2098,7 +2098,7 @@ upstream submission.
|
|||
fw->size, fwname);
|
||||
--- a/drivers/staging/comedi/drivers/usbdux.c
|
||||
+++ b/drivers/staging/comedi/drivers/usbdux.c
|
||||
@@ -2371,11 +2371,8 @@ static void usbdux_firmware_request_comp
|
||||
@@ -2378,11 +2378,8 @@ static void usbdux_firmware_request_comp
|
||||
struct usb_interface *uinterf = usbduxsub_tmp->interface;
|
||||
int ret;
|
||||
|
||||
|
@ -2113,7 +2113,7 @@ upstream submission.
|
|||
* we need to upload the firmware here because fw will be
|
||||
--- a/drivers/staging/comedi/drivers/usbduxsigma.c
|
||||
+++ b/drivers/staging/comedi/drivers/usbduxsigma.c
|
||||
@@ -2357,11 +2357,8 @@ static void usbdux_firmware_request_comp
|
||||
@@ -2364,11 +2364,8 @@ static void usbdux_firmware_request_comp
|
||||
struct usb_interface *uinterf = usbduxsub_tmp->interface;
|
||||
int ret;
|
||||
|
||||
|
@ -2128,7 +2128,7 @@ upstream submission.
|
|||
* we need to upload the firmware here because fw will be
|
||||
--- a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c
|
||||
+++ b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c
|
||||
@@ -2193,16 +2193,12 @@ struct net_device *init_ft1000_card(stru
|
||||
@@ -2203,16 +2203,12 @@ struct net_device *init_ft1000_card(stru
|
||||
info->AsicID = ft1000_read_reg(dev, FT1000_REG_ASIC_ID);
|
||||
if (info->AsicID == ELECTRABUZZ_ID) {
|
||||
DEBUG(0, "ft1000_hw: ELECTRABUZZ ASIC\n");
|
||||
|
@ -2149,7 +2149,7 @@ upstream submission.
|
|||
ft1000_enable_interrupts(dev);
|
||||
--- a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c
|
||||
+++ b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c
|
||||
@@ -137,10 +137,8 @@ static int ft1000_probe(struct usb_inter
|
||||
@@ -134,10 +134,8 @@ static int ft1000_probe(struct usb_inter
|
||||
ft1000dev->bulk_out_endpointAddr);
|
||||
|
||||
ret = request_firmware(&dsp_fw, "ft3000.img", &dev->dev);
|
||||
|
@ -2206,7 +2206,7 @@ upstream submission.
|
|||
"go7007 firmware\n", fw_name);
|
||||
--- a/drivers/staging/media/go7007/go7007-fw.c
|
||||
+++ b/drivers/staging/media/go7007/go7007-fw.c
|
||||
@@ -1575,12 +1575,8 @@ int go7007_construct_fw_image(struct go7
|
||||
@@ -1568,12 +1568,8 @@ int go7007_construct_fw_image(struct go7
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
|
@ -2218,8 +2218,8 @@ upstream submission.
|
|||
return -1;
|
||||
- }
|
||||
code = kzalloc(codespace * 2, GFP_KERNEL);
|
||||
if (code == NULL) {
|
||||
dev_err(go->dev,
|
||||
if (code == NULL)
|
||||
goto fw_failed;
|
||||
--- a/drivers/staging/media/go7007/s2250-loader.c
|
||||
+++ b/drivers/staging/media/go7007/s2250-loader.c
|
||||
@@ -98,12 +98,8 @@ static int s2250loader_probe(struct usb_
|
||||
|
@ -2227,7 +2227,7 @@ upstream submission.
|
|||
mutex_unlock(&s2250_dev_table_mutex);
|
||||
|
||||
- if (request_firmware(&fw, S2250_LOADER_FIRMWARE, &usbdev->dev)) {
|
||||
- printk(KERN_ERR
|
||||
- dev_err(&interface->dev,
|
||||
- "s2250: unable to load firmware from file \"%s\"\n",
|
||||
- S2250_LOADER_FIRMWARE);
|
||||
+ if (request_firmware(&fw, S2250_LOADER_FIRMWARE, &usbdev->dev))
|
||||
|
@ -2241,7 +2241,7 @@ upstream submission.
|
|||
}
|
||||
|
||||
- if (request_firmware(&fw, S2250_FIRMWARE, &usbdev->dev)) {
|
||||
- printk(KERN_ERR
|
||||
- dev_err(&interface->dev,
|
||||
- "s2250: unable to load firmware from file \"%s\"\n",
|
||||
- S2250_FIRMWARE);
|
||||
+ if (request_firmware(&fw, S2250_FIRMWARE, &usbdev->dev))
|
||||
|
@ -2281,7 +2281,7 @@ upstream submission.
|
|||
if (!firmware) {
|
||||
struct usb_device *udev = padapter->dvobjpriv.pusbdev;
|
||||
struct usb_interface *pusb_intf = padapter->pusb_intf;
|
||||
- printk(KERN_ERR "r8712u: Firmware request failed\n");
|
||||
- dev_err(&udev->dev, "r8712u: Firmware request failed\n");
|
||||
padapter->fw_found = false;
|
||||
usb_put_dev(udev);
|
||||
usb_set_intfdata(pusb_intf, NULL);
|
||||
|
@ -2315,7 +2315,7 @@ upstream submission.
|
|||
for (i = 0; i < numsects; i++) {
|
||||
--- a/drivers/staging/vt6656/firmware.c
|
||||
+++ b/drivers/staging/vt6656/firmware.c
|
||||
@@ -74,11 +74,8 @@ FIRMWAREbDownload(
|
||||
@@ -71,11 +71,8 @@ int FIRMWAREbDownload(struct vnt_private
|
||||
spin_unlock_irq(&pDevice->lock);
|
||||
|
||||
rc = request_firmware(&fw, FIRMWARE_NAME, dev);
|
||||
|
@ -2331,7 +2331,7 @@ upstream submission.
|
|||
if (!pBuffer)
|
||||
--- a/drivers/tty/cyclades.c
|
||||
+++ b/drivers/tty/cyclades.c
|
||||
@@ -3539,10 +3539,8 @@ static int cyz_load_fw(struct pci_dev *p
|
||||
@@ -3526,10 +3526,8 @@ static int cyz_load_fw(struct pci_dev *p
|
||||
int retval;
|
||||
|
||||
retval = request_firmware(&fw, "cyzfirm.bin", &pdev->dev);
|
||||
|
@ -2542,7 +2542,7 @@ upstream submission.
|
|||
}
|
||||
--- a/drivers/usb/serial/io_edgeport.c
|
||||
+++ b/drivers/usb/serial/io_edgeport.c
|
||||
@@ -306,11 +306,8 @@ static void update_edgeport_E2PROM(struc
|
||||
@@ -305,11 +305,8 @@ static void update_edgeport_E2PROM(struc
|
||||
|
||||
response = request_ihex_firmware(&fw, fw_name,
|
||||
&edge_serial->serial->dev->dev);
|
||||
|
@ -2557,7 +2557,7 @@ upstream submission.
|
|||
BootMajorVersion = rec->data[0];
|
||||
--- a/drivers/usb/serial/io_ti.c
|
||||
+++ b/drivers/usb/serial/io_ti.c
|
||||
@@ -844,8 +844,6 @@ static int build_i2c_fw_hdr(__u8 *header
|
||||
@@ -782,8 +782,6 @@ static int build_i2c_fw_hdr(__u8 *header
|
||||
|
||||
err = request_firmware(&fw, fw_name, dev);
|
||||
if (err) {
|
||||
|
@ -2566,7 +2566,7 @@ upstream submission.
|
|||
kfree(buffer);
|
||||
return err;
|
||||
}
|
||||
@@ -1403,8 +1401,6 @@ static int download_fw(struct edgeport_s
|
||||
@@ -1341,8 +1339,6 @@ static int download_fw(struct edgeport_s
|
||||
|
||||
err = request_firmware(&fw, fw_name, dev);
|
||||
if (err) {
|
||||
|
@ -2577,7 +2577,7 @@ upstream submission.
|
|||
}
|
||||
--- a/drivers/usb/serial/ti_usb_3410_5052.c
|
||||
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
|
||||
@@ -1659,10 +1659,8 @@ static int ti_download_firmware(struct t
|
||||
@@ -1653,10 +1653,8 @@ static int ti_download_firmware(struct t
|
||||
}
|
||||
status = request_firmware(&fw_p, buf, &dev->dev);
|
||||
}
|
||||
|
@ -2747,7 +2747,7 @@ upstream submission.
|
|||
}
|
||||
--- a/sound/pci/hda/hda_intel.c
|
||||
+++ b/sound/pci/hda/hda_intel.c
|
||||
@@ -3424,11 +3424,8 @@ static void azx_firmware_cb(const struct
|
||||
@@ -3633,11 +3633,8 @@ static void azx_firmware_cb(const struct
|
||||
struct azx *chip = card->private_data;
|
||||
struct pci_dev *pci = chip->pci;
|
||||
|
||||
|
@ -2816,7 +2816,7 @@ upstream submission.
|
|||
if (err) {
|
||||
--- a/sound/pci/rme9652/hdsp.c
|
||||
+++ b/sound/pci/rme9652/hdsp.c
|
||||
@@ -5378,10 +5378,8 @@ static int hdsp_request_fw_loader(struct
|
||||
@@ -5150,10 +5150,8 @@ static int hdsp_request_fw_loader(struct
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -2830,7 +2830,7 @@ upstream submission.
|
|||
(int)fw->size, HDSP_FIRMWARE_SIZE);
|
||||
--- a/sound/soc/codecs/wm2000.c
|
||||
+++ b/sound/soc/codecs/wm2000.c
|
||||
@@ -834,10 +834,8 @@ static int wm2000_i2c_probe(struct i2c_c
|
||||
@@ -886,10 +886,8 @@ static int wm2000_i2c_probe(struct i2c_c
|
||||
}
|
||||
|
||||
ret = request_firmware(&fw, filename, &i2c->dev);
|
||||
|
|
|
@ -19,7 +19,7 @@ removed in later patches.
|
|||
|
||||
--- a/drivers/base/firmware_class.c
|
||||
+++ b/drivers/base/firmware_class.c
|
||||
@@ -502,14 +502,23 @@ static ssize_t firmware_loading_store(st
|
||||
@@ -604,14 +604,23 @@ static ssize_t firmware_loading_store(st
|
||||
* is completed.
|
||||
* */
|
||||
fw_map_pages_buf(fw_buf);
|
||||
|
@ -45,7 +45,7 @@ removed in later patches.
|
|||
fw_load_abort(fw_priv);
|
||||
break;
|
||||
}
|
||||
@@ -679,6 +688,9 @@ static void firmware_class_timeout_work(
|
||||
@@ -781,6 +790,9 @@ static void firmware_class_timeout_work(
|
||||
mutex_unlock(&fw_lock);
|
||||
return;
|
||||
}
|
||||
|
@ -55,17 +55,7 @@ removed in later patches.
|
|||
fw_load_abort(fw_priv);
|
||||
mutex_unlock(&fw_lock);
|
||||
}
|
||||
@@ -807,7 +819,8 @@ _request_firmware_prepare(const struct f
|
||||
}
|
||||
|
||||
if (fw_get_builtin_firmware(firmware, name)) {
|
||||
- dev_dbg(device, "firmware: using built-in firmware %s\n", name);
|
||||
+ dev_info(device, "firmware: using built-in firmware %s\n",
|
||||
+ name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -885,25 +898,28 @@ static int _request_firmware_load(struct
|
||||
@@ -832,25 +844,28 @@ static int _request_firmware_load(struct
|
||||
|
||||
retval = device_add(f_dev);
|
||||
if (retval) {
|
||||
|
@ -98,39 +88,50 @@ removed in later patches.
|
|||
if (timeout != MAX_SCHEDULE_TIMEOUT)
|
||||
schedule_delayed_work(&fw_priv->timeout_work, timeout);
|
||||
|
||||
@@ -916,8 +932,15 @@ static int _request_firmware_load(struct
|
||||
@@ -940,7 +955,8 @@ _request_firmware_prepare(struct firmwar
|
||||
}
|
||||
|
||||
if (fw_get_builtin_firmware(firmware, name)) {
|
||||
- dev_dbg(device, "firmware: using built-in firmware %s\n", name);
|
||||
+ dev_info(device, "firmware: using built-in firmware %s\n",
|
||||
+ name);
|
||||
return 0; /* assigned */
|
||||
}
|
||||
|
||||
@@ -970,9 +986,16 @@ static int assign_firmware_buf(struct fi
|
||||
struct firmware_buf *buf = fw->priv;
|
||||
|
||||
handle_fw:
|
||||
mutex_lock(&fw_lock);
|
||||
- if (!buf->size || test_bit(FW_STATUS_ABORT, &buf->status))
|
||||
+ if (test_bit(FW_STATUS_ABORT, &buf->status)) {
|
||||
- if (!buf->size || is_fw_load_aborted(buf)) {
|
||||
+ if (is_fw_load_aborted(buf)) {
|
||||
+ /* failure has already been logged */
|
||||
retval = -ENOENT;
|
||||
mutex_unlock(&fw_lock);
|
||||
return -ENOENT;
|
||||
+ } else if (!buf->size) {
|
||||
+ dev_err(f_dev->parent,
|
||||
+ "firmware: agent loaded no data for %s (not found?)\n",
|
||||
+ buf->fw_id);
|
||||
+ retval = -ENOENT;
|
||||
+ }
|
||||
+ mutex_unlock(&fw_lock);
|
||||
+ return -ENOENT;
|
||||
}
|
||||
|
||||
/*
|
||||
* add firmware name into devres list so that we can auto cache
|
||||
@@ -996,6 +1019,9 @@ request_firmware(const struct firmware *
|
||||
}
|
||||
if (ret)
|
||||
_request_firmware_cleanup(firmware_p);
|
||||
+ else
|
||||
@@ -1021,7 +1044,7 @@ _request_firmware(const struct firmware
|
||||
if (nowait) {
|
||||
timeout = usermodehelper_read_lock_wait(timeout);
|
||||
if (!timeout) {
|
||||
- dev_dbg(device, "firmware: %s loading timed out\n",
|
||||
+ dev_err(device, "firmware: %s loading timed out\n",
|
||||
name);
|
||||
ret = -EBUSY;
|
||||
goto out;
|
||||
@@ -1047,6 +1070,9 @@ _request_firmware(const struct firmware
|
||||
if (ret < 0) {
|
||||
release_firmware(fw);
|
||||
fw = NULL;
|
||||
+ } else {
|
||||
+ dev_info(device, "firmware: agent loaded %s into memory\n",
|
||||
+ name);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1045,7 +1071,7 @@ static void request_firmware_work_func(s
|
||||
ret = _request_firmware_load(fw_priv, fw_work->uevent, timeout);
|
||||
usermodehelper_read_unlock();
|
||||
} else {
|
||||
- dev_dbg(fw_work->device, "firmware: %s loading timed out\n",
|
||||
+ dev_err(fw_work->device, "firmware: %s loading timed out\n",
|
||||
fw_work->name);
|
||||
ret = -EAGAIN;
|
||||
}
|
||||
|
||||
*firmware_p = fw;
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
From: Andrew Morton <akpm@linux-foundation.org>
|
||||
Date: Wed, 13 Mar 2013 14:59:34 -0700
|
||||
Subject: kernel/signal.c: use __ARCH_HAS_SA_RESTORER instead of SA_RESTORER
|
||||
|
||||
commit 522cff142d7d2f9230839c9e1f21a4d8bcc22a4a upstream.
|
||||
|
||||
__ARCH_HAS_SA_RESTORER is the preferred conditional for use in 3.9 and
|
||||
later kernels, per Kees.
|
||||
|
||||
Cc: Emese Revfy <re.emese@gmail.com>
|
||||
Cc: Emese Revfy <re.emese@gmail.com>
|
||||
Cc: PaX Team <pageexec@freemail.hu>
|
||||
Cc: Al Viro <viro@zeniv.linux.org.uk>
|
||||
Cc: Oleg Nesterov <oleg@redhat.com>
|
||||
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
|
||||
Cc: Serge Hallyn <serge.hallyn@canonical.com>
|
||||
Cc: Julien Tinnes <jln@google.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
kernel/signal.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/kernel/signal.c b/kernel/signal.c
|
||||
index 43b0d4a..dd72567 100644
|
||||
--- a/kernel/signal.c
|
||||
+++ b/kernel/signal.c
|
||||
@@ -485,7 +485,7 @@ flush_signal_handlers(struct task_struct *t, int force_default)
|
||||
if (force_default || ka->sa.sa_handler != SIG_IGN)
|
||||
ka->sa.sa_handler = SIG_DFL;
|
||||
ka->sa.sa_flags = 0;
|
||||
-#ifdef SA_RESTORER
|
||||
+#ifdef __ARCH_HAS_SA_RESTORER
|
||||
ka->sa.sa_restorer = NULL;
|
||||
#endif
|
||||
sigemptyset(&ka->sa.sa_mask);
|
|
@ -1,149 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Sun, 25 Nov 2012 22:24:19 -0500
|
||||
Subject: signal: Fix use of missing sa_restorer field
|
||||
|
||||
flush_signal_handlers() needs to know whether sigaction::sa_restorer
|
||||
is defined, not whether SA_RESTORER is defined. Define the
|
||||
__ARCH_HAS_SA_RESTORER macro to indicate this.
|
||||
|
||||
Vaguely based on upstream commit 574c4866e33d 'consolidate kernel-side
|
||||
struct sigaction declarations'.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
Cc: Al Viro <viro@zeniv.linux.org.uk>
|
||||
---
|
||||
--- a/arch/arm/include/asm/signal.h
|
||||
+++ b/arch/arm/include/asm/signal.h
|
||||
@@ -29,6 +29,7 @@ struct sigaction {
|
||||
__sigrestore_t sa_restorer;
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
--- a/arch/avr32/include/asm/signal.h
|
||||
+++ b/arch/avr32/include/asm/signal.h
|
||||
@@ -29,6 +29,7 @@ struct sigaction {
|
||||
__sigrestore_t sa_restorer;
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
--- a/arch/cris/include/asm/signal.h
|
||||
+++ b/arch/cris/include/asm/signal.h
|
||||
@@ -29,6 +29,7 @@ struct sigaction {
|
||||
void (*sa_restorer)(void);
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
--- a/arch/h8300/include/asm/signal.h
|
||||
+++ b/arch/h8300/include/asm/signal.h
|
||||
@@ -29,6 +29,7 @@ struct sigaction {
|
||||
void (*sa_restorer)(void);
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
--- a/arch/m32r/include/asm/signal.h
|
||||
+++ b/arch/m32r/include/asm/signal.h
|
||||
@@ -22,6 +22,7 @@ struct sigaction {
|
||||
__sigrestore_t sa_restorer;
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
--- a/arch/m68k/include/asm/signal.h
|
||||
+++ b/arch/m68k/include/asm/signal.h
|
||||
@@ -29,6 +29,7 @@ struct sigaction {
|
||||
__sigrestore_t sa_restorer;
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
--- a/arch/mn10300/include/asm/signal.h
|
||||
+++ b/arch/mn10300/include/asm/signal.h
|
||||
@@ -39,6 +39,7 @@ struct sigaction {
|
||||
__sigrestore_t sa_restorer;
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
--- a/arch/powerpc/include/asm/signal.h
|
||||
+++ b/arch/powerpc/include/asm/signal.h
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef _ASM_POWERPC_SIGNAL_H
|
||||
#define _ASM_POWERPC_SIGNAL_H
|
||||
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
#include <uapi/asm/signal.h>
|
||||
|
||||
#endif /* _ASM_POWERPC_SIGNAL_H */
|
||||
--- a/arch/s390/include/asm/signal.h
|
||||
+++ b/arch/s390/include/asm/signal.h
|
||||
@@ -34,6 +34,7 @@ struct sigaction {
|
||||
void (*sa_restorer)(void);
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
--- a/arch/sparc/include/asm/signal.h
|
||||
+++ b/arch/sparc/include/asm/signal.h
|
||||
@@ -26,5 +26,7 @@ struct k_sigaction {
|
||||
void __user *ka_restorer;
|
||||
};
|
||||
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
+
|
||||
#endif /* !(__ASSEMBLY__) */
|
||||
#endif /* !(__SPARC_SIGNAL_H) */
|
||||
--- a/arch/x86/include/asm/signal.h
|
||||
+++ b/arch/x86/include/asm/signal.h
|
||||
@@ -31,6 +31,9 @@ typedef sigset_t compat_sigset_t;
|
||||
#include <uapi/asm/signal.h>
|
||||
#ifndef __ASSEMBLY__
|
||||
extern void do_notify_resume(struct pt_regs *, void *, __u32);
|
||||
+
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
+
|
||||
#ifdef __i386__
|
||||
struct old_sigaction {
|
||||
__sighandler_t sa_handler;
|
||||
--- a/arch/xtensa/include/asm/signal.h
|
||||
+++ b/arch/xtensa/include/asm/signal.h
|
||||
@@ -21,6 +21,7 @@ struct sigaction {
|
||||
void (*sa_restorer)(void);
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
--- a/include/uapi/asm-generic/signal.h
|
||||
+++ b/include/uapi/asm-generic/signal.h
|
||||
@@ -93,6 +93,10 @@ typedef unsigned long old_sigset_t;
|
||||
|
||||
#include <asm-generic/signal-defs.h>
|
||||
|
||||
+#ifdef SA_RESTORER
|
||||
+#define __ARCH_HAS_SA_RESTORER
|
||||
+#endif
|
||||
+
|
||||
struct sigaction {
|
||||
__sighandler_t sa_handler;
|
||||
unsigned long sa_flags;
|
|
@ -1,13 +0,0 @@
|
|||
diff --git a/arch/alpha/Makefile b/arch/alpha/Makefile
|
||||
index 4759fe7..b5d44bd 100644
|
||||
--- a/arch/alpha/Makefile
|
||||
+++ b/arch/alpha/Makefile
|
||||
@@ -12,7 +12,7 @@ NM := $(NM) -B
|
||||
|
||||
LDFLAGS_vmlinux := -static -N #-relax
|
||||
CHECKFLAGS += -D__alpha__ -m64
|
||||
-cflags-y := -pipe -mno-fp-regs -ffixed-8 -msmall-data
|
||||
+cflags-y := -pipe -mno-fp-regs -ffixed-8 -mlarge-data
|
||||
cflags-y += $(call cc-option, -fno-jump-tables)
|
||||
|
||||
cpuflags-$(CONFIG_ALPHA_EV4) := -mcpu=ev4
|
|
@ -1,63 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Wed, 20 Feb 2013 02:38:08 +0000
|
||||
Subject: [PATCH] nouveau: ACPI support depends on X86 and X86_PLATFORM_DEVICES
|
||||
Forwarded: http://lists.freedesktop.org/archives/dri-devel/2013-February/035133.html
|
||||
|
||||
If I build nouveau on ia64, Kconfig warns:
|
||||
|
||||
warning: (DRM_NOUVEAU) selects ACPI_WMI which has unmet direct dependencies (X86 && X86_PLATFORM_DEVICES && ACPI)
|
||||
warning: (DRM_NOUVEAU) selects MXM_WMI which has unmet direct dependencies (X86 && X86_PLATFORM_DEVICES && ACPI_WMI)
|
||||
|
||||
Make all the ACPI support depend on X86 and select
|
||||
X86_PLATFORM_DEVICES.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
---
|
||||
--- a/drivers/gpu/drm/nouveau/Kconfig
|
||||
+++ b/drivers/gpu/drm/nouveau/Kconfig
|
||||
@@ -11,8 +11,9 @@ config DRM_NOUVEAU
|
||||
select FRAMEBUFFER_CONSOLE if !EXPERT
|
||||
select FB_BACKLIGHT if DRM_NOUVEAU_BACKLIGHT
|
||||
select ACPI_VIDEO if ACPI && X86 && BACKLIGHT_CLASS_DEVICE && VIDEO_OUTPUT_CONTROL && INPUT
|
||||
- select ACPI_WMI if ACPI
|
||||
- select MXM_WMI if ACPI
|
||||
+ select X86_PLATFORM_DEVICES if ACPI && X86
|
||||
+ select ACPI_WMI if ACPI && X86
|
||||
+ select MXM_WMI if ACPI && X86
|
||||
select POWER_SUPPLY
|
||||
help
|
||||
Choose this option for open-source nVidia support.
|
||||
--- a/drivers/gpu/drm/nouveau/Makefile
|
||||
+++ b/drivers/gpu/drm/nouveau/Makefile
|
||||
@@ -216,7 +216,9 @@ nouveau-y += nouveau_mem.o
|
||||
|
||||
# other random bits
|
||||
nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o
|
||||
+ifdef CONFIG_X86
|
||||
nouveau-$(CONFIG_ACPI) += nouveau_acpi.o
|
||||
+endif
|
||||
nouveau-$(CONFIG_DRM_NOUVEAU_BACKLIGHT) += nouveau_backlight.o
|
||||
|
||||
obj-$(CONFIG_DRM_NOUVEAU)+= nouveau.o
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_acpi.h
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_acpi.h
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
#define ROM_BIOS_PAGE 4096
|
||||
|
||||
-#if defined(CONFIG_ACPI)
|
||||
+#if defined(CONFIG_ACPI) && defined(CONFIG_X86)
|
||||
bool nouveau_is_optimus(void);
|
||||
bool nouveau_is_v1_dsm(void);
|
||||
void nouveau_register_dsm_handler(void);
|
||||
--- a/drivers/gpu/drm/nouveau/core/subdev/bios/base.c
|
||||
+++ b/drivers/gpu/drm/nouveau/core/subdev/bios/base.c
|
||||
@@ -172,7 +172,7 @@ out:
|
||||
nv_wr32(bios, pcireg, access);
|
||||
}
|
||||
|
||||
-#if defined(CONFIG_ACPI)
|
||||
+#if defined(CONFIG_ACPI) && defined(CONFIG_X86)
|
||||
int nouveau_acpi_get_bios_chunk(uint8_t *bios, int offset, int len);
|
||||
bool nouveau_acpi_rom_supported(struct pci_dev *pdev);
|
||||
#else
|
|
@ -1,24 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Subject: MIPS: Add dependencies for HAVE_ARCH_TRANSPARENT_HUGEPAGE
|
||||
Date: Mon, 04 Mar 2013 03:54:29 +0000
|
||||
|
||||
The MIPS implementation of transparent huge-pages (THP) is 64-bit only,
|
||||
and of course also requires that the CPU supports huge-pages.
|
||||
|
||||
Currently it's entirely possible to enable THP in other configurations,
|
||||
which then fail to build due to pfn_pmd() not being defined.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
Cc: David Daney <david.daney@cavium.com>
|
||||
---
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -19,7 +19,7 @@ config MIPS
|
||||
select HAVE_KRETPROBES
|
||||
select HAVE_DEBUG_KMEMLEAK
|
||||
select ARCH_BINFMT_ELF_RANDOMIZE_PIE
|
||||
- select HAVE_ARCH_TRANSPARENT_HUGEPAGE
|
||||
+ select HAVE_ARCH_TRANSPARENT_HUGEPAGE if CPU_SUPPORTS_HUGEPAGES && 64BIT
|
||||
select RTC_LIB if !MACH_LOONGSON
|
||||
select GENERIC_ATOMIC64 if !64BIT
|
||||
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
|
|
@ -1,161 +0,0 @@
|
|||
From: Andy Honig <ahonig@google.com>
|
||||
Date: Wed, 20 Feb 2013 14:48:10 -0800
|
||||
Subject: KVM: x86: Convert MSR_KVM_SYSTEM_TIME to use gfn_to_hva_cache
|
||||
functions (CVE-2013-1797)
|
||||
|
||||
commit 0b79459b482e85cb7426aa7da683a9f2c97aeae1 upstream.
|
||||
|
||||
There is a potential use after free issue with the handling of
|
||||
MSR_KVM_SYSTEM_TIME. If the guest specifies a GPA in a movable or removable
|
||||
memory such as frame buffers then KVM might continue to write to that
|
||||
address even after it's removed via KVM_SET_USER_MEMORY_REGION. KVM pins
|
||||
the page in memory so it's unlikely to cause an issue, but if the user
|
||||
space component re-purposes the memory previously used for the guest, then
|
||||
the guest will be able to corrupt that memory.
|
||||
|
||||
Tested: Tested against kvmclock unit test
|
||||
|
||||
Signed-off-by: Andrew Honig <ahonig@google.com>
|
||||
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
|
||||
---
|
||||
arch/x86/include/asm/kvm_host.h | 4 ++--
|
||||
arch/x86/kvm/x86.c | 47 +++++++++++++++++----------------------
|
||||
2 files changed, 22 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
|
||||
index 635a74d..4979778 100644
|
||||
--- a/arch/x86/include/asm/kvm_host.h
|
||||
+++ b/arch/x86/include/asm/kvm_host.h
|
||||
@@ -414,8 +414,8 @@ struct kvm_vcpu_arch {
|
||||
gpa_t time;
|
||||
struct pvclock_vcpu_time_info hv_clock;
|
||||
unsigned int hw_tsc_khz;
|
||||
- unsigned int time_offset;
|
||||
- struct page *time_page;
|
||||
+ struct gfn_to_hva_cache pv_time;
|
||||
+ bool pv_time_enabled;
|
||||
/* set guest stopped flag in pvclock flags field */
|
||||
bool pvclock_set_guest_stopped_request;
|
||||
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index 2ade60c..f19ac0a 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -1406,10 +1406,9 @@ static int kvm_guest_time_update(struct kvm_vcpu *v)
|
||||
unsigned long flags, this_tsc_khz;
|
||||
struct kvm_vcpu_arch *vcpu = &v->arch;
|
||||
struct kvm_arch *ka = &v->kvm->arch;
|
||||
- void *shared_kaddr;
|
||||
s64 kernel_ns, max_kernel_ns;
|
||||
u64 tsc_timestamp, host_tsc;
|
||||
- struct pvclock_vcpu_time_info *guest_hv_clock;
|
||||
+ struct pvclock_vcpu_time_info guest_hv_clock;
|
||||
u8 pvclock_flags;
|
||||
bool use_master_clock;
|
||||
|
||||
@@ -1463,7 +1462,7 @@ static int kvm_guest_time_update(struct kvm_vcpu *v)
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
- if (!vcpu->time_page)
|
||||
+ if (!vcpu->pv_time_enabled)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
@@ -1525,12 +1524,12 @@ static int kvm_guest_time_update(struct kvm_vcpu *v)
|
||||
*/
|
||||
vcpu->hv_clock.version += 2;
|
||||
|
||||
- shared_kaddr = kmap_atomic(vcpu->time_page);
|
||||
-
|
||||
- guest_hv_clock = shared_kaddr + vcpu->time_offset;
|
||||
+ if (unlikely(kvm_read_guest_cached(v->kvm, &vcpu->pv_time,
|
||||
+ &guest_hv_clock, sizeof(guest_hv_clock))))
|
||||
+ return 0;
|
||||
|
||||
/* retain PVCLOCK_GUEST_STOPPED if set in guest copy */
|
||||
- pvclock_flags = (guest_hv_clock->flags & PVCLOCK_GUEST_STOPPED);
|
||||
+ pvclock_flags = (guest_hv_clock.flags & PVCLOCK_GUEST_STOPPED);
|
||||
|
||||
if (vcpu->pvclock_set_guest_stopped_request) {
|
||||
pvclock_flags |= PVCLOCK_GUEST_STOPPED;
|
||||
@@ -1543,12 +1542,9 @@ static int kvm_guest_time_update(struct kvm_vcpu *v)
|
||||
|
||||
vcpu->hv_clock.flags = pvclock_flags;
|
||||
|
||||
- memcpy(shared_kaddr + vcpu->time_offset, &vcpu->hv_clock,
|
||||
- sizeof(vcpu->hv_clock));
|
||||
-
|
||||
- kunmap_atomic(shared_kaddr);
|
||||
-
|
||||
- mark_page_dirty(v->kvm, vcpu->time >> PAGE_SHIFT);
|
||||
+ kvm_write_guest_cached(v->kvm, &vcpu->pv_time,
|
||||
+ &vcpu->hv_clock,
|
||||
+ sizeof(vcpu->hv_clock));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1837,10 +1833,7 @@ static int kvm_pv_enable_async_pf(struct kvm_vcpu *vcpu, u64 data)
|
||||
|
||||
static void kvmclock_reset(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
- if (vcpu->arch.time_page) {
|
||||
- kvm_release_page_dirty(vcpu->arch.time_page);
|
||||
- vcpu->arch.time_page = NULL;
|
||||
- }
|
||||
+ vcpu->arch.pv_time_enabled = false;
|
||||
}
|
||||
|
||||
static void accumulate_steal_time(struct kvm_vcpu *vcpu)
|
||||
@@ -1947,6 +1940,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
||||
break;
|
||||
case MSR_KVM_SYSTEM_TIME_NEW:
|
||||
case MSR_KVM_SYSTEM_TIME: {
|
||||
+ u64 gpa_offset;
|
||||
kvmclock_reset(vcpu);
|
||||
|
||||
vcpu->arch.time = data;
|
||||
@@ -1956,19 +1950,17 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
||||
if (!(data & 1))
|
||||
break;
|
||||
|
||||
- /* ...but clean it before doing the actual write */
|
||||
- vcpu->arch.time_offset = data & ~(PAGE_MASK | 1);
|
||||
+ gpa_offset = data & ~(PAGE_MASK | 1);
|
||||
|
||||
/* Check that the address is 32-byte aligned. */
|
||||
- if (vcpu->arch.time_offset &
|
||||
- (sizeof(struct pvclock_vcpu_time_info) - 1))
|
||||
+ if (gpa_offset & (sizeof(struct pvclock_vcpu_time_info) - 1))
|
||||
break;
|
||||
|
||||
- vcpu->arch.time_page =
|
||||
- gfn_to_page(vcpu->kvm, data >> PAGE_SHIFT);
|
||||
-
|
||||
- if (is_error_page(vcpu->arch.time_page))
|
||||
- vcpu->arch.time_page = NULL;
|
||||
+ if (kvm_gfn_to_hva_cache_init(vcpu->kvm,
|
||||
+ &vcpu->arch.pv_time, data & ~1ULL))
|
||||
+ vcpu->arch.pv_time_enabled = false;
|
||||
+ else
|
||||
+ vcpu->arch.pv_time_enabled = true;
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -2972,7 +2964,7 @@ static int kvm_vcpu_ioctl_x86_set_xcrs(struct kvm_vcpu *vcpu,
|
||||
*/
|
||||
static int kvm_set_guest_paused(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
- if (!vcpu->arch.time_page)
|
||||
+ if (!vcpu->arch.pv_time_enabled)
|
||||
return -EINVAL;
|
||||
vcpu->arch.pvclock_set_guest_stopped_request = true;
|
||||
kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu);
|
||||
@@ -6723,6 +6715,7 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
|
||||
goto fail_free_wbinvd_dirty_mask;
|
||||
|
||||
vcpu->arch.ia32_tsc_adjust_msr = 0x0;
|
||||
+ vcpu->arch.pv_time_enabled = false;
|
||||
kvm_async_pf_hash_reset(vcpu);
|
||||
kvm_pmu_init(vcpu);
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
From: Andy Honig <ahonig@google.com>
|
||||
Date: Mon, 11 Mar 2013 09:34:52 -0700
|
||||
Subject: KVM: x86: fix for buffer overflow in handling of MSR_KVM_SYSTEM_TIME
|
||||
(CVE-2013-1796)
|
||||
|
||||
commit c300aa64ddf57d9c5d9c898a64b36877345dd4a9 upstream.
|
||||
|
||||
If the guest sets the GPA of the time_page so that the request to update the
|
||||
time straddles a page then KVM will write onto an incorrect page. The
|
||||
write is done byusing kmap atomic to get a pointer to the page for the time
|
||||
structure and then performing a memcpy to that page starting at an offset
|
||||
that the guest controls. Well behaved guests always provide a 32-byte aligned
|
||||
address, however a malicious guest could use this to corrupt host kernel
|
||||
memory.
|
||||
|
||||
Tested: Tested against kvmclock unit test.
|
||||
|
||||
Signed-off-by: Andrew Honig <ahonig@google.com>
|
||||
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
|
||||
---
|
||||
arch/x86/kvm/x86.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index f7c850b..2ade60c 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -1959,6 +1959,11 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
||||
/* ...but clean it before doing the actual write */
|
||||
vcpu->arch.time_offset = data & ~(PAGE_MASK | 1);
|
||||
|
||||
+ /* Check that the address is 32-byte aligned. */
|
||||
+ if (vcpu->arch.time_offset &
|
||||
+ (sizeof(struct pvclock_vcpu_time_info) - 1))
|
||||
+ break;
|
||||
+
|
||||
vcpu->arch.time_page =
|
||||
gfn_to_page(vcpu->kvm, data >> PAGE_SHIFT);
|
||||
|
|
@ -114,8 +114,8 @@ probably discontinued 10 years ago.
|
|||
- Say Y here if you want to control the backlight of your display.
|
||||
-
|
||||
config FB_I740
|
||||
tristate "Intel740 support (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && FB && PCI
|
||||
tristate "Intel740 support"
|
||||
depends on FB && PCI
|
||||
--- a/drivers/video/Makefile
|
||||
+++ b/drivers/video/Makefile
|
||||
@@ -38,8 +38,6 @@ obj-$(CONFIG_FB_PM2) += pm2fb.o
|
||||
|
|
|
@ -15,15 +15,15 @@ are available. This should trigger udev to load it.
|
|||
---
|
||||
--- a/arch/x86/platform/efi/efi.c
|
||||
+++ b/arch/x86/platform/efi/efi.c
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <linux/io.h>
|
||||
@@ -42,6 +42,7 @@
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/bcd.h>
|
||||
#include <linux/ucs2_string.h>
|
||||
+#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/efi.h>
|
||||
@@ -762,6 +763,20 @@ void __init efi_late_init(void)
|
||||
@@ -870,6 +871,20 @@ void __init efi_late_init(void)
|
||||
efi_bgrt_init();
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ are available. This should trigger udev to load it.
|
|||
u64 addr, npages;
|
||||
--- a/drivers/firmware/efivars.c
|
||||
+++ b/drivers/firmware/efivars.c
|
||||
@@ -94,6 +94,7 @@ MODULE_AUTHOR("Matt Domsch <Matt_Domsch@
|
||||
@@ -95,6 +95,7 @@ MODULE_AUTHOR("Matt Domsch <Matt_Domsch@
|
||||
MODULE_DESCRIPTION("sysfs interface to EFI Variables");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_VERSION(EFIVARS_VERSION);
|
||||
|
|
|
@ -15,15 +15,14 @@ until the check can be restricted to known-bad systems, it seems less
|
|||
risky to disable it for now.
|
||||
|
||||
---
|
||||
--- a/drivers/firmware/efivars.c
|
||||
+++ b/drivers/firmware/efivars.c
|
||||
@@ -439,8 +439,7 @@ check_var_size_locked(struct efivars *ef
|
||||
if (status != EFI_SUCCESS)
|
||||
return status;
|
||||
--- a/arch/x86/platform/efi/efi.c
|
||||
+++ b/arch/x86/platform/efi/efi.c
|
||||
@@ -114,7 +114,7 @@ static int __init setup_add_efi_memmap(c
|
||||
}
|
||||
early_param("add_efi_memmap", setup_add_efi_memmap);
|
||||
|
||||
- if (!storage_size || size > remaining_size || size > max_size ||
|
||||
- (remaining_size - size) < (storage_size / 2))
|
||||
+ if (!storage_size || size > remaining_size || size > max_size)
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
-static bool efi_no_storage_paranoia;
|
||||
+static bool efi_no_storage_paranoia = true;
|
||||
|
||||
return status;
|
||||
static int __init setup_storage_paranoia(char *arg)
|
||||
{
|
||||
|
|
|
@ -36,7 +36,7 @@ missing, except for the pre-R600 KMS case.
|
|||
|
||||
|
||||
/*
|
||||
@@ -286,6 +288,35 @@ static struct drm_driver driver_old = {
|
||||
@@ -301,6 +303,37 @@ static struct drm_driver driver_old = {
|
||||
|
||||
static struct drm_driver kms_driver;
|
||||
|
||||
|
@ -58,6 +58,7 @@ missing, except for the pre-R600 KMS case.
|
|||
+ return false;
|
||||
+}
|
||||
+
|
||||
+#ifdef CONFIG_DRM_RADEON_UMS
|
||||
+static int
|
||||
+radeon_ums_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
+{
|
||||
|
@ -68,11 +69,12 @@ missing, except for the pre-R600 KMS case.
|
|||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
static int radeon_kick_out_firmware_fb(struct pci_dev *pdev)
|
||||
{
|
||||
struct apertures_struct *ap;
|
||||
@@ -312,6 +343,12 @@ static int radeon_pci_probe(struct pci_d
|
||||
@@ -327,6 +360,12 @@ static int radeon_pci_probe(struct pci_d
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
@ -85,11 +87,11 @@ missing, except for the pre-R600 KMS case.
|
|||
/* Get rid of things like offb */
|
||||
ret = radeon_kick_out_firmware_fb(pdev);
|
||||
if (ret)
|
||||
@@ -414,6 +451,7 @@ static struct pci_driver *pdriver;
|
||||
@@ -435,6 +474,7 @@ static struct pci_driver *pdriver;
|
||||
static struct pci_driver radeon_pci_driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.id_table = pciidlist,
|
||||
+ .probe = radeon_ums_pci_probe,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct pci_driver radeon_kms_pci_driver = {
|
||||
|
|
|
@ -80,7 +80,7 @@ Signed-off-by: Luis R. Rodriguez <mcgrof@frijolero.org>
|
|||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -1317,6 +1317,17 @@ W: http://atl1.sourceforge.net
|
||||
@@ -1432,6 +1432,17 @@ W: http://atl1.sourceforge.net
|
||||
S: Maintained
|
||||
F: drivers/net/ethernet/atheros/
|
||||
|
||||
|
@ -104,9 +104,9 @@ Signed-off-by: Luis R. Rodriguez <mcgrof@frijolero.org>
|
|||
will be called atl1e.
|
||||
|
||||
config ATL1C
|
||||
- tristate "Atheros L1C Gigabit Ethernet support (EXPERIMENTAL)"
|
||||
- tristate "Atheros L1C Gigabit Ethernet support"
|
||||
+ tristate "Atheros L1C Gigabit Ethernet support (DEPRECATED)"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
select CRC32
|
||||
select NET_CORE
|
||||
select MII
|
||||
|
|
|
@ -23,8 +23,8 @@ I've also changed the Kconfig help text to reflect this.
|
|||
|
||||
config ATL1C
|
||||
- tristate "Atheros L1C Gigabit Ethernet support (DEPRECATED)"
|
||||
+ tristate "Atheros L1C Gigabit Ethernet support (EXPERIMENTAL)"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
+ tristate "Atheros L1C Gigabit Ethernet support"
|
||||
depends on PCI
|
||||
select CRC32
|
||||
select NET_CORE
|
||||
select MII
|
||||
|
|
|
@ -32,7 +32,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
checkreqprot [SELINUX] Set initial checkreqprot flag value.
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -849,6 +849,14 @@ config MEMCG
|
||||
@@ -845,6 +845,14 @@ config MEMCG
|
||||
This config option also selects MM_OWNER config option, which
|
||||
could in turn add some fork/exit overhead.
|
||||
|
||||
|
@ -49,7 +49,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
depends on MEMCG && SWAP
|
||||
--- a/kernel/cgroup.c
|
||||
+++ b/kernel/cgroup.c
|
||||
@@ -5149,7 +5149,7 @@ static void cgroup_release_agent(struct
|
||||
@@ -5193,7 +5193,7 @@ static void cgroup_release_agent(struct
|
||||
mutex_unlock(&cgroup_mutex);
|
||||
}
|
||||
|
||||
|
@ -58,7 +58,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
{
|
||||
int i;
|
||||
char *token;
|
||||
@@ -5169,17 +5169,29 @@ static int __init cgroup_disable(char *s
|
||||
@@ -5213,17 +5213,29 @@ static int __init cgroup_disable(char *s
|
||||
continue;
|
||||
|
||||
if (!strcmp(token, ss->name)) {
|
||||
|
@ -93,7 +93,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
*/
|
||||
--- a/mm/memcontrol.c
|
||||
+++ b/mm/memcontrol.c
|
||||
@@ -6745,6 +6745,9 @@ static void mem_cgroup_move_task(struct
|
||||
@@ -6789,6 +6789,9 @@ static void mem_cgroup_move_task(struct
|
||||
|
||||
struct cgroup_subsys mem_cgroup_subsys = {
|
||||
.name = "memory",
|
||||
|
@ -102,4 +102,4 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
+#endif
|
||||
.subsys_id = mem_cgroup_subsys_id,
|
||||
.css_alloc = mem_cgroup_css_alloc,
|
||||
.css_offline = mem_cgroup_css_offline,
|
||||
.css_online = mem_cgroup_css_online,
|
||||
|
|
|
@ -27,8 +27,8 @@ Takes from git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git#upstream
|
|||
|
||||
--- a/arch/x86/include/asm/microcode.h
|
||||
+++ b/arch/x86/include/asm/microcode.h
|
||||
@@ -63,4 +63,13 @@ static inline struct microcode_ops * __i
|
||||
static inline void __exit exit_amd_microcode(void) {}
|
||||
@@ -71,4 +71,13 @@ static inline int __init save_microcode_
|
||||
}
|
||||
#endif
|
||||
|
||||
+#ifdef CONFIG_MICROCODE_XEN
|
||||
|
@ -43,7 +43,7 @@ Takes from git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git#upstream
|
|||
#endif /* _ASM_X86_MICROCODE_H */
|
||||
--- a/arch/x86/kernel/Makefile
|
||||
+++ b/arch/x86/kernel/Makefile
|
||||
@@ -92,6 +92,7 @@ obj-$(CONFIG_PCSPKR_PLATFORM) += pcspeak
|
||||
@@ -93,6 +93,7 @@ obj-$(CONFIG_MICROCODE_INTEL_LIB) += mic
|
||||
microcode-y := microcode_core.o
|
||||
microcode-$(CONFIG_MICROCODE_INTEL) += microcode_intel.o
|
||||
microcode-$(CONFIG_MICROCODE_AMD) += microcode_amd.o
|
||||
|
@ -61,7 +61,7 @@ Takes from git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git#upstream
|
|||
#include <asm/microcode.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/cpu_device_id.h>
|
||||
@@ -544,7 +545,9 @@ static int __init microcode_init(void)
|
||||
@@ -546,7 +547,9 @@ static int __init microcode_init(void)
|
||||
struct cpuinfo_x86 *c = &cpu_data(0);
|
||||
int error;
|
||||
|
||||
|
@ -275,7 +275,7 @@ Takes from git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git#upstream
|
|||
+}
|
||||
--- a/arch/x86/xen/Kconfig
|
||||
+++ b/arch/x86/xen/Kconfig
|
||||
@@ -50,3 +50,6 @@ config XEN_DEBUG_FS
|
||||
@@ -51,3 +51,6 @@ config XEN_DEBUG_FS
|
||||
Enable statistics output and various tuning options in debugfs.
|
||||
Enabling this option may incur a significant performance overhead.
|
||||
|
||||
|
|
|
@ -42,7 +42,6 @@ debian/x86-memtest-WARN-if-bad-RAM-found.patch
|
|||
|
||||
features/all/cpu-devices/Partially-revert-cpufreq-Add-support-for-x86-cpuinfo.patch
|
||||
|
||||
bugfix/alpha/alpha-use-large-data-model.diff
|
||||
debian/iwlwifi-do-not-request-unreleased-firmware.patch
|
||||
debian/cirrus-disable-modeset-by-default.patch
|
||||
debian/fs-enable-link-security-restrictions-by-default.patch
|
||||
|
@ -68,7 +67,6 @@ features/all/alx/alx-add-new-QCA-ethernet-driver-which-supercedes-atl.patch
|
|||
features/all/alx/remove-atl1c-devices-from-alx.patch
|
||||
features/all/alx/mark-as-staging.patch
|
||||
|
||||
bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch
|
||||
debian/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch
|
||||
bugfix/x86/drm-i915-add-quirk-to-invert-brightness-on-emachines-g725.patch
|
||||
bugfix/x86/drm-i915-add-quirk-to-invert-brightness-on-emachines-e725.patch
|
||||
|
@ -76,15 +74,6 @@ bugfix/x86/drm-i915-add-quirk-to-invert-brightness-on-packard-bell-ncl20.patch
|
|||
|
||||
bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.patch
|
||||
features/all/alx/alx-update-for-3.8.patch
|
||||
bugfix/mips/mips-add-dependencies-for-have_arch_transparent_hugepage.patch
|
||||
bugfix/all/signal-fix-use-of-missing-sa_restorer-field.patch
|
||||
bugfix/all/kernel-signal.c-use-__ARCH_HAS_SA_RESTORER-instead-o.patch
|
||||
debian/efi-autoload-efivars.patch
|
||||
bugfix/all/efi_pstore-Introducing-workqueue-updating-sysfs.patch
|
||||
bugfix/all/efivars-explicitly-calculate-length-of-VariableName.patch
|
||||
bugfix/all/efivars-Handle-duplicate-names-from-get_next_variabl.patch
|
||||
debian/efivars-remove-check-for-50-full-on-write.patch
|
||||
bugfix/x86/KVM-x86-fix-for-buffer-overflow-in-handling-of-MSR_K.patch
|
||||
bugfix/x86/KVM-x86-Convert-MSR_KVM_SYSTEM_TIME-to-use-gfn_to_hv.patch
|
||||
bugfix/all/KVM-Fix-bounds-checking-in-ioapic-indirect-register-.patch
|
||||
debian/cdc_ncm-cdc_mbim-use-ncm-by-default.patch
|
||||
|
|
Loading…
Reference in New Issue