[ofa-general] [PATCH] libmlx4: Fix the value of the pkey_index in the completion

Sasha Khapyorsky sashak at voltaire.com
Mon Jan 14 14:46:25 PST 2008


On 11:31 Mon 14 Jan     , Dotan Barak wrote:
> >>>       
> >>  Just to make sure that everything is clear: I checked that the mthca low  
> >> level driver can extract
> >>  the right pkey_index in the completion of GSI QP.
> >>
> >>  The problem that Yevgeny mentioned exists in the openSM and i opened a 
> >> bug  on this issue.
> >>     
> >
> > I tried mthca connected back-to-back (between ports 1 and 2). When
> > non-default P_Key value is configured (at any index, full membership on
> > both ports pkey tables and no 0xffff), saquery is timed out and trap 257
> > (Bad P_Key) is reported to OpenSM.
> >
> > I'm using kernel 2.6.24-rc7-gcdf71a10 and FW 3.2.000. Could this be old
> > FW issue?
> >   
>  This is a really old FW and you should consider updating it ...

Actually everything works fine now (even with old FW) - it was a bug in
my test yesterday.

>  What exactly did you do (and how)?

I'm using this in order to enforce saquery to use non-zero pkey index:

diff --git a/opensm/libvendor/osm_vendor_ibumad_sa.c b/opensm/libvendor/osm_vendor_ibumad_sa.c
index 24f70bb..f23e67d 100644
--- a/opensm/libvendor/osm_vendor_ibumad_sa.c
+++ b/opensm/libvendor/osm_vendor_ibumad_sa.c
@@ -440,6 +440,7 @@ __osmv_send_sa_req(IN osmv_sa_bind_info_t * p_bind,
 	p_madw->mad_addr.addr_type.smi.source_lid =
 	    cl_hton16(p_bind->p_vendor->umad_port.base_lid);
 	p_madw->mad_addr.addr_type.gsi.remote_qp = CL_HTON32(1);
+	p_madw->mad_addr.addr_type.gsi.pkey = 1;
 	p_madw->resp_expected = TRUE;
 	p_madw->fail_msg = CL_DISP_MSGID_NONE;
 
> 
>  I have troubles to set the pkey table in the subnet to not use the default 
>  pkey.

This will prevent from OpenSM to create/update 0xffff P_Key:

diff --git a/opensm/opensm/osm_prtn.c b/opensm/opensm/osm_prtn.c
index 15a9c2a..bfb682f 100644
--- a/opensm/opensm/osm_prtn.c
+++ b/opensm/opensm/osm_prtn.c
@@ -368,9 +368,11 @@ ib_api_status_t osm_prtn_make_partitions(osm_log_t * const p_log,
 
 	global_pkey_counter = 0;
 
+#if 0
 	status = osm_prtn_make_default(p_log, p_subn, !is_config);
 	if (status != IB_SUCCESS)
 		goto _err;
+#endif
 
 	if (is_config && osm_prtn_config_parse_file(p_log, p_subn, file_name)) {
 		osm_log(p_log, OSM_LOG_VERBOSE,


And with it I'm using partition config file to create various test
cases. Something like:

#Default=0xffff: ALL=limi ;
#P1=0x8001 : ALL = full ;
P2=0x0002 : ALL = limi, SELF=full ;
P3=0x0003 : ALL ;

Sasha



More information about the general mailing list