xen: eliminate scalability issues from initrd handling
Size restrictions native kernels wouldn't have resulted from the initrd getting mapped into the initial mapping. The kernel doesn't really need the initrd to be mapped, so use infrastructure available in Xen to avoid the mapping and hence the restriction. Signed-off-by: Juergen Gross <jgross@suse.com> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
This commit is contained in:
parent
bca9b68558
commit
d1e9abd630
|
@ -1519,6 +1519,7 @@ static void __init xen_pvh_early_guest_init(void)
|
||||||
asmlinkage __visible void __init xen_start_kernel(void)
|
asmlinkage __visible void __init xen_start_kernel(void)
|
||||||
{
|
{
|
||||||
struct physdev_set_iopl set_iopl;
|
struct physdev_set_iopl set_iopl;
|
||||||
|
unsigned long initrd_start = 0;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (!xen_start_info)
|
if (!xen_start_info)
|
||||||
|
@ -1665,10 +1666,16 @@ asmlinkage __visible void __init xen_start_kernel(void)
|
||||||
new_cpu_data.x86_capability[0] = cpuid_edx(1);
|
new_cpu_data.x86_capability[0] = cpuid_edx(1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (xen_start_info->mod_start) {
|
||||||
|
if (xen_start_info->flags & SIF_MOD_START_PFN)
|
||||||
|
initrd_start = PFN_PHYS(xen_start_info->mod_start);
|
||||||
|
else
|
||||||
|
initrd_start = __pa(xen_start_info->mod_start);
|
||||||
|
}
|
||||||
|
|
||||||
/* Poke various useful things into boot_params */
|
/* Poke various useful things into boot_params */
|
||||||
boot_params.hdr.type_of_loader = (9 << 4) | 0;
|
boot_params.hdr.type_of_loader = (9 << 4) | 0;
|
||||||
boot_params.hdr.ramdisk_image = xen_start_info->mod_start
|
boot_params.hdr.ramdisk_image = initrd_start;
|
||||||
? __pa(xen_start_info->mod_start) : 0;
|
|
||||||
boot_params.hdr.ramdisk_size = xen_start_info->mod_len;
|
boot_params.hdr.ramdisk_size = xen_start_info->mod_len;
|
||||||
boot_params.hdr.cmd_line_ptr = __pa(xen_start_info->cmd_line);
|
boot_params.hdr.cmd_line_ptr = __pa(xen_start_info->cmd_line);
|
||||||
|
|
||||||
|
|
|
@ -124,6 +124,7 @@ NEXT_HYPERCALL(arch_6)
|
||||||
ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID,
|
ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID,
|
||||||
.quad _PAGE_PRESENT; .quad _PAGE_PRESENT)
|
.quad _PAGE_PRESENT; .quad _PAGE_PRESENT)
|
||||||
ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long 1)
|
ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long 1)
|
||||||
|
ELFNOTE(Xen, XEN_ELFNOTE_MOD_START_PFN, .long 1)
|
||||||
ELFNOTE(Xen, XEN_ELFNOTE_HV_START_LOW, _ASM_PTR __HYPERVISOR_VIRT_START)
|
ELFNOTE(Xen, XEN_ELFNOTE_HV_START_LOW, _ASM_PTR __HYPERVISOR_VIRT_START)
|
||||||
ELFNOTE(Xen, XEN_ELFNOTE_PADDR_OFFSET, _ASM_PTR 0)
|
ELFNOTE(Xen, XEN_ELFNOTE_PADDR_OFFSET, _ASM_PTR 0)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue