On Wed, Sep 22, 2021 at 03:02:32PM +0200, Sebastian Andrzej Siewior wrote:
On 2021-09-22 13:38:20 [+0200], Frederic Weisbecker wrote:
quoted
quoted
So you rely on some implicit behaviour which breaks with RT such as:
CPU 0
-----------------------------------------------
RANDOM TASK-A RANDOM TASK-B
------ -----------
int *X = &per_cpu(CPUX, 0) int *X = &per_cpu(CPUX, 0)
int A, B;
spin_lock(&D);
spin_lock(&C);
WRITE_ONCE(*X, 0);
A = READ_ONCE(*X);
WRITE_ONCE(*X, 1);
B = READ_ONCE(*X);
while spinlock C and D are just random locks not related to CPUX but it
just happens that they are held at that time. So for !RT you guarantee
that A == B while it is not the case on RT.
Not sure which spinlocks you are referring to here. Also most RCU spinlocks
are raw.
I was bringing an example where you also could rely on implicit locking
provided by spin_lock() which breaks on RT.
Good point!