* [PATCH 01/10] drm/virtio: log error responses
[not found] <20181219122708.4586-1-kraxel@redhat.com>
@ 2018-12-19 12:26 ` Gerd Hoffmann
2018-12-21 9:59 ` Oleksandr Andrushchenko
2018-12-19 12:27 ` [PATCH 02/10] drm/virtio: fix pageflip flush Gerd Hoffmann
` (8 subsequent siblings)
9 siblings, 1 reply; 14+ messages in thread
From: Gerd Hoffmann @ 2018-12-19 12:26 UTC (permalink / raw)
To: dri-devel, David Airlie
Cc: Gerd Hoffmann, David Airlie, open list:VIRTIO GPU DRIVER, open list
If we got an error response code from the host, print it to the log.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/virtio/virtgpu_vq.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
index e27c4aedb8..6bc2008b0d 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -192,8 +192,16 @@ void virtio_gpu_dequeue_ctrl_func(struct work_struct *work)
list_for_each_entry_safe(entry, tmp, &reclaim_list, list) {
resp = (struct virtio_gpu_ctrl_hdr *)entry->resp_buf;
- if (resp->type != cpu_to_le32(VIRTIO_GPU_RESP_OK_NODATA))
- DRM_DEBUG("response 0x%x\n", le32_to_cpu(resp->type));
+ if (resp->type != cpu_to_le32(VIRTIO_GPU_RESP_OK_NODATA)) {
+ if (resp->type >= cpu_to_le32(VIRTIO_GPU_RESP_ERR_UNSPEC)) {
+ struct virtio_gpu_ctrl_hdr *cmd;
+ cmd = (struct virtio_gpu_ctrl_hdr *)entry->buf;
+ DRM_ERROR("response 0x%x (command 0x%x)\n",
+ le32_to_cpu(resp->type),
+ le32_to_cpu(cmd->type));
+ } else
+ DRM_DEBUG("response 0x%x\n", le32_to_cpu(resp->type));
+ }
if (resp->flags & cpu_to_le32(VIRTIO_GPU_FLAG_FENCE)) {
u64 f = le64_to_cpu(resp->fence_id);
--
2.9.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 02/10] drm/virtio: fix pageflip flush
[not found] <20181219122708.4586-1-kraxel@redhat.com>
2018-12-19 12:26 ` [PATCH 01/10] drm/virtio: log error responses Gerd Hoffmann
@ 2018-12-19 12:27 ` Gerd Hoffmann
2019-01-02 17:09 ` Ezequiel Garcia
2018-12-19 12:27 ` [PATCH 03/10] drm/virtio: drop virtio_gpu_fence_cleanup() Gerd Hoffmann
` (7 subsequent siblings)
9 siblings, 1 reply; 14+ messages in thread
From: Gerd Hoffmann @ 2018-12-19 12:27 UTC (permalink / raw)
To: dri-devel, David Airlie
Cc: Gerd Hoffmann, David Airlie, open list:VIRTIO GPU DRIVER, open list
Sending the flush command only makes sense if we actually have
a framebuffer attached to the scanout (handle != 0).
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/virtio/virtgpu_plane.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index ead5c53d4e..548265b8e8 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -130,11 +130,12 @@ static void virtio_gpu_primary_plane_update(struct drm_plane *plane,
plane->state->src_h >> 16,
plane->state->src_x >> 16,
plane->state->src_y >> 16);
- virtio_gpu_cmd_resource_flush(vgdev, handle,
- plane->state->src_x >> 16,
- plane->state->src_y >> 16,
- plane->state->src_w >> 16,
- plane->state->src_h >> 16);
+ if (handle)
+ virtio_gpu_cmd_resource_flush(vgdev, handle,
+ plane->state->src_x >> 16,
+ plane->state->src_y >> 16,
+ plane->state->src_w >> 16,
+ plane->state->src_h >> 16);
}
static int virtio_gpu_cursor_prepare_fb(struct drm_plane *plane,
--
2.9.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 03/10] drm/virtio: drop virtio_gpu_fence_cleanup()
[not found] <20181219122708.4586-1-kraxel@redhat.com>
2018-12-19 12:26 ` [PATCH 01/10] drm/virtio: log error responses Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 02/10] drm/virtio: fix pageflip flush Gerd Hoffmann
@ 2018-12-19 12:27 ` Gerd Hoffmann
2019-01-02 17:10 ` Ezequiel Garcia
2018-12-19 12:27 ` [PATCH 04/10] drm/virtio: move virtio_gpu_object_{attach,detach} calls Gerd Hoffmann
` (6 subsequent siblings)
9 siblings, 1 reply; 14+ messages in thread
From: Gerd Hoffmann @ 2018-12-19 12:27 UTC (permalink / raw)
To: dri-devel, David Airlie
Cc: Gerd Hoffmann, David Airlie, open list:VIRTIO GPU DRIVER, open list
Just call drm_fence_put directly instead.
Also set vgfb->fence to NULL after dropping the reference.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/virtio/virtgpu_drv.h | 1 -
drivers/gpu/drm/virtio/virtgpu_fence.c | 8 --------
drivers/gpu/drm/virtio/virtgpu_ioctl.c | 2 +-
drivers/gpu/drm/virtio/virtgpu_plane.c | 6 ++++--
4 files changed, 5 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index 63704915f8..bfb31fc3d0 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -337,7 +337,6 @@ int virtio_gpu_mmap(struct file *filp, struct vm_area_struct *vma);
/* virtio_gpu_fence.c */
struct virtio_gpu_fence *virtio_gpu_fence_alloc(
struct virtio_gpu_device *vgdev);
-void virtio_gpu_fence_cleanup(struct virtio_gpu_fence *fence);
int virtio_gpu_fence_emit(struct virtio_gpu_device *vgdev,
struct virtio_gpu_ctrl_hdr *cmd_hdr,
struct virtio_gpu_fence *fence);
diff --git a/drivers/gpu/drm/virtio/virtgpu_fence.c b/drivers/gpu/drm/virtio/virtgpu_fence.c
index 4d6826b278..21bd4c4a32 100644
--- a/drivers/gpu/drm/virtio/virtgpu_fence.c
+++ b/drivers/gpu/drm/virtio/virtgpu_fence.c
@@ -81,14 +81,6 @@ struct virtio_gpu_fence *virtio_gpu_fence_alloc(struct virtio_gpu_device *vgdev)
return fence;
}
-void virtio_gpu_fence_cleanup(struct virtio_gpu_fence *fence)
-{
- if (!fence)
- return;
-
- dma_fence_put(&fence->f);
-}
-
int virtio_gpu_fence_emit(struct virtio_gpu_device *vgdev,
struct virtio_gpu_ctrl_hdr *cmd_hdr,
struct virtio_gpu_fence *fence)
diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
index 161b80fee4..14ce8188c0 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
@@ -351,7 +351,7 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
virtio_gpu_cmd_resource_create_3d(vgdev, qobj, &rc_3d);
ret = virtio_gpu_object_attach(vgdev, qobj, fence);
if (ret) {
- virtio_gpu_fence_cleanup(fence);
+ dma_fence_put(&fence->f);
goto fail_backoff;
}
ttm_eu_fence_buffer_objects(&ticket, &validate_list, &fence->f);
diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index 548265b8e8..024c2aa0c9 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -169,8 +169,10 @@ static void virtio_gpu_cursor_cleanup_fb(struct drm_plane *plane,
return;
vgfb = to_virtio_gpu_framebuffer(plane->state->fb);
- if (vgfb->fence)
- virtio_gpu_fence_cleanup(vgfb->fence);
+ if (vgfb->fence) {
+ dma_fence_put(&vgfb->fence->f);
+ vgfb->fence = NULL;
+ }
}
static void virtio_gpu_cursor_plane_update(struct drm_plane *plane,
--
2.9.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 04/10] drm/virtio: move virtio_gpu_object_{attach,detach} calls.
[not found] <20181219122708.4586-1-kraxel@redhat.com>
` (2 preceding siblings ...)
2018-12-19 12:27 ` [PATCH 03/10] drm/virtio: drop virtio_gpu_fence_cleanup() Gerd Hoffmann
@ 2018-12-19 12:27 ` Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 05/10] drm/virtio: use struct to pass params to virtio_gpu_object_create() Gerd Hoffmann
` (5 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2018-12-19 12:27 UTC (permalink / raw)
To: dri-devel, David Airlie
Cc: Gerd Hoffmann, David Airlie, open list:VIRTIO GPU DRIVER, open list
Drop the dummy ttm backend implementation, add a real one for
TTM_PL_FLAG_TT objects. The bin/unbind callbacks will call
virtio_gpu_object_{attach,detach}, to update the object state
on the host side, instead of invoking those calls from the
move_notify() callback.
With that in place the move and move_notify callbacks are not
needed any more, so drop them.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/virtio/virtgpu_ttm.c | 92 ++++++++++--------------------------
1 file changed, 24 insertions(+), 68 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_ttm.c b/drivers/gpu/drm/virtio/virtgpu_ttm.c
index 4bfbf25fab..77407976c7 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ttm.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ttm.c
@@ -194,42 +194,45 @@ static void virtio_gpu_ttm_io_mem_free(struct ttm_bo_device *bdev,
*/
struct virtio_gpu_ttm_tt {
struct ttm_dma_tt ttm;
- struct virtio_gpu_device *vgdev;
- u64 offset;
+ struct virtio_gpu_object *obj;
};
-static int virtio_gpu_ttm_backend_bind(struct ttm_tt *ttm,
- struct ttm_mem_reg *bo_mem)
+static int virtio_gpu_ttm_tt_bind(struct ttm_tt *ttm,
+ struct ttm_mem_reg *bo_mem)
{
- struct virtio_gpu_ttm_tt *gtt = (void *)ttm;
+ struct virtio_gpu_ttm_tt *gtt =
+ container_of(ttm, struct virtio_gpu_ttm_tt, ttm.ttm);
+ struct virtio_gpu_device *vgdev =
+ virtio_gpu_get_vgdev(gtt->obj->tbo.bdev);
- gtt->offset = (unsigned long)(bo_mem->start << PAGE_SHIFT);
- if (!ttm->num_pages)
- WARN(1, "nothing to bind %lu pages for mreg %p back %p!\n",
- ttm->num_pages, bo_mem, ttm);
-
- /* Not implemented */
+ virtio_gpu_object_attach(vgdev, gtt->obj, NULL);
return 0;
}
-static int virtio_gpu_ttm_backend_unbind(struct ttm_tt *ttm)
+static int virtio_gpu_ttm_tt_unbind(struct ttm_tt *ttm)
{
- /* Not implemented */
+ struct virtio_gpu_ttm_tt *gtt =
+ container_of(ttm, struct virtio_gpu_ttm_tt, ttm.ttm);
+ struct virtio_gpu_device *vgdev =
+ virtio_gpu_get_vgdev(gtt->obj->tbo.bdev);
+
+ virtio_gpu_object_detach(vgdev, gtt->obj);
return 0;
}
-static void virtio_gpu_ttm_backend_destroy(struct ttm_tt *ttm)
+static void virtio_gpu_ttm_tt_destroy(struct ttm_tt *ttm)
{
- struct virtio_gpu_ttm_tt *gtt = (void *)ttm;
+ struct virtio_gpu_ttm_tt *gtt =
+ container_of(ttm, struct virtio_gpu_ttm_tt, ttm.ttm);
ttm_dma_tt_fini(>t->ttm);
kfree(gtt);
}
-static struct ttm_backend_func virtio_gpu_backend_func = {
- .bind = &virtio_gpu_ttm_backend_bind,
- .unbind = &virtio_gpu_ttm_backend_unbind,
- .destroy = &virtio_gpu_ttm_backend_destroy,
+static struct ttm_backend_func virtio_gpu_tt_func = {
+ .bind = &virtio_gpu_ttm_tt_bind,
+ .unbind = &virtio_gpu_ttm_tt_unbind,
+ .destroy = &virtio_gpu_ttm_tt_destroy,
};
static struct ttm_tt *virtio_gpu_ttm_tt_create(struct ttm_buffer_object *bo,
@@ -242,8 +245,8 @@ static struct ttm_tt *virtio_gpu_ttm_tt_create(struct ttm_buffer_object *bo,
gtt = kzalloc(sizeof(struct virtio_gpu_ttm_tt), GFP_KERNEL);
if (gtt == NULL)
return NULL;
- gtt->ttm.ttm.func = &virtio_gpu_backend_func;
- gtt->vgdev = vgdev;
+ gtt->ttm.ttm.func = &virtio_gpu_tt_func;
+ gtt->obj = container_of(bo, struct virtio_gpu_object, tbo);
if (ttm_dma_tt_init(>t->ttm, bo, page_flags)) {
kfree(gtt);
return NULL;
@@ -251,51 +254,6 @@ static struct ttm_tt *virtio_gpu_ttm_tt_create(struct ttm_buffer_object *bo,
return >t->ttm.ttm;
}
-static void virtio_gpu_move_null(struct ttm_buffer_object *bo,
- struct ttm_mem_reg *new_mem)
-{
- struct ttm_mem_reg *old_mem = &bo->mem;
-
- BUG_ON(old_mem->mm_node != NULL);
- *old_mem = *new_mem;
- new_mem->mm_node = NULL;
-}
-
-static int virtio_gpu_bo_move(struct ttm_buffer_object *bo, bool evict,
- struct ttm_operation_ctx *ctx,
- struct ttm_mem_reg *new_mem)
-{
- int ret;
-
- ret = ttm_bo_wait(bo, ctx->interruptible, ctx->no_wait_gpu);
- if (ret)
- return ret;
-
- virtio_gpu_move_null(bo, new_mem);
- return 0;
-}
-
-static void virtio_gpu_bo_move_notify(struct ttm_buffer_object *tbo,
- bool evict,
- struct ttm_mem_reg *new_mem)
-{
- struct virtio_gpu_object *bo;
- struct virtio_gpu_device *vgdev;
-
- bo = container_of(tbo, struct virtio_gpu_object, tbo);
- vgdev = (struct virtio_gpu_device *)bo->gem_base.dev->dev_private;
-
- if (!new_mem || (new_mem->placement & TTM_PL_FLAG_SYSTEM)) {
- if (bo->hw_res_handle)
- virtio_gpu_object_detach(vgdev, bo);
-
- } else if (new_mem->placement & TTM_PL_FLAG_TT) {
- if (bo->hw_res_handle) {
- virtio_gpu_object_attach(vgdev, bo, NULL);
- }
- }
-}
-
static void virtio_gpu_bo_swap_notify(struct ttm_buffer_object *tbo)
{
struct virtio_gpu_object *bo;
@@ -314,11 +272,9 @@ static struct ttm_bo_driver virtio_gpu_bo_driver = {
.init_mem_type = &virtio_gpu_init_mem_type,
.eviction_valuable = ttm_bo_eviction_valuable,
.evict_flags = &virtio_gpu_evict_flags,
- .move = &virtio_gpu_bo_move,
.verify_access = &virtio_gpu_verify_access,
.io_mem_reserve = &virtio_gpu_ttm_io_mem_reserve,
.io_mem_free = &virtio_gpu_ttm_io_mem_free,
- .move_notify = &virtio_gpu_bo_move_notify,
.swap_notify = &virtio_gpu_bo_swap_notify,
};
--
2.9.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 05/10] drm/virtio: use struct to pass params to virtio_gpu_object_create()
[not found] <20181219122708.4586-1-kraxel@redhat.com>
` (3 preceding siblings ...)
2018-12-19 12:27 ` [PATCH 04/10] drm/virtio: move virtio_gpu_object_{attach,detach} calls Gerd Hoffmann
@ 2018-12-19 12:27 ` Gerd Hoffmann
2019-01-02 17:12 ` Ezequiel Garcia
2018-12-19 12:27 ` [PATCH 06/10] drm/virtio: params struct for virtio_gpu_cmd_create_resource() Gerd Hoffmann
` (4 subsequent siblings)
9 siblings, 1 reply; 14+ messages in thread
From: Gerd Hoffmann @ 2018-12-19 12:27 UTC (permalink / raw)
To: dri-devel, David Airlie
Cc: Gerd Hoffmann, David Airlie, open list:VIRTIO GPU DRIVER, open list
Create virtio_gpu_object_params, use that to pass object parameters to
virtio_gpu_object_create. Also drop unused "kernel" parameter (unused,
always false).
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/virtio/virtgpu_drv.h | 15 ++++++++++-----
drivers/gpu/drm/virtio/virtgpu_gem.c | 18 +++++++++++-------
drivers/gpu/drm/virtio/virtgpu_ioctl.c | 12 +++++++-----
drivers/gpu/drm/virtio/virtgpu_object.c | 22 +++++++++-------------
4 files changed, 37 insertions(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index bfb31fc3d0..8cff8a3f7c 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -53,6 +53,11 @@
/* virtgpu_drm_bus.c */
int drm_virtio_init(struct drm_driver *driver, struct virtio_device *vdev);
+struct virtio_gpu_object_params {
+ unsigned long size;
+ bool pinned;
+};
+
struct virtio_gpu_object {
struct drm_gem_object gem_base;
uint32_t hw_res_handle;
@@ -220,16 +225,16 @@ int virtio_gpu_gem_init(struct virtio_gpu_device *vgdev);
void virtio_gpu_gem_fini(struct virtio_gpu_device *vgdev);
int virtio_gpu_gem_create(struct drm_file *file,
struct drm_device *dev,
- uint64_t size,
+ struct virtio_gpu_object_params *params,
struct drm_gem_object **obj_p,
uint32_t *handle_p);
int virtio_gpu_gem_object_open(struct drm_gem_object *obj,
struct drm_file *file);
void virtio_gpu_gem_object_close(struct drm_gem_object *obj,
struct drm_file *file);
-struct virtio_gpu_object *virtio_gpu_alloc_object(struct drm_device *dev,
- size_t size, bool kernel,
- bool pinned);
+struct virtio_gpu_object*
+virtio_gpu_alloc_object(struct drm_device *dev,
+ struct virtio_gpu_object_params *params);
int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
struct drm_device *dev,
struct drm_mode_create_dumb *args);
@@ -345,7 +350,7 @@ void virtio_gpu_fence_event_process(struct virtio_gpu_device *vdev,
/* virtio_gpu_object */
int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
- unsigned long size, bool kernel, bool pinned,
+ struct virtio_gpu_object_params *params,
struct virtio_gpu_object **bo_ptr);
void virtio_gpu_object_kunmap(struct virtio_gpu_object *bo);
int virtio_gpu_object_kmap(struct virtio_gpu_object *bo);
diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index f065863939..384cd80bf3 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -34,15 +34,15 @@ void virtio_gpu_gem_free_object(struct drm_gem_object *gem_obj)
virtio_gpu_object_unref(&obj);
}
-struct virtio_gpu_object *virtio_gpu_alloc_object(struct drm_device *dev,
- size_t size, bool kernel,
- bool pinned)
+struct virtio_gpu_object*
+virtio_gpu_alloc_object(struct drm_device *dev,
+ struct virtio_gpu_object_params *params)
{
struct virtio_gpu_device *vgdev = dev->dev_private;
struct virtio_gpu_object *obj;
int ret;
- ret = virtio_gpu_object_create(vgdev, size, kernel, pinned, &obj);
+ ret = virtio_gpu_object_create(vgdev, params, &obj);
if (ret)
return ERR_PTR(ret);
@@ -51,7 +51,7 @@ struct virtio_gpu_object *virtio_gpu_alloc_object(struct drm_device *dev,
int virtio_gpu_gem_create(struct drm_file *file,
struct drm_device *dev,
- uint64_t size,
+ struct virtio_gpu_object_params *params,
struct drm_gem_object **obj_p,
uint32_t *handle_p)
{
@@ -59,7 +59,7 @@ int virtio_gpu_gem_create(struct drm_file *file,
int ret;
u32 handle;
- obj = virtio_gpu_alloc_object(dev, size, false, false);
+ obj = virtio_gpu_alloc_object(dev, params);
if (IS_ERR(obj))
return PTR_ERR(obj);
@@ -85,6 +85,9 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
struct virtio_gpu_device *vgdev = dev->dev_private;
struct drm_gem_object *gobj;
struct virtio_gpu_object *obj;
+ struct virtio_gpu_object_params params = {
+ .pinned = false,
+ };
int ret;
uint32_t pitch;
uint32_t format;
@@ -96,7 +99,8 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
args->size = pitch * args->height;
args->size = ALIGN(args->size, PAGE_SIZE);
- ret = virtio_gpu_gem_create(file_priv, dev, args->size, &gobj,
+ params.size = args->size;
+ ret = virtio_gpu_gem_create(file_priv, dev, ¶ms, &gobj,
&args->handle);
if (ret)
goto fail;
diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
index 14ce8188c0..65b4a54f10 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
@@ -279,12 +279,14 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
struct virtio_gpu_object *qobj;
struct drm_gem_object *obj;
uint32_t handle = 0;
- uint32_t size;
struct list_head validate_list;
struct ttm_validate_buffer mainbuf;
struct virtio_gpu_fence *fence = NULL;
struct ww_acquire_ctx ticket;
struct virtio_gpu_resource_create_3d rc_3d;
+ struct virtio_gpu_object_params params = {
+ .pinned = false,
+ };
if (vgdev->has_virgl_3d == false) {
if (rc->depth > 1)
@@ -302,13 +304,13 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
INIT_LIST_HEAD(&validate_list);
memset(&mainbuf, 0, sizeof(struct ttm_validate_buffer));
- size = rc->size;
+ params.size = rc->size;
/* allocate a single page size object */
- if (size == 0)
- size = PAGE_SIZE;
+ if (params.size == 0)
+ params.size = PAGE_SIZE;
- qobj = virtio_gpu_alloc_object(dev, size, false, false);
+ qobj = virtio_gpu_alloc_object(dev, ¶ms);
if (IS_ERR(qobj))
return PTR_ERR(qobj);
obj = &qobj->gem_base;
diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c
index f39a183d59..62367e3f80 100644
--- a/drivers/gpu/drm/virtio/virtgpu_object.c
+++ b/drivers/gpu/drm/virtio/virtgpu_object.c
@@ -79,21 +79,16 @@ static void virtio_gpu_init_ttm_placement(struct virtio_gpu_object *vgbo,
}
int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
- unsigned long size, bool kernel, bool pinned,
+ struct virtio_gpu_object_params *params,
struct virtio_gpu_object **bo_ptr)
{
struct virtio_gpu_object *bo;
- enum ttm_bo_type type;
size_t acc_size;
int ret;
- if (kernel)
- type = ttm_bo_type_kernel;
- else
- type = ttm_bo_type_device;
*bo_ptr = NULL;
- acc_size = ttm_bo_dma_acc_size(&vgdev->mman.bdev, size,
+ acc_size = ttm_bo_dma_acc_size(&vgdev->mman.bdev, params->size,
sizeof(struct virtio_gpu_object));
bo = kzalloc(sizeof(struct virtio_gpu_object), GFP_KERNEL);
@@ -104,19 +99,20 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
kfree(bo);
return ret;
}
- size = roundup(size, PAGE_SIZE);
- ret = drm_gem_object_init(vgdev->ddev, &bo->gem_base, size);
+ params->size = roundup(params->size, PAGE_SIZE);
+ ret = drm_gem_object_init(vgdev->ddev, &bo->gem_base, params->size);
if (ret != 0) {
virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle);
kfree(bo);
return ret;
}
bo->dumb = false;
- virtio_gpu_init_ttm_placement(bo, pinned);
+ virtio_gpu_init_ttm_placement(bo, params->pinned);
- ret = ttm_bo_init(&vgdev->mman.bdev, &bo->tbo, size, type,
- &bo->placement, 0, !kernel, acc_size,
- NULL, NULL, &virtio_gpu_ttm_bo_destroy);
+ ret = ttm_bo_init(&vgdev->mman.bdev, &bo->tbo, params->size,
+ ttm_bo_type_device, &bo->placement, 0,
+ true, acc_size, NULL, NULL,
+ &virtio_gpu_ttm_bo_destroy);
/* ttm_bo_init failure will call the destroy */
if (ret != 0)
return ret;
--
2.9.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 06/10] drm/virtio: params struct for virtio_gpu_cmd_create_resource()
[not found] <20181219122708.4586-1-kraxel@redhat.com>
` (4 preceding siblings ...)
2018-12-19 12:27 ` [PATCH 05/10] drm/virtio: use struct to pass params to virtio_gpu_object_create() Gerd Hoffmann
@ 2018-12-19 12:27 ` Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 07/10] drm/virtio: params struct for virtio_gpu_cmd_create_resource_3d() Gerd Hoffmann
` (3 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2018-12-19 12:27 UTC (permalink / raw)
To: dri-devel, David Airlie
Cc: Gerd Hoffmann, David Airlie, open list:VIRTIO GPU DRIVER, open list
Add format, width and height to the virtio_gpu_object_params struct
and use the struct for virtio_gpu_cmd_create_resource().
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/virtio/virtgpu_drv.h | 7 ++++---
drivers/gpu/drm/virtio/virtgpu_gem.c | 8 ++++----
drivers/gpu/drm/virtio/virtgpu_ioctl.c | 6 ++++--
drivers/gpu/drm/virtio/virtgpu_vq.c | 10 ++++------
4 files changed, 16 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index 8cff8a3f7c..8c65deadd0 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -54,6 +54,9 @@
int drm_virtio_init(struct drm_driver *driver, struct virtio_device *vdev);
struct virtio_gpu_object_params {
+ uint32_t format;
+ uint32_t width;
+ uint32_t height;
unsigned long size;
bool pinned;
};
@@ -251,9 +254,7 @@ int virtio_gpu_alloc_vbufs(struct virtio_gpu_device *vgdev);
void virtio_gpu_free_vbufs(struct virtio_gpu_device *vgdev);
void virtio_gpu_cmd_create_resource(struct virtio_gpu_device *vgdev,
struct virtio_gpu_object *bo,
- uint32_t format,
- uint32_t width,
- uint32_t height);
+ struct virtio_gpu_object_params *params);
void virtio_gpu_cmd_unref_resource(struct virtio_gpu_device *vgdev,
uint32_t resource_id);
void virtio_gpu_cmd_transfer_to_host_2d(struct virtio_gpu_device *vgdev,
diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index 384cd80bf3..eea6c6e8db 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -90,7 +90,6 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
};
int ret;
uint32_t pitch;
- uint32_t format;
if (args->bpp != 32)
return -EINVAL;
@@ -99,16 +98,17 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
args->size = pitch * args->height;
args->size = ALIGN(args->size, PAGE_SIZE);
+ params.format = virtio_gpu_translate_format(DRM_FORMAT_HOST_XRGB8888);
+ params.width = args->width;
+ params.height = args->height;
params.size = args->size;
ret = virtio_gpu_gem_create(file_priv, dev, ¶ms, &gobj,
&args->handle);
if (ret)
goto fail;
- format = virtio_gpu_translate_format(DRM_FORMAT_HOST_XRGB8888);
obj = gem_to_virtio_gpu_obj(gobj);
- virtio_gpu_cmd_create_resource(vgdev, obj, format,
- args->width, args->height);
+ virtio_gpu_cmd_create_resource(vgdev, obj, ¶ms);
/* attach the object to the resource */
ret = virtio_gpu_object_attach(vgdev, obj, NULL);
diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
index 65b4a54f10..33112c8495 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
@@ -304,6 +304,9 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
INIT_LIST_HEAD(&validate_list);
memset(&mainbuf, 0, sizeof(struct ttm_validate_buffer));
+ params.format = rc->format;
+ params.width = rc->width;
+ params.height = rc->height;
params.size = rc->size;
/* allocate a single page size object */
@@ -316,8 +319,7 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
obj = &qobj->gem_base;
if (!vgdev->has_virgl_3d) {
- virtio_gpu_cmd_create_resource(vgdev, qobj, rc->format,
- rc->width, rc->height);
+ virtio_gpu_cmd_create_resource(vgdev, qobj, ¶ms);
ret = virtio_gpu_object_attach(vgdev, qobj, NULL);
} else {
diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
index 6bc2008b0d..363b8b8577 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -376,9 +376,7 @@ static int virtio_gpu_queue_cursor(struct virtio_gpu_device *vgdev,
/* create a basic resource */
void virtio_gpu_cmd_create_resource(struct virtio_gpu_device *vgdev,
struct virtio_gpu_object *bo,
- uint32_t format,
- uint32_t width,
- uint32_t height)
+ struct virtio_gpu_object_params *params)
{
struct virtio_gpu_resource_create_2d *cmd_p;
struct virtio_gpu_vbuffer *vbuf;
@@ -388,9 +386,9 @@ void virtio_gpu_cmd_create_resource(struct virtio_gpu_device *vgdev,
cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_RESOURCE_CREATE_2D);
cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle);
- cmd_p->format = cpu_to_le32(format);
- cmd_p->width = cpu_to_le32(width);
- cmd_p->height = cpu_to_le32(height);
+ cmd_p->format = cpu_to_le32(params->format);
+ cmd_p->width = cpu_to_le32(params->width);
+ cmd_p->height = cpu_to_le32(params->height);
virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
bo->created = true;
--
2.9.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 07/10] drm/virtio: params struct for virtio_gpu_cmd_create_resource_3d()
[not found] <20181219122708.4586-1-kraxel@redhat.com>
` (5 preceding siblings ...)
2018-12-19 12:27 ` [PATCH 06/10] drm/virtio: params struct for virtio_gpu_cmd_create_resource() Gerd Hoffmann
@ 2018-12-19 12:27 ` Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 08/10] drm/virtio: drop fencing in virtio_gpu_resource_create_ioctl Gerd Hoffmann
` (2 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2018-12-19 12:27 UTC (permalink / raw)
To: dri-devel, David Airlie
Cc: Gerd Hoffmann, David Airlie, open list:VIRTIO GPU DRIVER, open list
Add 3d resource parameters to virtio_gpu_object_params struct
and use it for virtio_gpu_cmd_resource_create_3d() calls.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/virtio/virtgpu_drv.h | 10 +++++++++-
drivers/gpu/drm/virtio/virtgpu_ioctl.c | 25 ++++++++++---------------
drivers/gpu/drm/virtio/virtgpu_vq.c | 16 +++++++++++++---
3 files changed, 32 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index 8c65deadd0..f9959306ae 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -59,6 +59,14 @@ struct virtio_gpu_object_params {
uint32_t height;
unsigned long size;
bool pinned;
+ /* 3d */
+ uint32_t target;
+ uint32_t bind;
+ uint32_t depth;
+ uint32_t array_size;
+ uint32_t last_level;
+ uint32_t nr_samples;
+ uint32_t flags;
};
struct virtio_gpu_object {
@@ -313,7 +321,7 @@ void virtio_gpu_cmd_transfer_to_host_3d(struct virtio_gpu_device *vgdev,
void
virtio_gpu_cmd_resource_create_3d(struct virtio_gpu_device *vgdev,
struct virtio_gpu_object *bo,
- struct virtio_gpu_resource_create_3d *rc_3d);
+ struct virtio_gpu_object_params *params);
void virtio_gpu_ctrl_ack(struct virtqueue *vq);
void virtio_gpu_cursor_ack(struct virtqueue *vq);
void virtio_gpu_fence_ack(struct virtqueue *vq);
diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
index 33112c8495..52d6ec2dde 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
@@ -283,7 +283,6 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
struct ttm_validate_buffer mainbuf;
struct virtio_gpu_fence *fence = NULL;
struct ww_acquire_ctx ticket;
- struct virtio_gpu_resource_create_3d rc_3d;
struct virtio_gpu_object_params params = {
.pinned = false,
};
@@ -308,7 +307,15 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
params.width = rc->width;
params.height = rc->height;
params.size = rc->size;
-
+ if (vgdev->has_virgl_3d) {
+ params.target = rc->target;
+ params.bind = rc->bind;
+ params.depth = rc->depth;
+ params.array_size = rc->array_size;
+ params.last_level = rc->last_level;
+ params.nr_samples = rc->nr_samples;
+ params.flags = rc->flags;
+ }
/* allocate a single page size object */
if (params.size == 0)
params.size = PAGE_SIZE;
@@ -334,25 +341,13 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
goto fail_unref;
}
- rc_3d.resource_id = cpu_to_le32(qobj->hw_res_handle);
- rc_3d.target = cpu_to_le32(rc->target);
- rc_3d.format = cpu_to_le32(rc->format);
- rc_3d.bind = cpu_to_le32(rc->bind);
- rc_3d.width = cpu_to_le32(rc->width);
- rc_3d.height = cpu_to_le32(rc->height);
- rc_3d.depth = cpu_to_le32(rc->depth);
- rc_3d.array_size = cpu_to_le32(rc->array_size);
- rc_3d.last_level = cpu_to_le32(rc->last_level);
- rc_3d.nr_samples = cpu_to_le32(rc->nr_samples);
- rc_3d.flags = cpu_to_le32(rc->flags);
-
fence = virtio_gpu_fence_alloc(vgdev);
if (!fence) {
ret = -ENOMEM;
goto fail_backoff;
}
- virtio_gpu_cmd_resource_create_3d(vgdev, qobj, &rc_3d);
+ virtio_gpu_cmd_resource_create_3d(vgdev, qobj, ¶ms);
ret = virtio_gpu_object_attach(vgdev, qobj, fence);
if (ret) {
dma_fence_put(&fence->f);
diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
index 363b8b8577..ca93ec6ca3 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -826,7 +826,7 @@ void virtio_gpu_cmd_context_detach_resource(struct virtio_gpu_device *vgdev,
void
virtio_gpu_cmd_resource_create_3d(struct virtio_gpu_device *vgdev,
struct virtio_gpu_object *bo,
- struct virtio_gpu_resource_create_3d *rc_3d)
+ struct virtio_gpu_object_params *params)
{
struct virtio_gpu_resource_create_3d *cmd_p;
struct virtio_gpu_vbuffer *vbuf;
@@ -834,9 +834,19 @@ virtio_gpu_cmd_resource_create_3d(struct virtio_gpu_device *vgdev,
cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
memset(cmd_p, 0, sizeof(*cmd_p));
- *cmd_p = *rc_3d;
cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_RESOURCE_CREATE_3D);
- cmd_p->hdr.flags = 0;
+ cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle);
+ cmd_p->format = cpu_to_le32(params->format);
+ cmd_p->width = cpu_to_le32(params->width);
+ cmd_p->height = cpu_to_le32(params->height);
+
+ cmd_p->target = cpu_to_le32(params->target);
+ cmd_p->bind = cpu_to_le32(params->bind);
+ cmd_p->depth = cpu_to_le32(params->depth);
+ cmd_p->array_size = cpu_to_le32(params->array_size);
+ cmd_p->last_level = cpu_to_le32(params->last_level);
+ cmd_p->nr_samples = cpu_to_le32(params->nr_samples);
+ cmd_p->flags = cpu_to_le32(params->flags);
virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
bo->created = true;
--
2.9.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 08/10] drm/virtio: drop fencing in virtio_gpu_resource_create_ioctl
[not found] <20181219122708.4586-1-kraxel@redhat.com>
` (6 preceding siblings ...)
2018-12-19 12:27 ` [PATCH 07/10] drm/virtio: params struct for virtio_gpu_cmd_create_resource_3d() Gerd Hoffmann
@ 2018-12-19 12:27 ` Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 09/10] drm/virtio: move virtio_gpu_cmd_create_resource call into virtio_gpu_object_create Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 10/10] drm/virtio: ditch virtio_gpu_object_attach() calls Gerd Hoffmann
9 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2018-12-19 12:27 UTC (permalink / raw)
To: dri-devel, David Airlie
Cc: Gerd Hoffmann, David Airlie, open list:VIRTIO GPU DRIVER, open list
There is no need to wait for completion here.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/virtio/virtgpu_ioctl.c | 51 +---------------------------------
1 file changed, 1 insertion(+), 50 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
index 52d6ec2dde..65ac61f86a 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
@@ -279,10 +279,6 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
struct virtio_gpu_object *qobj;
struct drm_gem_object *obj;
uint32_t handle = 0;
- struct list_head validate_list;
- struct ttm_validate_buffer mainbuf;
- struct virtio_gpu_fence *fence = NULL;
- struct ww_acquire_ctx ticket;
struct virtio_gpu_object_params params = {
.pinned = false,
};
@@ -300,9 +296,6 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
return -EINVAL;
}
- INIT_LIST_HEAD(&validate_list);
- memset(&mainbuf, 0, sizeof(struct ttm_validate_buffer));
-
params.format = rc->format;
params.width = rc->width;
params.height = rc->height;
@@ -330,62 +323,20 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
ret = virtio_gpu_object_attach(vgdev, qobj, NULL);
} else {
- /* use a gem reference since unref list undoes them */
- drm_gem_object_get(&qobj->gem_base);
- mainbuf.bo = &qobj->tbo;
- list_add(&mainbuf.head, &validate_list);
-
- ret = virtio_gpu_object_list_validate(&ticket, &validate_list);
- if (ret) {
- DRM_DEBUG("failed to validate\n");
- goto fail_unref;
- }
-
- fence = virtio_gpu_fence_alloc(vgdev);
- if (!fence) {
- ret = -ENOMEM;
- goto fail_backoff;
- }
-
virtio_gpu_cmd_resource_create_3d(vgdev, qobj, ¶ms);
- ret = virtio_gpu_object_attach(vgdev, qobj, fence);
- if (ret) {
- dma_fence_put(&fence->f);
- goto fail_backoff;
- }
- ttm_eu_fence_buffer_objects(&ticket, &validate_list, &fence->f);
+ ret = virtio_gpu_object_attach(vgdev, qobj, NULL);
}
ret = drm_gem_handle_create(file_priv, obj, &handle);
if (ret) {
-
drm_gem_object_release(obj);
- if (vgdev->has_virgl_3d) {
- virtio_gpu_unref_list(&validate_list);
- dma_fence_put(&fence->f);
- }
return ret;
}
drm_gem_object_put_unlocked(obj);
rc->res_handle = qobj->hw_res_handle; /* similiar to a VM address */
rc->bo_handle = handle;
-
- if (vgdev->has_virgl_3d) {
- virtio_gpu_unref_list(&validate_list);
- dma_fence_put(&fence->f);
- }
return 0;
-fail_backoff:
- ttm_eu_backoff_reservation(&ticket, &validate_list);
-fail_unref:
- if (vgdev->has_virgl_3d) {
- virtio_gpu_unref_list(&validate_list);
- dma_fence_put(&fence->f);
- }
-//fail_obj:
-// drm_gem_object_handle_unreference_unlocked(obj);
- return ret;
}
static int virtio_gpu_resource_info_ioctl(struct drm_device *dev, void *data,
--
2.9.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 09/10] drm/virtio: move virtio_gpu_cmd_create_resource call into virtio_gpu_object_create
[not found] <20181219122708.4586-1-kraxel@redhat.com>
` (7 preceding siblings ...)
2018-12-19 12:27 ` [PATCH 08/10] drm/virtio: drop fencing in virtio_gpu_resource_create_ioctl Gerd Hoffmann
@ 2018-12-19 12:27 ` Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 10/10] drm/virtio: ditch virtio_gpu_object_attach() calls Gerd Hoffmann
9 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2018-12-19 12:27 UTC (permalink / raw)
To: dri-devel, David Airlie
Cc: Gerd Hoffmann, David Airlie, open list:VIRTIO GPU DRIVER, open list
Specifically call virtio_gpu_object_create() before ttm_bo_init().
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/virtio/virtgpu_drv.h | 2 ++
drivers/gpu/drm/virtio/virtgpu_gem.c | 3 +--
drivers/gpu/drm/virtio/virtgpu_ioctl.c | 10 ++--------
drivers/gpu/drm/virtio/virtgpu_object.c | 10 ++++++++--
4 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index f9959306ae..f50ca81132 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -59,7 +59,9 @@ struct virtio_gpu_object_params {
uint32_t height;
unsigned long size;
bool pinned;
+ bool dumb;
/* 3d */
+ bool virgl;
uint32_t target;
uint32_t bind;
uint32_t depth;
diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index eea6c6e8db..ca84990382 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -102,20 +102,19 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
params.width = args->width;
params.height = args->height;
params.size = args->size;
+ params.dumb = true;
ret = virtio_gpu_gem_create(file_priv, dev, ¶ms, &gobj,
&args->handle);
if (ret)
goto fail;
obj = gem_to_virtio_gpu_obj(gobj);
- virtio_gpu_cmd_create_resource(vgdev, obj, ¶ms);
/* attach the object to the resource */
ret = virtio_gpu_object_attach(vgdev, obj, NULL);
if (ret)
goto fail;
- obj->dumb = true;
args->pitch = pitch;
return ret;
diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
index 65ac61f86a..e5bd1fed56 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
@@ -301,6 +301,7 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
params.height = rc->height;
params.size = rc->size;
if (vgdev->has_virgl_3d) {
+ params.virgl = true;
params.target = rc->target;
params.bind = rc->bind;
params.depth = rc->depth;
@@ -318,14 +319,7 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
return PTR_ERR(qobj);
obj = &qobj->gem_base;
- if (!vgdev->has_virgl_3d) {
- virtio_gpu_cmd_create_resource(vgdev, qobj, ¶ms);
-
- ret = virtio_gpu_object_attach(vgdev, qobj, NULL);
- } else {
- virtio_gpu_cmd_resource_create_3d(vgdev, qobj, ¶ms);
- ret = virtio_gpu_object_attach(vgdev, qobj, NULL);
- }
+ ret = virtio_gpu_object_attach(vgdev, qobj, NULL);
ret = drm_gem_handle_create(file_priv, obj, &handle);
if (ret) {
diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c
index 62367e3f80..94da9e68d2 100644
--- a/drivers/gpu/drm/virtio/virtgpu_object.c
+++ b/drivers/gpu/drm/virtio/virtgpu_object.c
@@ -106,9 +106,15 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
kfree(bo);
return ret;
}
- bo->dumb = false;
+ bo->dumb = params->dumb;
+
+ if (params->virgl) {
+ virtio_gpu_cmd_resource_create_3d(vgdev, bo, params);
+ } else {
+ virtio_gpu_cmd_create_resource(vgdev, bo, params);
+ }
+
virtio_gpu_init_ttm_placement(bo, params->pinned);
-
ret = ttm_bo_init(&vgdev->mman.bdev, &bo->tbo, params->size,
ttm_bo_type_device, &bo->placement, 0,
true, acc_size, NULL, NULL,
--
2.9.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 10/10] drm/virtio: ditch virtio_gpu_object_attach() calls
[not found] <20181219122708.4586-1-kraxel@redhat.com>
` (8 preceding siblings ...)
2018-12-19 12:27 ` [PATCH 09/10] drm/virtio: move virtio_gpu_cmd_create_resource call into virtio_gpu_object_create Gerd Hoffmann
@ 2018-12-19 12:27 ` Gerd Hoffmann
9 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2018-12-19 12:27 UTC (permalink / raw)
To: dri-devel, David Airlie
Cc: Gerd Hoffmann, David Airlie, open list:VIRTIO GPU DRIVER, open list
With virtio_gpu_object_create() being called earlier ttm_bo_init() will
handle the virtio_gpu_object_attach() (via backend binding), so we can
drop the extra calls now.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/virtio/virtgpu_gem.c | 9 ---------
drivers/gpu/drm/virtio/virtgpu_ioctl.c | 2 --
2 files changed, 11 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index ca84990382..4b01e5655c 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -82,9 +82,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
struct drm_device *dev,
struct drm_mode_create_dumb *args)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
struct drm_gem_object *gobj;
- struct virtio_gpu_object *obj;
struct virtio_gpu_object_params params = {
.pinned = false,
};
@@ -108,13 +106,6 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
if (ret)
goto fail;
- obj = gem_to_virtio_gpu_obj(gobj);
-
- /* attach the object to the resource */
- ret = virtio_gpu_object_attach(vgdev, obj, NULL);
- if (ret)
- goto fail;
-
args->pitch = pitch;
return ret;
diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
index e5bd1fed56..90b3955b6f 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
@@ -319,8 +319,6 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
return PTR_ERR(qobj);
obj = &qobj->gem_base;
- ret = virtio_gpu_object_attach(vgdev, qobj, NULL);
-
ret = drm_gem_handle_create(file_priv, obj, &handle);
if (ret) {
drm_gem_object_release(obj);
--
2.9.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 01/10] drm/virtio: log error responses
2018-12-19 12:26 ` [PATCH 01/10] drm/virtio: log error responses Gerd Hoffmann
@ 2018-12-21 9:59 ` Oleksandr Andrushchenko
0 siblings, 0 replies; 14+ messages in thread
From: Oleksandr Andrushchenko @ 2018-12-21 9:59 UTC (permalink / raw)
To: Gerd Hoffmann, dri-devel, David Airlie
Cc: David Airlie, open list, open list:VIRTIO GPU DRIVER
On 12/19/18 2:26 PM, Gerd Hoffmann wrote:
> If we got an error response code from the host, print it to the log.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> ---
> drivers/gpu/drm/virtio/virtgpu_vq.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
> index e27c4aedb8..6bc2008b0d 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_vq.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
> @@ -192,8 +192,16 @@ void virtio_gpu_dequeue_ctrl_func(struct work_struct *work)
>
> list_for_each_entry_safe(entry, tmp, &reclaim_list, list) {
> resp = (struct virtio_gpu_ctrl_hdr *)entry->resp_buf;
> - if (resp->type != cpu_to_le32(VIRTIO_GPU_RESP_OK_NODATA))
> - DRM_DEBUG("response 0x%x\n", le32_to_cpu(resp->type));
> + if (resp->type != cpu_to_le32(VIRTIO_GPU_RESP_OK_NODATA)) {
> + if (resp->type >= cpu_to_le32(VIRTIO_GPU_RESP_ERR_UNSPEC)) {
> + struct virtio_gpu_ctrl_hdr *cmd;
> + cmd = (struct virtio_gpu_ctrl_hdr *)entry->buf;
> + DRM_ERROR("response 0x%x (command 0x%x)\n",
> + le32_to_cpu(resp->type),
> + le32_to_cpu(cmd->type));
> + } else
> + DRM_DEBUG("response 0x%x\n", le32_to_cpu(resp->type));
> + }
> if (resp->flags & cpu_to_le32(VIRTIO_GPU_FLAG_FENCE)) {
> u64 f = le64_to_cpu(resp->fence_id);
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 02/10] drm/virtio: fix pageflip flush
2018-12-19 12:27 ` [PATCH 02/10] drm/virtio: fix pageflip flush Gerd Hoffmann
@ 2019-01-02 17:09 ` Ezequiel Garcia
0 siblings, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2019-01-02 17:09 UTC (permalink / raw)
To: Gerd Hoffmann, dri-devel, David Airlie
Cc: David Airlie, open list, open list:VIRTIO GPU DRIVER
On Wed, 2018-12-19 at 13:27 +0100, Gerd Hoffmann wrote:
> Sending the flush command only makes sense if we actually have
> a framebuffer attached to the scanout (handle != 0).
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> drivers/gpu/drm/virtio/virtgpu_plane.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
> index ead5c53d4e..548265b8e8 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_plane.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
> @@ -130,11 +130,12 @@ static void virtio_gpu_primary_plane_update(struct drm_plane *plane,
> plane->state->src_h >> 16,
> plane->state->src_x >> 16,
> plane->state->src_y >> 16);
> - virtio_gpu_cmd_resource_flush(vgdev, handle,
> - plane->state->src_x >> 16,
> - plane->state->src_y >> 16,
> - plane->state->src_w >> 16,
> - plane->state->src_h >> 16);
> + if (handle)
> + virtio_gpu_cmd_resource_flush(vgdev, handle,
> + plane->state->src_x >> 16,
> + plane->state->src_y >> 16,
> + plane->state->src_w >> 16,
> + plane->state->src_h >> 16);
> }
>
> static int virtio_gpu_cursor_prepare_fb(struct drm_plane *plane,
Reviewed-by: Ezequiel Garcia <ezequiel@collabora.com>
Regards,
Ezequiel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 03/10] drm/virtio: drop virtio_gpu_fence_cleanup()
2018-12-19 12:27 ` [PATCH 03/10] drm/virtio: drop virtio_gpu_fence_cleanup() Gerd Hoffmann
@ 2019-01-02 17:10 ` Ezequiel Garcia
0 siblings, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2019-01-02 17:10 UTC (permalink / raw)
To: Gerd Hoffmann, dri-devel, David Airlie
Cc: David Airlie, open list, open list:VIRTIO GPU DRIVER
On Wed, 2018-12-19 at 13:27 +0100, Gerd Hoffmann wrote:
> Just call drm_fence_put directly instead.
> Also set vgfb->fence to NULL after dropping the reference.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> drivers/gpu/drm/virtio/virtgpu_drv.h | 1 -
> drivers/gpu/drm/virtio/virtgpu_fence.c | 8 --------
> drivers/gpu/drm/virtio/virtgpu_ioctl.c | 2 +-
> drivers/gpu/drm/virtio/virtgpu_plane.c | 6 ++++--
> 4 files changed, 5 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
> index 63704915f8..bfb31fc3d0 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.h
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
> @@ -337,7 +337,6 @@ int virtio_gpu_mmap(struct file *filp, struct vm_area_struct *vma);
> /* virtio_gpu_fence.c */
> struct virtio_gpu_fence *virtio_gpu_fence_alloc(
> struct virtio_gpu_device *vgdev);
> -void virtio_gpu_fence_cleanup(struct virtio_gpu_fence *fence);
> int virtio_gpu_fence_emit(struct virtio_gpu_device *vgdev,
> struct virtio_gpu_ctrl_hdr *cmd_hdr,
> struct virtio_gpu_fence *fence);
> diff --git a/drivers/gpu/drm/virtio/virtgpu_fence.c b/drivers/gpu/drm/virtio/virtgpu_fence.c
> index 4d6826b278..21bd4c4a32 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_fence.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_fence.c
> @@ -81,14 +81,6 @@ struct virtio_gpu_fence *virtio_gpu_fence_alloc(struct virtio_gpu_device *vgdev)
> return fence;
> }
>
> -void virtio_gpu_fence_cleanup(struct virtio_gpu_fence *fence)
> -{
> - if (!fence)
> - return;
> -
> - dma_fence_put(&fence->f);
> -}
> -
> int virtio_gpu_fence_emit(struct virtio_gpu_device *vgdev,
> struct virtio_gpu_ctrl_hdr *cmd_hdr,
> struct virtio_gpu_fence *fence)
> diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
> index 161b80fee4..14ce8188c0 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
> @@ -351,7 +351,7 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
> virtio_gpu_cmd_resource_create_3d(vgdev, qobj, &rc_3d);
> ret = virtio_gpu_object_attach(vgdev, qobj, fence);
> if (ret) {
> - virtio_gpu_fence_cleanup(fence);
> + dma_fence_put(&fence->f);
> goto fail_backoff;
> }
> ttm_eu_fence_buffer_objects(&ticket, &validate_list, &fence->f);
> diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
> index 548265b8e8..024c2aa0c9 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_plane.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
> @@ -169,8 +169,10 @@ static void virtio_gpu_cursor_cleanup_fb(struct drm_plane *plane,
> return;
>
> vgfb = to_virtio_gpu_framebuffer(plane->state->fb);
> - if (vgfb->fence)
> - virtio_gpu_fence_cleanup(vgfb->fence);
> + if (vgfb->fence) {
> + dma_fence_put(&vgfb->fence->f);
> + vgfb->fence = NULL;
> + }
> }
>
> static void virtio_gpu_cursor_plane_update(struct drm_plane *plane,
Reviewed-by: Ezequiel Garcia <ezequiel@collabora.com>
Regards,
Ezequiel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 05/10] drm/virtio: use struct to pass params to virtio_gpu_object_create()
2018-12-19 12:27 ` [PATCH 05/10] drm/virtio: use struct to pass params to virtio_gpu_object_create() Gerd Hoffmann
@ 2019-01-02 17:12 ` Ezequiel Garcia
0 siblings, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2019-01-02 17:12 UTC (permalink / raw)
To: Gerd Hoffmann, dri-devel, David Airlie
Cc: David Airlie, open list, open list:VIRTIO GPU DRIVER
On Wed, 2018-12-19 at 13:27 +0100, Gerd Hoffmann wrote:
> Create virtio_gpu_object_params, use that to pass object parameters to
> virtio_gpu_object_create. Also drop unused "kernel" parameter (unused,
> always false).
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> drivers/gpu/drm/virtio/virtgpu_drv.h | 15 ++++++++++-----
> drivers/gpu/drm/virtio/virtgpu_gem.c | 18 +++++++++++-------
> drivers/gpu/drm/virtio/virtgpu_ioctl.c | 12 +++++++-----
> drivers/gpu/drm/virtio/virtgpu_object.c | 22 +++++++++-------------
> 4 files changed, 37 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
> index bfb31fc3d0..8cff8a3f7c 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.h
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
> @@ -53,6 +53,11 @@
> /* virtgpu_drm_bus.c */
> int drm_virtio_init(struct drm_driver *driver, struct virtio_device *vdev);
>
> +struct virtio_gpu_object_params {
> + unsigned long size;
> + bool pinned;
> +};
> +
> struct virtio_gpu_object {
> struct drm_gem_object gem_base;
> uint32_t hw_res_handle;
> @@ -220,16 +225,16 @@ int virtio_gpu_gem_init(struct virtio_gpu_device *vgdev);
> void virtio_gpu_gem_fini(struct virtio_gpu_device *vgdev);
> int virtio_gpu_gem_create(struct drm_file *file,
> struct drm_device *dev,
> - uint64_t size,
> + struct virtio_gpu_object_params *params,
> struct drm_gem_object **obj_p,
> uint32_t *handle_p);
> int virtio_gpu_gem_object_open(struct drm_gem_object *obj,
> struct drm_file *file);
> void virtio_gpu_gem_object_close(struct drm_gem_object *obj,
> struct drm_file *file);
> -struct virtio_gpu_object *virtio_gpu_alloc_object(struct drm_device *dev,
> - size_t size, bool kernel,
> - bool pinned);
> +struct virtio_gpu_object*
> +virtio_gpu_alloc_object(struct drm_device *dev,
> + struct virtio_gpu_object_params *params);
> int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
> struct drm_device *dev,
> struct drm_mode_create_dumb *args);
> @@ -345,7 +350,7 @@ void virtio_gpu_fence_event_process(struct virtio_gpu_device *vdev,
>
> /* virtio_gpu_object */
> int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
> - unsigned long size, bool kernel, bool pinned,
> + struct virtio_gpu_object_params *params,
> struct virtio_gpu_object **bo_ptr);
> void virtio_gpu_object_kunmap(struct virtio_gpu_object *bo);
> int virtio_gpu_object_kmap(struct virtio_gpu_object *bo);
> diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
> index f065863939..384cd80bf3 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_gem.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
> @@ -34,15 +34,15 @@ void virtio_gpu_gem_free_object(struct drm_gem_object *gem_obj)
> virtio_gpu_object_unref(&obj);
> }
>
> -struct virtio_gpu_object *virtio_gpu_alloc_object(struct drm_device *dev,
> - size_t size, bool kernel,
> - bool pinned)
> +struct virtio_gpu_object*
> +virtio_gpu_alloc_object(struct drm_device *dev,
> + struct virtio_gpu_object_params *params)
> {
> struct virtio_gpu_device *vgdev = dev->dev_private;
> struct virtio_gpu_object *obj;
> int ret;
>
> - ret = virtio_gpu_object_create(vgdev, size, kernel, pinned, &obj);
> + ret = virtio_gpu_object_create(vgdev, params, &obj);
> if (ret)
> return ERR_PTR(ret);
>
> @@ -51,7 +51,7 @@ struct virtio_gpu_object *virtio_gpu_alloc_object(struct drm_device *dev,
>
> int virtio_gpu_gem_create(struct drm_file *file,
> struct drm_device *dev,
> - uint64_t size,
> + struct virtio_gpu_object_params *params,
> struct drm_gem_object **obj_p,
> uint32_t *handle_p)
> {
> @@ -59,7 +59,7 @@ int virtio_gpu_gem_create(struct drm_file *file,
> int ret;
> u32 handle;
>
> - obj = virtio_gpu_alloc_object(dev, size, false, false);
> + obj = virtio_gpu_alloc_object(dev, params);
> if (IS_ERR(obj))
> return PTR_ERR(obj);
>
> @@ -85,6 +85,9 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
> struct virtio_gpu_device *vgdev = dev->dev_private;
> struct drm_gem_object *gobj;
> struct virtio_gpu_object *obj;
> + struct virtio_gpu_object_params params = {
> + .pinned = false,
> + };
Nit: I think it's more readable to set all the fields
of the params struct in the same place...
> int ret;
> uint32_t pitch;
> uint32_t format;
> @@ -96,7 +99,8 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
> args->size = pitch * args->height;
> args->size = ALIGN(args->size, PAGE_SIZE);
>
> - ret = virtio_gpu_gem_create(file_priv, dev, args->size, &gobj,
... i.e. here.
> + params.size = args->size;
> + ret = virtio_gpu_gem_create(file_priv, dev, ¶ms, &gobj,
> &args->handle);
> if (ret)
> goto fail;
> diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
> index 14ce8188c0..65b4a54f10 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
> @@ -279,12 +279,14 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
> struct virtio_gpu_object *qobj;
> struct drm_gem_object *obj;
> uint32_t handle = 0;
> - uint32_t size;
> struct list_head validate_list;
> struct ttm_validate_buffer mainbuf;
> struct virtio_gpu_fence *fence = NULL;
> struct ww_acquire_ctx ticket;
> struct virtio_gpu_resource_create_3d rc_3d;
> + struct virtio_gpu_object_params params = {
> + .pinned = false,
> + };
>
> if (vgdev->has_virgl_3d == false) {
> if (rc->depth > 1)
> @@ -302,13 +304,13 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
> INIT_LIST_HEAD(&validate_list);
> memset(&mainbuf, 0, sizeof(struct ttm_validate_buffer));
>
> - size = rc->size;
> + params.size = rc->size;
>
> /* allocate a single page size object */
> - if (size == 0)
> - size = PAGE_SIZE;
> + if (params.size == 0)
> + params.size = PAGE_SIZE;
>
> - qobj = virtio_gpu_alloc_object(dev, size, false, false);
> + qobj = virtio_gpu_alloc_object(dev, ¶ms);
> if (IS_ERR(qobj))
> return PTR_ERR(qobj);
> obj = &qobj->gem_base;
> diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c
> index f39a183d59..62367e3f80 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_object.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_object.c
> @@ -79,21 +79,16 @@ static void virtio_gpu_init_ttm_placement(struct virtio_gpu_object *vgbo,
> }
>
> int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
> - unsigned long size, bool kernel, bool pinned,
> + struct virtio_gpu_object_params *params,
> struct virtio_gpu_object **bo_ptr)
> {
> struct virtio_gpu_object *bo;
> - enum ttm_bo_type type;
> size_t acc_size;
> int ret;
>
> - if (kernel)
> - type = ttm_bo_type_kernel;
> - else
> - type = ttm_bo_type_device;
> *bo_ptr = NULL;
>
> - acc_size = ttm_bo_dma_acc_size(&vgdev->mman.bdev, size,
> + acc_size = ttm_bo_dma_acc_size(&vgdev->mman.bdev, params->size,
> sizeof(struct virtio_gpu_object));
>
> bo = kzalloc(sizeof(struct virtio_gpu_object), GFP_KERNEL);
> @@ -104,19 +99,20 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
> kfree(bo);
> return ret;
> }
> - size = roundup(size, PAGE_SIZE);
> - ret = drm_gem_object_init(vgdev->ddev, &bo->gem_base, size);
> + params->size = roundup(params->size, PAGE_SIZE);
> + ret = drm_gem_object_init(vgdev->ddev, &bo->gem_base, params->size);
> if (ret != 0) {
> virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle);
> kfree(bo);
> return ret;
> }
> bo->dumb = false;
> - virtio_gpu_init_ttm_placement(bo, pinned);
> + virtio_gpu_init_ttm_placement(bo, params->pinned);
>
> - ret = ttm_bo_init(&vgdev->mman.bdev, &bo->tbo, size, type,
> - &bo->placement, 0, !kernel, acc_size,
> - NULL, NULL, &virtio_gpu_ttm_bo_destroy);
> + ret = ttm_bo_init(&vgdev->mman.bdev, &bo->tbo, params->size,
> + ttm_bo_type_device, &bo->placement, 0,
> + true, acc_size, NULL, NULL,
> + &virtio_gpu_ttm_bo_destroy);
> /* ttm_bo_init failure will call the destroy */
> if (ret != 0)
> return ret;
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2019-01-02 17:12 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20181219122708.4586-1-kraxel@redhat.com>
2018-12-19 12:26 ` [PATCH 01/10] drm/virtio: log error responses Gerd Hoffmann
2018-12-21 9:59 ` Oleksandr Andrushchenko
2018-12-19 12:27 ` [PATCH 02/10] drm/virtio: fix pageflip flush Gerd Hoffmann
2019-01-02 17:09 ` Ezequiel Garcia
2018-12-19 12:27 ` [PATCH 03/10] drm/virtio: drop virtio_gpu_fence_cleanup() Gerd Hoffmann
2019-01-02 17:10 ` Ezequiel Garcia
2018-12-19 12:27 ` [PATCH 04/10] drm/virtio: move virtio_gpu_object_{attach,detach} calls Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 05/10] drm/virtio: use struct to pass params to virtio_gpu_object_create() Gerd Hoffmann
2019-01-02 17:12 ` Ezequiel Garcia
2018-12-19 12:27 ` [PATCH 06/10] drm/virtio: params struct for virtio_gpu_cmd_create_resource() Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 07/10] drm/virtio: params struct for virtio_gpu_cmd_create_resource_3d() Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 08/10] drm/virtio: drop fencing in virtio_gpu_resource_create_ioctl Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 09/10] drm/virtio: move virtio_gpu_cmd_create_resource call into virtio_gpu_object_create Gerd Hoffmann
2018-12-19 12:27 ` [PATCH 10/10] drm/virtio: ditch virtio_gpu_object_attach() calls Gerd Hoffmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).