projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git]
/
drivers
/
infiniband
/
core
/
umem.c
diff --git
a/drivers/infiniband/core/umem.c
b/drivers/infiniband/core/umem.c
index
c68746c
..
224ad27
100644
(file)
--- a/
drivers/infiniband/core/umem.c
+++ b/
drivers/infiniband/core/umem.c
@@
-94,6
+94,7
@@
struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
unsigned long dma_attrs = 0;
struct scatterlist *sg, *sg_list_start;
int need_release = 0;
unsigned long dma_attrs = 0;
struct scatterlist *sg, *sg_list_start;
int need_release = 0;
+ unsigned int gup_flags = FOLL_WRITE;
if (dmasync)
dma_attrs |= DMA_ATTR_WRITE_BARRIER;
if (dmasync)
dma_attrs |= DMA_ATTR_WRITE_BARRIER;
@@
-183,6
+184,9
@@
struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
if (ret)
goto out;
if (ret)
goto out;
+ if (!umem->writable)
+ gup_flags |= FOLL_FORCE;
+
need_release = 1;
sg_list_start = umem->sg_head.sgl;
need_release = 1;
sg_list_start = umem->sg_head.sgl;
@@
-190,7
+194,7
@@
struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
ret = get_user_pages(cur_base,
min_t(unsigned long, npages,
PAGE_SIZE / sizeof (struct page *)),
ret = get_user_pages(cur_base,
min_t(unsigned long, npages,
PAGE_SIZE / sizeof (struct page *)),
-
1, !umem->writable
, page_list, vma_list);
+
gup_flags
, page_list, vma_list);
if (ret < 0)
goto out;
if (ret < 0)
goto out;