public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
	LKML <linux-kernel@vger.kernel.org>,
	KVM list <kvm@vger.kernel.org>
Subject: Re: [PATCH v2 3/6] KVM: MMU: fix page dirty tracking lost while sync page
Date: Wed, 21 Jul 2010 21:34:27 +0300	[thread overview]
Message-ID: <4C473DB3.7040405@redhat.com> (raw)
In-Reply-To: <4C3FD11D.1060104@cn.fujitsu.com>

On 07/16/2010 06:25 AM, Xiao Guangrong wrote:
> In sync-page path, if spte.writable is changed, it will lose page dirty
> tracking, for example:
>
> assume spte.writable = 0 in a unsync-page, when it's synced, it map spte
> to writable(that is spte.writable = 1), later guest write spte.gfn, it means
> spte.gfn is dirty, then guest changed this mapping to read-only, after it's
> synced,  spte.writable = 0
>
> So, when host release the spte, it detect spte.writable = 0 and not mark page
> dirty
>
>    

Subtle, good catch.

>   set_pte:
> +	if (is_writable_pte(*sptep)&&  !is_writable_pte(spte))
> +		kvm_set_pfn_dirty(pfn);
>   	update_spte(sptep, spte);
>    

I think this has to be done after the tlb flush, otherwise we have

   set_pfn_dirty
   (some other cpu) write out page, mark as clean
   (some other vcpu writes through stale tlb entry)
   update_spte
   tlb flush

but perhaps mmu notifiers protect us here, if the cleaner wants to write 
out the page it has to clear the dirty bit in sptes as well, and that 
will block on mmu_lock.

Later on we can use the dirty bit instead of writeable bit, except on 
EPT.  But let's start with your fix.

-- 
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.


  parent reply	other threads:[~2010-07-21 18:34 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-16  3:19 [PATCH v2 1/6] KVM: MMU: fix forgot reserved bits check in speculative path Xiao Guangrong
2010-07-16  3:23 ` [PATCH v2 2/6] KVM: MMU: fix page accessed tracking lost if ept is enabled Xiao Guangrong
2010-07-16  3:25 ` [PATCH v2 3/6] KVM: MMU: fix page dirty tracking lost while sync page Xiao Guangrong
2010-07-16  3:27   ` [PATCH v2 4/6] KVM: MMU: don't atomicly set spte if it's not present Xiao Guangrong
2010-07-21 18:34   ` Avi Kivity [this message]
2010-07-22  1:17     ` [PATCH v2 3/6] KVM: MMU: fix page dirty tracking lost while sync page Xiao Guangrong
2010-07-16  3:28 ` [PATCH v2 5/6] KVM: MMU: cleanup spte set and accssed/dirty tracking Xiao Guangrong
2010-07-16  3:30   ` [PATCH v2 6/6] KVM: MMU: using __xchg_spte more smarter Xiao Guangrong
2010-07-21  0:36 ` [PATCH v2 1/6] KVM: MMU: fix forgot reserved bits check in speculative path Xiao Guangrong
2010-07-21 18:39   ` Avi Kivity
2010-07-22  1:18     ` Xiao Guangrong
2010-07-25  8:46       ` Avi Kivity

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=4C473DB3.7040405@redhat.com \
    --to=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=xiaoguangrong@cn.fujitsu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox