aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/mm
diff options
context:
space:
mode:
authorHuang Shijie <shijie.huang@arm.com>2016-11-08 00:44:39 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-01-19 14:18:08 -0500
commit736aec92c4e95a993a6e936ba3a90498975f5d62 (patch)
tree98bfbca71e54003c3509fe400ce7cbcaed1ba2c7 /arch/arm64/mm
parent3083593700ddf653f765031189805fef56959281 (diff)
arm64: hugetlb: fix the wrong address for several functions
commit 0c2f0afe3582c58efeef93bc57bc07d502132618 upstream. The libhugetlbfs meets several failures since the following functions do not use the correct address: huge_ptep_get_and_clear() huge_ptep_set_access_flags() huge_ptep_set_wrprotect() huge_ptep_clear_flush() This patch fixes the wrong address for them. Signed-off-by: Huang Shijie <shijie.huang@arm.com> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch/arm64/mm')
-rw-r--r--arch/arm64/mm/hugetlbpage.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
index 2e49bd252fe7..52f2c8fd1228 100644
--- a/arch/arm64/mm/hugetlbpage.c
+++ b/arch/arm64/mm/hugetlbpage.c
@@ -212,7 +212,7 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
212 ncontig = find_num_contig(mm, addr, cpte, *cpte, &pgsize); 212 ncontig = find_num_contig(mm, addr, cpte, *cpte, &pgsize);
213 /* save the 1st pte to return */ 213 /* save the 1st pte to return */
214 pte = ptep_get_and_clear(mm, addr, cpte); 214 pte = ptep_get_and_clear(mm, addr, cpte);
215 for (i = 1; i < ncontig; ++i) { 215 for (i = 1, addr += pgsize; i < ncontig; ++i, addr += pgsize) {
216 /* 216 /*
217 * If HW_AFDBM is enabled, then the HW could 217 * If HW_AFDBM is enabled, then the HW could
218 * turn on the dirty bit for any of the page 218 * turn on the dirty bit for any of the page
@@ -250,7 +250,7 @@ int huge_ptep_set_access_flags(struct vm_area_struct *vma,
250 pfn = pte_pfn(*cpte); 250 pfn = pte_pfn(*cpte);
251 ncontig = find_num_contig(vma->vm_mm, addr, cpte, 251 ncontig = find_num_contig(vma->vm_mm, addr, cpte,
252 *cpte, &pgsize); 252 *cpte, &pgsize);
253 for (i = 0; i < ncontig; ++i, ++cpte) { 253 for (i = 0; i < ncontig; ++i, ++cpte, addr += pgsize) {
254 changed = ptep_set_access_flags(vma, addr, cpte, 254 changed = ptep_set_access_flags(vma, addr, cpte,
255 pfn_pte(pfn, 255 pfn_pte(pfn,
256 hugeprot), 256 hugeprot),
@@ -273,7 +273,7 @@ void huge_ptep_set_wrprotect(struct mm_struct *mm,
273 273
274 cpte = huge_pte_offset(mm, addr); 274 cpte = huge_pte_offset(mm, addr);
275 ncontig = find_num_contig(mm, addr, cpte, *cpte, &pgsize); 275 ncontig = find_num_contig(mm, addr, cpte, *cpte, &pgsize);
276 for (i = 0; i < ncontig; ++i, ++cpte) 276 for (i = 0; i < ncontig; ++i, ++cpte, addr += pgsize)
277 ptep_set_wrprotect(mm, addr, cpte); 277 ptep_set_wrprotect(mm, addr, cpte);
278 } else { 278 } else {
279 ptep_set_wrprotect(mm, addr, ptep); 279 ptep_set_wrprotect(mm, addr, ptep);
@@ -291,7 +291,7 @@ void huge_ptep_clear_flush(struct vm_area_struct *vma,
291 cpte = huge_pte_offset(vma->vm_mm, addr); 291 cpte = huge_pte_offset(vma->vm_mm, addr);
292 ncontig = find_num_contig(vma->vm_mm, addr, cpte, 292 ncontig = find_num_contig(vma->vm_mm, addr, cpte,
293 *cpte, &pgsize); 293 *cpte, &pgsize);
294 for (i = 0; i < ncontig; ++i, ++cpte) 294 for (i = 0; i < ncontig; ++i, ++cpte, addr += pgsize)
295 ptep_clear_flush(vma, addr, cpte); 295 ptep_clear_flush(vma, addr, cpte);
296 } else { 296 } else {
297 ptep_clear_flush(vma, addr, ptep); 297 ptep_clear_flush(vma, addr, ptep);