]> pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge commit 'v2.6.27-rc1' into x86/core
authorIngo Molnar <mingo@elte.hu>
Wed, 30 Jul 2008 17:33:48 +0000 (19:33 +0200)
committerIngo Molnar <mingo@elte.hu>
Wed, 30 Jul 2008 17:33:48 +0000 (19:33 +0200)
Conflicts:

include/asm-x86/dma-mapping.h
include/asm-x86/namei.h
include/asm-x86/uaccess.h

Signed-off-by: Ingo Molnar <mingo@elte.hu>
1  2 
arch/x86/Kconfig
arch/x86/lguest/boot.c
include/asm-x86/device.h
include/asm-x86/dma-mapping.h
include/asm-x86/iommu.h
include/asm-x86/kexec.h
include/asm-x86/kvm_host.h
include/asm-x86/pgtable.h
include/asm-x86/swiotlb.h
include/asm-x86/uaccess.h
kernel/irq/manage.c

diff --combined arch/x86/Kconfig
index 97e97ee966289ebb7502ad29072d8c18028f6c8f,3d0f2b6a5a16e6edd6f349b4b19756a5d2cecff7..608a12ff483ac2a9066f39560d0fdab336ebf449
@@@ -22,6 -22,7 +22,7 @@@ config X8
        select HAVE_IDE
        select HAVE_OPROFILE
        select HAVE_IOREMAP_PROT
+       select HAVE_GET_USER_PAGES_FAST
        select HAVE_KPROBES
        select ARCH_WANT_OPTIONAL_GPIOLIB
        select HAVE_KRETPROBES
@@@ -29,6 -30,7 +30,7 @@@
        select HAVE_FTRACE
        select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64)
        select HAVE_ARCH_KGDB if !X86_VOYAGER
+       select HAVE_GENERIC_DMA_COHERENT if X86_32
        select HAVE_EFFICIENT_UNALIGNED_ACCESS
  
  config ARCH_DEFCONFIG
@@@ -1275,6 -1277,14 +1277,14 @@@ config CRASH_DUM
          (CONFIG_RELOCATABLE=y).
          For more details see Documentation/kdump/kdump.txt
  
+ config KEXEC_JUMP
+       bool "kexec jump (EXPERIMENTAL)"
+       depends on EXPERIMENTAL
+       depends on KEXEC && HIBERNATION && X86_32
+       help
+         Jump between original kernel and kexeced kernel and invoke
+         code in physical address mode via KEXEC
  config PHYSICAL_START
        hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP)
        default "0x1000000" if X86_NUMAQ
@@@ -1648,14 -1658,6 +1658,14 @@@ config DMAR_FLOPPY_W
         workaround will setup a 1:1 mapping for the first
         16M to make floppy (an ISA device) work.
  
 +config INTR_REMAP
 +      bool "Support for Interrupt Remapping (EXPERIMENTAL)"
 +      depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI && EXPERIMENTAL
 +      help
 +       Supports Interrupt remapping for IO-APIC and MSI devices.
 +       To use x2apic mode in the CPU's which support x2APIC enhancements or
 +       to support platforms with CPU's having > 8 bit APIC ID, say Y.
 +
  source "drivers/pci/pcie/Kconfig"
  
  source "drivers/pci/Kconfig"
diff --combined arch/x86/lguest/boot.c
index 756fc489652beb8353e04ac619f3d5ec395a4621,d9249a882aa5b0c2204fc16724e0848e8184d543..65f0b8a47bed0dd2ccdd31e507cdfd70846c4d48
@@@ -55,7 -55,6 +55,7 @@@
  #include <linux/lguest_launcher.h>
  #include <linux/virtio_console.h>
  #include <linux/pm.h>
 +#include <asm/apic.h>
  #include <asm/lguest.h>
  #include <asm/paravirt.h>
  #include <asm/param.h>
