X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fxen%2Fpciback%2Fconf_space_header.c;h=a7c07a90593bd6ab91fcac74fa68b090ddc40b6d;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=61089c6a50d75013a061c52f97df9d4bfda55568;hpb=76828883507a47dae78837ab5dec5a5b4513c667;p=linux-2.6.git diff --git a/drivers/xen/pciback/conf_space_header.c b/drivers/xen/pciback/conf_space_header.c index 61089c6a5..a7c07a905 100644 --- a/drivers/xen/pciback/conf_space_header.c +++ b/drivers/xen/pciback/conf_space_header.c @@ -20,12 +20,13 @@ struct pci_bar_info { static int command_write(struct pci_dev *dev, int offset, u16 value, void *data) { - if (!dev->is_enabled && is_enable_cmd(value)) { + if (!atomic_read(&dev->enable_cnt) && is_enable_cmd(value)) { if (unlikely(verbose_request)) printk(KERN_DEBUG "pciback: %s: enable\n", pci_name(dev)); - pci_enable_device(dev); - } else if (dev->is_enabled && !is_enable_cmd(value)) { + if (pci_enable_device(dev)) + return -ENODEV; + } else if (atomic_read(&dev->enable_cnt) && !is_enable_cmd(value)) { if (unlikely(verbose_request)) printk(KERN_DEBUG "pciback: %s: disable\n", pci_name(dev)); @@ -44,7 +45,8 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data) printk(KERN_DEBUG "pciback: %s: enable memory-write-invalidate\n", pci_name(dev)); - pci_set_mwi(dev); + if (pci_set_mwi(dev)) + return -EINVAL; } return pci_write_config_word(dev, offset, value);