[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 11/18] xen: get memory map from hypervisor for PVH
On 19/10/2018 14:40, Daniel Kiper wrote: > On Tue, Oct 09, 2018 at 01:03:10PM +0200, Juergen Gross wrote: >> Retrieve the memory map from the hypervisor and normalize it to contain >> no overlapping entries and to be sorted by address. >> >> Signed-off-by: Juergen Gross <jgross@xxxxxxxx> >> --- >> grub-core/kern/i386/xen/pvh.c | 98 >> +++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 98 insertions(+) >> >> diff --git a/grub-core/kern/i386/xen/pvh.c b/grub-core/kern/i386/xen/pvh.c >> index c1b1cf8db..b4933b454 100644 >> --- a/grub-core/kern/i386/xen/pvh.c >> +++ b/grub-core/kern/i386/xen/pvh.c >> @@ -22,7 +22,16 @@ >> #include <grub/mm.h> >> #include <grub/i386/cpuid.h> >> #include <grub/xen.h> >> +#include <grub/i386/linux.h> >> #include <grub/machine/kernel.h> >> +#include <xen/memory.h> >> + >> +struct xen_machine_mmap_entry >> +{ >> + grub_uint64_t addr; >> + grub_uint64_t len; >> + grub_uint32_t type; >> +} GRUB_PACKED; > > Could not we reuse grub_e820_mmap_entry here? This is defined only locally in grub-core/mmap/i386/pc/mmap.c I can move it into an appropriate header and use it here and in mmap.c > >> grub_uint64_t grub_rsdp_addr; >> >> @@ -30,6 +39,8 @@ static struct { char _entry[32]; } hypercall_page[128] >> __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); >> >> static grub_uint32_t xen_cpuid_base; >> +static struct xen_machine_mmap_entry map[128]; > > A constant instead of 128? If no why 128? I can use a macro instead. > >> +static unsigned int nr_map_entries; >> >> static void >> grub_xen_early_halt (void) >> @@ -93,11 +104,98 @@ grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t >> a0, >> return __res; >> } >> >> +static void >> +grub_xen_sort_mmap (void) >> +{ >> + grub_uint64_t from, to; >> + unsigned int i; >> + struct xen_machine_mmap_entry tmp; >> + >> + /* Align map entries to page boundaries. */ >> + for (i = 0; i < nr_map_entries; i++) >> + { >> + from = map[i].addr; >> + to = from + map[i].len; >> + if (map[i].type == GRUB_MEMORY_AVAILABLE) >> + { >> + from = ALIGN_UP(from, GRUB_XEN_PAGE_SIZE); > > Lack of space between macro name and "(". > Here and below... Okay. > >> + to = ALIGN_DOWN(to, GRUB_XEN_PAGE_SIZE); >> + } >> + else >> + { >> + from = ALIGN_DOWN(from, GRUB_XEN_PAGE_SIZE); >> + to = ALIGN_UP(to, GRUB_XEN_PAGE_SIZE); >> + } >> + map[i].addr = from; >> + map[i].len = to - from; >> + } Juergen _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |