core: Fix page_map_get_guest_page for non-identically mapped guests

We were missing a final gphys-to-phys translation before mapping the
guest page.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
core: Introduce and apply guest_paging_structures

Just like paging_structures describes a host-side page table hierarchy
via its paging mode and the root table pointer, guest_paging_structures
shall now provide information about the guest-side page table. The only
but important difference is that the reference to the root table is a
guest-physical address. Therefore, to avoid mixing up with host-side
table, we use different types.

This abstraction will help passing a guest page table reference around.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
x86: Detect and use guest paging mode for MMIO parsing

This fixes the assumption our guests would only trigger MMIO in IA32e
mode. This does not handle other modes yet, but it lays the foundation
and prevents misinterpreting paging structures.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
x86: Add 32-bit guest paging support

This adds support for reading 32-bit guest page tables, including 4 MB
hugepages. Creating such tables is neither needed nor supported.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
x86: Move and rename TSS_BUSY_FLAG to TSS_BUSY_FLAG

It's a descriptor flag that should be kept close to its siblings.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>