On 6/1/23 23:57, Manivannan Sadhasivam wrote: > Currently, the EPF probe function doesn't get the device ID argument needed > to correctly identify the device table ID of the EPF device. > > When multiple entries are added to the "struct pci_epf_device_id" table, > the probe function needs to identify the correct one. This is achieved by > modifying the pci_epf_match_id() function to return the match ID pointer > and passing it to the driver's probe function. > > pci_epf_device_match() function can return bool based on the return value > of pci_epf_match_id(). > > Reviewed-by: Kishon Vijay Abraham I <kishon@xxxxxxxxxx> > Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> [...] > static int pci_epf_device_match(struct device *dev, struct device_driver *drv) > @@ -510,8 +510,12 @@ static int pci_epf_device_match(struct device *dev, struct device_driver *drv) > struct pci_epf *epf = to_pci_epf(dev); > struct pci_epf_driver *driver = to_pci_epf_driver(drv); > > - if (driver->id_table) > - return pci_epf_match_id(driver->id_table, epf); > + if (driver->id_table) { > + if (pci_epf_match_id(driver->id_table, epf)) > + return true; > + else > + return false; return pci_epf_match_id(driver->id_table, epf) != NULL; is simpler. If you do not like this, at least drop the "else" as it is not necessary at all. > + } > > return !strcmp(epf->name, drv->name); > } > @@ -520,13 +524,15 @@ static int pci_epf_device_probe(struct device *dev) > { > struct pci_epf *epf = to_pci_epf(dev); > struct pci_epf_driver *driver = to_pci_epf_driver(dev->driver); > + const struct pci_epf_device_id *id; > > if (!driver->probe) > return -ENODEV; > > epf->driver = driver; > + id = pci_epf_match_id(driver->id_table, epf); Not sure that the id variable is that useful. > > - return driver->probe(epf); > + return driver->probe(epf, id); > } -- Damien Le Moal Western Digital Research