[PATCH 13/13] drm: remove redundant minor->index

David Herrmann dh.herrmann at gmail.com
Wed Jan 29 06:02:00 PST 2014


The index of a minor can be easily calculated, no reason to store it.
Furthermore, it's actually only really used in drm_sysfs.c during
device-registration, so we don't win anything by caching it. All other
uses of it are dev->primary->index accesses, which are equivalent to
dev->minor_base now.

Replace all occurrences and drop minor->index. A small helper
drm_minor_get_id() is added, so drm_sysfs.c does not have to hard-code the
+64 offset, which is an implementation detail of drm_stub.c.

Signed-off-by: David Herrmann <dh.herrmann at gmail.com>
---
 drivers/gpu/drm/drm_fops.c                      |  3 ++-
 drivers/gpu/drm/drm_info.c                      |  2 +-
 drivers/gpu/drm/drm_pci.c                       |  2 +-
 drivers/gpu/drm/drm_platform.c                  |  2 +-
 drivers/gpu/drm/drm_stub.c                      | 17 ++++++++++++++---
 drivers/gpu/drm/drm_sysfs.c                     |  8 +++++---
 drivers/gpu/drm/drm_usb.c                       |  2 +-
 drivers/gpu/drm/i915/i915_gpu_error.c           |  2 +-
 drivers/gpu/drm/i915/i915_trace.h               | 20 ++++++++++----------
 drivers/gpu/drm/msm/msm_fbdev.c                 |  2 +-
 drivers/gpu/drm/omapdrm/omap_fbdev.c            |  2 +-
 drivers/gpu/drm/radeon/atombios_encoders.c      |  2 +-
 drivers/gpu/drm/radeon/radeon_legacy_encoders.c |  2 +-
 drivers/gpu/drm/radeon/radeon_trace.h           |  2 +-
 drivers/gpu/drm/tegra/bus.c                     |  2 +-
 include/drm/drmP.h                              |  2 +-
 16 files changed, 43 insertions(+), 29 deletions(-)

diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index fdf35cd..d37695e 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -217,7 +217,8 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
 	if (dev->switch_power_state != DRM_SWITCH_POWER_ON && dev->switch_power_state != DRM_SWITCH_POWER_DYNAMIC_OFF)
 		return -EINVAL;
 
-	DRM_DEBUG("pid = %d, minor = %d\n", task_pid_nr(current), minor->index);
+	DRM_DEBUG("pid = %d, devt = 0x%lx\n", task_pid_nr(current),
+		  (long)old_encode_dev(minor->kdev->devt));
 
 	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
 	if (!priv)
diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c
index 7473035..b5a4b0a 100644
--- a/drivers/gpu/drm/drm_info.c
+++ b/drivers/gpu/drm/drm_info.c
@@ -190,7 +190,7 @@ int drm_clients_info(struct seq_file *m, void *data)
 	list_for_each_entry(priv, &dev->filelist, lhead) {
 		seq_printf(m, "%c %3d %5d %5d %10u\n",
 			   priv->authenticated ? 'y' : 'n',
-			   priv->minor->index,
+			   drm_minor_get_id(priv->minor),
 			   pid_vnr(priv->pid),
 			   from_kuid_munged(seq_user_ns(m), priv->uid),
 			   priv->magic);
diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c
index 9ded847..4e6f5ea 100644
--- a/drivers/gpu/drm/drm_pci.c
+++ b/drivers/gpu/drm/drm_pci.c
@@ -338,7 +338,7 @@ int drm_get_pci_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
 
 	DRM_INFO("Initialized %s %d.%d.%d %s for %s on minor %d\n",
 		 driver->name, driver->major, driver->minor, driver->patchlevel,
-		 driver->date, pci_name(pdev), dev->primary->index);
+		 driver->date, pci_name(pdev), dev->minor_base);
 
 	/* No locking needed since shadow-attach is single-threaded since it may
 	 * only be called from the per-driver module init hook. */
diff --git a/drivers/gpu/drm/drm_platform.c b/drivers/gpu/drm/drm_platform.c
index 319ff53..7521571 100644
--- a/drivers/gpu/drm/drm_platform.c
+++ b/drivers/gpu/drm/drm_platform.c
@@ -59,7 +59,7 @@ static int drm_get_platform_dev(struct platform_device *platdev,
 
 	DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
 		 driver->name, driver->major, driver->minor, driver->patchlevel,
-		 driver->date, dev->primary->index);
+		 driver->date, dev->minor_base);
 
 	return 0;
 
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
index 0f84bf6..2567ecb 100644
--- a/drivers/gpu/drm/drm_stub.c
+++ b/drivers/gpu/drm/drm_stub.c
@@ -339,7 +339,6 @@ static int drm_minor_alloc(struct drm_device *dev, unsigned int type)
 		return -ENOMEM;
 
 	minor->type = type;
