On Mon, Oct 28, 2019 at 09:45:48AM +0100, Thomas Zimmermann wrote: > In preparation of a switch to SHMEM, udl now allocates its GEM > objects via struct drm_driver.gem_create_object. No functional > changes are made. > > For SHMEM GEM objects, udl will require the use of a special mmap > function, which we set though the create-object function. Acked-by: Gerd Hoffmann <kraxel@xxxxxxxxxx> > > Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx> > --- > drivers/gpu/drm/udl/udl_drv.c | 1 + > drivers/gpu/drm/udl/udl_drv.h | 2 ++ > drivers/gpu/drm/udl/udl_gem.c | 25 +++++++++++++++++++++---- > 3 files changed, 24 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c > index 8426669433e4..778a0b652f64 100644 > --- a/drivers/gpu/drm/udl/udl_drv.c > +++ b/drivers/gpu/drm/udl/udl_drv.c > @@ -64,6 +64,7 @@ static struct drm_driver driver = { > > /* gem hooks */ > .gem_free_object_unlocked = udl_gem_free_object, > + .gem_create_object = udl_driver_gem_create_object, > .gem_vm_ops = &udl_gem_vm_ops, > > .dumb_create = udl_dumb_create, > diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h > index e1306a51903c..fc312e791d18 100644 > --- a/drivers/gpu/drm/udl/udl_drv.h > +++ b/drivers/gpu/drm/udl/udl_drv.h > @@ -125,6 +125,8 @@ int udl_dumb_create(struct drm_file *file_priv, > int udl_gem_mmap(struct drm_file *file_priv, struct drm_device *dev, > uint32_t handle, uint64_t *offset); > > +struct drm_gem_object *udl_driver_gem_create_object(struct drm_device *dev, > + size_t size); > void udl_gem_free_object(struct drm_gem_object *gem_obj); > struct udl_gem_object *udl_gem_alloc_object(struct drm_device *dev, > size_t size); > diff --git a/drivers/gpu/drm/udl/udl_gem.c b/drivers/gpu/drm/udl/udl_gem.c > index 7d3c1b73ea02..628749cc1143 100644 > --- a/drivers/gpu/drm/udl/udl_gem.c > +++ b/drivers/gpu/drm/udl/udl_gem.c > @@ -6,26 +6,43 @@ > #include <linux/dma-buf.h> > #include <linux/vmalloc.h> > > +#include <drm/drm_drv.h> > #include <drm/drm_mode.h> > #include <drm/drm_prime.h> > > #include "udl_drv.h" > > -struct udl_gem_object *udl_gem_alloc_object(struct drm_device *dev, > - size_t size) > +/* > + * Helpers for struct drm_driver > + */ > + > +struct drm_gem_object *udl_driver_gem_create_object(struct drm_device *dev, > + size_t size) > { > struct udl_gem_object *obj; > > obj = kzalloc(sizeof(*obj), GFP_KERNEL); > + if (!obj) > + return NULL; > + > + return &obj->base; > +} > + > +struct udl_gem_object *udl_gem_alloc_object(struct drm_device *dev, > + size_t size) > +{ > + struct drm_gem_object *obj; > + > + obj = dev->driver->gem_create_object(dev, size); > if (obj == NULL) > return NULL; > > - if (drm_gem_object_init(dev, &obj->base, size) != 0) { > + if (drm_gem_object_init(dev, obj, size) != 0) { > kfree(obj); > return NULL; > } > > - return obj; > + return to_udl_bo(obj); > } > > static int > -- > 2.23.0 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel