[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