Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Aug 2018 12:48:49 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r337838 - head/sys/amd64/amd64
Message-ID:  <201808151248.w7FCmnfQ012183@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Wed Aug 15 12:48:49 2018
New Revision: 337838
URL: https://svnweb.freebsd.org/changeset/base/337838

Log:
  Fix early EFIRT on PCID machines after r337773.
  
  Ensure that the valid PCID state is created for proc0 pmap, since it
  might be used by efirt enter() before first context switch on the BSP.
  
  Sponsored by:	The FreeBSD Foundation
  MFC after:	6 days

Modified:
  head/sys/amd64/amd64/pmap.c

Modified: head/sys/amd64/amd64/pmap.c
==============================================================================
--- head/sys/amd64/amd64/pmap.c	Wed Aug 15 12:12:21 2018	(r337837)
+++ head/sys/amd64/amd64/pmap.c	Wed Aug 15 12:48:49 2018	(r337838)
@@ -1188,8 +1188,16 @@ pmap_bootstrap(vm_paddr_t *firstaddr)
 			kernel_pmap->pm_pcids[i].pm_pcid = PMAP_PCID_KERN;
 			kernel_pmap->pm_pcids[i].pm_gen = 1;
 		}
-		PCPU_SET(pcid_next, PMAP_PCID_KERN + 1);
+
+		/*
+		 * PMAP_PCID_KERN + 1 is used for initialization of
+		 * proc0 pmap.  The pmap' pcid state might be used by
+		 * EFIRT entry before first context switch, so it
+		 * needs to be valid.
+		 */
+		PCPU_SET(pcid_next, PMAP_PCID_KERN + 2);
 		PCPU_SET(pcid_gen, 1);
+
 		/*
 		 * pcpu area for APs is zeroed during AP startup.
 		 * pc_pcid_next and pc_pcid_gen are initialized by AP
@@ -2651,8 +2659,8 @@ pmap_pinit0(pmap_t pmap)
 	bzero(&pmap->pm_stats, sizeof pmap->pm_stats);
 	pmap->pm_flags = pmap_flags;
 	CPU_FOREACH(i) {
-		pmap->pm_pcids[i].pm_pcid = PMAP_PCID_NONE;
-		pmap->pm_pcids[i].pm_gen = 0;
+		pmap->pm_pcids[i].pm_pcid = PMAP_PCID_KERN + 1;
+		pmap->pm_pcids[i].pm_gen = 1;
 		if (!pti) {
 			__pcpu[i].pc_kcr3 = PMAP_NO_CR3;
 			__pcpu[i].pc_ucr3 = PMAP_NO_CR3;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201808151248.w7FCmnfQ012183>