Re: [Linux-kernel-mentees][PATCH v6 1/2] sgi-gru: Convert put_page() to put_user_page*()
On 8/20/19 1:18 AM, Michal Hocko wrote: On Mon 19-08-19 12:30:18, John Hubbard wrote: On 8/19/19 12:06 PM, Bharath Vedartham wrote: On Mon, Aug 19, 2019 at 07:56:11AM -0500, Dimitri Sivanich wrote: ... Conversion of gup/put_page sites: Before: get_user_pages(...); ... for each page: put_page(); After: gup_flags |= FOLL_PIN; (maybe FOLL_LONGTERM in some cases) vaddr_pin_user_pages(...gup_flags...) I was hoping that FOLL_PIN would be handled by vaddr_pin_user_pages. Good point: now that we've got the 4 cases summarized, it turns out that either FOLL_PIN is required, or there is no need to call vaddr_pin_user_pages() at all. So we can go back to setting FOLL_PIN inside it, which is of course much better for maintenance. Great! ... vaddr_unpin_user_pages(); /* which invokes put_user_page() */ Fortunately, it's not harmful for the simpler conversion from put_page() to put_user_page() to happen first, and in fact those have usually led to simplifications, paving the way to make it easier to call vaddr_unpin_user_pages(), once it's ready. (And showing exactly what to convert, too.) If that makes the later conversion easier then no real objections from me. Assuming that the current put_user_page conversions are correct of course (I have the mlock one and potentials that falls into the same category in mind). Agreed: only correct conversions should be done. Not the incorrect ones. ahem. :) thanks, -- John Hubbard NVIDIA
Re: [Linux-kernel-mentees][PATCH v6 1/2] sgi-gru: Convert put_page() to put_user_page*()
On Mon, Aug 19, 2019 at 12:30:18PM -0700, John Hubbard wrote: > On 8/19/19 12:06 PM, Bharath Vedartham wrote: > >On Mon, Aug 19, 2019 at 07:56:11AM -0500, Dimitri Sivanich wrote: > >>Reviewed-by: Dimitri Sivanich > >Thanks! > > > >John, would you like to take this patch into your miscellaneous > >conversions patch set? > > > > (+Andrew and Michal, so they know where all this is going.) > > Sure, although that conversion series [1] is on a brief hold, because > there are additional conversions desired, and the API is still under > discussion. Also, reading between the lines of Michal's response [2] > about it, I think people would prefer that the next revision include > the following, for each conversion site: > > Conversion of gup/put_page sites: > > Before: > > get_user_pages(...); > ... > for each page: > put_page(); > > After: > > gup_flags |= FOLL_PIN; (maybe FOLL_LONGTERM in some cases) > vaddr_pin_user_pages(...gup_flags...) > ... > vaddr_unpin_user_pages(); /* which invokes put_user_page() */ > > Fortunately, it's not harmful for the simpler conversion from put_page() > to put_user_page() to happen first, and in fact those have usually led > to simplifications, paving the way to make it easier to call > vaddr_unpin_user_pages(), once it's ready. (And showing exactly what > to convert, too.) > > So for now, I'm going to just build on top of Ira's tree, and once the > vaddr*() API settles down, I'll send out an updated series that attempts > to include the reviews and ACKs so far (I'll have to review them, but > make a note that review or ACK was done for part of the conversion), > and adds the additional gup(FOLL_PIN), and uses vaddr*() wrappers instead of > gup/pup. > > [1] https://lore.kernel.org/r/20190807013340.9706-1-jhubb...@nvidia.com > > [2] https://lore.kernel.org/r/20190809175210.gr18...@dhcp22.suse.cz > Cc' lkml(I missed out the 'l' in this series). sounds good. It makes sense to keep the entire gup in the kernel rather than to expose it outside. I ll make sure to checkout the emails on vaddr*() API and pace my work on it accordingly. Thank you Bharath > thanks, > -- > John Hubbard > NVIDIA
Re: [Linux-kernel-mentees][PATCH v6 1/2] sgi-gru: Convert put_page() to put_user_page*()
On Mon 19-08-19 12:30:18, John Hubbard wrote: > On 8/19/19 12:06 PM, Bharath Vedartham wrote: > > On Mon, Aug 19, 2019 at 07:56:11AM -0500, Dimitri Sivanich wrote: > > > Reviewed-by: Dimitri Sivanich > > Thanks! > > > > John, would you like to take this patch into your miscellaneous > > conversions patch set? > > > > (+Andrew and Michal, so they know where all this is going.) > > Sure, although that conversion series [1] is on a brief hold, because > there are additional conversions desired, and the API is still under > discussion. Also, reading between the lines of Michal's response [2] > about it, I think people would prefer that the next revision include > the following, for each conversion site: > > Conversion of gup/put_page sites: > > Before: > > get_user_pages(...); > ... > for each page: > put_page(); > > After: > > gup_flags |= FOLL_PIN; (maybe FOLL_LONGTERM in some cases) > vaddr_pin_user_pages(...gup_flags...) I was hoping that FOLL_PIN would be handled by vaddr_pin_user_pages. > ... > vaddr_unpin_user_pages(); /* which invokes put_user_page() */ > > Fortunately, it's not harmful for the simpler conversion from put_page() > to put_user_page() to happen first, and in fact those have usually led > to simplifications, paving the way to make it easier to call > vaddr_unpin_user_pages(), once it's ready. (And showing exactly what > to convert, too.) If that makes the later conversion easier then no real objections from me. Assuming that the current put_user_page conversions are correct of course (I have the mlock one and potentials that falls into the same category in mind). -- Michal Hocko SUSE Labs
Re: [Linux-kernel-mentees][PATCH v6 1/2] sgi-gru: Convert put_page() to put_user_page*()
On 8/19/19 12:06 PM, Bharath Vedartham wrote: On Mon, Aug 19, 2019 at 07:56:11AM -0500, Dimitri Sivanich wrote: Reviewed-by: Dimitri Sivanich Thanks! John, would you like to take this patch into your miscellaneous conversions patch set? (+Andrew and Michal, so they know where all this is going.) Sure, although that conversion series [1] is on a brief hold, because there are additional conversions desired, and the API is still under discussion. Also, reading between the lines of Michal's response [2] about it, I think people would prefer that the next revision include the following, for each conversion site: Conversion of gup/put_page sites: Before: get_user_pages(...); ... for each page: put_page(); After: gup_flags |= FOLL_PIN; (maybe FOLL_LONGTERM in some cases) vaddr_pin_user_pages(...gup_flags...) ... vaddr_unpin_user_pages(); /* which invokes put_user_page() */ Fortunately, it's not harmful for the simpler conversion from put_page() to put_user_page() to happen first, and in fact those have usually led to simplifications, paving the way to make it easier to call vaddr_unpin_user_pages(), once it's ready. (And showing exactly what to convert, too.) So for now, I'm going to just build on top of Ira's tree, and once the vaddr*() API settles down, I'll send out an updated series that attempts to include the reviews and ACKs so far (I'll have to review them, but make a note that review or ACK was done for part of the conversion), and adds the additional gup(FOLL_PIN), and uses vaddr*() wrappers instead of gup/pup. [1] https://lore.kernel.org/r/20190807013340.9706-1-jhubb...@nvidia.com [2] https://lore.kernel.org/r/20190809175210.gr18...@dhcp22.suse.cz thanks, -- John Hubbard NVIDIA
Re: [Linux-kernel-mentees][PATCH v6 1/2] sgi-gru: Convert put_page() to put_user_page*()
On Mon, Aug 19, 2019 at 07:56:11AM -0500, Dimitri Sivanich wrote: > Reviewed-by: Dimitri Sivanich Thanks! John, would you like to take this patch into your miscellaneous conversions patch set? Thank you Bharath > On Mon, Aug 19, 2019 at 01:08:54AM +0530, Bharath Vedartham wrote: > > For pages that were retained via get_user_pages*(), release those pages > > via the new put_user_page*() routines, instead of via put_page() or > > release_pages(). > > > > This is part a tree-wide conversion, as described in commit fc1d8e7cca2d > > ("mm: introduce put_user_page*(), placeholder versions"). > > > > Cc: Ira Weiny > > Cc: John Hubbard > > Cc: Jérôme Glisse > > Cc: Greg Kroah-Hartman > > Cc: Dimitri Sivanich > > Cc: Arnd Bergmann > > Cc: William Kucharski > > Cc: Christoph Hellwig > > Cc: linux-kernel@vger.kernel.org > > Cc: linux...@kvack.org > > Cc: linux-kernel-ment...@lists.linuxfoundation.org > > Reviewed-by: Ira Weiny > > Reviewed-by: John Hubbard > > Reviewed-by: William Kucharski > > Signed-off-by: Bharath Vedartham > > --- > > drivers/misc/sgi-gru/grufault.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/misc/sgi-gru/grufault.c > > b/drivers/misc/sgi-gru/grufault.c > > index 4b713a8..61b3447 100644 > > --- a/drivers/misc/sgi-gru/grufault.c > > +++ b/drivers/misc/sgi-gru/grufault.c > > @@ -188,7 +188,7 @@ static int non_atomic_pte_lookup(struct vm_area_struct > > *vma, > > if (get_user_pages(vaddr, 1, write ? FOLL_WRITE : 0, , NULL) <= 0) > > return -EFAULT; > > *paddr = page_to_phys(page); > > - put_page(page); > > + put_user_page(page); > > return 0; > > } > > > > -- > > 2.7.4 > >
Re: [Linux-kernel-mentees][PATCH v6 1/2] sgi-gru: Convert put_page() to put_user_page*()
Reviewed-by: Dimitri Sivanich On Mon, Aug 19, 2019 at 01:08:54AM +0530, Bharath Vedartham wrote: > For pages that were retained via get_user_pages*(), release those pages > via the new put_user_page*() routines, instead of via put_page() or > release_pages(). > > This is part a tree-wide conversion, as described in commit fc1d8e7cca2d > ("mm: introduce put_user_page*(), placeholder versions"). > > Cc: Ira Weiny > Cc: John Hubbard > Cc: Jérôme Glisse > Cc: Greg Kroah-Hartman > Cc: Dimitri Sivanich > Cc: Arnd Bergmann > Cc: William Kucharski > Cc: Christoph Hellwig > Cc: linux-kernel@vger.kernel.org > Cc: linux...@kvack.org > Cc: linux-kernel-ment...@lists.linuxfoundation.org > Reviewed-by: Ira Weiny > Reviewed-by: John Hubbard > Reviewed-by: William Kucharski > Signed-off-by: Bharath Vedartham > --- > drivers/misc/sgi-gru/grufault.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/misc/sgi-gru/grufault.c b/drivers/misc/sgi-gru/grufault.c > index 4b713a8..61b3447 100644 > --- a/drivers/misc/sgi-gru/grufault.c > +++ b/drivers/misc/sgi-gru/grufault.c > @@ -188,7 +188,7 @@ static int non_atomic_pte_lookup(struct vm_area_struct > *vma, > if (get_user_pages(vaddr, 1, write ? FOLL_WRITE : 0, , NULL) <= 0) > return -EFAULT; > *paddr = page_to_phys(page); > - put_page(page); > + put_user_page(page); > return 0; > } > > -- > 2.7.4 >
Re: [Linux-kernel-mentees][PATCH v6 1/2] sgi-gru: Convert put_page() to put_user_page*()
CC'ing lkml. On Mon, Aug 19, 2019 at 01:08:54AM +0530, Bharath Vedartham wrote: > For pages that were retained via get_user_pages*(), release those pages > via the new put_user_page*() routines, instead of via put_page() or > release_pages(). > > This is part a tree-wide conversion, as described in commit fc1d8e7cca2d > ("mm: introduce put_user_page*(), placeholder versions"). > > Cc: Ira Weiny > Cc: John Hubbard > Cc: Jérôme Glisse > Cc: Greg Kroah-Hartman > Cc: Dimitri Sivanich > Cc: Arnd Bergmann > Cc: William Kucharski > Cc: Christoph Hellwig > Cc: linux-kernel@vger.kernel.org > Cc: linux...@kvack.org > Cc: linux-kernel-ment...@lists.linuxfoundation.org > Reviewed-by: Ira Weiny > Reviewed-by: John Hubbard > Reviewed-by: William Kucharski > Signed-off-by: Bharath Vedartham > --- > drivers/misc/sgi-gru/grufault.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/misc/sgi-gru/grufault.c b/drivers/misc/sgi-gru/grufault.c > index 4b713a8..61b3447 100644 > --- a/drivers/misc/sgi-gru/grufault.c > +++ b/drivers/misc/sgi-gru/grufault.c > @@ -188,7 +188,7 @@ static int non_atomic_pte_lookup(struct vm_area_struct > *vma, > if (get_user_pages(vaddr, 1, write ? FOLL_WRITE : 0, , NULL) <= 0) > return -EFAULT; > *paddr = page_to_phys(page); > - put_page(page); > + put_user_page(page); > return 0; > } > > -- > 2.7.4 >