@@@ -784,44 -783,14 +784,44 @@@ static void lguest_wbinvd(void
   * code qualifies for Advanced.  It will also never interrupt anything.  It
   * does, however, allow us to get through the Linux boot code. */
  #ifdef CONFIG_X86_LOCAL_APIC
 -static void lguest_apic_write(unsigned long reg, u32 v)
 +static void lguest_apic_write(u32 reg, u32 v)
  {
  }
  
 -static u32 lguest_apic_read(unsigned long reg)
 +static u32 lguest_apic_read(u32 reg)
  {
        return 0;
  }
 +
 +static u64 lguest_apic_icr_read(void)
 +{
 +      return 0;
 +}
 +
 +static void lguest_apic_icr_write(u32 low, u32 id)
 +{
 +      /* Warn to see if there's any stray references */
 +      WARN_ON(1);
 +}
 +
 +static void lguest_apic_wait_icr_idle(void)
 +{
 +      return;
 +}
 +
 +static u32 lguest_apic_safe_wait_icr_idle(void)
 +{
 +      return 0;
 +}
 +
 +static struct apic_ops lguest_basic_apic_ops = {
 +      .read = lguest_apic_read,
 +      .write = lguest_apic_write,
 +      .icr_read = lguest_apic_icr_read,
 +      .icr_write = lguest_apic_icr_write,
 +      .wait_icr_idle = lguest_apic_wait_icr_idle,
 +      .safe_wait_icr_idle = lguest_apic_safe_wait_icr_idle,
 +};
  #endif
  
  /* STOP!  Until an interrupt comes in. */
@@@ -1021,7 -990,8 +1021,7 @@@ __init void lguest_init(void
  
  #ifdef CONFIG_X86_LOCAL_APIC
        /* apic read/write intercepts */
 -      pv_apic_ops.apic_write = lguest_apic_write;
 -      pv_apic_ops.apic_read = lguest_apic_read;
 +      apic_ops = &lguest_basic_apic_ops;
  #endif
  
        /* time operations */
        init_pg_tables_start = __pa(pg0);
        init_pg_tables_end = __pa(pg0);
  
+       /* As described in head_32.S, we map the first 128M of memory. */
+       max_pfn_mapped = (128*1024*1024) >> PAGE_SHIFT;
        /* Load the %fs segment register (the per-cpu segment register) with
         * the normal data segment to get through booting. */
        asm volatile ("mov %0, %%fs" : : "r" (__KERNEL_DS) : "memory");
diff --combined include/asm-x86/device.h
index dbe8855438958d20aa926882c2b20986201719c4,3c034f48fdb0a12f5a3fefe1499d014b68e6f4a2..1bece04c7d9d9b829d6d51abe191ce1b8abf0da9
@@@ -1,13 -1,16 +1,16 @@@
 -#ifndef _ASM_X86_DEVICE_H
 -#define _ASM_X86_DEVICE_H
 +#ifndef ASM_X86__DEVICE_H
 +#define ASM_X86__DEVICE_H
  
  struct dev_archdata {
  #ifdef CONFIG_ACPI
        void    *acpi_handle;
  #endif
+ #ifdef CONFIG_X86_64
+ struct dma_mapping_ops *dma_ops;
+ #endif
  #ifdef CONFIG_DMAR
        void *iommu; /* hook for IOMMU specific extension */
  #endif
  };
  
 -#endif /* _ASM_X86_DEVICE_H */
 +#endif /* ASM_X86__DEVICE_H */
index 71b6f7d22e9a9d71236f3abe56c7dcb0ba1fbb8d,ad9cd6d49bfc9bc624747709da188301b35f5b55..5d200e78bd81e18b7e315f8f2d9660cd13c23a1d
@@@ -1,5 -1,5 +1,5 @@@
 -#ifndef _ASM_DMA_MAPPING_H_
 -#define _ASM_DMA_MAPPING_H_
 +#ifndef ASM_X86__DMA_MAPPING_H
 +#define ASM_X86__DMA_MAPPING_H
  
  /*
   * IOMMU interface. See Documentation/DMA-mapping.txt and DMA-API.txt for
@@@ -17,7 -17,8 +17,8 @@@ extern int panic_on_overflow
  extern int force_iommu;
  
  struct dma_mapping_ops {
-       int             (*mapping_error)(dma_addr_t dma_addr);
+       int             (*mapping_error)(struct device *dev,
+                                        dma_addr_t dma_addr);
        void*           (*alloc_coherent)(struct device *dev, size_t size,
                                dma_addr_t *dma_handle, gfp_t gfp);
        void            (*free_coherent)(struct device *dev, size_t size,
        int             is_phys;
  };
  
- extern const struct dma_mapping_ops *dma_ops;
+ extern struct dma_mapping_ops *dma_ops;
  
- static inline int dma_mapping_error(dma_addr_t dma_addr)
+ static inline struct dma_mapping_ops *get_dma_ops(struct device *dev)
  {
-       if (dma_ops->mapping_error)
-               return dma_ops->mapping_error(dma_addr);
+ #ifdef CONFIG_X86_32
+       return dma_ops;
+ #else
+       if (unlikely(!dev) || !dev->archdata.dma_ops)
+               return dma_ops;
+       else
+               return dev->archdata.dma_ops;
+ #endif
+ }
+ /* Make sure we keep the same behaviour */
+ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
+ {
+ #ifdef CONFIG_X86_32
+       return 0;
+ #else
+       struct dma_mapping_ops *ops = get_dma_ops(dev);
+       if (ops->mapping_error)
+               return ops->mapping_error(dev, dma_addr);
  
        return (dma_addr == bad_dma_address);
+ #endif
  }
  
  #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
@@@ -83,44 -102,53 +102,53 @@@ static inline dma_addr_
  dma_map_single(struct device *hwdev, void *ptr, size_t size,
               int direction)
  {
+       struct dma_mapping_ops *ops = get_dma_ops(hwdev);
        BUG_ON(!valid_dma_direction(direction));
-       return dma_ops->map_single(hwdev, virt_to_phys(ptr), size, direction);
+       return ops->map_single(hwdev, virt_to_phys(ptr), size, direction);
  }
  
  static inline void
  dma_unmap_single(struct device *dev, dma_addr_t addr, size_t size,
                 int direction)
  {
+       struct dma_mapping_ops *ops = get_dma_ops(dev);
        BUG_ON(!valid_dma_direction(direction));
-       if (dma_ops->unmap_single)
-               dma_ops->unmap_single(dev, addr, size, direction);
+       if (ops->unmap_single)
+               ops->unmap_single(dev, addr, size, direction);
  }
  
  static inline int
  dma_map_sg(struct device *hwdev, struct scatterlist *sg,
           int nents, int direction)
  {
+       struct dma_mapping_ops *ops = get_dma_ops(hwdev);
        BUG_ON(!valid_dma_direction(direction));
-       return dma_ops->map_sg(hwdev, sg, nents, direction);
+       return ops->map_sg(hwdev, sg, nents, direction);
  }
  
  static inline void
  dma_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents,
             int direction)
  {
+       struct dma_mapping_ops *ops = get_dma_ops(hwdev);
        BUG_ON(!valid_dma_direction(direction));
-       if (dma_ops->unmap_sg)
-               dma_ops->unmap_sg(hwdev, sg, nents, direction);
+       if (ops->unmap_sg)
+               ops->unmap_sg(hwdev, sg, nents, direction);
  }
  
  static inline void
  dma_sync_single_for_cpu(struct device *hwdev, dma_addr_t dma_handle,
                        size_t size, int direction)
  {
+       struct dma_mapping_ops *ops = get_dma_ops(hwdev);
        BUG_ON(!valid_dma_direction(direction));
-       if (dma_ops->sync_single_for_cpu)
-               dma_ops->sync_single_for_cpu(hwdev, dma_handle, size,
-                                            direction);
+       if (ops->sync_single_for_cpu)
+               ops->sync_single_for_cpu(hwdev, dma_handle, size, direction);
        flush_write_buffers();
  }
  
@@@ -128,10 -156,11 +156,11 @@@ static inline voi
  dma_sync_single_for_device(struct device *hwdev, dma_addr_t dma_handle,
                           size_t size, int direction)
  {
+       struct dma_mapping_ops *ops = get_dma_ops(hwdev);
        BUG_ON(!valid_dma_direction(direction));
-       if (dma_ops->sync_single_for_device)
-               dma_ops->sync_single_for_device(hwdev, dma_handle, size,
-                                               direction);
+       if (ops->sync_single_for_device)
+               ops->sync_single_for_device(hwdev, dma_handle, size, direction);
        flush_write_buffers();
  }
  
@@@ -139,11 -168,12 +168,12 @@@ static inline voi
  dma_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dma_handle,
                              unsigned long offset, size_t size, int direction)
  {
-       BUG_ON(!valid_dma_direction(direction));
-       if (dma_ops->sync_single_range_for_cpu)
-               dma_ops->sync_single_range_for_cpu(hwdev, dma_handle, offset,
-                                                  size, direction);
+       struct dma_mapping_ops *ops = get_dma_ops(hwdev);
  
+       BUG_ON(!valid_dma_direction(direction));
+       if (ops->sync_single_range_for_cpu)
+               ops->sync_single_range_for_cpu(hwdev, dma_handle, offset,
+                                              size, direction);
        flush_write_buffers();
  }
  
