All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Gleb Natapov <gleb@redhat.com>, Avi Kivity <avi@redhat.com>,
	LKML <linux-kernel@vger.kernel.org>, KVM <kvm@vger.kernel.org>
Subject: Re: [PATCH 3/3] KVM: x86: improve reexecute_instruction
Date: Thu, 29 Nov 2012 06:40:51 +0800	[thread overview]
Message-ID: <50B692F3.4000408@linux.vnet.ibm.com> (raw)
In-Reply-To: <20121128215750.GA10039@amt.cnet>

On 11/29/2012 05:57 AM, Marcelo Tosatti wrote:
> On Wed, Nov 28, 2012 at 10:59:35PM +0800, Xiao Guangrong wrote:
>> On 11/28/2012 10:12 PM, Gleb Natapov wrote:
>>> On Tue, Nov 27, 2012 at 11:30:24AM +0800, Xiao Guangrong wrote:
>>>> On 11/27/2012 06:41 AM, Marcelo Tosatti wrote:
>>>>
>>>>>>
>>>>>> -	return false;
>>>>>> +again:
>>>>>> +	page_fault_count = ACCESS_ONCE(vcpu->kvm->arch.page_fault_count);
>>>>>> +
>>>>>> +	/*
>>>>>> +	 * if emulation was due to access to shadowed page table
>>>>>> +	 * and it failed try to unshadow page and re-enter the
>>>>>> +	 * guest to let CPU execute the instruction.
>>>>>> +	 */
>>>>>> +	kvm_mmu_unprotect_page(vcpu->kvm, gpa_to_gfn(gpa));
>>>>>> +	emulate = vcpu->arch.mmu.page_fault(vcpu, cr3, PFERR_WRITE_MASK, false);
>>>>>
>>>>> Can you explain what is the objective here?
>>>>>
>>>>
>>>> Sure. :)
>>>>
>>>> The instruction emulation is caused by fault access on cr3. After unprotect
>>>> the target page, we call vcpu->arch.mmu.page_fault to fix the mapping of cr3.
>>>> if it return 1, mmu can not fix the mapping, we should report the error,
>>>> otherwise it is good to return to guest and let it re-execute the instruction
>>>> again.
>>>>
>>>> page_fault_count is used to avoid the race on other vcpus, since after we
>>>> unprotect the target page, other cpu can enter page fault path and let the
>>>> page be write-protected again.
>>>>
>>>> This way can help us to detect all the case that mmu can not be fixed.
>>>>
>>> Can you write this in a comment above vcpu->arch.mmu.page_fault()?
>>
>> Okay, if Marcelo does not object this way. :)
> 
> I do object, since it is possible to detect precisely the condition by 
> storing which gfns have been cached.
> 
> Then, Xiao, you need a way to handle large read-only sptes.

Sorry, Marcelo, i am still confused why read-only sptes can not work
under this patch?

The code after read-only large spte is is:

+		if ((level > PT_PAGE_TABLE_LEVEL &&
+		   has_wrprotected_page(vcpu->kvm, gfn, level)) ||
+		      mmu_need_write_protect(vcpu, gfn, can_unsync)) {
 			pgprintk("%s: found shadow page for %llx, marking ro\n",
 				 __func__, gfn);
 			ret = 1;

It return 1, then reexecute_instruction return 0. It is the same as without
readonly large-spte.

  reply	other threads:[~2012-11-28 22:40 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-19 23:57 [PATCH 0/3] KVM: x86: improve reexecute_instruction Xiao Guangrong
2012-11-19 23:58 ` [PATCH 1/3] KVM: x86: clean up reexecute_instruction Xiao Guangrong
2012-11-20 12:11   ` Gleb Natapov
2012-11-20 20:13     ` Xiao Guangrong
2012-11-19 23:59 ` [PATCH 2/3] KVM: x86: let reexecute_instruction work for tdp Xiao Guangrong
2012-11-26 22:37   ` Marcelo Tosatti
2012-11-27  3:13     ` Xiao Guangrong
2012-11-27 23:32       ` Marcelo Tosatti
2012-11-28  3:15         ` Xiao Guangrong
2012-11-28 14:01           ` Gleb Natapov
2012-11-28 14:55             ` Xiao Guangrong
2012-11-28 22:07               ` Marcelo Tosatti
2012-11-19 23:59 ` [PATCH 3/3] KVM: x86: improve reexecute_instruction Xiao Guangrong
2012-11-26 22:41   ` Marcelo Tosatti
2012-11-27  3:30     ` Xiao Guangrong
2012-11-27 23:42       ` Marcelo Tosatti
2012-11-28  3:33         ` Xiao Guangrong
2012-11-28 14:12       ` Gleb Natapov
2012-11-28 14:59         ` Xiao Guangrong
2012-11-28 21:57           ` Marcelo Tosatti
2012-11-28 22:40             ` Xiao Guangrong [this message]
2012-11-28 23:16               ` Xiao Guangrong
2012-11-29  0:23                 ` Marcelo Tosatti
2012-11-29  0:21               ` Marcelo Tosatti
2012-12-03  8:33                 ` Xiao Guangrong
2012-12-03 19:47                   ` Marcelo Tosatti
2012-11-23  1:16 ` [PATCH 0/3] " Marcelo Tosatti

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=50B692F3.4000408@linux.vnet.ibm.com \
    --to=xiaoguangrong@linux.vnet.ibm.com \
    --cc=avi@redhat.com \
    --cc=gleb@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.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.