On Thu, Nov 08, 2012 at 01:23:13PM +0100, Joel Dahl wrote:
> On 08-11-2012 12:55, Andriy Gapon wrote:
> > on 08/11/2012 10:45 Joel Dahl said the following:
> > > Hi,
> > > 
> > > I rebuilt head (r242605) in a VMware virtual machine a couple of days 
> > > ago, and
> > > now it won't boot anymore. The loader menu appears, the countdown starts, 
> > > and boom,
> > > reboot. I tried a fresh head (r242700) but the problem remains.
> > > 
> > > Going back to r242205 solves the problem, so this was introduced somewhere
> > > between r242205 and r242605.
> > > 
> > > I managed to record the entire thing with my phone before I had to leave 
> > > for
> > > work today. You can see it here:
> > > 
> > >   http://mirror.vnode.se/upload/head-reboots.mov
> > > 
> > > Any ideas? Any specific revision I should try to back out?
> > > 
> > 
> > Rather wild guess - try to back out the recent SMEP commit.
> 
> Well, it was a good guess. :-) I backed out revision 242433, rebuilt the 
> kernel,
> and now it boots again.

The following patch should allow you to boot. Please show me the verbose dmesg
of the boot with the patch applied.

diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 06b45b2..7846194 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -598,6 +598,7 @@ pmap_bootstrap(vm_paddr_t *firstaddr)
 {
        vm_offset_t va;
        pt_entry_t *pte, *unused;
+       int smep_enable;
 
        /*
         * Create an initial set of page tables to run the kernel in.
@@ -613,8 +614,16 @@ pmap_bootstrap(vm_paddr_t *firstaddr)
        /* XXX do %cr0 as well */
        load_cr4(rcr4() | CR4_PGE | CR4_PSE);
        load_cr3(KPML4phys);
-       if (cpu_stdext_feature & CPUID_STDEXT_SMEP)
-               load_cr4(rcr4() | CR4_SMEP);
+       if (cpu_stdext_feature & CPUID_STDEXT_SMEP) {
+               smep_enable = 0;
+               TUNABLE_INT_FETCH("hw.smep_enable", &smep_enable);
+               if (smep_enable)
+                       load_cr4(rcr4() | CR4_SMEP);
+               else {
+                       cpu_stdext_feature &= ~CPUID_STDEXT_SMEP;
+                       printf("SMEP: disabled\n");
+               }
+       }
 
        /*
         * Initialize the kernel pmap (which is statically allocated).

Attachment: pgptx92CsiT0u.pgp
Description: PGP signature

Reply via email to