On Tue, Mar 11, 2014 at 2:41 PM, Or Gerlitz <[email protected]> wrote:
> From: Yan Burman <[email protected]>
>
> Running over a kernel built with DMA_API_DEBUG and not checking for
> DMA mapping error triggers a kernel stack trace with "DMA-API: device
> driver failed to check map error" message. So adding it here, for the
> sake of being more robust and eliminating the false-positives stack traces.

I am sure this patch was in for-next couple of hours ago, now it seems
to be gone from there, is that?

Or.

>
> Signed-off-by: Yan Burman <[email protected]>
> Signed-off-by: Or Gerlitz <[email protected]>
> ---
>  drivers/infiniband/core/mad.c |   14 ++++++++++++++
>  1 files changed, 14 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
> index 4c837e6..ab31f13 100644
> --- a/drivers/infiniband/core/mad.c
> +++ b/drivers/infiniband/core/mad.c
> @@ -1022,12 +1022,21 @@ int ib_send_mad(struct ib_mad_send_wr_private 
> *mad_send_wr)
>                                         mad_send_wr->send_buf.mad,
>                                         sge[0].length,
>                                         DMA_TO_DEVICE);
> +       if (unlikely(ib_dma_mapping_error(mad_agent->device, sge[0].addr)))
> +               return -ENOMEM;
> +
>         mad_send_wr->header_mapping = sge[0].addr;
>
>         sge[1].addr = ib_dma_map_single(mad_agent->device,
>                                         ib_get_payload(mad_send_wr),
>                                         sge[1].length,
>                                         DMA_TO_DEVICE);
> +       if (unlikely(ib_dma_mapping_error(mad_agent->device, sge[1].addr))) {
> +               ib_dma_unmap_single(mad_agent->device,
> +                                   mad_send_wr->header_mapping,
> +                                   sge[0].length, DMA_TO_DEVICE);
> +               return -ENOMEM;
> +       }
>         mad_send_wr->payload_mapping = sge[1].addr;
>
>         spin_lock_irqsave(&qp_info->send_queue.lock, flags);
> @@ -2590,6 +2599,11 @@ static int ib_mad_post_receive_mads(struct 
> ib_mad_qp_info *qp_info,
>                                                  sizeof *mad_priv -
>                                                    sizeof mad_priv->header,
>                                                  DMA_FROM_DEVICE);
> +               if (unlikely(ib_dma_mapping_error(qp_info->port_priv->device,
> +                                                 sg_list.addr))) {
> +                       ret = -ENOMEM;
> +                       break;
> +               }
>                 mad_priv->header.mapping = sg_list.addr;
>                 recv_wr.wr_id = (unsigned long)&mad_priv->header.mad_list;
>                 mad_priv->header.mad_list.mad_queue = recv_queue;
> --
> 1.7.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to