Since some devices may not implement the MWI bit, we should check that the write did set it and return an error if it didn't.
Signed-off-by: Matthew Wilcox <[EMAIL PROTECTED]> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index a544997..3d041f4 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -900,13 +900,17 @@ #endif return rc; pci_read_config_word(dev, PCI_COMMAND, &cmd); - if (! (cmd & PCI_COMMAND_INVALIDATE)) { - pr_debug("PCI: Enabling Mem-Wr-Inval for device %s\n", pci_name(dev)); - cmd |= PCI_COMMAND_INVALIDATE; - pci_write_config_word(dev, PCI_COMMAND, cmd); - } - - return 0; + if (cmd & PCI_COMMAND_INVALIDATE) + return 0; + + pr_debug("PCI: Enabling Mem-Wr-Inval for device %s\n", pci_name(dev)); + cmd |= PCI_COMMAND_INVALIDATE; + pci_write_config_word(dev, PCI_COMMAND, cmd); + + /* read result from hardware (in case bit refused to enable) */ + pci_read_config_word(dev, PCI_COMMAND, &cmd); + + return (cmd & PCI_COMMAND_INVALIDATE) ? 0 : -EINVAL; } /** - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html