Athlon/VIA Kernel Experimentation (mmx.c)

Seth Goldberg
2001-05-04T09:57:53Z

Hi,

I implemented a small check loop at the end of the fast_page_copy
routine in mmx.c for the Athlon. Booting the resulting kernel
yields an interesting result. Every single time, the kernel
panics RIGHT AFTER it frees unused kernel memory from bootup.
I encourage those of you with the same problem to try this and report
when it panics.

Here is my patch to mmx.c: (sorry about the long lines)
-----------------------------------------------------cut here
diff -r linux-ref/arch/i386/lib/mmx.c linux/arch/i386/lib/mmx.c
204a205,216
>
> {
> register int x = 0;
> /* do mem compares to ensure written == read */
> for ( /* initted above */; x < (4096/sizeof(int)); x++ )
> {
> if ( ((int *)to)[x] != ((int *)from)[x] ) {
> panic("fast_page_copy: dest value @ 0x%lx (%x) does not equal source value @ %lx (%x)!\n",
> (long) to, ((int *)to)[x], (long) from, ((int *) from)[x] );
> }
> }
> }
-----------------------------------------------------cut here

Wouldn't it be correct to say that because it is panicking, the
page copy was not completed properly? If that is so, the next step
is to find out why this copy is not working properly...

For me the output is:

...
Freeing unused kernel memory: 188k freed
Kernel panic: fast_page_copy: dest value @ 0xcfed1000 (39312036) does
not equal source value @ cfed4000(79005b)!

--------

It is interesting to note that these addresses are page aligned, meaning
that the copy of even
the first byte failed!

--Seth