mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 10:19:47 +00:00
[SCSI] 3w-9xxx: use sg buffer copy helper functions
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Cc: Adam Radford <linuxraid@amcc.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
e943752ecf
commit
035f5e0651
1 changed files with 9 additions and 12 deletions
|
@ -1838,12 +1838,11 @@ static int twa_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id,
|
|||
if (scsi_sg_count(srb)) {
|
||||
if ((scsi_sg_count(srb) == 1) &&
|
||||
(scsi_bufflen(srb) < TW_MIN_SGL_LENGTH)) {
|
||||
if (srb->sc_data_direction == DMA_TO_DEVICE || srb->sc_data_direction == DMA_BIDIRECTIONAL) {
|
||||
struct scatterlist *sg = scsi_sglist(srb);
|
||||
char *buf = kmap_atomic(sg_page(sg), KM_IRQ0) + sg->offset;
|
||||
memcpy(tw_dev->generic_buffer_virt[request_id], buf, sg->length);
|
||||
kunmap_atomic(buf - sg->offset, KM_IRQ0);
|
||||
}
|
||||
if (srb->sc_data_direction == DMA_TO_DEVICE ||
|
||||
srb->sc_data_direction == DMA_BIDIRECTIONAL)
|
||||
scsi_sg_copy_to_buffer(srb,
|
||||
tw_dev->generic_buffer_virt[request_id],
|
||||
TW_SECTOR_SIZE);
|
||||
command_packet->sg_list[0].address = TW_CPU_TO_SGL(tw_dev->generic_buffer_phys[request_id]);
|
||||
command_packet->sg_list[0].length = cpu_to_le32(TW_MIN_SGL_LENGTH);
|
||||
} else {
|
||||
|
@ -1915,13 +1914,11 @@ static void twa_scsiop_execute_scsi_complete(TW_Device_Extension *tw_dev, int re
|
|||
(cmd->sc_data_direction == DMA_FROM_DEVICE ||
|
||||
cmd->sc_data_direction == DMA_BIDIRECTIONAL)) {
|
||||
if (scsi_sg_count(cmd) == 1) {
|
||||
struct scatterlist *sg = scsi_sglist(tw_dev->srb[request_id]);
|
||||
char *buf;
|
||||
unsigned long flags = 0;
|
||||
unsigned long flags;
|
||||
void *buf = tw_dev->generic_buffer_virt[request_id];
|
||||
|
||||
local_irq_save(flags);
|
||||
buf = kmap_atomic(sg_page(sg), KM_IRQ0) + sg->offset;
|
||||
memcpy(buf, tw_dev->generic_buffer_virt[request_id], sg->length);
|
||||
kunmap_atomic(buf - sg->offset, KM_IRQ0);
|
||||
scsi_sg_copy_from_buffer(cmd, buf, TW_SECTOR_SIZE);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue