Merge branch 'topic/oshmem_shared_mr_fix'
Этот коммит содержится в:
Коммит
8fcbcba516
@ -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) {
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user