[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] tools/hvmloader: move shared_info to reserved memory area
# HG changeset patch # User Olaf Hering <olaf@xxxxxxxxx> # Date 1351101387 -7200 # Node ID 6a0c73ae9ce5cca72f788c0e0f8fd6872010d83e # Parent 22e08c9ac770db07c3c3e7c844aa7153050939f3 tools/hvmloader: move shared_info to reserved memory area Reserve a range of 1MB for the HVM shared info page at 0xFE700000. This area is already marked as reserved in the E820 map. The purpose of this change is to provide Linux PVonHVM guests with a fixed page outside of ordinary RAM. If the shared page is located in RAM it would be overwritten during a kexec boot. Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> diff -r 22e08c9ac770 -r 6a0c73ae9ce5 tools/firmware/hvmloader/config.h --- a/tools/firmware/hvmloader/config.h +++ b/tools/firmware/hvmloader/config.h @@ -68,6 +68,8 @@ extern unsigned long pci_mem_start, pci_ /* NB. ACPI_INFO_PHYSICAL_ADDRESS *MUST* match definition in acpi/dsdt.asl! */ #define ACPI_INFO_PHYSICAL_ADDRESS 0xFC000000 #define RESERVED_MEMORY_DYNAMIC 0xFC001000 +#define HVM_SHARED_INFO_AREA 0xFE700000 +#define HVM_SHARED_INFO_SIZE 0x00100000 extern unsigned long scratch_start; diff -r 22e08c9ac770 -r 6a0c73ae9ce5 tools/firmware/hvmloader/util.c --- a/tools/firmware/hvmloader/util.c +++ b/tools/firmware/hvmloader/util.c @@ -433,11 +433,18 @@ void *mem_alloc(uint32_t size, uint32_t if ( align < 16 ) align = 16; +retry: s = (reserve + align) & ~(align - 1); e = s + size - 1; BUG_ON((e < s) || (e >> PAGE_SHIFT) >= hvm_info->reserved_mem_pgstart); + /* Skip the shared info region */ + if (s <= HVM_SHARED_INFO_AREA && e >= HVM_SHARED_INFO_AREA) { + reserve = HVM_SHARED_INFO_AREA + HVM_SHARED_INFO_SIZE - 1; + goto retry; + } + while ( (reserve >> PAGE_SHIFT) != (e >> PAGE_SHIFT) ) { reserve += PAGE_SIZE; @@ -765,7 +772,7 @@ struct shared_info *get_shared_info(void xatp.domid = DOMID_SELF; xatp.space = XENMAPSPACE_shared_info; xatp.idx = 0; - xatp.gpfn = mem_hole_alloc(1); + xatp.gpfn = HVM_SHARED_INFO_AREA >> PAGE_SHIFT; shared_info = (struct shared_info *)(xatp.gpfn << PAGE_SHIFT); if ( hypercall_memory_op(XENMEM_add_to_physmap, &xatp) != 0 ) BUG(); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |