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 <jsquyres@cisco.com> (cherry picked from commit fe7f772f21627b01838c007db7cedbbb0ce8b536)
Этот коммит содержится в:
родитель
58155bc760
Коммит
22bc268e6e
@ -2369,14 +2369,14 @@ static void init_freelists(opal_btl_usnic_module_t *module)
|
|||||||
uint32_t segsize;
|
uint32_t segsize;
|
||||||
|
|
||||||
segsize = (module->local_modex.max_msg_size +
|
segsize = (module->local_modex.max_msg_size +
|
||||||
opal_cache_line_size - 1) &
|
mca_btl_usnic_component.prefix_send_offset +
|
||||||
|
opal_cache_line_size - 1) &
|
||||||
~(opal_cache_line_size - 1);
|
~(opal_cache_line_size - 1);
|
||||||
|
|
||||||
/* Send frags freelists */
|
/* Send frags freelists */
|
||||||
OBJ_CONSTRUCT(&module->small_send_frags, opal_free_list_t);
|
OBJ_CONSTRUCT(&module->small_send_frags, opal_free_list_t);
|
||||||
rc = usnic_compat_free_list_init(&module->small_send_frags,
|
rc = usnic_compat_free_list_init(&module->small_send_frags,
|
||||||
sizeof(opal_btl_usnic_small_send_frag_t) +
|
sizeof(opal_btl_usnic_small_send_frag_t),
|
||||||
mca_btl_usnic_component.prefix_send_offset,
|
|
||||||
opal_cache_line_size,
|
opal_cache_line_size,
|
||||||
OBJ_CLASS(opal_btl_usnic_small_send_frag_t),
|
OBJ_CLASS(opal_btl_usnic_small_send_frag_t),
|
||||||
segsize,
|
segsize,
|
||||||
@ -2393,8 +2393,7 @@ static void init_freelists(opal_btl_usnic_module_t *module)
|
|||||||
|
|
||||||
OBJ_CONSTRUCT(&module->large_send_frags, opal_free_list_t);
|
OBJ_CONSTRUCT(&module->large_send_frags, opal_free_list_t);
|
||||||
rc = usnic_compat_free_list_init(&module->large_send_frags,
|
rc = usnic_compat_free_list_init(&module->large_send_frags,
|
||||||
sizeof(opal_btl_usnic_large_send_frag_t) +
|
sizeof(opal_btl_usnic_large_send_frag_t),
|
||||||
mca_btl_usnic_component.prefix_send_offset,
|
|
||||||
opal_cache_line_size,
|
opal_cache_line_size,
|
||||||
OBJ_CLASS(opal_btl_usnic_large_send_frag_t),
|
OBJ_CLASS(opal_btl_usnic_large_send_frag_t),
|
||||||
0, /* payload size */
|
0, /* payload size */
|
||||||
@ -2411,8 +2410,7 @@ static void init_freelists(opal_btl_usnic_module_t *module)
|
|||||||
|
|
||||||
OBJ_CONSTRUCT(&module->put_dest_frags, opal_free_list_t);
|
OBJ_CONSTRUCT(&module->put_dest_frags, opal_free_list_t);
|
||||||
rc = usnic_compat_free_list_init(&module->put_dest_frags,
|
rc = usnic_compat_free_list_init(&module->put_dest_frags,
|
||||||
sizeof(opal_btl_usnic_put_dest_frag_t) +
|
sizeof(opal_btl_usnic_put_dest_frag_t),
|
||||||
mca_btl_usnic_component.prefix_send_offset,
|
|
||||||
opal_cache_line_size,
|
opal_cache_line_size,
|
||||||
OBJ_CLASS(opal_btl_usnic_put_dest_frag_t),
|
OBJ_CLASS(opal_btl_usnic_put_dest_frag_t),
|
||||||
0, /* payload size */
|
0, /* payload size */
|
||||||
@ -2430,8 +2428,7 @@ static void init_freelists(opal_btl_usnic_module_t *module)
|
|||||||
/* list of segments to use for sending */
|
/* list of segments to use for sending */
|
||||||
OBJ_CONSTRUCT(&module->chunk_segs, opal_free_list_t);
|
OBJ_CONSTRUCT(&module->chunk_segs, opal_free_list_t);
|
||||||
rc = usnic_compat_free_list_init(&module->chunk_segs,
|
rc = usnic_compat_free_list_init(&module->chunk_segs,
|
||||||
sizeof(opal_btl_usnic_chunk_segment_t) +
|
sizeof(opal_btl_usnic_chunk_segment_t),
|
||||||
mca_btl_usnic_component.prefix_send_offset,
|
|
||||||
opal_cache_line_size,
|
opal_cache_line_size,
|
||||||
OBJ_CLASS(opal_btl_usnic_chunk_segment_t),
|
OBJ_CLASS(opal_btl_usnic_chunk_segment_t),
|
||||||
segsize,
|
segsize,
|
||||||
@ -2449,11 +2446,11 @@ static void init_freelists(opal_btl_usnic_module_t *module)
|
|||||||
/* ACK segments freelist */
|
/* ACK segments freelist */
|
||||||
uint32_t ack_segment_len;
|
uint32_t ack_segment_len;
|
||||||
ack_segment_len = (sizeof(opal_btl_usnic_btl_header_t) +
|
ack_segment_len = (sizeof(opal_btl_usnic_btl_header_t) +
|
||||||
|
mca_btl_usnic_component.prefix_send_offset +
|
||||||
opal_cache_line_size - 1) & ~(opal_cache_line_size - 1);
|
opal_cache_line_size - 1) & ~(opal_cache_line_size - 1);
|
||||||
OBJ_CONSTRUCT(&module->ack_segs, opal_free_list_t);
|
OBJ_CONSTRUCT(&module->ack_segs, opal_free_list_t);
|
||||||
rc = usnic_compat_free_list_init(&module->ack_segs,
|
rc = usnic_compat_free_list_init(&module->ack_segs,
|
||||||
sizeof(opal_btl_usnic_ack_segment_t) +
|
sizeof(opal_btl_usnic_ack_segment_t),
|
||||||
mca_btl_usnic_component.prefix_send_offset,
|
|
||||||
opal_cache_line_size,
|
opal_cache_line_size,
|
||||||
OBJ_CLASS(opal_btl_usnic_ack_segment_t),
|
OBJ_CLASS(opal_btl_usnic_ack_segment_t),
|
||||||
ack_segment_len,
|
ack_segment_len,
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user