Skip to content

Commit 48a7a0b

Browse files
committed
oshmem: lock: call opal_progress only when busy waiting
Signed-off-by: Alex Mikheev <[email protected]>
1 parent bf61961 commit 48a7a0b

File tree

1 file changed

+42
-30
lines changed

1 file changed

+42
-30
lines changed

oshmem/shmem/c/shmem_lock.c

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -270,10 +270,22 @@ static uint64_t shmem_lock_cswap(void *target,
270270

271271
prev_value = prev_value_32;
272272
}
273-
/* function is used to busy wait for the value.
274-
* Call opal_progress() so that ompi will no deadlock
275-
* (for example may need to respond to rkey requests)
276-
*/
273+
return prev_value;
274+
}
275+
276+
/* function is used to busy wait for the value.
277+
* Call opal_progress() so that ompi will no deadlock
278+
* (for example may need to respond to rkey requests)
279+
*/
280+
static uint64_t shmem_lock_cswap_poll(void *target,
281+
int target_size,
282+
uint64_t cond,
283+
uint64_t value,
284+
int pe)
285+
{
286+
uint64_t prev_value;
287+
288+
prev_value = shmem_lock_cswap(target, target_size, cond, value, pe);
277289
opal_progress();
278290
return prev_value;
279291
}
@@ -320,11 +332,11 @@ static int pack_first_word(void *lock,
320332
extract_second_word(&lock_value, lock_size, &two);
321333
pack_2_words(&new_long_value, lock_size, one, &two);
322334
while (lock_value
323-
!= (temp = shmem_lock_cswap(lock,
324-
lock_size,
325-
lock_value,
326-
new_long_value,
327-
my_pe))) {
335+
!= (temp = shmem_lock_cswap_poll(lock,
336+
lock_size,
337+
lock_value,
338+
new_long_value,
339+
my_pe))) {
328340
lock_value = temp;
329341
extract_second_word(&lock_value, lock_size, &two);
330342
pack_2_words(&new_long_value, lock_size, one, &two);
@@ -371,11 +383,11 @@ static int pack_second_word(void *lock,
371383
extract_first_word(&lock_value, lock_size, &one);
372384
pack_2_words(&new_long_value, lock_size, &one, two);
373385
while (lock_value
374-
!= (temp = shmem_lock_cswap(lock,
375-
lock_size,
376-
lock_value,
377-
new_long_value,
378-
my_pe))) {
386+
!= (temp = shmem_lock_cswap_poll(lock,
387+
lock_size,
388+
lock_value,
389+
new_long_value,
390+
my_pe))) {
379391
lock_value = temp;
380392
extract_first_word(&lock_value, lock_size, &one);
381393
pack_2_words(&new_long_value, lock_size, &one, two);
@@ -695,11 +707,11 @@ static int shmem_lock_wait_for_ticket(void *lock,
695707
new_server_lock = server_lock = temp;
696708
lock_pack_pe_last(&new_server_lock, lock_size, &my_pe, 0);
697709
} while (server_lock
698-
!= (temp = shmem_lock_cswap(lock,
699-
lock_size,
700-
server_lock,
701-
new_server_lock,
702-
server_pe)));
710+
!= (temp = shmem_lock_cswap_poll(lock,
711+
lock_size,
712+
server_lock,
713+
new_server_lock,
714+
server_pe)));
703715
lock_extract_pe_last(&server_lock, lock_size, pe_last);
704716
if (*pe_last == -1) {
705717
/* we are first in queue for the lock */
@@ -755,11 +767,11 @@ static int shmem_lock_subscribe_for_informing(void *lock,
755767
prev_remote_value += my_pe + 1;
756768

757769
while (prev_remote_value
758-
!= (temp_value = shmem_lock_cswap(lock,
759-
lock_size,
760-
prev_remote_value,
761-
new_remote_value,
762-
pe_last))) {
770+
!= (temp_value = shmem_lock_cswap_poll(lock,
771+
lock_size,
772+
prev_remote_value,
773+
new_remote_value,
774+
pe_last))) {
763775
prev_remote_value = temp_value;
764776
lock_extract_counter(&prev_remote_value,
765777
lock_size,
@@ -853,11 +865,11 @@ static int shmem_lock_inform_next(void *lock, int lock_size, int pe_next)
853865
| (((uint64_t) 1) << (lock_bitwise_size - 1));
854866

855867
while (remote_value
856-
!= (temp_value = shmem_lock_cswap(lock,
857-
lock_size,
858-
remote_value,
859-
new_remote_value,
860-
pe_next))) {
868+
!= (temp_value = shmem_lock_cswap_poll(lock,
869+
lock_size,
870+
remote_value,
871+
new_remote_value,
872+
pe_next))) {
861873
remote_value = temp_value;
862874
new_remote_value = remote_value
863875
| (((uint64_t) 1) << (lock_bitwise_size - 1));
@@ -942,7 +954,7 @@ static int shmem_lock_try_inform_server(void *lock, int lock_size)
942954
&incorrect_pe,
943955
&my_pe);
944956
return !(remote_value
945-
== shmem_lock_cswap(lock, lock_size, remote_value, zero, server_pe));
957+
== shmem_lock_cswap_poll(lock, lock_size, remote_value, zero, server_pe));
946958
}
947959

948960
/***************************************************************************/

0 commit comments

Comments
 (0)