[RFC] [PATCH] ACPI: use unique ACPI device names in procfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Use unique device names in procfs.

Device name is not unique in /proc/acpi.
http://bugzilla.kernel.org/show_bug.cgi?id=8798

Use acpi_device->dev.bus_id instead of
acpi_device->pnp.bus_id, like what we've done in sysfs.

ACPI proc I/F will change a lot with this patch applied.
But as /proc/acpi/... won't be removed in a short time,
I still think it's worth doing.

Does this patch miss something?
Or are there any better ideas to make the ACPI device name
unique in procfs?

Any comments are appreciated. Thanks.

Signed-off-by: Zhang Rui <rui.zhang@xxxxxxxxx>
---
 drivers/acpi/bus.c        |   29 +++++++++++++++--------------
 drivers/acpi/power.c      |   10 +++++-----
 drivers/acpi/sbs.c        |    2 +-
 drivers/acpi/scan.c       |    2 +-
 drivers/acpi/sleep/proc.c |   19 ++++++++++---------
 drivers/acpi/thermal.c    |    6 +++---
 include/acpi/acpi_bus.h   |    4 ++--
 7 files changed, 37 insertions(+), 35 deletions(-)

Index: linux-2.6.23-rc1/drivers/acpi/thermal.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/thermal.c
+++ linux-2.6.23-rc1/drivers/acpi/thermal.c
@@ -834,7 +834,7 @@ static int acpi_thermal_trip_seq_show(st
 		for (j = 0; j < tz->trips.passive.devices.count; j++) {
 			status = acpi_bus_get_device(tz->trips.passive.devices.
 						     handles[j], &device);
-			seq_printf(seq, "%4.4s ", status ? "" :
+			seq_printf(seq, "%s ", status ? "" :
 				   acpi_device_bid(device));
 		}
 		seq_puts(seq, "\n");
@@ -850,7 +850,7 @@ static int acpi_thermal_trip_seq_show(st
 			status = acpi_bus_get_device(tz->trips.active[i].
 						     devices.handles[j],
 						     &device);
-			seq_printf(seq, "%4.4s ", status ? "" :
+			seq_printf(seq, "%s", status ? "" :
 				   acpi_device_bid(device));
 		}
 		seq_puts(seq, "\n");
@@ -1163,7 +1163,7 @@ static int acpi_thermal_add(struct acpi_
 		return -ENOMEM;
 
 	tz->device = device;
-	strcpy(tz->name, device->pnp.bus_id);
+	strcpy(tz->name, acpi_device_bid(device));
 	strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME);
 	strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS);
 	acpi_driver_data(device) = tz;
Index: linux-2.6.23-rc1/include/acpi/acpi_bus.h
===================================================================
--- linux-2.6.23-rc1.orig/include/acpi/acpi_bus.h
+++ linux-2.6.23-rc1/include/acpi/acpi_bus.h
@@ -182,7 +182,7 @@ struct acpi_device_dir {
 
 /* Plug and Play */
 
-typedef char acpi_bus_id[5];
+typedef char acpi_bus_id[BUS_ID_SIZE];
 typedef unsigned long acpi_bus_address;
 typedef char acpi_hardware_id[15];
 typedef char acpi_unique_id[9];
@@ -199,7 +199,7 @@ struct acpi_device_pnp {
 	acpi_device_class device_class;	/*        "          */
 };
 
-#define acpi_device_bid(d)	((d)->pnp.bus_id)
+#define acpi_device_bid(d)	((d)->dev.bus_id)
 #define acpi_device_adr(d)	((d)->pnp.bus_address)
 #define acpi_device_hid(d)	((d)->pnp.hardware_id)
 #define acpi_device_uid(d)	((d)->pnp.unique_id)
Index: linux-2.6.23-rc1/drivers/acpi/sbs.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/sbs.c
+++ linux-2.6.23-rc1/drivers/acpi/sbs.c
@@ -424,7 +424,7 @@ static int acpi_check_update_proc(struct
 static int acpi_sbs_generate_event(struct acpi_device *device,
 				   int event, int state, char *bid, char *class)
 {
-	char bid_saved[5];
+	char bid_saved[BUS_ID_SIZE];
 	char class_saved[20];
 	int result = 0;
 
Index: linux-2.6.23-rc1/drivers/acpi/bus.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/bus.c
+++ linux-2.6.23-rc1/drivers/acpi/bus.c
@@ -110,12 +110,13 @@ int acpi_bus_get_status(struct acpi_devi
 	if (device->status.functional && !device->status.present) {
 		printk(KERN_WARNING PREFIX "Device [%s] status [%08x]: "
 		       "functional but not present; setting present\n",
-		       device->pnp.bus_id, (u32) STRUCT_TO_INT(device->status));
+		       acpi_device_bid(device),
+		       (u32) STRUCT_TO_INT(device->status));
 		device->status.present = 1;
 	}
 
 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]\n",
-			  device->pnp.bus_id,
+			  acpi_device_bid(device),
 			  (u32) STRUCT_TO_INT(device->status)));
 
 	return 0;
@@ -168,7 +169,7 @@ int acpi_bus_get_power(acpi_handle handl
 	}
 
 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] power state is D%d\n",
-			  device->pnp.bus_id, device->power.state));
+			 acpi_device_bid(device), device->power.state));
 
 	return 0;
 }
