Protect openib_btl->device data with explicit opal_mitex locks.
Этот коммит содержится в:
родитель
e06bffe213
Коммит
3c2f6d5560
@ -210,7 +210,6 @@ static int adjust_cq(mca_btl_openib_device_t *device, const int cq)
|
|||||||
return OPAL_ERROR;
|
return OPAL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
OPAL_THREAD_LOCK(&device->device_lock);
|
|
||||||
if (!device->progress) {
|
if (!device->progress) {
|
||||||
int rc;
|
int rc;
|
||||||
device->progress = true;
|
device->progress = true;
|
||||||
@ -219,7 +218,6 @@ static int adjust_cq(mca_btl_openib_device_t *device, const int cq)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OPAL_THREAD_UNLOCK(&device->device_lock);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#ifdef HAVE_IBV_RESIZE_CQ
|
#ifdef HAVE_IBV_RESIZE_CQ
|
||||||
@ -406,7 +404,7 @@ static int create_srq(mca_btl_openib_module_t *openib_btl)
|
|||||||
return OPAL_SUCCESS;
|
return OPAL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mca_btl_openib_size_queues(struct mca_btl_openib_module_t* openib_btl, size_t nprocs)
|
static int mca_btl_openib_size_queues_nolock(struct mca_btl_openib_module_t* openib_btl, size_t nprocs)
|
||||||
{
|
{
|
||||||
uint32_t send_cqes, recv_cqes;
|
uint32_t send_cqes, recv_cqes;
|
||||||
int rc = OPAL_SUCCESS, qp;
|
int rc = OPAL_SUCCESS, qp;
|
||||||
@ -603,7 +601,7 @@ static int mca_btl_openib_tune_endpoint(mca_btl_openib_module_t* openib_btl,
|
|||||||
return OPAL_SUCCESS;
|
return OPAL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int prepare_device_for_use (mca_btl_openib_device_t *device)
|
static int prepare_device_for_use_nolock (mca_btl_openib_device_t *device)
|
||||||
{
|
{
|
||||||
mca_btl_openib_frag_init_data_t *init_data;
|
mca_btl_openib_frag_init_data_t *init_data;
|
||||||
int rc, length;
|
int rc, length;
|
||||||
@ -920,7 +918,12 @@ static int init_ib_proc_nolock(mca_btl_openib_module_t* openib_btl, mca_btl_open
|
|||||||
return OPAL_ERROR;
|
return OPAL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* protect device because several endpoints for different ib_proc's
|
||||||
|
* may be simultaneously initialized */
|
||||||
|
opal_mutex_lock(&openib_btl->device->device_lock);
|
||||||
endpoint->index = opal_pointer_array_add(openib_btl->device->endpoints, (void*)endpoint);
|
endpoint->index = opal_pointer_array_add(openib_btl->device->endpoints, (void*)endpoint);
|
||||||
|
opal_mutex_unlock(&openib_btl->device->device_lock);
|
||||||
|
|
||||||
if( 0 > endpoint->index ) {
|
if( 0 > endpoint->index ) {
|
||||||
OBJ_RELEASE(endpoint);
|
OBJ_RELEASE(endpoint);
|
||||||
return OPAL_ERROR;
|
return OPAL_ERROR;
|
||||||
@ -981,21 +984,21 @@ int mca_btl_openib_add_procs(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* protect the device */
|
/* protect the device */
|
||||||
opal_mutex_lock(&mca_btl_openib_component.ib_lock);
|
opal_mutex_lock(&openib_btl->device->device_lock);
|
||||||
rc = prepare_device_for_use (openib_btl->device);
|
rc = prepare_device_for_use_nolock (openib_btl->device);
|
||||||
if (OPAL_SUCCESS != rc) {
|
if (OPAL_SUCCESS != rc) {
|
||||||
BTL_ERROR(("could not prepare openib device for use"));
|
BTL_ERROR(("could not prepare openib device for use"));
|
||||||
opal_mutex_unlock(&mca_btl_openib_component.ib_lock);
|
opal_mutex_unlock(&openib_btl->device->device_lock);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = mca_btl_openib_size_queues(openib_btl, nprocs);
|
rc = mca_btl_openib_size_queues_nolock(openib_btl, nprocs);
|
||||||
if (OPAL_SUCCESS != rc) {
|
if (OPAL_SUCCESS != rc) {
|
||||||
BTL_ERROR(("error creating cqs"));
|
BTL_ERROR(("error creating cqs"));
|
||||||
opal_mutex_unlock(&mca_btl_openib_component.ib_lock);
|
opal_mutex_unlock(&openib_btl->device->device_lock);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
opal_mutex_unlock(&mca_btl_openib_component.ib_lock);
|
opal_mutex_unlock(&openib_btl->device->device_lock);
|
||||||
|
|
||||||
for (i = 0, local_procs = 0 ; i < (int) nprocs; i++) {
|
for (i = 0, local_procs = 0 ; i < (int) nprocs; i++) {
|
||||||
struct opal_proc_t* proc = procs[i];
|
struct opal_proc_t* proc = procs[i];
|
||||||
@ -1075,21 +1078,21 @@ struct mca_btl_base_endpoint_t *mca_btl_openib_get_ep (struct mca_btl_base_modul
|
|||||||
|
|
||||||
// TODO: shift to the separate function
|
// TODO: shift to the separate function
|
||||||
/* protect the device */
|
/* protect the device */
|
||||||
opal_mutex_lock(&mca_btl_openib_component.ib_lock);
|
opal_mutex_lock(&openib_btl->device->device_lock);
|
||||||
rc = prepare_device_for_use (openib_btl->device);
|
rc = prepare_device_for_use_nolock (openib_btl->device);
|
||||||
if (OPAL_SUCCESS != rc) {
|
if (OPAL_SUCCESS != rc) {
|
||||||
BTL_ERROR(("could not prepare openib device for use"));
|
BTL_ERROR(("could not prepare openib device for use"));
|
||||||
opal_mutex_unlock(&mca_btl_openib_component.ib_lock);
|
opal_mutex_unlock(&openib_btl->device->device_lock);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = mca_btl_openib_size_queues(openib_btl, 1);
|
rc = mca_btl_openib_size_queues_nolock(openib_btl, 1);
|
||||||
if (OPAL_SUCCESS != rc) {
|
if (OPAL_SUCCESS != rc) {
|
||||||
BTL_ERROR(("error creating cqs"));
|
BTL_ERROR(("error creating cqs"));
|
||||||
opal_mutex_unlock(&mca_btl_openib_component.ib_lock);
|
opal_mutex_unlock(&openib_btl->device->device_lock);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
opal_mutex_unlock(&mca_btl_openib_component.ib_lock);
|
opal_mutex_unlock(&openib_btl->device->device_lock);
|
||||||
|
|
||||||
|
|
||||||
if (NULL == (ib_proc = mca_btl_openib_proc_get_locked(proc, &is_new))) {
|
if (NULL == (ib_proc = mca_btl_openib_proc_get_locked(proc, &is_new))) {
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user