Re: Duron kernel crash (i686 works)

From: Steffen Persvold (sp@scali.no)
Date: Wed Sep 12 2001 - 05:51:55 EST


VDA wrote:
>
> >> ...
> >> kernel_fpu_end();
> >> + from-=4096;
> >> + to-=4096;
> >> + if(memcmp(from,to,4096)!=0) {
> >> + printk("Athlon bug!"); //add printout of from,to,...?
> >> + memcpy(to,from,4096);
> >> + }
> >> }
>
> RJD> I then get 'Athlon bug!' Still oopses.
>
> Waah! That means movntq's moved data to some other place in memory!
> memcmp detected that and memcpy fixed, but that 'other place' was
> corrupted and that's the cause of oops.
Well, not necessarily. It might be that data just hasn't "arrived" yet because
of the movntq instruction.

One thing that also puzzels me is that my is the fast_copy_page() routine laid
out like this :

                "2: movq (%0), %%mm0\n"
                " movntq %%mm0, (%1)\n"
                " movq 8(%0), %%mm1\n"
                " movntq %%mm1, 8(%1)\n"
                " movq 16(%0), %%mm2\n"
                " movntq %%mm2, 16(%1)\n"
                " movq 24(%0), %%mm3\n"
                " movntq %%mm3, 24(%1)\n"
                " movq 32(%0), %%mm4\n"
                " movntq %%mm4, 32(%1)\n"
                " movq 40(%0), %%mm5\n"
                " movntq %%mm5, 40(%1)\n"
                " movq 48(%0), %%mm6\n"
                " movntq %%mm6, 48(%1)\n"
                " movq 56(%0), %%mm7\n"
                " movntq %%mm7, 56(%1)\n"

When it's more intuitively more effective to fill the registers with reads first
and then write it with "movntq" like this :

                "2: movq (%0), %%mm0\n"
                " movq 8(%0), %%mm1\n"
                " movq 16(%0), %%mm2\n"
                " movq 24(%0), %%mm3\n"
                " movq 32(%0), %%mm4\n"
                " movq 40(%0), %%mm5\n"
                " movq 48(%0), %%mm6\n"
                " movq 56(%0), %%mm7\n"
                " movntq %%mm0, (%1)\n"
                " movntq %%mm1, 8(%1)\n"
                " movntq %%mm2, 16(%1)\n"
                " movntq %%mm3, 24(%1)\n"
                " movntq %%mm4, 32(%1)\n"
                " movntq %%mm5, 40(%1)\n"
                " movntq %%mm6, 48(%1)\n"
                " movntq %%mm7, 56(%1)\n"

Regards,

-- 
  Steffen Persvold   |  Scali Computer AS   |   Try out the world's best   
 mailto:sp@scali.no  | http://www.scali.com | performing MPI implementation:
Tel: (+47) 2262 8950 |  Olaf Helsets vei 6  |      - ScaMPI 1.12.2 -         
Fax: (+47) 2262 8951 |  N0621 Oslo, NORWAY  | >300MBytes/s and <4uS latency
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Sep 15 2001 - 21:00:36 EST