[PATCH] drm: Provide drm_set_busid() fallback
Thierry Reding
thierry.reding at gmail.com
Fri Apr 11 06:28:56 PDT 2014
From: Thierry Reding <treding at nvidia.com>
The only reason why struct drm_bus is still around is because the
SETVERSION IOCTL calls a bus specific .set_busid() function. This commit
provides a fallback implementation if a device either doesn't have a bus
associated with it or if it doesn't implement .set_busid(). The bus ID
will be set to the device's name as returned by dev_name().
This can be useful to create DRM devices directly in drivers using the
drm_dev_alloc() and drm_dev_register() functions rather than going
through the bus-specific implementations, with the goal of eventually
getting rid of drm_bus entirely.
Signed-off-by: Thierry Reding <treding at nvidia.com>
---
drivers/gpu/drm/drm_ioctl.c | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
index 93a42040bedb..d27134a94d69 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -122,6 +122,19 @@ err:
return ret;
}
+static int __drm_set_busid(struct drm_device *dev, struct drm_master *master)
+{
+ const char *name = dev_name(dev->dev);
+
+ master->unique = kstrdup(name, GFP_KERNEL);
+ if (!master->unique)
+ return -ENOMEM;
+
+ master->unique_len = strlen(name);
+
+ return 0;
+}
+
static int drm_set_busid(struct drm_device *dev, struct drm_file *file_priv)
{
struct drm_master *master = file_priv->master;
@@ -130,9 +143,16 @@ static int drm_set_busid(struct drm_device *dev, struct drm_file *file_priv)
if (master->unique != NULL)
drm_unset_busid(dev, master);
- ret = dev->driver->bus->set_busid(dev, master);
- if (ret)
- goto err;
+ if (dev->driver->bus && dev->driver->bus->set_busid) {
+ ret = dev->driver->bus->set_busid(dev, master);
+ if (ret)
+ goto err;
+ } else {
+ ret = __drm_set_busid(dev, master);
+ if (ret)
+ goto err;
+ }
+
return 0;
err:
drm_unset_busid(dev, master);
--
1.9.1
More information about the dri-devel
mailing list