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/