diff options
| -rw-r--r-- | arch/x86/include/asm/uaccess_32.h | 5 | ||||
| -rw-r--r-- | arch/x86/include/asm/uaccess_64.h | 5 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/io_apic.c | 7 | ||||
| -rw-r--r-- | arch/x86/kernel/e820.c | 4 | ||||
| -rw-r--r-- | arch/x86/pci/intel_bus.c | 4 |
5 files changed, 17 insertions, 8 deletions
diff --git a/arch/x86/include/asm/uaccess_32.h b/arch/x86/include/asm/uaccess_32.h index 0c9825e97f36..088d09fb1615 100644 --- a/arch/x86/include/asm/uaccess_32.h +++ b/arch/x86/include/asm/uaccess_32.h | |||
| @@ -205,14 +205,13 @@ static inline unsigned long __must_check copy_from_user(void *to, | |||
| 205 | unsigned long n) | 205 | unsigned long n) |
| 206 | { | 206 | { |
| 207 | int sz = __compiletime_object_size(to); | 207 | int sz = __compiletime_object_size(to); |
| 208 | int ret = -EFAULT; | ||
| 209 | 208 | ||
| 210 | if (likely(sz == -1 || sz >= n)) | 209 | if (likely(sz == -1 || sz >= n)) |
| 211 | ret = _copy_from_user(to, from, n); | 210 | n = _copy_from_user(to, from, n); |
| 212 | else | 211 | else |
| 213 | copy_from_user_overflow(); | 212 | copy_from_user_overflow(); |
| 214 | 213 | ||
| 215 | return ret; | 214 | return n; |
| 216 | } | 215 | } |
| 217 | 216 | ||
| 218 | long __must_check strncpy_from_user(char *dst, const char __user *src, | 217 | long __must_check strncpy_from_user(char *dst, const char __user *src, |
diff --git a/arch/x86/include/asm/uaccess_64.h b/arch/x86/include/asm/uaccess_64.h index 46324c6a4f6e..535e421498f6 100644 --- a/arch/x86/include/asm/uaccess_64.h +++ b/arch/x86/include/asm/uaccess_64.h | |||
| @@ -30,16 +30,15 @@ static inline unsigned long __must_check copy_from_user(void *to, | |||
| 30 | unsigned long n) | 30 | unsigned long n) |
| 31 | { | 31 | { |
| 32 | int sz = __compiletime_object_size(to); | 32 | int sz = __compiletime_object_size(to); |
| 33 | int ret = -EFAULT; | ||
| 34 | 33 | ||
| 35 | might_fault(); | 34 | might_fault(); |
| 36 | if (likely(sz == -1 || sz >= n)) | 35 | if (likely(sz == -1 || sz >= n)) |
| 37 | ret = _copy_from_user(to, from, n); | 36 | n = _copy_from_user(to, from, n); |
| 38 | #ifdef CONFIG_DEBUG_VM | 37 | #ifdef CONFIG_DEBUG_VM |
| 39 | else | 38 | else |
| 40 | WARN(1, "Buffer overflow detected!\n"); | 39 | WARN(1, "Buffer overflow detected!\n"); |
| 41 | #endif | 40 | #endif |
| 42 | return ret; | 41 | return n; |
| 43 | } | 42 | } |
| 44 | 43 | ||
| 45 | static __always_inline __must_check | 44 | static __always_inline __must_check |
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index de00c4619a55..53243ca7816d 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
| @@ -2434,6 +2434,13 @@ asmlinkage void smp_irq_move_cleanup_interrupt(void) | |||
| 2434 | cfg = irq_cfg(irq); | 2434 | cfg = irq_cfg(irq); |
| 2435 | raw_spin_lock(&desc->lock); | 2435 | raw_spin_lock(&desc->lock); |
| 2436 | 2436 | ||
| 2437 | /* | ||
| 2438 | * Check if the irq migration is in progress. If so, we | ||
| 2439 | * haven't received the cleanup request yet for this irq. | ||
| 2440 | */ | ||
| 2441 | if (cfg->move_in_progress) | ||
| 2442 | goto unlock; | ||
| 2443 | |||
| 2437 | if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain)) | 2444 | if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain)) |
| 2438 | goto unlock; | 2445 | goto unlock; |
| 2439 | 2446 | ||
diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index 05ed7ab2ca48..a1a7876cadcb 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c | |||
| @@ -733,13 +733,13 @@ struct early_res { | |||
| 733 | }; | 733 | }; |
| 734 | static struct early_res early_res[MAX_EARLY_RES] __initdata = { | 734 | static struct early_res early_res[MAX_EARLY_RES] __initdata = { |
| 735 | { 0, PAGE_SIZE, "BIOS data page", 1 }, /* BIOS data page */ | 735 | { 0, PAGE_SIZE, "BIOS data page", 1 }, /* BIOS data page */ |
| 736 | #ifdef CONFIG_X86_32 | 736 | #if defined(CONFIG_X86_32) && defined(CONFIG_X86_TRAMPOLINE) |
| 737 | /* | 737 | /* |
| 738 | * But first pinch a few for the stack/trampoline stuff | 738 | * But first pinch a few for the stack/trampoline stuff |
| 739 | * FIXME: Don't need the extra page at 4K, but need to fix | 739 | * FIXME: Don't need the extra page at 4K, but need to fix |
| 740 | * trampoline before removing it. (see the GDT stuff) | 740 | * trampoline before removing it. (see the GDT stuff) |
| 741 | */ | 741 | */ |
| 742 | { PAGE_SIZE, PAGE_SIZE, "EX TRAMPOLINE", 1 }, | 742 | { PAGE_SIZE, PAGE_SIZE + PAGE_SIZE, "EX TRAMPOLINE", 1 }, |
| 743 | #endif | 743 | #endif |
| 744 | 744 | ||
| 745 | {} | 745 | {} |
diff --git a/arch/x86/pci/intel_bus.c b/arch/x86/pci/intel_bus.c index b7a55dc55d13..f81a2fa8fe25 100644 --- a/arch/x86/pci/intel_bus.c +++ b/arch/x86/pci/intel_bus.c | |||
| @@ -49,6 +49,10 @@ static void __devinit pci_root_bus_res(struct pci_dev *dev) | |||
| 49 | u64 mmioh_base, mmioh_end; | 49 | u64 mmioh_base, mmioh_end; |
| 50 | int bus_base, bus_end; | 50 | int bus_base, bus_end; |
| 51 | 51 | ||
| 52 | /* some sys doesn't get mmconf enabled */ | ||
| 53 | if (dev->cfg_size < 0x120) | ||
| 54 | return; | ||
| 55 | |||
| 52 | if (pci_root_num >= PCI_ROOT_NR) { | 56 | if (pci_root_num >= PCI_ROOT_NR) { |
| 53 | printk(KERN_DEBUG "intel_bus.c: PCI_ROOT_NR is too small\n"); | 57 | printk(KERN_DEBUG "intel_bus.c: PCI_ROOT_NR is too small\n"); |
| 54 | return; | 58 | return; |
