1
1

Merge branch 'topic/oshmem_shared_mr_fix'

Этот коммит содержится в:
Alex Mikheev 2014-10-13 15:24:12 +03:00
родитель a1db93077d cd67642183
Коммит 8fcbcba516
2 изменённых файлов: 10 добавлений и 8 удалений

Просмотреть файл

@ -221,14 +221,15 @@ verbs_runtime_query(mca_base_module_t **module,
out: out:
if (device) { 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** array;
struct ibv_mr* ib_mr = NULL; struct ibv_mr* ib_mr = NULL;
array = OPAL_VALUE_ARRAY_GET_BASE(&device->ib_mr_array, struct ibv_mr *); array = OPAL_VALUE_ARRAY_GET_BASE(&device->ib_mr_array, struct ibv_mr *);
while (opal_value_array_get_size(&device->ib_mr_array) > 0) { /* destruct shared_mr first in order to avoid proc fs race */
ib_mr = array[0]; for (i--;i >= 0; i--) {
ib_mr = array[i];
ibv_dereg_mr(ib_mr); 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) { if (device->ib_mr_shared) {

Просмотреть файл

@ -416,6 +416,7 @@ segment_detach(map_segment_t *ds_buf, sshmem_mkey_t *mkey)
{ {
int rc = OSHMEM_SUCCESS; int rc = OSHMEM_SUCCESS;
openib_device_t *device = &memheap_device; openib_device_t *device = &memheap_device;
int i;
assert(ds_buf); assert(ds_buf);
@ -429,12 +430,12 @@ segment_detach(map_segment_t *ds_buf, sshmem_mkey_t *mkey)
); );
if (device) { 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** array;
struct ibv_mr* ib_mr = NULL; struct ibv_mr* ib_mr = NULL;
array = OPAL_VALUE_ARRAY_GET_BASE(&device->ib_mr_array, struct ibv_mr *); array = OPAL_VALUE_ARRAY_GET_BASE(&device->ib_mr_array, struct ibv_mr *);
while (opal_value_array_get_size(&device->ib_mr_array) > 0) { for (i--;i >= 0; i--) {
ib_mr = array[0]; ib_mr = array[i];
if(ibv_dereg_mr(ib_mr)) { if(ibv_dereg_mr(ib_mr)) {
OPAL_OUTPUT_VERBOSE( OPAL_OUTPUT_VERBOSE(
(5, oshmem_sshmem_base_framework.framework_output, (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; 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) { if (!rc && device->ib_mr_shared) {