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

Reply via email to