For virtual addresses use fixed page frame without AMD SEV reduction.
authorbluhm <bluhm@openbsd.org>
Tue, 3 Sep 2024 17:19:53 +0000 (17:19 +0000)
committerbluhm <bluhm@openbsd.org>
Tue, 3 Sep 2024 17:19:53 +0000 (17:19 +0000)
commitbe4dcae9074d3088c4d79cb11b24a4018b77fba9
treee2639853931307c0da661f970ff00f4adbbab1db
parenta422177e75712710c5f5356048abf3d14aa363b3
For virtual addresses use fixed page frame without AMD SEV reduction.

When running as a SEV guest, page frame mask is calculated from the
CPUID provided "physical address bit reduction".  The amd64 pmap
code uses the variable pg_frame instead of the defined PG_FRAME
0x000ffffffffff000.
There was one instance in pmap code where pg_frame was applied to
virtual address, not physical address.  On some machines the address
bit reduction is rather large with six bits.  So the calculated
pg_frame is 0x00003fffffe00000.  However, on amd64 VM_MAX_ADDRESS
is defined as 0x00007fbfdfeff000.  Masking a such large address
with pg_frame caused havoc.  Therefore, when masking virtual
addresses, still use PG_FRAME.

from hshoexer@
sys/arch/amd64/amd64/pmap.c