Skip to content

Commit

Permalink
xen/arm: Correctly report the memory region in the dummy NUMA helpers
Browse files Browse the repository at this point in the history
NUMA is currently not supported on Arm. Because common code is
NUMA-aware, dummy helpers are instead provided to expose a single node.

Those helpers are for instance used to know the region to scrub.

However the memory region is not reported correctly. Indeed, the
frametable may not be at the beginning of the memory and there might be
multiple memory banks. This will lead to not scrub some part of the
memory.

The memory information can be found using:
    * first_valid_mfn as the start of the memory
    * max_page - first_valid_mfn as the spanned pages

Note that first_valid_mfn is now been exported. The prototype has been
added in asm-arm/numa.h and not in a common header because I would
expect the variable to become static once NUMA is fully supported on
Arm.

This is XSA-245.

Signed-off-by: Julien Grall <[email protected]>
Signed-off-by: Stefano Stabellini <[email protected]>
Reviewed-by: Stefano Stabellini <[email protected]>
Reported-and-Tested-by: Konrad Rzeszutek Wilk <[email protected]>
  • Loading branch information
Julien Grall authored and sstabellini committed Sep 29, 2017
1 parent ec6d902 commit 5414ba7
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
6 changes: 5 additions & 1 deletion xen/common/page_alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,11 @@ PAGE_LIST_HEAD(page_broken_list);
* BOOT-TIME ALLOCATOR
*/

static unsigned long __initdata first_valid_mfn = ~0UL;
/*
* first_valid_mfn is exported because it is use in ARM specific NUMA
* helpers. See comment in asm-arm/numa.h.
*/
unsigned long first_valid_mfn = ~0UL;

static struct bootmem_region {
unsigned long s, e; /* MFNs @s through @e-1 inclusive are free */
Expand Down
10 changes: 8 additions & 2 deletions xen/include/asm-arm/numa.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,15 @@ static inline __attribute__((pure)) nodeid_t phys_to_nid(paddr_t addr)
return 0;
}

/*
* TODO: make first_valid_mfn static when NUMA is supported on Arm, this
* is required because the dummy helpers are using it.
*/
extern unsigned long first_valid_mfn;

/* XXX: implement NUMA support */
#define node_spanned_pages(nid) (total_pages)
#define node_start_pfn(nid) (pdx_to_pfn(frametable_base_pdx))
#define node_spanned_pages(nid) (max_page - first_valid_mfn)
#define node_start_pfn(nid) (first_valid_mfn)
#define __node_distance(a, b) (20)

static inline unsigned int arch_get_dma_bitsize(void)
Expand Down

0 comments on commit 5414ba7

Please sign in to comment.