Message ID | 20190919100223.13309-8-kraxel@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm: rework mmap() workflow | expand |
Hi Am 19.09.19 um 12:02 schrieb Gerd Hoffmann: > Rename ttm_fbdev_mmap to ttm_bo_mmap_obj. Move the vm_pgoff sanity > check to amdgpu_bo_fbdev_mmap (only ttm_fbdev_mmap user in tree). > > The ttm_bo_mmap_obj function can now be used to map any buffer object. > This allows to implement &drm_gem_object_funcs.mmap in gem ttm helpers. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Thanks. I find this to be a much cleaner interface than before. Acked-by: Thomas Zimmermann <tzimmermann@suse.de> Best regards Thomas > --- > include/drm/ttm/ttm_bo_api.h | 10 ++++------ > drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 5 ++++- > drivers/gpu/drm/ttm/ttm_bo_vm.c | 8 ++------ > 3 files changed, 10 insertions(+), 13 deletions(-) > > diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h > index 43c4929a2171..d2277e06316d 100644 > --- a/include/drm/ttm/ttm_bo_api.h > +++ b/include/drm/ttm/ttm_bo_api.h > @@ -710,16 +710,14 @@ int ttm_bo_kmap(struct ttm_buffer_object *bo, unsigned long start_page, > void ttm_bo_kunmap(struct ttm_bo_kmap_obj *map); > > /** > - * ttm_fbdev_mmap - mmap fbdev memory backed by a ttm buffer object. > + * ttm_bo_mmap_obj - mmap memory backed by a ttm buffer object. > * > * @vma: vma as input from the fbdev mmap method. > - * @bo: The bo backing the address space. The address space will > - * have the same size as the bo, and start at offset 0. > + * @bo: The bo backing the address space. > * > - * This function is intended to be called by the fbdev mmap method > - * if the fbdev address space is to be backed by a bo. > + * Maps a buffer object. > */ > -int ttm_fbdev_mmap(struct vm_area_struct *vma, struct ttm_buffer_object *bo); > +int ttm_bo_mmap_obj(struct vm_area_struct *vma, struct ttm_buffer_object *bo); > > /** > * ttm_bo_mmap - mmap out of the ttm device address space. > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > index 2f11ebd95528..e5447e0d8b88 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > @@ -1051,7 +1051,10 @@ void amdgpu_bo_fini(struct amdgpu_device *adev) > int amdgpu_bo_fbdev_mmap(struct amdgpu_bo *bo, > struct vm_area_struct *vma) > { > - return ttm_fbdev_mmap(vma, &bo->tbo); > + if (vma->vm_pgoff != 0) > + return -EACCES; > + > + return ttm_bo_mmap_obj(vma, &bo->tbo); > } > > /** > diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c > index b5314ef85a3d..6688d7893161 100644 > --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c > +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c > @@ -479,14 +479,10 @@ int ttm_bo_mmap(struct file *filp, struct vm_area_struct *vma, > } > EXPORT_SYMBOL(ttm_bo_mmap); > > -int ttm_fbdev_mmap(struct vm_area_struct *vma, struct ttm_buffer_object *bo) > +int ttm_bo_mmap_obj(struct vm_area_struct *vma, struct ttm_buffer_object *bo) > { > - if (vma->vm_pgoff != 0) > - return -EACCES; > - > ttm_bo_get(bo); > - > ttm_bo_mmap_vma_setup(bo, vma); > return 0; > } > -EXPORT_SYMBOL(ttm_fbdev_mmap); > +EXPORT_SYMBOL(ttm_bo_mmap_obj); >
diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h index 43c4929a2171..d2277e06316d 100644 --- a/include/drm/ttm/ttm_bo_api.h +++ b/include/drm/ttm/ttm_bo_api.h @@ -710,16 +710,14 @@ int ttm_bo_kmap(struct ttm_buffer_object *bo, unsigned long start_page, void ttm_bo_kunmap(struct ttm_bo_kmap_obj *map); /** - * ttm_fbdev_mmap - mmap fbdev memory backed by a ttm buffer object. + * ttm_bo_mmap_obj - mmap memory backed by a ttm buffer object. * * @vma: vma as input from the fbdev mmap method. - * @bo: The bo backing the address space. The address space will - * have the same size as the bo, and start at offset 0. + * @bo: The bo backing the address space. * - * This function is intended to be called by the fbdev mmap method - * if the fbdev address space is to be backed by a bo. + * Maps a buffer object. */ -int ttm_fbdev_mmap(struct vm_area_struct *vma, struct ttm_buffer_object *bo); +int ttm_bo_mmap_obj(struct vm_area_struct *vma, struct ttm_buffer_object *bo); /** * ttm_bo_mmap - mmap out of the ttm device address space. diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 2f11ebd95528..e5447e0d8b88 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -1051,7 +1051,10 @@ void amdgpu_bo_fini(struct amdgpu_device *adev) int amdgpu_bo_fbdev_mmap(struct amdgpu_bo *bo, struct vm_area_struct *vma) { - return ttm_fbdev_mmap(vma, &bo->tbo); + if (vma->vm_pgoff != 0) + return -EACCES; + + return ttm_bo_mmap_obj(vma, &bo->tbo); } /** diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c index b5314ef85a3d..6688d7893161 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c @@ -479,14 +479,10 @@ int ttm_bo_mmap(struct file *filp, struct vm_area_struct *vma, } EXPORT_SYMBOL(ttm_bo_mmap); -int ttm_fbdev_mmap(struct vm_area_struct *vma, struct ttm_buffer_object *bo) +int ttm_bo_mmap_obj(struct vm_area_struct *vma, struct ttm_buffer_object *bo) { - if (vma->vm_pgoff != 0) - return -EACCES; - ttm_bo_get(bo); - ttm_bo_mmap_vma_setup(bo, vma); return 0; } -EXPORT_SYMBOL(ttm_fbdev_mmap); +EXPORT_SYMBOL(ttm_bo_mmap_obj);
Rename ttm_fbdev_mmap to ttm_bo_mmap_obj. Move the vm_pgoff sanity check to amdgpu_bo_fbdev_mmap (only ttm_fbdev_mmap user in tree). The ttm_bo_mmap_obj function can now be used to map any buffer object. This allows to implement &drm_gem_object_funcs.mmap in gem ttm helpers. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- include/drm/ttm/ttm_bo_api.h | 10 ++++------ drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 5 ++++- drivers/gpu/drm/ttm/ttm_bo_vm.c | 8 ++------ 3 files changed, 10 insertions(+), 13 deletions(-)