mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 21:51:40 +00:00
Changes in this cycle:
- Robustify/fix calling startup_{32,64}() from the decompressor code, and removing x86 quirk from scripts/head-object-list.txt as a result. - Do not register processors that cannot be onlined for x2APIC Signed-off-by: Ingo Molnar <mingo@kernel.org> -----BEGIN PGP SIGNATURE----- iQJFBAABCgAvFiEEBpT5eoXrXCwVQwEKEnMQ0APhK1gFAmPzcNsRHG1pbmdvQGtl cm5lbC5vcmcACgkQEnMQ0APhK1gFjhAAqxnVl1X413IK9sd4C56wWdoLlRo9uGvO HtAYK1SRzibTOrFn+ByBhugYzYPyxIx634rM6hyp4nkVEnbgCXQ+Qc1xOwjyW8fh gxR3FCxsQiqajg7/1DOOSoMc/rc3adU73RHCWTjcHV/Zo7KEtvVa6AFvMTd1xzt9 eMPqi7wsPflbdUV9wvf6cKkFPe3Nm3P1hOlUDHGmYZkDw30N8UlZmxvegwrBFDdV SpiJ0ZLV90NGJ6k6O3XSd4pVDxMn9DlYd0v/0r+YAT56hiRhefSKR2/jQntutZqp YlyZYjvwUjwEgOdUWPPRbndWWEfFsE2XQQclr4L+ZLQ/Gm8jTsT2b/IvXBmF4FzV 0kzjNdhkPObx3X6UQZ47r6J3x8SWA9qZ6JH+uqCd6w/UW1KIiMBZ2kuIXvJn6eSr xFLabjPPeOeRXFpiQJjIZ31m7i3JlQbIsfb8IIxI1D55nEkNywjk9VqlLEVw23qD p93l0+ehpnZ2YCjV0kts/EXMikSmVZorA5wkTzEmG5ER+2BuIDin+wuGPawXrKew QCa2X7GoVmxf81Rcz7f/E+JnYcSTQ6AQzFkOxe3zb97bnRsckM/87buC0GktcPjW C8iy3yZzEIhRj2ilKEZLl7jIK59B4jReUKJx+vsxk2k2p5fuRdMkMtPfIZDBwVHQ PzRZGSDY4FI= =p3z1 -----END PGP SIGNATURE----- Merge tag 'x86-boot-2023-02-20' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull x86 boot updates from Ingo Molnar: - Robustify/fix calling startup_{32,64}() from the decompressor code, and removing x86 quirk from scripts/head-object-list.txt as a result. - Do not register processors that cannot be onlined for x2APIC * tag 'x86-boot-2023-02-20' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/acpi/boot: Do not register processors that cannot be onlined for x2APIC scripts/head-object-list: Remove x86 from the list x86/boot: Robustify calling startup_{32,64}() from the decompressor code
This commit is contained in:
commit
35011c67c8
@ -187,7 +187,7 @@ SYM_FUNC_START_LOCAL_NOALIGN(.Lrelocated)
|
||||
leal boot_heap@GOTOFF(%ebx), %eax
|
||||
pushl %eax /* heap area */
|
||||
pushl %esi /* real mode pointer */
|
||||
call extract_kernel /* returns kernel location in %eax */
|
||||
call extract_kernel /* returns kernel entry point in %eax */
|
||||
addl $24, %esp
|
||||
|
||||
/*
|
||||
|
@ -569,7 +569,7 @@ SYM_FUNC_START_LOCAL_NOALIGN(.Lrelocated)
|
||||
movl input_len(%rip), %ecx /* input_len */
|
||||
movq %rbp, %r8 /* output target address */
|
||||
movl output_len(%rip), %r9d /* decompressed length, end of relocs */
|
||||
call extract_kernel /* returns kernel location in %rax */
|
||||
call extract_kernel /* returns kernel entry point in %rax */
|
||||
popq %rsi
|
||||
|
||||
/*
|
||||
|
@ -277,7 +277,7 @@ static inline void handle_relocations(void *output, unsigned long output_len,
|
||||
{ }
|
||||
#endif
|
||||
|
||||
static void parse_elf(void *output)
|
||||
static size_t parse_elf(void *output)
|
||||
{
|
||||
#ifdef CONFIG_X86_64
|
||||
Elf64_Ehdr ehdr;
|
||||
@ -293,10 +293,8 @@ static void parse_elf(void *output)
|
||||
if (ehdr.e_ident[EI_MAG0] != ELFMAG0 ||
|
||||
ehdr.e_ident[EI_MAG1] != ELFMAG1 ||
|
||||
ehdr.e_ident[EI_MAG2] != ELFMAG2 ||
|
||||
ehdr.e_ident[EI_MAG3] != ELFMAG3) {
|
||||
ehdr.e_ident[EI_MAG3] != ELFMAG3)
|
||||
error("Kernel is not a valid ELF file");
|
||||
return;
|
||||
}
|
||||
|
||||
debug_putstr("Parsing ELF... ");
|
||||
|
||||
@ -328,6 +326,8 @@ static void parse_elf(void *output)
|
||||
}
|
||||
|
||||
free(phdrs);
|
||||
|
||||
return ehdr.e_entry - LOAD_PHYSICAL_ADDR;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -356,6 +356,7 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap,
|
||||
const unsigned long kernel_total_size = VO__end - VO__text;
|
||||
unsigned long virt_addr = LOAD_PHYSICAL_ADDR;
|
||||
unsigned long needed_size;
|
||||
size_t entry_offset;
|
||||
|
||||
/* Retain x86 boot parameters pointer passed from startup_32/64. */
|
||||
boot_params = rmode;
|
||||
@ -456,14 +457,17 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap,
|
||||
debug_putstr("\nDecompressing Linux... ");
|
||||
__decompress(input_data, input_len, NULL, NULL, output, output_len,
|
||||
NULL, error);
|
||||
parse_elf(output);
|
||||
entry_offset = parse_elf(output);
|
||||
handle_relocations(output, output_len, virt_addr);
|
||||
debug_putstr("done.\nBooting the kernel.\n");
|
||||
|
||||
debug_putstr("done.\nBooting the kernel (entry_offset: 0x");
|
||||
debug_puthex(entry_offset);
|
||||
debug_putstr(").\n");
|
||||
|
||||
/* Disable exception handling before booting the kernel */
|
||||
cleanup_exception_handling();
|
||||
|
||||
return output;
|
||||
return output + entry_offset;
|
||||
}
|
||||
|
||||
void fortify_panic(const char *name)
|
||||
|
@ -188,6 +188,17 @@ static int acpi_register_lapic(int id, u32 acpiid, u8 enabled)
|
||||
return cpu;
|
||||
}
|
||||
|
||||
static bool __init acpi_is_processor_usable(u32 lapic_flags)
|
||||
{
|
||||
if (lapic_flags & ACPI_MADT_ENABLED)
|
||||
return true;
|
||||
|
||||
if (acpi_support_online_capable && (lapic_flags & ACPI_MADT_ONLINE_CAPABLE))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int __init
|
||||
acpi_parse_x2apic(union acpi_subtable_headers *header, const unsigned long end)
|
||||
{
|
||||
@ -212,6 +223,10 @@ acpi_parse_x2apic(union acpi_subtable_headers *header, const unsigned long end)
|
||||
if (apic_id == 0xffffffff)
|
||||
return 0;
|
||||
|
||||
/* don't register processors that cannot be onlined */
|
||||
if (!acpi_is_processor_usable(processor->lapic_flags))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* We need to register disabled CPU as well to permit
|
||||
* counting disabled CPUs. This allows us to size
|
||||
@ -250,9 +265,7 @@ acpi_parse_lapic(union acpi_subtable_headers * header, const unsigned long end)
|
||||
return 0;
|
||||
|
||||
/* don't register processors that can not be onlined */
|
||||
if (acpi_support_online_capable &&
|
||||
!(processor->lapic_flags & ACPI_MADT_ENABLED) &&
|
||||
!(processor->lapic_flags & ACPI_MADT_ONLINE_CAPABLE))
|
||||
if (!acpi_is_processor_usable(processor->lapic_flags))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
|
@ -42,10 +42,4 @@ arch/s390/kernel/head64.o
|
||||
arch/sh/kernel/head_32.o
|
||||
arch/sparc/kernel/head_32.o
|
||||
arch/sparc/kernel/head_64.o
|
||||
arch/x86/kernel/head_32.o
|
||||
arch/x86/kernel/head_64.o
|
||||
arch/x86/kernel/head32.o
|
||||
arch/x86/kernel/head64.o
|
||||
arch/x86/kernel/ebda.o
|
||||
arch/x86/kernel/platform-quirks.o
|
||||
arch/xtensa/kernel/head.o
|
||||
|
Loading…
Reference in New Issue
Block a user