Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 31 Mar 2019 15:40:15 +0000 (08:40 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 31 Mar 2019 15:40:15 +0000 (08:40 -0700)
Pull x86 fixes from Thomas Gleixner:
 "A pile of x86 updates:

   - Prevent exceeding he valid physical address space in the /dev/mem
     limit checks.

   - Move all header content inside the header guard to prevent compile
     failures.

   - Fix the bogus __percpu annotation in this_cpu_has() which makes
     sparse very noisy.

   - Disable switch jump tables completely when retpolines are enabled.

   - Prevent leaking the trampoline address"

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/realmode: Make set_real_mode_mem() static inline
  x86/cpufeature: Fix __percpu annotation in this_cpu_has()
  x86/mm: Don't exceed the valid physical address space
  x86/retpolines: Disable switch jump tables when retpolines are enabled
  x86/realmode: Don't leak the trampoline kernel address
  x86/boot: Fix incorrect ifdeffery scope
  x86/resctrl: Remove unused variable

arch/x86/Makefile
arch/x86/boot/compressed/misc.h
arch/x86/include/asm/cpufeature.h
arch/x86/include/asm/realmode.h
arch/x86/kernel/cpu/resctrl/monitor.c
arch/x86/mm/mmap.c
arch/x86/platform/efi/quirks.c
arch/x86/realmode/init.c

index 2d8b9d8ca4f8753291bb1487fb0b77d7b6009280..a587805c6687f6721ae8140da8144701c9abb49b 100644 (file)
@@ -219,8 +219,12 @@ ifdef CONFIG_RETPOLINE
   # Additionally, avoid generating expensive indirect jumps which
   # are subject to retpolines for small number of switch cases.
   # clang turns off jump table generation by default when under
-  # retpoline builds, however, gcc does not for x86.
-  KBUILD_CFLAGS += $(call cc-option,--param=case-values-threshold=20)
+  # retpoline builds, however, gcc does not for x86. This has
+  # only been fixed starting from gcc stable version 8.4.0 and
+  # onwards, but not for older ones. See gcc bug #86952.
+  ifndef CONFIG_CC_IS_CLANG
+    KBUILD_CFLAGS += $(call cc-option,-fno-jump-tables)
+  endif
 endif
 
 archscripts: scripts_basic
index fd13655e0f9b016baba58a3ed41832284d866fe3..d2f184165934c95a403faf489ec3b652850e74ff 100644 (file)
@@ -120,8 +120,6 @@ static inline void console_init(void)
 
 void set_sev_encryption_mask(void);
 
-#endif
-
 /* acpi.c */
 #ifdef CONFIG_ACPI
 acpi_physical_address get_rsdp_addr(void);
@@ -135,3 +133,5 @@ int count_immovable_mem_regions(void);
 #else
 static inline int count_immovable_mem_regions(void) { return 0; }
 #endif
+
+#endif /* BOOT_COMPRESSED_MISC_H */
index ce95b8cbd2296b1e33de2e0f520a00f3981e3f23..0e56ff7e484857a1fdd8673fdfa2e0b784e23cea 100644 (file)
@@ -112,8 +112,9 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
         test_cpu_cap(c, bit))
 
 #define this_cpu_has(bit)                                              \
-       (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 :  \
-        x86_this_cpu_test_bit(bit, (unsigned long *)&cpu_info.x86_capability))
+       (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 :  \
+        x86_this_cpu_test_bit(bit,                                     \
+               (unsigned long __percpu *)&cpu_info.x86_capability))
 
 /*
  * This macro is for detection of features which need kernel
index 63b3393bd98ea2caaa67aefeeab359cbac72dc51..c53682303c9c1252a79d90cf8dd19a96d126db93 100644 (file)
@@ -77,7 +77,11 @@ static inline size_t real_mode_size_needed(void)
        return ALIGN(real_mode_blob_end - real_mode_blob, PAGE_SIZE);
 }
 
-void set_real_mode_mem(phys_addr_t mem, size_t size);
+static inline void set_real_mode_mem(phys_addr_t mem)
+{
+       real_mode_header = (struct real_mode_header *) __va(mem);
+}
+
 void reserve_real_mode(void);
 
 #endif /* __ASSEMBLY__ */
index f33f11f69078e7f4497e48ae771466b74a4405a2..1573a0a6b52530f1759429bbee15476e29e31126 100644 (file)
@@ -501,11 +501,8 @@ out_unlock:
 void cqm_setup_limbo_handler(struct rdt_domain *dom, unsigned long delay_ms)
 {
        unsigned long delay = msecs_to_jiffies(delay_ms);
-       struct rdt_resource *r;
        int cpu;
 
-       r = &rdt_resources_all[RDT_RESOURCE_L3];
-
        cpu = cpumask_any(&dom->cpu_mask);
        dom->cqm_work_cpu = cpu;
 
index db316571452145f50832ba56ff7fb49214d4ae02..dc726e07d8ba84a6ac790c8b0929e9235e25c2fc 100644 (file)
@@ -230,7 +230,7 @@ bool mmap_address_hint_valid(unsigned long addr, unsigned long len)
 /* Can we access it for direct reading/writing? Must be RAM: */
 int valid_phys_addr_range(phys_addr_t addr, size_t count)
 {
-       return addr + count <= __pa(high_memory);
+       return addr + count - 1 <= __pa(high_memory - 1);
 }
 
 /* Can we access it through mmap? Must be a valid physical address: */
index 458a0e2bcc57ca42a10964c5b62bc8bd11ca96ea..a25a9fd987a9e5dc2ba75d7b3c91c098ad7d7034 100644 (file)
@@ -449,7 +449,7 @@ void __init efi_free_boot_services(void)
                 */
                rm_size = real_mode_size_needed();
                if (rm_size && (start + rm_size) < (1<<20) && size >= rm_size) {
-                       set_real_mode_mem(start, rm_size);
+                       set_real_mode_mem(start);
                        start += rm_size;
                        size -= rm_size;
                }
index d10105825d57a7faee5f3221d04f0e77b9807e45..7dce39c8c034a8a9f2481aff02590a793ff86498 100644 (file)
@@ -15,15 +15,6 @@ u32 *trampoline_cr4_features;
 /* Hold the pgd entry used on booting additional CPUs */
 pgd_t trampoline_pgd_entry;
 
-void __init set_real_mode_mem(phys_addr_t mem, size_t size)
-{
-       void *base = __va(mem);
-
-       real_mode_header = (struct real_mode_header *) base;
-       printk(KERN_DEBUG "Base memory trampoline at [%p] %llx size %zu\n",
-              base, (unsigned long long)mem, size);
-}
-
 void __init reserve_real_mode(void)
 {
        phys_addr_t mem;
@@ -42,7 +33,7 @@ void __init reserve_real_mode(void)
        }
 
        memblock_reserve(mem, size);
-       set_real_mode_mem(mem, size);
+       set_real_mode_mem(mem);
 }
 
 static void __init setup_real_mode(void)