@@@ -152,11 -182,12 +182,12 @@@ dma_sync_single_range_for_device(struc
                                 unsigned long offset, size_t size,
                                 int direction)
  {
-       BUG_ON(!valid_dma_direction(direction));
-       if (dma_ops->sync_single_range_for_device)
-               dma_ops->sync_single_range_for_device(hwdev, dma_handle,
-                                                     offset, size, direction);
+       struct dma_mapping_ops *ops = get_dma_ops(hwdev);
  
+       BUG_ON(!valid_dma_direction(direction));
+       if (ops->sync_single_range_for_device)
+               ops->sync_single_range_for_device(hwdev, dma_handle,
+                                                 offset, size, direction);
        flush_write_buffers();
  }
  
@@@ -164,9 -195,11 +195,11 @@@ static inline voi
  dma_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
                    int nelems, int direction)
  {
+       struct dma_mapping_ops *ops = get_dma_ops(hwdev);
        BUG_ON(!valid_dma_direction(direction));
-       if (dma_ops->sync_sg_for_cpu)
-               dma_ops->sync_sg_for_cpu(hwdev, sg, nelems, direction);
+       if (ops->sync_sg_for_cpu)
+               ops->sync_sg_for_cpu(hwdev, sg, nelems, direction);
        flush_write_buffers();
  }
  
