[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87sgjpkve2.fsf@vitty.brq.redhat.com>
Date: Wed, 05 Feb 2020 14:37:25 +0100
From: Vitaly Kuznetsov <vkuznets@...hat.com>
To: Ben Gardon <bgardon@...gle.com>
Cc: Paolo Bonzini <pbonzini@...hat.com>, Peter Xu <peterx@...hat.com>,
Sean Christopherson <sean.j.christopherson@...el.com>,
Peter Shier <pshier@...gle.com>,
Oliver Upton <oupton@...gle.com>, linux-kernel@...r.kernel.org,
kvm@...r.kernel.org, linux-kselftest@...r.kernel.org
Subject: Re: [PATCH 2/3] kvm: mmu: Separate generating and setting mmio ptes
Ben Gardon <bgardon@...gle.com> writes:
> Separate the functions for generating MMIO page table entries from the
> function that inserts them into the paging structure. This refactoring
> will facilitate changes to the MMU sychronization model to use atomic
> compare / exchanges (which are not guaranteed to succeed) instead of a
> monolithic MMU lock.
>
> No functional change expected.
>
> Tested by running kvm-unit-tests on an Intel Haswell machine. This
> commit introduced no new failures.
>
> This commit can be viewed in Gerrit at:
> https://linux-review.googlesource.com/c/virt/kvm/kvm/+/2359
>
> Signed-off-by: Ben Gardon <bgardon@...gle.com>
> Reviewed-by: Oliver Upton <oupton@...gle.com>
> Reviewed-by: Peter Shier <pshier@...gle.com>
> ---
> arch/x86/kvm/mmu/mmu.c | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
> index a9c593dec49bf..b81010d0edae1 100644
> --- a/arch/x86/kvm/mmu/mmu.c
> +++ b/arch/x86/kvm/mmu/mmu.c
> @@ -451,9 +451,9 @@ static u64 get_mmio_spte_generation(u64 spte)
> return gen;
> }
>
> -static void mark_mmio_spte(struct kvm_vcpu *vcpu, u64 *sptep, u64 gfn,
> - unsigned int access)
> +static u64 make_mmio_spte(struct kvm_vcpu *vcpu, u64 gfn, unsigned int access)
> {
> +
Unneded newline.
> u64 gen = kvm_vcpu_memslots(vcpu)->generation & MMIO_SPTE_GEN_MASK;
> u64 mask = generation_mmio_spte_mask(gen);
> u64 gpa = gfn << PAGE_SHIFT;
> @@ -464,6 +464,17 @@ static void mark_mmio_spte(struct kvm_vcpu *vcpu, u64 *sptep, u64 gfn,
> mask |= (gpa & shadow_nonpresent_or_rsvd_mask)
> << shadow_nonpresent_or_rsvd_mask_len;
>
> + return mask;
> +}
> +
> +static void mark_mmio_spte(struct kvm_vcpu *vcpu, u64 *sptep, u64 gfn,
> + unsigned int access)
> +{
> + u64 mask = make_mmio_spte(vcpu, gfn, access);
> + unsigned int gen = get_mmio_spte_generation(mask);
> +
> + access = mask & ACC_ALL;
> +
> trace_mark_mmio_spte(sptep, gfn, access, gen);
'access' and 'gen' are only being used for tracing, would it rather make
sense to rename&move it to the newly introduced make_mmio_spte()? Or do
we actually need tracing for both?
Also, I dislike re-purposing function parameters.
> mmu_spte_set(sptep, mask);
> }
--
Vitaly
Powered by blists - more mailing lists