Skip to content

Commit

Permalink
drm/qxl: use embedded gem object
Browse files Browse the repository at this point in the history
Drop drm_gem_object from qxl_bo, use the
ttm_buffer_object.base instead.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Christian König <christian.koenig@amd.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20190805140119.7337-4-kraxel@redhat.com
  • Loading branch information
Gerd Hoffmann committed Aug 6, 2019
1 parent 0e580c6 commit e0828d5
Show file tree
Hide file tree
Showing 9 changed files with 26 additions and 26 deletions.
4 changes: 2 additions & 2 deletions drivers/gpu/drm/qxl/qxl_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ void qxl_io_destroy_primary(struct qxl_device *qdev)
{
wait_for_io_cmd(qdev, 0, QXL_IO_DESTROY_PRIMARY_ASYNC);
qdev->primary_bo->is_primary = false;
drm_gem_object_put_unlocked(&qdev->primary_bo->gem_base);
drm_gem_object_put_unlocked(&qdev->primary_bo->tbo.base);
qdev->primary_bo = NULL;
}

Expand All @@ -404,7 +404,7 @@ void qxl_io_create_primary(struct qxl_device *qdev, struct qxl_bo *bo)
wait_for_io_cmd(qdev, 0, QXL_IO_CREATE_PRIMARY_ASYNC);
qdev->primary_bo = bo;
qdev->primary_bo->is_primary = true;
drm_gem_object_get(&qdev->primary_bo->gem_base);
drm_gem_object_get(&qdev->primary_bo->tbo.base);
}

void qxl_io_memslot_add(struct qxl_device *qdev, uint8_t id)
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/qxl/qxl_debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ qxl_debugfs_buffers_info(struct seq_file *m, void *data)
rcu_read_unlock();