-	minor->index = drm_minor_type_to_id(dev, type);
 	minor->dev = dev;
 	INIT_LIST_HEAD(&minor->master_list);
 
@@ -369,7 +368,8 @@ static int drm_minor_register(struct drm_device *dev, unsigned int type)
 	if (!new_minor)
 		return 0;
 
-	ret = drm_debugfs_init(new_minor, new_minor->index, drm_debugfs_root);
+	ret = drm_debugfs_init(new_minor, drm_minor_get_id(new_minor),
+			       drm_debugfs_root);
 	if (ret) {
 		DRM_ERROR("DRM: Failed to initialize /sys/kernel/debug/dri.\n");
 		return ret;
@@ -381,7 +381,7 @@ static int drm_minor_register(struct drm_device *dev, unsigned int type)
 		goto err_debugfs;
 	}
 
-	DRM_DEBUG("new minor assigned %d\n", new_minor->index);
+	DRM_DEBUG("new minor assigned %d\n", drm_minor_get_id(new_minor));
 	return 0;
 
 err_debugfs:
@@ -459,6 +459,17 @@ void drm_minor_release(struct drm_minor *minor)
 }
 
 /**
+ * drm_minor_get_id - Return minor-ID of DRM-minor object
+ * @minor: DRM-minor object
+ *
+ * Returns the minor-ID of the given DRM-minor object.
+ */
+unsigned int drm_minor_get_id(struct drm_minor *minor)
+{
+	return drm_minor_type_to_id(minor->dev, minor->type);
+}
+
+/**
  * Called via drm_exit() at module unload time or when pci device is
  * unplugged.
  *
diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
index c22c309..9be02d9 100644
--- a/drivers/gpu/drm/drm_sysfs.c
+++ b/drivers/gpu/drm/drm_sysfs.c
@@ -380,7 +380,7 @@ int drm_sysfs_connector_add(struct drm_connector *connector)
 
 	connector->kdev = device_create(drm_class, dev->primary->kdev,
 					0, connector, "card%d-%s",
-					dev->primary->index, drm_get_connector_name(connector));
+					dev->minor_base, drm_get_connector_name(connector));
 	DRM_DEBUG("adding \"%s\" to sysfs\n",
 		  drm_get_connector_name(connector));
 
@@ -505,6 +505,7 @@ static void drm_sysfs_release(struct device *dev)
  */
 int drm_sysfs_device_add(struct drm_minor *minor)
 {
+	unsigned int minor_id;
 	char *minor_str;
 	int r;
 
@@ -521,15 +522,16 @@ int drm_sysfs_device_add(struct drm_minor *minor)
 		goto error;
 	}
 
+	minor_id = drm_minor_get_id(minor);
 	device_initialize(minor->kdev);
-	minor->kdev->devt = MKDEV(DRM_MAJOR, minor->index);
+	minor->kdev->devt = MKDEV(DRM_MAJOR, minor_id);
 	minor->kdev->class = drm_class;
 	minor->kdev->type = &drm_sysfs_device_minor;
 	minor->kdev->parent = minor->dev->dev;
 	minor->kdev->release = drm_sysfs_release;
 	dev_set_drvdata(minor->kdev, minor);
 
-	r = dev_set_name(minor->kdev, minor_str, minor->index);
+	r = dev_set_name(minor->kdev, minor_str, minor_id);
 	if (r < 0)
 		goto error;
 
diff --git a/drivers/gpu/drm/drm_usb.c b/drivers/gpu/drm/drm_usb.c
index c3406aa..eb02ad3 100644
--- a/drivers/gpu/drm/drm_usb.c
+++ b/drivers/gpu/drm/drm_usb.c
@@ -25,7 +25,7 @@ int drm_get_usb_dev(struct usb_interface *interface,
 
 	DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
 		 driver->name, driver->major, driver->minor, driver->patchlevel,
-		 driver->date, dev->primary->index);
+		 driver->date, dev->minor_base);
 
 	return 0;
 
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index a707cca..07442fb 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -914,7 +914,7 @@ void i915_capture_error_state(struct drm_device *dev)
 	}
 
 	DRM_INFO("GPU crash dump saved to /sys/class/drm/card%d/error\n",
-		 dev->primary->index);
+		 dev->minor_base);
 	DRM_INFO("GPU hangs can indicate a bug anywhere in the entire gfx stack, including userspace.\n");
 	DRM_INFO("Please file a _new_ bug report on bugs.freedesktop.org against DRI -> DRM/Intel\n");
 	DRM_INFO("drm/i915 developers can then reassign to the right component if it's not a kernel issue.\n");
diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h
index 6e580c9..a03e4e2 100644
--- a/drivers/gpu/drm/i915/i915_trace.h
+++ b/drivers/gpu/drm/i915/i915_trace.h
@@ -207,7 +207,7 @@ TRACE_EVENT(i915_gem_evict,
 			    ),
 
 	    TP_fast_assign(
-			   __entry->dev = dev->primary->index;
+			   __entry->dev = dev->minor_base;
 			   __entry->size = size;
 			   __entry->align = align;
 			   __entry->mappable = mappable;
@@ -227,7 +227,7 @@ TRACE_EVENT(i915_gem_evict_everything,
 			    ),
 
 	    TP_fast_assign(
-			   __entry->dev = dev->primary->index;
+			   __entry->dev = dev->minor_base;
 			  ),
 
 	    TP_printk("dev=%d", __entry->dev)
@@ -245,7 +245,7 @@ TRACE_EVENT(i915_gem_evict_vm,
 			   __entry->vm = vm;
 			  ),
 
-	    TP_printk("dev=%d, vm=%p", __entry->vm->dev->primary->index, __entry->vm)
+	    TP_printk("dev=%d, vm=%p", __entry->vm->dev->minor_base, __entry->vm)
 );
 
 TRACE_EVENT(i915_gem_ring_sync_to,
@@ -262,7 +262,7 @@ TRACE_EVENT(i915_gem_ring_sync_to,
 			     ),
 
 	    TP_fast_assign(
-			   __entry->dev = from->dev->primary->index;
+			   __entry->dev = from->dev->minor_base;
 			   __entry->sync_from = from->id;
 			   __entry->sync_to = to->id;
 			   __entry->seqno = seqno;
@@ -286,7 +286,7 @@ TRACE_EVENT(i915_gem_ring_dispatch,
 			     ),
 
 	    TP_fast_assign(
-			   __entry->dev = ring->dev->primary->index;
+			   __entry->dev = ring->dev->minor_base;
 			   __entry->ring = ring->id;
 			   __entry->seqno = seqno;
 			   __entry->flags = flags;
@@ -309,7 +309,7 @@ TRACE_EVENT(i915_gem_ring_flush,
 			     ),
 
 	    TP_fast_assign(
-			   __entry->dev = ring->dev->primary->index;
+			   __entry->dev = ring->dev->minor_base;
 			   __entry->ring = ring->id;
 			   __entry->invalidate = invalidate;
 			   __entry->flush = flush;
@@ -331,7 +331,7 @@ DECLARE_EVENT_CLASS(i915_gem_request,
 			     ),
 
 	    TP_fast_assign(
-			   __entry->dev = ring->dev->primary->index;
+			   __entry->dev = ring->dev->minor_base;
 			   __entry->ring = ring->id;
 			   __entry->seqno = seqno;
 			   ),
@@ -356,7 +356,7 @@ TRACE_EVENT(i915_gem_request_complete,
 			     ),
 
 	    TP_fast_assign(
-			   __entry->dev = ring->dev->primary->index;
+			   __entry->dev = ring->dev->minor_base;
 			   __entry->ring = ring->id;
 			   __entry->seqno = ring->get_seqno(ring, false);
 			   ),
@@ -388,7 +388,7 @@ TRACE_EVENT(i915_gem_request_wait_begin,
 	     * less desirable.
 	     */
 	    TP_fast_assign(
-			   __entry->dev = ring->dev->primary->index;
+			   __entry->dev = ring->dev->minor_base;
 			   __entry->ring = ring->id;
 			   __entry->seqno = seqno;
 			   __entry->blocking = mutex_is_locked(&ring->dev->struct_mutex);
@@ -414,7 +414,7 @@ DECLARE_EVENT_CLASS(i915_ring,
 			     ),
 
 	    TP_fast_assign(
-			   __entry->dev = ring->dev->primary->index;
+			   __entry->dev = ring->dev->minor_base;
 			   __entry->ring = ring->id;
 			   ),
 
diff --git a/drivers/gpu/drm/msm/msm_fbdev.c b/drivers/gpu/drm/msm/msm_fbdev.c
index 6c6d7d4..5fc48b9 100644
--- a/drivers/gpu/drm/msm/msm_fbdev.c
+++ b/drivers/gpu/drm/msm/msm_fbdev.c
@@ -83,7 +83,7 @@ static int msm_fbdev_create(struct drm_fb_helper *helper,
 
 	/* allocate backing bo */
 	size = mode_cmd.pitches[0] * mode_cmd.height;
-	DBG("allocating %d bytes for fb %d", size, dev->primary->index);
+	DBG("allocating %d bytes for fb %d", size, dev->minor_base);
 	mutex_lock(&dev->struct_mutex);
 	fbdev->bo = msm_gem_new(dev, size, MSM_BO_SCANOUT | MSM_BO_WC);
 	mutex_unlock(&dev->struct_mutex);
diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c b/drivers/gpu/drm/omapdrm/omap_fbdev.c
index 002988d..bd9f9a7 100644
--- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
+++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
@@ -176,7 +176,7 @@ static int omap_fbdev_create(struct drm_fb_helper *helper,
 	gsize = (union omap_gem_size){
 		.bytes = PAGE_ALIGN(mode_cmd.pitches[0] * mode_cmd.height),
 	};
-	DBG("allocating %d bytes for fb %d", gsize.bytes, dev->primary->index);
+	DBG("allocating %d bytes for fb %d", gsize.bytes, dev->minor_base);
 	fbdev->bo = omap_gem_new(dev, gsize, OMAP_BO_SCANOUT | OMAP_BO_WC);
 	if (!fbdev->bo) {
 		dev_err(dev->dev, "failed to allocate buffer object\n");
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
index a42d615..f5cc894 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -212,7 +212,7 @@ void radeon_atom_backlight_init(struct radeon_encoder *radeon_encoder,
 	props.max_brightness = RADEON_MAX_BL_LEVEL;
 	props.type = BACKLIGHT_RAW;
 	snprintf(bl_name, sizeof(bl_name),
-		 "radeon_bl%d", dev->primary->index);
+		 "radeon_bl%d", dev->minor_base);
 	bd = backlight_device_register(bl_name, drm_connector->kdev,
 				       pdata, &radeon_atom_backlight_ops, &props);
 	if (IS_ERR(bd)) {
diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
index c89971d..ef82bdb 100644
--- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
+++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
@@ -391,7 +391,7 @@ void radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder,
 	props.max_brightness = RADEON_MAX_BL_LEVEL;
 	props.type = BACKLIGHT_RAW;
 	snprintf(bl_name, sizeof(bl_name),
-		 "radeon_bl%d", dev->primary->index);
+		 "radeon_bl%d", dev->minor_base);
 	bd = backlight_device_register(bl_name, drm_connector->kdev,
 				       pdata, &radeon_backlight_ops, &props);
 	if (IS_ERR(bd)) {
diff --git a/drivers/gpu/drm/radeon/radeon_trace.h b/drivers/gpu/drm/radeon/radeon_trace.h
index 0473257..84b56df 100644
--- a/drivers/gpu/drm/radeon/radeon_trace.h
+++ b/drivers/gpu/drm/radeon/radeon_trace.h
@@ -116,7 +116,7 @@ DECLARE_EVENT_CLASS(radeon_fence_request,
 			     ),
 
 	    TP_fast_assign(
-			   __entry->dev = dev->primary->index;
+			   __entry->dev = dev->minor_base;
 			   __entry->seqno = seqno;
 			   ),
 
diff --git a/drivers/gpu/drm/tegra/bus.c b/drivers/gpu/drm/tegra/bus.c
index 71cef5c..7d2aace 100644
--- a/drivers/gpu/drm/tegra/bus.c
+++ b/drivers/gpu/drm/tegra/bus.c
@@ -58,7 +58,7 @@ int drm_host1x_init(struct drm_driver *driver, struct host1x_device *device)
 
 	DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n", driver->name,
 		 driver->major, driver->minor, driver->patchlevel,
-		 driver->date, drm->primary->index);
+		 driver->date, drm->minor_base);
 
 	return 0;
 
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index cdc5362..5339a9c 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1038,7 +1038,6 @@ struct drm_info_node {
  * DRM minor structure. This structure represents a drm minor number.
  */
 struct drm_minor {
-	int index;			/**< Minor device number */
 	int type;                       /**< Control or render */
 	struct device *kdev;		/**< Linux device */
 	struct drm_device *dev;
@@ -1670,6 +1669,7 @@ void drm_dev_unref(struct drm_device *dev);
 int drm_dev_register(struct drm_device *dev, unsigned long flags);
 void drm_dev_unregister(struct drm_device *dev);
 
+unsigned int drm_minor_get_id(struct drm_minor *minor);
 struct drm_minor *drm_minor_acquire(unsigned int minor_id);
 void drm_minor_release(struct drm_minor *minor);
 
-- 
1.8.5.3



More information about the dri-devel mailing list