@@ -319,10 +319,12 @@ static long local_pci_probe(void *_ddi)
319319 * its remove routine.
320320 */
321321 pm_runtime_get_sync (dev );
322+ pci_dev -> driver = pci_drv ;
322323 rc = pci_drv -> probe (pci_dev , ddi -> id );
323324 if (!rc )
324325 return rc ;
325326 if (rc < 0 ) {
327+ pci_dev -> driver = NULL ;
326328 pm_runtime_put_sync (dev );
327329 return rc ;
328330 }
@@ -388,6 +390,7 @@ static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
388390 * @pci_dev: PCI device being probed
389391 *
390392 * returns 0 on success, else error.
393+ * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
391394 */
392395static int __pci_device_probe (struct pci_driver * drv , struct pci_dev * pci_dev )
393396{
@@ -454,14 +457,15 @@ static int pci_device_probe(struct device *dev)
454457static void pci_device_remove (struct device * dev )
455458{
456459 struct pci_dev * pci_dev = to_pci_dev (dev );
457- struct pci_driver * drv = to_pci_driver ( dev -> driver ) ;
460+ struct pci_driver * drv = pci_dev -> driver ;
458461
459462 if (drv -> remove ) {
460463 pm_runtime_get_sync (dev );
461464 drv -> remove (pci_dev );
462465 pm_runtime_put_noidle (dev );
463466 }
464467 pcibios_free_irq (pci_dev );
468+ pci_dev -> driver = NULL ;
465469 pci_iov_remove (pci_dev );
466470
467471 /* Undo the runtime PM settings in local_pci_probe() */
@@ -489,7 +493,7 @@ static void pci_device_remove(struct device *dev)
489493static void pci_device_shutdown (struct device * dev )
490494{
491495 struct pci_dev * pci_dev = to_pci_dev (dev );
492- struct pci_driver * drv = to_pci_driver ( dev -> driver ) ;
496+ struct pci_driver * drv = pci_dev -> driver ;
493497
494498 pm_runtime_resume (dev );
495499
@@ -585,7 +589,7 @@ static int pci_pm_reenable_device(struct pci_dev *pci_dev)
585589static int pci_legacy_suspend (struct device * dev , pm_message_t state )
586590{
587591 struct pci_dev * pci_dev = to_pci_dev (dev );
588- struct pci_driver * drv = to_pci_driver ( dev -> driver ) ;
592+ struct pci_driver * drv = pci_dev -> driver ;
589593
590594 if (drv && drv -> suspend ) {
591595 pci_power_t prev = pci_dev -> current_state ;
@@ -626,7 +630,7 @@ static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
626630static int pci_legacy_resume (struct device * dev )
627631{
628632 struct pci_dev * pci_dev = to_pci_dev (dev );
629- struct pci_driver * drv = to_pci_driver ( dev -> driver ) ;
633+ struct pci_driver * drv = pci_dev -> driver ;
630634
631635 pci_fixup_device (pci_fixup_resume , pci_dev );
632636
@@ -645,7 +649,7 @@ static void pci_pm_default_suspend(struct pci_dev *pci_dev)
645649
646650static bool pci_has_legacy_pm_support (struct pci_dev * pci_dev )
647651{
648- struct pci_driver * drv = to_pci_driver ( pci_dev -> dev . driver ) ;
652+ struct pci_driver * drv = pci_dev -> driver ;
649653 bool ret = drv && (drv -> suspend || drv -> resume );
650654
651655 /*
@@ -1238,11 +1242,11 @@ static int pci_pm_runtime_suspend(struct device *dev)
12381242 int error ;
12391243
12401244 /*
1241- * If the device has no driver , we leave it in D0, but it may go to
1242- * D3cold when the bridge above it runtime suspends. Save its
1243- * config space in case that happens.
1245+ * If pci_dev->driver is not set (unbound) , we leave the device in D0,
1246+ * but it may go to D3cold when the bridge above it runtime suspends.
1247+ * Save its config space in case that happens.
12441248 */
1245- if (!to_pci_driver ( dev -> driver ) ) {
1249+ if (!pci_dev -> driver ) {
12461250 pci_save_state (pci_dev );
12471251 return 0 ;
12481252 }
@@ -1299,7 +1303,7 @@ static int pci_pm_runtime_resume(struct device *dev)
12991303 */
13001304 pci_restore_standard_config (pci_dev );
13011305
1302- if (!to_pci_driver ( dev -> driver ) )
1306+ if (!pci_dev -> driver )
13031307 return 0 ;
13041308
13051309 pci_fixup_device (pci_fixup_resume_early , pci_dev );
@@ -1318,13 +1322,14 @@ static int pci_pm_runtime_resume(struct device *dev)
13181322
13191323static int pci_pm_runtime_idle (struct device * dev )
13201324{
1325+ struct pci_dev * pci_dev = to_pci_dev (dev );
13211326 const struct dev_pm_ops * pm = dev -> driver ? dev -> driver -> pm : NULL ;
13221327
13231328 /*
1324- * If the device has no driver, it should always remain in D0
1325- * regardless of the runtime PM status
1329+ * If pci_dev->driver is not set (unbound), the device should
1330+ * always remain in D0 regardless of the runtime PM status
13261331 */
1327- if (!to_pci_driver ( dev -> driver ) )
1332+ if (!pci_dev -> driver )
13281333 return 0 ;
13291334
13301335 if (!pm )
@@ -1431,10 +1436,8 @@ static struct pci_driver pci_compat_driver = {
14311436 */
14321437struct pci_driver * pci_dev_driver (const struct pci_dev * dev )
14331438{
1434- struct pci_driver * drv = to_pci_driver (dev -> dev .driver );
1435-
1436- if (drv )
1437- return drv ;
1439+ if (dev -> driver )
1440+ return dev -> driver ;
14381441 else {
14391442 int i ;
14401443 for (i = 0 ; i <= PCI_ROM_RESOURCE ; i ++ )
0 commit comments