From f43afb51db57476748959dea1f4ec0b5591fcf4c Mon Sep 17 00:00:00 2001 From: leonidk Date: Mon, 10 Apr 2006 08:34:22 +0000 Subject: [PATCH] [MTHCA] fix bugs in AV handling (erroneous creating of GRH) git-svn-id: svn://openib.tc.cornell.edu/gen1@296 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- trunk/hw/mthca/kernel/hca_verbs.c | 1 + trunk/hw/mthca/kernel/mthca_av.c | 9 ++++++--- trunk/hw/mthca/kernel/mthca_provider.c | 2 +- trunk/hw/mthca/kernel/mthca_qp.c | 5 ++++- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/trunk/hw/mthca/kernel/hca_verbs.c b/trunk/hw/mthca/kernel/hca_verbs.c index 1f5b79c9..49b87a2a 100644 --- a/trunk/hw/mthca/kernel/hca_verbs.c +++ b/trunk/hw/mthca/kernel/hca_verbs.c @@ -685,6 +685,7 @@ mlnx_modify_av ( } // fill parameters + RtlZeroMemory(&ah_attr, sizeof(ah_attr)); mlnx_conv_ibal_av( ib_dev, p_addr_vector, &ah_attr ); // modify AH diff --git a/trunk/hw/mthca/kernel/mthca_av.c b/trunk/hw/mthca/kernel/mthca_av.c index 03ffe437..12917535 100644 --- a/trunk/hw/mthca/kernel/mthca_av.c +++ b/trunk/hw/mthca/kernel/mthca_av.c @@ -105,7 +105,7 @@ on_hca_fail: av = ah->av; } - + ah->key = pd->ntmr.ibmr.lkey; RtlZeroMemory(av, MTHCA_AV_SIZE); @@ -136,21 +136,23 @@ on_hca_fail: HCA_PRINT(TRACE_LEVEL_VERBOSE,HCA_DBG_LOW,("Created UDAV at %p/%08lx:\n", av, (unsigned long) ah->avdma)); for (j = 0; j < 8; ++j) - HCA_PRINT(TRACE_LEVEL_VERBOSE ,HCA_DBG_LOW ,(" [%2x] %08x\n", + HCA_PRINT(TRACE_LEVEL_VERBOSE ,HCA_DBG_AV ,(" [%2x] %08x\n", j * 4, cl_ntoh32(((__be32 *) av)[j]))); } if (ah->type == MTHCA_AH_ON_HCA) { memcpy_toio((u8*)dev->av_table.av_map + index * MTHCA_AV_SIZE, av, MTHCA_AV_SIZE); + ah->av = (struct mthca_av *)( (u8*)( dev->av_table.av_map) + index *MTHCA_AV_SIZE ); kfree(av); } - return 0; } int mthca_destroy_ah(struct mthca_dev *dev, struct mthca_ah *ah) { + HCA_ENTER(HCA_DBG_AV); + switch (ah->type) { case MTHCA_AH_ON_HCA: mthca_free(&dev->av_table.alloc, @@ -166,6 +168,7 @@ int mthca_destroy_ah(struct mthca_dev *dev, struct mthca_ah *ah) break; } + HCA_EXIT(HCA_DBG_AV); return 0; } diff --git a/trunk/hw/mthca/kernel/mthca_provider.c b/trunk/hw/mthca/kernel/mthca_provider.c index 76f86cc9..3c6dcb22 100644 --- a/trunk/hw/mthca/kernel/mthca_provider.c +++ b/trunk/hw/mthca/kernel/mthca_provider.c @@ -467,7 +467,7 @@ struct ib_ah *mthca_ah_create(struct ib_pd *pd, int err; struct mthca_ah *ah; - ah = kmalloc(sizeof *ah, GFP_ATOMIC); + ah = kzalloc(sizeof *ah, GFP_ATOMIC); if (!ah) return ERR_PTR(-ENOMEM); diff --git a/trunk/hw/mthca/kernel/mthca_qp.c b/trunk/hw/mthca/kernel/mthca_qp.c index 0b890653..6a4f2214 100644 --- a/trunk/hw/mthca/kernel/mthca_qp.c +++ b/trunk/hw/mthca/kernel/mthca_qp.c @@ -1416,8 +1416,11 @@ static int build_mlx_header(struct mthca_dev *dev, struct mthca_sqp *sqp, &sqp->ud_header); err = mthca_read_ah(dev, to_mah((struct ib_ah *)wr->dgrm.ud.h_av), &sqp->ud_header); - if (err) + if (err){ + HCA_PRINT(TRACE_LEVEL_ERROR , HCA_DBG_AV, ("read av error%p\n", + to_mah((struct ib_ah *)wr->dgrm.ud.h_av)->av)); return err; + } mlx->flags &= ~cl_hton32(MTHCA_NEXT_SOLICIT | 1); mlx->flags |= cl_hton32((!sqp->qp.ibqp.qp_num ? MTHCA_MLX_VL15 : 0) | (sqp->ud_header.lrh.destination_lid == -- 2.41.0