Merge remote-tracking branch 'bonzini/threadpool' into staging
authorAnthony Liguori <aliguori@us.ibm.com>
Thu, 1 Nov 2012 16:13:39 +0000 (11:13 -0500)
committerAnthony Liguori <aliguori@us.ibm.com>
Thu, 1 Nov 2012 16:13:39 +0000 (11:13 -0500)
* bonzini/threadpool: (39 commits)
  raw-win32: implement native asynchronous I/O
  raw-posix: move linux-aio.c to block/
  raw-win32: add emulated AIO support
  raw-posix: rename raw-posix-aio.h, hide unavailable prototypes
  raw: merge posix-aio-compat.c into block/raw-posix.c
  block: switch posix-aio-compat to threadpool
  threadpool: do not take lock in event_notifier_ready
  aio: add generic thread-pool facility
  qemu-thread: add QemuSemaphore
  linux-aio: use event notifiers
  aio: clean up now-unused functions
  main-loop: use aio_notify for qemu_notify_event
  main-loop: use GSource to poll AIO file descriptors
  aio: call aio_notify after setting I/O handlers
  aio: add aio_notify
  aio: make AioContexts GSources
  aio: add Win32 implementation
  aio: prepare for introducing GSource-based dispatch
  aio: add non-blocking variant of aio_wait
  aio: test node->deleted before calling io_flush
  ...

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
1  2 
qemu-char.h
qemu-common.h
vl.c

diff --combined qemu-char.h
index 297dd983420668f3d46ddeea62620330bfa5051a,5087168bd777ef1062598a05f719ec8e83ec586c..a121e04cdc15f5d49b2556d36d23b0f635cb2137
@@@ -5,6 -5,7 +5,7 @@@
  #include "qemu-queue.h"
  #include "qemu-option.h"
  #include "qemu-config.h"
+ #include "qemu-aio.h"
  #include "qobject.h"
  #include "qstring.h"
  #include "main-loop.h"
@@@ -69,7 -70,7 +70,7 @@@ struct CharDriverState 
      void (*chr_guest_open)(struct CharDriverState *chr);
      void (*chr_guest_close)(struct CharDriverState *chr);
      void *opaque;
 -    QEMUBH *bh;
 +    QEMUTimer *open_timer;
      char *label;
      char *filename;
      int opened;
diff --combined qemu-common.h
index 2011c00fe24910ff5368f78c1fa9f17204b6abfe,c3328d230a9401f1133d25f64b70448c149369cb..bef58262f357cfabee048a1189575befde7fe98a
@@@ -14,6 -14,7 +14,7 @@@
  
  typedef struct QEMUTimer QEMUTimer;
  typedef struct QEMUFile QEMUFile;
+ typedef struct QEMUBH QEMUBH;
  typedef struct DeviceState DeviceState;
  
  struct Monitor;
@@@ -167,7 -168,6 +168,6 @@@ int qemu_fls(int i)
  int qemu_fdatasync(int fd);
  int fcntl_setfl(int fd, int flag);
  int qemu_parse_fd(const char *param);
