Re: Fix locking in input
From: Manfred Spraul
Date: Sun Nov 23 2003 - 17:25:28 EST
Paul wrote:
Pavel Machek writes:
input uses "volatile signed char" as a shared variable between normal
and interrupt threads (look at _sendbyte()). Thats bad idea, this
switches it to atomic_t.
This change looks unnecessary to me - we aren't trying to increment or
decrement the variable, just set it and read it. Reading and writing
individual bytes is atomic on any platform we care about.
I think one platform (early ARM?) cannot access bytes directly, and
implement the access with read 16-bit, change 8-bit, write back 16 bit.
Reading/writing pointers or longs is atomic.
Pavel: Do you know that atomic_set and atomic_read aren't memory barriers?
I.e.
- psmouse->ack = 0;
+ atomic_set(&psmouse->ack, 0);
psmouse->acking = 1;
It's not guaranteed that all cpus will see psmouse->ack=0 before psmouse->acking=1. And adding the required memory barriers usually makes the code completely unreadable, thus I usually give up and switch to a spinlock.
--
Manfred
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/