diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-28 15:33:59 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-28 15:33:59 -0500 |
commit | 1d248b2593e92db6c51ca07235985a95c625a93f (patch) | |
tree | 4eceeb4eadb8a6339e0f83d0cad166f88d888557 /drivers/infiniband/hw/ipath/ipath_sdma.c | |
parent | 1db2a5c11e495366bff35cf7445d494703f7febe (diff) | |
parent | 2a0d8366dde9c66d8f481bee56828b661e5c8bf1 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (26 commits)
IB/mlx4: Set ownership bit correctly when copying CQEs during CQ resize
RDMA/nes: Remove tx_free_list
RDMA/cma: Add IPv6 support
RDMA/addr: Add support for translating IPv6 addresses
mlx4_core: Delete incorrect comment
mlx4_core: Add support for multiple completion event vectors
IB/iser: Avoid recv buffer exhaustion caused by unexpected PDUs
IB/ehca: Remove redundant test of vpage
IB/ehca: Replace modulus operations in flush error completion path
IB/ipath: Add locking for interrupt use of ipath_pd contexts vs free
IB/ipath: Fix spi_pioindex value
IB/ipath: Only do 1X workaround on rev1 chips
IB/ipath: Don't count IB symbol and link errors unless link is UP
IB/ipath: Check return value of dma_map_single()
IB/ipath: Fix PSN of send WQEs after an RDMA read resend
RDMA/nes: Cleanup warnings
RDMA/nes: Add loopback check to make_cm_node()
RDMA/nes: Check cqp_avail_reqs is empty after locking the list
RDMA/nes: Fix TCP compliance test failures
RDMA/nes: Forward packets for a new connection with stale APBVT entry
...
Diffstat (limited to 'drivers/infiniband/hw/ipath/ipath_sdma.c')
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_sdma.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_sdma.c b/drivers/infiniband/hw/ipath/ipath_sdma.c index 284c9bca517e..8e255adf5d9b 100644 --- a/drivers/infiniband/hw/ipath/ipath_sdma.c +++ b/drivers/infiniband/hw/ipath/ipath_sdma.c | |||
@@ -698,10 +698,8 @@ retry: | |||
698 | 698 | ||
699 | addr = dma_map_single(&dd->pcidev->dev, tx->txreq.map_addr, | 699 | addr = dma_map_single(&dd->pcidev->dev, tx->txreq.map_addr, |
700 | tx->map_len, DMA_TO_DEVICE); | 700 | tx->map_len, DMA_TO_DEVICE); |
701 | if (dma_mapping_error(&dd->pcidev->dev, addr)) { | 701 | if (dma_mapping_error(&dd->pcidev->dev, addr)) |
702 | ret = -EIO; | 702 | goto ioerr; |
703 | goto unlock; | ||
704 | } | ||
705 | 703 | ||
706 | dwoffset = tx->map_len >> 2; | 704 | dwoffset = tx->map_len >> 2; |
707 | make_sdma_desc(dd, sdmadesc, (u64) addr, dwoffset, 0); | 705 | make_sdma_desc(dd, sdmadesc, (u64) addr, dwoffset, 0); |
@@ -741,6 +739,8 @@ retry: | |||
741 | dw = (len + 3) >> 2; | 739 | dw = (len + 3) >> 2; |
742 | addr = dma_map_single(&dd->pcidev->dev, sge->vaddr, dw << 2, | 740 | addr = dma_map_single(&dd->pcidev->dev, sge->vaddr, dw << 2, |
743 | DMA_TO_DEVICE); | 741 | DMA_TO_DEVICE); |
742 | if (dma_mapping_error(&dd->pcidev->dev, addr)) | ||
743 | goto unmap; | ||
744 | make_sdma_desc(dd, sdmadesc, (u64) addr, dw, dwoffset); | 744 | make_sdma_desc(dd, sdmadesc, (u64) addr, dw, dwoffset); |
745 | /* SDmaUseLargeBuf has to be set in every descriptor */ | 745 | /* SDmaUseLargeBuf has to be set in every descriptor */ |
746 | if (tx->txreq.flags & IPATH_SDMA_TXREQ_F_USELARGEBUF) | 746 | if (tx->txreq.flags & IPATH_SDMA_TXREQ_F_USELARGEBUF) |
@@ -798,7 +798,18 @@ retry: | |||
798 | list_add_tail(&tx->txreq.list, &dd->ipath_sdma_activelist); | 798 | list_add_tail(&tx->txreq.list, &dd->ipath_sdma_activelist); |
799 | if (tx->txreq.flags & IPATH_SDMA_TXREQ_F_VL15) | 799 | if (tx->txreq.flags & IPATH_SDMA_TXREQ_F_VL15) |
800 | vl15_watchdog_enq(dd); | 800 | vl15_watchdog_enq(dd); |
801 | 801 | goto unlock; | |
802 | |||
803 | unmap: | ||
804 | while (tail != dd->ipath_sdma_descq_tail) { | ||
805 | if (!tail) | ||
806 | tail = dd->ipath_sdma_descq_cnt - 1; | ||
807 | else | ||
808 | tail--; | ||
809 | unmap_desc(dd, tail); | ||
810 | } | ||
811 | ioerr: | ||
812 | ret = -EIO; | ||
802 | unlock: | 813 | unlock: |
803 | spin_unlock_irqrestore(&dd->ipath_sdma_lock, flags); | 814 | spin_unlock_irqrestore(&dd->ipath_sdma_lock, flags); |
804 | fail: | 815 | fail: |