- int qemu_parse_fdset(const char *param);
  
  /*
   * strtosz() suffixes used to specify the default treatment of an
@@@ -218,7 -218,6 +218,6 @@@ ssize_t qemu_recv_full(int fd, void *bu
      QEMU_WARN_UNUSED_RESULT;
  
  #ifndef _WIN32
- int qemu_eventfd(int pipefd[2]);
  int qemu_pipe(int pipefd[2]);
  #endif
  
@@@ -324,7 -323,9 +323,7 @@@ void cpu_save(QEMUFile *f, void *opaque
  int cpu_load(QEMUFile *f, void *opaque, int version_id);
  
  /* Unblock cpu */
 -void qemu_cpu_kick(void *env);
  void qemu_cpu_kick_self(void);
 -int qemu_cpu_is_self(void *env);
  
  /* work queue */
  struct qemu_work_item {
diff --combined vl.c
index 9ef217363f3b87263ec7221d74c3688493c0c6f2,5194ffacd6ef8d25ae4291dfb9e39e6f316eb02c..8d04f614b32bc030a7019f663eef4a5bfc8db1ce
--- 1/vl.c
--- 2/vl.c
+++ b/vl.c
@@@ -2441,11 -2441,6 +2441,6 @@@ static void free_and_trace(gpointer mem
      free(mem);
  }
  
- int qemu_init_main_loop(void)
- {
-     return main_loop_init();
- }
  int main(int argc, char **argv, char **envp)
  {
      int i;
              case QEMU_OPTION_M:
                  machine = machine_parse(optarg);
                  break;
 +            case QEMU_OPTION_no_kvm_irqchip: {
 +                olist = qemu_find_opts("machine");
 +                qemu_opts_parse(olist, "kernel_irqchip=off", 0);
 +                break;
 +            }
              case QEMU_OPTION_cpu:
                  /* hw initialization will check this */
                  cpu_model = optarg;
                      machine = machine_parse(optarg);
                  }
                  break;
 +             case QEMU_OPTION_no_kvm:
 +                olist = qemu_find_opts("machine");
 +                qemu_opts_parse(olist, "accel=tcg", 0);
 +                break;
 +            case QEMU_OPTION_no_kvm_pit: {
 +                fprintf(stderr, "Warning: KVM PIT can no longer be disabled "
 +                                "separately.\n");
 +                break;
 +            }
 +            case QEMU_OPTION_no_kvm_pit_reinjection: {
 +                static GlobalProperty kvm_pit_lost_tick_policy[] = {
 +                    {
 +                        .driver   = "kvm-pit",
 +                        .property = "lost_tick_policy",
 +                        .value    = "discard",
 +                    },
 +                    { /* end of list */ }
 +                };
 +
 +                fprintf(stderr, "Warning: option deprecated, use "
 +                        "lost_tick_policy property of kvm-pit instead.\n");
 +                qdev_prop_register_global_list(kvm_pit_lost_tick_policy);
 +                break;
 +            }
              case QEMU_OPTION_usb:
                  machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0);
                  if (machine_opts) {
              case QEMU_OPTION_semihosting:
                  semihosting_enabled = 1;
                  break;
 +            case QEMU_OPTION_tdf:
 +                fprintf(stderr, "Warning: user space PIT time drift fix "
 +                                "is no longer supported.\n");
 +                break;
              case QEMU_OPTION_name:
                  qemu_name = g_strdup(optarg);
                 {
      }
      loc_set_none();
  
+     qemu_init_cpu_loop();
+     if (qemu_init_main_loop()) {
+         fprintf(stderr, "qemu_init_main_loop failed\n");
+         exit(1);
+     }
      if (qemu_opts_foreach(qemu_find_opts("sandbox"), parse_sandbox, NULL, 0)) {
          exit(1);
      }
              add_device_config(DEV_VIRTCON, "vc:80Cx24C");
      }
  
 +    if (init_timer_alarm() < 0) {
 +        fprintf(stderr, "could not initialize alarm timer\n");
 +        exit(1);
 +    }
 +
      socket_init();
  
      if (qemu_opts_foreach(qemu_find_opts("chardev"), chardev_init_func, NULL, 1) != 0)
  
      configure_accelerator();
  
-     qemu_init_cpu_loop();
-     if (qemu_init_main_loop()) {
-         fprintf(stderr, "qemu_init_main_loop failed\n");
-         exit(1);
-     }
      machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0);
      if (machine_opts) {
          kernel_filename = qemu_opt_get(machine_opts, "kernel");
  
      os_set_line_buffering();
  
 -    if (init_timer_alarm() < 0) {
 -        fprintf(stderr, "could not initialize alarm timer\n");
 -        exit(1);
 -    }
 -
  #ifdef CONFIG_SPICE
      /* spice needs the timers to be initialized by this point */
      qemu_spice_init();