[PATCH v5 03/21] KVM: x86/mmu: Derive shadow MMU page role from parent
Lai Jiangshan
jiangshanlai at gmail.com
Sun May 15 23:54:55 PDT 2022
On Sat, May 14, 2022 at 4:28 AM David Matlack <dmatlack at google.com> wrote:
> -static hpa_t mmu_alloc_root(struct kvm_vcpu *vcpu, gfn_t gfn, gva_t gva,
> +static hpa_t mmu_alloc_root(struct kvm_vcpu *vcpu, gfn_t gfn, int quadrant,
> u8 level, bool direct)
> {
> + union kvm_mmu_page_role role;
> struct kvm_mmu_page *sp;
>
> - sp = kvm_mmu_get_page(vcpu, gfn, gva, level, direct, ACC_ALL);
> + role = vcpu->arch.mmu->root_role;
> + role.level = level;
> + role.direct = direct;
> + role.access = ACC_ALL;
> +
> + if (role.has_4_byte_gpte)
> + role.quadrant = quadrant;
> +
> + if (level <= vcpu->arch.mmu->cpu_role.base.level)
> + role.passthrough = 0;
> +
+ role.level = level;
+
+ if (role.has_4_byte_gpte)
+ role.quadrant = quadrant;
Only these lines are needed because of mmu->pae_root, others are
the same as vcpu->arch.mmu->root_role.
The argument @direct is vcpu->arch.mmu->root_role.direct.
vcpu->arch.mmu->root_role.access is always set to be ACC_ALL.
vcpu->arch.mmu->root_role.passthrough is 0 when mmu->pae_root is used.
Or if vcpu->arch.mmu->root_role.passthrough is 1, @level must be 5
and vcpu->arch.mmu->cpu_role.base.level must be 4, the code here
is useless.
More information about the kvm-riscv
mailing list