Skip to content

Commit

Permalink
Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/l…
Browse files Browse the repository at this point in the history
…inux/kernel/git/tip/tip

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
  • Loading branch information
torvalds committed Mar 31, 2019
2 parents 590627f + f560bd1 commit 915ee0d
Show file tree
Hide file tree
Showing 8 changed files with 19 additions and 22 deletions.
8 changes: 6 additions & 2 deletions arch/x86/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions arch/x86/boot/compressed/misc.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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 */
5 changes: 3 additions & 2 deletions arch/x86/include/asm/cpufeature.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 5 additions & 1 deletion arch/x86/include/asm/realmode.h
Original file line number Diff line number Diff line change
Expand Up @@ -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__ */
Expand Down
3 changes: 0 additions & 3 deletions arch/x86/kernel/cpu/resctrl/monitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -501,11 +501,8 @@ void cqm_handle_limbo(struct work_struct *work)
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;

Expand Down
2 changes: 1 addition & 1 deletion arch/x86/mm/mmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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: */
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/platform/efi/quirks.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
11 changes: 1 addition & 10 deletions arch/x86/realmode/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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)
Expand Down

0 comments on commit 915ee0d

Please sign in to comment.