Hi Alex,
On 2020-05-12 17:53, Alexandru Elisei wrote:
Hi,
On 5/12/20 12:17 PM, James Morse wrote:
Hi Alex, Marc,
(just on this last_vcpu_ran thing...)
On 11/05/2020 17:38, Alexandru Elisei wrote:
On 4/22/20 1:00 PM, Marc Zyngier wrote:
From: Christoffer Dall <christoffer.dall@xxxxxxx>
As we are about to reuse our stage 2 page table manipulation code
for
shadow stage 2 page tables in the context of nested virtualization,
we
are going to manage multiple stage 2 page tables for a single VM.
This requires some pretty invasive changes to our data structures,
which moves the vmid and pgd pointers into a separate structure and
change pretty much all of our mmu code to operate on this structure
instead.
The new structure is called struct kvm_s2_mmu.
There is no intended functional change by this patch alone.
diff --git a/arch/arm64/include/asm/kvm_host.h
b/arch/arm64/include/asm/kvm_host.h
index 7dd8fefa6aecd..664a5d92ae9b8 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -63,19 +63,32 @@ struct kvm_vmid {
u32 vmid;
};
-struct kvm_arch {
+struct kvm_s2_mmu {
struct kvm_vmid vmid;
- /* stage2 entry level table */
- pgd_t *pgd;
- phys_addr_t pgd_phys;
-
- /* VTCR_EL2 value for this VM */
- u64 vtcr;
+ /*
+ * stage2 entry level table
+ *
+ * Two kvm_s2_mmu structures in the same VM can point to the same
pgd
+ * here. This happens when running a non-VHE guest hypervisor
which
+ * uses the canonical stage 2 page table for both vEL2 and for
vEL1/0
+ * with vHCR_EL2.VM == 0.
It makes more sense to me to say that a non-VHE guest hypervisor will
use the
canonical stage *1* page table when running at EL2
Can KVM say anything about stage1? Its totally under the the guests
control even at vEL2...
It just occurred to me that "canonical stage 2 page table" refers to
the L0
hypervisor stage 2, not to the L1 hypervisor stage 2. If you don't mind
my
suggestion, perhaps the comment can be slightly improved to avoid any
confusion?
Maybe something along the lines of "[..] This happens when running a
non-VHE guest
hypervisor, in which case we use the canonical stage 2 page table for
both vEL2
and for vEL1/0 with vHCR_EL2.VM == 0".
If the confusion stems from the lack of guest stage-2, how about:
"This happens when running a guest using a translation regime that isn't
affected by its own stage-2 translation, such as a non-VHE hypervisor
running at vEL2, or for vEL1/EL0 with vHCR_EL2.VM == 0. In that case,
we use the canonical stage-2 page tables."
instead? Does this lift the ambiguity?
Thanks,
M.
--
Jazz is not dead. It just smells funny...
_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm