Merge branch 'master' into for-next
[sfrench/cifs-2.6.git] / mm / hugetlb.c
index b97e806e5d9a9baecd8102df6f90cfd8568c494c..c65a8a583d132ed0609808a30d1ddd2cc4ca5050 100644 (file)
@@ -1293,8 +1293,7 @@ static void __init report_hugepages(void)
 
        for_each_hstate(h) {
                char buf[32];
-               printk(KERN_INFO "HugeTLB registered %s page size, "
-                                "pre-allocated %ld pages\n",
+               pr_info("HugeTLB registered %s page size, pre-allocated %ld pages\n",
                        memfmt(buf, huge_page_size(h)),
                        h->free_huge_pages);
        }
@@ -1702,8 +1701,7 @@ static void __init hugetlb_sysfs_init(void)
                err = hugetlb_sysfs_add_hstate(h, hugepages_kobj,
                                         hstate_kobjs, &hstate_attr_group);
                if (err)
-                       printk(KERN_ERR "Hugetlb: Unable to add hstate %s",
-                                                               h->name);
+                       pr_err("Hugetlb: Unable to add hstate %s", h->name);
        }
 }
 
@@ -1763,7 +1761,7 @@ static struct hstate *kobj_to_node_hstate(struct kobject *kobj, int *nidp)
  * Unregister hstate attributes from a single node device.
  * No-op if no hstate attributes attached.
  */
-void hugetlb_unregister_node(struct node *node)
+static void hugetlb_unregister_node(struct node *node)
 {
        struct hstate *h;
        struct node_hstate *nhs = &node_hstates[node->dev.id];
@@ -1807,7 +1805,7 @@ static void hugetlb_unregister_all_nodes(void)
  * Register hstate attributes for a single node device.
  * No-op if attributes already registered.
  */
-void hugetlb_register_node(struct node *node)
+static void hugetlb_register_node(struct node *node)
 {
        struct hstate *h;
        struct node_hstate *nhs = &node_hstates[node->dev.id];
@@ -1826,9 +1824,8 @@ void hugetlb_register_node(struct node *node)
                                                nhs->hstate_kobjs,
                                                &per_node_hstate_attr_group);
                if (err) {
-                       printk(KERN_ERR "Hugetlb: Unable to add hstate %s"
-                                       " for node %d\n",
-                                               h->name, node->dev.id);
+                       pr_err("Hugetlb: Unable to add hstate %s for node %d\n",
+                               h->name, node->dev.id);
                        hugetlb_unregister_node(node);
                        break;
                }
@@ -1924,7 +1921,7 @@ void __init hugetlb_add_hstate(unsigned order)
        unsigned long i;
 
        if (size_to_hstate(PAGE_SIZE << order)) {
-               printk(KERN_WARNING "hugepagesz= specified twice, ignoring\n");
+               pr_warning("hugepagesz= specified twice, ignoring\n");
                return;
        }
        BUG_ON(hugetlb_max_hstate >= HUGE_MAX_HSTATE);
@@ -1960,8 +1957,8 @@ static int __init hugetlb_nrpages_setup(char *s)
                mhp = &parsed_hstate->max_huge_pages;
 
        if (mhp == last_mhp) {
-               printk(KERN_WARNING "hugepages= specified twice without "
-                       "interleaving hugepagesz=, ignoring\n");
+               pr_warning("hugepages= specified twice without "
+                          "interleaving hugepagesz=, ignoring\n");
                return 1;
        }
 
@@ -2692,9 +2689,8 @@ static int hugetlb_no_page(struct mm_struct *mm, struct vm_area_struct *vma,
         * COW. Warn that such a situation has occurred as it may not be obvious
         */
        if (is_vma_resv_set(vma, HPAGE_RESV_UNMAPPED)) {
-               printk(KERN_WARNING
-                       "PID %d killed due to inadequate hugepage pool\n",
-                       current->pid);
+               pr_warning("PID %d killed due to inadequate hugepage pool\n",
+                          current->pid);
                return ret;
        }
 
@@ -2924,14 +2920,14 @@ follow_huge_pud(struct mm_struct *mm, unsigned long address,
        return NULL;
 }
 
-int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
-                       struct page **pages, struct vm_area_struct **vmas,
-                       unsigned long *position, int *length, int i,
-                       unsigned int flags)
+long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
+                        struct page **pages, struct vm_area_struct **vmas,
+                        unsigned long *position, unsigned long *nr_pages,
+                        long i, unsigned int flags)
 {
        unsigned long pfn_offset;
        unsigned long vaddr = *position;
-       int remainder = *length;
+       unsigned long remainder = *nr_pages;
        struct hstate *h = hstate_vma(vma);
 
        spin_lock(&mm->page_table_lock);
@@ -3001,7 +2997,7 @@ same_page:
                }
        }
        spin_unlock(&mm->page_table_lock);
-       *length = remainder;
+       *nr_pages = remainder;
        *position = vaddr;
 
        return i ? i : -EFAULT;
@@ -3033,6 +3029,7 @@ unsigned long hugetlb_change_protection(struct vm_area_struct *vma,
                if (!huge_pte_none(huge_ptep_get(ptep))) {
                        pte = huge_ptep_get_and_clear(mm, address, ptep);
                        pte = pte_mkhuge(pte_modify(pte, newprot));
+                       pte = arch_make_huge_pte(pte, vma, NULL, 0);
                        set_huge_pte_at(mm, address, ptep, pte);
                        pages++;
                }