blob: 49e982d7d6679db6aca2a2c7ae486852957bb906 [file] [log] [blame]
From: Matthew Wilcox <willy@infradead.org>
Subject: ia64-implement-the-new-page-table-range-api-fix
Date: Wed, 9 Aug 2023 20:12:56 +0100
fix folio_size() handling
Link: https://lkml.kernel.org/r/ZNPlOCe8F+nrzPxr@casper.infradead.org
Signed-off-by: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
arch/ia64/hp/common/sba_iommu.c | 6 +++++-
arch/ia64/mm/init.c | 6 +++++-
2 files changed, 10 insertions(+), 2 deletions(-)
--- a/arch/ia64/hp/common/sba_iommu.c~ia64-implement-the-new-page-table-range-api-fix
+++ a/arch/ia64/hp/common/sba_iommu.c
@@ -811,12 +811,16 @@ static void mark_clean(void *addr, size_
if (offset) {
left -= folio_size(folio) - offset;
+ if (left <= 0)
+ return;
folio = folio_next(folio);
}
while (left >= folio_size(folio)) {
- set_bit(PG_arch_1, &folio->flags);
left -= folio_size(folio);
+ set_bit(PG_arch_1, &folio->flags);
+ if (!left)
+ break;
folio = folio_next(folio);
}
}
--- a/arch/ia64/mm/init.c~ia64-implement-the-new-page-table-range-api-fix
+++ a/arch/ia64/mm/init.c
@@ -76,12 +76,16 @@ void arch_dma_mark_clean(phys_addr_t pad
if (offset) {
left -= folio_size(folio) - offset;
+ if (left <= 0)
+ return;
folio = folio_next(folio);
}
while (left >= (ssize_t)folio_size(folio)) {
- set_bit(PG_arch_1, &pfn_to_page(pfn)->flags);
left -= folio_size(folio);
+ set_bit(PG_arch_1, &pfn_to_page(pfn)->flags);
+ if (!left)
+ break;
folio = folio_next(folio);
}
}
_