From: Anthony Liguori <anthony@codemonkey.ws>
To: Jan Kiszka <jan.kiszka@web.de>
Cc: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
qemu-devel@nongnu.org, Paul Brook <paul@codesourcery.com>,
Paulo Bonzini <pbonzini@redhat.com>,
Arun Bharadwaj <arun@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] Re: [PATCH 4/7] Get rid of QemuMutex and teach its callers about GStaticMutex
Date: Mon, 24 Jan 2011 18:02:19 -0600 [thread overview]
Message-ID: <4D3E130B.3000902@codemonkey.ws> (raw)
In-Reply-To: <4D3DFC28.4000408@web.de>
On 01/24/2011 04:24 PM, Jan Kiszka wrote:
> On 2011-01-24 22:00, Anthony Liguori wrote:
>
>> Signed-off-by: Anthony Liguori<aliguori@us.ibm.com>
>>
>> diff --git a/cpus.c b/cpus.c
>> index 9cf7e6e..0f8e33b 100644
>> --- a/cpus.c
>> +++ b/cpus.c
>> @@ -321,8 +321,8 @@ void vm_stop(int reason)
>>
>> #include "qemu-thread.h"
>>
>> -QemuMutex qemu_global_mutex;
>> -static QemuMutex qemu_fair_mutex;
>> +GStaticMutex qemu_global_mutex;
>> +static GStaticMutex qemu_fair_mutex;
>>
>> static QemuThread io_thread;
>>
>> @@ -416,9 +416,9 @@ int qemu_init_main_loop(void)
>> qemu_cond_init(&qemu_system_cond);
>> qemu_cond_init(&qemu_pause_cond);
>> qemu_cond_init(&qemu_work_cond);
>> - qemu_mutex_init(&qemu_fair_mutex);
>> - qemu_mutex_init(&qemu_global_mutex);
>> - qemu_mutex_lock(&qemu_global_mutex);
>> + g_static_mutex_init(&qemu_fair_mutex);
>> + g_static_mutex_init(&qemu_global_mutex);
>> + g_static_mutex_lock(&qemu_global_mutex);
>>
>>
> Just replacing our own abstraction with glib's looks like a step in the
> wrong direction. From a first glance at that library and its semantics
> it has at least two major drawbacks:
>
> - Error handling of things like g_mutex_lock or g_cond_wait is, well,
> very "simplistic". Once we start to use more sophisticated locking,
> more bugs will occur here, and we will need more support than glib is
> able to provide (or can you control error handling elsewhere?).
>
> - GMutex is not powerful enough for optional things like PI mutexes -
> which is required once we want to schedule parts of qemu with RT
> priorities (I did it, it works surprisingly well).
>
One of the nice design characteristics of glib/gobject/gtk is that it
cohabitates well with other APIs.
Nothing stops you from using pthread mutex directly if you really need
to. It makes you less portable, but sometimes it's a price that has to
be paid for functionality.
> The same concerns apply to other abstractions glib provides for
> threading and synchronization. One may work around them, but that will
> break abstractions again.
>
> Glib seems to fit standard use case quite comfortably but fails in more
> advanced scenarios qemu is already useable for (just lacking a few
> additional lines of code).
>
> In short: we need full POSIX where available.
>
If the problem we have is that we have such advanced use of threading
and locking in QEMU such that the glib API is not enough and we find
ourselves constantly calling into the pthread's API directly, then
that's a wonderful problem to have.
Regards,
Anthony Liguori
> Jan
>
>
next prev parent reply other threads:[~2011-01-25 0:02 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-24 21:00 [Qemu-devel] [RFC 0/7] Introduce hard dependency on glib Anthony Liguori
2011-01-24 21:00 ` [Qemu-devel] [PATCH 1/7] io-thread: make sure to initialize qemu_work_cond and qemu_cpu_cond Anthony Liguori
2011-02-08 8:53 ` [Qemu-devel] " Jan Kiszka
2011-02-08 9:01 ` Anthony Liguori
2011-01-24 21:00 ` [Qemu-devel] [PATCH 2/7] Enable I/O thread and VNC threads by default Anthony Liguori
2011-01-24 22:28 ` [Qemu-devel] " Anthony Liguori
2011-01-25 9:17 ` Edgar E. Iglesias
2011-01-25 13:34 ` Marcelo Tosatti
2011-02-07 10:12 ` Marcelo Tosatti
2011-02-07 16:03 ` Marcelo Tosatti
2011-02-07 16:23 ` Paolo Bonzini
2011-02-07 17:10 ` Jan Kiszka
2011-02-07 21:02 ` Anthony Liguori
2011-02-07 21:45 ` Aurelien Jarno
2011-02-08 2:09 ` Anthony Liguori
2011-02-08 7:26 ` Aurelien Jarno
2011-02-08 8:08 ` Paolo Bonzini
2011-02-08 8:50 ` Jan Kiszka
2011-02-08 9:05 ` Aurelien Jarno
2011-02-08 9:12 ` Anthony Liguori
2011-02-08 9:49 ` Paolo Bonzini
2011-02-08 9:51 ` Jan Kiszka
2011-02-08 9:58 ` Aurelien Jarno
2011-02-08 10:03 ` Jan Kiszka
2011-02-08 10:06 ` Aurelien Jarno
2011-02-08 10:16 ` Alexander Graf
2011-02-08 10:17 ` Stefan Hajnoczi
2011-02-08 10:27 ` Aurelien Jarno
2011-02-08 10:31 ` Paolo Bonzini
2011-02-08 10:40 ` Jan Kiszka
2011-02-08 18:05 ` Anthony Liguori
2011-02-08 11:29 ` Aurelien Jarno
2011-02-08 12:38 ` Riku Voipio
2011-02-08 10:21 ` Jan Kiszka
2011-02-08 10:26 ` Aurelien Jarno
2011-02-08 10:30 ` Jan Kiszka
2011-02-08 17:58 ` Anthony Liguori
2011-02-08 11:07 ` Tristan Gingold
2011-02-08 11:46 ` Aurelien Jarno
2011-02-08 12:07 ` Paolo Bonzini
2011-02-08 19:21 ` Anthony Liguori
2011-02-08 11:15 ` Aurelien Jarno
2011-02-08 12:10 ` Paolo Bonzini
2011-02-08 13:31 ` Aurelien Jarno
2011-02-08 15:08 ` Aurelien Jarno
2011-02-09 17:35 ` Aurelien Jarno
2011-02-09 20:07 ` Anthony Liguori
2011-02-11 0:03 ` Marcelo Tosatti
2011-02-08 19:17 ` Anthony Liguori
2011-02-08 13:30 ` Aurelien Jarno
2011-02-08 20:54 ` Anthony Liguori
2011-02-08 15:09 ` Aurelien Jarno
2011-02-09 17:13 ` Blue Swirl
2011-02-09 22:16 ` [Qemu-devel] " Stefan Weil
2011-02-10 7:34 ` Paolo Bonzini
2011-02-10 9:54 ` Paolo Bonzini
2011-02-10 19:46 ` Stefan Weil
2011-02-08 10:06 ` [Qemu-devel] " Paolo Bonzini
2011-02-07 18:35 ` Edgar E. Iglesias
2011-02-07 20:44 ` Aurelien Jarno
2011-02-07 21:30 ` Scott Wood
2011-02-07 20:47 ` Edgar E. Iglesias
2011-01-25 8:33 ` [Qemu-devel] [PATCH 0/2] vnc: the lost parts Corentin Chary
2011-01-25 8:33 ` [Qemu-devel] [PATCH 1/2] vl.c: set NULL upon deleting handlers in qemu_set_fd_handler2() Corentin Chary
2011-01-25 10:03 ` Stefan Hajnoczi
2011-01-25 10:13 ` Corentin Chary
2011-01-25 10:26 ` Stefan Hajnoczi
2011-01-25 12:05 ` Yoshiaki Tamura
2011-01-25 8:33 ` [Qemu-devel] [PATCH 2/2] vnc: qemu can die if the client is disconnected while updating screen Corentin Chary
2011-01-24 21:00 ` [Qemu-devel] [PATCH 3/7] Add support for glib based threading and convert qemu thread to use it Anthony Liguori
2011-01-25 14:24 ` Aurelien Jarno
2011-01-25 15:34 ` Anthony Liguori
2011-02-02 17:32 ` [Qemu-devel] " Paolo Bonzini
2011-02-02 17:35 ` Anthony Liguori
2011-01-24 21:00 ` [Qemu-devel] [PATCH 4/7] Get rid of QemuMutex and teach its callers about GStaticMutex Anthony Liguori
2011-01-24 22:24 ` [Qemu-devel] " Jan Kiszka
2011-01-25 0:02 ` Anthony Liguori [this message]
2011-01-25 7:39 ` Jan Kiszka
2011-01-24 21:00 ` [Qemu-devel] [PATCH 5/7] threads: get rid of QemuCond and teach callers about GCond Anthony Liguori
2011-01-24 21:00 ` [Qemu-devel] [PATCH 6/7] Teach vnc server to use GThread directly Anthony Liguori
2011-01-26 10:39 ` Stefan Hajnoczi
2011-01-24 21:00 ` [Qemu-devel] [PATCH 7/7] Rename QemuThread to QemuSThread to indicate that it is not a generic thread Anthony Liguori
2011-01-24 21:28 ` [Qemu-devel] Re: [RFC 0/7] Introduce hard dependency on glib Paolo Bonzini
2011-01-24 22:01 ` Anthony Liguori
2011-01-25 10:41 ` Paolo Bonzini
2011-01-25 11:14 ` Daniel P. Berrange
2011-01-25 11:21 ` Paolo Bonzini
2011-01-25 0:24 ` [Qemu-devel] " Anthony Liguori
2011-01-25 6:51 ` Edgar E. Iglesias
2011-01-25 10:24 ` Stefan Hajnoczi
2011-01-25 11:51 ` Gerd Hoffmann
2011-01-25 12:04 ` Daniel P. Berrange
2011-01-25 14:48 ` Stefano Stabellini
2011-01-25 17:48 ` Anthony Liguori
2011-01-25 18:12 ` Stefano Stabellini
2011-01-25 14:23 ` Aurelien Jarno
2011-01-25 15:35 ` Anthony Liguori
[not found] ` <20110126044710.GU9566@redhat.com>
2011-01-26 15:53 ` Anthony Liguori
2011-01-26 21:23 ` Stefan Hajnoczi
2011-01-26 22:12 ` Anthony Liguori
2011-01-26 17:48 ` Johannes Stezenbach
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=4D3E130B.3000902@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=arun@linux.vnet.ibm.com \
--cc=jan.kiszka@web.de \
--cc=mtosatti@redhat.com \
--cc=paul@codesourcery.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).