[ofa-general] ipath oops
Robert Walsh
rjwalsh at pathscale.com
Mon Apr 2 12:12:23 PDT 2007
> Here is a list of calls in the lustre code intercepted by ipath.
Just a clarification: as they currently stand in your code, these will
NOT be intercepted by ipath, and that's most likely the source of your OOPs.
> o2iblnd.c:
> rx->rx_msgaddr = dma_map_single(cmid->device->dma_device,
> rx->rx_msg,
> IBLND_MSG_SIZE,
> DMA_FROM_DEVICE);
>
> o2iblnd.c:
> tx->tx_msgaddr = dma_map_single(
> kiblnd_data.kib_cmid->device->dma_device,
> tx->tx_msg, IBLND_MSG_SIZE, DMA_TO_DEVICE);
>
>
> o2iblnd.c:
> dma_unmap_single(conn->ibc_cmid->device->dma_device,
> pci_unmap_addr(rx, rx_msgunmap),
> IBLND_MSG_SIZE, DMA_FROM_DEVICE);
> o2iblnd.c:
> dma_unmap_single(kiblnd_data.kib_cmid->device->dma_device,
> pci_unmap_addr(tx, tx_msgunmap),
> IBLND_MSG_SIZE, DMA_TO_DEVICE);
>
>
> o2iblnd_cb.c:
> rd->rd_nfrags = dma_map_sg(kiblnd_data.kib_cmid->device->dma_device,
> tx->tx_frags, tx->tx_nfrags,tx->tx_dmadir);
>
>
> o2iblnd_cb.c:
> dma_unmap_sg(kiblnd_data.kib_cmid->device->dma_device,
> tx->tx_frags, tx->tx_nfrags, tx->tx_dmadir);
>
> o2iblnd_cb.c:
> rd->rd_frags[i].rf_addr = sg_dma_address(&tx->tx_frags[i]);
>
> o2iblnd_cb.c:
> rd->rd_frags[i].rf_nob = sg_dma_len(&tx->tx_frags[i]);
>
>
>
> So, how to proceed now?
These need to be replaced with calls to ib_dma_map_single,
ib_dma_unmap_single, ib_dma_map_sg, ib_dma_unmap_sg, etc. Note that
these calls typically take a struct ib_device * as the first argument
instead of a struct device *. Other than that, the API is pretty much
identical. Here's the complete list:
ib_dma_mapping_error
ib_dma_map_single
ib_dma_unmap_single
ib_dma_map_page
ib_dma_unmap_page
ib_dma_map_sg
ib_dma_unmap_sg
ib_sg_dma_address
ib_sg_dma_len
ib_dma_sync_single_for_cpu
ib_dma_sync_single_for_device
ib_dma_alloc_coherent
ib_dma_free_coherent
Look in rdma/ib_verbs.h for prototypes.
Let me know if you need any more assistance with this.
Regards,
Robert.
More information about the general
mailing list