Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Wed, 19 Dec 2007 22:25:56 +0000 (14:25 -0800)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Wed, 19 Dec 2007 22:25:56 +0000 (14:25 -0800)
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6:
  [SCSI] initio: bugfix for accessors patch
  [SCSI] st: fix kernel BUG at include/linux/scatterlist.h:59!
  [SCSI] initio: fix conflict when loading driver
  [SCSI] sym53c8xx: fix "irq X: nobody cared" regression
  [SCSI] dpt_i2o: driver is only 32 bit so don't set 64 bit DMA mask
  [SCSI] sym53c8xx: fix free_irq() regression

drivers/scsi/dpt_i2o.c
drivers/scsi/initio.c
drivers/scsi/st.c
drivers/scsi/sym53c8xx_2/sym_glue.c
drivers/scsi/sym53c8xx_2/sym_hipd.c

index 70f48a1a6d588fe0dc11530fa7d3383bc5cc8e37..b31d1c95c9fbd4d1a16c04856e088a54411801d5 100644 (file)
@@ -906,8 +906,7 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev
        }
 
        pci_set_master(pDev);
-       if (pci_set_dma_mask(pDev, DMA_64BIT_MASK) &&
-           pci_set_dma_mask(pDev, DMA_32BIT_MASK))
+       if (pci_set_dma_mask(pDev, DMA_32BIT_MASK))
                return -EINVAL;
 
        base_addr0_phys = pci_resource_start(pDev,0);
index 4c4465d39a1dabfb21d2fb3f740b729c18086789..01bf0189367dc8ef3bf30ff1668bf8eac31c1c7f 100644 (file)
@@ -2616,6 +2616,7 @@ static void initio_build_scb(struct initio_host * host, struct scsi_ctrl_blk * c
                scsi_for_each_sg(cmnd, sglist, cblk->sglen, i) {
                        sg->data = cpu_to_le32((u32)sg_dma_address(sglist));
                        total_len += sg->len = cpu_to_le32((u32)sg_dma_len(sglist));
+                       ++sg;
                }
 
                cblk->buflen = (scsi_bufflen(cmnd) > total_len) ?
@@ -2867,6 +2868,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);
 
        if (!request_region(host->addr, 256, "i91u")) {
                printk(KERN_WARNING "initio: I/O port range 0x%x is busy.\n", host->addr);
index 98dfd6ea209c69cd42b54fcbad286ac83826d7c7..328c47c6aeb1928a720f901f43f2a25e01ebb52e 100644 (file)
@@ -3611,6 +3611,7 @@ static struct st_buffer *
 
        tb->dma = need_dma;
        tb->buffer_size = got;
+       sg_init_table(tb->sg, max_sg);
 
        return tb;
 }
index 0f74aba5b2378cc4be77412785842e6fb168b4dc..9e0908d1981a99f1fef86f3b6f4bf531e83366fa 100644 (file)
@@ -1243,7 +1243,7 @@ static void sym_free_resources(struct sym_hcb *np, struct pci_dev *pdev)
         *  Free O/S specific resources.
         */
        if (pdev->irq)
-               free_irq(pdev->irq, np);
+               free_irq(pdev->irq, np->s.host);
        if (np->s.ioaddr)
                pci_iounmap(pdev, np->s.ioaddr);
        if (np->s.ramaddr)
index 463f119f20e90c6ab46c6448be3ba4fa57c73f20..254bdaeb35ff69d970fffd76533e944fd60577b2 100644 (file)
@@ -2791,7 +2791,7 @@ irqreturn_t sym_interrupt(struct Scsi_Host *shost)
        istat = INB(np, nc_istat);
        if (istat & INTF) {
                OUTB(np, nc_istat, (istat & SIGP) | INTF | np->istat_sem);
-               istat = INB(np, nc_istat);              /* DUMMY READ */
+               istat |= INB(np, nc_istat);             /* DUMMY READ */
                if (DEBUG_FLAGS & DEBUG_TINY) printf ("F ");
                sym_wakeup_done(np);
        }