qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Amit Shah <amit.shah@redhat.com>
Cc: agraf@suse.de, qemu-devel@nongnu.org, armbru@redhat.com,
	kraxel@redhat.com
Subject: Re: [Qemu-devel] [PATCH 2/8] virtio-console: qdev conversion, new virtio-serial-bus
Date: Mon, 04 Jan 2010 14:46:58 -0600	[thread overview]
Message-ID: <4B4253C2.6080508@codemonkey.ws> (raw)
In-Reply-To: <20091224052532.GB25261@amit-x200.redhat.com>

On 12/23/2009 11:25 PM, Amit Shah wrote:
> On (Wed) Dec 23 2009 [17:12:22], Anthony Liguori wrote:


>>> +struct VirtIOSerial {
>>> +    VirtIODevice vdev;
>>> +
>>> +    VirtQueue *c_ivq, *c_ovq;
>>> +    /* Arrays of ivqs and ovqs: one per port */
>>> +    VirtQueue **ivqs, **ovqs;
>>> +
>>> +    VirtIOSerialBus *bus;
>>> +
>>> +    QTAILQ_HEAD(, VirtIOSerialPort) ports;
>>> +    struct virtio_console_config config;
>>> +
>>> +    /*
>>> +     * This lock serialises writes to the guest via the ivq
>>> +     */
>>> +    pthread_mutex_t ivq_lock;
>>
>> This indicates some thing is wrong.  You should never need a mutex in a
>> device.
>
> You mean in the no locking needed sense, or not using a mutex sense? If
> the latter, what's the recommended way to do the locking?

There's a big global lock so this level of locking in the device is 
unnecessary.  Since we don't know what our re-entrance points are going 
to be, it's also incorrect because it makes assumptions that may not be 
true in the future.

>>> +    int header_len;
>>> +
>>> +    vq = port->ivq;
>>> +    if (!virtio_queue_ready(vq)) {
>>> +        return 0;
>>> +    }
>>> +    if (!size) {
>>> +        return 0;
>>> +    }
>>> +    header.flags = 0;
>>> +    header_len = use_multiport(port->vser) ? sizeof(header) : 0;
>>> +
>>> +    pthread_mutex_lock(&port->vser->ivq_lock);
>>> +    while (offset<   size) {
>>
>> CodingStyle seems consistently off in a curious way.  Always add spaces
>> after arithmetic operators.
>
> Curious case of patches getting modified for whitespace somewhere? (Or
> the mail client doing it?)
>
> I see the patch is fine in the copy I got CC'ed on; I deleted the one I
> got for the qemu-devel list so I can't verify that...
>
> http://article.gmane.org/gmane.comp.emulators.qemu/60257
>
> shows it made it fine to the list, so guess it's your mail client doing
> something funny.

Yup.  It's a thunderbird bug.  I upgraded and now it looks right.  Sorry 
for the noise.

>> The pthread_mutex_lock() can't be right.  qemu already runs with a
>> single global lock.  Even if you had another thread, there's no easy way
>> you could safely hold this lock without grabbing the global qemu lock.
>
> I know my current locking scheme is inadequate; but what's the
> preference here? I can remove the locking for now but we'll definitely
> want qemu to have more fine-grained locking, so when that happens,
> revisit all the code to ensure they're safe?
> on on this structure.

Definitely remove it.  Untested code is broken code and it will break 
the build on Windows.

> I'll annotate and read/write using the le format.

Just use ldl_p and stl_p. (or ldw/stw as appropriate).

>>> +static void virtser_bus_dev_print(Monitor *mon, DeviceState *qdev, int indent)
>>> +{
>>> +    VirtIOSerialDevice *dev = DO_UPCAST(VirtIOSerialDevice, qdev, qdev);
>>> +    VirtIOSerialPort *port = DO_UPCAST(VirtIOSerialPort, dev,&dev->qdev);
>>> +
>>> +    monitor_printf(mon, "%*s dev-prop-int: id: %u\n",
>>> +                   indent, "", port->id);
>>> +    monitor_printf(mon, "%*s dev-prop-int: is_console: %d\n",
>>> +                   indent, "", port->is_console);
>>> +}
>>
>>
>> This doesn't look used to me.
>
> It's helpful for debugging purposes, mostly: 'info qtree' on the monitor
> will print this out and one can examine port state.

Unused static functions will cause the build to fail with -Werror.

> 		Amit

       reply	other threads:[~2010-01-05 20:07 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1261597948-24293-1-git-send-email-amit.shah@redhat.com>
     [not found] ` <1261597948-24293-2-git-send-email-amit.shah@redhat.com>
     [not found]   ` <1261597948-24293-3-git-send-email-amit.shah@redhat.com>
     [not found]     ` <4B32A3D6.2010509@codemonkey.ws>
     [not found]       ` <20091224052532.GB25261@amit-x200.redhat.com>
2010-01-04 20:46         ` Anthony Liguori [this message]
2010-01-05 12:01           ` [Qemu-devel] [PATCH 2/8] virtio-console: qdev conversion, new virtio-serial-bus Amit Shah
2010-01-19 19:06 [Qemu-devel] [PATCH 0/8] virtio-console: Move to qdev, multiple devices, generic ports Amit Shah
2010-01-19 19:06 ` [Qemu-devel] [PATCH 1/8] virtio: Remove duplicate macro definition for max. virtqueues, bump up the max Amit Shah
2010-01-19 19:06   ` [Qemu-devel] [PATCH 2/8] virtio-console: qdev conversion, new virtio-serial-bus Amit Shah
  -- strict thread matches above, loose matches on Subject: below --
2010-01-14 13:17 [Qemu-devel] [PATCH 0/8] virtio-console: Move to qdev, multiple devices, generic ports Amit Shah
2010-01-14 13:17 ` [Qemu-devel] [PATCH 1/8] virtio: Remove duplicate macro definition for max. virtqueues, bump up the max Amit Shah
2010-01-14 13:17   ` [Qemu-devel] [PATCH 2/8] virtio-console: qdev conversion, new virtio-serial-bus Amit Shah
2010-01-07  7:31 [Qemu-devel] [PATCH 0/8] virtio-console: Move to qdev, multiple devices, generic ports Amit Shah
2010-01-07  7:31 ` [Qemu-devel] [PATCH 1/8] virtio: Remove duplicate macro definition for max. virtqueues, bump up the max Amit Shah
2010-01-07  7:31   ` [Qemu-devel] [PATCH 2/8] virtio-console: qdev conversion, new virtio-serial-bus Amit Shah
2010-01-04 17:34 [Qemu-devel] [PATCH 0/8] virtio-console: Move to qdev, multiple devices, generic ports Amit Shah
2010-01-04 17:34 ` [Qemu-devel] [PATCH 1/8] virtio: Remove duplicate macro definition for max. virtqueues, bump up the max Amit Shah
2010-01-04 17:34   ` [Qemu-devel] [PATCH 2/8] virtio-console: qdev conversion, new virtio-serial-bus Amit Shah
2010-01-05 16:42     ` Anthony Liguori
2010-01-05 17:04       ` Gerd Hoffmann
2010-01-05 17:08         ` Anthony Liguori
2010-01-05 17:16       ` Amit Shah
2010-01-05 17:25         ` Anthony Liguori

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=4B4253C2.6080508@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=agraf@suse.de \
    --cc=amit.shah@redhat.com \
    --cc=armbru@redhat.com \
    --cc=kraxel@redhat.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 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).