Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: Introduce GEM object functions

GEM object functions deprecate several similar callback interfaces in
struct drm_driver. This patch replaces the per-driver callbacks with
per-instance callbacks in amdgpu. The only exception is gem_prime_mmap,
which is non-trivial to convert.

v3:
* remove amdgpu_object.c from patch (Christian)
v2:
* move object-function instance to amdgpu_gem.c (Christian)
* set callbacks in amdgpu_gem_object_create() (Christian)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Christian König <christian.koenig@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200923102159.24084-2-tzimmermann@suse.de

+18 -16
-6
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
··· 1497 1497 .lastclose = amdgpu_driver_lastclose_kms, 1498 1498 .irq_handler = amdgpu_irq_handler, 1499 1499 .ioctls = amdgpu_ioctls_kms, 1500 - .gem_free_object_unlocked = amdgpu_gem_object_free, 1501 - .gem_open_object = amdgpu_gem_object_open, 1502 - .gem_close_object = amdgpu_gem_object_close, 1503 1500 .dumb_create = amdgpu_mode_dumb_create, 1504 1501 .dumb_map_offset = amdgpu_mode_dumb_mmap, 1505 1502 .fops = &amdgpu_driver_kms_fops, 1506 1503 1507 1504 .prime_handle_to_fd = drm_gem_prime_handle_to_fd, 1508 1505 .prime_fd_to_handle = drm_gem_prime_fd_to_handle, 1509 - .gem_prime_export = amdgpu_gem_prime_export, 1510 1506 .gem_prime_import = amdgpu_gem_prime_import, 1511 - .gem_prime_vmap = amdgpu_gem_prime_vmap, 1512 - .gem_prime_vunmap = amdgpu_gem_prime_vunmap, 1513 1507 .gem_prime_mmap = amdgpu_gem_prime_mmap, 1514 1508 1515 1509 .name = DRIVER_NAME,
+18 -5
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
··· 36 36 37 37 #include "amdgpu.h" 38 38 #include "amdgpu_display.h" 39 + #include "amdgpu_dma_buf.h" 39 40 #include "amdgpu_xgmi.h" 40 41 41 - void amdgpu_gem_object_free(struct drm_gem_object *gobj) 42 + static const struct drm_gem_object_funcs amdgpu_gem_object_funcs; 43 + 44 + static void amdgpu_gem_object_free(struct drm_gem_object *gobj) 42 45 { 43 46 struct amdgpu_bo *robj = gem_to_amdgpu_bo(gobj); 44 47 ··· 90 87 return r; 91 88 } 92 89 *obj = &bo->tbo.base; 90 + (*obj)->funcs = &amdgpu_gem_object_funcs; 93 91 94 92 return 0; 95 93 } ··· 123 119 * Call from drm_gem_handle_create which appear in both new and open ioctl 124 120 * case. 125 121 */ 126 - int amdgpu_gem_object_open(struct drm_gem_object *obj, 127 - struct drm_file *file_priv) 122 + static int amdgpu_gem_object_open(struct drm_gem_object *obj, 123 + struct drm_file *file_priv) 128 124 { 129 125 struct amdgpu_bo *abo = gem_to_amdgpu_bo(obj); 130 126 struct amdgpu_device *adev = amdgpu_ttm_adev(abo->tbo.bdev); ··· 156 152 return 0; 157 153 } 158 154 159 - void amdgpu_gem_object_close(struct drm_gem_object *obj, 160 - struct drm_file *file_priv) 155 + static void amdgpu_gem_object_close(struct drm_gem_object *obj, 156 + struct drm_file *file_priv) 161 157 { 162 158 struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj); 163 159 struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); ··· 214 210 "tables on GEM object close (%ld)\n", r); 215 211 ttm_eu_backoff_reservation(&ticket, &list); 216 212 } 213 + 214 + static const struct drm_gem_object_funcs amdgpu_gem_object_funcs = { 215 + .free = amdgpu_gem_object_free, 216 + .open = amdgpu_gem_object_open, 217 + .close = amdgpu_gem_object_close, 218 + .export = amdgpu_gem_prime_export, 219 + .vmap = amdgpu_gem_prime_vmap, 220 + .vunmap = amdgpu_gem_prime_vunmap, 221 + }; 217 222 218 223 /* 219 224 * GEM ioctls.
-5
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h
··· 33 33 #define AMDGPU_GEM_DOMAIN_MAX 0x3 34 34 #define gem_to_amdgpu_bo(gobj) container_of((gobj), struct amdgpu_bo, tbo.base) 35 35 36 - void amdgpu_gem_object_free(struct drm_gem_object *obj); 37 - int amdgpu_gem_object_open(struct drm_gem_object *obj, 38 - struct drm_file *file_priv); 39 - void amdgpu_gem_object_close(struct drm_gem_object *obj, 40 - struct drm_file *file_priv); 41 36 unsigned long amdgpu_gem_timeout(uint64_t timeout_ns); 42 37 43 38 /*