|
[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 |