@@ -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