pci_hotplug: create the symlink to the hotplug driver at the hotplug slot directory

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

 



This patch creates the symlink to the hotplug driver at the hotplug slot directory
(/sys/bus/pci/slots/<slot_name>). As a result, we can know easily what driver manages
the hotplug slot.

Signed-off-by: Taku Izumi <izumi.taku@xxxxxxxxxxxxxx>

---
 drivers/pci/hotplug/pci_hotplug_core.c |   26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

Index: linux-next.29rc6/drivers/pci/hotplug/pci_hotplug_core.c
===================================================================
--- linux-next.29rc6.orig/drivers/pci/hotplug/pci_hotplug_core.c
+++ linux-next.29rc6/drivers/pci/hotplug/pci_hotplug_core.c
@@ -420,9 +420,20 @@ static int has_test_file(struct pci_slot
 	return -ENOENT;
 }

+static int has_owner_file(struct pci_slot *pci_slot)
+{
+	struct hotplug_slot *slot = pci_slot->hotplug;
+	if ((!slot) || (!slot->ops))
+		return -ENODEV;
+	if (slot->ops->owner)
+		return 0;
+	return -ENOENT;
+}
+
 static int fs_add_slot(struct pci_slot *slot)
 {
 	int retval = 0;
+	struct hotplug_slot *hotplug = slot->hotplug;

 	if (has_power_file(slot) == 0) {
 		retval = sysfs_create_file(&slot->kobj, &hotplug_slot_attr_power.attr);
@@ -472,8 +483,20 @@ static int fs_add_slot(struct pci_slot *
 			goto exit_test;
 	}

+	if (has_owner_file(slot) == 0) {
+		retval = sysfs_create_link(&slot->kobj,
+					   &hotplug->ops->owner->mkobj.kobj,
+					   hotplug->ops->owner->name);
+		if (retval)
+			goto exit_owner;
+	}
+
 	goto exit;

+exit_owner:
+	if (has_test_file(slot) == 0)
+		sysfs_remove_file(&slot->kobj, &hotplug_slot_attr_test.attr);
+
 exit_test:
 	if (has_cur_bus_speed_file(slot) == 0)
 		sysfs_remove_file(&slot->kobj, &hotplug_slot_attr_cur_bus_speed.attr);
@@ -524,6 +547,9 @@ static void fs_remove_slot(struct pci_sl

 	if (has_test_file(slot) == 0)
 		sysfs_remove_file(&slot->kobj, &hotplug_slot_attr_test.attr);
+
+	if (has_owner_file(slot) == 0)
+		sysfs_remove_link(&slot->kobj, slot->hotplug->ops->owner->name);
 }

 static struct hotplug_slot *get_slot_from_name (const char *name)


--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux