diff options
| -rw-r--r-- | drivers/infiniband/ulp/iser/iscsi_iser.h | 4 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/iser/iser_initiator.c | 12 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/iser/iser_memory.c | 9 |
3 files changed, 17 insertions, 8 deletions
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.h b/drivers/infiniband/ulp/iser/iscsi_iser.h index 5ce26817e7e1..b47aea1094b2 100644 --- a/drivers/infiniband/ulp/iser/iscsi_iser.h +++ b/drivers/infiniband/ulp/iser/iscsi_iser.h | |||
| @@ -654,7 +654,9 @@ int iser_dma_map_task_data(struct iscsi_iser_task *iser_task, | |||
| 654 | enum dma_data_direction dma_dir); | 654 | enum dma_data_direction dma_dir); |
| 655 | 655 | ||
| 656 | void iser_dma_unmap_task_data(struct iscsi_iser_task *iser_task, | 656 | void iser_dma_unmap_task_data(struct iscsi_iser_task *iser_task, |
| 657 | struct iser_data_buf *data); | 657 | struct iser_data_buf *data, |
| 658 | enum dma_data_direction dir); | ||
| 659 | |||
| 658 | int iser_initialize_task_headers(struct iscsi_task *task, | 660 | int iser_initialize_task_headers(struct iscsi_task *task, |
| 659 | struct iser_tx_desc *tx_desc); | 661 | struct iser_tx_desc *tx_desc); |
| 660 | int iser_alloc_rx_descriptors(struct iser_conn *iser_conn, | 662 | int iser_alloc_rx_descriptors(struct iser_conn *iser_conn, |
diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c index 3821633f1065..bdf2b22e336b 100644 --- a/drivers/infiniband/ulp/iser/iser_initiator.c +++ b/drivers/infiniband/ulp/iser/iser_initiator.c | |||
| @@ -714,19 +714,23 @@ void iser_task_rdma_finalize(struct iscsi_iser_task *iser_task) | |||
| 714 | device->iser_unreg_rdma_mem(iser_task, ISER_DIR_IN); | 714 | device->iser_unreg_rdma_mem(iser_task, ISER_DIR_IN); |
| 715 | if (is_rdma_data_aligned) | 715 | if (is_rdma_data_aligned) |
| 716 | iser_dma_unmap_task_data(iser_task, | 716 | iser_dma_unmap_task_data(iser_task, |
| 717 | &iser_task->data[ISER_DIR_IN]); | 717 | &iser_task->data[ISER_DIR_IN], |
| 718 | DMA_FROM_DEVICE); | ||
| 718 | if (prot_count && is_rdma_prot_aligned) | 719 | if (prot_count && is_rdma_prot_aligned) |
| 719 | iser_dma_unmap_task_data(iser_task, | 720 | iser_dma_unmap_task_data(iser_task, |
| 720 | &iser_task->prot[ISER_DIR_IN]); | 721 | &iser_task->prot[ISER_DIR_IN], |
| 722 | DMA_FROM_DEVICE); | ||
| 721 | } | 723 | } |
| 722 | 724 | ||
| 723 | if (iser_task->dir[ISER_DIR_OUT]) { | 725 | if (iser_task->dir[ISER_DIR_OUT]) { |
| 724 | device->iser_unreg_rdma_mem(iser_task, ISER_DIR_OUT); | 726 | device->iser_unreg_rdma_mem(iser_task, ISER_DIR_OUT); |
| 725 | if (is_rdma_data_aligned) | 727 | if (is_rdma_data_aligned) |
| 726 | iser_dma_unmap_task_data(iser_task, | 728 | iser_dma_unmap_task_data(iser_task, |
| 727 | &iser_task->data[ISER_DIR_OUT]); | 729 | &iser_task->data[ISER_DIR_OUT], |
| 730 | DMA_TO_DEVICE); | ||
| 728 | if (prot_count && is_rdma_prot_aligned) | 731 | if (prot_count && is_rdma_prot_aligned) |
| 729 | iser_dma_unmap_task_data(iser_task, | 732 | iser_dma_unmap_task_data(iser_task, |
| 730 | &iser_task->prot[ISER_DIR_OUT]); | 733 | &iser_task->prot[ISER_DIR_OUT], |
| 734 | DMA_TO_DEVICE); | ||
| 731 | } | 735 | } |
| 732 | } | 736 | } |
diff --git a/drivers/infiniband/ulp/iser/iser_memory.c b/drivers/infiniband/ulp/iser/iser_memory.c index abce9339333f..341040bf0984 100644 --- a/drivers/infiniband/ulp/iser/iser_memory.c +++ b/drivers/infiniband/ulp/iser/iser_memory.c | |||
| @@ -332,12 +332,13 @@ int iser_dma_map_task_data(struct iscsi_iser_task *iser_task, | |||
| 332 | } | 332 | } |
| 333 | 333 | ||
| 334 | void iser_dma_unmap_task_data(struct iscsi_iser_task *iser_task, | 334 | void iser_dma_unmap_task_data(struct iscsi_iser_task *iser_task, |
| 335 | struct iser_data_buf *data) | 335 | struct iser_data_buf *data, |
| 336 | enum dma_data_direction dir) | ||
| 336 | { | 337 | { |
| 337 | struct ib_device *dev; | 338 | struct ib_device *dev; |
| 338 | 339 | ||
| 339 | dev = iser_task->iser_conn->ib_conn.device->ib_device; | 340 | dev = iser_task->iser_conn->ib_conn.device->ib_device; |
| 340 | ib_dma_unmap_sg(dev, data->buf, data->size, DMA_FROM_DEVICE); | 341 | ib_dma_unmap_sg(dev, data->buf, data->size, dir); |
| 341 | } | 342 | } |
| 342 | 343 | ||
| 343 | static int fall_to_bounce_buf(struct iscsi_iser_task *iser_task, | 344 | static int fall_to_bounce_buf(struct iscsi_iser_task *iser_task, |
| @@ -357,7 +358,9 @@ static int fall_to_bounce_buf(struct iscsi_iser_task *iser_task, | |||
| 357 | iser_data_buf_dump(mem, ibdev); | 358 | iser_data_buf_dump(mem, ibdev); |
| 358 | 359 | ||
| 359 | /* unmap the command data before accessing it */ | 360 | /* unmap the command data before accessing it */ |
| 360 | iser_dma_unmap_task_data(iser_task, mem); | 361 | iser_dma_unmap_task_data(iser_task, mem, |
| 362 | (cmd_dir == ISER_DIR_OUT) ? | ||
| 363 | DMA_TO_DEVICE : DMA_FROM_DEVICE); | ||
| 361 | 364 | ||
| 362 | /* allocate copy buf, if we are writing, copy the */ | 365 | /* allocate copy buf, if we are writing, copy the */ |
| 363 | /* unaligned scatterlist, dma map the copy */ | 366 | /* unaligned scatterlist, dma map the copy */ |
