diff options
author | Souptick Joarder <jrdr.linux@gmail.com> | 2018-05-29 09:47:27 -0400 |
---|---|---|
committer | Lucas Stach <l.stach@pengutronix.de> | 2018-08-06 09:24:18 -0400 |
commit | cfad05a24dcb2bf09ba6438e0843c6a0ed90381c (patch) | |
tree | b21454557122ace82b66a31284b644359194ee2b | |
parent | a0780bb1df60f00e4573db7bd53e7039e9eee1cb (diff) |
drm/etnaviv: change return type to vm_fault_t
Use new return type vm_fault_t for fault handler. For
now, this is just documenting that the function returns
a VM_FAULT value rather than an errno. Once all instances
are converted, vm_fault_t will become a distinct type.
Ref- commit 1c8f422059ae ("mm: change return type to vm_fault_t")
Previously vm_insert_page() returns err which driver
mapped into VM_FAULT_* type. The new function
vmf_insert_page() will replace this inefficiency by
returning VM_FAULT_* type.
vmf_error() is the newly introduce inline function
in 4.17-rc6.
Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
Reviewed-by: Matthew Wilcox <mawilcox@microsoft.com>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_drv.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gem.c | 37 |
2 files changed, 11 insertions, 29 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.h b/drivers/gpu/drm/etnaviv/etnaviv_drv.h index d36c7bbe66db..8d02d1b7dcf5 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.h +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.h | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/time64.h> | 18 | #include <linux/time64.h> |
19 | #include <linux/types.h> | 19 | #include <linux/types.h> |
20 | #include <linux/sizes.h> | 20 | #include <linux/sizes.h> |
21 | #include <linux/mm_types.h> | ||
21 | 22 | ||
22 | #include <drm/drmP.h> | 23 | #include <drm/drmP.h> |
23 | #include <drm/drm_crtc_helper.h> | 24 | #include <drm/drm_crtc_helper.h> |
@@ -53,7 +54,7 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data, | |||
53 | struct drm_file *file); | 54 | struct drm_file *file); |
54 | 55 | ||
55 | int etnaviv_gem_mmap(struct file *filp, struct vm_area_struct *vma); | 56 | int etnaviv_gem_mmap(struct file *filp, struct vm_area_struct *vma); |
56 | int etnaviv_gem_fault(struct vm_fault *vmf); | 57 | vm_fault_t etnaviv_gem_fault(struct vm_fault *vmf); |
57 | int etnaviv_gem_mmap_offset(struct drm_gem_object *obj, u64 *offset); | 58 | int etnaviv_gem_mmap_offset(struct drm_gem_object *obj, u64 *offset); |
58 | struct sg_table *etnaviv_gem_prime_get_sg_table(struct drm_gem_object *obj); | 59 | struct sg_table *etnaviv_gem_prime_get_sg_table(struct drm_gem_object *obj); |
59 | void *etnaviv_gem_prime_vmap(struct drm_gem_object *obj); | 60 | void *etnaviv_gem_prime_vmap(struct drm_gem_object *obj); |
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c index 209ef1274b80..1fa74226db91 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c | |||
@@ -169,31 +169,30 @@ int etnaviv_gem_mmap(struct file *filp, struct vm_area_struct *vma) | |||
169 | return obj->ops->mmap(obj, vma); | 169 | return obj->ops->mmap(obj, vma); |
170 | } | 170 | } |
171 | 171 | ||
172 | int etnaviv_gem_fault(struct vm_fault *vmf) | 172 | vm_fault_t etnaviv_gem_fault(struct vm_fault *vmf) |
173 | { | 173 | { |
174 | struct vm_area_struct *vma = vmf->vma; | 174 | struct vm_area_struct *vma = vmf->vma; |
175 | struct drm_gem_object *obj = vma->vm_private_data; | 175 | struct drm_gem_object *obj = vma->vm_private_data; |
176 | struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj); | 176 | struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj); |
177 | struct page **pages, *page; | 177 | struct page **pages, *page; |
178 | pgoff_t pgoff; | 178 | pgoff_t pgoff; |
179 | int ret; | 179 | int err; |
180 | 180 | ||
181 | /* | 181 | /* |
182 | * Make sure we don't parallel update on a fault, nor move or remove | 182 | * Make sure we don't parallel update on a fault, nor move or remove |
183 | * something from beneath our feet. Note that vm_insert_page() is | 183 | * something from beneath our feet. Note that vmf_insert_page() is |
184 | * specifically coded to take care of this, so we don't have to. | 184 | * specifically coded to take care of this, so we don't have to. |
185 | */ | 185 | */ |
186 | ret = mutex_lock_interruptible(&etnaviv_obj->lock); | 186 | err = mutex_lock_interruptible(&etnaviv_obj->lock); |
187 | if (ret) | 187 | if (err) |
188 | goto out; | 188 | return VM_FAULT_NOPAGE; |
189 | |||
190 | /* make sure we have pages attached now */ | 189 | /* make sure we have pages attached now */ |
191 | pages = etnaviv_gem_get_pages(etnaviv_obj); | 190 | pages = etnaviv_gem_get_pages(etnaviv_obj); |
192 | mutex_unlock(&etnaviv_obj->lock); | 191 | mutex_unlock(&etnaviv_obj->lock); |
193 | 192 | ||
194 | if (IS_ERR(pages)) { | 193 | if (IS_ERR(pages)) { |
195 | ret = PTR_ERR(pages); | 194 | err = PTR_ERR(pages); |
196 | goto out; | 195 | return vmf_error(err); |
197 | } | 196 | } |
198 | 197 | ||
199 | /* We don't use vmf->pgoff since that has the fake offset: */ | 198 | /* We don't use vmf->pgoff since that has the fake offset: */ |
@@ -204,25 +203,7 @@ int etnaviv_gem_fault(struct vm_fault *vmf) | |||
204 | VERB("Inserting %p pfn %lx, pa %lx", (void *)vmf->address, | 203 | VERB("Inserting %p pfn %lx, pa %lx", (void *)vmf->address, |
205 | page_to_pfn(page), page_to_pfn(page) << PAGE_SHIFT); | 204 | page_to_pfn(page), page_to_pfn(page) << PAGE_SHIFT); |
206 | 205 | ||
207 | ret = vm_insert_page(vma, vmf->address, page); | 206 | return vmf_insert_page(vma, vmf->address, page); |
208 | |||
209 | out: | ||
210 | switch (ret) { | ||
211 | case -EAGAIN: | ||
212 | case 0: | ||
213 | case -ERESTARTSYS: | ||
214 | case -EINTR: | ||
215 | case -EBUSY: | ||
216 | /* | ||
217 | * EBUSY is ok: this just means that another thread | ||
218 | * already did the job. | ||
219 | */ | ||
220 | return VM_FAULT_NOPAGE; | ||
221 | case -ENOMEM: | ||
222 | return VM_FAULT_OOM; | ||
223 | default: | ||
224 | return VM_FAULT_SIGBUS; | ||
225 | } | ||
226 | } | 207 | } |
227 | 208 | ||
228 | int etnaviv_gem_mmap_offset(struct drm_gem_object *obj, u64 *offset) | 209 | int etnaviv_gem_mmap_offset(struct drm_gem_object *obj, u64 *offset) |