On 3/3/22 21:58, Thomas Zimmermann wrote:
Implement struct drm_driver.dumb_create_fbdev with the helpers provided by GEM SHMEM. Fbdev deferred I/O will now work without an intermediate shadow buffer for mmap.
As the virtio driver replaces several of the regular GEM SHMEM functions with its own implementation, some additional code is necessary make fbdev optimization work. Especially, the driver has to provide buffer-object functions for fbdev. Add the hook struct drm_driver.gem_create_object_fbdev, which is similar to struct drm_driver.gem_create_object and allows for the creation of dedicated fbdev buffer objects. Wire things up within GEM SHMEM.
Signed-off-by: Thomas Zimmermann tzimmermann@suse.de
drivers/gpu/drm/drm_gem_shmem_helper.c | 7 +++- drivers/gpu/drm/virtio/virtgpu_drv.c | 2 + drivers/gpu/drm/virtio/virtgpu_drv.h | 2 + drivers/gpu/drm/virtio/virtgpu_object.c | 54 +++++++++++++++++++++++-- include/drm/drm_drv.h | 10 +++++ 5 files changed, 71 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index ab7cb7d896c3..225aa17895bd 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -71,7 +71,12 @@ __drm_gem_shmem_create(struct drm_device *dev, size_t size, bool private, bool f
size = PAGE_ALIGN(size);
- if (dev->driver->gem_create_object) {
- if (dev->driver->gem_create_object_fbdev && fbdev) {
Same comment here to check if fbdev emulation is enabled or maybe is not worht it ? But I think this hints the compiler to optimize the if branch.
[snip]
+} +#else +struct drm_gem_object *virtio_gpu_create_object_fbdev(struct drm_device *dev,
size_t size)
+{
- return ERR_PTR(-ENOSYS);
+}
As mentioned, I believe this should be ERR_PTR(-ENOTSUPP) instead.
Feel free to ignore all this nits if you consider that are not applicable.
Reviewed-by: Javier Martinez Canillas javierm@redhat.com