@@@ -174,9 -207,11 +207,11 @@@ static inline voi
  dma_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
                       int nelems, int direction)
  {
+       struct dma_mapping_ops *ops = get_dma_ops(hwdev);
        BUG_ON(!valid_dma_direction(direction));
-       if (dma_ops->sync_sg_for_device)
-               dma_ops->sync_sg_for_device(hwdev, sg, nelems, direction);
+       if (ops->sync_sg_for_device)
+               ops->sync_sg_for_device(hwdev, sg, nelems, direction);
  
        flush_write_buffers();
  }
@@@ -185,9 -220,11 +220,11 @@@ static inline dma_addr_t dma_map_page(s
                                      size_t offset, size_t size,
                                      int direction)
  {
+       struct dma_mapping_ops *ops = get_dma_ops(dev);
        BUG_ON(!valid_dma_direction(direction));
-       return dma_ops->map_single(dev, page_to_phys(page)+offset,
-                                  size, direction);
+       return ops->map_single(dev, page_to_phys(page) + offset,
+                              size, direction);
  }
  
  static inline void dma_unmap_page(struct device *dev, dma_addr_t addr,
@@@ -212,25 -249,5 +249,5 @@@ static inline int dma_get_cache_alignme
  
  #define dma_is_consistent(d, h)       (1)
  
- #ifdef CONFIG_X86_32
- #  define ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY
- struct dma_coherent_mem {
-       void            *virt_base;
-       u32             device_base;
-       int             size;
-       int             flags;
-       unsigned long   *bitmap;
- };
- extern int
- dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
-                           dma_addr_t device_addr, size_t size, int flags);
- extern void
- dma_release_declared_memory(struct device *dev);
- extern void *
- dma_mark_declared_memory_occupied(struct device *dev,
-                                 dma_addr_t device_addr, size_t size);
- #endif /* CONFIG_X86_32 */
+ #include <asm-generic/dma-coherent.h>
 -#endif
 +#endif /* ASM_X86__DMA_MAPPING_H */
