Re: why volatile on vgacon.c?

From: Jeff Garzik (jgarzik@mandrakesoft.mandrakesoft.com)
Date: Sat Dec 02 2000 - 06:20:29 EST


On Wed, 29 Nov 2000, Andries Brouwer wrote:
> On Wed, Nov 29, 2000 at 05:24:15PM +0100, Santiago Garcia Mantinan wrote:
> > That was on 2.2 series, but since I moved it to 2.4 series I don't have that
> > cga card found anymore. I have looked on the kernel code and followed it to
> > the __init function in vgacon.c, more concretely this piece of code...

> > scr_writew(0xAA55, p);
> > scr_writew(0x55AA, p + 1);
> > if (scr_readw(p) != 0xAA55 || scr_readw(p + 1) != 0x55AA) {

> > Well, the thing is that this code and the code in this function is almost
> > the same in 2.4 as in 2.2, however reading returns the written values on 2.2
> > and different ones (0xffff) on 2.4

> Probably without the volatile the compiler optimizes the entire
> if statement away because it very well knows that it just wrote
> these values there. With the volatile it has to check, and finds
> that there is nothing there.

hmmm. That's why barriers exist, right?

        Jeff

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Dec 07 2000 - 21:00:08 EST