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.
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general