diff --git a/drivers/xen/pciback/pciback_ops.c b/drivers/xen/pciback/pciback_ops.c index 2b77b31..62267e3 100644 --- a/drivers/xen/pciback/pciback_ops.c +++ b/drivers/xen/pciback/pciback_ops.c @@ -56,11 +56,20 @@ void pciback_reload_config_space(struct pci_dev *dev) struct pciback_dev_data *dev_data = pci_get_drvdata(dev); u32 *ptr = (u32*)dev_data->cfg_space; int i, val, count = dev->cfg_size/sizeof(u32); + int limit = 0; for (i = 0; i < count; i += sizeof(u32), ptr++) { pci_read_config_dword(dev, i, &val); - if (val != *ptr) + while (limit < 1000 && val != *ptr) + { pci_write_config_dword(dev, i, *ptr); + pci_read_config_dword(dev, i, &val); + mdelay(1); + limit++; + } + if (limit == 1000) + printk(KERN_ERR "pciback: Error reloading config space after flr dev:%x offset:%x\n", + dev->devfn, i); } }