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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

--- linux-2.6.21.1/drivers/net/3c59x.c.orig	2007-04-27 14:18:23.000000000 +0200
+++ linux-2.6.21.1/drivers/net/3c59x.c	2007-05-05 00:00:41.000000000 +0200
@@ -2903,7 +2903,7 @@
 	unsigned long flags;
 	int state = 0;
 
-	if(VORTEX_PCI(vp))
+	if(VORTEX_PCI(vp) && pci_find_capability(VORTEX_PCI(vp), PCI_CAP_ID_PM)) 
 		state = VORTEX_PCI(vp)->current_state;
 
 	/* The kernel core really should have pci_get_power_state() */

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux