[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] tools/hvmloader: move shared_info to reserved memory area
On 24/10/2012 10:57, "Olaf Hering" <olaf@xxxxxxxxx> wrote: > # 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. I don't think hvmloader actually needs to map shared-info to the new location, it justs needs to guarantee that this location is unused, and document it so that it never *becomes* used in future. Which can be as simple as the attached patch (in fact all the changes apart from introducing GUEST_RESERVED_{START,END} are really cleaning up and bug-fixing the out-of-space checks in the mem_hole_alloc/mem_alloc functions). This then just requires that the guest maps shared-info to FE700000 itself. Should be quite easy. :) -- Keir > 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 Attachment:
00-hvmloader-reserved-mem _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |