Re: Reboot during startup with recent head

From: Konstantin Belousov <kostikbel_at_gmail.com>
Date: Thu, 8 Nov 2012 16:33:20 +0200
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
_at__at_ -598,6 +598,7 _at__at_ 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.
_at__at_ -613,8 +614,16 _at__at_ 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).

Received on Thu Nov 08 2012 - 13:33:25 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:32 UTC