Commit 05c6ca85 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'x86-urgent-2022-06-19' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 fixes from Thomas Gleixner:

 - Make RESERVE_BRK() work again with older binutils. The recent
   'simplification' broke that.

 - Make early #VE handling increment RIP when successful.

 - Make the #VE code consistent vs. the RIP adjustments and add
   comments.

 - Handle load_unaligned_zeropad() across page boundaries correctly in
   #VE when the second page is shared.

* tag 'x86-urgent-2022-06-19' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/tdx: Handle load_unaligned_zeropad() page-cross to a shared page
  x86/tdx: Clarify RIP adjustments in #VE handler
  x86/tdx: Fix early #VE handling
  x86/mm: Fix RESERVE_BRK() for older binutils
parents 5d770f11 1e776965
This diff is collapsed.
...@@ -108,19 +108,16 @@ extern unsigned long _brk_end; ...@@ -108,19 +108,16 @@ extern unsigned long _brk_end;
void *extend_brk(size_t size, size_t align); void *extend_brk(size_t size, size_t align);
/* /*
* Reserve space in the brk section. The name must be unique within the file, * Reserve space in the .brk section, which is a block of memory from which the
* and somewhat descriptive. The size is in bytes. * caller is allowed to allocate very early (before even memblock is available)
* by calling extend_brk(). All allocated memory will be eventually converted
* to memblock. Any leftover unallocated memory will be freed.
* *
* The allocation is done using inline asm (rather than using a section * The size is in bytes.
* attribute on a normal variable) in order to allow the use of @nobits, so
* that it doesn't take up any space in the vmlinux file.
*/ */
#define RESERVE_BRK(name, size) \ #define RESERVE_BRK(name, size) \
asm(".pushsection .brk_reservation,\"aw\",@nobits\n\t" \ __section(".bss..brk") __aligned(1) __used \
".brk." #name ":\n\t" \ static char __brk_##name[size]
".skip " __stringify(size) "\n\t" \
".size .brk." #name ", " __stringify(size) "\n\t" \
".popsection\n\t")
extern void probe_roms(void); extern void probe_roms(void);
#ifdef __i386__ #ifdef __i386__
...@@ -133,12 +130,19 @@ asmlinkage void __init x86_64_start_reservations(char *real_mode_data); ...@@ -133,12 +130,19 @@ asmlinkage void __init x86_64_start_reservations(char *real_mode_data);
#endif /* __i386__ */ #endif /* __i386__ */
#endif /* _SETUP */ #endif /* _SETUP */
#else
#define RESERVE_BRK(name,sz) \ #else /* __ASSEMBLY */
.pushsection .brk_reservation,"aw",@nobits; \
.brk.name: \ .macro __RESERVE_BRK name, size
1: .skip sz; \ .pushsection .bss..brk, "aw"
.size .brk.name,.-1b; \ SYM_DATA_START(__brk_\name)
.skip \size
SYM_DATA_END(__brk_\name)
.popsection .popsection
.endm
#define RESERVE_BRK(name, size) __RESERVE_BRK name, size
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#endif /* _ASM_X86_SETUP_H */ #endif /* _ASM_X86_SETUP_H */
...@@ -67,11 +67,6 @@ RESERVE_BRK(dmi_alloc, 65536); ...@@ -67,11 +67,6 @@ RESERVE_BRK(dmi_alloc, 65536);
#endif #endif
/*
* Range of the BSS area. The size of the BSS area is determined
* at link time, with RESERVE_BRK() facility reserving additional
* chunks.
*/
unsigned long _brk_start = (unsigned long)__brk_base; unsigned long _brk_start = (unsigned long)__brk_base;
unsigned long _brk_end = (unsigned long)__brk_base; unsigned long _brk_end = (unsigned long)__brk_base;
......
...@@ -385,10 +385,10 @@ SECTIONS ...@@ -385,10 +385,10 @@ SECTIONS
__end_of_kernel_reserve = .; __end_of_kernel_reserve = .;
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
.brk : AT(ADDR(.brk) - LOAD_OFFSET) { .brk (NOLOAD) : AT(ADDR(.brk) - LOAD_OFFSET) {
__brk_base = .; __brk_base = .;
. += 64 * 1024; /* 64k alignment slop space */ . += 64 * 1024; /* 64k alignment slop space */
*(.brk_reservation) /* areas brk users have reserved */ *(.bss..brk) /* areas brk users have reserved */
__brk_limit = .; __brk_limit = .;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment