Re: [PATCH 1/3] drivers/gpu/drm/via: convert put_page() to put_user_page*()

From: Christoph Hellwig
Date: Mon Jul 22 2019 - 05:34:01 EST


On Sun, Jul 21, 2019 at 09:30:10PM -0700, john.hubbard@xxxxxxxxx wrote:
> for (i = 0; i < vsg->num_pages; ++i) {
> if (NULL != (page = vsg->pages[i])) {
> if (!PageReserved(page) && (DMA_FROM_DEVICE == vsg->direction))
> - SetPageDirty(page);
> - put_page(page);
> + put_user_pages_dirty(&page, 1);
> + else
> + put_user_page(page);
> }

Can't just pass a dirty argument to put_user_pages? Also do we really
need a separate put_user_page for the single page case?
put_user_pages_dirty?

Also the PageReserved check looks bogus, as I can't see how a reserved
page can end up here. So IMHO the above snippled should really look
something like this:

put_user_pages(vsg->pages[i], vsg->num_pages,
vsg->direction == DMA_FROM_DEVICE);

in the end.