diff --combined include/asm-x86/iommu.h
index 4f3d212d82701b54f3b6b6ff6e6b4cdf0ca5be2a,ecc8061904a9ee27210d27efd74dfe4534212fb6..bdb823e6edb4782884010c16ec6d3c067dc9fcb2
@@@ -1,8 -1,9 +1,9 @@@
 -#ifndef _ASM_X8664_IOMMU_H
 -#define _ASM_X8664_IOMMU_H 1
 +#ifndef ASM_X86__IOMMU_H
 +#define ASM_X86__IOMMU_H
  
  extern void pci_iommu_shutdown(void);
  extern void no_iommu_init(void);
+ extern struct dma_mapping_ops nommu_dma_ops;
  extern int force_iommu, no_iommu;
  extern int iommu_detected;
  
@@@ -39,4 -40,4 +40,4 @@@ static inline void gart_iommu_hole_init
  }
  #endif
  
 -#endif
 +#endif /* ASM_X86__IOMMU_H */
diff --combined include/asm-x86/kexec.h
index 262b63ec91126f8556cc035287e007cd14e26106,c0e52a14fd4dd981ee36ea66484f7f564b40bd04..17bde9552a8898dd0255d954f2fa08d23fb1b28c
@@@ -1,5 -1,5 +1,5 @@@
 -#ifndef _KEXEC_H
 -#define _KEXEC_H
 +#ifndef ASM_X86__KEXEC_H
 +#define ASM_X86__KEXEC_H
  
  #ifdef CONFIG_X86_32
  # define PA_CONTROL_PAGE      0
  # define VA_PTE_0             5
  # define PA_PTE_1             6
  # define VA_PTE_1             7
+ # define PA_SWAP_PAGE         8
  # ifdef CONFIG_X86_PAE
- #  define PA_PMD_0            8
- #  define VA_PMD_0            9
- #  define PA_PMD_1            10
- #  define VA_PMD_1            11
- #  define PAGES_NR            12
+ #  define PA_PMD_0            9
+ #  define VA_PMD_0            10
+ #  define PA_PMD_1            11
+ #  define VA_PMD_1            12
+ #  define PAGES_NR            13
  # else
- #  define PAGES_NR            8
+ #  define PAGES_NR            9
  # endif
  #else
  # define PA_CONTROL_PAGE      0
@@@ -152,11 -153,12 +153,12 @@@ static inline void crash_setup_regs(str
  }
  
  #ifdef CONFIG_X86_32
- asmlinkage NORET_TYPE void
+ asmlinkage unsigned long
  relocate_kernel(unsigned long indirection_page,
                unsigned long control_page,
                unsigned long start_address,
-               unsigned int has_pae) ATTRIB_NORET;
+               unsigned int has_pae,
+               unsigned int preserve_context);
  #else
  NORET_TYPE void
  relocate_kernel(unsigned long indirection_page,
  
  #endif /* __ASSEMBLY__ */
  
 -#endif /* _KEXEC_H */
 +#endif /* ASM_X86__KEXEC_H */
index 920823d53d6ee36eef04c15321ef5b5a7de3df9e,bc34dc21f178a0381441f49a580e788df7d8d2cd..95eb742765b3890c82a5aca369773523c9749815
@@@ -1,4 -1,4 +1,4 @@@
 -#/*
 +/*
   * Kernel-based Virtual Machine driver for Linux
   *
   * This header defines architecture specific interfaces, x86 version
@@@ -8,8 -8,8 +8,8 @@@
   *
   */
  
 -#ifndef ASM_KVM_HOST_H
 -#define ASM_KVM_HOST_H
 +#ifndef ASM_X86__KVM_HOST_H
 +#define ASM_X86__KVM_HOST_H
  
  #include <linux/types.h>
  #include <linux/mm.h>
@@@ -556,6 -556,7 +556,7 @@@ int kvm_fix_hypercall(struct kvm_vcpu *
  int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code);
  
  void kvm_enable_tdp(void);
+ void kvm_disable_tdp(void);
  
  int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3);
  int complete_pio(struct kvm_vcpu *vcpu);
