Updating the Device Queuing Discipline State
We saw in the section "Queuing Discipline State" which flags can
be set in dev->state to define the device queuing
discipline state. In this section, we will see how two of those flags are used to handle
power management and link state changes.
Interactions with Power Management
When the kernel has support for power management, NIC device drivers can be notified
when the system goes into suspend mode, when it is resumed, etc. We saw in the section
"Example of PCI NIC Driver
Registration" in Chapter 6 how the
suspend and resume function pointers of the pci_driver
structures are initialized depending on whether the kernel has support for power
management. This is, for example, how the drivers/net/3c59x.c device driver initializes its pci_driver instance:
static struct pci_driver vortex_driver = {
.name "3c59x",
.probe vortex_init_one,
.remove _ _devexit_p(vortex_remove_one),
.id_table vortex_pci_tbl,
#ifdef CONFIG_PM
.suspend vortex_suspend,
.resume vortex_resume,
#endif
};When the system goes into suspend mode, the suspend routines provided by device drivers are executed to let drivers take
action accordingly. Power management state changes do not affect the registration status
dev->reg_state, but the device state dev->state needs to be changed.
Suspending a device
When a device is suspended, its device driver handles the event, by calling, for
example, the pci_driver's suspend routine for PCI devices. Besides the driver-specific actions, a ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access