Merge branch 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 20 Feb 2013 03:09:42 +0000 (19:09 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 20 Feb 2013 03:09:42 +0000 (19:09 -0800)
Pull x86/asm changes from Ingo Molnar:
 "The biggest change (by line count) is the unification of the XOR code
  and then the introduction of an additional SSE based XOR assembly
  method.

  The other bigger change is the head_32.S rework/cleanup by Borislav
  Petkov.

  Last but not least there's the usual laundry list of small but
  dangerous (and hopefully perfectly tested) changes to subtle low level
  x86 code, plus cleanups."

* 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86, head_32: Give the 6 label a real name
  x86, head_32: Remove second CPUID detection from default_entry
  x86: Detect CPUID support early at boot
  x86, head_32: Remove i386 pieces
  x86: Require MOVBE feature in cpuid when we use it
  x86: Enable ARCH_USE_BUILTIN_BSWAP
  x86/xor: Add alternative SSE implementation only prefetching once per 64-byte line
  x86/xor: Unify SSE-base xor-block routines
  x86: Fix a typo
  x86/mm: Fix the argument passed to sync_global_pgds()
  x86/mm: Convert update_mmu_cache() and update_mmu_cache_pmd() to functions
  ix86: Tighten asmlinkage_protect() constraints

1  2 
arch/x86/Kconfig
arch/x86/include/asm/pgtable.h
arch/x86/mm/init_64.c

diff --combined arch/x86/Kconfig
@@@ -28,6 -28,7 +28,6 @@@ config X8
        select HAVE_OPROFILE
        select HAVE_PCSPKR_PLATFORM
        select HAVE_PERF_EVENTS
 -      select HAVE_IRQ_WORK
        select HAVE_IOREMAP_PROT
        select HAVE_KPROBES
        select HAVE_MEMBLOCK
        select HAVE_DMA_CONTIGUOUS if !SWIOTLB
        select HAVE_KRETPROBES
        select HAVE_OPTPROBES
 +      select HAVE_KPROBES_ON_FTRACE
        select HAVE_FTRACE_MCOUNT_RECORD
        select HAVE_FENTRY if X86_64
        select HAVE_C_RECORDMCOUNT
        select HAVE_DYNAMIC_FTRACE
 +      select HAVE_DYNAMIC_FTRACE_WITH_REGS
        select HAVE_FUNCTION_TRACER
        select HAVE_FUNCTION_GRAPH_TRACER
        select HAVE_FUNCTION_GRAPH_FP_TEST
        select GENERIC_CLOCKEVENTS_BROADCAST if X86_64 || (X86_32 && X86_LOCAL_APIC)
        select GENERIC_TIME_VSYSCALL if X86_64
        select KTIME_SCALAR if X86_32
 +      select ALWAYS_USE_PERSISTENT_CLOCK
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
        select HAVE_CONTEXT_TRACKING if X86_64
        select MODULES_USE_ELF_RELA if X86_64
        select CLONE_BACKWARDS if X86_32
        select GENERIC_SIGALTSTACK
+       select ARCH_USE_BUILTIN_BSWAP
  
  config INSTRUCTION_DECODER
        def_bool y
@@@ -142,11 -142,6 +142,11 @@@ static inline unsigned long pmd_pfn(pmd
        return (pmd_val(pmd) & PTE_PFN_MASK) >> PAGE_SHIFT;
  }
  
 +static inline unsigned long pud_pfn(pud_t pud)
 +{
 +      return (pud_val(pud) & PTE_PFN_MASK) >> PAGE_SHIFT;
 +}
 +
  #define pte_page(pte) pfn_to_page(pte_pfn(pte))
  
  static inline int pmd_large(pmd_t pte)
@@@ -786,6 -781,18 +786,18 @@@ static inline void clone_pgd_range(pgd_
         memcpy(dst, src, count * sizeof(pgd_t));
  }
  
+ /*
+  * The x86 doesn't have any external MMU info: the kernel page
+  * tables contain all the necessary information.
+  */
+ static inline void update_mmu_cache(struct vm_area_struct *vma,
+               unsigned long addr, pte_t *ptep)
+ {
+ }
+ static inline void update_mmu_cache_pmd(struct vm_area_struct *vma,
+               unsigned long addr, pmd_t *pmd)
+ {
+ }
  
  #include <asm-generic/pgtable.h>
  #endif        /* __ASSEMBLY__ */
diff --combined arch/x86/mm/init_64.c
@@@ -605,7 -605,7 +605,7 @@@ kernel_physical_mapping_init(unsigned l
        }
  
        if (pgd_changed)
-               sync_global_pgds(addr, end);
+               sync_global_pgds(addr, end - 1);
  
        __flush_tlb_all();
  
@@@ -831,9 -831,6 +831,9 @@@ int kern_addr_valid(unsigned long addr
        if (pud_none(*pud))
                return 0;
  
 +      if (pud_large(*pud))
 +              return pfn_valid(pud_pfn(*pud));
 +
        pmd = pmd_offset(pud, addr);
        if (pmd_none(*pmd))
                return 0;
@@@ -984,7 -981,7 +984,7 @@@ vmemmap_populate(struct page *start_pag
                }
  
        }
-       sync_global_pgds((unsigned long)start_page, end);
+       sync_global_pgds((unsigned long)start_page, end - 1);
        return 0;
  }