@@@ -728,4 -729,4 +729,4 @@@ asmlinkage void kvm_handle_fault_on_reb
        KVM_EX_ENTRY " 666b, 667b \n\t" \
        ".popsection"
  
 -#endif
 +#endif /* ASM_X86__KVM_HOST_H */
index 3ca03f902e05d872b844341ce276baba33332a0a,04caa2f544df4dc8c1d7798498b39d7896db1eb9..70fcb2adbb715ae2d309ab377f04129f8f2d9b3f
@@@ -1,5 -1,5 +1,5 @@@
 -#ifndef _ASM_X86_PGTABLE_H
 -#define _ASM_X86_PGTABLE_H
 +#ifndef ASM_X86__PGTABLE_H
 +#define ASM_X86__PGTABLE_H
  
  #define FIRST_USER_ADDRESS    0
  
@@@ -18,6 -18,7 +18,7 @@@
  #define _PAGE_BIT_UNUSED2     10
  #define _PAGE_BIT_UNUSED3     11
  #define _PAGE_BIT_PAT_LARGE   12      /* On 2MB or 1GB pages */
+ #define _PAGE_BIT_SPECIAL     _PAGE_BIT_UNUSED1
  #define _PAGE_BIT_NX           63       /* No execute: only valid after cpuid check */
  
  #define _PAGE_PRESENT (_AT(pteval_t, 1) << _PAGE_BIT_PRESENT)
@@@ -34,6 -35,8 +35,8 @@@
  #define _PAGE_UNUSED3 (_AT(pteval_t, 1) << _PAGE_BIT_UNUSED3)
  #define _PAGE_PAT     (_AT(pteval_t, 1) << _PAGE_BIT_PAT)
  #define _PAGE_PAT_LARGE (_AT(pteval_t, 1) << _PAGE_BIT_PAT_LARGE)
+ #define _PAGE_SPECIAL (_AT(pteval_t, 1) << _PAGE_BIT_SPECIAL)
+ #define __HAVE_ARCH_PTE_SPECIAL
  
  #if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
  #define _PAGE_NX      (_AT(pteval_t, 1) << _PAGE_BIT_NX)
@@@ -54,7 -57,7 +57,7 @@@
  
  /* Set of bits not changed in pte_modify */
  #define _PAGE_CHG_MASK        (PTE_PFN_MASK | _PAGE_PCD | _PAGE_PWT |         \
-                        _PAGE_ACCESSED | _PAGE_DIRTY)
+                        _PAGE_SPECIAL | _PAGE_ACCESSED | _PAGE_DIRTY)
  
  #define _PAGE_CACHE_MASK      (_PAGE_PCD | _PAGE_PWT)
  #define _PAGE_CACHE_WB                (0)
