Emulate bugs in the old PSE code so that apm works again.

I do not yet understand why, but apm *depended* on the fact that the old
PSE code caused the first 1MB of ram to be mapped read/write because it
was in the same 4MB page as the kernel text+data+bss blob.

If anybody ever tried DISABLE_PSE before, apm would not work.

If your cpu did not have PSE, apm would not work there either (eg: 486).

This bug has been around for a Very Long Time.

The Pentium-4-fix commits did not emulate this unintended side effect of
the PSE post-early-boot fixup, and thus apm blew up.  I've added a hack to
emulate the bug until either apm is fixed or we set fire to our bridges.

This is bad though because it gives kernel mode code the opportunity
to accidently write to the first few megs of the general page pool
which is remapped at KERNBASE.  It needs to be fixed properly.
This commit is contained in:
Peter Wemm 2003-10-04 06:30:56 +00:00
parent d1dd20be6e
commit 708b44ba6f

View File

@ -788,7 +788,12 @@ no_kernend:
/* Map read-only from zero to the beginning of the kernel text section */
xorl %eax, %eax
#ifdef BURN_BRIDGES
xorl %edx,%edx
#else
/* XXX emulate bugs in the old PSE code so that apm works */
movl $PG_RW,%edx
#endif
movl $R(btext),%ecx
addl $PAGE_MASK,%ecx
shrl $PAGE_SHIFT,%ecx