]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
[MTHCA] fix bugs in AV handling (erroneous creating of GRH)
authorleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 10 Apr 2006 08:34:22 +0000 (08:34 +0000)
committerleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 10 Apr 2006 08:34:22 +0000 (08:34 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1@296 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

trunk/hw/mthca/kernel/hca_verbs.c
trunk/hw/mthca/kernel/mthca_av.c
trunk/hw/mthca/kernel/mthca_provider.c
trunk/hw/mthca/kernel/mthca_qp.c

index 1f5b79c9c356487281b113b4e47f106060d33712..49b87a2a461dccbb080a750e497e47cb11c91f2a 100644 (file)
@@ -685,6 +685,7 @@ mlnx_modify_av (
        }\r
 \r
        // fill parameters \r
+       RtlZeroMemory(&ah_attr, sizeof(ah_attr));\r
        mlnx_conv_ibal_av( ib_dev, p_addr_vector,  &ah_attr );\r
 \r
        // modify AH\r
index 03ffe4376a00fb9b77de2f7e7180a1819d0da619..12917535f637242942eb9eaf6123fc2594a6f8f6 100644 (file)
@@ -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;
 }
 
index 76f86cc92a35a677e4f7b68b886d5d9a62c0d28a..3c6dcb224b901369008af277dde42d716f0f82fe 100644 (file)
@@ -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);
 
index 0b890653c4d972eff52fab3dfcfc451c25af2462..6a4f22149855e071677d785274b4643812cafa7a 100644 (file)
@@ -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 ==