From: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
To: Sheng Yang <sheng.yang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: [PATCH] KVM: VMX: Fix repeatly allocate of apic access page
Date: Tue, 06 Nov 2007 11:23:00 +0200 [thread overview]
Message-ID: <47303274.5070405@qumranet.com> (raw)
In-Reply-To: <200711061100.35700.sheng.yang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Sheng Yang wrote:
> From 05164d73994a88ae130a086b592cd127c15a617f Mon Sep 17 00:00:00 2001
> From: Sheng Yang <sheng.yang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> Date: Tue, 6 Nov 2007 11:37:44 +0800
> Subject: [PATCH] KVM: VMX: Fix repeatly allocate of apic access page
>
> For SMP guest, alloc_apic_access_page() would be called more than once.
> So only the last one works, causing SMP guest can't benifit from FlexPriority.
>
> This patch fixed this issue.
>
> Signed-off-by: Sheng Yang <sheng.yang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> ---
> drivers/kvm/vmx.c | 14 ++++++++++----
> 1 files changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c
> index 42e7fad..6670e2b 100644
> --- a/drivers/kvm/vmx.c
> +++ b/drivers/kvm/vmx.c
> @@ -1463,18 +1463,24 @@ static void seg_setup(int seg)
> static int alloc_apic_access_page(struct kvm *kvm)
> {
> struct kvm_userspace_memory_region kvm_userspace_mem;
> - int r;
> + int r = 0;
>
> - r = -EFAULT;
> + mutex_lock(&kvm->lock);
> + if (kvm->apic_access_page)
> + goto out;
> + mutex_unlock(&kvm->lock);
>
Still racy. I two threads create a vcpu at the same time, they can both
reach this point simultaneously.
I suggest having a __kvm_set_memory_region() that does not take
kvm->lock, and call that instead, so the whole thing can be done within
a single lock.
> kvm_userspace_mem.slot = APIC_ACCESS_PAGE_PRIVATE_MEMSLOT;
> kvm_userspace_mem.flags = 0;
> kvm_userspace_mem.guest_phys_addr = 0xfee00000ULL;
> kvm_userspace_mem.memory_size = PAGE_SIZE;
> r = kvm_set_memory_region(kvm, &kvm_userspace_mem, 0);
> if (r)
> - return r;
> + goto out;
> + mutex_lock(&kvm->lock);
> kvm->apic_access_page = gfn_to_page(kvm, 0xfee00);
> - return 0;
> +out:
> + mutex_unlock(&kvm->lock);
> + return r;
> }
>
>
--
error compiling committee.c: too many arguments to function
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
next prev parent reply other threads:[~2007-11-06 9:23 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-06 3:00 [PATCH] KVM: VMX: Fix repeatly allocate of apic access page Sheng Yang
[not found] ` <200711061100.35700.sheng.yang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2007-11-06 9:23 ` Avi Kivity [this message]
-- strict thread matches above, loose matches on Subject: below --
2007-11-06 9:55 Sheng Yang
[not found] ` <200711061755.14444.sheng.yang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2007-11-06 10:04 ` 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=47303274.5070405@qumranet.com \
--to=avi-atkuwr5tajbwk0htik3j/w@public.gmane.org \
--cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=sheng.yang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
/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.