Hi,
On Thursday 25 October 2007, Jeff Garzik wrote:
> Andrew wrote:
> > Hi,
> >
> > I've noticed a thread reporting that SWNCQ can't be disabled
> > on the sata_nv.
> >
> > Gerhard Dirschl
> > * BUG: sata_nv swncq cannot be disabled
> >
> > and another with a patch switching MCP61 to GENERIC instead
> > of SWNCQ
> >
> > Kuan Luo
> > * [PATCH] ata: sata_nv MCP61 using GENERIC instead of SWNCQ
> >
> >
> > I would like to to report that the MCP51 on my Asus A8NVM CSM
> > mainboard is dead due to timeouts with SWNCQ. Reverting sata_nv.c
> > to the version prior to git commit
> > f140f0f12fc8dc7264d2f97cbe663564e7d24f6d works around the problem.
> >
> > My drives are all Seagate drives, ST3320620AS, ST3500630AS,
> > ST3300831AS.
>
>
> Really? That's a showstopper bug, as swncq is supposed to be disabled
> by default.
>From the quick look:
static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
...
ppi[0] = &nv_port_info[type];
...
if (type == ADMA) {
rc = nv_adma_host_init(host);
if (rc)
return rc;
} else if (type == SWNCQ && swncq_enabled) {
--> this is the only place when swncq_enabled is read
dev_printk(KERN_NOTICE, &pdev->dev, "Using SWNCQ mode\n");
nv_swncq_host_init(host);
--> nw_swncq_host_init() controls only _hardware_ side of SWNCQ enable
}
pci_set_master(pdev);
return ata_host_activate(host, pdev->irq, ppi[0]->irq_handler,
IRQF_SHARED, ppi[0]->sht);
--> since ppi[0] _always_ points nv_port_info[SWNCQ], it could happen
that if SWNCQ has already been enabled by BIOS/firmware swncq_enabled
setting will be ignored
...
If this is the case the obvious fix will be to s/SWNCQ/GENERIC/ in
nv_pci_tbl[] and assign ppi[0] to nv_port_info[SWNCQ] in nv_init_one()
only if (type == GENERIC && swncq_enabled).
Thanks,
Bart
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html