xen: split up xen_hvm_init_shared_info()
Instead of calling xen_hvm_init_shared_info() on boot and resume split it up into a boot time function searching for the pfn to use and a mapping function doing the hypervisor mapping call. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Acked-by: Ingo Molnar <mingo@kernel.org> Signed-off-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
parent
c138d81163
commit
10231f69eb
|
@ -21,29 +21,9 @@
|
||||||
#include "mmu.h"
|
#include "mmu.h"
|
||||||
#include "smp.h"
|
#include "smp.h"
|
||||||
|
|
||||||
void __ref xen_hvm_init_shared_info(void)
|
void xen_hvm_init_shared_info(void)
|
||||||
{
|
{
|
||||||
struct xen_add_to_physmap xatp;
|
struct xen_add_to_physmap xatp;
|
||||||
u64 pa;
|
|
||||||
|
|
||||||
if (HYPERVISOR_shared_info == &xen_dummy_shared_info) {
|
|
||||||
/*
|
|
||||||
* Search for a free page starting at 4kB physical address.
|
|
||||||
* Low memory is preferred to avoid an EPT large page split up
|
|
||||||
* by the mapping.
|
|
||||||
* Starting below X86_RESERVE_LOW (usually 64kB) is fine as
|
|
||||||
* the BIOS used for HVM guests is well behaved and won't
|
|
||||||
* clobber memory other than the first 4kB.
|
|
||||||
*/
|
|
||||||
for (pa = PAGE_SIZE;
|
|
||||||
!e820__mapped_all(pa, pa + PAGE_SIZE, E820_TYPE_RAM) ||
|
|
||||||
memblock_is_reserved(pa);
|
|
||||||
pa += PAGE_SIZE)
|
|
||||||
;
|
|
||||||
|
|
||||||
memblock_reserve(pa, PAGE_SIZE);
|
|
||||||
HYPERVISOR_shared_info = __va(pa);
|
|
||||||
}
|
|
||||||
|
|
||||||
xatp.domid = DOMID_SELF;
|
xatp.domid = DOMID_SELF;
|
||||||
xatp.idx = 0;
|
xatp.idx = 0;
|
||||||
|
@ -53,6 +33,28 @@ void __ref xen_hvm_init_shared_info(void)
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init reserve_shared_info(void)
|
||||||
|
{
|
||||||
|
u64 pa;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Search for a free page starting at 4kB physical address.
|
||||||
|
* Low memory is preferred to avoid an EPT large page split up
|
||||||
|
* by the mapping.
|
||||||
|
* Starting below X86_RESERVE_LOW (usually 64kB) is fine as
|
||||||
|
* the BIOS used for HVM guests is well behaved and won't
|
||||||
|
* clobber memory other than the first 4kB.
|
||||||
|
*/
|
||||||
|
for (pa = PAGE_SIZE;
|
||||||
|
!e820__mapped_all(pa, pa + PAGE_SIZE, E820_TYPE_RAM) ||
|
||||||
|
memblock_is_reserved(pa);
|
||||||
|
pa += PAGE_SIZE)
|
||||||
|
;
|
||||||
|
|
||||||
|
memblock_reserve(pa, PAGE_SIZE);
|
||||||
|
HYPERVISOR_shared_info = __va(pa);
|
||||||
|
}
|
||||||
|
|
||||||
static void __init init_hvm_pv_info(void)
|
static void __init init_hvm_pv_info(void)
|
||||||
{
|
{
|
||||||
int major, minor;
|
int major, minor;
|
||||||
|
@ -153,6 +155,7 @@ static void __init xen_hvm_guest_init(void)
|
||||||
|
|
||||||
init_hvm_pv_info();
|
init_hvm_pv_info();
|
||||||
|
|
||||||
|
reserve_shared_info();
|
||||||
xen_hvm_init_shared_info();
|
xen_hvm_init_shared_info();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue