Re: SATA ahci Bug in 2.6.19.x

From: Tejun Heo
Date: Sat Feb 24 2007 - 01:25:44 EST


Manuel Metz wrote:
> Tejun Heo wrote:
>> Does it work if you give 'irqpoll' kernel parameter?
>>
>
> Yes this works with "irqpoll". But as you can see in the attached dmesg
> output, now I get a bunch of APIC errors ... ?

Manuel, Stefan, please try the attached patch over 2.6.20 and report the
result.

--
tejun
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 48616c6..882b205 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -209,6 +209,10 @@ struct ahci_port_priv {
unsigned int ncq_saw_dmas:1;
};

+static int msi;
+module_param(msi, int, 0444);
+MODULE_PARM_DESC(msi, "Enable use of PCI MSI (0=off, 1=on)");
+
static u32 ahci_scr_read (struct ata_port *ap, unsigned int sc_reg);
static void ahci_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent);
@@ -1706,11 +1710,13 @@ static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
goto err_out;
}

- if (pci_enable_msi(pdev) == 0)
- have_msi = 1;
- else {
- pci_intx(pdev, 1);
- have_msi = 0;
+ if (msi) {
+ if (pci_enable_msi(pdev) == 0)
+ have_msi = 1;
+ else {
+ pci_intx(pdev, 1);
+ have_msi = 0;
+ }
}

probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL);