Skip to content

Commit 4fc54a3

Browse files
Huang ShijieAlex Shi
authored andcommitted
arm64: hugetlb: fix the wrong address for several functions
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> (cherry picked from commit 0c2f0afe3582c58efeef93bc57bc07d502132618) Signed-off-by: Alex Shi <alex.shi@linaro.org>
1 parent 7f42466 commit 4fc54a3

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

arch/arm64/mm/hugetlbpage.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
200200
ncontig = find_num_contig(mm, addr, cpte, *cpte, &pgsize);
201201
/* save the 1st pte to return */
202202
pte = ptep_get_and_clear(mm, addr, cpte);
203-
for (i = 1; i < ncontig; ++i) {
203+
for (i = 1, addr += pgsize; i < ncontig; ++i, addr += pgsize) {
204204
/*
205205
* If HW_AFDBM is enabled, then the HW could
206206
* turn on the dirty bit for any of the page
@@ -238,7 +238,7 @@ int huge_ptep_set_access_flags(struct vm_area_struct *vma,
238238
pfn = pte_pfn(*cpte);
239239
ncontig = find_num_contig(vma->vm_mm, addr, cpte,
240240
*cpte, &pgsize);
241-
for (i = 0; i < ncontig; ++i, ++cpte) {
241+
for (i = 0; i < ncontig; ++i, ++cpte, addr += pgsize) {
242242
changed = ptep_set_access_flags(vma, addr, cpte,
243243
pfn_pte(pfn,
244244
hugeprot),
@@ -261,7 +261,7 @@ void huge_ptep_set_wrprotect(struct mm_struct *mm,
261261

262262
cpte = huge_pte_offset(mm, addr);
263263
ncontig = find_num_contig(mm, addr, cpte, *cpte, &pgsize);
264-
for (i = 0; i < ncontig; ++i, ++cpte)
264+
for (i = 0; i < ncontig; ++i, ++cpte, addr += pgsize)
265265
ptep_set_wrprotect(mm, addr, cpte);
266266
} else {
267267
ptep_set_wrprotect(mm, addr, ptep);
@@ -279,7 +279,7 @@ void huge_ptep_clear_flush(struct vm_area_struct *vma,
279279
cpte = huge_pte_offset(vma->vm_mm, addr);
280280
ncontig = find_num_contig(vma->vm_mm, addr, cpte,
281281
*cpte, &pgsize);
282-
for (i = 0; i < ncontig; ++i, ++cpte)
282+
for (i = 0; i < ncontig; ++i, ++cpte, addr += pgsize)
283283
ptep_clear_flush(vma, addr, cpte);
284284
} else {
285285
ptep_clear_flush(vma, addr, ptep);

0 commit comments

Comments
 (0)