* [PATCH] drm/virtgpu: Replace dev_private by helper function
@ 2023-06-20 10:33 Thomas Zimmermann
2023-06-21 7:57 ` Gerd Hoffmann
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Thomas Zimmermann @ 2023-06-20 10:33 UTC (permalink / raw)
To: airlied, kraxel, gurchetansingh, olvaffe, daniel
Cc: Thomas Zimmermann, dri-devel, virtualization
Dereference struct drm_device.dev_private in the helper function
do_virtio_gpu_device(). The dev_private field is deprecated and
drivers are advised not ot use it. Encapsulating it in a helper
function will help with a later removal. No functional changes.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/gpu/drm/virtio/virtgpu_debugfs.c | 6 +++---
drivers/gpu/drm/virtio/virtgpu_display.c | 4 ++--
drivers/gpu/drm/virtio/virtgpu_drv.c | 2 +-
drivers/gpu/drm/virtio/virtgpu_drv.h | 12 ++++++++++++
drivers/gpu/drm/virtio/virtgpu_gem.c | 8 ++++----
drivers/gpu/drm/virtio/virtgpu_ioctl.c | 18 +++++++++---------
drivers/gpu/drm/virtio/virtgpu_kms.c | 8 ++++----
drivers/gpu/drm/virtio/virtgpu_object.c | 4 ++--
drivers/gpu/drm/virtio/virtgpu_plane.c | 8 ++++----
drivers/gpu/drm/virtio/virtgpu_prime.c | 4 ++--
drivers/gpu/drm/virtio/virtgpu_submit.c | 4 ++--
drivers/gpu/drm/virtio/virtgpu_vq.c | 4 ++--
drivers/gpu/drm/virtio/virtgpu_vram.c | 8 ++++----
13 files changed, 51 insertions(+), 39 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_debugfs.c b/drivers/gpu/drm/virtio/virtgpu_debugfs.c
index 853dd9aa397eb..e768c6253db33 100644
--- a/drivers/gpu/drm/virtio/virtgpu_debugfs.c
+++ b/drivers/gpu/drm/virtio/virtgpu_debugfs.c
@@ -44,7 +44,7 @@ static void virtio_gpu_add_int(struct seq_file *m, const char *name, int value)
static int virtio_gpu_features(struct seq_file *m, void *data)
{
struct drm_info_node *node = (struct drm_info_node *)m->private;
- struct virtio_gpu_device *vgdev = node->minor->dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(node->minor->dev);
virtio_gpu_add_bool(m, "virgl", vgdev->has_virgl_3d);
virtio_gpu_add_bool(m, "edid", vgdev->has_edid);
@@ -69,7 +69,7 @@ static int
virtio_gpu_debugfs_irq_info(struct seq_file *m, void *data)
{
struct drm_info_node *node = (struct drm_info_node *) m->private;
- struct virtio_gpu_device *vgdev = node->minor->dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(node->minor->dev);
seq_printf(m, "fence %llu %lld\n",
(u64)atomic64_read(&vgdev->fence_drv.last_fence_id),
@@ -81,7 +81,7 @@ static int
virtio_gpu_debugfs_host_visible_mm(struct seq_file *m, void *data)
{
struct drm_info_node *node = (struct drm_info_node *)m->private;
- struct virtio_gpu_device *vgdev = node->minor->dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(node->minor->dev);
struct drm_printer p;
if (!vgdev->has_host_visible) {
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index ad924a8502e90..6cf143e06b003 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -86,7 +86,7 @@ virtio_gpu_framebuffer_init(struct drm_device *dev,
static void virtio_gpu_crtc_mode_set_nofb(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_output *output = drm_crtc_to_virtio_gpu_output(crtc);
virtio_gpu_cmd_set_scanout(vgdev, output->index, 0,
@@ -104,7 +104,7 @@ static void virtio_gpu_crtc_atomic_disable(struct drm_crtc *crtc,
struct drm_atomic_state *state)
{
struct drm_device *dev = crtc->dev;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_output *output = drm_crtc_to_virtio_gpu_output(crtc);
virtio_gpu_cmd_set_scanout(vgdev, output->index, 0, 0, 0, 0, 0);
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
index 91ace7a44f2a6..0e251c604049e 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
@@ -125,7 +125,7 @@ static void virtio_gpu_remove(struct virtio_device *vdev)
static void virtio_gpu_config_changed(struct virtio_device *vdev)
{
struct drm_device *dev = vdev->priv;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
schedule_work(&vgdev->config_changed_work);
}
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index 4126c384286bf..d2f9a5862d6b7 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -40,6 +40,7 @@
#include <drm/drm_gem.h>
#include <drm/drm_gem_shmem_helper.h>
#include <drm/drm_ioctl.h>
+#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
#include <drm/virtgpu_drm.h>
@@ -266,6 +267,17 @@ struct virtio_gpu_device {
spinlock_t host_visible_lock;
};
+static inline struct virtio_gpu_device *to_virtio_gpu_device(struct drm_device *dev)
+{
+ drm_WARN_ON_ONCE(dev, !dev->dev_private);
+
+ /*
+ * TODO: Embed struct drm_device in struct virtio_gpu_device and
+ * upcast with container_of().
+ */
+ return dev->dev_private;
+}
+
struct virtio_gpu_fpriv {
uint32_t ctx_id;
uint32_t context_init;
diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index 7db48d17ee3a8..6b1663a2c31eb 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -34,7 +34,7 @@ static int virtio_gpu_gem_create(struct drm_file *file,
struct drm_gem_object **obj_p,
uint32_t *handle_p)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_object *obj;
int ret;
u32 handle;
@@ -64,7 +64,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
{
struct drm_gem_object *gobj;
struct virtio_gpu_object_params params = { 0 };
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
int ret;
uint32_t pitch;
@@ -117,7 +117,7 @@ int virtio_gpu_mode_dumb_mmap(struct drm_file *file_priv,
int virtio_gpu_gem_object_open(struct drm_gem_object *obj,
struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = obj->dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev);
struct virtio_gpu_fpriv *vfpriv = file->driver_priv;
struct virtio_gpu_object_array *objs;
@@ -144,7 +144,7 @@ int virtio_gpu_gem_object_open(struct drm_gem_object *obj,
void virtio_gpu_gem_object_close(struct drm_gem_object *obj,
struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = obj->dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev);
struct virtio_gpu_fpriv *vfpriv = file->driver_priv;
struct virtio_gpu_object_array *objs;
diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
index b24b11f25197d..aefcc7fb2e3e7 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
@@ -54,7 +54,7 @@ static void virtio_gpu_create_context_locked(struct virtio_gpu_device *vgdev,
void virtio_gpu_create_context(struct drm_device *dev, struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_fpriv *vfpriv = file->driver_priv;
mutex_lock(&vfpriv->context_lock);
@@ -70,7 +70,7 @@ void virtio_gpu_create_context(struct drm_device *dev, struct drm_file *file)
static int virtio_gpu_map_ioctl(struct drm_device *dev, void *data,
struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct drm_virtgpu_map *virtio_gpu_map = data;
return virtio_gpu_mode_dumb_mmap(file, vgdev->ddev,
@@ -81,7 +81,7 @@ static int virtio_gpu_map_ioctl(struct drm_device *dev, void *data,
static int virtio_gpu_getparam_ioctl(struct drm_device *dev, void *data,
struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct drm_virtgpu_getparam *param = data;
int value;
@@ -119,7 +119,7 @@ static int virtio_gpu_getparam_ioctl(struct drm_device *dev, void *data,
static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct drm_virtgpu_resource_create *rc = data;
struct virtio_gpu_fence *fence;
int ret;
@@ -214,7 +214,7 @@ static int virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev,
void *data,
struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_fpriv *vfpriv = file->driver_priv;
struct drm_virtgpu_3d_transfer_from_host *args = data;
struct virtio_gpu_object *bo;
@@ -269,7 +269,7 @@ static int virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev,
static int virtio_gpu_transfer_to_host_ioctl(struct drm_device *dev, void *data,
struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_fpriv *vfpriv = file->driver_priv;
struct drm_virtgpu_3d_transfer_to_host *args = data;
struct virtio_gpu_object *bo;
@@ -358,7 +358,7 @@ static int virtio_gpu_wait_ioctl(struct drm_device *dev, void *data,
static int virtio_gpu_get_caps_ioctl(struct drm_device *dev,
void *data, struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct drm_virtgpu_get_caps *args = data;
unsigned size, host_caps_size;
int i;
@@ -493,7 +493,7 @@ static int virtio_gpu_resource_create_blob_ioctl(struct drm_device *dev,
struct drm_gem_object *obj;
struct virtio_gpu_object *bo;
struct virtio_gpu_object_params params = { 0 };
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_fpriv *vfpriv = file->driver_priv;
struct drm_virtgpu_resource_create_blob *rc_blob = data;
@@ -569,7 +569,7 @@ static int virtio_gpu_context_init_ioctl(struct drm_device *dev,
uint64_t valid_ring_mask;
size_t len;
struct drm_virtgpu_context_set_param *ctx_set_params = NULL;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_fpriv *vfpriv = file->driver_priv;
struct drm_virtgpu_context_init *args = data;
diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c
index 5a3b5aaed1f36..ab8c0a6719ac7 100644
--- a/drivers/gpu/drm/virtio/virtgpu_kms.c
+++ b/drivers/gpu/drm/virtio/virtgpu_kms.c
@@ -280,7 +280,7 @@ static void virtio_gpu_cleanup_cap_cache(struct virtio_gpu_device *vgdev)
void virtio_gpu_deinit(struct drm_device *dev)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
flush_work(&vgdev->obj_free_work);
flush_work(&vgdev->ctrlq.dequeue_work);
@@ -292,7 +292,7 @@ void virtio_gpu_deinit(struct drm_device *dev)
void virtio_gpu_release(struct drm_device *dev)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
if (!vgdev)
return;
@@ -307,7 +307,7 @@ void virtio_gpu_release(struct drm_device *dev)
int virtio_gpu_driver_open(struct drm_device *dev, struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_fpriv *vfpriv;
int handle;
@@ -335,7 +335,7 @@ int virtio_gpu_driver_open(struct drm_device *dev, struct drm_file *file)
void virtio_gpu_driver_postclose(struct drm_device *dev, struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_fpriv *vfpriv = file->driver_priv;
if (!vgdev->has_virgl_3d)
diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c
index c7e74cf130221..d5613b74b0456 100644
--- a/drivers/gpu/drm/virtio/virtgpu_object.c
+++ b/drivers/gpu/drm/virtio/virtgpu_object.c
@@ -63,7 +63,7 @@ static void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t
void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo)
{
- struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev);
virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle);
if (virtio_gpu_is_shmem(bo)) {
@@ -86,7 +86,7 @@ void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo)
static void virtio_gpu_free_object(struct drm_gem_object *obj)
{
struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj);
- struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev);
if (bo->created) {
virtio_gpu_cmd_unref_resource(vgdev, bo);
diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index a2e045f3a0004..1f867af2555b1 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -126,7 +126,7 @@ static void virtio_gpu_resource_flush(struct drm_plane *plane,
uint32_t width, uint32_t height)
{
struct drm_device *dev = plane->dev;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_framebuffer *vgfb;
struct virtio_gpu_object *bo;
@@ -161,7 +161,7 @@ static void virtio_gpu_primary_plane_update(struct drm_plane *plane,
struct drm_plane_state *old_state = drm_atomic_get_old_plane_state(state,
plane);
struct drm_device *dev = plane->dev;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_output *output = NULL;
struct virtio_gpu_object *bo;
struct drm_rect rect;
@@ -235,7 +235,7 @@ static int virtio_gpu_plane_prepare_fb(struct drm_plane *plane,
struct drm_plane_state *new_state)
{
struct drm_device *dev = plane->dev;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_framebuffer *vgfb;
struct virtio_gpu_object *bo;
@@ -278,7 +278,7 @@ static void virtio_gpu_cursor_plane_update(struct drm_plane *plane,
struct drm_plane_state *old_state = drm_atomic_get_old_plane_state(state,
plane);
struct drm_device *dev = plane->dev;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_output *output = NULL;
struct virtio_gpu_framebuffer *vgfb;
struct virtio_gpu_object *bo = NULL;
diff --git a/drivers/gpu/drm/virtio/virtgpu_prime.c b/drivers/gpu/drm/virtio/virtgpu_prime.c
index 44425f20d91aa..44e761dc4d79f 100644
--- a/drivers/gpu/drm/virtio/virtgpu_prime.c
+++ b/drivers/gpu/drm/virtio/virtgpu_prime.c
@@ -32,7 +32,7 @@ static int virtgpu_virtio_get_uuid(struct dma_buf *buf,
{
struct drm_gem_object *obj = buf->priv;
struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj);
- struct virtio_gpu_device *vgdev = obj->dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev);
wait_event(vgdev->resp_wq, bo->uuid_state != STATE_INITIALIZING);
if (bo->uuid_state != STATE_OK)
@@ -106,7 +106,7 @@ struct dma_buf *virtgpu_gem_prime_export(struct drm_gem_object *obj,
{
struct dma_buf *buf;
struct drm_device *dev = obj->dev;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj);
int ret = 0;
bool blob = bo->host3d_blob || bo->guest_blob;
diff --git a/drivers/gpu/drm/virtio/virtgpu_submit.c b/drivers/gpu/drm/virtio/virtgpu_submit.c
index cf3c04b16a7a8..5a599064aa265 100644
--- a/drivers/gpu/drm/virtio/virtgpu_submit.c
+++ b/drivers/gpu/drm/virtio/virtgpu_submit.c
@@ -162,7 +162,7 @@ static int virtio_gpu_init_submit(struct virtio_gpu_submit *submit,
u64 fence_ctx, u32 ring_idx)
{
struct virtio_gpu_fpriv *vfpriv = file->driver_priv;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_fence *out_fence;
int err;
@@ -251,7 +251,7 @@ static int virtio_gpu_lock_buflist(struct virtio_gpu_submit *submit)
int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data,
struct drm_file *file)
{
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
struct virtio_gpu_fpriv *vfpriv = file->driver_priv;
u64 fence_ctx = vgdev->fence_drv.context;
struct drm_virtgpu_execbuffer *exbuf = data;
diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
index b1a00c0c25a70..7faa7f1a84005 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -56,7 +56,7 @@ static void convert_to_hw_box(struct virtio_gpu_box *dst,
void virtio_gpu_ctrl_ack(struct virtqueue *vq)
{
struct drm_device *dev = vq->vdev->priv;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
schedule_work(&vgdev->ctrlq.dequeue_work);
}
@@ -64,7 +64,7 @@ void virtio_gpu_ctrl_ack(struct virtqueue *vq)
void virtio_gpu_cursor_ack(struct virtqueue *vq)
{
struct drm_device *dev = vq->vdev->priv;
- struct virtio_gpu_device *vgdev = dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev);
schedule_work(&vgdev->cursorq.dequeue_work);
}
diff --git a/drivers/gpu/drm/virtio/virtgpu_vram.c b/drivers/gpu/drm/virtio/virtgpu_vram.c
index 25df81c027837..c4a82f4da5a48 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vram.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vram.c
@@ -6,7 +6,7 @@
static void virtio_gpu_vram_free(struct drm_gem_object *obj)
{
struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj);
- struct virtio_gpu_device *vgdev = obj->dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev);
struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo);
bool unmap;
@@ -33,7 +33,7 @@ static int virtio_gpu_vram_mmap(struct drm_gem_object *obj,
struct vm_area_struct *vma)
{
int ret;
- struct virtio_gpu_device *vgdev = obj->dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev);
struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj);
struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo);
unsigned long vm_size = vma->vm_end - vma->vm_start;
@@ -70,7 +70,7 @@ struct sg_table *virtio_gpu_vram_map_dma_buf(struct virtio_gpu_object *bo,
struct device *dev,
enum dma_data_direction dir)
{
- struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev);
struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo);
struct sg_table *sgt;
dma_addr_t addr;
@@ -143,7 +143,7 @@ static int virtio_gpu_vram_map(struct virtio_gpu_object *bo)
int ret;
uint64_t offset;
struct virtio_gpu_object_array *objs;
- struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private;
+ struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev);
struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo);
if (!vgdev->has_host_visible)
--
2.41.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH] drm/virtgpu: Replace dev_private by helper function 2023-06-20 10:33 [PATCH] drm/virtgpu: Replace dev_private by helper function Thomas Zimmermann @ 2023-06-21 7:57 ` Gerd Hoffmann 2023-06-21 8:03 ` Thomas Zimmermann 2023-06-21 9:12 ` Sui Jingfeng 2 siblings, 0 replies; 6+ messages in thread From: Gerd Hoffmann @ 2023-06-21 7:57 UTC (permalink / raw) To: Thomas Zimmermann; +Cc: dri-devel, virtualization, airlied, gurchetansingh On Tue, Jun 20, 2023 at 12:33:28PM +0200, Thomas Zimmermann wrote: > Dereference struct drm_device.dev_private in the helper function > do_virtio_gpu_device(). The dev_private field is deprecated and > drivers are advised not ot use it. Encapsulating it in a helper > function will help with a later removal. No functional changes. > > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Acked-by: Gerd Hoffmann <kraxel@redhat.com> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] drm/virtgpu: Replace dev_private by helper function 2023-06-20 10:33 [PATCH] drm/virtgpu: Replace dev_private by helper function Thomas Zimmermann 2023-06-21 7:57 ` Gerd Hoffmann @ 2023-06-21 8:03 ` Thomas Zimmermann 2023-06-21 9:12 ` Sui Jingfeng 2 siblings, 0 replies; 6+ messages in thread From: Thomas Zimmermann @ 2023-06-21 8:03 UTC (permalink / raw) To: airlied, kraxel, gurchetansingh, olvaffe, daniel Cc: dri-devel, virtualization [-- Attachment #1.1: Type: text/plain, Size: 21833 bytes --] Am 20.06.23 um 12:33 schrieb Thomas Zimmermann: > Dereference struct drm_device.dev_private in the helper function > do_virtio_gpu_device(). The dev_private field is deprecated and > drivers are advised not ot use it. Encapsulating it in a helper > function will help with a later removal. No functional changes. This paragraph needs some spell checking before it lands. :) > > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> > --- > drivers/gpu/drm/virtio/virtgpu_debugfs.c | 6 +++--- > drivers/gpu/drm/virtio/virtgpu_display.c | 4 ++-- > drivers/gpu/drm/virtio/virtgpu_drv.c | 2 +- > drivers/gpu/drm/virtio/virtgpu_drv.h | 12 ++++++++++++ > drivers/gpu/drm/virtio/virtgpu_gem.c | 8 ++++---- > drivers/gpu/drm/virtio/virtgpu_ioctl.c | 18 +++++++++--------- > drivers/gpu/drm/virtio/virtgpu_kms.c | 8 ++++---- > drivers/gpu/drm/virtio/virtgpu_object.c | 4 ++-- > drivers/gpu/drm/virtio/virtgpu_plane.c | 8 ++++---- > drivers/gpu/drm/virtio/virtgpu_prime.c | 4 ++-- > drivers/gpu/drm/virtio/virtgpu_submit.c | 4 ++-- > drivers/gpu/drm/virtio/virtgpu_vq.c | 4 ++-- > drivers/gpu/drm/virtio/virtgpu_vram.c | 8 ++++---- > 13 files changed, 51 insertions(+), 39 deletions(-) > > diff --git a/drivers/gpu/drm/virtio/virtgpu_debugfs.c b/drivers/gpu/drm/virtio/virtgpu_debugfs.c > index 853dd9aa397eb..e768c6253db33 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_debugfs.c > +++ b/drivers/gpu/drm/virtio/virtgpu_debugfs.c > @@ -44,7 +44,7 @@ static void virtio_gpu_add_int(struct seq_file *m, const char *name, int value) > static int virtio_gpu_features(struct seq_file *m, void *data) > { > struct drm_info_node *node = (struct drm_info_node *)m->private; > - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(node->minor->dev); > > virtio_gpu_add_bool(m, "virgl", vgdev->has_virgl_3d); > virtio_gpu_add_bool(m, "edid", vgdev->has_edid); > @@ -69,7 +69,7 @@ static int > virtio_gpu_debugfs_irq_info(struct seq_file *m, void *data) > { > struct drm_info_node *node = (struct drm_info_node *) m->private; > - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(node->minor->dev); > > seq_printf(m, "fence %llu %lld\n", > (u64)atomic64_read(&vgdev->fence_drv.last_fence_id), > @@ -81,7 +81,7 @@ static int > virtio_gpu_debugfs_host_visible_mm(struct seq_file *m, void *data) > { > struct drm_info_node *node = (struct drm_info_node *)m->private; > - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(node->minor->dev); > struct drm_printer p; > > if (!vgdev->has_host_visible) { > diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c > index ad924a8502e90..6cf143e06b003 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_display.c > +++ b/drivers/gpu/drm/virtio/virtgpu_display.c > @@ -86,7 +86,7 @@ virtio_gpu_framebuffer_init(struct drm_device *dev, > static void virtio_gpu_crtc_mode_set_nofb(struct drm_crtc *crtc) > { > struct drm_device *dev = crtc->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_output *output = drm_crtc_to_virtio_gpu_output(crtc); > > virtio_gpu_cmd_set_scanout(vgdev, output->index, 0, > @@ -104,7 +104,7 @@ static void virtio_gpu_crtc_atomic_disable(struct drm_crtc *crtc, > struct drm_atomic_state *state) > { > struct drm_device *dev = crtc->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_output *output = drm_crtc_to_virtio_gpu_output(crtc); > > virtio_gpu_cmd_set_scanout(vgdev, output->index, 0, 0, 0, 0, 0); > diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c > index 91ace7a44f2a6..0e251c604049e 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_drv.c > +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c > @@ -125,7 +125,7 @@ static void virtio_gpu_remove(struct virtio_device *vdev) > static void virtio_gpu_config_changed(struct virtio_device *vdev) > { > struct drm_device *dev = vdev->priv; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > > schedule_work(&vgdev->config_changed_work); > } > diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h > index 4126c384286bf..d2f9a5862d6b7 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_drv.h > +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h > @@ -40,6 +40,7 @@ > #include <drm/drm_gem.h> > #include <drm/drm_gem_shmem_helper.h> > #include <drm/drm_ioctl.h> > +#include <drm/drm_print.h> > #include <drm/drm_probe_helper.h> > #include <drm/virtgpu_drm.h> > > @@ -266,6 +267,17 @@ struct virtio_gpu_device { > spinlock_t host_visible_lock; > }; > > +static inline struct virtio_gpu_device *to_virtio_gpu_device(struct drm_device *dev) > +{ > + drm_WARN_ON_ONCE(dev, !dev->dev_private); > + > + /* > + * TODO: Embed struct drm_device in struct virtio_gpu_device and > + * upcast with container_of(). > + */ > + return dev->dev_private; > +} > + > struct virtio_gpu_fpriv { > uint32_t ctx_id; > uint32_t context_init; > diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c > index 7db48d17ee3a8..6b1663a2c31eb 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_gem.c > +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c > @@ -34,7 +34,7 @@ static int virtio_gpu_gem_create(struct drm_file *file, > struct drm_gem_object **obj_p, > uint32_t *handle_p) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_object *obj; > int ret; > u32 handle; > @@ -64,7 +64,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv, > { > struct drm_gem_object *gobj; > struct virtio_gpu_object_params params = { 0 }; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > int ret; > uint32_t pitch; > > @@ -117,7 +117,7 @@ int virtio_gpu_mode_dumb_mmap(struct drm_file *file_priv, > int virtio_gpu_gem_object_open(struct drm_gem_object *obj, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = obj->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct virtio_gpu_object_array *objs; > > @@ -144,7 +144,7 @@ int virtio_gpu_gem_object_open(struct drm_gem_object *obj, > void virtio_gpu_gem_object_close(struct drm_gem_object *obj, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = obj->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct virtio_gpu_object_array *objs; > > diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c > index b24b11f25197d..aefcc7fb2e3e7 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c > +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c > @@ -54,7 +54,7 @@ static void virtio_gpu_create_context_locked(struct virtio_gpu_device *vgdev, > > void virtio_gpu_create_context(struct drm_device *dev, struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > > mutex_lock(&vfpriv->context_lock); > @@ -70,7 +70,7 @@ void virtio_gpu_create_context(struct drm_device *dev, struct drm_file *file) > static int virtio_gpu_map_ioctl(struct drm_device *dev, void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct drm_virtgpu_map *virtio_gpu_map = data; > > return virtio_gpu_mode_dumb_mmap(file, vgdev->ddev, > @@ -81,7 +81,7 @@ static int virtio_gpu_map_ioctl(struct drm_device *dev, void *data, > static int virtio_gpu_getparam_ioctl(struct drm_device *dev, void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct drm_virtgpu_getparam *param = data; > int value; > > @@ -119,7 +119,7 @@ static int virtio_gpu_getparam_ioctl(struct drm_device *dev, void *data, > static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct drm_virtgpu_resource_create *rc = data; > struct virtio_gpu_fence *fence; > int ret; > @@ -214,7 +214,7 @@ static int virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev, > void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct drm_virtgpu_3d_transfer_from_host *args = data; > struct virtio_gpu_object *bo; > @@ -269,7 +269,7 @@ static int virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev, > static int virtio_gpu_transfer_to_host_ioctl(struct drm_device *dev, void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct drm_virtgpu_3d_transfer_to_host *args = data; > struct virtio_gpu_object *bo; > @@ -358,7 +358,7 @@ static int virtio_gpu_wait_ioctl(struct drm_device *dev, void *data, > static int virtio_gpu_get_caps_ioctl(struct drm_device *dev, > void *data, struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct drm_virtgpu_get_caps *args = data; > unsigned size, host_caps_size; > int i; > @@ -493,7 +493,7 @@ static int virtio_gpu_resource_create_blob_ioctl(struct drm_device *dev, > struct drm_gem_object *obj; > struct virtio_gpu_object *bo; > struct virtio_gpu_object_params params = { 0 }; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct drm_virtgpu_resource_create_blob *rc_blob = data; > > @@ -569,7 +569,7 @@ static int virtio_gpu_context_init_ioctl(struct drm_device *dev, > uint64_t valid_ring_mask; > size_t len; > struct drm_virtgpu_context_set_param *ctx_set_params = NULL; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct drm_virtgpu_context_init *args = data; > > diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c > index 5a3b5aaed1f36..ab8c0a6719ac7 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_kms.c > +++ b/drivers/gpu/drm/virtio/virtgpu_kms.c > @@ -280,7 +280,7 @@ static void virtio_gpu_cleanup_cap_cache(struct virtio_gpu_device *vgdev) > > void virtio_gpu_deinit(struct drm_device *dev) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > > flush_work(&vgdev->obj_free_work); > flush_work(&vgdev->ctrlq.dequeue_work); > @@ -292,7 +292,7 @@ void virtio_gpu_deinit(struct drm_device *dev) > > void virtio_gpu_release(struct drm_device *dev) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > > if (!vgdev) > return; > @@ -307,7 +307,7 @@ void virtio_gpu_release(struct drm_device *dev) > > int virtio_gpu_driver_open(struct drm_device *dev, struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv; > int handle; > > @@ -335,7 +335,7 @@ int virtio_gpu_driver_open(struct drm_device *dev, struct drm_file *file) > > void virtio_gpu_driver_postclose(struct drm_device *dev, struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > > if (!vgdev->has_virgl_3d) > diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c > index c7e74cf130221..d5613b74b0456 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_object.c > +++ b/drivers/gpu/drm/virtio/virtgpu_object.c > @@ -63,7 +63,7 @@ static void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t > > void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo) > { > - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev); > > virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); > if (virtio_gpu_is_shmem(bo)) { > @@ -86,7 +86,7 @@ void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo) > static void virtio_gpu_free_object(struct drm_gem_object *obj) > { > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); > - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev); > > if (bo->created) { > virtio_gpu_cmd_unref_resource(vgdev, bo); > diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c > index a2e045f3a0004..1f867af2555b1 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_plane.c > +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c > @@ -126,7 +126,7 @@ static void virtio_gpu_resource_flush(struct drm_plane *plane, > uint32_t width, uint32_t height) > { > struct drm_device *dev = plane->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_framebuffer *vgfb; > struct virtio_gpu_object *bo; > > @@ -161,7 +161,7 @@ static void virtio_gpu_primary_plane_update(struct drm_plane *plane, > struct drm_plane_state *old_state = drm_atomic_get_old_plane_state(state, > plane); > struct drm_device *dev = plane->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_output *output = NULL; > struct virtio_gpu_object *bo; > struct drm_rect rect; > @@ -235,7 +235,7 @@ static int virtio_gpu_plane_prepare_fb(struct drm_plane *plane, > struct drm_plane_state *new_state) > { > struct drm_device *dev = plane->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_framebuffer *vgfb; > struct virtio_gpu_object *bo; > > @@ -278,7 +278,7 @@ static void virtio_gpu_cursor_plane_update(struct drm_plane *plane, > struct drm_plane_state *old_state = drm_atomic_get_old_plane_state(state, > plane); > struct drm_device *dev = plane->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_output *output = NULL; > struct virtio_gpu_framebuffer *vgfb; > struct virtio_gpu_object *bo = NULL; > diff --git a/drivers/gpu/drm/virtio/virtgpu_prime.c b/drivers/gpu/drm/virtio/virtgpu_prime.c > index 44425f20d91aa..44e761dc4d79f 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_prime.c > +++ b/drivers/gpu/drm/virtio/virtgpu_prime.c > @@ -32,7 +32,7 @@ static int virtgpu_virtio_get_uuid(struct dma_buf *buf, > { > struct drm_gem_object *obj = buf->priv; > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); > - struct virtio_gpu_device *vgdev = obj->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); > > wait_event(vgdev->resp_wq, bo->uuid_state != STATE_INITIALIZING); > if (bo->uuid_state != STATE_OK) > @@ -106,7 +106,7 @@ struct dma_buf *virtgpu_gem_prime_export(struct drm_gem_object *obj, > { > struct dma_buf *buf; > struct drm_device *dev = obj->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); > int ret = 0; > bool blob = bo->host3d_blob || bo->guest_blob; > diff --git a/drivers/gpu/drm/virtio/virtgpu_submit.c b/drivers/gpu/drm/virtio/virtgpu_submit.c > index cf3c04b16a7a8..5a599064aa265 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_submit.c > +++ b/drivers/gpu/drm/virtio/virtgpu_submit.c > @@ -162,7 +162,7 @@ static int virtio_gpu_init_submit(struct virtio_gpu_submit *submit, > u64 fence_ctx, u32 ring_idx) > { > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fence *out_fence; > int err; > > @@ -251,7 +251,7 @@ static int virtio_gpu_lock_buflist(struct virtio_gpu_submit *submit) > int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > u64 fence_ctx = vgdev->fence_drv.context; > struct drm_virtgpu_execbuffer *exbuf = data; > diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c > index b1a00c0c25a70..7faa7f1a84005 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_vq.c > +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c > @@ -56,7 +56,7 @@ static void convert_to_hw_box(struct virtio_gpu_box *dst, > void virtio_gpu_ctrl_ack(struct virtqueue *vq) > { > struct drm_device *dev = vq->vdev->priv; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > > schedule_work(&vgdev->ctrlq.dequeue_work); > } > @@ -64,7 +64,7 @@ void virtio_gpu_ctrl_ack(struct virtqueue *vq) > void virtio_gpu_cursor_ack(struct virtqueue *vq) > { > struct drm_device *dev = vq->vdev->priv; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > > schedule_work(&vgdev->cursorq.dequeue_work); > } > diff --git a/drivers/gpu/drm/virtio/virtgpu_vram.c b/drivers/gpu/drm/virtio/virtgpu_vram.c > index 25df81c027837..c4a82f4da5a48 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_vram.c > +++ b/drivers/gpu/drm/virtio/virtgpu_vram.c > @@ -6,7 +6,7 @@ > static void virtio_gpu_vram_free(struct drm_gem_object *obj) > { > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); > - struct virtio_gpu_device *vgdev = obj->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); > struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); > bool unmap; > > @@ -33,7 +33,7 @@ static int virtio_gpu_vram_mmap(struct drm_gem_object *obj, > struct vm_area_struct *vma) > { > int ret; > - struct virtio_gpu_device *vgdev = obj->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); > struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); > unsigned long vm_size = vma->vm_end - vma->vm_start; > @@ -70,7 +70,7 @@ struct sg_table *virtio_gpu_vram_map_dma_buf(struct virtio_gpu_object *bo, > struct device *dev, > enum dma_data_direction dir) > { > - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev); > struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); > struct sg_table *sgt; > dma_addr_t addr; > @@ -143,7 +143,7 @@ static int virtio_gpu_vram_map(struct virtio_gpu_object *bo) > int ret; > uint64_t offset; > struct virtio_gpu_object_array *objs; > - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev); > struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); > > if (!vgdev->has_host_visible) -- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Frankenstrasse 146, 90461 Nuernberg, Germany GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman HRB 36809 (AG Nuernberg) [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 840 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: drm/virtgpu: Replace dev_private by helper function 2023-06-20 10:33 [PATCH] drm/virtgpu: Replace dev_private by helper function Thomas Zimmermann 2023-06-21 7:57 ` Gerd Hoffmann 2023-06-21 8:03 ` Thomas Zimmermann @ 2023-06-21 9:12 ` Sui Jingfeng 2023-06-21 10:36 ` Thomas Zimmermann 2 siblings, 1 reply; 6+ messages in thread From: Sui Jingfeng @ 2023-06-21 9:12 UTC (permalink / raw) To: Thomas Zimmermann, airlied, kraxel, gurchetansingh, olvaffe, daniel Cc: dri-devel, virtualization Hi, On 2023/6/20 18:33, Thomas Zimmermann wrote: > Dereference struct drm_device.dev_private in the helper function > do_virtio_gpu_device(). Is the word "Dereference" accurate enough ? I know what you means, I heard of de-reference a pointer frequently, It stand for fetch the value of a pointer, say "*p = val" or " val = *p". While here you are introducing a helper function to fetch the pointer to a driver specific device from the pointer to drm_device, this is actually doing the copy of a pointer. > The dev_private field is deprecated and > drivers are advised not ot use it. "ot" -> "to" , Here, I have some understanding toward this. The drm_device is not a real device, it is a kind of software service. Because the struct drm_device don't contain a 'struct device' instance. While 'struct pci_dev' and 'struct platform_device' contain a 'struct device' instance, they are real device. Component based driver tend to bind the multiple miscellaneous sub-device to a virtual master. So these driver have multiple platform device instance or multiple xxx_device_private. Embed the 'struct drm_device' to any of those xxx_device_private would be not fair to others. A GPU can have multiple GPU core also. In those case, the instance of struct drm_device in intended to be shared by all GPU core. Or to be shared by a DC driver + GPU driver + External encoder drivers etc. So this depend on the device driver's implement and the hardware. > Encapsulating it in a helper > function will help with a later removal. No functional changes. Indeed, the later removal only need to change the to_virtio_gpu_device() function itself as well as the drm device allocation. > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> > Acked-by: Gerd Hoffmann <kraxel@redhat.com> > --- > drivers/gpu/drm/virtio/virtgpu_debugfs.c | 6 +++--- > drivers/gpu/drm/virtio/virtgpu_display.c | 4 ++-- > drivers/gpu/drm/virtio/virtgpu_drv.c | 2 +- > drivers/gpu/drm/virtio/virtgpu_drv.h | 12 ++++++++++++ > drivers/gpu/drm/virtio/virtgpu_gem.c | 8 ++++---- > drivers/gpu/drm/virtio/virtgpu_ioctl.c | 18 +++++++++--------- > drivers/gpu/drm/virtio/virtgpu_kms.c | 8 ++++---- > drivers/gpu/drm/virtio/virtgpu_object.c | 4 ++-- > drivers/gpu/drm/virtio/virtgpu_plane.c | 8 ++++---- > drivers/gpu/drm/virtio/virtgpu_prime.c | 4 ++-- > drivers/gpu/drm/virtio/virtgpu_submit.c | 4 ++-- > drivers/gpu/drm/virtio/virtgpu_vq.c | 4 ++-- > drivers/gpu/drm/virtio/virtgpu_vram.c | 8 ++++---- > 13 files changed, 51 insertions(+), 39 deletions(-) > > diff --git a/drivers/gpu/drm/virtio/virtgpu_debugfs.c b/drivers/gpu/drm/virtio/virtgpu_debugfs.c > index 853dd9aa397eb..e768c6253db33 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_debugfs.c > +++ b/drivers/gpu/drm/virtio/virtgpu_debugfs.c > @@ -44,7 +44,7 @@ static void virtio_gpu_add_int(struct seq_file *m, const char *name, int value) > static int virtio_gpu_features(struct seq_file *m, void *data) > { > struct drm_info_node *node = (struct drm_info_node *)m->private; > - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(node->minor->dev); > > virtio_gpu_add_bool(m, "virgl", vgdev->has_virgl_3d); > virtio_gpu_add_bool(m, "edid", vgdev->has_edid); > @@ -69,7 +69,7 @@ static int > virtio_gpu_debugfs_irq_info(struct seq_file *m, void *data) > { > struct drm_info_node *node = (struct drm_info_node *) m->private; > - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(node->minor->dev); > > seq_printf(m, "fence %llu %lld\n", > (u64)atomic64_read(&vgdev->fence_drv.last_fence_id), > @@ -81,7 +81,7 @@ static int > virtio_gpu_debugfs_host_visible_mm(struct seq_file *m, void *data) > { > struct drm_info_node *node = (struct drm_info_node *)m->private; > - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(node->minor->dev); > struct drm_printer p; > > if (!vgdev->has_host_visible) { > diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c > index ad924a8502e90..6cf143e06b003 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_display.c > +++ b/drivers/gpu/drm/virtio/virtgpu_display.c > @@ -86,7 +86,7 @@ virtio_gpu_framebuffer_init(struct drm_device *dev, > static void virtio_gpu_crtc_mode_set_nofb(struct drm_crtc *crtc) > { > struct drm_device *dev = crtc->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_output *output = drm_crtc_to_virtio_gpu_output(crtc); > > virtio_gpu_cmd_set_scanout(vgdev, output->index, 0, > @@ -104,7 +104,7 @@ static void virtio_gpu_crtc_atomic_disable(struct drm_crtc *crtc, > struct drm_atomic_state *state) > { > struct drm_device *dev = crtc->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_output *output = drm_crtc_to_virtio_gpu_output(crtc); > > virtio_gpu_cmd_set_scanout(vgdev, output->index, 0, 0, 0, 0, 0); > diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c > index 91ace7a44f2a6..0e251c604049e 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_drv.c > +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c > @@ -125,7 +125,7 @@ static void virtio_gpu_remove(struct virtio_device *vdev) > static void virtio_gpu_config_changed(struct virtio_device *vdev) > { > struct drm_device *dev = vdev->priv; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > > schedule_work(&vgdev->config_changed_work); > } > diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h > index 4126c384286bf..d2f9a5862d6b7 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_drv.h > +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h > @@ -40,6 +40,7 @@ > #include <drm/drm_gem.h> > #include <drm/drm_gem_shmem_helper.h> > #include <drm/drm_ioctl.h> > +#include <drm/drm_print.h> > #include <drm/drm_probe_helper.h> > #include <drm/virtgpu_drm.h> > > @@ -266,6 +267,17 @@ struct virtio_gpu_device { > spinlock_t host_visible_lock; > }; > > +static inline struct virtio_gpu_device *to_virtio_gpu_device(struct drm_device *dev) > +{ > + drm_WARN_ON_ONCE(dev, !dev->dev_private); > + > + /* > + * TODO: Embed struct drm_device in struct virtio_gpu_device and > + * upcast with container_of(). > + */ > + return dev->dev_private; > +} > + > struct virtio_gpu_fpriv { > uint32_t ctx_id; > uint32_t context_init; > diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c > index 7db48d17ee3a8..6b1663a2c31eb 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_gem.c > +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c > @@ -34,7 +34,7 @@ static int virtio_gpu_gem_create(struct drm_file *file, > struct drm_gem_object **obj_p, > uint32_t *handle_p) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_object *obj; > int ret; > u32 handle; > @@ -64,7 +64,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv, > { > struct drm_gem_object *gobj; > struct virtio_gpu_object_params params = { 0 }; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > int ret; > uint32_t pitch; > > @@ -117,7 +117,7 @@ int virtio_gpu_mode_dumb_mmap(struct drm_file *file_priv, > int virtio_gpu_gem_object_open(struct drm_gem_object *obj, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = obj->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct virtio_gpu_object_array *objs; > > @@ -144,7 +144,7 @@ int virtio_gpu_gem_object_open(struct drm_gem_object *obj, > void virtio_gpu_gem_object_close(struct drm_gem_object *obj, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = obj->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct virtio_gpu_object_array *objs; > > diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c > index b24b11f25197d..aefcc7fb2e3e7 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c > +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c > @@ -54,7 +54,7 @@ static void virtio_gpu_create_context_locked(struct virtio_gpu_device *vgdev, > > void virtio_gpu_create_context(struct drm_device *dev, struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > > mutex_lock(&vfpriv->context_lock); > @@ -70,7 +70,7 @@ void virtio_gpu_create_context(struct drm_device *dev, struct drm_file *file) > static int virtio_gpu_map_ioctl(struct drm_device *dev, void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct drm_virtgpu_map *virtio_gpu_map = data; > > return virtio_gpu_mode_dumb_mmap(file, vgdev->ddev, > @@ -81,7 +81,7 @@ static int virtio_gpu_map_ioctl(struct drm_device *dev, void *data, > static int virtio_gpu_getparam_ioctl(struct drm_device *dev, void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct drm_virtgpu_getparam *param = data; > int value; > > @@ -119,7 +119,7 @@ static int virtio_gpu_getparam_ioctl(struct drm_device *dev, void *data, > static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct drm_virtgpu_resource_create *rc = data; > struct virtio_gpu_fence *fence; > int ret; > @@ -214,7 +214,7 @@ static int virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev, > void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct drm_virtgpu_3d_transfer_from_host *args = data; > struct virtio_gpu_object *bo; > @@ -269,7 +269,7 @@ static int virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev, > static int virtio_gpu_transfer_to_host_ioctl(struct drm_device *dev, void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct drm_virtgpu_3d_transfer_to_host *args = data; > struct virtio_gpu_object *bo; > @@ -358,7 +358,7 @@ static int virtio_gpu_wait_ioctl(struct drm_device *dev, void *data, > static int virtio_gpu_get_caps_ioctl(struct drm_device *dev, > void *data, struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct drm_virtgpu_get_caps *args = data; > unsigned size, host_caps_size; > int i; > @@ -493,7 +493,7 @@ static int virtio_gpu_resource_create_blob_ioctl(struct drm_device *dev, > struct drm_gem_object *obj; > struct virtio_gpu_object *bo; > struct virtio_gpu_object_params params = { 0 }; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct drm_virtgpu_resource_create_blob *rc_blob = data; > > @@ -569,7 +569,7 @@ static int virtio_gpu_context_init_ioctl(struct drm_device *dev, > uint64_t valid_ring_mask; > size_t len; > struct drm_virtgpu_context_set_param *ctx_set_params = NULL; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > struct drm_virtgpu_context_init *args = data; > > diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c > index 5a3b5aaed1f36..ab8c0a6719ac7 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_kms.c > +++ b/drivers/gpu/drm/virtio/virtgpu_kms.c > @@ -280,7 +280,7 @@ static void virtio_gpu_cleanup_cap_cache(struct virtio_gpu_device *vgdev) > > void virtio_gpu_deinit(struct drm_device *dev) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > > flush_work(&vgdev->obj_free_work); > flush_work(&vgdev->ctrlq.dequeue_work); > @@ -292,7 +292,7 @@ void virtio_gpu_deinit(struct drm_device *dev) > > void virtio_gpu_release(struct drm_device *dev) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > > if (!vgdev) > return; > @@ -307,7 +307,7 @@ void virtio_gpu_release(struct drm_device *dev) > > int virtio_gpu_driver_open(struct drm_device *dev, struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv; > int handle; > > @@ -335,7 +335,7 @@ int virtio_gpu_driver_open(struct drm_device *dev, struct drm_file *file) > > void virtio_gpu_driver_postclose(struct drm_device *dev, struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > > if (!vgdev->has_virgl_3d) > diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c > index c7e74cf130221..d5613b74b0456 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_object.c > +++ b/drivers/gpu/drm/virtio/virtgpu_object.c > @@ -63,7 +63,7 @@ static void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t > > void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo) > { > - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev); > > virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); > if (virtio_gpu_is_shmem(bo)) { > @@ -86,7 +86,7 @@ void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo) > static void virtio_gpu_free_object(struct drm_gem_object *obj) > { > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); > - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev); > > if (bo->created) { > virtio_gpu_cmd_unref_resource(vgdev, bo); > diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c > index a2e045f3a0004..1f867af2555b1 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_plane.c > +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c > @@ -126,7 +126,7 @@ static void virtio_gpu_resource_flush(struct drm_plane *plane, > uint32_t width, uint32_t height) > { > struct drm_device *dev = plane->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_framebuffer *vgfb; > struct virtio_gpu_object *bo; > > @@ -161,7 +161,7 @@ static void virtio_gpu_primary_plane_update(struct drm_plane *plane, > struct drm_plane_state *old_state = drm_atomic_get_old_plane_state(state, > plane); > struct drm_device *dev = plane->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_output *output = NULL; > struct virtio_gpu_object *bo; > struct drm_rect rect; > @@ -235,7 +235,7 @@ static int virtio_gpu_plane_prepare_fb(struct drm_plane *plane, > struct drm_plane_state *new_state) > { > struct drm_device *dev = plane->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_framebuffer *vgfb; > struct virtio_gpu_object *bo; > > @@ -278,7 +278,7 @@ static void virtio_gpu_cursor_plane_update(struct drm_plane *plane, > struct drm_plane_state *old_state = drm_atomic_get_old_plane_state(state, > plane); > struct drm_device *dev = plane->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_output *output = NULL; > struct virtio_gpu_framebuffer *vgfb; > struct virtio_gpu_object *bo = NULL; > diff --git a/drivers/gpu/drm/virtio/virtgpu_prime.c b/drivers/gpu/drm/virtio/virtgpu_prime.c > index 44425f20d91aa..44e761dc4d79f 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_prime.c > +++ b/drivers/gpu/drm/virtio/virtgpu_prime.c > @@ -32,7 +32,7 @@ static int virtgpu_virtio_get_uuid(struct dma_buf *buf, > { > struct drm_gem_object *obj = buf->priv; > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); > - struct virtio_gpu_device *vgdev = obj->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); > > wait_event(vgdev->resp_wq, bo->uuid_state != STATE_INITIALIZING); > if (bo->uuid_state != STATE_OK) > @@ -106,7 +106,7 @@ struct dma_buf *virtgpu_gem_prime_export(struct drm_gem_object *obj, > { > struct dma_buf *buf; > struct drm_device *dev = obj->dev; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); > int ret = 0; > bool blob = bo->host3d_blob || bo->guest_blob; > diff --git a/drivers/gpu/drm/virtio/virtgpu_submit.c b/drivers/gpu/drm/virtio/virtgpu_submit.c > index cf3c04b16a7a8..5a599064aa265 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_submit.c > +++ b/drivers/gpu/drm/virtio/virtgpu_submit.c > @@ -162,7 +162,7 @@ static int virtio_gpu_init_submit(struct virtio_gpu_submit *submit, > u64 fence_ctx, u32 ring_idx) > { > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fence *out_fence; > int err; > > @@ -251,7 +251,7 @@ static int virtio_gpu_lock_buflist(struct virtio_gpu_submit *submit) > int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, > struct drm_file *file) > { > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > struct virtio_gpu_fpriv *vfpriv = file->driver_priv; > u64 fence_ctx = vgdev->fence_drv.context; > struct drm_virtgpu_execbuffer *exbuf = data; > diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c > index b1a00c0c25a70..7faa7f1a84005 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_vq.c > +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c > @@ -56,7 +56,7 @@ static void convert_to_hw_box(struct virtio_gpu_box *dst, > void virtio_gpu_ctrl_ack(struct virtqueue *vq) > { > struct drm_device *dev = vq->vdev->priv; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > > schedule_work(&vgdev->ctrlq.dequeue_work); > } > @@ -64,7 +64,7 @@ void virtio_gpu_ctrl_ack(struct virtqueue *vq) > void virtio_gpu_cursor_ack(struct virtqueue *vq) > { > struct drm_device *dev = vq->vdev->priv; > - struct virtio_gpu_device *vgdev = dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); > > schedule_work(&vgdev->cursorq.dequeue_work); > } > diff --git a/drivers/gpu/drm/virtio/virtgpu_vram.c b/drivers/gpu/drm/virtio/virtgpu_vram.c > index 25df81c027837..c4a82f4da5a48 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_vram.c > +++ b/drivers/gpu/drm/virtio/virtgpu_vram.c > @@ -6,7 +6,7 @@ > static void virtio_gpu_vram_free(struct drm_gem_object *obj) > { > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); > - struct virtio_gpu_device *vgdev = obj->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); > struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); > bool unmap; > > @@ -33,7 +33,7 @@ static int virtio_gpu_vram_mmap(struct drm_gem_object *obj, > struct vm_area_struct *vma) > { > int ret; > - struct virtio_gpu_device *vgdev = obj->dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); > struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); > unsigned long vm_size = vma->vm_end - vma->vm_start; > @@ -70,7 +70,7 @@ struct sg_table *virtio_gpu_vram_map_dma_buf(struct virtio_gpu_object *bo, > struct device *dev, > enum dma_data_direction dir) > { > - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev); > struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); > struct sg_table *sgt; > dma_addr_t addr; > @@ -143,7 +143,7 @@ static int virtio_gpu_vram_map(struct virtio_gpu_object *bo) > int ret; > uint64_t offset; > struct virtio_gpu_object_array *objs; > - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; > + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(bo->base.base.dev); > struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); > > if (!vgdev->has_host_visible) -- Jingfeng ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: drm/virtgpu: Replace dev_private by helper function 2023-06-21 9:12 ` Sui Jingfeng @ 2023-06-21 10:36 ` Thomas Zimmermann 2023-06-21 11:57 ` Sui Jingfeng 0 siblings, 1 reply; 6+ messages in thread From: Thomas Zimmermann @ 2023-06-21 10:36 UTC (permalink / raw) To: Sui Jingfeng, airlied, kraxel, gurchetansingh, olvaffe, daniel Cc: dri-devel, virtualization [-- Attachment #1.1: Type: text/plain, Size: 26944 bytes --] Am 21.06.23 um 11:12 schrieb Sui Jingfeng: > Hi, > > On 2023/6/20 18:33, Thomas Zimmermann wrote: >> Dereference struct drm_device.dev_private in the helper function >> do_virtio_gpu_device(). > > Is the word "Dereference" accurate enough ? It's not really the correct word, you're right. 'Access' or 'read' would be a better term. > > I know what you means, I heard of de-reference a pointer frequently, > > It stand for fetch the value of a pointer, say "*p = val" or " val = *p". > > > While here you are introducing a helper function to fetch the pointer to > a driver specific device from the pointer to drm_device, > > this is actually doing the copy of a pointer. > >> The dev_private field is deprecated and >> drivers are advised not ot use it. > > "ot" -> "to" , > > > Here, I have some understanding toward this. > > > The drm_device is not a real device, it is a kind of software service. > > Because the struct drm_device don't contain a 'struct device' instance. > > While 'struct pci_dev' and 'struct platform_device' contain a 'struct > device' instance, > > they are real device. > > > Component based driver tend to bind the multiple miscellaneous > sub-device to > > a virtual master. So these driver have multiple platform device > instance or > > multiple xxx_device_private. Embed the 'struct drm_device' to any of > those > > xxx_device_private would be not fair to others. > > > A GPU can have multiple GPU core also. > > In those case, the instance of struct drm_device in intended to be > shared by all GPU core. > > Or to be shared by a DC driver + GPU driver + External encoder drivers > etc. > > So this depend on the device driver's implement and the hardware. I get what you want to say, but it's rarely a problem in practice. Most of the hardware has a single DRM device. If a hardware device has entirely distict components, it's like two separate graphics chips: we can create two instances of struct drm_device, each embedded in its own private structure. And if there's really a case where sub-devices require shared state, drivers can still implement this internally. Best regards Thomas > > >> Encapsulating it in a helper >> function will help with a later removal. No functional changes. > > Indeed, the later removal only need to change the to_virtio_gpu_device() > function itself > > as well as the drm device allocation. > >> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> >> Acked-by: Gerd Hoffmann <kraxel@redhat.com> >> --- >> drivers/gpu/drm/virtio/virtgpu_debugfs.c | 6 +++--- >> drivers/gpu/drm/virtio/virtgpu_display.c | 4 ++-- >> drivers/gpu/drm/virtio/virtgpu_drv.c | 2 +- >> drivers/gpu/drm/virtio/virtgpu_drv.h | 12 ++++++++++++ >> drivers/gpu/drm/virtio/virtgpu_gem.c | 8 ++++---- >> drivers/gpu/drm/virtio/virtgpu_ioctl.c | 18 +++++++++--------- >> drivers/gpu/drm/virtio/virtgpu_kms.c | 8 ++++---- >> drivers/gpu/drm/virtio/virtgpu_object.c | 4 ++-- >> drivers/gpu/drm/virtio/virtgpu_plane.c | 8 ++++---- >> drivers/gpu/drm/virtio/virtgpu_prime.c | 4 ++-- >> drivers/gpu/drm/virtio/virtgpu_submit.c | 4 ++-- >> drivers/gpu/drm/virtio/virtgpu_vq.c | 4 ++-- >> drivers/gpu/drm/virtio/virtgpu_vram.c | 8 ++++---- >> 13 files changed, 51 insertions(+), 39 deletions(-) >> >> diff --git a/drivers/gpu/drm/virtio/virtgpu_debugfs.c >> b/drivers/gpu/drm/virtio/virtgpu_debugfs.c >> index 853dd9aa397eb..e768c6253db33 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_debugfs.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_debugfs.c >> @@ -44,7 +44,7 @@ static void virtio_gpu_add_int(struct seq_file *m, >> const char *name, int value) >> static int virtio_gpu_features(struct seq_file *m, void *data) >> { >> struct drm_info_node *node = (struct drm_info_node *)m->private; >> - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; >> + struct virtio_gpu_device *vgdev = >> to_virtio_gpu_device(node->minor->dev); >> virtio_gpu_add_bool(m, "virgl", vgdev->has_virgl_3d); >> virtio_gpu_add_bool(m, "edid", vgdev->has_edid); >> @@ -69,7 +69,7 @@ static int >> virtio_gpu_debugfs_irq_info(struct seq_file *m, void *data) >> { >> struct drm_info_node *node = (struct drm_info_node *) m->private; >> - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; >> + struct virtio_gpu_device *vgdev = >> to_virtio_gpu_device(node->minor->dev); >> seq_printf(m, "fence %llu %lld\n", >> (u64)atomic64_read(&vgdev->fence_drv.last_fence_id), >> @@ -81,7 +81,7 @@ static int >> virtio_gpu_debugfs_host_visible_mm(struct seq_file *m, void *data) >> { >> struct drm_info_node *node = (struct drm_info_node *)m->private; >> - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; >> + struct virtio_gpu_device *vgdev = >> to_virtio_gpu_device(node->minor->dev); >> struct drm_printer p; >> if (!vgdev->has_host_visible) { >> diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c >> b/drivers/gpu/drm/virtio/virtgpu_display.c >> index ad924a8502e90..6cf143e06b003 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_display.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_display.c >> @@ -86,7 +86,7 @@ virtio_gpu_framebuffer_init(struct drm_device *dev, >> static void virtio_gpu_crtc_mode_set_nofb(struct drm_crtc *crtc) >> { >> struct drm_device *dev = crtc->dev; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_output *output = >> drm_crtc_to_virtio_gpu_output(crtc); >> virtio_gpu_cmd_set_scanout(vgdev, output->index, 0, >> @@ -104,7 +104,7 @@ static void virtio_gpu_crtc_atomic_disable(struct >> drm_crtc *crtc, >> struct drm_atomic_state *state) >> { >> struct drm_device *dev = crtc->dev; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_output *output = >> drm_crtc_to_virtio_gpu_output(crtc); >> virtio_gpu_cmd_set_scanout(vgdev, output->index, 0, 0, 0, 0, 0); >> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c >> b/drivers/gpu/drm/virtio/virtgpu_drv.c >> index 91ace7a44f2a6..0e251c604049e 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c >> @@ -125,7 +125,7 @@ static void virtio_gpu_remove(struct virtio_device >> *vdev) >> static void virtio_gpu_config_changed(struct virtio_device *vdev) >> { >> struct drm_device *dev = vdev->priv; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> schedule_work(&vgdev->config_changed_work); >> } >> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h >> b/drivers/gpu/drm/virtio/virtgpu_drv.h >> index 4126c384286bf..d2f9a5862d6b7 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_drv.h >> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h >> @@ -40,6 +40,7 @@ >> #include <drm/drm_gem.h> >> #include <drm/drm_gem_shmem_helper.h> >> #include <drm/drm_ioctl.h> >> +#include <drm/drm_print.h> >> #include <drm/drm_probe_helper.h> >> #include <drm/virtgpu_drm.h> >> @@ -266,6 +267,17 @@ struct virtio_gpu_device { >> spinlock_t host_visible_lock; >> }; >> +static inline struct virtio_gpu_device *to_virtio_gpu_device(struct >> drm_device *dev) >> +{ >> + drm_WARN_ON_ONCE(dev, !dev->dev_private); >> + >> + /* >> + * TODO: Embed struct drm_device in struct virtio_gpu_device and >> + * upcast with container_of(). >> + */ >> + return dev->dev_private; >> +} >> + >> struct virtio_gpu_fpriv { >> uint32_t ctx_id; >> uint32_t context_init; >> diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c >> b/drivers/gpu/drm/virtio/virtgpu_gem.c >> index 7db48d17ee3a8..6b1663a2c31eb 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_gem.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c >> @@ -34,7 +34,7 @@ static int virtio_gpu_gem_create(struct drm_file *file, >> struct drm_gem_object **obj_p, >> uint32_t *handle_p) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_object *obj; >> int ret; >> u32 handle; >> @@ -64,7 +64,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file >> *file_priv, >> { >> struct drm_gem_object *gobj; >> struct virtio_gpu_object_params params = { 0 }; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> int ret; >> uint32_t pitch; >> @@ -117,7 +117,7 @@ int virtio_gpu_mode_dumb_mmap(struct drm_file >> *file_priv, >> int virtio_gpu_gem_object_open(struct drm_gem_object *obj, >> struct drm_file *file) >> { >> - struct virtio_gpu_device *vgdev = obj->dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); >> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >> struct virtio_gpu_object_array *objs; >> @@ -144,7 +144,7 @@ int virtio_gpu_gem_object_open(struct >> drm_gem_object *obj, >> void virtio_gpu_gem_object_close(struct drm_gem_object *obj, >> struct drm_file *file) >> { >> - struct virtio_gpu_device *vgdev = obj->dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); >> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >> struct virtio_gpu_object_array *objs; >> diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c >> b/drivers/gpu/drm/virtio/virtgpu_ioctl.c >> index b24b11f25197d..aefcc7fb2e3e7 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c >> @@ -54,7 +54,7 @@ static void virtio_gpu_create_context_locked(struct >> virtio_gpu_device *vgdev, >> void virtio_gpu_create_context(struct drm_device *dev, struct >> drm_file *file) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >> mutex_lock(&vfpriv->context_lock); >> @@ -70,7 +70,7 @@ void virtio_gpu_create_context(struct drm_device >> *dev, struct drm_file *file) >> static int virtio_gpu_map_ioctl(struct drm_device *dev, void *data, >> struct drm_file *file) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct drm_virtgpu_map *virtio_gpu_map = data; >> return virtio_gpu_mode_dumb_mmap(file, vgdev->ddev, >> @@ -81,7 +81,7 @@ static int virtio_gpu_map_ioctl(struct drm_device >> *dev, void *data, >> static int virtio_gpu_getparam_ioctl(struct drm_device *dev, void >> *data, >> struct drm_file *file) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct drm_virtgpu_getparam *param = data; >> int value; >> @@ -119,7 +119,7 @@ static int virtio_gpu_getparam_ioctl(struct >> drm_device *dev, void *data, >> static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, >> void *data, >> struct drm_file *file) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct drm_virtgpu_resource_create *rc = data; >> struct virtio_gpu_fence *fence; >> int ret; >> @@ -214,7 +214,7 @@ static int >> virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev, >> void *data, >> struct drm_file *file) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >> struct drm_virtgpu_3d_transfer_from_host *args = data; >> struct virtio_gpu_object *bo; >> @@ -269,7 +269,7 @@ static int >> virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev, >> static int virtio_gpu_transfer_to_host_ioctl(struct drm_device *dev, >> void *data, >> struct drm_file *file) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >> struct drm_virtgpu_3d_transfer_to_host *args = data; >> struct virtio_gpu_object *bo; >> @@ -358,7 +358,7 @@ static int virtio_gpu_wait_ioctl(struct drm_device >> *dev, void *data, >> static int virtio_gpu_get_caps_ioctl(struct drm_device *dev, >> void *data, struct drm_file *file) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct drm_virtgpu_get_caps *args = data; >> unsigned size, host_caps_size; >> int i; >> @@ -493,7 +493,7 @@ static int >> virtio_gpu_resource_create_blob_ioctl(struct drm_device *dev, >> struct drm_gem_object *obj; >> struct virtio_gpu_object *bo; >> struct virtio_gpu_object_params params = { 0 }; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >> struct drm_virtgpu_resource_create_blob *rc_blob = data; >> @@ -569,7 +569,7 @@ static int virtio_gpu_context_init_ioctl(struct >> drm_device *dev, >> uint64_t valid_ring_mask; >> size_t len; >> struct drm_virtgpu_context_set_param *ctx_set_params = NULL; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >> struct drm_virtgpu_context_init *args = data; >> diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c >> b/drivers/gpu/drm/virtio/virtgpu_kms.c >> index 5a3b5aaed1f36..ab8c0a6719ac7 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_kms.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_kms.c >> @@ -280,7 +280,7 @@ static void virtio_gpu_cleanup_cap_cache(struct >> virtio_gpu_device *vgdev) >> void virtio_gpu_deinit(struct drm_device *dev) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> flush_work(&vgdev->obj_free_work); >> flush_work(&vgdev->ctrlq.dequeue_work); >> @@ -292,7 +292,7 @@ void virtio_gpu_deinit(struct drm_device *dev) >> void virtio_gpu_release(struct drm_device *dev) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> if (!vgdev) >> return; >> @@ -307,7 +307,7 @@ void virtio_gpu_release(struct drm_device *dev) >> int virtio_gpu_driver_open(struct drm_device *dev, struct drm_file >> *file) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_fpriv *vfpriv; >> int handle; >> @@ -335,7 +335,7 @@ int virtio_gpu_driver_open(struct drm_device *dev, >> struct drm_file *file) >> void virtio_gpu_driver_postclose(struct drm_device *dev, struct >> drm_file *file) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >> if (!vgdev->has_virgl_3d) >> diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c >> b/drivers/gpu/drm/virtio/virtgpu_object.c >> index c7e74cf130221..d5613b74b0456 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_object.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_object.c >> @@ -63,7 +63,7 @@ static void virtio_gpu_resource_id_put(struct >> virtio_gpu_device *vgdev, uint32_t >> void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo) >> { >> - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; >> + struct virtio_gpu_device *vgdev = >> to_virtio_gpu_device(bo->base.base.dev); >> virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); >> if (virtio_gpu_is_shmem(bo)) { >> @@ -86,7 +86,7 @@ void virtio_gpu_cleanup_object(struct >> virtio_gpu_object *bo) >> static void virtio_gpu_free_object(struct drm_gem_object *obj) >> { >> struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); >> - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; >> + struct virtio_gpu_device *vgdev = >> to_virtio_gpu_device(bo->base.base.dev); >> if (bo->created) { >> virtio_gpu_cmd_unref_resource(vgdev, bo); >> diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c >> b/drivers/gpu/drm/virtio/virtgpu_plane.c >> index a2e045f3a0004..1f867af2555b1 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_plane.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c >> @@ -126,7 +126,7 @@ static void virtio_gpu_resource_flush(struct >> drm_plane *plane, >> uint32_t width, uint32_t height) >> { >> struct drm_device *dev = plane->dev; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_framebuffer *vgfb; >> struct virtio_gpu_object *bo; >> @@ -161,7 +161,7 @@ static void virtio_gpu_primary_plane_update(struct >> drm_plane *plane, >> struct drm_plane_state *old_state = >> drm_atomic_get_old_plane_state(state, >> plane); >> struct drm_device *dev = plane->dev; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_output *output = NULL; >> struct virtio_gpu_object *bo; >> struct drm_rect rect; >> @@ -235,7 +235,7 @@ static int virtio_gpu_plane_prepare_fb(struct >> drm_plane *plane, >> struct drm_plane_state *new_state) >> { >> struct drm_device *dev = plane->dev; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_framebuffer *vgfb; >> struct virtio_gpu_object *bo; >> @@ -278,7 +278,7 @@ static void virtio_gpu_cursor_plane_update(struct >> drm_plane *plane, >> struct drm_plane_state *old_state = >> drm_atomic_get_old_plane_state(state, >> plane); >> struct drm_device *dev = plane->dev; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_output *output = NULL; >> struct virtio_gpu_framebuffer *vgfb; >> struct virtio_gpu_object *bo = NULL; >> diff --git a/drivers/gpu/drm/virtio/virtgpu_prime.c >> b/drivers/gpu/drm/virtio/virtgpu_prime.c >> index 44425f20d91aa..44e761dc4d79f 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_prime.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_prime.c >> @@ -32,7 +32,7 @@ static int virtgpu_virtio_get_uuid(struct dma_buf *buf, >> { >> struct drm_gem_object *obj = buf->priv; >> struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); >> - struct virtio_gpu_device *vgdev = obj->dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); >> wait_event(vgdev->resp_wq, bo->uuid_state != STATE_INITIALIZING); >> if (bo->uuid_state != STATE_OK) >> @@ -106,7 +106,7 @@ struct dma_buf *virtgpu_gem_prime_export(struct >> drm_gem_object *obj, >> { >> struct dma_buf *buf; >> struct drm_device *dev = obj->dev; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); >> int ret = 0; >> bool blob = bo->host3d_blob || bo->guest_blob; >> diff --git a/drivers/gpu/drm/virtio/virtgpu_submit.c >> b/drivers/gpu/drm/virtio/virtgpu_submit.c >> index cf3c04b16a7a8..5a599064aa265 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_submit.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_submit.c >> @@ -162,7 +162,7 @@ static int virtio_gpu_init_submit(struct >> virtio_gpu_submit *submit, >> u64 fence_ctx, u32 ring_idx) >> { >> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_fence *out_fence; >> int err; >> @@ -251,7 +251,7 @@ static int virtio_gpu_lock_buflist(struct >> virtio_gpu_submit *submit) >> int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, >> struct drm_file *file) >> { >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >> u64 fence_ctx = vgdev->fence_drv.context; >> struct drm_virtgpu_execbuffer *exbuf = data; >> diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c >> b/drivers/gpu/drm/virtio/virtgpu_vq.c >> index b1a00c0c25a70..7faa7f1a84005 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_vq.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c >> @@ -56,7 +56,7 @@ static void convert_to_hw_box(struct virtio_gpu_box >> *dst, >> void virtio_gpu_ctrl_ack(struct virtqueue *vq) >> { >> struct drm_device *dev = vq->vdev->priv; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> schedule_work(&vgdev->ctrlq.dequeue_work); >> } >> @@ -64,7 +64,7 @@ void virtio_gpu_ctrl_ack(struct virtqueue *vq) >> void virtio_gpu_cursor_ack(struct virtqueue *vq) >> { >> struct drm_device *dev = vq->vdev->priv; >> - struct virtio_gpu_device *vgdev = dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >> schedule_work(&vgdev->cursorq.dequeue_work); >> } >> diff --git a/drivers/gpu/drm/virtio/virtgpu_vram.c >> b/drivers/gpu/drm/virtio/virtgpu_vram.c >> index 25df81c027837..c4a82f4da5a48 100644 >> --- a/drivers/gpu/drm/virtio/virtgpu_vram.c >> +++ b/drivers/gpu/drm/virtio/virtgpu_vram.c >> @@ -6,7 +6,7 @@ >> static void virtio_gpu_vram_free(struct drm_gem_object *obj) >> { >> struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); >> - struct virtio_gpu_device *vgdev = obj->dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); >> struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); >> bool unmap; >> @@ -33,7 +33,7 @@ static int virtio_gpu_vram_mmap(struct >> drm_gem_object *obj, >> struct vm_area_struct *vma) >> { >> int ret; >> - struct virtio_gpu_device *vgdev = obj->dev->dev_private; >> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); >> struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); >> struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); >> unsigned long vm_size = vma->vm_end - vma->vm_start; >> @@ -70,7 +70,7 @@ struct sg_table *virtio_gpu_vram_map_dma_buf(struct >> virtio_gpu_object *bo, >> struct device *dev, >> enum dma_data_direction dir) >> { >> - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; >> + struct virtio_gpu_device *vgdev = >> to_virtio_gpu_device(bo->base.base.dev); >> struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); >> struct sg_table *sgt; >> dma_addr_t addr; >> @@ -143,7 +143,7 @@ static int virtio_gpu_vram_map(struct >> virtio_gpu_object *bo) >> int ret; >> uint64_t offset; >> struct virtio_gpu_object_array *objs; >> - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; >> + struct virtio_gpu_device *vgdev = >> to_virtio_gpu_device(bo->base.base.dev); >> struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); >> if (!vgdev->has_host_visible) > -- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Frankenstrasse 146, 90461 Nuernberg, Germany GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman HRB 36809 (AG Nuernberg) [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 840 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: drm/virtgpu: Replace dev_private by helper function 2023-06-21 10:36 ` Thomas Zimmermann @ 2023-06-21 11:57 ` Sui Jingfeng 0 siblings, 0 replies; 6+ messages in thread From: Sui Jingfeng @ 2023-06-21 11:57 UTC (permalink / raw) To: Thomas Zimmermann, airlied, kraxel, gurchetansingh, olvaffe, daniel Cc: dri-devel, virtualization Hi, On 2023/6/21 18:36, Thomas Zimmermann wrote: > > > Am 21.06.23 um 11:12 schrieb Sui Jingfeng: >> Hi, >> >> On 2023/6/20 18:33, Thomas Zimmermann wrote: >>> Dereference struct drm_device.dev_private in the helper function >>> do_virtio_gpu_device(). >> >> Is the word "Dereference" accurate enough ? > > It's not really the correct word, you're right. 'Access' or 'read' > would be a better term. > >> >> I know what you means, I heard of de-reference a pointer frequently, >> >> It stand for fetch the value of a pointer, say "*p = val" or " val >> = *p". >> >> >> While here you are introducing a helper function to fetch the pointer >> to a driver specific device from the pointer to drm_device, >> >> this is actually doing the copy of a pointer. >> >>> The dev_private field is deprecated and >>> drivers are advised not ot use it. >> >> "ot" -> "to" , >> >> >> Here, I have some understanding toward this. >> >> >> The drm_device is not a real device, it is a kind of software service. >> >> Because the struct drm_device don't contain a 'struct device' instance. >> >> While 'struct pci_dev' and 'struct platform_device' contain a 'struct >> device' instance, >> >> they are real device. >> >> >> Component based driver tend to bind the multiple miscellaneous >> sub-device to >> >> a virtual master. So these driver have multiple platform device >> instance or >> >> multiple xxx_device_private. Embed the 'struct drm_device' to any >> of those >> >> xxx_device_private would be not fair to others. >> >> >> A GPU can have multiple GPU core also. >> >> In those case, the instance of struct drm_device in intended to be >> shared by all GPU core. >> >> Or to be shared by a DC driver + GPU driver + External encoder >> drivers etc. >> >> So this depend on the device driver's implement and the hardware. > > I get what you want to say, but it's rarely a problem in practice. > Most of the hardware has a single DRM device. If a hardware device has > entirely distict components, it's like two separate graphics chips: we > can create two instances of struct drm_device, each embedded in its > own private structure. And if there's really a case where sub-devices > require shared state, drivers can still implement this internally. > This sound fine, Personally, I think this patch looks good, trivial comments mistakes can be corrected easily. :-) > Best regards > Thomas > >> >> >>> Encapsulating it in a helper >>> function will help with a later removal. No functional changes. >> >> Indeed, the later removal only need to change the >> to_virtio_gpu_device() function itself >> >> as well as the drm device allocation. >> >>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> >>> Acked-by: Gerd Hoffmann <kraxel@redhat.com> >>> --- >>> drivers/gpu/drm/virtio/virtgpu_debugfs.c | 6 +++--- >>> drivers/gpu/drm/virtio/virtgpu_display.c | 4 ++-- >>> drivers/gpu/drm/virtio/virtgpu_drv.c | 2 +- >>> drivers/gpu/drm/virtio/virtgpu_drv.h | 12 ++++++++++++ >>> drivers/gpu/drm/virtio/virtgpu_gem.c | 8 ++++---- >>> drivers/gpu/drm/virtio/virtgpu_ioctl.c | 18 +++++++++--------- >>> drivers/gpu/drm/virtio/virtgpu_kms.c | 8 ++++---- >>> drivers/gpu/drm/virtio/virtgpu_object.c | 4 ++-- >>> drivers/gpu/drm/virtio/virtgpu_plane.c | 8 ++++---- >>> drivers/gpu/drm/virtio/virtgpu_prime.c | 4 ++-- >>> drivers/gpu/drm/virtio/virtgpu_submit.c | 4 ++-- >>> drivers/gpu/drm/virtio/virtgpu_vq.c | 4 ++-- >>> drivers/gpu/drm/virtio/virtgpu_vram.c | 8 ++++---- >>> 13 files changed, 51 insertions(+), 39 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_debugfs.c >>> b/drivers/gpu/drm/virtio/virtgpu_debugfs.c >>> index 853dd9aa397eb..e768c6253db33 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_debugfs.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_debugfs.c >>> @@ -44,7 +44,7 @@ static void virtio_gpu_add_int(struct seq_file *m, >>> const char *name, int value) >>> static int virtio_gpu_features(struct seq_file *m, void *data) >>> { >>> struct drm_info_node *node = (struct drm_info_node *)m->private; >>> - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; >>> + struct virtio_gpu_device *vgdev = >>> to_virtio_gpu_device(node->minor->dev); >>> virtio_gpu_add_bool(m, "virgl", vgdev->has_virgl_3d); >>> virtio_gpu_add_bool(m, "edid", vgdev->has_edid); >>> @@ -69,7 +69,7 @@ static int >>> virtio_gpu_debugfs_irq_info(struct seq_file *m, void *data) >>> { >>> struct drm_info_node *node = (struct drm_info_node *) m->private; >>> - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; >>> + struct virtio_gpu_device *vgdev = >>> to_virtio_gpu_device(node->minor->dev); >>> seq_printf(m, "fence %llu %lld\n", >>> (u64)atomic64_read(&vgdev->fence_drv.last_fence_id), >>> @@ -81,7 +81,7 @@ static int >>> virtio_gpu_debugfs_host_visible_mm(struct seq_file *m, void *data) >>> { >>> struct drm_info_node *node = (struct drm_info_node *)m->private; >>> - struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; >>> + struct virtio_gpu_device *vgdev = >>> to_virtio_gpu_device(node->minor->dev); >>> struct drm_printer p; >>> if (!vgdev->has_host_visible) { >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c >>> b/drivers/gpu/drm/virtio/virtgpu_display.c >>> index ad924a8502e90..6cf143e06b003 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_display.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_display.c >>> @@ -86,7 +86,7 @@ virtio_gpu_framebuffer_init(struct drm_device *dev, >>> static void virtio_gpu_crtc_mode_set_nofb(struct drm_crtc *crtc) >>> { >>> struct drm_device *dev = crtc->dev; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_output *output = >>> drm_crtc_to_virtio_gpu_output(crtc); >>> virtio_gpu_cmd_set_scanout(vgdev, output->index, 0, >>> @@ -104,7 +104,7 @@ static void >>> virtio_gpu_crtc_atomic_disable(struct drm_crtc *crtc, >>> struct drm_atomic_state *state) >>> { >>> struct drm_device *dev = crtc->dev; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_output *output = >>> drm_crtc_to_virtio_gpu_output(crtc); >>> virtio_gpu_cmd_set_scanout(vgdev, output->index, 0, 0, 0, 0, 0); >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c >>> b/drivers/gpu/drm/virtio/virtgpu_drv.c >>> index 91ace7a44f2a6..0e251c604049e 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c >>> @@ -125,7 +125,7 @@ static void virtio_gpu_remove(struct >>> virtio_device *vdev) >>> static void virtio_gpu_config_changed(struct virtio_device *vdev) >>> { >>> struct drm_device *dev = vdev->priv; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> schedule_work(&vgdev->config_changed_work); >>> } >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h >>> b/drivers/gpu/drm/virtio/virtgpu_drv.h >>> index 4126c384286bf..d2f9a5862d6b7 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_drv.h >>> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h >>> @@ -40,6 +40,7 @@ >>> #include <drm/drm_gem.h> >>> #include <drm/drm_gem_shmem_helper.h> >>> #include <drm/drm_ioctl.h> >>> +#include <drm/drm_print.h> >>> #include <drm/drm_probe_helper.h> >>> #include <drm/virtgpu_drm.h> >>> @@ -266,6 +267,17 @@ struct virtio_gpu_device { >>> spinlock_t host_visible_lock; >>> }; >>> +static inline struct virtio_gpu_device *to_virtio_gpu_device(struct >>> drm_device *dev) >>> +{ >>> + drm_WARN_ON_ONCE(dev, !dev->dev_private); >>> + >>> + /* >>> + * TODO: Embed struct drm_device in struct virtio_gpu_device and >>> + * upcast with container_of(). >>> + */ >>> + return dev->dev_private; >>> +} >>> + >>> struct virtio_gpu_fpriv { >>> uint32_t ctx_id; >>> uint32_t context_init; >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c >>> b/drivers/gpu/drm/virtio/virtgpu_gem.c >>> index 7db48d17ee3a8..6b1663a2c31eb 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_gem.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c >>> @@ -34,7 +34,7 @@ static int virtio_gpu_gem_create(struct drm_file >>> *file, >>> struct drm_gem_object **obj_p, >>> uint32_t *handle_p) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_object *obj; >>> int ret; >>> u32 handle; >>> @@ -64,7 +64,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file >>> *file_priv, >>> { >>> struct drm_gem_object *gobj; >>> struct virtio_gpu_object_params params = { 0 }; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> int ret; >>> uint32_t pitch; >>> @@ -117,7 +117,7 @@ int virtio_gpu_mode_dumb_mmap(struct drm_file >>> *file_priv, >>> int virtio_gpu_gem_object_open(struct drm_gem_object *obj, >>> struct drm_file *file) >>> { >>> - struct virtio_gpu_device *vgdev = obj->dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); >>> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >>> struct virtio_gpu_object_array *objs; >>> @@ -144,7 +144,7 @@ int virtio_gpu_gem_object_open(struct >>> drm_gem_object *obj, >>> void virtio_gpu_gem_object_close(struct drm_gem_object *obj, >>> struct drm_file *file) >>> { >>> - struct virtio_gpu_device *vgdev = obj->dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); >>> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >>> struct virtio_gpu_object_array *objs; >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c >>> b/drivers/gpu/drm/virtio/virtgpu_ioctl.c >>> index b24b11f25197d..aefcc7fb2e3e7 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c >>> @@ -54,7 +54,7 @@ static void >>> virtio_gpu_create_context_locked(struct virtio_gpu_device *vgdev, >>> void virtio_gpu_create_context(struct drm_device *dev, struct >>> drm_file *file) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >>> mutex_lock(&vfpriv->context_lock); >>> @@ -70,7 +70,7 @@ void virtio_gpu_create_context(struct drm_device >>> *dev, struct drm_file *file) >>> static int virtio_gpu_map_ioctl(struct drm_device *dev, void *data, >>> struct drm_file *file) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct drm_virtgpu_map *virtio_gpu_map = data; >>> return virtio_gpu_mode_dumb_mmap(file, vgdev->ddev, >>> @@ -81,7 +81,7 @@ static int virtio_gpu_map_ioctl(struct drm_device >>> *dev, void *data, >>> static int virtio_gpu_getparam_ioctl(struct drm_device *dev, void >>> *data, >>> struct drm_file *file) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct drm_virtgpu_getparam *param = data; >>> int value; >>> @@ -119,7 +119,7 @@ static int virtio_gpu_getparam_ioctl(struct >>> drm_device *dev, void *data, >>> static int virtio_gpu_resource_create_ioctl(struct drm_device >>> *dev, void *data, >>> struct drm_file *file) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct drm_virtgpu_resource_create *rc = data; >>> struct virtio_gpu_fence *fence; >>> int ret; >>> @@ -214,7 +214,7 @@ static int >>> virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev, >>> void *data, >>> struct drm_file *file) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >>> struct drm_virtgpu_3d_transfer_from_host *args = data; >>> struct virtio_gpu_object *bo; >>> @@ -269,7 +269,7 @@ static int >>> virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev, >>> static int virtio_gpu_transfer_to_host_ioctl(struct drm_device >>> *dev, void *data, >>> struct drm_file *file) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >>> struct drm_virtgpu_3d_transfer_to_host *args = data; >>> struct virtio_gpu_object *bo; >>> @@ -358,7 +358,7 @@ static int virtio_gpu_wait_ioctl(struct >>> drm_device *dev, void *data, >>> static int virtio_gpu_get_caps_ioctl(struct drm_device *dev, >>> void *data, struct drm_file *file) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct drm_virtgpu_get_caps *args = data; >>> unsigned size, host_caps_size; >>> int i; >>> @@ -493,7 +493,7 @@ static int >>> virtio_gpu_resource_create_blob_ioctl(struct drm_device *dev, >>> struct drm_gem_object *obj; >>> struct virtio_gpu_object *bo; >>> struct virtio_gpu_object_params params = { 0 }; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >>> struct drm_virtgpu_resource_create_blob *rc_blob = data; >>> @@ -569,7 +569,7 @@ static int virtio_gpu_context_init_ioctl(struct >>> drm_device *dev, >>> uint64_t valid_ring_mask; >>> size_t len; >>> struct drm_virtgpu_context_set_param *ctx_set_params = NULL; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >>> struct drm_virtgpu_context_init *args = data; >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c >>> b/drivers/gpu/drm/virtio/virtgpu_kms.c >>> index 5a3b5aaed1f36..ab8c0a6719ac7 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_kms.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_kms.c >>> @@ -280,7 +280,7 @@ static void virtio_gpu_cleanup_cap_cache(struct >>> virtio_gpu_device *vgdev) >>> void virtio_gpu_deinit(struct drm_device *dev) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> flush_work(&vgdev->obj_free_work); >>> flush_work(&vgdev->ctrlq.dequeue_work); >>> @@ -292,7 +292,7 @@ void virtio_gpu_deinit(struct drm_device *dev) >>> void virtio_gpu_release(struct drm_device *dev) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> if (!vgdev) >>> return; >>> @@ -307,7 +307,7 @@ void virtio_gpu_release(struct drm_device *dev) >>> int virtio_gpu_driver_open(struct drm_device *dev, struct drm_file >>> *file) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_fpriv *vfpriv; >>> int handle; >>> @@ -335,7 +335,7 @@ int virtio_gpu_driver_open(struct drm_device >>> *dev, struct drm_file *file) >>> void virtio_gpu_driver_postclose(struct drm_device *dev, struct >>> drm_file *file) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >>> if (!vgdev->has_virgl_3d) >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c >>> b/drivers/gpu/drm/virtio/virtgpu_object.c >>> index c7e74cf130221..d5613b74b0456 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_object.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_object.c >>> @@ -63,7 +63,7 @@ static void virtio_gpu_resource_id_put(struct >>> virtio_gpu_device *vgdev, uint32_t >>> void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo) >>> { >>> - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; >>> + struct virtio_gpu_device *vgdev = >>> to_virtio_gpu_device(bo->base.base.dev); >>> virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); >>> if (virtio_gpu_is_shmem(bo)) { >>> @@ -86,7 +86,7 @@ void virtio_gpu_cleanup_object(struct >>> virtio_gpu_object *bo) >>> static void virtio_gpu_free_object(struct drm_gem_object *obj) >>> { >>> struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); >>> - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; >>> + struct virtio_gpu_device *vgdev = >>> to_virtio_gpu_device(bo->base.base.dev); >>> if (bo->created) { >>> virtio_gpu_cmd_unref_resource(vgdev, bo); >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c >>> b/drivers/gpu/drm/virtio/virtgpu_plane.c >>> index a2e045f3a0004..1f867af2555b1 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_plane.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c >>> @@ -126,7 +126,7 @@ static void virtio_gpu_resource_flush(struct >>> drm_plane *plane, >>> uint32_t width, uint32_t height) >>> { >>> struct drm_device *dev = plane->dev; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_framebuffer *vgfb; >>> struct virtio_gpu_object *bo; >>> @@ -161,7 +161,7 @@ static void >>> virtio_gpu_primary_plane_update(struct drm_plane *plane, >>> struct drm_plane_state *old_state = >>> drm_atomic_get_old_plane_state(state, >>> plane); >>> struct drm_device *dev = plane->dev; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_output *output = NULL; >>> struct virtio_gpu_object *bo; >>> struct drm_rect rect; >>> @@ -235,7 +235,7 @@ static int virtio_gpu_plane_prepare_fb(struct >>> drm_plane *plane, >>> struct drm_plane_state *new_state) >>> { >>> struct drm_device *dev = plane->dev; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_framebuffer *vgfb; >>> struct virtio_gpu_object *bo; >>> @@ -278,7 +278,7 @@ static void >>> virtio_gpu_cursor_plane_update(struct drm_plane *plane, >>> struct drm_plane_state *old_state = >>> drm_atomic_get_old_plane_state(state, >>> plane); >>> struct drm_device *dev = plane->dev; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_output *output = NULL; >>> struct virtio_gpu_framebuffer *vgfb; >>> struct virtio_gpu_object *bo = NULL; >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_prime.c >>> b/drivers/gpu/drm/virtio/virtgpu_prime.c >>> index 44425f20d91aa..44e761dc4d79f 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_prime.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_prime.c >>> @@ -32,7 +32,7 @@ static int virtgpu_virtio_get_uuid(struct dma_buf >>> *buf, >>> { >>> struct drm_gem_object *obj = buf->priv; >>> struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); >>> - struct virtio_gpu_device *vgdev = obj->dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); >>> wait_event(vgdev->resp_wq, bo->uuid_state != STATE_INITIALIZING); >>> if (bo->uuid_state != STATE_OK) >>> @@ -106,7 +106,7 @@ struct dma_buf *virtgpu_gem_prime_export(struct >>> drm_gem_object *obj, >>> { >>> struct dma_buf *buf; >>> struct drm_device *dev = obj->dev; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); >>> int ret = 0; >>> bool blob = bo->host3d_blob || bo->guest_blob; >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_submit.c >>> b/drivers/gpu/drm/virtio/virtgpu_submit.c >>> index cf3c04b16a7a8..5a599064aa265 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_submit.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_submit.c >>> @@ -162,7 +162,7 @@ static int virtio_gpu_init_submit(struct >>> virtio_gpu_submit *submit, >>> u64 fence_ctx, u32 ring_idx) >>> { >>> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_fence *out_fence; >>> int err; >>> @@ -251,7 +251,7 @@ static int virtio_gpu_lock_buflist(struct >>> virtio_gpu_submit *submit) >>> int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, >>> struct drm_file *file) >>> { >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> struct virtio_gpu_fpriv *vfpriv = file->driver_priv; >>> u64 fence_ctx = vgdev->fence_drv.context; >>> struct drm_virtgpu_execbuffer *exbuf = data; >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c >>> b/drivers/gpu/drm/virtio/virtgpu_vq.c >>> index b1a00c0c25a70..7faa7f1a84005 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_vq.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c >>> @@ -56,7 +56,7 @@ static void convert_to_hw_box(struct >>> virtio_gpu_box *dst, >>> void virtio_gpu_ctrl_ack(struct virtqueue *vq) >>> { >>> struct drm_device *dev = vq->vdev->priv; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> schedule_work(&vgdev->ctrlq.dequeue_work); >>> } >>> @@ -64,7 +64,7 @@ void virtio_gpu_ctrl_ack(struct virtqueue *vq) >>> void virtio_gpu_cursor_ack(struct virtqueue *vq) >>> { >>> struct drm_device *dev = vq->vdev->priv; >>> - struct virtio_gpu_device *vgdev = dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(dev); >>> schedule_work(&vgdev->cursorq.dequeue_work); >>> } >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_vram.c >>> b/drivers/gpu/drm/virtio/virtgpu_vram.c >>> index 25df81c027837..c4a82f4da5a48 100644 >>> --- a/drivers/gpu/drm/virtio/virtgpu_vram.c >>> +++ b/drivers/gpu/drm/virtio/virtgpu_vram.c >>> @@ -6,7 +6,7 @@ >>> static void virtio_gpu_vram_free(struct drm_gem_object *obj) >>> { >>> struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); >>> - struct virtio_gpu_device *vgdev = obj->dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); >>> struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); >>> bool unmap; >>> @@ -33,7 +33,7 @@ static int virtio_gpu_vram_mmap(struct >>> drm_gem_object *obj, >>> struct vm_area_struct *vma) >>> { >>> int ret; >>> - struct virtio_gpu_device *vgdev = obj->dev->dev_private; >>> + struct virtio_gpu_device *vgdev = to_virtio_gpu_device(obj->dev); >>> struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); >>> struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); >>> unsigned long vm_size = vma->vm_end - vma->vm_start; >>> @@ -70,7 +70,7 @@ struct sg_table >>> *virtio_gpu_vram_map_dma_buf(struct virtio_gpu_object *bo, >>> struct device *dev, >>> enum dma_data_direction dir) >>> { >>> - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; >>> + struct virtio_gpu_device *vgdev = >>> to_virtio_gpu_device(bo->base.base.dev); >>> struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); >>> struct sg_table *sgt; >>> dma_addr_t addr; >>> @@ -143,7 +143,7 @@ static int virtio_gpu_vram_map(struct >>> virtio_gpu_object *bo) >>> int ret; >>> uint64_t offset; >>> struct virtio_gpu_object_array *objs; >>> - struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; >>> + struct virtio_gpu_device *vgdev = >>> to_virtio_gpu_device(bo->base.base.dev); >>> struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); >>> if (!vgdev->has_host_visible) >> > -- Jingfeng ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-06-21 11:57 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-06-20 10:33 [PATCH] drm/virtgpu: Replace dev_private by helper function Thomas Zimmermann 2023-06-21 7:57 ` Gerd Hoffmann 2023-06-21 8:03 ` Thomas Zimmermann 2023-06-21 9:12 ` Sui Jingfeng 2023-06-21 10:36 ` Thomas Zimmermann 2023-06-21 11:57 ` Sui Jingfeng
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox