From: Paolo Bonzini <pbonzini@redhat.com>
To: Fam Zheng <famz@redhat.com>
Cc: borntraeger@de.ibm.com, qemu-devel@nongnu.org,
Frederic Konrad <fred.konrad@greensocs.com>
Subject: Re: [Qemu-devel] [PATCH 1/9] main-loop: use qemu_mutex_lock_iothread consistently
Date: Thu, 25 Jun 2015 10:20:27 +0200 [thread overview]
Message-ID: <558BB9CB.4010407@redhat.com> (raw)
In-Reply-To: <20150625033945.GG17695@ad.nay.redhat.com>
On 25/06/2015 05:39, Fam Zheng wrote:
> On Wed, 06/24 18:25, Paolo Bonzini wrote:
>> The next patch will require the BQL to be always taken with
>> qemu_mutex_lock_iothread(), while right now this isn't the case.
>>
>> Outside TCG mode this is not a problem. In TCG mode, we need to be
>> careful and avoid the "prod out of compiled code" step if already
>> in a VCPU thread. This is easily done with a check on current_cpu,
>> i.e. qemu_in_vcpu_thread().
>>
>> Hopefully, multithreaded TCG will get rid of the whole logic to kick
>> VCPUs whenever an I/O event occurs!
>>
>> Cc: Frederic Konrad <fred.konrad@greensocs.com>
>> Message-Id: <1434646046-27150-2-git-send-email-pbonzini@redhat.com>
>
> Why is this "Message-Id:" included in the commit message if it's not final?
>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>> cpus.c | 10 +++++++---
>> 1 file changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/cpus.c b/cpus.c
>> index b85fb5f..02cca5d 100644
>> --- a/cpus.c
>> +++ b/cpus.c
>> @@ -953,7 +953,7 @@ static void *qemu_kvm_cpu_thread_fn(void *arg)
>> CPUState *cpu = arg;
>> int r;
>>
>> - qemu_mutex_lock(&qemu_global_mutex);
>> + qemu_mutex_lock_iothread();
>> qemu_thread_get_self(cpu->thread);
>> cpu->thread_id = qemu_get_thread_id();
>> cpu->can_do_io = 1;
>> @@ -1033,10 +1033,10 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
>> {
>> CPUState *cpu = arg;
>>
>> + qemu_mutex_lock_iothread();
>> qemu_tcg_init_cpu_signals();
>> qemu_thread_get_self(cpu->thread);
>>
>> - qemu_mutex_lock(&qemu_global_mutex);
>> CPU_FOREACH(cpu) {
>> cpu->thread_id = qemu_get_thread_id();
>> cpu->created = true;
>> @@ -1148,7 +1148,11 @@ bool qemu_in_vcpu_thread(void)
>> void qemu_mutex_lock_iothread(void)
>> {
>> atomic_inc(&iothread_requesting_mutex);
>> - if (!tcg_enabled() || !first_cpu || !first_cpu->thread) {
>> + /* In the simple case there is no need to bump the VCPU thread out of
>> + * TCG code execution.
>> + */
>> + if (!tcg_enabled() || qemu_in_vcpu_thread() ||
>> + !first_cpu || !first_cpu->thread) {
>
> This looks like a separate change from the above
> "qemu_mutex_lock(&qemu_global_mutex)" conversion. Why do they belong to the
> same patch?
Previously, a VCPU thread would never call qemu_mutex_lock_iothread().
Now, it can.
While the change is only necessary when a call is introduced with
current_cpu != NULL (that's patch 5), it should be in this patch or
before because this is the one that changes the invariant. I put it in
the same because the patch is already very very smal.
Paolo
> Fam
>
>> qemu_mutex_lock(&qemu_global_mutex);
>> atomic_dec(&iothread_requesting_mutex);
>> } else {
>> --
>> 1.8.3.1
>>
>>
next prev parent reply other threads:[~2015-06-25 8:20 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-24 16:25 [Qemu-devel] [PATCH for-2.4 v2 0/9] KVM: Do I/O outside BQL whenever possible Paolo Bonzini
2015-06-24 16:25 ` [Qemu-devel] [PATCH 1/9] main-loop: use qemu_mutex_lock_iothread consistently Paolo Bonzini
2015-06-25 3:39 ` Fam Zheng
2015-06-25 8:20 ` Paolo Bonzini [this message]
2015-06-24 16:25 ` [Qemu-devel] [PATCH 2/9] main-loop: introduce qemu_mutex_iothread_locked Paolo Bonzini
2015-06-24 16:25 ` [Qemu-devel] [PATCH 3/9] memory: Add global-locking property to memory regions Paolo Bonzini
2015-06-25 3:44 ` Fam Zheng
2015-06-25 7:46 ` Paolo Bonzini
2015-06-25 10:59 ` Fam Zheng
2015-06-25 11:10 ` Paolo Bonzini
2015-06-24 16:25 ` [Qemu-devel] [PATCH 4/9] exec: pull qemu_flush_coalesced_mmio_buffer() into address_space_rw/ld*/st* Paolo Bonzini
2015-06-25 4:59 ` Fam Zheng
2015-06-24 16:25 ` [Qemu-devel] [PATCH 5/9] memory: let address_space_rw/ld*/st* run outside the BQL Paolo Bonzini
2015-06-25 5:11 ` Fam Zheng
2015-06-25 7:47 ` Paolo Bonzini
2015-06-24 16:25 ` [Qemu-devel] [PATCH 6/9] kvm: First step to push iothread lock out of inner run loop Paolo Bonzini
2015-06-24 16:25 ` [Qemu-devel] [PATCH 7/9] kvm: Switch to unlocked PIO Paolo Bonzini
2015-06-24 16:25 ` [Qemu-devel] [PATCH 8/9] acpi: mark PMTIMER as unlocked Paolo Bonzini
2015-06-24 16:25 ` [Qemu-devel] [PATCH 9/9] kvm: Switch to unlocked MMIO Paolo Bonzini
-- strict thread matches above, loose matches on Subject: below --
2015-07-02 8:20 [Qemu-devel] [PATCH for-2.4 0/9 v3] KVM: Do I/O outside BQL whenever possible Paolo Bonzini
2015-07-02 8:20 ` [Qemu-devel] [PATCH 1/9] main-loop: use qemu_mutex_lock_iothread consistently Paolo Bonzini
2015-06-18 16:47 [Qemu-devel] [PATCH for-2.4 0/9] KVM: Do I/O outside BQL whenever possible Paolo Bonzini
2015-06-18 16:47 ` [Qemu-devel] [PATCH 1/9] main-loop: use qemu_mutex_lock_iothread consistently Paolo Bonzini
2015-06-23 13:49 ` Frederic Konrad
2015-06-23 13:56 ` Paolo Bonzini
2015-06-23 14:18 ` Frederic Konrad
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=558BB9CB.4010407@redhat.com \
--to=pbonzini@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=famz@redhat.com \
--cc=fred.konrad@greensocs.com \
--cc=qemu-devel@nongnu.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.