8139cp: pci_get_drvdata(pdev) can not be NULL in suspend handler
authorFrançois Romieu <romieu@nail.test.fr.zoreil.com>
Tue, 15 Aug 2006 18:10:57 +0000 (20:10 +0200)
committerFrancois Romieu <romieu@fr.zoreil.com>
Thu, 31 Aug 2006 20:15:42 +0000 (22:15 +0200)
commit7668a4945ba0e17a61e535a6c67aa64a319a03b4
tree08a883a950a69e1105d1eef59ae7f6e6ec318932
parente68970e7543815133224f79a858e7c9e0c42f4de
8139cp: pci_get_drvdata(pdev) can not be NULL in suspend handler

1) pci_set_drvdata() is used in cp_{init/remove}_one to initialize/reset
   driver_data to the relevant value (resp. net_device * and NULL).

2) each of the 3 relevant functions is issued under (device *)->sem:
   2.1) pci_unregister_driver
        -> driver_unregister
           -> bus_remove_driver
              -> driver_detach (takes (device *)->sem)
                 -> __device_release_driver(dev)
                    -> dev->bus-remove(dev) (== pci_device_remove)
                       -> drv->remove(pdev) (== cp_remove_one)
                       [...]
                       pci_dev->driver = NULL;

   2.2) pci_register_driver
        -> __pci_register_driver
           -> driver_register
              -> bus_add_driver
                 -> driver_attach
                    -> __driver_attach (takes (device *)->sem)
                       -> driver_probe_device(drv, dev)
                          -> dev->bus->probe(dev) (== pci_device_probe)
                             -> _pci_device_probe(drv, pci_dev)
                                -> pci_call_probe(drv, pci_dev, id)
                                   -> drv->probe(dev, id) (== cp_init_one)
                                [...]
                                pci_dev->driver = drv;

   2.3) suspend_device (takes (device *)->sem)
        -> dev->bus->suspend(dev) (== pci_device_suspend)
           checking for drv = pci_dev->driver != NULL
           [...]
           -> drv->suspend(pci_dev, state) (== cp_suspend)

dev->sem and the state of pci_dev->driver provide the expected result.

St Mary's day was a bit rainy here.

Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
drivers/net/8139cp.c