Message ID | 20250130100050.1868208-3-kirill.shutemov@linux.intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Get rid of PG_reclaim and rename PG_dropbehind | expand |
Hi Kirill, On Thu, Jan 30, 2025 at 12:00:40PM +0200, Kirill A. Shutemov wrote: > Use folios instead of pages. > > This is preparation for removing PG_reclaim. > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> > Acked-by: David Hildenbrand <david@redhat.com> looks good: Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com> Thanks, Andi
On Thu, Jan 30, 2025 at 12:00:40PM +0200, Kirill A. Shutemov wrote: > Use folios instead of pages. > > This is preparation for removing PG_reclaim. Well, this is a horrid little function. Rather than iterating just the dirty folios, it iterates all folios, then locks them before checking whether they're dirty. I don't know whether the comments are correct or the code is correct. This comment doesn't match with setting PageReclaim: * Leave mmapings intact (GTT will have been revoked on unbinding, * leaving only CPU mmapings around) and add those pages to the LRU * instead of invoking writeback so they are aged and paged out * as normal. so I wonder if Chris was confused about what PageReclaim actually does. Let's find out if he still remembers what he thought it did!
On Thu, Jan 30, 2025 at 12:00:40PM +0200, Kirill A. Shutemov wrote: > Use folios instead of pages. > > This is preparation for removing PG_reclaim. > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> > Acked-by: David Hildenbrand <david@redhat.com> > --- > drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 18 +++++++++--------- > 1 file changed, 9 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c > index fe69f2c8527d..9016832b20fc 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c > @@ -320,25 +320,25 @@ void __shmem_writeback(size_t size, struct address_space *mapping) > > /* Begin writeback on each dirty page */ > for (i = 0; i < size >> PAGE_SHIFT; i++) { With folio conversion, should the iteration step be folio_nr_pages() instead of 1? > - struct page *page; > + struct folio *folio; > > - page = find_lock_page(mapping, i); > - if (!page) > + folio = filemap_lock_folio(mapping, i); > + if (!folio) > continue; > > - if (!page_mapped(page) && clear_page_dirty_for_io(page)) { > + if (!folio_mapped(folio) && folio_clear_dirty_for_io(folio)) { > int ret; > > - SetPageReclaim(page); > - ret = mapping->a_ops->writepage(page, &wbc); > + folio_set_reclaim(folio); > + ret = mapping->a_ops->writepage(&folio->page, &wbc); > if (!PageWriteback(page)) > - ClearPageReclaim(page); > + folio_clear_reclaim(folio); > if (!ret) > goto put; > } > - unlock_page(page); > + folio_unlock(folio); > put: > - put_page(page); > + folio_put(folio); > } > } > > -- > 2.47.2 >
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c index fe69f2c8527d..9016832b20fc 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c @@ -320,25 +320,25 @@ void __shmem_writeback(size_t size, struct address_space *mapping) /* Begin writeback on each dirty page */ for (i = 0; i < size >> PAGE_SHIFT; i++) { - struct page *page; + struct folio *folio; - page = find_lock_page(mapping, i); - if (!page) + folio = filemap_lock_folio(mapping, i); + if (!folio) continue; - if (!page_mapped(page) && clear_page_dirty_for_io(page)) { + if (!folio_mapped(folio) && folio_clear_dirty_for_io(folio)) { int ret; - SetPageReclaim(page); - ret = mapping->a_ops->writepage(page, &wbc); + folio_set_reclaim(folio); + ret = mapping->a_ops->writepage(&folio->page, &wbc); if (!PageWriteback(page)) - ClearPageReclaim(page); + folio_clear_reclaim(folio); if (!ret) goto put; } - unlock_page(page); + folio_unlock(folio); put: - put_page(page); + folio_put(folio); } }