Skip to content

Commit 1adda8b

Browse files
author
Thomas Zimmermann
committed
drm/xen: 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 xen. The only exception is gem_prime_mmap, which is non-trivial to convert. v2: * convert xen_drm_drv_free_object_unlocked() to static callback (Oleksandr) Signed-off-by: Thomas Zimmermann <[email protected]> Acked-by: Oleksandr Andrushchenko <[email protected]> Acked-by: Christian König <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent b76b85b commit 1adda8b

File tree

3 files changed

+34
-27
lines changed

3 files changed

+34
-27
lines changed

drivers/gpu/drm/xen/xen_drm_front.c

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,23 @@ void xen_drm_front_on_frame_done(struct xen_drm_front_info *front_info,
381381
fb_cookie);
382382
}
383383

384+
void xen_drm_front_gem_object_free(struct drm_gem_object *obj)
385+
{
386+
struct xen_drm_front_drm_info *drm_info = obj->dev->dev_private;
387+
int idx;
388+
389+
if (drm_dev_enter(obj->dev, &idx)) {
390+
xen_drm_front_dbuf_destroy(drm_info->front_info,
391+
xen_drm_front_dbuf_to_cookie(obj));
392+
drm_dev_exit(idx);
393+
} else {
394+
dbuf_free(&drm_info->front_info->dbuf_list,
395+
xen_drm_front_dbuf_to_cookie(obj));
396+
}
397+
398+
xen_drm_front_gem_free_object_unlocked(obj);
399+
}
400+
384401
static int xen_drm_drv_dumb_create(struct drm_file *filp,
385402
struct drm_device *dev,
386403
struct drm_mode_create_dumb *args)
@@ -435,23 +452,6 @@ static int xen_drm_drv_dumb_create(struct drm_file *filp,
435452
return ret;
436453
}
437454

438-
static void xen_drm_drv_free_object_unlocked(struct drm_gem_object *obj)
439-
{
440-
struct xen_drm_front_drm_info *drm_info = obj->dev->dev_private;
441-
int idx;
442-
443-
if (drm_dev_enter(obj->dev, &idx)) {
444-
xen_drm_front_dbuf_destroy(drm_info->front_info,
445-
xen_drm_front_dbuf_to_cookie(obj));
446-
drm_dev_exit(idx);
447-
} else {
448-
dbuf_free(&drm_info->front_info->dbuf_list,
449-
xen_drm_front_dbuf_to_cookie(obj));
450-
}
451-
452-
xen_drm_front_gem_free_object_unlocked(obj);
453-
}
454-
455455
static void xen_drm_drv_release(struct drm_device *dev)
456456
{
457457
struct xen_drm_front_drm_info *drm_info = dev->dev_private;
@@ -483,22 +483,12 @@ static const struct file_operations xen_drm_dev_fops = {
483483
.mmap = xen_drm_front_gem_mmap,
484484
};
485485

486-
static const struct vm_operations_struct xen_drm_drv_vm_ops = {
487-
.open = drm_gem_vm_open,
488-
.close = drm_gem_vm_close,
489-
};
490-
491486
static struct drm_driver xen_drm_driver = {
492487
.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
493488
.release = xen_drm_drv_release,
494-
.gem_vm_ops = &xen_drm_drv_vm_ops,
495-
.gem_free_object_unlocked = xen_drm_drv_free_object_unlocked,
496489
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
497490
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
498491
.gem_prime_import_sg_table = xen_drm_front_gem_import_sg_table,
499-
.gem_prime_get_sg_table = xen_drm_front_gem_get_sg_table,
500-
.gem_prime_vmap = xen_drm_front_gem_prime_vmap,
501-
.gem_prime_vunmap = xen_drm_front_gem_prime_vunmap,
502492
.gem_prime_mmap = xen_drm_front_gem_prime_mmap,
503493
.dumb_create = xen_drm_drv_dumb_create,
504494
.fops = &xen_drm_dev_fops,

drivers/gpu/drm/xen/xen_drm_front.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,6 @@ int xen_drm_front_page_flip(struct xen_drm_front_info *front_info,
160160
void xen_drm_front_on_frame_done(struct xen_drm_front_info *front_info,
161161
int conn_idx, u64 fb_cookie);
162162

163+
void xen_drm_front_gem_object_free(struct drm_gem_object *obj);
164+
163165
#endif /* __XEN_DRM_FRONT_H_ */

drivers/gpu/drm/xen/xen_drm_front_gem.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@ static void gem_free_pages_array(struct xen_gem_object *xen_obj)
5757
xen_obj->pages = NULL;
5858
}
5959

60+
static const struct vm_operations_struct xen_drm_drv_vm_ops = {
61+
.open = drm_gem_vm_open,
62+
.close = drm_gem_vm_close,
63+
};
64+
65+
static const struct drm_gem_object_funcs xen_drm_front_gem_object_funcs = {
66+
.free = xen_drm_front_gem_object_free,
67+
.get_sg_table = xen_drm_front_gem_get_sg_table,
68+
.vmap = xen_drm_front_gem_prime_vmap,
69+
.vunmap = xen_drm_front_gem_prime_vunmap,
70+
.vm_ops = &xen_drm_drv_vm_ops,
71+
};
72+
6073
static struct xen_gem_object *gem_create_obj(struct drm_device *dev,
6174
size_t size)
6275
{
@@ -67,6 +80,8 @@ static struct xen_gem_object *gem_create_obj(struct drm_device *dev,
6780
if (!xen_obj)
6881
return ERR_PTR(-ENOMEM);
6982

83+
xen_obj->base.funcs = &xen_drm_front_gem_object_funcs;
84+
7085
ret = drm_gem_object_init(dev, &xen_obj->base, size);
7186
if (ret < 0) {
7287
kfree(xen_obj);

0 commit comments

Comments
 (0)