From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=44819 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PhV19-00080P-GE for qemu-devel@nongnu.org; Mon, 24 Jan 2011 17:36:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PhUq4-0004Q3-8W for qemu-devel@nongnu.org; Mon, 24 Jan 2011 17:24:45 -0500 Received: from fmmailgate01.web.de ([217.72.192.221]:56875) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PhUq3-0004Pu-Oz for qemu-devel@nongnu.org; Mon, 24 Jan 2011 17:24:44 -0500 Message-ID: <4D3DFC28.4000408@web.de> Date: Mon, 24 Jan 2011 23:24:40 +0100 From: Jan Kiszka MIME-Version: 1.0 References: <1295902845-29807-1-git-send-email-aliguori@us.ibm.com> <1295902845-29807-5-git-send-email-aliguori@us.ibm.com> In-Reply-To: <1295902845-29807-5-git-send-email-aliguori@us.ibm.com> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig22F1BD871F0ECA6E50AC70ED" Sender: jan.kiszka@web.de Subject: [Qemu-devel] Re: [PATCH 4/7] Get rid of QemuMutex and teach its callers about GStaticMutex List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Stefan Hajnoczi , Marcelo Tosatti , qemu-devel@nongnu.org, Paul Brook , Arun Bharadwaj , Paulo Bonzini This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig22F1BD871F0ECA6E50AC70ED Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable On 2011-01-24 22:00, Anthony Liguori wrote: > Signed-off-by: Anthony Liguori >=20 > 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) > =20 > #include "qemu-thread.h" > =20 > -QemuMutex qemu_global_mutex; > -static QemuMutex qemu_fair_mutex; > +GStaticMutex qemu_global_mutex; > +static GStaticMutex qemu_fair_mutex; > =20 > static QemuThread io_thread; > =20 > @@ -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); > =20 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). 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. Jan --------------enig22F1BD871F0ECA6E50AC70ED Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.15 (GNU/Linux) Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org/ iEYEARECAAYFAk09/CgACgkQitSsb3rl5xSc1gCg3XQqvSRegkWyceynEWNJEhPx fX8An2LLYl4Zn7FwWdlC0XhmeIk/xYlQ =OQVh -----END PGP SIGNATURE----- --------------enig22F1BD871F0ECA6E50AC70ED--