@@ -50,9 +50,10 @@ void mca_btl_vader_poll_handle_frag (mca_btl_vader_hdr_t *hdr, mca_btl_base_endp
5050static inline void mca_btl_vader_fbox_set_header (mca_btl_vader_fbox_hdr_t * hdr , uint16_t tag ,
5151 uint16_t seq , uint32_t size )
5252{
53- mca_btl_vader_fbox_hdr_t tmp = {.data = {.tag = tag , .seq = seq , .size = size }};
54- opal_atomic_wmb ();
53+ mca_btl_vader_fbox_hdr_t tmp = {.data = {.tag = 0 , .seq = seq , .size = size }};
5554 hdr -> ival = tmp .ival ;
55+ opal_atomic_wmb ();
56+ hdr -> data .tag = tag ;
5657}
5758
5859/* attempt to reserve a contiguous segment from the remote ep */
@@ -138,9 +139,6 @@ static inline bool mca_btl_vader_fbox_sendi (mca_btl_base_endpoint_t *ep, unsign
138139 memcpy (data + header_size , payload , payload_size );
139140 }
140141
141- /* write out part of the header now. the tag will be written when the data is available */
142- mca_btl_vader_fbox_set_header (MCA_BTL_VADER_FBOX_HDR (dst ), tag , ep -> fbox_out .seq ++ , data_size );
143-
144142 end += size ;
145143
146144 if (OPAL_UNLIKELY (fbox_size == end )) {
@@ -152,6 +150,9 @@ static inline bool mca_btl_vader_fbox_sendi (mca_btl_base_endpoint_t *ep, unsign
152150 MCA_BTL_VADER_FBOX_HDR (ep -> fbox_out .buffer + end )-> ival = 0 ;
153151 }
154152
153+ /* write out part of the header now. the tag will be written when the data is available */
154+ mca_btl_vader_fbox_set_header (MCA_BTL_VADER_FBOX_HDR (dst ), tag , ep -> fbox_out .seq ++ , data_size );
155+
155156 /* align the buffer */
156157 ep -> fbox_out .end = ((uint32_t ) hbs << 31 ) | end ;
157158 opal_atomic_wmb ();
0 commit comments