diff options
| author | KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> | 2012-01-10 15:07:22 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-10 16:30:42 -0800 | 
| commit | 1e16a539ac16e7b3a8c2cee188897d4bdb88e6e8 (patch) | |
| tree | 12ee5589d6a04d54fc89c7970b6b8e5012d5e74f /mm/hugetlb.c | |
| parent | ef009b25f4f8a77d2b32067d424d5ac757dcdc5b (diff) | |
| download | olio-linux-3.10-1e16a539ac16e7b3a8c2cee188897d4bdb88e6e8.tar.xz olio-linux-3.10-1e16a539ac16e7b3a8c2cee188897d4bdb88e6e8.zip  | |
mm/hugetlb.c: fix virtual address handling in hugetlb fault
handle_mm_fault() passes 'faulted' address to hugetlb_fault().  This
address is not aligned to a hugepage boundary.
Most of the functions for hugetlb pages are aware of that and calculate an
alignment themselves.  However some functions such as
copy_user_huge_page() and clear_huge_page() don't handle alignment by
themselves.
This patch make hugeltb_fault() fix the alignment and pass an aligned
addresss (to address of a faulted hugepage) to functions.
[akpm@linux-foundation.org: use &=]
Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/hugetlb.c')
| -rw-r--r-- | mm/hugetlb.c | 2 | 
1 files changed, 2 insertions, 0 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 49e693b7fd0..ab89d6f382d 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -2640,6 +2640,8 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,  	static DEFINE_MUTEX(hugetlb_instantiation_mutex);  	struct hstate *h = hstate_vma(vma); +	address &= huge_page_mask(h); +  	ptep = huge_pte_offset(mm, address);  	if (ptep) {  		entry = huge_ptep_get(ptep);  |