diff mbox

[v2] char: fix avail_connections init in qemu_chr_open_eventfd()

Message ID 1402500316-6894-1-git-send-email-david.marchand@6wind.com
State New
Headers show

Commit Message

David Marchand June 11, 2014, 3:25 p.m. UTC
When trying to use a ivshmem server with qemu, ivshmem init code tries to
create a CharDriverState object for each eventfd retrieved from the server.
To create this object, a call to qemu_chr_open_eventfd() is done.
Right after this, before adding a frontend, qemu_chr_fe_claim_no_fail() is
called.
qemu_chr_open_eventfd() does not set avail_connections to 1, so no frontend can
be associated because qemu_chr_fe_claim_no_fail() makes qemu stop right away.

This problem comes from 456d60692310e7ac25cf822cc1e98192ad636ece
"qemu-char: Call fe_claim / fe_release when not using qdev chr properties".

Fix this, by setting avail_connections to 1 in qemu_chr_open_eventfd().

Signed-off-by: David Marchand <david.marchand@6wind.com>
---
 qemu-char.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

Changes since v1
- fix coding style issue (missing braces)

Comments

Gerd Hoffmann June 12, 2014, 9:10 a.m. UTC | #1
On Mi, 2014-06-11 at 17:25 +0200, David Marchand wrote:
> When trying to use a ivshmem server with qemu, ivshmem init code tries to
> create a CharDriverState object for each eventfd retrieved from the server.
> To create this object, a call to qemu_chr_open_eventfd() is done.
> Right after this, before adding a frontend, qemu_chr_fe_claim_no_fail() is
> called.
> qemu_chr_open_eventfd() does not set avail_connections to 1, so no frontend can
> be associated because qemu_chr_fe_claim_no_fail() makes qemu stop right away.
> 
> This problem comes from 456d60692310e7ac25cf822cc1e98192ad636ece
> "qemu-char: Call fe_claim / fe_release when not using qdev chr properties".
> 
> Fix this, by setting avail_connections to 1 in qemu_chr_open_eventfd().
> 
> Signed-off-by: David Marchand <david.marchand@6wind.com>

Picked up.

cheers,
  Gerd
diff mbox

Patch

diff --git a/qemu-char.c b/qemu-char.c
index 17b476e..53eccc2 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -2493,7 +2493,13 @@  static gboolean tcp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
 #ifndef _WIN32
 CharDriverState *qemu_chr_open_eventfd(int eventfd)
 {
-    return qemu_chr_open_fd(eventfd, eventfd);
+    CharDriverState *chr = qemu_chr_open_fd(eventfd, eventfd);
+
+    if (chr) {
+        chr->avail_connections = 1;
+    }
+
+    return chr;
 }
 #endif