Re: Re: pci_set_power_state reasserting SOLVED
Hello,
I have the same problem with KDE and knemo running. Problem will go away as
soon as knemo is closed, but I want to keep it open and monitoring the
network card.
It also seems to be a problem special to the "3Com Corporation 3c905 100BaseTX
[Boomerang]" card or its driver (which does not have any power-management
capabilities at all) as I have the same card as in this post:
https://bugzilla.novell.com/show_bug.cgi?id=227391. But the patch there did
not help me - so I prepared my own against kernel version 2.6.18. It should
now check the card capabilities before any other actions or checks:
--- a/drivers/pci/pci.c 2006-09-20 05:42:06.000000000 +0200
+++ b/drivers/pci/pci.c 2007-02-11 09:54:00.000000000 +0100
@@ -303,17 +303,6 @@
if (state > PCI_D3hot)
state = PCI_D3hot;
- /* Validate current state:
- * Can enter D0 from any state, but if we can only go deeper
- * to sleep if we're already in a low power state
- */
- if (state != PCI_D0 && dev->current_state > state) {
- printk(KERN_ERR "%s(): %s: state=%d, current state=%d\n",
- __FUNCTION__, pci_name(dev), state, dev->current_state);
- return -EINVAL;
- } else if (dev->current_state == state)
- return 0; /* we're already there */
-
/*
* If the device or the parent bridge can't support PCI PM, ignore
* the request if we're doing anything besides putting it into D0
@@ -337,6 +326,17 @@
return -EIO;
}
+ /* Validate current state:
+ * Can enter D0 from any state, but if we can only go deeper
+ * to sleep if we're already in a low power state
+ */
+ if (state != PCI_D0 && dev->current_state > state) {
+ printk(KERN_ERR "%s(): %s: state=%d, current state=%d\n",
+ __FUNCTION__, pci_name(dev), state, dev->current_state);
+ return -EINVAL;
+ } else if (dev->current_state == state)
+ return 0; /* we're already there */
+
/* check if this device supports the desired state */
if (state == PCI_D1 && !(pmc & PCI_PM_CAP_D1))
return -EIO;
This did help me, and I hope it will help in similiar cases too.
Regards,
T. Rupf
Reply to: