diff options
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r-- | drivers/infiniband/hw/mthca/mthca_memfree.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_user_pages.c | 3 | ||||
-rw-r--r-- | drivers/infiniband/hw/usnic/usnic_uiom.c | 5 |
3 files changed, 7 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_memfree.c b/drivers/infiniband/hw/mthca/mthca_memfree.c index 6c00d04b8b28..c6fe89d79248 100644 --- a/drivers/infiniband/hw/mthca/mthca_memfree.c +++ b/drivers/infiniband/hw/mthca/mthca_memfree.c | |||
@@ -472,7 +472,7 @@ int mthca_map_user_db(struct mthca_dev *dev, struct mthca_uar *uar, | |||
472 | goto out; | 472 | goto out; |
473 | } | 473 | } |
474 | 474 | ||
475 | ret = get_user_pages(uaddr & PAGE_MASK, 1, 1, 0, pages, NULL); | 475 | ret = get_user_pages(uaddr & PAGE_MASK, 1, FOLL_WRITE, pages, NULL); |
476 | if (ret < 0) | 476 | if (ret < 0) |
477 | goto out; | 477 | goto out; |
478 | 478 | ||
diff --git a/drivers/infiniband/hw/qib/qib_user_pages.c b/drivers/infiniband/hw/qib/qib_user_pages.c index 2d2b94fd3633..75f08624ac05 100644 --- a/drivers/infiniband/hw/qib/qib_user_pages.c +++ b/drivers/infiniband/hw/qib/qib_user_pages.c | |||
@@ -67,7 +67,8 @@ static int __qib_get_user_pages(unsigned long start_page, size_t num_pages, | |||
67 | 67 | ||
68 | for (got = 0; got < num_pages; got += ret) { | 68 | for (got = 0; got < num_pages; got += ret) { |
69 | ret = get_user_pages(start_page + got * PAGE_SIZE, | 69 | ret = get_user_pages(start_page + got * PAGE_SIZE, |
70 | num_pages - got, 1, 1, | 70 | num_pages - got, |
71 | FOLL_WRITE | FOLL_FORCE, | ||
71 | p + got, NULL); | 72 | p + got, NULL); |
72 | if (ret < 0) | 73 | if (ret < 0) |
73 | goto bail_release; | 74 | goto bail_release; |
diff --git a/drivers/infiniband/hw/usnic/usnic_uiom.c b/drivers/infiniband/hw/usnic/usnic_uiom.c index a0b6ebee4d8a..1ccee6ea5bc3 100644 --- a/drivers/infiniband/hw/usnic/usnic_uiom.c +++ b/drivers/infiniband/hw/usnic/usnic_uiom.c | |||
@@ -111,6 +111,7 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable, | |||
111 | int i; | 111 | int i; |
112 | int flags; | 112 | int flags; |
113 | dma_addr_t pa; | 113 | dma_addr_t pa; |
114 | unsigned int gup_flags; | ||
114 | 115 | ||
115 | if (!can_do_mlock()) | 116 | if (!can_do_mlock()) |
116 | return -EPERM; | 117 | return -EPERM; |
@@ -135,6 +136,8 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable, | |||
135 | 136 | ||
136 | flags = IOMMU_READ | IOMMU_CACHE; | 137 | flags = IOMMU_READ | IOMMU_CACHE; |
137 | flags |= (writable) ? IOMMU_WRITE : 0; | 138 | flags |= (writable) ? IOMMU_WRITE : 0; |
139 | gup_flags = FOLL_WRITE; | ||
140 | gup_flags |= (writable) ? 0 : FOLL_FORCE; | ||
138 | cur_base = addr & PAGE_MASK; | 141 | cur_base = addr & PAGE_MASK; |
139 | ret = 0; | 142 | ret = 0; |
140 | 143 | ||
@@ -142,7 +145,7 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable, | |||
142 | ret = get_user_pages(cur_base, | 145 | ret = get_user_pages(cur_base, |
143 | min_t(unsigned long, npages, | 146 | min_t(unsigned long, npages, |
144 | PAGE_SIZE / sizeof(struct page *)), | 147 | PAGE_SIZE / sizeof(struct page *)), |
145 | 1, !writable, page_list, NULL); | 148 | gup_flags, page_list, NULL); |
146 | 149 | ||
147 | if (ret < 0) | 150 | if (ret < 0) |
148 | goto out; | 151 | goto out; |