[PATCHv9 00/17] x86/tdx: Add kexec support
Kalra, Ashish
ashish.kalra at amd.com
Thu Apr 4 11:27:47 PDT 2024
Hi Kirill,
On 3/25/2024 5:38 AM, Kirill A. Shutemov wrote:
> The patchset adds bits and pieces to get kexec (and crashkernel) work on
> TDX guest.
>
> The last patch implements CPU offlining according to the approved ACPI
> spec change poposal[1]. It unlocks kexec with all CPUs visible in the target
> kernel. It requires BIOS-side enabling. If it missing we fallback to booting
> 2nd kernel with single CPU.
>
> Please review. I would be glad for any feedback.
>
> [1] https://lore.kernel.org/all/13356251.uLZWGnKmhe@kreacher
>
> v9:
> - Rebased;
> - Keep page tables that maps E820_TYPE_ACPI (Ashish);
> - Ack/Reviewed/Tested-bys from Sathya, Kai, Tao;
> - Minor printk() message adjustments;
> v8:
> - Rework serialization of around conversion memory back to private;
> - Print ACPI_MADT_TYPE_MULTIPROC_WAKEUP in acpi_table_print_madt_entry();
> - Drop debugfs interface to dump info on shared memory;
> - Adjust comments and commit messages;
> - Reviewed-bys by Baoquan, Dave and Thomas;
> v7:
> - Call enc_kexec_stop_conversion() and enc_kexec_unshare_mem() after shutting
> down IO-APIC, lapic and hpet. It meets AMD requirements.
> - Minor style changes;
> - Add Acked/Reviewed-bys;
> v6:
> - Rebased to v6.8-rc1;
> - Provide default noop callbacks from .enc_kexec_stop_conversion and
> .enc_kexec_unshare_mem;
> - Split off patch that introduces .enc_kexec_* callbacks;
> - asm_acpi_mp_play_dead(): program CR3 directly from RSI, no MOV to RAX
> required;
> - Restructure how smp_ops.stop_this_cpu() hooked up in crash_nmi_callback();
> - kvmclock patch got merged via KVM tree;
> v5:
> - Rename smp_ops.crash_play_dead to smp_ops.stop_this_cpu and use it in
> stop_this_cpu();
> - Split off enc_kexec_stop_conversion() from enc_kexec_unshare_mem();
> - Introduce kernel_ident_mapping_free();
> - Add explicit include for alternatives and stringify.
> - Add barrier() after setting conversion_allowed to false;
> - Mark cpu_hotplug_offline_disabled __ro_after_init;
> - Print error if failed to hand over CPU to BIOS;
> - Update comments and commit messages;
> v4:
> - Fix build for !KEXEC_CORE;
> - Cleaner ATLERNATIVE use;
> - Update commit messages and comments;
> - Add Reviewed-bys;
> v3:
> - Rework acpi_mp_crash_stop_other_cpus() to avoid invoking hotplug state
> machine;
> - Free page tables if reset vector setup failed;
> - Change asm_acpi_mp_play_dead() to pass reset vector and PGD as arguments;
> - Mark acpi_mp_* variables as static and __ro_after_init;
> - Use u32 for apicid;
> - Disable CPU offlining if reset vector setup failed;
> - Rename madt.S -> madt_playdead.S;
> - Mark tdx_kexec_unshare_mem() as static;
> - Rebase onto up-to-date tip/master;
> - Whitespace fixes;
> - Reorder patches;
> - Add Reviewed-bys;
> - Update comments and commit messages;
> v2:
> - Rework how unsharing hook ups into kexec codepath;
> - Rework kvmclock_disable() fix based on Sean's;
> - s/cpu_hotplug_not_supported()/cpu_hotplug_disable_offlining()/;
> - use play_dead_common() to implement acpi_mp_play_dead();
> - cond_resched() in tdx_shared_memory_show();
> - s/target kernel/second kernel/;
> - Update commit messages and comments;
>
> Kirill A. Shutemov (17):
> x86/acpi: Extract ACPI MADT wakeup code into a separate file
> x86/apic: Mark acpi_mp_wake_* variables as __ro_after_init
> cpu/hotplug: Add support for declaring CPU offlining not supported
> cpu/hotplug, x86/acpi: Disable CPU offlining for ACPI MADT wakeup
> x86/kexec: Keep CR4.MCE set during kexec for TDX guest
> x86/mm: Make x86_platform.guest.enc_status_change_*() return errno
> x86/mm: Return correct level from lookup_address() if pte is none
> x86/tdx: Account shared memory
> x86/mm: Adding callbacks to prepare encrypted memory for kexec
> x86/tdx: Convert shared memory back to private on kexec
> x86/mm: Make e820_end_ram_pfn() cover E820_TYPE_ACPI ranges
> x86/acpi: Rename fields in acpi_madt_multiproc_wakeup structure
> x86/acpi: Do not attempt to bring up secondary CPUs in kexec case
> x86/smp: Add smp_ops.stop_this_cpu() callback
> x86/mm: Introduce kernel_ident_mapping_free()
> x86/acpi: Add support for CPU offlining for ACPI MADT wakeup method
> ACPI: tables: Print MULTIPROC_WAKEUP when MADT is parsed
>
> arch/x86/Kconfig | 7 +
> arch/x86/coco/core.c | 1 -
> arch/x86/coco/tdx/tdx.c | 99 ++++++++-
> arch/x86/hyperv/ivm.c | 9 +-
> arch/x86/include/asm/acpi.h | 7 +
> arch/x86/include/asm/init.h | 3 +
> arch/x86/include/asm/pgtable.h | 5 +
> arch/x86/include/asm/pgtable_types.h | 1 +
> arch/x86/include/asm/set_memory.h | 3 +
> arch/x86/include/asm/smp.h | 1 +
> arch/x86/include/asm/x86_init.h | 6 +-
> arch/x86/kernel/acpi/Makefile | 11 +-
> arch/x86/kernel/acpi/boot.c | 86 +-------
> arch/x86/kernel/acpi/madt_playdead.S | 28 +++
> arch/x86/kernel/acpi/madt_wakeup.c | 292 +++++++++++++++++++++++++++
> arch/x86/kernel/crash.c | 6 +
> arch/x86/kernel/e820.c | 9 +-
> arch/x86/kernel/process.c | 7 +
> arch/x86/kernel/reboot.c | 18 ++
> arch/x86/kernel/relocate_kernel_64.S | 5 +
> arch/x86/kernel/x86_init.c | 8 +-
> arch/x86/mm/ident_map.c | 73 +++++++
> arch/x86/mm/mem_encrypt_amd.c | 8 +-
> arch/x86/mm/pat/set_memory.c | 59 ++++--
> drivers/acpi/tables.c | 14 ++
> include/acpi/actbl2.h | 19 +-
> include/linux/cc_platform.h | 10 -
> include/linux/cpu.h | 2 +
> kernel/cpu.c | 12 +-
> 29 files changed, 663 insertions(+), 146 deletions(-)
> create mode 100644 arch/x86/kernel/acpi/madt_playdead.S
> create mode 100644 arch/x86/kernel/acpi/madt_wakeup.c
The cover letter mention the inclusion of the following patch - Keep
page tables that maps E820_TYPE_ACPI (Ashish)
But i don't this patch included in your patch-set.
Thanks, Ashish
More information about the kexec
mailing list