]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'x86/cpu' into x86/mm, before applying dependent patch
authorIngo Molnar <mingo@kernel.org>
Thu, 30 Mar 2017 07:07:54 +0000 (09:07 +0200)
committerIngo Molnar <mingo@kernel.org>
Thu, 30 Mar 2017 07:07:54 +0000 (09:07 +0200)
Signed-off-by: Ingo Molnar <mingo@kernel.org>
1  2 
arch/x86/include/asm/processor.h
arch/x86/kernel/setup.c
arch/x86/mm/init_32.c
arch/x86/xen/enlighten.c

index 05319c60b3db3d97ebfd44d19e0adee903fb5273,4aa93b560a2b2075c94f338438469dc773f92330..3cada998a402a7893ffd2fc709916f4fcbc3f970
@@@ -80,7 -80,7 +80,7 @@@ extern u16 __read_mostly tlb_lld_1g[NR_
  
  /*
   *  CPU type and hardware bug flags. Kept separately for each CPU.
-  *  Members of this structure are referenced in head.S, so think twice
+  *  Members of this structure are referenced in head_32.S, so think twice
   *  before touching them. [mj]
   */
  
@@@ -89,14 -89,7 +89,7 @@@ struct cpuinfo_x86 
        __u8                    x86_vendor;     /* CPU vendor */
        __u8                    x86_model;
        __u8                    x86_mask;
- #ifdef CONFIG_X86_32
-       char                    wp_works_ok;    /* It doesn't on 386's */
-       /* Problems on some 486Dx4's and old 386's: */
-       char                    rfu;
-       char                    pad0;
-       char                    pad1;
- #else
+ #ifdef CONFIG_X86_64
        /* Number of 4K pages in DTLB/ITLB combined(in pages): */
        int                     x86_tlbsize;
  #endif
@@@ -716,8 -709,6 +709,8 @@@ extern struct desc_ptr             early_gdt_descr
  
  extern void cpu_set_gdt(int);
  extern void switch_to_new_gdt(int);
 +extern void load_direct_gdt(int);
 +extern void load_fixmap_gdt(int);
  extern void load_percpu_segment(int);
  extern void cpu_init(void);
  
@@@ -799,7 -790,6 +792,7 @@@ static inline void spin_lock_prefetch(c
  /*
   * User space process size: 3GB (default).
   */
 +#define IA32_PAGE_OFFSET      PAGE_OFFSET
  #define TASK_SIZE             PAGE_OFFSET
  #define TASK_SIZE_MAX         TASK_SIZE
  #define STACK_TOP             TASK_SIZE
@@@ -876,8 -866,7 +869,8 @@@ extern void start_thread(struct pt_reg
   * This decides where the kernel will search for a free chunk of vm
   * space during mmap's.
   */
 -#define TASK_UNMAPPED_BASE    (PAGE_ALIGN(TASK_SIZE / 3))
 +#define __TASK_UNMAPPED_BASE(task_size)       (PAGE_ALIGN(task_size / 3))
 +#define TASK_UNMAPPED_BASE            __TASK_UNMAPPED_BASE(TASK_SIZE)
  
  #define KSTK_EIP(task)                (task_pt_regs(task)->ip)
  
  extern int get_tsc_mode(unsigned long adr);
  extern int set_tsc_mode(unsigned int val);
  
 +DECLARE_PER_CPU(u64, msr_misc_features_shadow);
 +
  /* Register/unregister a process' MPX related resource */
  #define MPX_ENABLE_MANAGEMENT()       mpx_enable_management()
  #define MPX_DISABLE_MANAGEMENT()      mpx_disable_management()
diff --combined arch/x86/kernel/setup.c
index 56b1177155db0c9bce4ec444464d677341ba83fc,7cd7bbefd418da5ffa7534a6697f70e08abfcc29..1302c47c5ce11efb71f881b376dbbcee75232009
@@@ -173,14 -173,11 +173,11 @@@ static struct resource bss_resource = 
  
  
  #ifdef CONFIG_X86_32
- /* cpu data as detected by the assembly code in head.S */
- struct cpuinfo_x86 new_cpu_data = {
-       .wp_works_ok = -1,
- };
+ /* cpu data as detected by the assembly code in head_32.S */
+ struct cpuinfo_x86 new_cpu_data;
  /* common cpu data for all cpus */
- struct cpuinfo_x86 boot_cpu_data __read_mostly = {
-       .wp_works_ok = -1,
- };
+ struct cpuinfo_x86 boot_cpu_data __read_mostly;
  EXPORT_SYMBOL(boot_cpu_data);
  
  unsigned int def_to_bigsmp;
@@@ -1226,6 -1223,21 +1223,6 @@@ void __init setup_arch(char **cmdline_p
  
        kasan_init();
  
 -#ifdef CONFIG_X86_32
 -      /* sync back kernel address range */
 -      clone_pgd_range(initial_page_table + KERNEL_PGD_BOUNDARY,
 -                      swapper_pg_dir     + KERNEL_PGD_BOUNDARY,
 -                      KERNEL_PGD_PTRS);
 -
 -      /*
 -       * sync back low identity map too.  It is used for example
 -       * in the 32-bit EFI stub.
 -       */
 -      clone_pgd_range(initial_page_table,
 -                      swapper_pg_dir     + KERNEL_PGD_BOUNDARY,
 -                      min(KERNEL_PGD_PTRS, KERNEL_PGD_BOUNDARY));
 -#endif
 -
        tboot_probe();
  
        map_vsyscall();
diff --combined arch/x86/mm/init_32.c
index 5ed3c141bbd5cf43dc1725f24ad1560622621ea2,4dddfaf6569a87a67680c0da377d07be0735f5a7..7116a727fd5ad298ecfc02a6609cbe63c8f0d2c3
@@@ -67,7 -67,6 +67,7 @@@ bool __read_mostly __vmalloc_start_set 
   */
  static pmd_t * __init one_md_table_init(pgd_t *pgd)
  {
 +      p4d_t *p4d;
        pud_t *pud;
        pmd_t *pmd_table;
  
                pmd_table = (pmd_t *)alloc_low_page();
                paravirt_alloc_pmd(&init_mm, __pa(pmd_table) >> PAGE_SHIFT);
                set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT));
 -              pud = pud_offset(pgd, 0);
 +              p4d = p4d_offset(pgd, 0);
 +              pud = pud_offset(p4d, 0);
                BUG_ON(pmd_table != pmd_offset(pud, 0));
  
                return pmd_table;
        }
  #endif
 -      pud = pud_offset(pgd, 0);
 +      p4d = p4d_offset(pgd, 0);
 +      pud = pud_offset(p4d, 0);
        pmd_table = pmd_offset(pud, 0);
  
        return pmd_table;
@@@ -393,11 -390,8 +393,11 @@@ pte_t *kmap_pte
  
  static inline pte_t *kmap_get_fixmap_pte(unsigned long vaddr)
  {
 -      return pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr),
 -                      vaddr), vaddr), vaddr);
 +      pgd_t *pgd = pgd_offset_k(vaddr);
 +      p4d_t *p4d = p4d_offset(pgd, vaddr);
 +      pud_t *pud = pud_offset(p4d, vaddr);
 +      pmd_t *pmd = pmd_offset(pud, vaddr);
 +      return pte_offset_kernel(pmd, vaddr);
  }
  
  static void __init kmap_init(void)
