| 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); |
| } |
| } |
| _ |