mm, hugetlbfs: optimize when NUMA=n
[cascardo/linux.git] / mm / hugetlb.c
index 899f6a8..241de27 100644 (file)
@@ -1455,9 +1455,14 @@ static struct page *__hugetlb_alloc_buddy_huge_page(struct hstate *h,
 
        /*
         * We need a VMA to get a memory policy.  If we do not
-        * have one, we use the 'nid' argument
+        * have one, we use the 'nid' argument.
+        *
+        * The mempolicy stuff below has some non-inlined bits
+        * and calls ->vm_ops.  That makes it hard to optimize at
+        * compile-time, even when NUMA is off and it does
+        * nothing.  This helps the compiler optimize it out.
         */
-       if (!vma) {
+       if (!IS_ENABLED(CONFIG_NUMA) || !vma) {
                /*
                 * If a specific node is requested, make sure to
                 * get memory from there, but only when a node
@@ -1474,7 +1479,8 @@ static struct page *__hugetlb_alloc_buddy_huge_page(struct hstate *h,
 
        /*
         * OK, so we have a VMA.  Fetch the mempolicy and try to
-        * allocate a huge page with it.
+        * allocate a huge page with it.  We will only reach this
+        * when CONFIG_NUMA=y.
         */
        do {
                struct page *page;
@@ -1520,8 +1526,8 @@ static struct page *__alloc_buddy_huge_page(struct hstate *h,
         * we can call this function, not both.
         */
        if (vma || (addr != -1)) {
-               WARN_ON_ONCE(addr == -1);
-               WARN_ON_ONCE(nid != NUMA_NO_NODE);
+               VM_WARN_ON_ONCE(addr == -1);
+               VM_WARN_ON_ONCE(nid != NUMA_NO_NODE);
        }
        /*
         * Assume we will successfully allocate the surplus page to
@@ -1585,6 +1591,7 @@ static struct page *__alloc_buddy_huge_page(struct hstate *h,
  * NUMA_NO_NODE, which means that it may be allocated
  * anywhere.
  */
+static
 struct page *__alloc_buddy_huge_page_no_mpol(struct hstate *h, int nid)
 {
        unsigned long addr = -1;
@@ -1595,6 +1602,7 @@ struct page *__alloc_buddy_huge_page_no_mpol(struct hstate *h, int nid)
 /*
  * Use the VMA's mpolicy to allocate a huge page from the buddy.
  */
+static
 struct page *__alloc_buddy_huge_page_with_mpol(struct hstate *h,
                struct vm_area_struct *vma, unsigned long addr)
 {