Prepare pmap for using the AMD SEV C-bit to encrypt guest memory.
authorbluhm <bluhm@openbsd.org>
Tue, 9 Jul 2024 19:11:06 +0000 (19:11 +0000)
committerbluhm <bluhm@openbsd.org>
Tue, 9 Jul 2024 19:11:06 +0000 (19:11 +0000)
commit4fb1029394b576c51b109300b01be3fdf22069ff
tree0207154b61f1ea920a99945db2fce6a05ac41297
parent7c53afb73ffc0234b8c29e3f6a953ff1858bfff7
Prepare pmap for using the AMD SEV C-bit to encrypt guest memory.

The C-bit in a page table entry is used by a SEV guest to specify,
which pages are to be encrypted and which not.  The latter is needed
to share pages with the hypervisor for virtio(4).
The actual position of the C-bit within a PTE is CPU implementation
dependend and needs to be determined dynamically at system boot.
The position of the C-bit also determines the actual size of page
frame mask.  This will be provided by a separate change.
To be able to use the same kernel as both host and guest, the C-bit
is provided as variable similar to the NX-bit.  Same holds for the
page frame masks.
Right now, pg_crypt is set to 0, pg_frame an pg_lgframe to PG_FRAME
and PG_LGFRAME respectively.  Thus the kernel works as a host system
same as before.
Also introduce a PMAP_NOCRYPT flag.  A guest will use this with
busdma to establish unencrypted mappings that can be shared with
the hypervisor.

from hshoexer@; OK mlarkin@
sys/arch/amd64/amd64/pmap.c
sys/arch/amd64/include/pmap.h
sys/arch/amd64/include/pte.h