]> git.karo-electronics.de Git - linux-beck.git/commitdiff
[SCSI] megaraid_sas: Fix probe_one to clear MSI-X flags in kdump
authoradam radford <aradford@gmail.com>
Fri, 25 Feb 2011 04:56:28 +0000 (20:56 -0800)
committerJames Bottomley <James.Bottomley@suse.de>
Mon, 28 Feb 2011 17:47:48 +0000 (11:47 -0600)
The following patch for megaraid_sas fixes megasas_probe_one() to
clear MSI-X flags in kdump when the 'reset_devices' kernel parameter
is passed in.

Signed-off-by: Adam Radford <aradford@gmail.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/megaraid/megaraid_sas.h
drivers/scsi/megaraid/megaraid_sas_base.c

index 1b5e375732c01c7d97486e9e47f108a0982fcf29..e00ee4afdbc765a79906c329f4473d7cf846745e 100644 (file)
@@ -1477,4 +1477,7 @@ struct megasas_mgmt_info {
        int max_index;
 };
 
+#define msi_control_reg(base) (base + PCI_MSI_FLAGS)
+#define PCI_MSIX_FLAGS_ENABLE (1 << 15)
+
 #endif                         /*LSI_MEGARAID_SAS_H */
index 050ec1694e688133a128fe410b8e0e13d96c9349..a521e1afd7387729e363485197c92bb77a3e4ce3 100644 (file)
@@ -3901,9 +3901,26 @@ fail_set_dma_mask:
 static int __devinit
 megasas_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 {
-       int rval;
+       int rval, pos;
        struct Scsi_Host *host;
        struct megasas_instance *instance;
+       u16 control = 0;
+
+       /* Reset MSI-X in the kdump kernel */
+       if (reset_devices) {
+               pos = pci_find_capability(pdev, PCI_CAP_ID_MSIX);
+               if (pos) {
+                       pci_read_config_word(pdev, msi_control_reg(pos),
+                                            &control);
+                       if (control & PCI_MSIX_FLAGS_ENABLE) {
+                               dev_info(&pdev->dev, "resetting MSI-X\n");
+                               pci_write_config_word(pdev,
+                                                     msi_control_reg(pos),
+                                                     control &
+                                                     ~PCI_MSIX_FLAGS_ENABLE);
+                       }
+               }
+       }
 
        /*
         * Announce PCI information