Merge branch 'x86-irq-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 22 Oct 2010 15:54:21 +0000 (08:54 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 22 Oct 2010 15:54:21 +0000 (08:54 -0700)
* 'x86-irq-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86, 32-bit: Align percpu area and irq stacks to THREAD_SIZE
  x86: Move alloc_desk_mask variables inside ifdef
  x86-32: Align IRQ stacks properly
  x86: Remove CONFIG_4KSTACKS
  x86: Always use irq stacks

Fixed up trivial conflicts in include/linux/{irq.h, percpu-defs.h}

1  2 
arch/x86/Kconfig.debug
arch/x86/kernel/vmlinux.lds.S
include/linux/percpu-defs.h

diff --combined arch/x86/Kconfig.debug
@@@ -43,10 -43,6 +43,10 @@@ config EARLY_PRINT
          with klogd/syslogd or the X server. You should normally N here,
          unless you want to debug such a crash.
  
 +config EARLY_PRINTK_MRST
 +      bool "Early printk for MRST platform support"
 +      depends on EARLY_PRINTK && X86_MRST
 +
  config EARLY_PRINTK_DBGP
        bool "Early printk via EHCI debug port"
        depends on EARLY_PRINTK && PCI
@@@ -125,16 -121,6 +125,6 @@@ config DEBUG_NX_TES
          and the software setup of this feature.
          If in doubt, say "N"
  
- config 4KSTACKS
-       bool "Use 4Kb for kernel stacks instead of 8Kb"
-       depends on X86_32
-       ---help---
-         If you say Y here the kernel will use a 4Kb stacksize for the
-         kernel stack attached to each process/thread. This facilitates
-         running more threads on a system and also reduces the pressure
-         on the VM subsystem for higher order allocations. This option
-         will also use IRQ stacks to compensate for the reduced stackspace.
  config DOUBLEFAULT
        default y
        bool "Enable doublefault exception handler" if EMBEDDED
@@@ -242,12 -242,6 +242,12 @@@ SECTION
                __x86_cpu_dev_end = .;
        }
  
 +      /*
 +       * start address and size of operations which during runtime
 +       * can be patched with virtualization friendly instructions or
 +       * baremetal native ones. Think page table operations.
 +       * Details in paravirt_types.h
 +       */
        . = ALIGN(8);
        .parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) {
                __parainstructions = .;
                __parainstructions_end = .;
        }
  
 +      /*
 +       * struct alt_inst entries. From the header (alternative.h):
 +       * "Alternative instructions for different CPU types or capabilities"
 +       * Think locking instructions on spinlocks.
 +       */
        . = ALIGN(8);
        .altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
                __alt_instructions = .;
                __alt_instructions_end = .;
        }
  
 +      /*
 +       * And here are the replacement instructions. The linker sticks
 +       * them as binary blobs. The .altinstructions has enough data to
 +       * get the address and the length of them to patch the kernel safely.
 +       */
        .altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) {
                *(.altinstr_replacement)
        }
  
 +      /*
 +       * struct iommu_table_entry entries are injected in this section.
 +       * It is an array of IOMMUs which during run time gets sorted depending
 +       * on its dependency order. After rootfs_initcall is complete
 +       * this section can be safely removed.
 +       */
 +      .iommu_table : AT(ADDR(.iommu_table) - LOAD_OFFSET) {
 +              __iommu_table = .;
 +              *(.iommu_table)
 +              __iommu_table_end = .;
 +      }
 +      . = ALIGN(8);
        /*
         * .exit.text is discard at runtime, not link time, to deal with
         *  references from .altinstructions and .eh_frame
        }
  
  #if !defined(CONFIG_X86_64) || !defined(CONFIG_SMP)
-       PERCPU(PAGE_SIZE)
+       PERCPU(THREAD_SIZE)
  #endif
  
        . = ALIGN(PAGE_SIZE);
        DEFINE_PER_CPU_SECTION(type, name, "..page_aligned")            \
        __aligned(PAGE_SIZE)
  
 +/*
 + * Declaration/definition used for per-CPU variables that must be read mostly.
 + */
 +#define DECLARE_PER_CPU_READ_MOSTLY(type, name)                       \
 +      DECLARE_PER_CPU_SECTION(type, name, "..readmostly")
 +
 +#define DEFINE_PER_CPU_READ_MOSTLY(type, name)                                \
 +      DEFINE_PER_CPU_SECTION(type, name, "..readmostly")
 +
+ /*
+  * Declaration/definition used for large per-CPU variables that must be
+  * aligned to something larger than the pagesize.
+  */
+ #define DECLARE_PER_CPU_MULTIPAGE_ALIGNED(type, name, size)           \
+       DECLARE_PER_CPU_SECTION(type, name, "..page_aligned")           \
+       __aligned(size)
+ #define DEFINE_PER_CPU_MULTIPAGE_ALIGNED(type, name, size)            \
+       DEFINE_PER_CPU_SECTION(type, name, "..page_aligned")            \
+       __aligned(size)
  /*
   * Intermodule exports for per-CPU variables.  sparse forgets about
   * address space across EXPORT_SYMBOL(), change EXPORT_SYMBOL() to