[parisc-linux] Broken Cache Flushing in arch/parisc/kernel/signal.c.??

Randolph Chung Randolph Chung <randolph@tausq.org>
Tue, 12 Nov 2002 23:52:34 -0800


> +#if CACHE_FLUSHING_IS_NOT_BROKEN
>  	flush_icache_range((unsigned long) &frame->tramp[0],
>  			   (unsigned long) &frame->tramp[4]);
> +#else
> +       /* It should *always* be cache line-aligned, but the compiler
> +           sometimes screws up. */
> +       asm volatile("fdc 0(%%sr3,%0)\n\t"
> +                    "fdc %1(%%sr3,%0)\n\t"
> +                    "sync\n\t"
> +                    "fic 0(%%sr3,%0)\n\t"
> +                    "fic %1(%%sr3,%0)\n\t"
> +                    "sync\n\t"
> +                    : : "r" (frame->tramp), "r" (L1_CACHE_BYTES));
> +#endif
> +

<sigh>
this is partly my fault, since i thought we have unbroken cache flushing
and asked thibaut to check this in... now i see that the original code
flushes sr3 space, but flush_icache_range() flushes the kernel space...
oops!

perhaps we should just check the old code back in for now?

randolph
-- 
Randolph Chung
Debian GNU/Linux Developer, hppa/ia64 ports
http://www.tausq.org/