diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-01-23 21:05:28 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-01-23 21:05:28 -0500 |
| commit | eab99d9b97d136ddfd66af66e0536a58195b3040 (patch) | |
| tree | 92d1151553c0a929ce8ed4eac1cffdeb778ff5bd | |
| parent | 53256f59116b541f087eb9423c1578e09a1b4b2f (diff) | |
| parent | e2d435ea4084022ab88efa74214accb45b1f9e92 (diff) | |
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: fix module hangs on loading
| -rw-r--r-- | 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 01bf0189367d..a10a5c74b48d 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 | |||
| 823 | { | 823 | { |
| 824 | 824 | ||
| 825 | #if DEBUG_QUEUE | 825 | #if DEBUG_QUEUE |
| 826 | printk("append busy SCB %o; ", scbp); | 826 | printk("append busy SCB %p; ", scbp); |
| 827 | #endif | 827 | #endif |
| 828 | if (scbp->tagmsg) | 828 | if (scbp->tagmsg) |
| 829 | host->act_tags[scbp->target]++; | 829 | host->act_tags[scbp->target]++; |
| @@ -2609,6 +2609,7 @@ static void initio_build_scb(struct initio_host * host, struct scsi_ctrl_blk * c | |||
| 2609 | cblk->bufptr = cpu_to_le32((u32)dma_addr); | 2609 | cblk->bufptr = cpu_to_le32((u32)dma_addr); |
| 2610 | cmnd->SCp.dma_handle = dma_addr; | 2610 | cmnd->SCp.dma_handle = dma_addr; |
| 2611 | 2611 | ||
| 2612 | cblk->sglen = nseg; | ||
| 2612 | 2613 | ||
| 2613 | cblk->flags |= SCF_SG; /* Turn on SG list flag */ | 2614 | cblk->flags |= SCF_SG; /* Turn on SG list flag */ |
| 2614 | total_len = 0; | 2615 | total_len = 0; |
| @@ -2869,6 +2870,7 @@ static int initio_probe_one(struct pci_dev *pdev, | |||
| 2869 | host = (struct initio_host *)shost->hostdata; | 2870 | host = (struct initio_host *)shost->hostdata; |
| 2870 | memset(host, 0, sizeof(struct initio_host)); | 2871 | memset(host, 0, sizeof(struct initio_host)); |
| 2871 | host->addr = pci_resource_start(pdev, 0); | 2872 | host->addr = pci_resource_start(pdev, 0); |
| 2873 | host->bios_addr = bios_seg; | ||
| 2872 | 2874 | ||
| 2873 | if (!request_region(host->addr, 256, "i91u")) { | 2875 | if (!request_region(host->addr, 256, "i91u")) { |
| 2874 | printk(KERN_WARNING "initio: I/O port range 0x%x is busy.\n", host->addr); | 2876 | 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, | |||
| 2895 | 2897 | ||
| 2896 | host->pci_dev = pdev; | 2898 | host->pci_dev = pdev; |
| 2897 | 2899 | ||
| 2900 | host->semaph = 1; | ||
| 2901 | spin_lock_init(&host->semaph_lock); | ||
| 2898 | host->num_scbs = num_scb; | 2902 | host->num_scbs = num_scb; |
| 2899 | host->scb = scb; | 2903 | host->scb = scb; |
| 2900 | host->next_pending = scb; | 2904 | host->next_pending = scb; |
| @@ -2911,7 +2915,7 @@ static int initio_probe_one(struct pci_dev *pdev, | |||
| 2911 | host->last_avail = prev; | 2915 | host->last_avail = prev; |
| 2912 | spin_lock_init(&host->avail_lock); | 2916 | spin_lock_init(&host->avail_lock); |
| 2913 | 2917 | ||
| 2914 | initio_init(host, phys_to_virt(bios_seg << 4)); | 2918 | initio_init(host, phys_to_virt(((u32)bios_seg << 4))); |
| 2915 | 2919 | ||
| 2916 | host->jsstatus0 = 0; | 2920 | host->jsstatus0 = 0; |
| 2917 | 2921 | ||
