Browse Source

Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6

* 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
Linus Torvalds 17 years ago
parent
commit
c7eeae734f

+ 1 - 2
drivers/scsi/dpt_i2o.c

@@ -906,8 +906,7 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev
 	}
 	}
 
 
 	pci_set_master(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;
 		return -EINVAL;
 
 
 	base_addr0_phys = pci_resource_start(pDev,0);
 	base_addr0_phys = pci_resource_start(pDev,0);

+ 2 - 0
drivers/scsi/initio.c

@@ -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) {
 		scsi_for_each_sg(cmnd, sglist, cblk->sglen, i) {
 			sg->data = cpu_to_le32((u32)sg_dma_address(sglist));
 			sg->data = cpu_to_le32((u32)sg_dma_address(sglist));
 			total_len += sg->len = cpu_to_le32((u32)sg_dma_len(sglist));
 			total_len += sg->len = cpu_to_le32((u32)sg_dma_len(sglist));
+			++sg;
 		}
 		}
 
 
 		cblk->buflen = (scsi_bufflen(cmnd) > total_len) ?
 		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;
 	host = (struct initio_host *)shost->hostdata;
 	memset(host, 0, sizeof(struct initio_host));
 	memset(host, 0, sizeof(struct initio_host));
+	host->addr = pci_resource_start(pdev, 0);
 
 
 	if (!request_region(host->addr, 256, "i91u")) {
 	if (!request_region(host->addr, 256, "i91u")) {
 		printk(KERN_WARNING "initio: I/O port range 0x%x is busy.\n", host->addr);
 		printk(KERN_WARNING "initio: I/O port range 0x%x is busy.\n", host->addr);

+ 1 - 0
drivers/scsi/st.c

@@ -3611,6 +3611,7 @@ static struct st_buffer *
 
 
 	tb->dma = need_dma;
 	tb->dma = need_dma;
 	tb->buffer_size = got;
 	tb->buffer_size = got;
+	sg_init_table(tb->sg, max_sg);
 
 
 	return tb;
 	return tb;
 }
 }

+ 1 - 1
drivers/scsi/sym53c8xx_2/sym_glue.c

@@ -1243,7 +1243,7 @@ static void sym_free_resources(struct sym_hcb *np, struct pci_dev *pdev)
 	 *  Free O/S specific resources.
 	 *  Free O/S specific resources.
 	 */
 	 */
 	if (pdev->irq)
 	if (pdev->irq)
-		free_irq(pdev->irq, np);
+		free_irq(pdev->irq, np->s.host);
 	if (np->s.ioaddr)
 	if (np->s.ioaddr)
 		pci_iounmap(pdev, np->s.ioaddr);
 		pci_iounmap(pdev, np->s.ioaddr);
 	if (np->s.ramaddr)
 	if (np->s.ramaddr)

+ 1 - 1
drivers/scsi/sym53c8xx_2/sym_hipd.c

@@ -2791,7 +2791,7 @@ irqreturn_t sym_interrupt(struct Scsi_Host *shost)
 	istat = INB(np, nc_istat);
 	istat = INB(np, nc_istat);
 	if (istat & INTF) {
 	if (istat & INTF) {
 		OUTB(np, nc_istat, (istat & SIGP) | INTF | np->istat_sem);
 		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 ");
 		if (DEBUG_FLAGS & DEBUG_TINY) printf ("F ");
 		sym_wakeup_done(np);
 		sym_wakeup_done(np);
 	}
 	}