All of lore.kernel.org
 help / color / mirror / Atom feed
From: tangchen <tangchen@cn.fujitsu.com>
To: Gleb Natapov <gleb@kernel.org>, Paolo Bonzini <pbonzini@redhat.com>
Cc: <mtosatti@redhat.com>, <nadav.amit@gmail.com>,
	<jan.kiszka@web.de>, <kvm@vger.kernel.org>,
	<laijs@cn.fujitsu.com>, <isimatu.yasuaki@jp.fujitsu.com>,
	<guz.fnst@cn.fujitsu.com>, <linux-kernel@vger.kernel.org>,
	<tangchen@cn.fujitsu.com>
Subject: Re: [PATCH v5 4/7] kvm, mem-hotplug: Reload L1' apic access page on migration in vcpu_enter_guest().
Date: Fri, 12 Sep 2014 11:32:47 +0800	[thread overview]
Message-ID: <5412695F.6080407@cn.fujitsu.com> (raw)
In-Reply-To: <20140911144716.GF26540@minantech.com>

Hi Gleb, Paolo,

On 09/11/2014 10:47 PM, Gleb Natapov wrote:
> On Thu, Sep 11, 2014 at 04:37:39PM +0200, Paolo Bonzini wrote:
>> Il 11/09/2014 16:31, Gleb Natapov ha scritto:
>>>>> What if the page being swapped out is L1's APIC access page?  We don't
>>>>> run prepare_vmcs12 in that case because it's an L2->L0->L2 entry, so we
>>>>> need to "do something".
>>> We will do something on L2->L1 exit. We will call kvm_reload_apic_access_page().
>>> That is what patch 5 of this series is doing.
>> Sorry, I meant "the APIC access page prepared by L1" for L2's execution.
>>
>> You wrote:
>>
>>> if (!is_guest_mode() || !(vmcs12->secondary_vm_exec_control & ECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES))
>>>      write(PIC_ACCESS_ADDR)
>>>
>>> In other words if L2 shares L1 apic access page then reload, otherwise do nothing.
>> but in that case you have to redo nested_get_page, so "do nothing"
>> doesn't work.
>>
> Ah, 7/7 is new in this submission. Before that this page was still
> pinned.  Looking at 7/7 now I do not see how it can work since it has no
> code for mmu notifier to detect that it deals with such page and call
> kvm_reload_apic_access_page().

Since L1 and L2 share one apic page, if the page is unmapped, 
mmu_notifier will
be called, and :

  - if vcpu is in L1, a L1->L0 exit is rised. apic page's pa will be 
updated in the next
    L0->L1 entry by making vcpu request.

  - if vcpu is in L2 (is_guest_mode, right?), a L2->L0 exit is rised. 
nested_vmx_vmexit()
    will not be called since it is called in L2->L1 exit. It returns 
from vmx_vcpu_run()
    directly, right ? So we should update apic page in L0->L2 entry. 
This is also done
    by making vcpu request, right ?.

    prepare_vmcs02() is called in L1->L2 entry, and nested_vmx_vmexit() 
is called in
    L2->L1 exit. So we also need to update L1's vmcs in 
nested_vmx_vmexit() in patch 5/7.

IIUC, I think patch 1~6 has done such things.

And yes, the is_guest_mode() check is not needed.

> I said to Tang previously that nested
> kvm has a bunch of pinned page that are hard to deal with and suggested
> to iron out non nested case first :(

Yes, and maybe adding patch 7 is not a good idea for now.

Thanks.

  reply	other threads:[~2014-09-12  3:31 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-11  5:37 [PATCH v5 0/7] kvm, mem-hotplug: Do not pin ept identity pagetable and apic access page Tang Chen
2014-09-11  5:38 ` [PATCH v5 1/7] kvm: Use APIC_DEFAULT_PHYS_BASE macro as the apic access page address Tang Chen
2014-09-11  9:10   ` Paolo Bonzini
2014-09-11  5:38 ` [PATCH v5 2/7] kvm: Remove ept_identity_pagetable from struct kvm_arch Tang Chen
2014-09-11  9:14   ` Paolo Bonzini
2014-09-11  5:38 ` [PATCH v5 3/7] kvm: Make init_rmode_identity_map() return 0 on success Tang Chen
2014-09-11  9:17   ` Paolo Bonzini
2014-09-11 10:26     ` tangchen
2014-09-11  5:38 ` [PATCH v5 4/7] kvm, mem-hotplug: Reload L1' apic access page on migration in vcpu_enter_guest() Tang Chen
2014-09-11  9:21   ` Paolo Bonzini
2014-09-11 10:12     ` Gleb Natapov
2014-09-11 10:47       ` Paolo Bonzini
2014-09-11 11:30         ` Gleb Natapov
2014-09-11 13:05           ` Paolo Bonzini
2014-09-11 13:59             ` Gleb Natapov
2014-09-11 14:06               ` Paolo Bonzini
2014-09-11 14:21                 ` Gleb Natapov
2014-09-11 14:24                   ` Paolo Bonzini
2014-09-11 14:31                     ` Gleb Natapov
2014-09-11 14:37                       ` Paolo Bonzini
2014-09-11 14:47                         ` Gleb Natapov
2014-09-12  3:32                           ` tangchen [this message]
2014-09-12  3:36                     ` tangchen
2014-09-11 10:20     ` tangchen
2014-09-11 10:39       ` Paolo Bonzini
2014-09-11  5:38 ` [PATCH v5 5/7] kvm, mem-hotplug: Reload L1's apic access page on migration when L2 is running Tang Chen
2014-09-11  9:28   ` Paolo Bonzini
2014-09-11  5:38 ` [PATCH v5 6/7] kvm, mem-hotplug: Unpin and remove kvm_arch->apic_access_page Tang Chen
2014-09-11  9:34   ` Paolo Bonzini
2014-09-11  5:38 ` [PATCH v5 7/7] kvm, mem-hotplug: Unpin and remove nested_vmx->apic_access_page Tang Chen
2014-09-11  9:33   ` Paolo Bonzini
2014-09-11  9:43     ` tangchen

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=5412695F.6080407@cn.fujitsu.com \
    --to=tangchen@cn.fujitsu.com \
    --cc=gleb@kernel.org \
    --cc=guz.fnst@cn.fujitsu.com \
    --cc=isimatu.yasuaki@jp.fujitsu.com \
    --cc=jan.kiszka@web.de \
    --cc=kvm@vger.kernel.org \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=nadav.amit@gmail.com \
    --cc=pbonzini@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.