mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	drivers: Add generic helper to match any device
Add a generic helper to match any/all devices. Using this
introduce new wrappers {bus/driver/class}_find_next_device().
Cc: Elie Morisse <syniurge@gmail.com>
Cc: "James E.J. Bottomley" <jejb@linux.ibm.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: Nehal Shah <nehal-bakulchandra.shah@amd.com>
Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Cc: Shyam Sundar S K <shyam-sundar.s-k@amd.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com> # PCI
Link: https://lore.kernel.org/r/20190723221838.12024-7-suzuki.poulose@arm.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
			
			
This commit is contained in:
		
							parent
							
								
									00500147cb
								
							
						
					
					
						commit
						6bf85ba9e5
					
				
					 6 changed files with 28 additions and 27 deletions
				
			
		|  | @ -3379,3 +3379,9 @@ int device_match_acpi_dev(struct device *dev, const void *adev) | |||
| 	return ACPI_COMPANION(dev) == adev; | ||||
| } | ||||
| EXPORT_SYMBOL(device_match_acpi_dev); | ||||
| 
 | ||||
| int device_match_any(struct device *dev, const void *unused) | ||||
| { | ||||
| 	return 1; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(device_match_any); | ||||
|  |  | |||
|  | @ -457,18 +457,12 @@ static struct pci_driver amd_mp2_pci_driver = { | |||
| }; | ||||
| module_pci_driver(amd_mp2_pci_driver); | ||||
| 
 | ||||
| static int amd_mp2_device_match(struct device *dev, const void *data) | ||||
| { | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| struct amd_mp2_dev *amd_mp2_find_device(void) | ||||
| { | ||||
| 	struct device *dev; | ||||
| 	struct pci_dev *pci_dev; | ||||
| 
 | ||||
| 	dev = driver_find_device(&amd_mp2_pci_driver.driver, NULL, NULL, | ||||
| 				 amd_mp2_device_match); | ||||
| 	dev = driver_find_next_device(&amd_mp2_pci_driver.driver, NULL); | ||||
| 	if (!dev) | ||||
| 		return NULL; | ||||
| 
 | ||||
|  |  | |||
|  | @ -64,11 +64,6 @@ static struct resource *get_pci_domain_busn_res(int domain_nr) | |||
| 	return &r->res; | ||||
| } | ||||
| 
 | ||||
| static int find_anything(struct device *dev, const void *data) | ||||
| { | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Some device drivers need know if PCI is initiated. | ||||
|  * Basically, we think PCI is not initiated when there | ||||
|  | @ -79,7 +74,7 @@ int no_pci_devices(void) | |||
| 	struct device *dev; | ||||
| 	int no_devices; | ||||
| 
 | ||||
| 	dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything); | ||||
| 	dev = bus_find_next_device(&pci_bus_type, NULL); | ||||
| 	no_devices = (dev == NULL); | ||||
| 	put_device(dev); | ||||
| 	return no_devices; | ||||
|  |  | |||
|  | @ -581,11 +581,6 @@ int ccwgroup_driver_register(struct ccwgroup_driver *cdriver) | |||
| } | ||||
| EXPORT_SYMBOL(ccwgroup_driver_register); | ||||
| 
 | ||||
| static int __ccwgroup_match_all(struct device *dev, const void *data) | ||||
| { | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * ccwgroup_driver_unregister() - deregister a ccw group driver | ||||
|  * @cdriver: driver to be deregistered | ||||
|  | @ -597,8 +592,7 @@ void ccwgroup_driver_unregister(struct ccwgroup_driver *cdriver) | |||
| 	struct device *dev; | ||||
| 
 | ||||
| 	/* We don't want ccwgroup devices to live longer than their driver. */ | ||||
| 	while ((dev = driver_find_device(&cdriver->driver, NULL, NULL, | ||||
| 					 __ccwgroup_match_all))) { | ||||
| 	while ((dev = driver_find_next_device(&cdriver->driver, NULL))) { | ||||
| 		struct ccwgroup_device *gdev = to_ccwgroupdev(dev); | ||||
| 
 | ||||
| 		ccwgroup_ungroup(gdev); | ||||
|  |  | |||
|  | @ -372,15 +372,10 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf, | |||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int always_match(struct device *dev, const void *data) | ||||
| { | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| static inline struct device *next_scsi_device(struct device *start) | ||||
| { | ||||
| 	struct device *next = bus_find_device(&scsi_bus_type, start, NULL, | ||||
| 					      always_match); | ||||
| 	struct device *next = bus_find_next_device(&scsi_bus_type, start); | ||||
| 
 | ||||
| 	put_device(start); | ||||
| 	return next; | ||||
| } | ||||
|  |  | |||
|  | @ -169,6 +169,7 @@ int device_match_of_node(struct device *dev, const void *np); | |||
| int device_match_fwnode(struct device *dev, const void *fwnode); | ||||
| int device_match_devt(struct device *dev, const void *pdevt); | ||||
| int device_match_acpi_dev(struct device *dev, const void *adev); | ||||
| int device_match_any(struct device *dev, const void *unused); | ||||
| 
 | ||||
| int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data, | ||||
| 		     int (*fn)(struct device *dev, void *data)); | ||||
|  | @ -225,6 +226,16 @@ static inline struct device *bus_find_device_by_devt(struct bus_type *bus, | |||
| 	return bus_find_device(bus, NULL, &devt, device_match_devt); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * bus_find_next_device - Find the next device after a given device in a | ||||
|  * given bus. | ||||
|  */ | ||||
| static inline struct device * | ||||
| bus_find_next_device(struct bus_type *bus,struct device *cur) | ||||
| { | ||||
| 	return bus_find_device(bus, cur, NULL, device_match_any); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI | ||||
| struct acpi_device; | ||||
| 
 | ||||
|  | @ -465,6 +476,12 @@ static inline struct device *driver_find_device_by_devt(struct device_driver *dr | |||
| 	return driver_find_device(drv, NULL, &devt, device_match_devt); | ||||
| } | ||||
| 
 | ||||
| static inline struct device *driver_find_next_device(struct device_driver *drv, | ||||
| 						     struct device *start) | ||||
| { | ||||
| 	return driver_find_device(drv, start, NULL, device_match_any); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI | ||||
| /**
 | ||||
|  * driver_find_device_by_acpi_dev : device iterator for locating a particular | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Suzuki K Poulose
						Suzuki K Poulose