From: Wei Liu Date: Mon, 6 Jul 2015 13:47:40 +0000 (+0100) Subject: libxc: fix PV vNUMA guest memory allocation X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~2908 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=826ca36fa3be0da906a6f3ebd7229e50c9f67bee;p=xen.git libxc: fix PV vNUMA guest memory allocation In 415b58c1 (tools/libxc: Batch memory allocations for PV guests) the number of super pages is calculated with the number of total pages. That is wrong. It breaks PV guest vNUMA. The correct number of super pages should be derived from the number of pages within that virtual NUMA node. Also change the name and type of super page variable to match the naming convention and type of normal page variable. Make the necessary adjustment to make code compile. Reported-by: Dario Faggioli Signed-off-by: Wei Liu Reviewed-by: Ross Lagerwall Reviewed-and-Tested-by: Dario Faggioli Acked-by: Ian Campbell --- diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c index acd7b3f488..6a04399a1c 100644 --- a/tools/libxc/xc_dom_x86.c +++ b/tools/libxc/xc_dom_x86.c @@ -879,9 +879,8 @@ int arch_setup_meminit(struct xc_dom_image *dom) for ( i = 0; i < nr_vmemranges; i++ ) { unsigned int memflags; - uint64_t pages; + uint64_t pages, super_pages; unsigned int pnode = vnode_to_pnode[vmemranges[i].nid]; - int nr_spages = dom->total_pages >> SUPERPAGE_PFN_SHIFT; xen_pfn_t extents[SUPERPAGE_BATCH_SIZE]; xen_pfn_t pfn_base_idx; @@ -891,15 +890,17 @@ int arch_setup_meminit(struct xc_dom_image *dom) pages = (vmemranges[i].end - vmemranges[i].start) >> PAGE_SHIFT; + super_pages = pages >> SUPERPAGE_PFN_SHIFT; pfn_base = vmemranges[i].start >> PAGE_SHIFT; for ( pfn = pfn_base; pfn < pfn_base+pages; pfn++ ) dom->p2m_host[pfn] = pfn; pfn_base_idx = pfn_base; - while (nr_spages) { - int count = min(nr_spages, SUPERPAGE_BATCH_SIZE); - nr_spages -= count; + while (super_pages) { + uint64_t count = + min_t(uint64_t, super_pages,SUPERPAGE_BATCH_SIZE); + super_pages -= count; for ( pfn = pfn_base_idx, j = 0; pfn < pfn_base_idx + (count << SUPERPAGE_PFN_SHIFT);