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@xxxxxxx> > --- > 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@xxxxxxxxxx> -- Best regards, Javier Martinez Canillas Linux Engineering Red Hat