[openib-general] [PATCH for-2.6.21] IPoIB/cm: improve small message bandwidth
Or Gerlitz
ogerlitz at voltaire.com
Wed Feb 21 04:52:57 PST 2007
Michael S. Tsirkin wrote:
> Avoid overhead of freeing/reallocating and mapping/unmapping for dma
> for pages that have not been written to by hardware.
> diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
> index 8ee6f06..a23c8e3 100644
> --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
> +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
> @@ -68,14 +68,14 @@ struct ipoib_cm_id {
> static int ipoib_cm_tx_handler(struct ib_cm_id *cm_id,
> struct ib_cm_event *event);
>
> -static void ipoib_cm_dma_unmap_rx(struct ipoib_dev_priv *priv,
> +static void ipoib_cm_dma_unmap_rx(struct ipoib_dev_priv *priv, int frags,
> u64 mapping[IPOIB_CM_RX_SG])
> {
> int i;
>
> ib_dma_unmap_single(priv->ca, mapping[0], IPOIB_CM_HEAD_SIZE, DMA_FROM_DEVICE);
>
> - for (i = 0; i < IPOIB_CM_RX_SG - 1; ++i)
> + for (i = 0; i < frags; ++i)
> ib_dma_unmap_single(priv->ca, mapping[i + 1], PAGE_SIZE, DMA_FROM_DEVICE);
> }
I understand that in ipoib_cm_alloc_rx_skb you call dma_map_page on
IPOIB_CM_RX_SG pages where here you call dma_unmap_single only $frags
times, correct? does this means you are trashing the IOMMU etc etc of
the system?
Or.
More information about the general
mailing list