initio module hangs on loading fix set
PATCH 1/1 initio module hangs on loading fix set
I've verified (on my Initio 9100 with a DAT drive) that the 2.6.24-rc8-git6 initio module still hangs on loading.
These fixes (other than the printk) are needed to get the module to load ok (and work correctly) with my adapter & tape drive.
a) printk cosmetic fix
b) cblk->sglen needs setting for later DMA I/O routines to use
c) host->bios_addr needs setting for debug output correctness
d) semaph & semaph_lock initialisation had got lost since 2.6.22
e) since 2.6.22 the bios data address was truncated to 16 bits (needs 20 when shifted left)
Stuart Swales
drivers/scsi/initio.c +3 -1
@@ -823,7 +823,7 @@ static void initio_append_busy_scb(struc {#if DEBUG_QUEUE -printk ("append busy SCB %o; " , scbp); +printk ("append busy SCB %p; " , scbp);/* SKS: not %o */ #endif if (scbp->tagmsg) host->act_tags[scbp->target]++;
@@ -2609,6 +2609,7 @@ static void initio_build_scb(struct init cblk->bufptr =cpu_to_le32 ((u32 )dma_addr); cmnd->SCp.dma_handle = dma_addr; + cblk->sglen = nseg;/* SKS: needs setting for DMA routine */ cblk->flags |=SCF_SG ;/* Turn on SG list flag */ total_len =0 ;
@@ -2869,6 +2870,7 @@ static int initio_probe_one(struct pci_d host = (struct initio_host *)shost->hostdata;memset (host,0 ,sizeof (struct initio_host )); host->addr =pci_resource_start (pdev,0 ); + host->bios_addr = bios_seg;/* SKS: required for debug output */ if (!request_region (host->addr,256 ,"i91u" )) { printk(KERN_WARNING "initio: I/O port range 0x%x is busy.\n",
host->addr);
@@ -2895,6 +2897,8 @@ static int initio_probe_one(struct pci_d
host->pci_dev = pdev;
+ host->semaph = 1; /* SKS */
+ spin_lock_init(&host->semaph_lock);
host->num_scbs = num_scb;
host->scb = scb;
host->next_pending = scb;
@@ -2911,7 +2915,7 @@ static int initio_probe_one(struct pci_d
host->last_avail = prev; spin_lock_init(&host->avail_lock);
- initio_init(host, phys_to_virt(bios_seg << 4));
+ initio_init(host, phys_to_virt(((u32) bios_seg << 4))); /* SKS: u16 would lose bits when shifted left */
host->jsstatus0 = 0;
James Bottomley
maintainerQuoted 8 lines · Stuart Swales
I've verified (on my Initio 9100 with a DAT drive) that the 2.6.24-rc8-git6 initio module still hangs on loading.
These fixes (other than the printk) are needed to get the module to load ok (and work correctly) with my adapter & tape drive.
a) printk cosmetic fix
Quoted 8 lines
b)
cblk->sglenneeds setting for later DMA I/O routines to usec)
host->bios_addrneeds setting for debug output correctnessd) semaph &
semaph_lockinitialisation had got lost since 2.6.22e) since 2.6.22 the bios data address was truncated to 16 bits (needs 20 when shifted left)
That's brilliant, thanks! (Linus has been complaining about the broken state of initio for a while, so this saves my bacon).
I made your patch actually apply (your mailer broke it in places) and stripped out the comments, which won't make sense to anyone who doesn't have the context of the actual patch to look at.
Thanks,
James