Hello,

In the function opensm/opensm/osm_req.c:osm_req_set(), I noticed that the transaction Id was generated as follows:

ib_net64_t tid;
[ ... ]
tid = cl_hton64((uint64_t) cl_atomic_inc(&sm->sm_trans_id));

However, the type of sm->sm_trans_id is atomic32_t and atomic32_t is declared as follows in opensm/include/complib/cl_types_osd.h:

typedef volatile int32_t atomic32_t;

Is the cast made by the compiler from int32_t (32 bit, signed) to a uint64_t (64 bit, unsigned) always safe w.r.t compiler(s) optimisation flags ?

If not, it may be necessary to:
- define a new atomic64_t type
- define a new cl_atomic_inc64 function
- use this function directly in osm_req_set()
- redefine the OSM_SM_INITIAL_TID_VALUE constant to be 64 bit long.

What is your opinion on this ?

Cheers,

Vincent



_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

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

Reply via email to