All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrange" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Andrew Baumann <Andrew.Baumann@microsoft.com>,
	Stefan Weil <sw@weilnetz.de>
Subject: [Qemu-devel] [PATCH v2 00/18] Multiple fixes & improvements to QIOChannel & Win32
Date: Thu, 10 Mar 2016 17:26:47 +0000	[thread overview]
Message-ID: <1457630825-26638-1-git-send-email-berrange@redhat.com> (raw)

This series started out as an attempt to fix the Win32 problems
identified by Andrew Baumann

   https://lists.gnu.org/archive/html/qemu-devel/2016-03/msg01343.html

It turned into a significantly larger cleanup of some chardev
and osdep win32 portability code.

Patch 1 addresses Andrew's 2nd stated problem - handling of
getpeername() failures, by fixing errno handling on Win32.

Patches 2-7 do some fixes in the test-io-channel-socket test
case so that it is able to run on Win32.

Patches 8-12 are some fixes for the QIOChannel code

Patch 13 is the big one that changes QIOChannelSocket so that
it uses a Win32 specific GSource implementation for creating
watches. This is the key fix for Andrew's 1st stated problem.

At this point tests/test-io-channel-socket passes and

  qemu-system-x86_64.exe  -serial tcp:127.0.0.1:9000,server,nowait -device sga -display non

works on win32 once more.

Patches 14-16 are some cleanups to the chardev code to improve
its clarity. They are not required for fixing any real problem

Patches 17-18 change the way we provide Win32 portability for
sockets APIs inside QEMU. These do fix a number of bugs in the
QEMU code related to mistaken use of errno instead of
socket_error(). None of these bugs appear to be critical issues.

Based on this, I'm proposing 1-13 for QEMU 2.6 release as they
fix critical win32 bugs.

Patches 14-18 can either be included in 2.6 or 2.7 - I'm
ambivalent on which, since they're cleanups / minor fixes.

Changed in v2:

 - Set event flags in qio_channel_socket_set_blocking
   instead of when creating GSource
 - Drop now uneeded patches that set QIOChanel to blocking mode
 - Change WSAEWOULDBLOCK into EAGAIN to avoid needing to check
   EWOULDBLOCK
 - Drop patches that replaced qemu_accept/qemu_socket
 - Drop wrapping of close/ioctl in favour of closesocket/
   ioctlsocket.

Daniel P. Berrange (15):
  osdep: fix socket_error() to work with Mingw64
  io: use bind() to check for IPv4/6 availability
  io: initialize sockets in test program
  io: bind to socket before creating QIOChannelSocket
  io: wait for incoming client in socket test
  io: set correct error object in background reader test thread
  io: assert errors before asserting content in I/O test
  io: fix copy+paste mistake in socket error message
  io: use qemu_accept to ensure SOCK_CLOEXEC is set
  io: remove checking of EWOULDBLOCK
  char: remove qemu_chr_finish_socket_connection method
  char: remove socket_try_connect method
  char: remove qemu_chr_open_socket_fd method
  osdep: add wrappers for socket functions
  osdep: remove use of socket_error() from all code

Paolo Bonzini (3):
  io: pass HANDLE to g_source_add_poll on Win32
  io: introduce qio_channel_create_socket_watch
  io: implement socket watch for win32 using WSAEventSelect+select

 Makefile                       |   4 +-
 block/sheepdog.c               |   5 +-
 include/io/channel-watch.h     |  20 ++-
 include/io/channel.h           |   3 +
 include/qemu/sockets.h         |  17 ---
 include/sysemu/os-posix.h      |   9 ++
 include/sysemu/os-win32.h      | 106 ++++++++++++----
 io/channel-command.c           |   6 +-
 io/channel-file.c              |   6 +-
 io/channel-socket.c            |  84 ++++++++-----
 io/channel-watch.c             | 152 +++++++++++++++++++++-
 io/channel.c                   |  14 +++
 linux-user/flatload.c          |   1 -
 migration/qemu-file-unix.c     |  14 +--
 migration/tcp.c                |   7 +-
 net/socket.c                   |  19 ++-
 qemu-char.c                    |  96 ++++++--------
 slirp/slirp.h                  |   2 -
 slirp/tcp_input.c              |   4 -
 tests/io-channel-helpers.c     |   6 +-
 tests/test-io-channel-socket.c |  92 +++++++-------
 util/oslib-win32.c             | 280 ++++++++++++++++++++++++++++++++++++++++-
 util/qemu-coroutine-io.c       |   6 +-
 util/qemu-sockets.c            |  10 +-
 24 files changed, 719 insertions(+), 244 deletions(-)

-- 
2.5.0

             reply	other threads:[~2016-03-10 17:27 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-10 17:26 Daniel P. Berrange [this message]
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 01/18] osdep: fix socket_error() to work with Mingw64 Daniel P. Berrange
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 02/18] io: use bind() to check for IPv4/6 availability Daniel P. Berrange
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 03/18] io: initialize sockets in test program Daniel P. Berrange
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 04/18] io: bind to socket before creating QIOChannelSocket Daniel P. Berrange
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 05/18] io: wait for incoming client in socket test Daniel P. Berrange
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 06/18] io: set correct error object in background reader test thread Daniel P. Berrange
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 07/18] io: assert errors before asserting content in I/O test Daniel P. Berrange
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 08/18] io: fix copy+paste mistake in socket error message Daniel P. Berrange
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 09/18] io: pass HANDLE to g_source_add_poll on Win32 Daniel P. Berrange
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 10/18] io: introduce qio_channel_create_socket_watch Daniel P. Berrange
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 11/18] io: use qemu_accept to ensure SOCK_CLOEXEC is set Daniel P. Berrange
2016-03-10 17:26 ` [Qemu-devel] [PATCH v2 12/18] io: remove checking of EWOULDBLOCK Daniel P. Berrange
2016-03-10 17:27 ` [Qemu-devel] [PATCH v2 13/18] io: implement socket watch for win32 using WSAEventSelect+select Daniel P. Berrange
2016-03-10 17:27 ` [Qemu-devel] [PATCH v2 14/18] char: remove qemu_chr_finish_socket_connection method Daniel P. Berrange
2016-03-10 17:27 ` [Qemu-devel] [PATCH v2 15/18] char: remove socket_try_connect method Daniel P. Berrange
2016-03-10 17:27 ` [Qemu-devel] [PATCH v2 16/18] char: remove qemu_chr_open_socket_fd method Daniel P. Berrange
2016-03-10 17:27 ` [Qemu-devel] [PATCH v2 17/18] osdep: add wrappers for socket functions Daniel P. Berrange
2016-03-10 17:27 ` [Qemu-devel] [PATCH v2 18/18] osdep: remove use of socket_error() from all code Daniel P. Berrange
2016-03-10 17:36 ` [Qemu-devel] [PATCH v2 00/18] Multiple fixes & improvements to QIOChannel & Win32 Paolo Bonzini
2016-03-11 23:51   ` Andrew Baumann
2016-03-14 14:10     ` Daniel P. Berrange

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=1457630825-26638-1-git-send-email-berrange@redhat.com \
    --to=berrange@redhat.com \
    --cc=Andrew.Baumann@microsoft.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=sw@weilnetz.de \
    /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.