Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 8 Jan 2010 21:55:52 +0000 (13:55 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 8 Jan 2010 21:55:52 +0000 (13:55 -0800)
* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-tip:
  x86, irq: Check move_in_progress before freeing the vector mapping
  x86: copy_from_user() should not return -EFAULT
  Revert "x86: Side-step lguest problem by only building cmpxchg8b_emu for pre-Pentium"
  x86/pci: Intel ioh bus num reg accessing fix
  x86: Fix size for ex trampoline with 32bit

arch/x86/include/asm/uaccess_32.h
arch/x86/include/asm/uaccess_64.h
arch/x86/kernel/apic/io_apic.c
arch/x86/kernel/e820.c
arch/x86/pci/intel_bus.c

index 0c9825e97f361fd40032ac8d3417318288a864b2..088d09fb1615af8081872b04e9b2b3ec15e1fbad 100644 (file)
@@ -205,14 +205,13 @@ static inline unsigned long __must_check copy_from_user(void *to,
                                          unsigned long n)
 {
        int sz = __compiletime_object_size(to);
-       int ret = -EFAULT;
 
        if (likely(sz == -1 || sz >= n))
-               ret = _copy_from_user(to, from, n);
+               n = _copy_from_user(to, from, n);
        else
                copy_from_user_overflow();
 
-       return ret;
+       return n;
 }
 
 long __must_check strncpy_from_user(char *dst, const char __user *src,
index 46324c6a4f6e3da0aba2f3a6576ade498c3ea57b..535e421498f6148ed36adaf698f54a13c58393de 100644 (file)
@@ -30,16 +30,15 @@ static inline unsigned long __must_check copy_from_user(void *to,
                                          unsigned long n)
 {
        int sz = __compiletime_object_size(to);
-       int ret = -EFAULT;
 
        might_fault();
        if (likely(sz == -1 || sz >= n))
-               ret = _copy_from_user(to, from, n);
+               n = _copy_from_user(to, from, n);
 #ifdef CONFIG_DEBUG_VM
        else
                WARN(1, "Buffer overflow detected!\n");
 #endif
-       return ret;
+       return n;
 }
 
 static __always_inline __must_check
index de00c4619a55b85060a362a5640b141a7492d501..53243ca7816d131ee2821733b722ec0e4d8bd0b3 100644 (file)
@@ -2434,6 +2434,13 @@ asmlinkage void smp_irq_move_cleanup_interrupt(void)
                cfg = irq_cfg(irq);
                raw_spin_lock(&desc->lock);
 
+               /*
+                * Check if the irq migration is in progress. If so, we
+                * haven't received the cleanup request yet for this irq.
+                */
+               if (cfg->move_in_progress)
+                       goto unlock;
+
                if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain))
                        goto unlock;
 
index 05ed7ab2ca489578c9433930f9df0f03f7526375..a1a7876cadcbfa2b0fdbfa9d9416ee62c14cd85c 100644 (file)
@@ -733,13 +733,13 @@ struct early_res {
 };
 static struct early_res early_res[MAX_EARLY_RES] __initdata = {
        { 0, PAGE_SIZE, "BIOS data page", 1 },  /* BIOS data page */
-#ifdef CONFIG_X86_32
+#if defined(CONFIG_X86_32) && defined(CONFIG_X86_TRAMPOLINE)
        /*
         * But first pinch a few for the stack/trampoline stuff
         * FIXME: Don't need the extra page at 4K, but need to fix
         * trampoline before removing it. (see the GDT stuff)
         */
-       { PAGE_SIZE, PAGE_SIZE, "EX TRAMPOLINE", 1 },
+       { PAGE_SIZE, PAGE_SIZE + PAGE_SIZE, "EX TRAMPOLINE", 1 },
 #endif
 
        {}
index b7a55dc55d13f65b9921400b5a53cbd4ee9213f7..f81a2fa8fe256f0b53e4a4abbb27d998af103d75 100644 (file)
@@ -49,6 +49,10 @@ static void __devinit pci_root_bus_res(struct pci_dev *dev)
        u64 mmioh_base, mmioh_end;
        int bus_base, bus_end;
 
+       /* some sys doesn't get mmconf enabled */
+       if (dev->cfg_size < 0x120)
+               return;
+
        if (pci_root_num >= PCI_ROOT_NR) {
                printk(KERN_DEBUG "intel_bus.c: PCI_ROOT_NR is too small\n");
                return;