Merge branch 'topic/oshmem_shared_mr_fix'
Этот коммит содержится в:
Коммит
8fcbcba516
oshmem/mca/sshmem/verbs
@ -221,14 +221,15 @@ verbs_runtime_query(mca_base_module_t **module,
|
||||
|
||||
out:
|
||||
if (device) {
|
||||
if (opal_value_array_get_size(&device->ib_mr_array)) {
|
||||
if (0 < (i = opal_value_array_get_size(&device->ib_mr_array))) {
|
||||
struct ibv_mr** array;
|
||||
struct ibv_mr* ib_mr = NULL;
|
||||
array = OPAL_VALUE_ARRAY_GET_BASE(&device->ib_mr_array, struct ibv_mr *);
|
||||
while (opal_value_array_get_size(&device->ib_mr_array) > 0) {
|
||||
ib_mr = array[0];
|
||||
/* destruct shared_mr first in order to avoid proc fs race */
|
||||
for (i--;i >= 0; i--) {
|
||||
ib_mr = array[i];
|
||||
ibv_dereg_mr(ib_mr);
|
||||
opal_value_array_remove_item(&device->ib_mr_array, 0);
|
||||
opal_value_array_remove_item(&device->ib_mr_array, i);
|
||||
}
|
||||
|
||||
if (device->ib_mr_shared) {
|
||||
|
@ -416,6 +416,7 @@ segment_detach(map_segment_t *ds_buf, sshmem_mkey_t *mkey)
|
||||
{
|
||||
int rc = OSHMEM_SUCCESS;
|
||||
openib_device_t *device = &memheap_device;
|
||||
int i;
|
||||
|
||||
assert(ds_buf);
|
||||
|
||||
@ -429,12 +430,12 @@ segment_detach(map_segment_t *ds_buf, sshmem_mkey_t *mkey)
|
||||
);
|
||||
|
||||
if (device) {
|
||||
if (opal_value_array_get_size(&device->ib_mr_array)) {
|
||||
if (0 < (i = opal_value_array_get_size(&device->ib_mr_array))) {
|
||||
struct ibv_mr** array;
|
||||
struct ibv_mr* ib_mr = NULL;
|
||||
array = OPAL_VALUE_ARRAY_GET_BASE(&device->ib_mr_array, struct ibv_mr *);
|
||||
while (opal_value_array_get_size(&device->ib_mr_array) > 0) {
|
||||
ib_mr = array[0];
|
||||
for (i--;i >= 0; i--) {
|
||||
ib_mr = array[i];
|
||||
if(ibv_dereg_mr(ib_mr)) {
|
||||
OPAL_OUTPUT_VERBOSE(
|
||||
(5, oshmem_sshmem_base_framework.framework_output,
|
||||
@ -443,7 +444,7 @@ segment_detach(map_segment_t *ds_buf, sshmem_mkey_t *mkey)
|
||||
);
|
||||
rc = OSHMEM_ERROR;
|
||||
}
|
||||
opal_value_array_remove_item(&device->ib_mr_array, 0);
|
||||
opal_value_array_remove_item(&device->ib_mr_array, i);
|
||||
}
|
||||
|
||||
if (!rc && device->ib_mr_shared) {
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user