@@ -261,11 +262,11 @@ int acpi_bus_set_power(acpi_handle handl
 	if (result)
 		printk(KERN_WARNING PREFIX
 			      "Transitioning device [%s] to D%d\n",
-			      device->pnp.bus_id, state);
+			      acpi_device_bid(device), state);
 	else
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				  "Device [%s] transitioned to D%d\n",
-				  device->pnp.bus_id, state));
+				  acpi_device_bid(device), state));
 
 	return result;
 }
@@ -306,7 +307,7 @@ int acpi_bus_generate_event(struct acpi_
 		return -ENOMEM;
 
 	strcpy(event->device_class, device->pnp.device_class);
-	strcpy(event->bus_id, device->pnp.bus_id);
+	strcpy(event->bus_id, acpi_device_bid(device));
 	event->type = type;
 	event->data = data;
 
@@ -466,7 +467,7 @@ static void acpi_bus_notify(acpi_handle 
 	case ACPI_NOTIFY_BUS_CHECK:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				  "Received BUS CHECK notification for device [%s]\n",
-				  device->pnp.bus_id));
+				  acpi_device_bid(device)));
 		result = acpi_bus_check_scope(device);
 		/*
 		 * TBD: We'll need to outsource certain events to non-ACPI
@@ -477,7 +478,7 @@ static void acpi_bus_notify(acpi_handle 
 	case ACPI_NOTIFY_DEVICE_CHECK:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				  "Received DEVICE CHECK notification for device [%s]\n",
-				  device->pnp.bus_id));
+				  acpi_device_bid(device)));
 		result = acpi_bus_check_device(device, NULL);
 		/*
 		 * TBD: We'll need to outsource certain events to non-ACPI
@@ -488,42 +489,42 @@ static void acpi_bus_notify(acpi_handle 
 	case ACPI_NOTIFY_DEVICE_WAKE:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				  "Received DEVICE WAKE notification for device [%s]\n",
-				  device->pnp.bus_id));
+				  acpi_device_bid(device)));
 		/* TBD */
 		break;
 
 	case ACPI_NOTIFY_EJECT_REQUEST:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				  "Received EJECT REQUEST notification for device [%s]\n",
-				  device->pnp.bus_id));
+				  acpi_device_bid(device)));
 		/* TBD */
 		break;
 
 	case ACPI_NOTIFY_DEVICE_CHECK_LIGHT:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				  "Received DEVICE CHECK LIGHT notification for device [%s]\n",
-				  device->pnp.bus_id));
+				  acpi_device_bid(device)));
 		/* TBD: Exactly what does 'light' mean? */
 		break;
 
 	case ACPI_NOTIFY_FREQUENCY_MISMATCH:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				  "Received FREQUENCY MISMATCH notification for device [%s]\n",
-				  device->pnp.bus_id));
+				  acpi_device_bid(device)));
 		/* TBD */
 		break;
 
 	case ACPI_NOTIFY_BUS_MODE_MISMATCH:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				  "Received BUS MODE MISMATCH notification for device [%s]\n",
-				  device->pnp.bus_id));
+				  acpi_device_bid(device)));
 		/* TBD */
 		break;
 
 	case ACPI_NOTIFY_POWER_FAULT:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				  "Received POWER FAULT notification for device [%s]\n",
-				  device->pnp.bus_id));
+				  acpi_device_bid(device)));
 		/* TBD */
 		break;
 
Index: linux-2.6.23-rc1/drivers/acpi/scan.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/scan.c
+++ linux-2.6.23-rc1/drivers/acpi/scan.c
@@ -267,7 +267,7 @@ static int acpi_device_probe(struct devi
 			acpi_start_single_object(acpi_dev);
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 			"Found driver [%s] for device [%s]\n",
-			acpi_drv->name, acpi_dev->pnp.bus_id));
+			acpi_drv->name, acpi_device_bid(acpi_dev)));
 		get_device(dev);
 	}
 	return ret;
Index: linux-2.6.23-rc1/drivers/acpi/power.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/power.c
+++ linux-2.6.23-rc1/drivers/acpi/power.c
@@ -197,7 +197,7 @@ static int acpi_power_on(acpi_handle han
 		ref = container_of(node, struct acpi_power_reference, node);
 		if (dev->handle == ref->device->handle) {
 			ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] already referenced by resource [%s]\n",
-				  dev->pnp.bus_id, resource->name));
+				  acpi_device_bid(dev), resource->name));
 			found = 1;
 			break;
 		}
