[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <7eb0cde4-9436-9719-dd13-caf4ab5083a2@redhat.com>
Date: Mon, 7 Jan 2019 17:26:35 +0100
From: Paolo Bonzini <pbonzini@...hat.com>
To: lantianyu1986@...il.com
Cc: Lan Tianyu <Tianyu.Lan@...rosoft.com>, christoffer.dall@....com,
marc.zyngier@....com, linux@...linux.org.uk,
catalin.marinas@....com, will.deacon@....com, jhogan@...nel.org,
ralf@...ux-mips.org, paul.burton@...s.com, paulus@...abs.org,
benh@...nel.crashing.org, mpe@...erman.id.au, rkrcmar@...hat.com,
tglx@...utronix.de, mingo@...hat.com, bp@...en8.de, hpa@...or.com,
x86@...nel.org, linux-arm-kernel@...ts.infradead.org,
kvmarm@...ts.cs.columbia.edu, linux-kernel@...r.kernel.org,
linux-mips@...r.kernel.org, kvm-ppc@...r.kernel.org,
linuxppc-dev@...ts.ozlabs.org, kvm@...r.kernel.org,
michael.h.kelley@...rosoft.com, kys@...rosoft.com,
vkuznets@...hat.com
Subject: Re: [PATCH 9/11] KVM/MMU: Flush tlb in the
kvm_mmu_write_protect_pt_masked()
On 04/01/19 09:54, lantianyu1986@...il.com wrote:
> rmap_head = __gfn_to_rmap(slot->base_gfn + gfn_offset + __ffs(mask),
> PT_PAGE_TABLE_LEVEL, slot);
> - __rmap_write_protect(kvm, rmap_head, false);
> + flush |= __rmap_write_protect(kvm, rmap_head, false);
>
> /* clear the first set bit */
> mask &= mask - 1;
> }
> +
> + if (flush && kvm_available_flush_tlb_with_range()) {
> + kvm_flush_remote_tlbs_with_address(kvm,
> + slot->base_gfn + gfn_offset,
> + hweight_long(mask));
Mask is zero here, so this probably won't work.
In addition, I suspect calling the hypercall once for every 64 pages is
not very efficient. Passing a flush list into
kvm_mmu_write_protect_pt_masked, and flushing in
kvm_arch_mmu_enable_log_dirty_pt_masked, isn't efficient either because
kvm_arch_mmu_enable_log_dirty_pt_masked is also called once per word.
I don't have any good ideas, except for moving the whole
kvm_clear_dirty_log_protect loop into architecture-specific code (which
is not the direction we want---architectures should share more code, not
less).
Paolo
> + flush = false;
> + }
> +
Powered by blists - more mailing lists