Hi Hal,
In answer to your questions:
1. This is still one code base for gen1 too. 
2. I don't think it is necessary to add osm_arbitrary_context_t in all
   vendors, just in the ones using it.
Yael


-----Original Message-----
From: Hal Rosenstock [mailto:[EMAIL PROTECTED]
Sent: Thursday, February 09, 2006 9:09 PM
To: Yael Kalka
Cc: openib-general@openib.org; Eitan Zahavi
Subject: Re: [PATCH] Opensm - clean osm_vendor_mlx_sa.c code


Hi Yael,

On Mon, 2006-02-06 at 07:39, Yael Kalka wrote:
> Hi Hal,
> 
> Currently in osm_vendor_mlx_sa.c the sent context is saved arbitrarily
> as nodeInfo_context. This results in need for strange castings from
> long to pointer and vice-versa. The following patch adds another
> possible context - arbitrary context, which will be used in this case.

Thanks. Applied with one question below.

BTW, I have no way to test this (other than that things still work for
OpenIB). Is this still one code base for gen1 too ?

-- Hal

> Thanks,
> Yael
> 
> Signed-off-by:  Yael Kalka <[EMAIL PROTECTED]>
> 
> Index: libvendor/osm_vendor_mlx_sa.c
> ===================================================================
> --- libvendor/osm_vendor_mlx_sa.c     (revision 5307)
> +++ libvendor/osm_vendor_mlx_sa.c     (working copy)
> @@ -96,9 +96,9 @@ __osmv_sa_mad_rcv_cb(
>      goto Exit;
>    }
>  
> -  /* obtain the sent context since we store it during send in the ni_ctx */
> +  /* obtain the sent context */
>    p_query_req_copy =
> -     (osmv_query_req_t 
> *)CAST_P2LONG(p_req_madw->context.ni_context.node_guid);
> +     (osmv_query_req_t *)(p_req_madw->context.arb_context.context1);
>  
>    /* provide the context of the original request in the result */
>    query_res.query_context = p_query_req_copy->query_context;
> @@ -207,7 +207,7 @@ __osmv_sa_mad_err_cb(
>  
>    /* Obtain the sent context etc */
>    p_query_req_copy =
> -     (osmv_query_req_t *)CAST_P2LONG(p_madw->context.ni_context.node_guid);
> +     (osmv_query_req_t *)(p_madw->context.arb_context.context1);
>  
>    /* provide the context of the original request in the result */
>    query_res.query_context = p_query_req_copy->query_context;
> @@ -561,10 +561,17 @@ __osmv_send_sa_req(
>    /*
>      Provide the address to send to
>    */
> +  /* Patch to handle IBAL - host order , where it should take destination 
> lid in network order */
> +#ifdef OSM_VENDOR_INTF_AL
> +  p_madw->mad_addr.dest_lid = p_bind->sm_lid;
> +#else
>    p_madw->mad_addr.dest_lid = cl_hton16(p_bind->sm_lid);
> +#endif
>    p_madw->mad_addr.addr_type.smi.source_lid =
>      cl_hton16(p_bind->lid);
>    p_madw->mad_addr.addr_type.gsi.remote_qp = CL_HTON32(1);
> +  p_madw->mad_addr.addr_type.gsi.remote_qkey = IB_QP1_WELL_KNOWN_Q_KEY;
> +  p_madw->mad_addr.addr_type.gsi.pkey = IB_DEFAULT_PKEY;
>    p_madw->resp_expected = TRUE;
>    p_madw->fail_msg = CL_DISP_MSGID_NONE;
>  
> @@ -574,12 +581,11 @@ __osmv_send_sa_req(
>      Since we can not rely on the client to keep it arroud until
>      the response - we duplicate it and will later dispose it (in CB).
>      To store on the MADW we cast it into what opensm has:
> -    p_madw->context.ni_context.node_guid
> +    p_madw->context.arb_context.context1
>    */
>    p_query_req_copy = cl_malloc(sizeof(*p_query_req_copy));
>    *p_query_req_copy = *p_query_req;
> -  p_madw->context.ni_context.node_guid =
> -    (ib_net64_t)CAST_P2LONG(p_query_req_copy);
> +  p_madw->context.arb_context.context1 = p_query_req_copy;
>  
>    /* we can support async as well as sync calls */
>    sync = ((p_query_req->flags & OSM_SA_FLAGS_SYNC) == OSM_SA_FLAGS_SYNC);
> Index: include/opensm/osm_madw.h
> ===================================================================
> --- include/opensm/osm_madw.h (revision 5307)
> +++ include/opensm/osm_madw.h (working copy)
> @@ -315,6 +315,22 @@ typedef struct _osm_vla_context
>    boolean_t                     set_method;
>  } osm_vla_context_t;
>  /*********/
> +/****s* OpenSM: MAD Wrapper/osm_arbitrary_context_t
> +* NAME
> +*    osm_sa_context_t
> +*
> +* DESCRIPTION
> +*    Context needed by arbitrary recipient.
> +*
> +* SYNOPSIS
> +*/
> +typedef struct _osm_arbitrary_context
> +{
> +  void*             context1;
> +  void*             context2;
> +} osm_arbitrary_context_t;
> +/*********/
> +
>  /****s* OpenSM: MAD Wrapper/osm_madw_context_t
>  * NAME
>  *    osm_madw_context_t
> @@ -335,6 +351,7 @@ typedef union _osm_madw_context
>       osm_smi_context_t               smi_context;
>       osm_slvl_context_t      slvl_context;
>       osm_pkey_context_t      pkey_context;
> +     osm_arbitrary_context_t arb_context;

Should this be carried for for all vendor layers or only the ones which
need this ?

>  } osm_madw_context_t;
>  /*********/
>  
> @@ -880,6 +897,34 @@ osm_madw_get_vla_context_ptr(
>  }
>  /*
>  * PARAMETERS
> +*    p_madw
> +*            [in] Pointer to an osm_madw_t object.
> +*
> +* RETURN VALUES
> +*    Pointer to the start of the context structure.
> +*
> +* NOTES
> +*
> +* SEE ALSO
> +*********/
> +
> +/****f* OpenSM: MAD Wrapper/osm_madw_get_arbitrary_context_ptr
> +* NAME
> +*    osm_madw_get_arbitrary_context_ptr
> +*
> +* DESCRIPTION
> +*    Gets a pointer to the arbitrary context in this MAD.
> +*
> +* SYNOPSIS
> +*/
> +static inline osm_arbitrary_context_t*
> +osm_madw_get_arbitrary_context_ptr(
> +     IN const osm_madw_t* const p_madw )
> +{
> +     return( (osm_arbitrary_context_t*)&p_madw->context );
> +}
> +/*
> +* PARAMETERS
>  *    p_madw
>  *            [in] Pointer to an osm_madw_t object.
>  *
> 
_______________________________________________
openib-general mailing list
openib-general@openib.org
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to