]> xenbits.xensource.com Git - xen.git/commitdiff
mm: MEMF_node should handle changes in nodeid_t size
authorBoris Ostrovsky <boris.ostrovsky@oracle.com>
Thu, 26 Feb 2015 13:08:34 +0000 (14:08 +0100)
committerJan Beulich <jbeulich@suse.com>
Thu, 26 Feb 2015 13:10:24 +0000 (14:10 +0100)
Instead of using a hardcoded constant to extract nodeID from
memflags use a macro whose value is based on nodeid_t size.

Also provide a macro for extracting nodeID from memflags so that
users don't need to remember to decrement the value.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
MASK_EXTR() can't be used in MEMF2NODE() (also renamed to
MEMF_get_node()).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
xen/common/page_alloc.c
xen/include/xen/mm.h

index 6bd3b7526d9aeada0f3db133acb774134e749880..d96d25bc14f51fb10a0a653839d6d1d4f58341a2 100644 (file)
@@ -581,13 +581,16 @@ static struct page_info *alloc_heap_pages(
     struct domain *d)
 {
     unsigned int i, j, zone = 0, nodemask_retry = 0;
-    nodeid_t first_node, node = (nodeid_t)((memflags >> _MEMF_node) - 1);
+    nodeid_t first_node, node = MEMF_get_node(memflags);
     unsigned long request = 1UL << order;
     struct page_info *pg;
     nodemask_t nodemask = (d != NULL ) ? d->node_affinity : node_online_map;
     bool_t need_tlbflush = 0;
     uint32_t tlbflush_timestamp = 0;
 
+    /* Make sure there are enough bits in memflags for nodeID. */
+    BUILD_BUG_ON((_MEMF_bits - _MEMF_node) < (8 * sizeof(nodeid_t)));
+
     if ( node == NUMA_NO_NODE )
     {
         memflags &= ~MEMF_exact_node;
index a62ee1e3aee1e4a35865c6965d663a68671e2301..6ea8b8cbd48fce76179de6a3f2aea9e5300e2d13 100644 (file)
@@ -121,7 +121,9 @@ struct npfec {
 #define _MEMF_exact_node  4
 #define  MEMF_exact_node  (1U<<_MEMF_exact_node)
 #define _MEMF_node        8
-#define  MEMF_node(n)     ((((n)+1)&0xff)<<_MEMF_node)
+#define  MEMF_node_mask   ((1U << (8 * sizeof(nodeid_t))) - 1)
+#define  MEMF_node(n)     ((((n) + 1) & MEMF_node_mask) << _MEMF_node)
+#define  MEMF_get_node(f) ((((f) >> _MEMF_node) - 1) & MEMF_node_mask)
 #define _MEMF_bits        24
 #define  MEMF_bits(n)     ((n)<<_MEMF_bits)