mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
x86/kexec: Use typedef for relocate_kernel_fn function prototype
Both i386 and x86_64 now copy the relocate_kernel() function into the control page and execute it from there, using an open-coded function pointer. Use a typedef for it instead. [ bp: Put relocate_kernel_ptr ptr arithmetic on a single line. ] Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Link: https://lore.kernel.org/r/20250109140757.2841269-10-dwmw2@infradead.org
This commit is contained in:
parent
e536057543
commit
7c61a3d8f7
3 changed files with 16 additions and 26 deletions
|
@ -111,21 +111,21 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
|
|||
}
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
asmlinkage unsigned long
|
||||
relocate_kernel(unsigned long indirection_page,
|
||||
unsigned long control_page,
|
||||
unsigned long start_address,
|
||||
unsigned int has_pae,
|
||||
unsigned int preserve_context);
|
||||
typedef asmlinkage unsigned long
|
||||
relocate_kernel_fn(unsigned long indirection_page,
|
||||
unsigned long control_page,
|
||||
unsigned long start_address,
|
||||
unsigned int has_pae,
|
||||
unsigned int preserve_context);
|
||||
#else
|
||||
unsigned long
|
||||
relocate_kernel(unsigned long indirection_page,
|
||||
unsigned long pa_control_page,
|
||||
unsigned long start_address,
|
||||
unsigned int preserve_context,
|
||||
unsigned int host_mem_enc_active);
|
||||
typedef unsigned long
|
||||
relocate_kernel_fn(unsigned long indirection_page,
|
||||
unsigned long pa_control_page,
|
||||
unsigned long start_address,
|
||||
unsigned int preserve_context,
|
||||
unsigned int host_mem_enc_active);
|
||||
#endif
|
||||
|
||||
extern relocate_kernel_fn relocate_kernel;
|
||||
#define ARCH_HAS_KIMAGE_ARCH
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
|
|
|
@ -160,15 +160,10 @@ void machine_kexec_cleanup(struct kimage *image)
|
|||
*/
|
||||
void machine_kexec(struct kimage *image)
|
||||
{
|
||||
relocate_kernel_fn *relocate_kernel_ptr;
|
||||
unsigned long page_list[PAGES_NR];
|
||||
void *control_page;
|
||||
int save_ftrace_enabled;
|
||||
asmlinkage unsigned long
|
||||
(*relocate_kernel_ptr)(unsigned long indirection_page,
|
||||
unsigned long control_page,
|
||||
unsigned long start_address,
|
||||
unsigned int has_pae,
|
||||
unsigned int preserve_context);
|
||||
|
||||
#ifdef CONFIG_KEXEC_JUMP
|
||||
if (image->preserve_context)
|
||||
|
|
|
@ -344,12 +344,8 @@ void machine_kexec_cleanup(struct kimage *image)
|
|||
*/
|
||||
void __nocfi machine_kexec(struct kimage *image)
|
||||
{
|
||||
unsigned long (*relocate_kernel_ptr)(unsigned long indirection_page,
|
||||
unsigned long pa_control_page,
|
||||
unsigned long start_address,
|
||||
unsigned int preserve_context,
|
||||
unsigned int host_mem_enc_active);
|
||||
unsigned long reloc_start = (unsigned long)__relocate_kernel_start;
|
||||
relocate_kernel_fn *relocate_kernel_ptr;
|
||||
unsigned int host_mem_enc_active;
|
||||
int save_ftrace_enabled;
|
||||
void *control_page;
|
||||
|
@ -391,8 +387,7 @@ void __nocfi machine_kexec(struct kimage *image)
|
|||
* Allow for the possibility that relocate_kernel might not be at
|
||||
* the very start of the page.
|
||||
*/
|
||||
relocate_kernel_ptr = control_page + (unsigned long)relocate_kernel -
|
||||
reloc_start;
|
||||
relocate_kernel_ptr = control_page + (unsigned long)relocate_kernel - reloc_start;
|
||||
|
||||
/*
|
||||
* The segment registers are funny things, they have both a
|
||||
|
|
Loading…
Add table
Reference in a new issue