Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xen/privcmd: Convert get_user_pages*() to pin_user_pages*()

In 2019, we introduced pin_user_pages*() and now we are converting
get_user_pages*() to the new API as appropriate. [1] & [2] could
be referred for more information. This is case 5 as per document [1].

[1] Documentation/core-api/pin_user_pages.rst

[2] "Explicit pinning of user-space pages":
https://lwn.net/Articles/807108/

Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Paul Durrant <paul@xen.org>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Paul Durrant <xadimgnik@gmail.com>
Link: https://lore.kernel.org/r/1594525195-28345-4-git-send-email-jrdr.linux@gmail.com
Signed-off-by: Juergen Gross <jgross@suse.com>

authored by

Souptick Joarder and committed by
Juergen Gross
ff669aa8 a0c34d22

+2 -8
+2 -8
drivers/xen/privcmd.c
··· 594 594 if (requested > nr_pages) 595 595 return -ENOSPC; 596 596 597 - page_count = get_user_pages_fast( 597 + page_count = pin_user_pages_fast( 598 598 (unsigned long) kbufs[i].uptr, 599 599 requested, FOLL_WRITE, pages); 600 600 if (page_count < 0) ··· 610 610 611 611 static void unlock_pages(struct page *pages[], unsigned int nr_pages) 612 612 { 613 - unsigned int i; 614 - 615 - for (i = 0; i < nr_pages; i++) { 616 - if (!PageDirty(pages[i])) 617 - set_page_dirty_lock(pages[i]); 618 - put_page(pages[i]); 619 - } 613 + unpin_user_pages_dirty_lock(pages, nr_pages, true); 620 614 } 621 615 622 616 static long privcmd_ioctl_dm_op(struct file *file, void __user *udata)