Re: INITIO scsi driver fails to work properly
From: James Bottomley
Date: Fri Jan 11 2008 - 00:16:56 EST
On Fri, 2008-01-04 at 02:18 +0200, Filippos Papadopoulos wrote:
> First of all let me wish a happy new year.
> I come back from the vacations and i compiled the initio driver with
>
> #define DEBUG_INTERRUPT 1
> #define DEBUG_QUEUE 1
> #define DEBUG_STATE 1
> #define INT_DISC 1
>
> I used the sources from 2.6.24-rc6-git9 kernel. At kernel boot time the initio
> driver prints the following:
>
> " scsi: Initio INI-9X00U/UW SCSI device driver
> Find scb at c0c00000
> Append pend scb c0c00000;"
>
> After 3 seconds the whole system freezes there and i have to reboot.
>
>
>
> P.S here is the info from 'lspci -vv' running 2.6.16.13 kernel:
>
> "00:08.0 SCSI storage controller: Initio Corporation 360P (rev 02)
> Subsystem: Unknown device 9292:0202
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
> ParErr- Stepping- SERR- FastB2B-
> Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium
> >TAbort- <TAbort- <MAbort- >SERR- <PERR-
> Latency: 32, Cache Line Size 08
> Interrupt: pin A routed to IRQ 11
> Region 0: I/O ports at d000 [size=256]
This proves the BAR0 to be non zero, but I also take it from your report
that the
initio: I/O port range 0x0 is busy.
message is also gone?
> Region 1: Memory at ef000000 (32-bit, non-prefetchable) [size=4K]
> [virtual] Expansion ROM at 50000000 [disabled] [size=128K]
> "
I think there's still one remaining bug from the sg_list conversion,
namely that cblk->sglen is never set, but it is used to count the number
of elements in the sg array. Could you try this patch (on top of
everything else) and see if the problem is finally fixed?
Thanks,
James
---
diff --git a/drivers/scsi/initio.c b/drivers/scsi/initio.c
index 01bf018..d038459 100644
--- a/drivers/scsi/initio.c
+++ b/drivers/scsi/initio.c
@@ -2603,6 +2603,7 @@ static void initio_build_scb(struct initio_host * host, struct scsi_ctrl_blk * c
nseg = scsi_dma_map(cmnd);
BUG_ON(nseg < 0);
if (nseg) {
+ cblk->sglen = nseg;
dma_addr = dma_map_single(&host->pci_dev->dev, &cblk->sglist[0],
sizeof(struct sg_entry) * TOTAL_SG_ENTRY,
DMA_BIDIRECTIONAL);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/