On Thu, Sep 07, 2000 at 03:20:27AM +0900, OKUJI Yoshinori wrote: > From: Roland McGrath <[EMAIL PROTECTED]> > Subject: Re: Problems with oskit-mach > Date: Wed, 6 Sep 2000 13:30:55 -0400 (EDT) > > > It is certainly harmless to disable the code that uses PGE. It is just an > > optimization. It would be helpful to figure out exactly when it is and > > isn't safe to use this feature, by looking at the code in Linux or BSD that > > decides whether to try to use it. > > You need to check bit 13 of %edx returned by "cpuid 1". This is a > releavant part of FreeBSD (in i386/i386/locore.s): > > movl $1,%eax > .byte 0x0f,0xa2 # cpuid 1 > movl %eax,R(_cpu_id) # store cpu_id > movl %edx,R(_cpu_feature) # store cpu_feature > [snip] > testl $CPUID_PGE, R(_cpu_feature) > jz 1f > movl %cr4, %eax > orl $CR4_PGE, %eax > movl %eax, %cr4 > 1: > > Thus, this kind of code would be enough: > > #include <oskit/x86/cpuid.h> > #include <oskit/x86/proc_reg.h> > > ... > > struct cpu_info cpu_info; > > cpuid (&cpu_info); > if (cpu_info.feature_flags & CPUF_PAGE_GLOBAL_EXT) > set_cr4 (get_cr4 () & CR4_PGE); > > Okuji
Actually almost this exact code is already in [gnumach]/i386/intel/pmap.c. The cpuid instruction itself should be in and #if defined(i586) || defined(i686), I don't remember if that's actually done in oskit or not. The problem with K6 cpus is that they set bit 13 in %edx after the cpuid instruction but actually crash at the code that tries to enable PGE in %cr4. I can't confirm that it's a definite bug in all K6's I'll try to look for more info about that. Igor -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

