Module Name: src Committed By: maxv Date: Wed May 11 19:35:08 UTC 2016
Modified Files: src/sys/arch/amd64/amd64: locore.S mptramp.S Log Message: There is a bug in the way the secondary CPUs are launched on amd64. When CPU0 is launched, EFER_NXE is enabled in it, and it allows it to handle pages that have the NOX bit. When the secondary CPUs are launched, however, EFER_NXE is enabled only after paging is set in their %cr0. And therefore, between the moment when paging is enabled and the moment when EFER_NXE is enabled, the secondary CPUs cannot access pages that have the NOX bit - they crash if they try to. The funny thing is that in order to enable EFER_NXE, the secondary CPUs give a look at cpu_feature[2], which is in the DATA segment, which in turn could have the NOX bit. In other words, the secondary CPUs crash if the DATA segment is mapped with the NOX bit. Fix this by enabling EFER_NXE in the secondary CPUs before enabling paging. CPU0 initializes nox_flag to the 32bit version of PG_NX if NOX is supported; the secondary CPUs then use nox_flag to know whether NOX is supported. nox_flag will be used for other purposes soon. To generate a diff of this commit: cvs rdiff -u -r1.85 -r1.86 src/sys/arch/amd64/amd64/locore.S cvs rdiff -u -r1.20 -r1.21 src/sys/arch/amd64/amd64/mptramp.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.