From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:37070) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QEIXy-00078W-59 for qemu-devel@nongnu.org; Mon, 25 Apr 2011 05:57:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QEIXx-000323-67 for qemu-devel@nongnu.org; Mon, 25 Apr 2011 05:57:38 -0400 Received: from mx1.redhat.com ([209.132.183.28]:23201) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QEIXw-00031e-QH for qemu-devel@nongnu.org; Mon, 25 Apr 2011 05:57:37 -0400 Date: Mon, 25 Apr 2011 15:27:20 +0530 From: Amit Shah Message-ID: <20110425095720.GA8308@amit-x200.redhat.com> References: <20110422125943.2F24E6FC039@msa105.auone-net.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20110422125943.2F24E6FC039@msa105.auone-net.jp> Subject: Re: [Qemu-devel] [PATCH] char: Allow devices to use a single multiplexed chardev. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kusanagi Kouichi Cc: qemu-devel@nongnu.org On (Fri) 22 Apr 2011 [21:59:42], Kusanagi Kouichi wrote: > This fixes regression caused by commit > 2d6c1ef40f3678ab47a4d14fb5dadaa486bfcda6 > ("char: Prevent multiple devices opening same chardev"). What's the regression? How do I test it? > Signed-off-by: Kusanagi Kouichi > --- > hw/qdev-properties.c | 4 ++-- > qemu-char.c | 5 ++++- > qemu-char.h | 2 +- > 3 files changed, 7 insertions(+), 4 deletions(-) > > diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c > index 1088a26..0eed712 100644 > --- a/hw/qdev-properties.c > +++ b/hw/qdev-properties.c > @@ -354,10 +354,10 @@ static int parse_chr(DeviceState *dev, Property *prop, const char *str) > if (*ptr == NULL) { > return -ENOENT; > } > - if ((*ptr)->assigned) { > + if ((*ptr)->avail < 1) { > return -EEXIST; > } > - (*ptr)->assigned = 1; > + --(*ptr)->avail; > return 0; > } > > diff --git a/qemu-char.c b/qemu-char.c > index 03858d4..f08f2b8 100644 > --- a/qemu-char.c > +++ b/qemu-char.c > @@ -199,7 +199,7 @@ void qemu_chr_add_handlers(CharDriverState *s, > { > if (!opaque) { > /* chr driver being released. */ > - s->assigned = 0; > + ++s->avail; > } Will just checking for handlers (fd_can_read, fd_read, fd_write not NULL) here help instead of this patch? > s->chr_can_read = fd_can_read; > s->chr_read = fd_read; > @@ -2544,7 +2544,10 @@ CharDriverState *qemu_chr_open_opts(QemuOpts *opts, > snprintf(base->label, len, "%s-base", qemu_opts_id(opts)); > chr = qemu_chr_open_mux(base); > chr->filename = base->filename; > + chr->avail = MAX_MUX; > QTAILQ_INSERT_TAIL(&chardevs, chr, next); > + } else { > + chr->avail = 1; > } > chr->label = qemu_strdup(qemu_opts_id(opts)); > return chr; > diff --git a/qemu-char.h b/qemu-char.h > index fb96eef..ebf3641 100644 > --- a/qemu-char.h > +++ b/qemu-char.h > @@ -70,7 +70,7 @@ struct CharDriverState { > char *label; > char *filename; > int opened; > - int assigned; /* chardev assigned to a device */ > + int avail; > QTAILQ_ENTRY(CharDriverState) next; > }; > > -- > 1.7.4.4 > > Amit