diff options
Diffstat (limited to 'mm/hugetlb.c')
| -rw-r--r-- | mm/hugetlb.c | 39 | 
1 files changed, 18 insertions, 21 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index b336690be9f..c65a8a583d1 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -127,7 +127,7 @@ static inline struct hugepage_subpool *subpool_inode(struct inode *inode)  static inline struct hugepage_subpool *subpool_vma(struct vm_area_struct *vma)  { -	return subpool_inode(vma->vm_file->f_dentry->d_inode); +	return subpool_inode(file_inode(vma->vm_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);  	}  } @@ -1826,9 +1824,8 @@ static 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;  	} @@ -2482,7 +2479,7 @@ static int unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,  	address = address & huge_page_mask(h);  	pgoff = ((address - vma->vm_start) >> PAGE_SHIFT) +  			vma->vm_pgoff; -	mapping = vma->vm_file->f_dentry->d_inode->i_mapping; +	mapping = file_inode(vma->vm_file)->i_mapping;  	/*  	 * Take the mapping lock for the duration of the table walk. As @@ -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++;  		}  |