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

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

> +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...

> +       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;
> +    }

[...]

Daniel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.