Re: [PATCH 6/6] KVM MMU: optimize synchronization shadow pages

Xiao Guangrong
2010-04-12T11:17:16Z

Avi Kivity wrote:
> On 04/12/2010 11:06 AM, Xiao Guangrong wrote:
>> - chain all unsync shadow pages then we can fetch them quickly
>> - flush local/remote tlb after all shadow page synced
>>
>> Signed-off-by: Xiao Guangrong<xiaoguangrong@cn.fujitsu.com>
>> ---
>> arch/x86/include/asm/kvm_host.h | 1 +
>> arch/x86/kvm/mmu.c | 82
>> ++++++++++++++++++---------------------
>> 2 files changed, 39 insertions(+), 44 deletions(-)
>>
>> diff --git a/arch/x86/include/asm/kvm_host.h
>> b/arch/x86/include/asm/kvm_host.h
>> index d463bc6..ae543fb 100644
>> --- a/arch/x86/include/asm/kvm_host.h
>> +++ b/arch/x86/include/asm/kvm_host.h
>> @@ -207,6 +207,7 @@ struct kvm_mmu_page {
>> #define MMU_PAGE_UNSYNC 0x2
>> unsigned int flags;
>> unsigned int unsync_children;
>> + struct list_head unsync_link;
>> union {
>> u64 *parent_pte; /* !multimapped */
>> struct hlist_head parent_ptes; /* multimapped, kvm_pte_chain */
>> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
>> index 18eceb2..fcb6299 100644
>> --- a/arch/x86/kvm/mmu.c
>> +++ b/arch/x86/kvm/mmu.c
>> @@ -177,6 +177,8 @@ typedef int (*mmu_parent_walk_fn) (struct
>> kvm_mmu_page *sp, u64 *spte);
>> static struct kmem_cache *pte_chain_cache;
>> static struct kmem_cache *rmap_desc_cache;
>> static struct kmem_cache *mmu_page_header_cache;
>> +static struct list_head unsync_mmu_page_list =
>> + LIST_HEAD_INIT(unsync_mmu_page_list);
>>
>>
>
> Does this really need to be global? Should be per guest.
>

Ah... this patch need more cooking, i'll improve it... thanks for you point it out.

Xiao