lkml.org 
[lkml]   [2022]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH v8 11/13] RDMA/core: introduce ib_dma_pci_p2p_dma_supported()
    Introduce the helper function ib_dma_pci_p2p_dma_supported() to check
    if a given ib_device can be used in P2PDMA transfers. This ensures
    the ib_device is not using virt_dma and also that the underlying
    dma_device supports P2PDMA.

    Use the new helper in nvme-rdma to replace the existing check for
    ib_uses_virt_dma(). Adding the dma_pci_p2pdma_supported() check allows
    switching away from pci_p2pdma_[un]map_sg().

    Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
    Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
    Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    ---
    drivers/nvme/target/rdma.c | 2 +-
    include/rdma/ib_verbs.h | 11 +++++++++++
    2 files changed, 12 insertions(+), 1 deletion(-)

    diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c
    index 09fdcac87d17..4597bca43a6d 100644
    --- a/drivers/nvme/target/rdma.c
    +++ b/drivers/nvme/target/rdma.c
    @@ -415,7 +415,7 @@ static int nvmet_rdma_alloc_rsp(struct nvmet_rdma_device *ndev,
    if (ib_dma_mapping_error(ndev->device, r->send_sge.addr))
    goto out_free_rsp;

    - if (!ib_uses_virt_dma(ndev->device))
    + if (ib_dma_pci_p2p_dma_supported(ndev->device))
    r->req.p2p_client = &ndev->device->dev;
    r->send_sge.length = sizeof(*r->req.cqe);
    r->send_sge.lkey = ndev->pd->local_dma_lkey;
    diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
    index 9c6317cf80d5..523843d9ed6c 100644
    --- a/include/rdma/ib_verbs.h
    +++ b/include/rdma/ib_verbs.h
    @@ -4013,6 +4013,17 @@ static inline bool ib_uses_virt_dma(struct ib_device *dev)
    return IS_ENABLED(CONFIG_INFINIBAND_VIRT_DMA) && !dev->dma_device;
    }

    +/*
    + * Check if a IB device's underlying DMA mapping supports P2PDMA transfers.
    + */
    +static inline bool ib_dma_pci_p2p_dma_supported(struct ib_device *dev)
    +{
    + if (ib_uses_virt_dma(dev))
    + return false;
    +
    + return dma_pci_p2pdma_supported(dev->dma_device);
    +}
    +
    /**
    * ib_dma_mapping_error - check a DMA addr for error
    * @dev: The device for which the dma_addr was created
    --
    2.30.2
    \
     
     \ /
      Last update: 2022-07-08 18:51    [W:4.279 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site