Skip to content

Commit fe7f772

Browse files
committed
btl/usnic: properly size freelist items
Move the prefix area from the head to the body in relevant size computations. This fixes a problem in high traffic situations where usNIC may have sent from unregistered memory. Signed-off-by: Jeff Squyres <[email protected]>
1 parent 27e3040 commit fe7f772

File tree

1 file changed

+8
-11
lines changed

1 file changed

+8
-11
lines changed

opal/mca/btl/usnic/btl_usnic_module.c

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2347,14 +2347,14 @@ static void init_freelists(opal_btl_usnic_module_t *module)
23472347
uint32_t segsize;
23482348

23492349
segsize = (module->local_modex.max_msg_size +
2350-
opal_cache_line_size - 1) &
2350+
mca_btl_usnic_component.prefix_send_offset +
2351+
opal_cache_line_size - 1) &
23512352
~(opal_cache_line_size - 1);
23522353

23532354
/* Send frags freelists */
23542355
OBJ_CONSTRUCT(&module->small_send_frags, opal_free_list_t);
23552356
rc = usnic_compat_free_list_init(&module->small_send_frags,
2356-
sizeof(opal_btl_usnic_small_send_frag_t) +
2357-
mca_btl_usnic_component.prefix_send_offset,
2357+
sizeof(opal_btl_usnic_small_send_frag_t),
23582358
opal_cache_line_size,
23592359
OBJ_CLASS(opal_btl_usnic_small_send_frag_t),
23602360
segsize,
@@ -2371,8 +2371,7 @@ static void init_freelists(opal_btl_usnic_module_t *module)
23712371

23722372
OBJ_CONSTRUCT(&module->large_send_frags, opal_free_list_t);
23732373
rc = usnic_compat_free_list_init(&module->large_send_frags,
2374-
sizeof(opal_btl_usnic_large_send_frag_t) +
2375-
mca_btl_usnic_component.prefix_send_offset,
2374+
sizeof(opal_btl_usnic_large_send_frag_t),
23762375
opal_cache_line_size,
23772376
OBJ_CLASS(opal_btl_usnic_large_send_frag_t),
23782377
0, /* payload size */
@@ -2389,8 +2388,7 @@ static void init_freelists(opal_btl_usnic_module_t *module)
23892388

23902389
OBJ_CONSTRUCT(&module->put_dest_frags, opal_free_list_t);
23912390
rc = usnic_compat_free_list_init(&module->put_dest_frags,
2392-
sizeof(opal_btl_usnic_put_dest_frag_t) +
2393-
mca_btl_usnic_component.prefix_send_offset,
2391+
sizeof(opal_btl_usnic_put_dest_frag_t),
23942392
opal_cache_line_size,
23952393
OBJ_CLASS(opal_btl_usnic_put_dest_frag_t),
23962394
0, /* payload size */
@@ -2408,8 +2406,7 @@ static void init_freelists(opal_btl_usnic_module_t *module)
24082406
/* list of segments to use for sending */
24092407
OBJ_CONSTRUCT(&module->chunk_segs, opal_free_list_t);
24102408
rc = usnic_compat_free_list_init(&module->chunk_segs,
2411-
sizeof(opal_btl_usnic_chunk_segment_t) +
2412-
mca_btl_usnic_component.prefix_send_offset,
2409+
sizeof(opal_btl_usnic_chunk_segment_t),
24132410
opal_cache_line_size,
24142411
OBJ_CLASS(opal_btl_usnic_chunk_segment_t),
24152412
segsize,
@@ -2427,11 +2424,11 @@ static void init_freelists(opal_btl_usnic_module_t *module)
24272424
/* ACK segments freelist */
24282425
uint32_t ack_segment_len;
24292426
ack_segment_len = (sizeof(opal_btl_usnic_btl_header_t) +
2427+
mca_btl_usnic_component.prefix_send_offset +
24302428
opal_cache_line_size - 1) & ~(opal_cache_line_size - 1);
24312429
OBJ_CONSTRUCT(&module->ack_segs, opal_free_list_t);
24322430
rc = usnic_compat_free_list_init(&module->ack_segs,
2433-
sizeof(opal_btl_usnic_ack_segment_t) +
2434-
mca_btl_usnic_component.prefix_send_offset,
2431+
sizeof(opal_btl_usnic_ack_segment_t),
24352432
opal_cache_line_size,
24362433
OBJ_CLASS(opal_btl_usnic_ack_segment_t),
24372434
ack_segment_len,

0 commit comments

Comments
 (0)