Skip to content
  • Konrad Rzeszutek Wilk's avatar
    xen/x86: Workaround 64-bit hypervisor and 32-bit initial domain. · 806c312e
    Konrad Rzeszutek Wilk authored
    
    
    If a 64-bit hypervisor is booted with a 32-bit initial domain,
    the hypervisor deals with the initial domain as "compat" and
    does some extra adjustments (like pagetables are 4 bytes instead
    of 8). It also adjusts the xen_start_info->pt_base incorrectly.
    
    When booted with a 32-bit hypervisor (32-bit initial domain):
    ..
    (XEN)  Start info:    cf831000->cf83147c
    (XEN)  Page tables:   cf832000->cf8b5000
    ..
    [    0.000000] PT: cf832000 (f832000)
    [    0.000000] Reserving PT: f832000->f8b5000
    
    And with a 64-bit hypervisor:
    (XEN)  Start info:    00000000cf831000->00000000cf8314b4
    (XEN)  Page tables:   00000000cf832000->00000000cf8b6000
    
    [    0.000000] PT: cf834000 (f834000)
    [    0.000000] Reserving PT: f834000->f8b8000
    
    To deal with this, we keep keep track of the highest physical
    address we have reserved via memblock_reserve. If that address
    does not overlap with pt_base, we have a gap which we reserve.
    
    Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    806c312e