@@ -214,7 +214,7 @@ static int acpi_power_on(acpi_handle han
 		list_add_tail(&ref->node, &resource->reference);
 		ref->device = dev;
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] added to resource [%s] references\n",
-			  dev->pnp.bus_id, resource->name));
+			  acpi_device_bid(dev), resource->name));
 	}
 	mutex_unlock(&resource->resource_lock);
 
@@ -262,7 +262,7 @@ static int acpi_power_off_device(acpi_ha
 			list_del(&ref->node);
 			kfree(ref);
 			ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] removed from resource [%s] references\n",
-			    dev->pnp.bus_id, resource->name));
+			    acpi_device_bid(dev), resource->name));
 			break;
 		}
 	}
@@ -470,7 +470,7 @@ int acpi_power_transition(struct acpi_de
 	if (result) {
 		device->power.state = ACPI_STATE_UNKNOWN;
 		printk(KERN_WARNING PREFIX "Transitioning device [%s] to D%d\n",
-			      device->pnp.bus_id, state);
+			      acpi_device_bid(device), state);
 	} else {
 	/* We shouldn't change the state till all above operations succeed */
 		device->power.state = state;
@@ -602,7 +602,7 @@ static int acpi_power_add(struct acpi_de
 	resource->device = device;
 	mutex_init(&resource->resource_lock);
 	INIT_LIST_HEAD(&resource->reference);
-	strcpy(resource->name, device->pnp.bus_id);
+	strcpy(resource->name, acpi_device_bid(device));
 	strcpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME);
 	strcpy(acpi_device_class(device), ACPI_POWER_CLASS);
 	acpi_driver_data(device) = resource;
Index: linux-2.6.23-rc1/drivers/acpi/sleep/proc.c
===================================================================
--- linux-2.6.23-rc1.orig/drivers/acpi/sleep/proc.c
+++ linux-2.6.23-rc1/drivers/acpi/sleep/proc.c
@@ -359,7 +359,7 @@ acpi_system_wakeup_device_seq_show(struc
 {
 	struct list_head *node, *next;
 
-	seq_printf(seq, "Device\tS-state\t  Status   Sysfs node\n");
+	seq_printf(seq, "Device        \tName\tS-state\t  Status   Sysfs node\n");
 
 	spin_lock(&acpi_device_lock);
 	list_for_each_safe(node, next, &acpi_wakeup_device_list) {
@@ -372,8 +372,8 @@ acpi_system_wakeup_device_seq_show(struc
 		spin_unlock(&acpi_device_lock);
 
 		ldev = acpi_get_physical_device(dev->handle);
-		seq_printf(seq, "%s\t  S%d\t%c%-8s  ",
-			   dev->pnp.bus_id,
+		seq_printf(seq, "%.15s\t%4s\t  S%d\t%c%-8s  ",
+			   acpi_device_bid(dev), dev->pnp.bus_id,
 			   (u32) dev->wakeup.sleep_state,
 			   dev->wakeup.flags.run_wake ? '*' : ' ',
 			   dev->wakeup.state.enabled ? "enabled" : "disabled");
@@ -396,13 +396,13 @@ acpi_system_write_wakeup_device(struct f
 				size_t count, loff_t * ppos)
 {
 	struct list_head *node, *next;
-	char strbuf[5];
-	char str[5] = "";
+	char strbuf[BUS_ID_SIZE];
+	char str[BUS_ID_SIZE] = "";
 	int len = count;
 	struct acpi_device *found_dev = NULL;
 
-	if (len > 4)
-		len = 4;
+	if (len > BUS_ID_SIZE)
+		len = BUS_ID_SIZE;
 
 	if (copy_from_user(strbuf, buffer, len))
 		return -EFAULT;
@@ -416,7 +416,7 @@ acpi_system_write_wakeup_device(struct f
 		if (!dev->wakeup.flags.valid)
 			continue;
 
-		if (!strncmp(dev->pnp.bus_id, str, 4)) {
+		if (!strncmp(acpi_device_bid(dev), str, BUS_ID_SIZE)) {
 			dev->wakeup.state.enabled =
 			    dev->wakeup.state.enabled ? 0 : 1;
 			found_dev = dev;
@@ -438,7 +438,8 @@ acpi_system_write_wakeup_device(struct f
 				printk(KERN_WARNING
 				       "ACPI: '%s' and '%s' have the same GPE, "
 				       "can't disable/enable one seperately\n",
-				       dev->pnp.bus_id, found_dev->pnp.bus_id);
+				       acpi_device_bid(dev),
+				       acpi_device_bid(found_dev));
 				dev->wakeup.state.enabled =
 				    found_dev->wakeup.state.enabled;
 			}
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux