DORMANTno replies

[PATCH] 3Com PCI 3c905 causes annoying pci_set_power_state() messages

From: Bjørn Mork <bjorn@mork.no>
Date: 2007-05-07 07:44:04

[previously posted to linux-net@vger.kernel.org, but resent here after a
helpful hint that this is the proper list for such messages.  Thanks]

I don't know if this is the correct place for 3c59x bugs.  Couldn't find
a maintainer entry for it.  Please redirect as appropriate.

pci_set_power_state() is a bit weird, causing a failure if a device
doesn't support PM and the driver tries to

 1) save it's power_state, 
 2) wake up and do something, and 
 3) then reset to the saved state.

The 3c59x driver does this in it's ioctl function.


pci_set_power_state() will never set current_state for such devices,
causing them to remain in PCI_UNKNOWN (5) forever.  But if you try to
set the state to PCI_UNKNOWN, bounding will kick in, limiting the state
to PCI_D3hot (3).  Then pci_set_power_state() will complain because 
PCI_D3hot < current_state, printing useless messages like this:

 pci_set_power_state(): 0000:00:09.0: state=3, current state=5
 pci_set_power_state(): 0000:00:09.0: state=3, current state=5

and returning -EINVAL.

I believe this is wrong because pci_set_power_state() is supposed to
return -EIO if device does not support PCI PM.

But the drivers should probably also take care, not to call 
pci_set_power_state() requesting PCI_UNKNOWN as the new state.
The attached patch against 2.6.21.1 fixes this for 3c905.


Bjørn

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help