Bug 1385 - rt_bitops.h fails to give implied atomicity guarantees
Summary: rt_bitops.h fails to give implied atomicity guarantees
Status: UNCONFIRMED
Alias: None
Product: DPDK
Classification: Unclassified
Component: core (show other bugs)
Version: 23.11
Hardware: All All
: Normal normal
Target Milestone: ---
Assignee: dev
URL:
Depends on:
Blocks:
 
Reported: 2024-02-26 10:56 CET by Mattias Rönnblom
Modified: 2024-02-26 10:56 CET (History)
0 users



Attachments

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.

Note You need to log in before you can comment on or make changes to this bug.