Re: [PATCH 03/24] drm/virtio: Place GEM BOs in drm_framebuffer

2018-05-17 Thread Thierry Reding
On Fri, Mar 30, 2018 at 03:11:17PM +0100, Daniel Stone wrote:
> Since drm_framebuffer can now store GEM objects directly, place them
> there rather than in our own subclass. As this makes the framebuffer
> create_handle and destroy functions the same as the GEM framebuffer
> helper, we can reuse those.
> 
> Signed-off-by: Daniel Stone 
> Cc: Dave Airlie 
> Cc: Gerd Hoffmann 
> Cc: virtualizat...@lists.linux-foundation.org
> ---
>  drivers/gpu/drm/virtio/virtgpu_display.c | 30 +-
>  drivers/gpu/drm/virtio/virtgpu_drv.h |  1 -
>  drivers/gpu/drm/virtio/virtgpu_fb.c  |  8 
>  drivers/gpu/drm/virtio/virtgpu_plane.c   |  4 ++--
>  4 files changed, 11 insertions(+), 32 deletions(-)

Reviewed-by: Thierry Reding 


signature.asc
Description: PGP signature
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH 03/24] drm/virtio: Place GEM BOs in drm_framebuffer

2018-03-30 Thread Daniel Stone
Since drm_framebuffer can now store GEM objects directly, place them
there rather than in our own subclass. As this makes the framebuffer
create_handle and destroy functions the same as the GEM framebuffer
helper, we can reuse those.

Signed-off-by: Daniel Stone 
Cc: Dave Airlie 
Cc: Gerd Hoffmann 
Cc: virtualizat...@lists.linux-foundation.org
---
 drivers/gpu/drm/virtio/virtgpu_display.c | 30 +-
 drivers/gpu/drm/virtio/virtgpu_drv.h |  1 -
 drivers/gpu/drm/virtio/virtgpu_fb.c  |  8 
 drivers/gpu/drm/virtio/virtgpu_plane.c   |  4 ++--
 4 files changed, 11 insertions(+), 32 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c 
b/drivers/gpu/drm/virtio/virtgpu_display.c
index 8cc8c34d67f5..af542f1216f9 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -28,6 +28,7 @@
 #include "virtgpu_drv.h"
 #include 
 #include 
+#include 
 
 #define XRES_MIN32
 #define YRES_MIN32
@@ -48,16 +49,6 @@ static const struct drm_crtc_funcs virtio_gpu_crtc_funcs = {
.atomic_destroy_state   = drm_atomic_helper_crtc_destroy_state,
 };
 
-static void virtio_gpu_user_framebuffer_destroy(struct drm_framebuffer *fb)
-{
-   struct virtio_gpu_framebuffer *virtio_gpu_fb
-   = to_virtio_gpu_framebuffer(fb);
-
-   drm_gem_object_put_unlocked(virtio_gpu_fb->obj);
-   drm_framebuffer_cleanup(fb);
-   kfree(virtio_gpu_fb);
-}
-
 static int
 virtio_gpu_framebuffer_surface_dirty(struct drm_framebuffer *fb,
 struct drm_file *file_priv,
@@ -71,20 +62,9 @@ virtio_gpu_framebuffer_surface_dirty(struct drm_framebuffer 
*fb,
return virtio_gpu_surface_dirty(virtio_gpu_fb, clips, num_clips);
 }
 
-static int
-virtio_gpu_framebuffer_create_handle(struct drm_framebuffer *fb,
-struct drm_file *file_priv,
-unsigned int *handle)
-{
-   struct virtio_gpu_framebuffer *virtio_gpu_fb =
-   to_virtio_gpu_framebuffer(fb);
-
-   return drm_gem_handle_create(file_priv, virtio_gpu_fb->obj, handle);
-}
-
 static const struct drm_framebuffer_funcs virtio_gpu_fb_funcs = {
-   .create_handle = virtio_gpu_framebuffer_create_handle,
-   .destroy = virtio_gpu_user_framebuffer_destroy,
+   .create_handle = drm_gem_fb_create_handle,
+   .destroy = drm_gem_fb_destroy,
.dirty = virtio_gpu_framebuffer_surface_dirty,
 };
 
@@ -97,7 +77,7 @@ virtio_gpu_framebuffer_init(struct drm_device *dev,
int ret;
struct virtio_gpu_object *bo;
 
-   vgfb->obj = obj;
+   vgfb->base.obj[0] = obj;
 
bo = gem_to_virtio_gpu_obj(obj);
 
@@ -105,7 +85,7 @@ virtio_gpu_framebuffer_init(struct drm_device *dev,
 
ret = drm_framebuffer_init(dev, >base, _gpu_fb_funcs);
if (ret) {
-   vgfb->obj = NULL;
+   vgfb->base.obj[0] = NULL;
return ret;
}
 
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h 
b/drivers/gpu/drm/virtio/virtgpu_drv.h
index d25c8ca224aa..65605e207bbe 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -124,7 +124,6 @@ struct virtio_gpu_output {
 
 struct virtio_gpu_framebuffer {
struct drm_framebuffer base;
-   struct drm_gem_object *obj;
int x1, y1, x2, y2; /* dirty rect */
spinlock_t dirty_lock;
uint32_t hw_res_handle;
diff --git a/drivers/gpu/drm/virtio/virtgpu_fb.c 
b/drivers/gpu/drm/virtio/virtgpu_fb.c
index 8af69ab58b89..a121b1c79522 100644
--- a/drivers/gpu/drm/virtio/virtgpu_fb.c
+++ b/drivers/gpu/drm/virtio/virtgpu_fb.c
@@ -46,7 +46,7 @@ static int virtio_gpu_dirty_update(struct 
virtio_gpu_framebuffer *fb,
int bpp = fb->base.format->cpp[0];
int x2, y2;
unsigned long flags;
-   struct virtio_gpu_object *obj = gem_to_virtio_gpu_obj(fb->obj);
+   struct virtio_gpu_object *obj = gem_to_virtio_gpu_obj(fb->base.obj[0]);
 
if ((width <= 0) ||
(x + width > fb->base.width) ||
@@ -121,7 +121,7 @@ int virtio_gpu_surface_dirty(struct virtio_gpu_framebuffer 
*vgfb,
 unsigned int num_clips)
 {
struct virtio_gpu_device *vgdev = vgfb->base.dev->dev_private;
-   struct virtio_gpu_object *obj = gem_to_virtio_gpu_obj(vgfb->obj);
+   struct virtio_gpu_object *obj = 
gem_to_virtio_gpu_obj(vgfb->base.obj[0]);
struct drm_clip_rect norect;
struct drm_clip_rect *clips_ptr;
int left, right, top, bottom;
@@ -305,8 +305,8 @@ static int virtio_gpu_fbdev_destroy(struct drm_device *dev,
 
drm_fb_helper_unregister_fbi(>helper);
 
-   if (vgfb->obj)
-   vgfb->obj = NULL;
+   if (vgfb->base.obj[0])
+   vgfb->base.obj[0] = NULL;
drm_fb_helper_fini(>helper);
drm_framebuffer_cleanup(>base);
 
diff