Bug 1385

Summary: rt_bitops.h fails to give implied atomicity guarantees
Product: DPDK Reporter: Mattias Rönnblom (mattias.ronnblom)
Component: coreAssignee: dev
Status: UNCONFIRMED ---    
Severity: normal    
Priority: Normal    
Version: 23.11   
Target Milestone: ---   
Hardware: All   
OS: All   

Description Mattias Rönnblom 2024-02-26 10:56:53 CET
The documentation (and the naming) for the rte_bit_relaxed_*() functions in rte_bitops.h makes clear that all such functions have a relaxed memory order.

The use of the term "relaxed", which most C programmers likely are familiar with from the C11 memory model specification, itself implies that the operations are supposed to be atomic. Why otherwise mention the memory operations are relaxed? Relaxed is the default for non-atomic loads and stores. In addition, why otherwise declare the address as volatile?

An even stronger indication are the test-and-set family of "relaxed" rte_bitops.h functions. "Test-and-set" in the low-level C programming context always implies an atomic operation. A non-atomic test-and-set does not make sense.

In summary, a perfectly valid interpretation of the API contract is that the functions are atomic.

However, their implementation is not, which may not be obvious to the causal API user.