seq_printf(m, "size %ld, pc %d, num releases %d\n",
(unsigned long)bo->gem_base.size,
(unsigned long)bo->tbo.base.size,
bo->pin_count, rel);
}
return 0;
Expand Down
8 changes: 4 additions & 4 deletions drivers/gpu/drm/qxl/qxl_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -797,7 +797,7 @@ static int qxl_plane_prepare_fb(struct drm_plane *plane,
qdev->dumb_shadow_bo->surf.height != surf.height) {
if (qdev->dumb_shadow_bo) {
drm_gem_object_put_unlocked
(&qdev->dumb_shadow_bo->gem_base);
(&qdev->dumb_shadow_bo->tbo.base);
qdev->dumb_shadow_bo = NULL;
}
qxl_bo_create(qdev, surf.height * surf.stride,
Expand All @@ -807,10 +807,10 @@ static int qxl_plane_prepare_fb(struct drm_plane *plane,
if (user_bo->shadow != qdev->dumb_shadow_bo) {
if (user_bo->shadow) {
drm_gem_object_put_unlocked
(&user_bo->shadow->gem_base);
(&user_bo->shadow->tbo.base);
user_bo->shadow = NULL;
}
drm_gem_object_get(&qdev->dumb_shadow_bo->gem_base);
drm_gem_object_get(&qdev->dumb_shadow_bo->tbo.base);
user_bo->shadow = qdev->dumb_shadow_bo;
}
}
Expand Down Expand Up @@ -841,7 +841,7 @@ static void qxl_plane_cleanup_fb(struct drm_plane *plane,
qxl_bo_unpin(user_bo);

if (old_state->fb != plane->state->fb && user_bo->shadow) {
drm_gem_object_put_unlocked(&user_bo->shadow->gem_base);
drm_gem_object_put_unlocked(&user_bo->shadow->tbo.base);
user_bo->shadow = NULL;
}
}
Expand Down
6 changes: 3 additions & 3 deletions drivers/gpu/drm/qxl/qxl_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,20 +71,20 @@ extern int qxl_max_ioctls;
QXL_INTERRUPT_CLIENT_MONITORS_CONFIG)

struct qxl_bo {
struct ttm_buffer_object tbo;

/* Protected by gem.mutex */
struct list_head list;
/* Protected by tbo.reserved */
struct ttm_place placements[3];
struct ttm_placement placement;
struct ttm_buffer_object tbo;
struct ttm_bo_kmap_obj kmap;
unsigned int pin_count;
void *kptr;
unsigned int map_count;
int type;

/* Constant after initialization */
struct drm_gem_object gem_base;
unsigned int is_primary:1; /* is this now a primary surface */
unsigned int is_dumb:1;
struct qxl_bo *shadow;
Expand All @@ -93,7 +93,7 @@ struct qxl_bo {
uint32_t surface_id;
struct qxl_release *surf_create;
};
#define gem_to_qxl_bo(gobj) container_of((gobj), struct qxl_bo, gem_base)
#define gem_to_qxl_bo(gobj) container_of((gobj), struct qxl_bo, tbo.base)
#define to_qxl_bo(tobj) container_of((tobj), struct qxl_bo, tbo)

struct qxl_gem {
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/qxl/qxl_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ int qxl_gem_object_create(struct qxl_device *qdev, int size,
size, initial_domain, alignment, r);
return r;
}
*obj = &qbo->gem_base;
*obj = &qbo->tbo.base;

mutex_lock(&qdev->gem.mutex);
list_add_tail(&qbo->list, &qdev->gem.objects);
Expand Down
20 changes: 10 additions & 10 deletions drivers/gpu/drm/qxl/qxl_object.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@ static void qxl_ttm_bo_destroy(struct ttm_buffer_object *tbo)
struct qxl_device *qdev;

bo = to_qxl_bo(tbo);
qdev = (struct qxl_device *)bo->gem_base.dev->dev_private;
qdev = (struct qxl_device *)bo->tbo.base.dev->dev_private;

qxl_surface_evict(qdev, bo, false);
WARN_ON_ONCE(bo->map_count > 0);
mutex_lock(&qdev->gem.mutex);
list_del_init(&bo->list);
mutex_unlock(&qdev->gem.mutex);
drm_gem_object_release(&bo->gem_base);
drm_gem_object_release(&bo->tbo.base);
kfree(bo);
}

Expand Down Expand Up @@ -95,7 +95,7 @@ int qxl_bo_create(struct qxl_device *qdev,
if (bo == NULL)
return -ENOMEM;
size = roundup(size, PAGE_SIZE);
r = drm_gem_object_init(&qdev->ddev, &bo->gem_base, size);
r = drm_gem_object_init(&qdev->ddev, &bo->tbo.base, size);
if (unlikely(r)) {
kfree(bo);
return r;
Expand Down Expand Up @@ -214,20 +214,20 @@ void qxl_bo_unref(struct qxl_bo **bo)
if ((*bo) == NULL)
return;

drm_gem_object_put_unlocked(&(*bo)->gem_base);
drm_gem_object_put_unlocked(&(*bo)->tbo.base);
*bo = NULL;
}

struct qxl_bo *qxl_bo_ref(struct qxl_bo *bo)
{
drm_gem_object_get(&bo->gem_base);
drm_gem_object_get(&bo->tbo.base);
return bo;
}

static int __qxl_bo_pin(struct qxl_bo *bo)
{
struct ttm_operation_ctx ctx = { false, false };
struct drm_device *ddev = bo->gem_base.dev;
struct drm_device *ddev = bo->tbo.base.dev;
int r;

if (bo->pin_count) {
Expand All @@ -247,7 +247,7 @@ static int __qxl_bo_pin(struct qxl_bo *bo)
static int __qxl_bo_unpin(struct qxl_bo *bo)
{
struct ttm_operation_ctx ctx = { false, false };
struct drm_device *ddev = bo->gem_base.dev;
struct drm_device *ddev = bo->tbo.base.dev;
int r, i;

if (!bo->pin_count) {
Expand Down Expand Up @@ -310,13 +310,13 @@ void qxl_bo_force_delete(struct qxl_device *qdev)
dev_err(qdev->ddev.dev, "Userspace still has active objects !\n");
list_for_each_entry_safe(bo, n, &qdev->gem.objects, list) {
dev_err(qdev->ddev.dev, "%p %p %lu %lu force free\n",
&bo->gem_base, bo, (unsigned long)bo->gem_base.size,
*((unsigned long *)&bo->gem_base.refcount));
&bo->tbo.base, bo, (unsigned long)bo->tbo.base.size,
*((unsigned long *)&bo->tbo.base.refcount));
mutex_lock(&qdev->gem.mutex);
list_del_init(&bo->list);
mutex_unlock(&qdev->gem.mutex);
/* this should unref the ttm bo */
drm_gem_object_put_unlocked(&bo->gem_base);
drm_gem_object_put_unlocked(&bo->tbo.base);
}
}

Expand Down
4 changes: 2 additions & 2 deletions drivers/gpu/drm/qxl/qxl_object.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ static inline int qxl_bo_reserve(struct qxl_bo *bo, bool no_wait)
r = ttm_bo_reserve(&bo->tbo, true, no_wait, NULL);
if (unlikely(r != 0)) {
if (r != -ERESTARTSYS) {
struct drm_device *ddev = bo->gem_base.dev;
struct drm_device *ddev = bo->tbo.base.dev;

dev_err(ddev->dev, "%p reserve failed\n", bo);
}
Expand Down Expand Up @@ -71,7 +71,7 @@ static inline int qxl_bo_wait(struct qxl_bo *bo, u32 *mem_type,
r = ttm_bo_reserve(&bo->tbo, true, no_wait, NULL);
if (unlikely(r != 0)) {
if (r != -ERESTARTSYS) {
struct drm_device *ddev = bo->gem_base.dev;
struct drm_device *ddev = bo->tbo.base.dev;

dev_err(ddev->dev, "%p reserve failed for wait\n",
bo);
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/qxl/qxl_release.c
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ static int qxl_release_validate_bo(struct qxl_bo *bo)
return ret;

/* allocate a surface for reserved + validated buffers */
ret = qxl_bo_check_id(bo->gem_base.dev->dev_private, bo);
ret = qxl_bo_check_id(bo->tbo.base.dev->dev_private, bo);
if (ret)
return ret;
return 0;
Expand Down
4 changes: 2 additions & 2 deletions drivers/gpu/drm/qxl/qxl_ttm.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ static int qxl_verify_access(struct ttm_buffer_object *bo, struct file *filp)
{
struct qxl_bo *qbo = to_qxl_bo(bo);

return drm_vma_node_verify_access(&qbo->gem_base.vma_node,
return drm_vma_node_verify_access(&qbo->tbo.base.vma_node,
filp->private_data);
}

Expand Down Expand Up @@ -297,7 +297,7 @@ static void qxl_bo_move_notify(struct ttm_buffer_object *bo,
if (!qxl_ttm_bo_is_qxl_bo(bo))
return;
qbo = to_qxl_bo(bo);
qdev = qbo->gem_base.dev->dev_private;
qdev = qbo->tbo.base.dev->dev_private;

if (bo->mem.mem_type == TTM_PL_PRIV && qbo->surface_id)
qxl_surface_evict(qdev, qbo, new_mem ? true : false);
Expand Down

0 comments on commit e0828d5

Please sign in to comment.