All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Blue Swirl <blauwirbel@gmail.com>,
	Anthony Liguori <aliguori@us.ibm.com>,
	qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 2/2] main: switch qemu_set_fd_handler to g_io_add_watch
Date: Tue, 06 Sep 2011 10:59:41 -0500	[thread overview]
Message-ID: <4E66436D.6020507@codemonkey.ws> (raw)
In-Reply-To: <4E662EC3.4070603@redhat.com>

On 09/06/2011 09:31 AM, Paolo Bonzini wrote:
> On 08/22/2011 03:47 PM, Paolo Bonzini wrote:
>> On 08/22/2011 03:45 PM, Anthony Liguori wrote:
>>>>
>>>> Almost: in Win32 you need to use g_io_channel_win32_new_socket. But
>>>> indeed on Windows you can only use qemu_set_fd_handler for sockets too.
>>>
>>> I think that's really only for read/write though. If you're just
>>> polling on I/O, it shouldn't matter IIUC.
>>>
>>> If someone has a Windows box, they can confirm/deny by using qemu
>>> -monitor tcp:localhost:1024,socket,nowait with this patch.
>>
>> Actually you're right, it works automagically:
>>
>> * On Win32, this can be used either for files opened with the MSVCRT
>> * (the Microsoft run-time C library) _open() or _pipe, including file
>> * descriptors 0, 1 and 2 (corresponding to stdin, stdout and stderr),
>> * or for Winsock SOCKETs. If the parameter is a legal file
>> * descriptor, it is assumed to be such, otherwise it should be a
>> * SOCKET. This relies on SOCKETs and file descriptors not
>> * overlapping. If you want to be certain, call either
>> * g_io_channel_win32_new_fd() or g_io_channel_win32_new_socket()
>> * instead as appropriate.
>>
>> So this patch would even let interested people enable exec migration on
>> Windows.
>
> Hmmm, after reading documentation better, this unfortunately is
> completely broken under Windows, for two reasons:
>
> 1) in patch 1/2 you're using the glib pollfds and passing them to
> select(). Unfortunately under Windows they are special and can only be
> passed to g_poll(). Unfortunately, this can be fixed by changing the
> QEMU main loop to use poll() instead of select()...

Hrm, okay.

> 2) ... because glib IO channels cannot be used just for watches under
> Windows:
>
> /* Create an IO channel for C runtime (emulated Unix-like) file
> * descriptors. After calling g_io_add_watch() on a IO channel
> * returned by this function, you shouldn't call read() on the file
> * descriptor. This is because adding polling for a file descriptor is
> * implemented on Win32 by starting a thread that sits blocked in a
> * read() from the file descriptor most of the time. All reads from
> * the file descriptor should be done by this internal GLib
> * thread. Your code should call only g_io_channel_read().
> */
>
> So, I believe the right solution would be to drop this patch for now and
> make 1/2 conditional on !_WIN32.

So it should be possible to add a new Source type that just selects on a 
file descriptor and avoid GIOChannels?

Regards,

Anthony Liguori

>
> Paolo

  reply	other threads:[~2011-09-06 15:59 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-22 13:12 [Qemu-devel] [PATCH 1/2] Add glib support to main loop Anthony Liguori
2011-08-22 13:12 ` [Qemu-devel] [PATCH 2/2] main: switch qemu_set_fd_handler to g_io_add_watch Anthony Liguori
2011-08-22 13:40   ` Paolo Bonzini
2011-08-22 13:45     ` Anthony Liguori
2011-08-22 13:47       ` Paolo Bonzini
2011-09-06 14:31         ` Paolo Bonzini
2011-09-06 15:59           ` Anthony Liguori [this message]
2011-09-07  7:03             ` Paolo Bonzini
2011-09-07  8:08               ` Jan Kiszka
2011-09-07 12:42               ` Anthony Liguori
2011-09-07 14:40                 ` Paolo Bonzini
2011-09-07 14:53                   ` Anthony Liguori
2011-09-07 15:26                     ` Paolo Bonzini
2011-11-24 17:11         ` Fabien Chouteau
2011-11-24 17:30           ` Paolo Bonzini
2011-11-25 10:24             ` Fabien Chouteau
2011-11-25 10:46               ` Paolo Bonzini
2011-11-25 14:46                 ` Fabien Chouteau
2011-11-25 14:49                   ` Paolo Bonzini
2011-11-25 15:33                     ` Fabien Chouteau
2011-11-25 15:48                       ` Paolo Bonzini
2011-11-25 16:56                         ` Fabien Chouteau
2011-11-25 19:36                           ` Paolo Bonzini
2011-11-28  9:13                             ` Fabien Chouteau
2011-09-04 14:03   ` Avi Kivity
2011-09-04 14:51     ` Anthony Liguori
2011-09-04 15:01     ` Anthony Liguori
2011-09-07 12:54       ` Avi Kivity
2011-09-05  9:46     ` Avi Kivity
2011-09-01 18:54 ` [Qemu-devel] [PATCH 1/2] Add glib support to main loop 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=4E66436D.6020507@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=aliguori@us.ibm.com \
    --cc=blauwirbel@gmail.com \
    --cc=pbonzini@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.