Skip to content

Commit

Permalink
[ARM] ARM SCSI: Don't try to dma_map_sg too many scatterlist entries
Browse files Browse the repository at this point in the history
An off-by-one bug meant we were always trying to map one too many
scatterlist entries.  This was mostly harmless prior to the checks
going in to consistent_sync(), but now causes the kernel to BUG.

Also, powertec.c was missing an assignment to info->ec.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Russell King authored and Russell King committed Mar 4, 2007
1 parent 6b4df7e commit 23d046f
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 6 deletions.
4 changes: 2 additions & 2 deletions drivers/scsi/arm/cumana_2.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,10 +178,10 @@ cumanascsi_2_dma_setup(struct Scsi_Host *host, struct scsi_pointer *SCp,
dma_dir = DMA_MODE_READ,
alatch_dir = ALATCH_DMA_IN;

dma_map_sg(dev, info->sg, bufs + 1, map_dir);
dma_map_sg(dev, info->sg, bufs, map_dir);

disable_dma(dmach);
set_dma_sg(dmach, info->sg, bufs + 1);
set_dma_sg(dmach, info->sg, bufs);
writeb(alatch_dir, info->base + CUMANASCSI2_ALATCH);
set_dma_mode(dmach, dma_dir);
enable_dma(dmach);
Expand Down
4 changes: 2 additions & 2 deletions drivers/scsi/arm/eesox.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,10 @@ eesoxscsi_dma_setup(struct Scsi_Host *host, struct scsi_pointer *SCp,
map_dir = DMA_FROM_DEVICE,
dma_dir = DMA_MODE_READ;

dma_map_sg(dev, info->sg, bufs + 1, map_dir);
dma_map_sg(dev, info->sg, bufs, map_dir);

disable_dma(dmach);
set_dma_sg(dmach, info->sg, bufs + 1);
set_dma_sg(dmach, info->sg, bufs);
set_dma_mode(dmach, dma_dir);
enable_dma(dmach);
return fasdma_real_all;
Expand Down
5 changes: 3 additions & 2 deletions drivers/scsi/arm/powertec.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,10 +148,10 @@ powertecscsi_dma_setup(struct Scsi_Host *host, struct scsi_pointer *SCp,
map_dir = DMA_FROM_DEVICE,
dma_dir = DMA_MODE_READ;

dma_map_sg(dev, info->sg, bufs + 1, map_dir);
dma_map_sg(dev, info->sg, bufs, map_dir);

disable_dma(dmach);
set_dma_sg(dmach, info->sg, bufs + 1);
set_dma_sg(dmach, info->sg, bufs);
set_dma_mode(dmach, dma_dir);
enable_dma(dmach);
return fasdma_real_all;
Expand Down Expand Up @@ -342,6 +342,7 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
info->base = base;
powertecscsi_terminator_ctl(host, term[ec->slot_no]);

info->ec = ec;
info->info.scsi.io_base = base + POWERTEC_FAS216_OFFSET;
info->info.scsi.io_shift = POWERTEC_FAS216_SHIFT;
info->info.scsi.irq = ec->irq;
Expand Down

0 comments on commit 23d046f

Please sign in to comment.