On Sun, Jul 08, 2007 at 11:10:12AM +0100, Keir Fraser wrote:
> This was tracked down by Alex Williamson some time ago. There is code in
> drivers/xen/pciback/conf_space_capability_pm.c:pm_ctrl_write() to restore
> bars after a D3->D0 transition. I guess either your kernel does not have
> that fix, or the fix needs to be extended slightly to cover whatever case
> you are seeing.
Would you be happy with patch like this?
---
/root/xen-3.1.0-src/linux-2.6-xen-sparse/drivers/xen/pciback/conf_space_header.c
2007-05-18 16:45:21.000000000 +0200
+++ conf_space_header.c 2007-07-10 01:05:57.165749185 +0200
@@ -75,8 +75,15 @@
*/
if (value == ~PCI_ROM_ADDRESS_ENABLE)
bar->which = 1;
- else
+ else {
+ u32 tmpval;
+ pci_read_config_dword(dev, offset, &tmpval);
+ if(tmpval != bar->val && value == bar->val) {
+ /* We are trying to restore bar value. This should be
allowed. */
+ pci_write_config_dword(dev, offset, bar->val);
+ }
bar->which = 0;
+ }
/* Do we need to support enabling/disabling the rom address here? */
@@ -102,8 +109,15 @@
*/
if (value == ~0)
bar->which = 1;
- else
+ else {
+ u32 tmpval;
+ pci_read_config_dword(dev, offset, &tmpval);
+ if(tmpval != bar->val && value == bar->val) {
+ /* We are trying to restore bar value. This should be
allowed. */
+ pci_write_config_dword(dev, offset, bar->val);
+ }
bar->which = 0;
+ }
return 0;
}
--
Lukáš Hejtmánek
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|