mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	Revert "PCI: create function symlinks in /sys/bus/pci/slots/N/"
This reverts commit 75568f8094.
Since they're just a convenience anyway, remove these symlinks since
they're causing duplicate filename errors in the wild.
Acked-by: Alex Chiang <achiang@canonical.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
			
			
This commit is contained in:
		
							parent
							
								
									f6d440daeb
								
							
						
					
					
						commit
						3be434f024
					
				
					 3 changed files with 0 additions and 125 deletions
				
			
		|  | @ -133,46 +133,6 @@ Description: | |||
| 		The symbolic link points to the PCI device sysfs entry of the | ||||
| 		Physical Function this device associates with. | ||||
| 
 | ||||
| 
 | ||||
| What:		/sys/bus/pci/slots/... | ||||
| Date:		April 2005 (possibly older) | ||||
| KernelVersion:	2.6.12 (possibly older) | ||||
| Contact:	linux-pci@vger.kernel.org | ||||
| Description: | ||||
| 		When the appropriate driver is loaded, it will create a | ||||
| 		directory per claimed physical PCI slot in | ||||
| 		/sys/bus/pci/slots/.  The names of these directories are | ||||
| 		specific to the driver, which in turn, are specific to the | ||||
| 		platform, but in general, should match the label on the | ||||
| 		machine's physical chassis. | ||||
| 
 | ||||
| 		The drivers that can create slot directories include the | ||||
| 		PCI hotplug drivers, and as of 2.6.27, the pci_slot driver. | ||||
| 
 | ||||
| 		The slot directories contain, at a minimum, a file named | ||||
| 		'address' which contains the PCI bus:device:function tuple. | ||||
| 		Other files may appear as well, but are specific to the | ||||
| 		driver. | ||||
| 
 | ||||
| What:		/sys/bus/pci/slots/.../function[0-7] | ||||
| Date:		March 2010 | ||||
| KernelVersion:	2.6.35 | ||||
| Contact:	linux-pci@vger.kernel.org | ||||
| Description: | ||||
| 		If PCI slot directories (as described above) are created, | ||||
| 		and the physical slot is actually populated with a device, | ||||
| 		symbolic links in the slot directory pointing to the | ||||
| 		device's PCI functions are created as well. | ||||
| 
 | ||||
| What:		/sys/bus/pci/devices/.../slot | ||||
| Date:		March 2010 | ||||
| KernelVersion:	2.6.35 | ||||
| Contact:	linux-pci@vger.kernel.org | ||||
| Description: | ||||
| 		If PCI slot directories (as described above) are created, | ||||
| 		a symbolic link pointing to the slot directory will be | ||||
| 		created as well. | ||||
| 
 | ||||
| What:		/sys/bus/pci/slots/.../module | ||||
| Date:		June 2009 | ||||
| Contact:	linux-pci@vger.kernel.org | ||||
|  |  | |||
|  | @ -1035,39 +1035,6 @@ error: | |||
| 	return retval; | ||||
| } | ||||
| 
 | ||||
| static void pci_remove_slot_links(struct pci_dev *dev) | ||||
| { | ||||
| 	char func[10]; | ||||
| 	struct pci_slot *slot; | ||||
| 
 | ||||
| 	sysfs_remove_link(&dev->dev.kobj, "slot"); | ||||
| 	list_for_each_entry(slot, &dev->bus->slots, list) { | ||||
| 		if (slot->number != PCI_SLOT(dev->devfn)) | ||||
| 			continue; | ||||
| 		snprintf(func, 10, "function%d", PCI_FUNC(dev->devfn)); | ||||
| 		sysfs_remove_link(&slot->kobj, func); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static int pci_create_slot_links(struct pci_dev *dev) | ||||
| { | ||||
| 	int result = 0; | ||||
| 	char func[10]; | ||||
| 	struct pci_slot *slot; | ||||
| 
 | ||||
| 	list_for_each_entry(slot, &dev->bus->slots, list) { | ||||
| 		if (slot->number != PCI_SLOT(dev->devfn)) | ||||
| 			continue; | ||||
| 		result = sysfs_create_link(&dev->dev.kobj, &slot->kobj, "slot"); | ||||
| 		if (result) | ||||
| 			goto out; | ||||
| 		snprintf(func, 10, "function%d", PCI_FUNC(dev->devfn)); | ||||
| 		result = sysfs_create_link(&slot->kobj, &dev->dev.kobj, func); | ||||
| 	} | ||||
| out: | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) | ||||
| { | ||||
| 	int retval; | ||||
|  | @ -1130,8 +1097,6 @@ int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) | |||
| 	if (retval) | ||||
| 		goto err_vga_file; | ||||
| 
 | ||||
| 	pci_create_slot_links(pdev); | ||||
| 
 | ||||
| 	return 0; | ||||
| 
 | ||||
| err_vga_file: | ||||
|  | @ -1181,8 +1146,6 @@ void pci_remove_sysfs_dev_files(struct pci_dev *pdev) | |||
| 	if (!sysfs_initialized) | ||||
| 		return; | ||||
| 
 | ||||
| 	pci_remove_slot_links(pdev); | ||||
| 
 | ||||
| 	pci_remove_capabilities_sysfs(pdev); | ||||
| 
 | ||||
| 	if (pdev->cfg_size < PCI_CFG_SPACE_EXP_SIZE) | ||||
|  |  | |||
|  | @ -97,50 +97,6 @@ static ssize_t cur_speed_read_file(struct pci_slot *slot, char *buf) | |||
| 	return bus_speed_read(slot->bus->cur_bus_speed, buf); | ||||
| } | ||||
| 
 | ||||
| static void remove_sysfs_files(struct pci_slot *slot) | ||||
| { | ||||
| 	char func[10]; | ||||
| 	struct list_head *tmp; | ||||
| 
 | ||||
| 	list_for_each(tmp, &slot->bus->devices) { | ||||
| 		struct pci_dev *dev = pci_dev_b(tmp); | ||||
| 		if (PCI_SLOT(dev->devfn) != slot->number) | ||||
| 			continue; | ||||
| 		sysfs_remove_link(&dev->dev.kobj, "slot"); | ||||
| 
 | ||||
| 		snprintf(func, 10, "function%d", PCI_FUNC(dev->devfn)); | ||||
| 		sysfs_remove_link(&slot->kobj, func); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static int create_sysfs_files(struct pci_slot *slot) | ||||
| { | ||||
| 	int result; | ||||
| 	char func[10]; | ||||
| 	struct list_head *tmp; | ||||
| 
 | ||||
| 	list_for_each(tmp, &slot->bus->devices) { | ||||
| 		struct pci_dev *dev = pci_dev_b(tmp); | ||||
| 		if (PCI_SLOT(dev->devfn) != slot->number) | ||||
| 			continue; | ||||
| 
 | ||||
| 		result = sysfs_create_link(&dev->dev.kobj, &slot->kobj, "slot"); | ||||
| 		if (result) | ||||
| 			goto fail; | ||||
| 
 | ||||
| 		snprintf(func, 10, "function%d", PCI_FUNC(dev->devfn)); | ||||
| 		result = sysfs_create_link(&slot->kobj, &dev->dev.kobj, func); | ||||
| 		if (result) | ||||
| 			goto fail; | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| 
 | ||||
| fail: | ||||
| 	remove_sysfs_files(slot); | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| static void pci_slot_release(struct kobject *kobj) | ||||
| { | ||||
| 	struct pci_dev *dev; | ||||
|  | @ -153,8 +109,6 @@ static void pci_slot_release(struct kobject *kobj) | |||
| 		if (PCI_SLOT(dev->devfn) == slot->number) | ||||
| 			dev->slot = NULL; | ||||
| 
 | ||||
| 	remove_sysfs_files(slot); | ||||
| 
 | ||||
| 	list_del(&slot->list); | ||||
| 
 | ||||
| 	kfree(slot); | ||||
|  | @ -346,8 +300,6 @@ placeholder: | |||
| 	INIT_LIST_HEAD(&slot->list); | ||||
| 	list_add(&slot->list, &parent->slots); | ||||
| 
 | ||||
| 	create_sysfs_files(slot); | ||||
| 
 | ||||
| 	list_for_each_entry(dev, &parent->devices, bus_list) | ||||
| 		if (PCI_SLOT(dev->devfn) == slot_nr) | ||||
| 			dev->slot = slot; | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Jesse Barnes
						Jesse Barnes