On Wed, Nov 21, 2018 at 09:01:16AM -0500, Hal Rosenstock wrote: > On 11/21/2018 1:58 AM, Honggang LI wrote: > > From: Honggang Li <honli@xxxxxxxxxx> > > > > Signed-off-by: Honggang Li <honli@xxxxxxxxxx> > > --- > > opensm/osm_resp.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/opensm/osm_resp.c b/opensm/osm_resp.c > > index 3f270e66..42015564 100644 > > --- a/opensm/osm_resp.c > > +++ b/opensm/osm_resp.c > > @@ -85,8 +85,8 @@ static void resp_make_resp_smp(IN osm_sm_t * sm, IN const ib_smp_t * p_src_smp, > > if (p_src_smp->mgmt_class == IB_MCLASS_SUBN_DIR) > > p_dest_smp->status |= IB_SMP_DIRECTION; > > > > - p_dest_smp->dr_dlid = p_dest_smp->dr_slid; > > - p_dest_smp->dr_slid = p_dest_smp->dr_dlid; > > + p_dest_smp->dr_dlid = p_src_smp->dr_slid; > > + p_dest_smp->dr_slid = p_src_smp->dr_dlid; > > Please elaborate on why you think that this change is needed. Is it just > by code inspection where a number of dest SMP parameters are updated > from their src equivalents ? yes, just by code inspection. > > Earlier in this code block, the src SMP is copied to the dest SMP so > that flipping the dest DR LIDs seems just fine to me and has worked for > more than the last 10-15 years. Yes, flipping the dest DR LIDs works. But flipping the src DR LIDs does not. Please let's take random LIDs for illustration. p_src_smp->dr_slid = 1 p_src_smp->dr_dlid = 2 60 static void resp_make_resp_smp(IN osm_sm_t * sm, IN const ib_smp_t * p_src_smp, ..... 70 71 *p_dest_smp = *p_src_smp; 72 if (p_src_smp->method == IB_MAD_METHOD_GET || Line 71 will copy the dest SMP to src SMP, which means: p_dest_smp->dr_slid = p_src_smp->dr_slid = 1; p_dest_smp->dr_dlid = p_src_smp->dr_dlid = 2; 88 p_dest_smp->dr_dlid = p_dest_smp->dr_slid; line 88 will set p_dest_smp->dr_dlid to 1 89 p_dest_smp->dr_slid = p_dest_smp->dr_dlid; line 89 will set p_dest_smp->dr_slid to 1. Both p_dest_smp->dr_slid and p_dest_smp->dr_dlid will be set to same value 1. Line 88 and 89 is really just like: A = B B = A The second line (B = A) is redundant, if you just want to flip the dest DR LID. > > > memcpy(&p_dest_smp->data, p_payload, IB_SMP_DATA_SIZE); > > > > Exit: > >