@@@ -416,7 -410,6 +416,7 @@@ static void __init permanent_kmaps_init
  {
        unsigned long vaddr;
        pgd_t *pgd;
 +      p4d_t *p4d;
        pud_t *pud;
        pmd_t *pmd;
        pte_t *pte;
        page_table_range_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base);
  
        pgd = swapper_pg_dir + pgd_index(vaddr);
 -      pud = pud_offset(pgd, vaddr);
 +      p4d = p4d_offset(pgd, vaddr);
 +      pud = pud_offset(p4d, vaddr);
        pmd = pmd_offset(pud, vaddr);
        pte = pte_offset_kernel(pmd, vaddr);
        pkmap_page_table = pte;
@@@ -458,7 -450,6 +458,7 @@@ void __init native_pagetable_init(void
  {
        unsigned long pfn, va;
        pgd_t *pgd, *base = swapper_pg_dir;
 +      p4d_t *p4d;
        pud_t *pud;
        pmd_t *pmd;
        pte_t *pte;
                if (!pgd_present(*pgd))
                        break;
  
 -              pud = pud_offset(pgd, va);
 +              p4d = p4d_offset(pgd, va);
 +              pud = pud_offset(p4d, va);
                pmd = pmd_offset(pud, va);
                if (!pmd_present(*pmd))
                        break;
@@@ -726,15 -716,17 +726,17 @@@ void __init paging_init(void
   */
  static void __init test_wp_bit(void)
  {
+       int wp_works_ok;
        printk(KERN_INFO
    "Checking if this processor honours the WP bit even in supervisor mode...");
  
        /* Any page-aligned address will do, the test is non-destructive */
        __set_fixmap(FIX_WP_TEST, __pa(&swapper_pg_dir), PAGE_KERNEL_RO);
-       boot_cpu_data.wp_works_ok = do_test_wp_bit();
+       wp_works_ok = do_test_wp_bit();
        clear_fixmap(FIX_WP_TEST);
  
-       if (!boot_cpu_data.wp_works_ok) {
+       if (!wp_works_ok) {
                printk(KERN_CONT "No.\n");
                panic("Linux doesn't support CPUs with broken WP.");
        } else {
@@@ -821,8 -813,7 +823,7 @@@ void __init mem_init(void
        BUG_ON(VMALLOC_START                            >= VMALLOC_END);
        BUG_ON((unsigned long)high_memory               > VMALLOC_START);
  
-       if (boot_cpu_data.wp_works_ok < 0)
-               test_wp_bit();
+       test_wp_bit();
  }
  
  #ifdef CONFIG_MEMORY_HOTPLUG
diff --combined arch/x86/xen/enlighten.c
index 4951fcf95143cf5c3fee1c4f27e3b46b37bd50a3,bc3dab5d47ca408721094b570a52570cfa3dba0d..6efa0cc425a22f405fd86ff98e10164a8be51050
@@@ -710,7 -710,7 +710,7 @@@ static void load_TLS_descriptor(struct 
  
        *shadow = t->tls_array[i];
  
 -      gdt = get_cpu_gdt_table(cpu);
 +      gdt = get_cpu_gdt_rw(cpu);
        maddr = arbitrary_virt_to_machine(&gdt[GDT_ENTRY_TLS_MIN+i]);
        mc = __xen_mc_entry(0);
  
@@@ -1595,7 -1595,6 +1595,6 @@@ asmlinkage __visible void __init xen_st
        /* set up basic CPUID stuff */
        cpu_detect(&new_cpu_data);
        set_cpu_cap(&new_cpu_data, X86_FEATURE_FPU);
-       new_cpu_data.wp_works_ok = 1;
        new_cpu_data.x86_capability[CPUID_1_EDX] = cpuid_edx(1);
  #endif