diff options
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/libata-core.c | 4 | ||||
-rw-r--r-- | drivers/scsi/libata-scsi.c | 7 | ||||
-rw-r--r-- | drivers/scsi/sata_mv.c | 3 | ||||
-rw-r--r-- | drivers/scsi/sata_promise.c | 12 | ||||
-rw-r--r-- | drivers/scsi/sata_sx4.c | 3 | ||||
-rw-r--r-- | drivers/scsi/scsi_lib.c | 9 | ||||
-rw-r--r-- | drivers/scsi/scsi_scan.c | 3 |
7 files changed, 25 insertions, 16 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 665ae79e1fd6..d0a0fdbd0fc4 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c | |||
@@ -2443,7 +2443,7 @@ static void ata_sg_clean(struct ata_queued_cmd *qc) | |||
2443 | struct scatterlist *psg = &qc->pad_sgent; | 2443 | struct scatterlist *psg = &qc->pad_sgent; |
2444 | void *addr = kmap_atomic(psg->page, KM_IRQ0); | 2444 | void *addr = kmap_atomic(psg->page, KM_IRQ0); |
2445 | memcpy(addr + psg->offset, pad_buf, qc->pad_len); | 2445 | memcpy(addr + psg->offset, pad_buf, qc->pad_len); |
2446 | kunmap_atomic(psg->page, KM_IRQ0); | 2446 | kunmap_atomic(addr, KM_IRQ0); |
2447 | } | 2447 | } |
2448 | } else { | 2448 | } else { |
2449 | if (sg_dma_len(&sg[0]) > 0) | 2449 | if (sg_dma_len(&sg[0]) > 0) |
@@ -2717,7 +2717,7 @@ static int ata_sg_setup(struct ata_queued_cmd *qc) | |||
2717 | if (qc->tf.flags & ATA_TFLAG_WRITE) { | 2717 | if (qc->tf.flags & ATA_TFLAG_WRITE) { |
2718 | void *addr = kmap_atomic(psg->page, KM_IRQ0); | 2718 | void *addr = kmap_atomic(psg->page, KM_IRQ0); |
2719 | memcpy(pad_buf, addr + psg->offset, qc->pad_len); | 2719 | memcpy(pad_buf, addr + psg->offset, qc->pad_len); |
2720 | kunmap_atomic(psg->page, KM_IRQ0); | 2720 | kunmap_atomic(addr, KM_IRQ0); |
2721 | } | 2721 | } |
2722 | 2722 | ||
2723 | sg_dma_address(psg) = ap->pad_dma + (qc->tag * ATA_DMA_PAD_SZ); | 2723 | sg_dma_address(psg) = ap->pad_dma + (qc->tag * ATA_DMA_PAD_SZ); |
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c index 379e87089764..72ddba98f8fb 100644 --- a/drivers/scsi/libata-scsi.c +++ b/drivers/scsi/libata-scsi.c | |||
@@ -2173,9 +2173,12 @@ ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev) | |||
2173 | if (unlikely(!ata_dev_present(dev))) | 2173 | if (unlikely(!ata_dev_present(dev))) |
2174 | return NULL; | 2174 | return NULL; |
2175 | 2175 | ||
2176 | if (!atapi_enabled) { | 2176 | if (!atapi_enabled || (ap->flags & ATA_FLAG_NO_ATAPI)) { |
2177 | if (unlikely(dev->class == ATA_DEV_ATAPI)) | 2177 | if (unlikely(dev->class == ATA_DEV_ATAPI)) { |
2178 | printk(KERN_WARNING "ata%u(%u): WARNING: ATAPI is %s, device ignored.\n", | ||
2179 | ap->id, dev->devno, atapi_enabled ? "not supported with this driver" : "disabled"); | ||
2178 | return NULL; | 2180 | return NULL; |
2181 | } | ||
2179 | } | 2182 | } |
2180 | 2183 | ||
2181 | return dev; | 2184 | return dev; |
diff --git a/drivers/scsi/sata_mv.c b/drivers/scsi/sata_mv.c index ab7432a5778e..9321cdf45680 100644 --- a/drivers/scsi/sata_mv.c +++ b/drivers/scsi/sata_mv.c | |||
@@ -86,7 +86,8 @@ enum { | |||
86 | MV_FLAG_DUAL_HC = (1 << 30), /* two SATA Host Controllers */ | 86 | MV_FLAG_DUAL_HC = (1 << 30), /* two SATA Host Controllers */ |
87 | MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ | 87 | MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ |
88 | MV_COMMON_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 88 | MV_COMMON_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
89 | ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO), | 89 | ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO | |
90 | ATA_FLAG_NO_ATAPI), | ||
90 | MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE, | 91 | MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE, |
91 | 92 | ||
92 | CRQB_FLAG_READ = (1 << 0), | 93 | CRQB_FLAG_READ = (1 << 0), |
diff --git a/drivers/scsi/sata_promise.c b/drivers/scsi/sata_promise.c index 8a8e3e3ef0ed..2691625f9bce 100644 --- a/drivers/scsi/sata_promise.c +++ b/drivers/scsi/sata_promise.c | |||
@@ -70,6 +70,9 @@ enum { | |||
70 | PDC_HAS_PATA = (1 << 1), /* PDC20375 has PATA */ | 70 | PDC_HAS_PATA = (1 << 1), /* PDC20375 has PATA */ |
71 | 71 | ||
72 | PDC_RESET = (1 << 11), /* HDMA reset */ | 72 | PDC_RESET = (1 << 11), /* HDMA reset */ |
73 | |||
74 | PDC_COMMON_FLAGS = ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST | | ||
75 | ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI, | ||
73 | }; | 76 | }; |
74 | 77 | ||
75 | 78 | ||
@@ -162,8 +165,7 @@ static struct ata_port_info pdc_port_info[] = { | |||
162 | /* board_2037x */ | 165 | /* board_2037x */ |
163 | { | 166 | { |
164 | .sht = &pdc_ata_sht, | 167 | .sht = &pdc_ata_sht, |
165 | .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 168 | .host_flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, |
166 | ATA_FLAG_SRST | ATA_FLAG_MMIO, | ||
167 | .pio_mask = 0x1f, /* pio0-4 */ | 169 | .pio_mask = 0x1f, /* pio0-4 */ |
168 | .mwdma_mask = 0x07, /* mwdma0-2 */ | 170 | .mwdma_mask = 0x07, /* mwdma0-2 */ |
169 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ | 171 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ |
@@ -173,8 +175,7 @@ static struct ata_port_info pdc_port_info[] = { | |||
173 | /* board_20319 */ | 175 | /* board_20319 */ |
174 | { | 176 | { |
175 | .sht = &pdc_ata_sht, | 177 | .sht = &pdc_ata_sht, |
176 | .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 178 | .host_flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, |
177 | ATA_FLAG_SRST | ATA_FLAG_MMIO, | ||
178 | .pio_mask = 0x1f, /* pio0-4 */ | 179 | .pio_mask = 0x1f, /* pio0-4 */ |
179 | .mwdma_mask = 0x07, /* mwdma0-2 */ | 180 | .mwdma_mask = 0x07, /* mwdma0-2 */ |
180 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ | 181 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ |
@@ -184,8 +185,7 @@ static struct ata_port_info pdc_port_info[] = { | |||
184 | /* board_20619 */ | 185 | /* board_20619 */ |
185 | { | 186 | { |
186 | .sht = &pdc_ata_sht, | 187 | .sht = &pdc_ata_sht, |
187 | .host_flags = ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST | | 188 | .host_flags = PDC_COMMON_FLAGS | ATA_FLAG_SLAVE_POSS, |
188 | ATA_FLAG_MMIO | ATA_FLAG_SLAVE_POSS, | ||
189 | .pio_mask = 0x1f, /* pio0-4 */ | 189 | .pio_mask = 0x1f, /* pio0-4 */ |
190 | .mwdma_mask = 0x07, /* mwdma0-2 */ | 190 | .mwdma_mask = 0x07, /* mwdma0-2 */ |
191 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ | 191 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ |
diff --git a/drivers/scsi/sata_sx4.c b/drivers/scsi/sata_sx4.c index dcc3ad9a9d6e..ac7b0d819ebc 100644 --- a/drivers/scsi/sata_sx4.c +++ b/drivers/scsi/sata_sx4.c | |||
@@ -220,7 +220,8 @@ static struct ata_port_info pdc_port_info[] = { | |||
220 | { | 220 | { |
221 | .sht = &pdc_sata_sht, | 221 | .sht = &pdc_sata_sht, |
222 | .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 222 | .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
223 | ATA_FLAG_SRST | ATA_FLAG_MMIO, | 223 | ATA_FLAG_SRST | ATA_FLAG_MMIO | |
224 | ATA_FLAG_NO_ATAPI, | ||
224 | .pio_mask = 0x1f, /* pio0-4 */ | 225 | .pio_mask = 0x1f, /* pio0-4 */ |
225 | .mwdma_mask = 0x07, /* mwdma0-2 */ | 226 | .mwdma_mask = 0x07, /* mwdma0-2 */ |
226 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ | 227 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 4afef5cdcb17..ce9d73a292e2 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -542,10 +542,17 @@ static void scsi_requeue_command(struct request_queue *q, struct scsi_cmnd *cmd) | |||
542 | 542 | ||
543 | void scsi_next_command(struct scsi_cmnd *cmd) | 543 | void scsi_next_command(struct scsi_cmnd *cmd) |
544 | { | 544 | { |
545 | struct request_queue *q = cmd->device->request_queue; | 545 | struct scsi_device *sdev = cmd->device; |
546 | struct request_queue *q = sdev->request_queue; | ||
547 | |||
548 | /* need to hold a reference on the device before we let go of the cmd */ | ||
549 | get_device(&sdev->sdev_gendev); | ||
546 | 550 | ||
547 | scsi_put_command(cmd); | 551 | scsi_put_command(cmd); |
548 | scsi_run_queue(q); | 552 | scsi_run_queue(q); |
553 | |||
554 | /* ok to remove device now */ | ||
555 | put_device(&sdev->sdev_gendev); | ||
549 | } | 556 | } |
550 | 557 | ||
551 | void scsi_run_host_queues(struct Scsi_Host *shost) | 558 | void scsi_run_host_queues(struct Scsi_Host *shost) |
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 374853df9cca..94e5167f260d 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c | |||
@@ -266,8 +266,6 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, | |||
266 | /* | 266 | /* |
267 | * if LLDD reports slave not present, don't clutter | 267 | * if LLDD reports slave not present, don't clutter |
268 | * console with alloc failure messages | 268 | * console with alloc failure messages |
269 | |||
270 | |||
271 | */ | 269 | */ |
272 | if (ret == -ENXIO) | 270 | if (ret == -ENXIO) |
273 | display_failure_msg = 0; | 271 | display_failure_msg = 0; |
@@ -279,7 +277,6 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, | |||
279 | 277 | ||
280 | out_device_destroy: | 278 | out_device_destroy: |
281 | transport_destroy_device(&sdev->sdev_gendev); | 279 | transport_destroy_device(&sdev->sdev_gendev); |
282 | scsi_free_queue(sdev->request_queue); | ||
283 | put_device(&sdev->sdev_gendev); | 280 | put_device(&sdev->sdev_gendev); |
284 | out: | 281 | out: |
285 | if (display_failure_msg) | 282 | if (display_failure_msg) |