nvmf: upgrade to C11 atomics
Replace legacy __sync builtins with C11 __atomic ones to leverage fine memory order controlling. Signed-off-by: Richael Zhuang <richael.zhuang@arm.com> Change-Id: I8a1e976be6a0db73af4451a39a8f544310c72989 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/463458 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
This commit is contained in:
parent
1399a42bbc
commit
644fc12061
@ -2822,7 +2822,7 @@ _nvmf_rdma_try_disconnect(void *ctx)
|
||||
static inline void
|
||||
spdk_nvmf_rdma_start_disconnect(struct spdk_nvmf_rdma_qpair *rqpair)
|
||||
{
|
||||
if (__sync_bool_compare_and_swap(&rqpair->disconnect_started, false, true)) {
|
||||
if (!__atomic_test_and_set(&rqpair->disconnect_started, __ATOMIC_RELAXED)) {
|
||||
_nvmf_rdma_try_disconnect(&rqpair->qpair);
|
||||
}
|
||||
}
|
||||
|
@ -376,6 +376,7 @@ spdk_nvmf_subsystem_set_state(struct spdk_nvmf_subsystem *subsystem,
|
||||
enum spdk_nvmf_subsystem_state state)
|
||||
{
|
||||
enum spdk_nvmf_subsystem_state actual_old_state, expected_old_state;
|
||||
bool exchanged;
|
||||
|
||||
switch (state) {
|
||||
case SPDK_NVMF_SUBSYSTEM_INACTIVE:
|
||||
@ -404,8 +405,10 @@ spdk_nvmf_subsystem_set_state(struct spdk_nvmf_subsystem *subsystem,
|
||||
return -1;
|
||||
}
|
||||
|
||||
actual_old_state = __sync_val_compare_and_swap(&subsystem->state, expected_old_state, state);
|
||||
if (actual_old_state != expected_old_state) {
|
||||
actual_old_state = expected_old_state;
|
||||
exchanged = __atomic_compare_exchange_n(&subsystem->state, &actual_old_state, state, false,
|
||||
__ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
||||
if (spdk_unlikely(exchanged == false)) {
|
||||
if (actual_old_state == SPDK_NVMF_SUBSYSTEM_RESUMING &&
|
||||
state == SPDK_NVMF_SUBSYSTEM_ACTIVE) {
|
||||
expected_old_state = SPDK_NVMF_SUBSYSTEM_RESUMING;
|
||||
@ -415,7 +418,9 @@ spdk_nvmf_subsystem_set_state(struct spdk_nvmf_subsystem *subsystem,
|
||||
state == SPDK_NVMF_SUBSYSTEM_DEACTIVATING) {
|
||||
expected_old_state = SPDK_NVMF_SUBSYSTEM_ACTIVATING;
|
||||
}
|
||||
actual_old_state = __sync_val_compare_and_swap(&subsystem->state, expected_old_state, state);
|
||||
actual_old_state = expected_old_state;
|
||||
__atomic_compare_exchange_n(&subsystem->state, &actual_old_state, state, false,
|
||||
__ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
||||
}
|
||||
assert(actual_old_state == expected_old_state);
|
||||
return actual_old_state - expected_old_state;
|
||||
|
Loading…
Reference in New Issue
Block a user