mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
x86/xen: fix memblock_reserve() usage on PVH
The current usage of memblock_reserve() in init_pvh_bootparams() is done before the .bss is zeroed, and that used to be fine when memblock_reserved_init_regions implicitly ended up in the .meminit.data section. However after commit73db3abdca
memblock_reserved_init_regions ends up in the .bss section, thus breaking it's usage before the .bss is cleared. Move and rename the call to xen_reserve_extra_memory() so it's done in the x86_init.oem.arch_setup hook, which gets executed after the .bss has been zeroed, but before calling e820__memory_setup(). Fixes:73db3abdca
("init/modpost: conditionally check section mismatch to __meminit*") Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Juergen Gross <jgross@suse.com> Message-ID: <20240725073116.14626-3-roger.pau@citrix.com> Signed-off-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
parent
fc05ea89c9
commit
4c00673489
3 changed files with 12 additions and 11 deletions
|
@ -62,11 +62,6 @@ void xen_arch_unregister_cpu(int num);
|
||||||
#ifdef CONFIG_PVH
|
#ifdef CONFIG_PVH
|
||||||
void __init xen_pvh_init(struct boot_params *boot_params);
|
void __init xen_pvh_init(struct boot_params *boot_params);
|
||||||
void __init mem_map_via_hcall(struct boot_params *boot_params_p);
|
void __init mem_map_via_hcall(struct boot_params *boot_params_p);
|
||||||
#ifdef CONFIG_XEN_PVH
|
|
||||||
void __init xen_reserve_extra_memory(struct boot_params *bootp);
|
|
||||||
#else
|
|
||||||
static inline void xen_reserve_extra_memory(struct boot_params *bootp) { }
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Lazy mode for batching updates / context switch */
|
/* Lazy mode for batching updates / context switch */
|
||||||
|
|
|
@ -75,9 +75,6 @@ static void __init init_pvh_bootparams(bool xen_guest)
|
||||||
} else
|
} else
|
||||||
xen_raw_printk("Warning: Can fit ISA range into e820\n");
|
xen_raw_printk("Warning: Can fit ISA range into e820\n");
|
||||||
|
|
||||||
if (xen_guest)
|
|
||||||
xen_reserve_extra_memory(&pvh_bootparams);
|
|
||||||
|
|
||||||
pvh_bootparams.hdr.cmd_line_ptr =
|
pvh_bootparams.hdr.cmd_line_ptr =
|
||||||
pvh_start_info.cmdline_paddr;
|
pvh_start_info.cmdline_paddr;
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <asm/io_apic.h>
|
#include <asm/io_apic.h>
|
||||||
#include <asm/hypervisor.h>
|
#include <asm/hypervisor.h>
|
||||||
#include <asm/e820/api.h>
|
#include <asm/e820/api.h>
|
||||||
|
#include <asm/setup.h>
|
||||||
|
|
||||||
#include <xen/xen.h>
|
#include <xen/xen.h>
|
||||||
#include <asm/xen/interface.h>
|
#include <asm/xen/interface.h>
|
||||||
|
@ -41,8 +42,9 @@ EXPORT_SYMBOL_GPL(xen_pvh);
|
||||||
* hypervisor should notify us which memory ranges are suitable for creating
|
* hypervisor should notify us which memory ranges are suitable for creating
|
||||||
* foreign mappings, but that's not yet implemented.
|
* foreign mappings, but that's not yet implemented.
|
||||||
*/
|
*/
|
||||||
void __init xen_reserve_extra_memory(struct boot_params *bootp)
|
static void __init pvh_reserve_extra_memory(void)
|
||||||
{
|
{
|
||||||
|
struct boot_params *bootp = &boot_params;
|
||||||
unsigned int i, ram_pages = 0, extra_pages;
|
unsigned int i, ram_pages = 0, extra_pages;
|
||||||
|
|
||||||
for (i = 0; i < bootp->e820_entries; i++) {
|
for (i = 0; i < bootp->e820_entries; i++) {
|
||||||
|
@ -94,6 +96,14 @@ void __init xen_reserve_extra_memory(struct boot_params *bootp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init pvh_arch_setup(void)
|
||||||
|
{
|
||||||
|
pvh_reserve_extra_memory();
|
||||||
|
|
||||||
|
if (xen_initial_domain())
|
||||||
|
xen_add_preferred_consoles();
|
||||||
|
}
|
||||||
|
|
||||||
void __init xen_pvh_init(struct boot_params *boot_params)
|
void __init xen_pvh_init(struct boot_params *boot_params)
|
||||||
{
|
{
|
||||||
u32 msr;
|
u32 msr;
|
||||||
|
@ -107,8 +117,7 @@ void __init xen_pvh_init(struct boot_params *boot_params)
|
||||||
pfn = __pa(hypercall_page);
|
pfn = __pa(hypercall_page);
|
||||||
wrmsr_safe(msr, (u32)pfn, (u32)(pfn >> 32));
|
wrmsr_safe(msr, (u32)pfn, (u32)(pfn >> 32));
|
||||||
|
|
||||||
if (xen_initial_domain())
|
x86_init.oem.arch_setup = pvh_arch_setup;
|
||||||
x86_init.oem.arch_setup = xen_add_preferred_consoles;
|
|
||||||
x86_init.oem.banner = xen_banner;
|
x86_init.oem.banner = xen_banner;
|
||||||
|
|
||||||
xen_efi_init(boot_params);
|
xen_efi_init(boot_params);
|
||||||
|
|
Loading…
Reference in a new issue