Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e2d435ea4084022ab88efa74214accb45b1f9e92
Commit:     e2d435ea4084022ab88efa74214accb45b1f9e92
Parent:     8f7b3d156d348b6766833cd4e272d0d19b501e64
Author:     Stuart Swales <[EMAIL PROTECTED]>
AuthorDate: Wed Jan 23 20:00:48 2008 +0000
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Wed Jan 23 17:07:33 2008 -0600

    [SCSI] initio: fix module hangs on loading
    
    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)
    
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/initio.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/initio.c b/drivers/scsi/initio.c
index 01bf018..a10a5c7 100644
--- a/drivers/scsi/initio.c
+++ b/drivers/scsi/initio.c
@@ -823,7 +823,7 @@ static void initio_append_busy_scb(struct initio_host * 
host, struct scsi_ctrl_b
 {
 
 #if DEBUG_QUEUE
-       printk("append busy SCB %o; ", scbp);
+       printk("append busy SCB %p; ", scbp);
 #endif
        if (scbp->tagmsg)
                host->act_tags[scbp->target]++;
@@ -2609,6 +2609,7 @@ static void initio_build_scb(struct initio_host * host, 
struct scsi_ctrl_blk * c
                cblk->bufptr = cpu_to_le32((u32)dma_addr);
                cmnd->SCp.dma_handle = dma_addr;
 
+               cblk->sglen = nseg;
 
                cblk->flags |= SCF_SG;  /* Turn on SG list flag       */
                total_len = 0;
@@ -2869,6 +2870,7 @@ static int initio_probe_one(struct pci_dev *pdev,
        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;
 
        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_dev *pdev,
 
        host->pci_dev = pdev;
 
+       host->semaph = 1;
+       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_dev *pdev,
        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)));
 
        host->jsstatus0 = 0;
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to