@@@ -180,7 -183,7 +183,7 @@@ static inline int pte_exec(pte_t pte
  
  static inline int pte_special(pte_t pte)
  {
-       return 0;
+       return pte_val(pte) & _PAGE_SPECIAL;
  }
  
  static inline int pmd_large(pmd_t pte)
@@@ -246,7 -249,7 +249,7 @@@ static inline pte_t pte_clrglobal(pte_
  
  static inline pte_t pte_mkspecial(pte_t pte)
  {
-       return pte;
+       return __pte(pte_val(pte) | _PAGE_SPECIAL);
  }
  
  extern pteval_t __supported_pte_mask;
@@@ -518,4 -521,4 +521,4 @@@ static inline void clone_pgd_range(pgd_
  #include <asm-generic/pgtable.h>
  #endif        /* __ASSEMBLY__ */
  
 -#endif        /* _ASM_X86_PGTABLE_H */
 +#endif /* ASM_X86__PGTABLE_H */
index 9486c400a71d9917e70a34189323d32fd5cd51f8,2730b351afcf2422695ca176cf8a7edbee57b9cc..1e20adbcad4b0cff70243b4ed71c7182e2371c64
@@@ -1,5 -1,5 +1,5 @@@
 -#ifndef _ASM_SWIOTLB_H
 -#define _ASM_SWIOTLB_H 1
 +#ifndef ASM_X86__SWIOTLB_H
 +#define ASM_X86__SWIOTLB_H
  
  #include <asm/dma-mapping.h>
  
@@@ -35,7 -35,7 +35,7 @@@ extern int swiotlb_map_sg(struct devic
                          int nents, int direction);
  extern void swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg,
                             int nents, int direction);
- extern int swiotlb_dma_mapping_error(dma_addr_t dma_addr);
+ extern int swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr);
  extern void swiotlb_free_coherent(struct device *hwdev, size_t size,
                                  void *vaddr, dma_addr_t dma_handle);
  extern int swiotlb_dma_supported(struct device *hwdev, u64 mask);
@@@ -55,4 -55,4 +55,4 @@@ static inline void pci_swiotlb_init(voi
  
  static inline void dma_mark_clean(void *addr, size_t size) {}
  
 -#endif /* _ASM_SWIOTLB_H */
 +#endif /* ASM_X86__SWIOTLB_H */
index 1838f3959a5ef9f1a94ae851c1576ced6d5ed45e,5f702d1d52184424941d3238ee82597c9f05ce37..48ebc0ad40ec17b66b700812c5c4792662227a8f
@@@ -1,5 -1,5 +1,5 @@@
 -#ifndef _ASM_UACCES_H_
 -#define _ASM_UACCES_H_
 +#ifndef ASM_X86__UACCESS_H
 +#define ASM_X86__UACCESS_H
  /*
   * User space memory access functions
   */
@@@ -450,4 -450,5 +450,5 @@@ extern struct movsl_mask 
  # include "uaccess_64.h"
  #endif
  
 -#endif
 +#endif /* ASM_X86__UACCESS_H */
diff --combined kernel/irq/manage.c
index 7d73e008fc3b4634e28a4d3d905513acdf0f7ca0,152abfd3589f8fe77ea7e0e60a20b7812c7a1b0f..22d10d3189f8bdb30d6d999f1c3692b70f6f7328
@@@ -89,14 -89,7 +89,14 @@@ int irq_set_affinity(unsigned int irq, 
        set_balance_irq_affinity(irq, cpumask);
  
  #ifdef CONFIG_GENERIC_PENDING_IRQ
 -      set_pending_irq(irq, cpumask);
 +      if (desc->status & IRQ_MOVE_PCNTXT) {
 +              unsigned long flags;
 +
 +              spin_lock_irqsave(&desc->lock, flags);
 +              desc->chip->set_affinity(irq, cpumask);
 +              spin_unlock_irqrestore(&desc->lock, flags);
 +      } else
 +              set_pending_irq(irq, cpumask);
  #else
        desc->affinity = cpumask;
        desc->chip->set_affinity(irq, cpumask);
@@@ -184,8 -177,7 +184,7 @@@ static void __enable_irq(struct irq_des
  {
        switch (desc->depth) {
        case 0:
-               printk(KERN_WARNING "Unbalanced enable for IRQ %d\n", irq);
-               WARN_ON(1);
+               WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n", irq);
                break;
        case 1: {
                unsigned int status = desc->status & ~IRQ_DISABLED;