diff options
Diffstat (limited to 'drivers/scsi/ibmvscsi/ibmvscsi.c')
-rw-r--r-- | drivers/scsi/ibmvscsi/ibmvscsi.c | 30 |
1 files changed, 3 insertions, 27 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index dc1bcbe3b17..88bad0e81bd 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c | |||
@@ -70,6 +70,7 @@ | |||
70 | #include <linux/moduleparam.h> | 70 | #include <linux/moduleparam.h> |
71 | #include <linux/dma-mapping.h> | 71 | #include <linux/dma-mapping.h> |
72 | #include <linux/delay.h> | 72 | #include <linux/delay.h> |
73 | #include <linux/slab.h> | ||
73 | #include <linux/of.h> | 74 | #include <linux/of.h> |
74 | #include <linux/pm.h> | 75 | #include <linux/pm.h> |
75 | #include <asm/firmware.h> | 76 | #include <asm/firmware.h> |
@@ -322,16 +323,6 @@ static void set_srp_direction(struct scsi_cmnd *cmd, | |||
322 | srp_cmd->buf_fmt = fmt; | 323 | srp_cmd->buf_fmt = fmt; |
323 | } | 324 | } |
324 | 325 | ||
325 | static void unmap_sg_list(int num_entries, | ||
326 | struct device *dev, | ||
327 | struct srp_direct_buf *md) | ||
328 | { | ||
329 | int i; | ||
330 | |||
331 | for (i = 0; i < num_entries; ++i) | ||
332 | dma_unmap_single(dev, md[i].va, md[i].len, DMA_BIDIRECTIONAL); | ||
333 | } | ||
334 | |||
335 | /** | 326 | /** |
336 | * unmap_cmd_data: - Unmap data pointed in srp_cmd based on the format | 327 | * unmap_cmd_data: - Unmap data pointed in srp_cmd based on the format |
337 | * @cmd: srp_cmd whose additional_data member will be unmapped | 328 | * @cmd: srp_cmd whose additional_data member will be unmapped |
@@ -349,24 +340,9 @@ static void unmap_cmd_data(struct srp_cmd *cmd, | |||
349 | 340 | ||
350 | if (out_fmt == SRP_NO_DATA_DESC && in_fmt == SRP_NO_DATA_DESC) | 341 | if (out_fmt == SRP_NO_DATA_DESC && in_fmt == SRP_NO_DATA_DESC) |
351 | return; | 342 | return; |
352 | else if (out_fmt == SRP_DATA_DESC_DIRECT || | ||
353 | in_fmt == SRP_DATA_DESC_DIRECT) { | ||
354 | struct srp_direct_buf *data = | ||
355 | (struct srp_direct_buf *) cmd->add_data; | ||
356 | dma_unmap_single(dev, data->va, data->len, DMA_BIDIRECTIONAL); | ||
357 | } else { | ||
358 | struct srp_indirect_buf *indirect = | ||
359 | (struct srp_indirect_buf *) cmd->add_data; | ||
360 | int num_mapped = indirect->table_desc.len / | ||
361 | sizeof(struct srp_direct_buf); | ||
362 | 343 | ||
363 | if (num_mapped <= MAX_INDIRECT_BUFS) { | 344 | if (evt_struct->cmnd) |
364 | unmap_sg_list(num_mapped, dev, &indirect->desc_list[0]); | 345 | scsi_dma_unmap(evt_struct->cmnd); |
365 | return; | ||
366 | } | ||
367 | |||
368 | unmap_sg_list(num_mapped, dev, evt_struct->ext_list); | ||
369 | } | ||
370 | } | 346 | } |
371 | 347 | ||
372 | static int map_sg_list(struct scsi_cmnd *cmd, int nseg, | 348 | static int map_sg_list(struct scsi_cmnd *cmd, int nseg, |