All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gleb Natapov <gleb@redhat.com>
To: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
	Avi Kivity <avi.kivity@gmail.com>,
	LKML <linux-kernel@vger.kernel.org>, KVM <kvm@vger.kernel.org>
Subject: Re: [PATCH v2 01/12] KVM: MMU: lazily drop large spte
Date: Sun, 27 Jan 2013 14:06:57 +0200	[thread overview]
Message-ID: <20130127120657.GA21650@redhat.com> (raw)
In-Reply-To: <50FFB5A1.5090708@linux.vnet.ibm.com>

On Wed, Jan 23, 2013 at 06:04:17PM +0800, Xiao Guangrong wrote:
> Do not drop large spte until it can be insteaded by small pages so that
> the guest can happliy read memory through it
> 
> The idea is from Avi:
> | As I mentioned before, write-protecting a large spte is a good idea,
> | since it moves some work from protect-time to fault-time, so it reduces
> | jitter.  This removes the need for the return value.
> 
> Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
> ---
>  arch/x86/kvm/mmu.c |   21 ++++++---------------
>  1 files changed, 6 insertions(+), 15 deletions(-)
> 
> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
> index 9f628f7..0f90269 100644
> --- a/arch/x86/kvm/mmu.c
> +++ b/arch/x86/kvm/mmu.c
> @@ -1105,7 +1105,7 @@ static void drop_large_spte(struct kvm_vcpu *vcpu, u64 *sptep)
> 
>  /*
>   * Write-protect on the specified @sptep, @pt_protect indicates whether
> - * spte writ-protection is caused by protecting shadow page table.
> + * spte write-protection is caused by protecting shadow page table.
>   * @flush indicates whether tlb need be flushed.
>   *
>   * Note: write protection is difference between drity logging and spte
> @@ -1114,31 +1114,23 @@ static void drop_large_spte(struct kvm_vcpu *vcpu, u64 *sptep)
>   *   its dirty bitmap is properly set.
>   * - for spte protection, the spte can be writable only after unsync-ing
>   *   shadow page.
> - *
> - * Return true if the spte is dropped.
>   */
> -static bool
> +static void
>  spte_write_protect(struct kvm *kvm, u64 *sptep, bool *flush, bool pt_protect)
Since return value is not longer used make the function return true if flush is needed
instead of returning it via pointer to a variable.

>  {
>  	u64 spte = *sptep;
> 
>  	if (!is_writable_pte(spte) &&
>  	      !(pt_protect && spte_is_locklessly_modifiable(spte)))
> -		return false;
> +		return;
> 
>  	rmap_printk("rmap_write_protect: spte %p %llx\n", sptep, *sptep);
> 
> -	if (__drop_large_spte(kvm, sptep)) {
> -		*flush |= true;
> -		return true;
> -	}
> -
>  	if (pt_protect)
>  		spte &= ~SPTE_MMU_WRITEABLE;
>  	spte = spte & ~PT_WRITABLE_MASK;
> 
>  	*flush |= mmu_spte_update(sptep, spte);
> -	return false;
>  }
> 
>  static bool __rmap_write_protect(struct kvm *kvm, unsigned long *rmapp,
> @@ -1150,11 +1142,8 @@ static bool __rmap_write_protect(struct kvm *kvm, unsigned long *rmapp,
> 
>  	for (sptep = rmap_get_first(*rmapp, &iter); sptep;) {
>  		BUG_ON(!(*sptep & PT_PRESENT_MASK));
> -		if (spte_write_protect(kvm, sptep, &flush, pt_protect)) {
> -			sptep = rmap_get_first(*rmapp, &iter);
> -			continue;
> -		}
> 
> +		spte_write_protect(kvm, sptep, &flush, pt_protect);
>  		sptep = rmap_get_next(&iter);
>  	}
> 
> @@ -2611,6 +2600,8 @@ static int __direct_map(struct kvm_vcpu *vcpu, gpa_t v, int write,
>  			break;
>  		}
> 
> +		drop_large_spte(vcpu, iterator.sptep);
> +
>  		if (!is_shadow_present_pte(*iterator.sptep)) {
>  			u64 base_addr = iterator.addr;
> 
> -- 
> 1.7.7.6

--
			Gleb.

  parent reply	other threads:[~2013-01-27 12:07 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-23 10:04 [PATCH v2 01/12] KVM: MMU: lazily drop large spte Xiao Guangrong
2013-01-23 10:04 ` [PATCH v2 02/12] KVM: MMU: cleanup mapping-level Xiao Guangrong
2013-01-23 10:05 ` [PATCH v2 03/12] KVM: MMU: simplify mmu_set_spte Xiao Guangrong
2013-01-29  0:21   ` Marcelo Tosatti
2013-01-29  2:55     ` Xiao Guangrong
2013-01-29 21:53       ` Marcelo Tosatti
2013-01-30  3:22         ` Xiao Guangrong
2013-01-23 10:06 ` [PATCH v2 04/12] KVM: MMU: simplify set_spte Xiao Guangrong
2013-01-23 10:06 ` [PATCH v2 05/12] KVM: MMU: introduce vcpu_adjust_access Xiao Guangrong
2013-01-24 10:36   ` Gleb Natapov
2013-01-24 11:33     ` Xiao Guangrong
2013-01-23 10:07 ` [PATCH v2 06/12] KVM: MMU: introduce a static table to map guest access to spte access Xiao Guangrong
2013-01-25  0:15   ` Marcelo Tosatti
2013-01-25  2:46     ` Xiao Guangrong
2013-01-29  0:07       ` Marcelo Tosatti
2013-01-29  1:07         ` Marcelo Tosatti
2013-01-29 13:16           ` Gleb Natapov
2013-01-30  3:53           ` Xiao Guangrong
2013-01-23 10:07 ` [PATCH v2 07/12] KVM: MMU: remove pt_access in mmu_set_spte Xiao Guangrong
2013-01-23 10:08 ` [PATCH v2 08/12] KVM: MMU: cleanup __direct_map Xiao Guangrong
2013-01-23 10:09 ` [PATCH v2 09/12] KVM: MMU: introduce mmu_spte_establish Xiao Guangrong
2013-01-23 10:09 ` [PATCH v2 10/12] KVM: MMU: unify the code of walking pte list Xiao Guangrong
2013-01-27 13:28   ` Gleb Natapov
2013-01-29  3:01     ` Xiao Guangrong
2013-01-23 10:10 ` [PATCH v2 11/12] KVM: MMU: fix spte assertion Xiao Guangrong
2013-01-23 10:10 ` [PATCH v2 12/12] KVM: MMU: fast drop all spte on the pte_list Xiao Guangrong
2013-01-27 12:06 ` Gleb Natapov [this message]
2013-01-29  2:57   ` [PATCH v2 01/12] KVM: MMU: lazily drop large spte Xiao Guangrong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130127120657.GA21650@redhat.com \
    --to=gleb@redhat.com \
    --cc=avi.kivity@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=xiaoguangrong@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.