Message ID | 20190317183438.2057-6-ira.weiny@intel.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add FOLL_LONGTERM to GUP fast and use it | expand |
On Sun, Mar 17, 2019 at 7:36 PM <ira.weiny@intel.com> wrote: > > From: Ira Weiny <ira.weiny@intel.com> > > Use the new FOLL_LONGTERM to get_user_pages_fast() to protect against > FS DAX pages being mapped. > > Signed-off-by: Ira Weiny <ira.weiny@intel.com> > --- > drivers/infiniband/hw/hfi1/user_pages.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/infiniband/hw/hfi1/user_pages.c b/drivers/infiniband/hw/hfi1/user_pages.c > index 78ccacaf97d0..6a7f9cd5a94e 100644 > --- a/drivers/infiniband/hw/hfi1/user_pages.c > +++ b/drivers/infiniband/hw/hfi1/user_pages.c > @@ -104,9 +104,11 @@ int hfi1_acquire_user_pages(struct mm_struct *mm, unsigned long vaddr, size_t np > bool writable, struct page **pages) > { > int ret; > + unsigned int gup_flags = writable ? FOLL_WRITE : 0; Maybe: unsigned int gup_flags = FOLL_LONGTERM | (writable ? FOLL_WRITE : 0); ? > > - ret = get_user_pages_fast(vaddr, npages, writable ? FOLL_WRITE : 0, > - pages); > + gup_flags |= FOLL_LONGTERM; > + > + ret = get_user_pages_fast(vaddr, npages, gup_flags, pages); > if (ret < 0) > return ret; > > -- > 2.20.1 >
On Fri, Mar 22, 2019 at 03:14:26PM -0700, Dan Williams wrote: > On Sun, Mar 17, 2019 at 7:36 PM <ira.weiny@intel.com> wrote: > > > > From: Ira Weiny <ira.weiny@intel.com> > > > > Use the new FOLL_LONGTERM to get_user_pages_fast() to protect against > > FS DAX pages being mapped. > > > > Signed-off-by: Ira Weiny <ira.weiny@intel.com> > > --- > > drivers/infiniband/hw/hfi1/user_pages.c | 6 ++++-- > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/infiniband/hw/hfi1/user_pages.c b/drivers/infiniband/hw/hfi1/user_pages.c > > index 78ccacaf97d0..6a7f9cd5a94e 100644 > > --- a/drivers/infiniband/hw/hfi1/user_pages.c > > +++ b/drivers/infiniband/hw/hfi1/user_pages.c > > @@ -104,9 +104,11 @@ int hfi1_acquire_user_pages(struct mm_struct *mm, unsigned long vaddr, size_t np > > bool writable, struct page **pages) > > { > > int ret; > > + unsigned int gup_flags = writable ? FOLL_WRITE : 0; > > Maybe: > > unsigned int gup_flags = FOLL_LONGTERM | (writable ? FOLL_WRITE : 0); > > ? Sure looks good. Ira > > > > > - ret = get_user_pages_fast(vaddr, npages, writable ? FOLL_WRITE : 0, > > - pages); > > + gup_flags |= FOLL_LONGTERM; > > + > > + ret = get_user_pages_fast(vaddr, npages, gup_flags, pages); > > if (ret < 0) > > return ret; > > > > -- > > 2.20.1 > > >
diff --git a/drivers/infiniband/hw/hfi1/user_pages.c b/drivers/infiniband/hw/hfi1/user_pages.c index 78ccacaf97d0..6a7f9cd5a94e 100644 --- a/drivers/infiniband/hw/hfi1/user_pages.c +++ b/drivers/infiniband/hw/hfi1/user_pages.c @@ -104,9 +104,11 @@ int hfi1_acquire_user_pages(struct mm_struct *mm, unsigned long vaddr, size_t np bool writable, struct page **pages) { int ret; + unsigned int gup_flags = writable ? FOLL_WRITE : 0; - ret = get_user_pages_fast(vaddr, npages, writable ? FOLL_WRITE : 0, - pages); + gup_flags |= FOLL_LONGTERM; + + ret = get_user_pages_fast(vaddr, npages, gup_flags, pages); if (ret < 0) return ret;