Message ID | 20221011110437.15258-3-christian.koenig@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] drm: remove DRM_MINOR_CONTROL | expand |
Hi Am 11.10.22 um 13:04 schrieb Christian König: > This allows to suppress creating the primary node. Useful for drivers > which don't expose any display functionality, but are render only by > design. > > Signed-off-by: Christian König <christian.koenig@amd.com> > --- > drivers/gpu/drm/drm_drv.c | 10 ++++++---- > drivers/gpu/drm/drm_prime.c | 2 +- > include/drm/drm_drv.h | 7 +++++++ > 3 files changed, 14 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c > index d81783f43452..4a525f78a932 100644 > --- a/drivers/gpu/drm/drm_drv.c > +++ b/drivers/gpu/drm/drm_drv.c > @@ -634,9 +634,11 @@ static int drm_dev_init(struct drm_device *dev, > goto err; > } > > - ret = drm_minor_alloc(dev, DRM_MINOR_PRIMARY); > - if (ret) > - goto err; > + if (!drm_core_check_feature(dev, DRIVER_RENDER_ONLY)) { > + ret = drm_minor_alloc(dev, DRM_MINOR_PRIMARY); > + if (ret) > + goto err; > + } > > ret = drm_legacy_create_map_hash(dev); > if (ret) > @@ -902,7 +904,7 @@ int drm_dev_register(struct drm_device *dev, unsigned long flags) > driver->name, driver->major, driver->minor, > driver->patchlevel, driver->date, > dev->dev ? dev_name(dev->dev) : "virtual device", > - dev->primary->index); > + (dev->primary ?: dev->render)->index); > > goto out_unlock; > > diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c > index a3f180653b8b..4afd3f15b135 100644 > --- a/drivers/gpu/drm/drm_prime.c > +++ b/drivers/gpu/drm/drm_prime.c > @@ -740,7 +740,7 @@ int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) > } > > /* Used by drm_gem_mmap() to lookup the GEM object */ > - priv->minor = obj->dev->primary; > + priv->minor = obj->dev->primary ?: obj->dev->render; > fil->private_data = priv; > > ret = drm_vma_node_allow(&obj->vma_node, priv); > diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h > index f6159acb8856..0a1450d47ca2 100644 > --- a/include/drm/drm_drv.h > +++ b/include/drm/drm_drv.h > @@ -94,6 +94,13 @@ enum drm_driver_feature { > * synchronization of command submission. > */ > DRIVER_SYNCOBJ_TIMELINE = BIT(6), > + /** > + * @DRIVER_RENDER_ONLY > + * > + * Driver is a render node only driver and don't want to support the > + * primary interface. > + */ > + DRIVER_RENDER_ONLY = BIT(7), Is it really necessary to add a new flag? If a driver sets DRIVER_GEM and omits DRIVER_MODESET wouldn't this have the same meaning? Best regards Thomas > > /* IMPORTANT: Below are all the legacy flags, add new ones above. */ >
Am 11.10.22 um 13:27 schrieb Thomas Zimmermann: > Hi > > Am 11.10.22 um 13:04 schrieb Christian König: >> This allows to suppress creating the primary node. Useful for drivers >> which don't expose any display functionality, but are render only by >> design. >> >> Signed-off-by: Christian König <christian.koenig@amd.com> >> --- >> drivers/gpu/drm/drm_drv.c | 10 ++++++---- >> drivers/gpu/drm/drm_prime.c | 2 +- >> include/drm/drm_drv.h | 7 +++++++ >> 3 files changed, 14 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c >> index d81783f43452..4a525f78a932 100644 >> --- a/drivers/gpu/drm/drm_drv.c >> +++ b/drivers/gpu/drm/drm_drv.c >> @@ -634,9 +634,11 @@ static int drm_dev_init(struct drm_device *dev, >> goto err; >> } >> - ret = drm_minor_alloc(dev, DRM_MINOR_PRIMARY); >> - if (ret) >> - goto err; >> + if (!drm_core_check_feature(dev, DRIVER_RENDER_ONLY)) { >> + ret = drm_minor_alloc(dev, DRM_MINOR_PRIMARY); >> + if (ret) >> + goto err; >> + } >> ret = drm_legacy_create_map_hash(dev); >> if (ret) >> @@ -902,7 +904,7 @@ int drm_dev_register(struct drm_device *dev, >> unsigned long flags) >> driver->name, driver->major, driver->minor, >> driver->patchlevel, driver->date, >> dev->dev ? dev_name(dev->dev) : "virtual device", >> - dev->primary->index); >> + (dev->primary ?: dev->render)->index); >> goto out_unlock; >> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c >> index a3f180653b8b..4afd3f15b135 100644 >> --- a/drivers/gpu/drm/drm_prime.c >> +++ b/drivers/gpu/drm/drm_prime.c >> @@ -740,7 +740,7 @@ int drm_gem_prime_mmap(struct drm_gem_object >> *obj, struct vm_area_struct *vma) >> } >> /* Used by drm_gem_mmap() to lookup the GEM object */ >> - priv->minor = obj->dev->primary; >> + priv->minor = obj->dev->primary ?: obj->dev->render; >> fil->private_data = priv; >> ret = drm_vma_node_allow(&obj->vma_node, priv); >> diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h >> index f6159acb8856..0a1450d47ca2 100644 >> --- a/include/drm/drm_drv.h >> +++ b/include/drm/drm_drv.h >> @@ -94,6 +94,13 @@ enum drm_driver_feature { >> * synchronization of command submission. >> */ >> DRIVER_SYNCOBJ_TIMELINE = BIT(6), >> + /** >> + * @DRIVER_RENDER_ONLY >> + * >> + * Driver is a render node only driver and don't want to support >> the >> + * primary interface. >> + */ >> + DRIVER_RENDER_ONLY = BIT(7), > > Is it really necessary to add a new flag? If a driver sets DRIVER_GEM > and omits DRIVER_MODESET wouldn't this have the same meaning? Mhm, good point. I haven't thought about that. Let me double check if anybody is actually using this. Thanks, Christian. > > Best regards > Thomas > >> /* IMPORTANT: Below are all the legacy flags, add new ones >> above. */ >
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index d81783f43452..4a525f78a932 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -634,9 +634,11 @@ static int drm_dev_init(struct drm_device *dev, goto err; } - ret = drm_minor_alloc(dev, DRM_MINOR_PRIMARY); - if (ret) - goto err; + if (!drm_core_check_feature(dev, DRIVER_RENDER_ONLY)) { + ret = drm_minor_alloc(dev, DRM_MINOR_PRIMARY); + if (ret) + goto err; + } ret = drm_legacy_create_map_hash(dev); if (ret) @@ -902,7 +904,7 @@ int drm_dev_register(struct drm_device *dev, unsigned long flags) driver->name, driver->major, driver->minor, driver->patchlevel, driver->date, dev->dev ? dev_name(dev->dev) : "virtual device", - dev->primary->index); + (dev->primary ?: dev->render)->index); goto out_unlock; diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index a3f180653b8b..4afd3f15b135 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -740,7 +740,7 @@ int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) } /* Used by drm_gem_mmap() to lookup the GEM object */ - priv->minor = obj->dev->primary; + priv->minor = obj->dev->primary ?: obj->dev->render; fil->private_data = priv; ret = drm_vma_node_allow(&obj->vma_node, priv); diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h index f6159acb8856..0a1450d47ca2 100644 --- a/include/drm/drm_drv.h +++ b/include/drm/drm_drv.h @@ -94,6 +94,13 @@ enum drm_driver_feature { * synchronization of command submission. */ DRIVER_SYNCOBJ_TIMELINE = BIT(6), + /** + * @DRIVER_RENDER_ONLY + * + * Driver is a render node only driver and don't want to support the + * primary interface. + */ + DRIVER_RENDER_ONLY = BIT(7), /* IMPORTANT: Below are all the legacy flags, add new ones above. */
This allows to suppress creating the primary node. Useful for drivers which don't expose any display functionality, but are render only by design. Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/drm_drv.c | 10 ++++++---- drivers/gpu/drm/drm_prime.c | 2 +- include/drm/drm_drv.h | 7 +++++++ 3 files changed, 14 insertions(+), 5 deletions(-)