qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PULL v3 00/33] Misc patches for 2017-06-01


From: Paolo Bonzini
Subject: [Qemu-devel] [PULL v3 00/33] Misc patches for 2017-06-01
Date: Tue, 6 Jun 2017 16:02:15 +0200

The following changes since commit 70f31414e71250c6049a46851372ee6ea76f40dd:

  Merge remote-tracking branch 'remotes/ehabkost/tags/numa-pull-request' into 
staging (2017-06-01 10:58:47 +0100)

are available in the git repository at:

  git://github.com/bonzini/qemu.git tags/for-upstream

for you to fetch changes up to 0c5029c963dbce627d75cd0267594224c89a6479:

  Merge tag 'tags/for-upstream' into HEAD

----------------------------------------------------------------
* virtio-scsi use-after-free fix (Fam)
* vhost-user-scsi support (Felipe)
* SMM fixes and improvements for TCG (myself, Mihail)
* irqchip and AddressSpaceDispatch cleanups and fixes (Peter)
* Coverity fix (Stefano)
* NBD cleanups and fixes (Vladimir, Eric, myself)
* RTC accuracy improvements and code cleanups (Guangrong+Yunfang)
* socket error reporting improvement (Daniel)
* GDB XML description for SSE registers (Abdallah)
* kvmclock update fix (Denis)
* SMM memory savings (Gonglei)
* -cpu 486 fix (Paolo)
* various bugfixes (Roman, Peter, myself, Thomas)
* rtc-test improvement (Guangrong)
* migration throttling fix (Felipe)

----------------------------------------------------------------
Dropped Peter's "exec: fix address_space_get_iotlb_entry page mask" at his
request, fixed vhost-user-scsi.

Abdallah Bouassida (1):
      target/i386: Add GDB XML description for SSE registers

Daniel P. Berrange (1):
      sockets: improve error reporting if UNIX socket path is too long

Denis Plotnikov (1):
      kvmclock: update system_time_msr address forcibly

Eric Blake (1):
      nbd: Fully initialize client in case of failed negotiation

Fam Zheng (1):
      virtio-scsi: Unset hotplug handler when unrealize

Felipe Franciosi (3):
      vhost-user-scsi: Introduce vhost-user-scsi host device
      vhost-user-scsi: Introduce a vhost-user-scsi sample application
      cpus: reset throttle_thread_scheduled after sleep

Gonglei (1):
      kvm: don't register smram_listener when smm is off

Mihail Abakumov (1):
      i386: fix read/write cr with icount option

Paolo Bonzini (5):
      target/i386: enable A20 automatically in system management mode
      target/i386: use multiple CPU AddressSpaces
      linuxboot_dma: compile for i486
      edu: fix memory leak on msi_broken platforms
      nbd: make it thread-safe, fix qcow2 over nbd

Peter Xu (4):
      kvm: irqchip: trace changes on msi add/remove
      msix: trace control bit write op
      kvm: irqchip: skip update msi when disabled
      exec: simplify phys_page_find() params

Roman Pen (1):
      i386/kvm: do not zero out segment flags if segment is unusable or not 
present

Stefano Stabellini (1):
      Check the return value of fcntl in qemu_set_cloexec

Tai Yunfang (1):
      mc146818rtc: precisely count the clock for periodic timer

Thomas Huth (1):
      hw/core: nmi.c can be compiled as common-obj nowadays

Vladimir Sementsov-Ogievskiy (5):
      nbd: strict nbd_wr_syncv
      nbd: read_sync and friends: return 0 on success
      nbd: add errp parameter to nbd_wr_syncv()
      nbd: add errp to read_sync, write_sync and drop_sync
      nbd/client.c: use errp instead of LOG

Xiao Guangrong (5):
      mc146818rtc: update periodic timer only if it is needed
      mc146818rtc: ensure LOST_TICK_POLICY_SLEW is only enabled on TARGET_I386
      mc146818rtc: drop unnecessary '#ifdef TARGET_I386'
      mc146818rtc: embrace all x86 specific code
      qtest: add rtc periodic timer test

 .gitignore                                |   1 +
 Makefile                                  |   3 +
 Makefile.objs                             |   4 +
 block/nbd-client.c                        |  41 +-
 configure                                 |   4 +-
 contrib/libvhost-user/libvhost-user.h     |  11 +-
 contrib/vhost-user-scsi/Makefile.objs     |   1 +
 contrib/vhost-user-scsi/vhost-user-scsi.c | 886 ++++++++++++++++++++++++++++++
 cpus.c                                    |   2 +-
 default-configs/pci.mak                   |   1 +
 default-configs/s390x-softmmu.mak         |   1 +
 exec.c                                    |  13 +-
 gdb-xml/i386-32bit-sse.xml                |  52 ++
 gdb-xml/i386-32bit.xml                    |  14 +
 gdb-xml/i386-64bit-sse.xml                |  60 ++
 gdb-xml/i386-64bit.xml                    |  14 +
 hw/core/Makefile.objs                     |   2 +-
 hw/i386/kvm/clock.c                       |   3 +
 hw/misc/edu.c                             |  12 +-
 hw/pci/msix.c                             |  11 +-
 hw/pci/trace-events                       |   3 +
 hw/scsi/Makefile.objs                     |   1 +
 hw/scsi/vhost-scsi-common.c               |   1 -
 hw/scsi/vhost-user-scsi.c                 | 211 +++++++
 hw/scsi/virtio-scsi.c                     |   3 +
 hw/timer/mc146818rtc.c                    | 203 ++++---
 hw/virtio/virtio-pci.c                    |  58 ++
 hw/virtio/virtio-pci.h                    |  11 +
 include/block/nbd.h                       |   8 +-
 include/hw/timer/mc146818rtc_regs.h       |  20 +
 include/hw/virtio/vhost-user-scsi.h       |  35 ++
 include/hw/virtio/virtio-scsi.h           |   2 +
 kvm-all.c                                 |   8 +-
 nbd/client.c                              | 125 ++---
 nbd/common.c                              |  23 +-
 nbd/nbd-internal.h                        |  40 +-
 nbd/server.c                              | 100 ++--
 pc-bios/linuxboot_dma.bin                 | Bin 1536 -> 1536 bytes
 pc-bios/optionrom/Makefile                |   1 +
 qemu-nbd.c                                |   5 +-
 target/i386/arch_memory_mapping.c         |  18 +-
 target/i386/cpu.c                         |  23 +-
 target/i386/cpu.h                         |  20 +-
 target/i386/helper.c                      |  96 ++--
 target/i386/kvm.c                         |  36 +-
 target/i386/machine.c                     |   4 -
 target/i386/smm_helper.c                  |  18 -
 target/i386/translate.c                   |  12 +
 tests/qemu-iotests/083.out                |   2 +
 tests/rtc-test.c                          |  49 ++
 trace-events                              |   3 +-
 util/oslib-posix.c                        |   4 +-
 util/qemu-sockets.c                       |  68 ++-
 53 files changed, 1954 insertions(+), 393 deletions(-)
 create mode 100644 contrib/vhost-user-scsi/Makefile.objs
 create mode 100644 contrib/vhost-user-scsi/vhost-user-scsi.c
 create mode 100644 gdb-xml/i386-32bit-sse.xml
 create mode 100644 gdb-xml/i386-32bit.xml
 create mode 100644 gdb-xml/i386-64bit-sse.xml
 create mode 100644 gdb-xml/i386-64bit.xml
 create mode 100644 hw/scsi/vhost-user-scsi.c
 create mode 100644 include/hw/virtio/vhost-user-scsi.h
-- 
2.13.0

diff --cc hw/scsi/vhost-user-scsi.c
index 0000000000,d27b2ada8e..c8fdf33074
mode 000000,100644..100644
--- a/hw/scsi/vhost-user-scsi.c
+++ b/hw/scsi/vhost-user-scsi.c
@@@ -1,0 -1,211 +1,211 @@@
+ /*
+  * vhost-user-scsi host device
+  *
+  * Copyright (c) 2016 Nutanix Inc. All rights reserved.
+  *
+  * Author:
+  *  Felipe Franciosi <address@hidden>
+  *
+  * This work is largely based on the "vhost-scsi" implementation by:
+  *  Stefan Hajnoczi    <address@hidden>
+  *  Nicholas Bellinger <address@hidden>
+  *
+  * This work is licensed under the terms of the GNU LGPL, version 2 or later.
+  * See the COPYING.LIB file in the top-level directory.
+  *
+  */
+ 
+ #include "qemu/osdep.h"
+ #include "migration/vmstate.h"
+ #include "qapi/error.h"
+ #include "qemu/error-report.h"
+ #include "qemu/typedefs.h"
+ #include "qom/object.h"
+ #include "hw/fw-path-provider.h"
+ #include "hw/qdev-core.h"
+ #include "hw/virtio/vhost.h"
+ #include "hw/virtio/vhost-backend.h"
+ #include "hw/virtio/vhost-user-scsi.h"
+ #include "hw/virtio/virtio.h"
+ #include "hw/virtio/virtio-access.h"
 -#include "sysemu/char.h"
++#include "chardev/char-fe.h"
+ 
+ /* Features supported by the host application */
+ static const int user_feature_bits[] = {
+     VIRTIO_F_NOTIFY_ON_EMPTY,
+     VIRTIO_RING_F_INDIRECT_DESC,
+     VIRTIO_RING_F_EVENT_IDX,
+     VIRTIO_SCSI_F_HOTPLUG,
+     VHOST_INVALID_FEATURE_BIT
+ };
+ 
+ static void vhost_user_scsi_set_status(VirtIODevice *vdev, uint8_t status)
+ {
+     VHostUserSCSI *s = (VHostUserSCSI *)vdev;
+     VHostSCSICommon *vsc = VHOST_SCSI_COMMON(s);
+     bool start = (status & VIRTIO_CONFIG_S_DRIVER_OK) && vdev->vm_running;
+ 
+     if (vsc->dev.started == start) {
+         return;
+     }
+ 
+     if (start) {
+         int ret;
+ 
+         ret = vhost_scsi_common_start(vsc);
+         if (ret < 0) {
+             error_report("unable to start vhost-user-scsi: %s", 
strerror(-ret));
+             exit(1);
+         }
+     } else {
+         vhost_scsi_common_stop(vsc);
+     }
+ }
+ 
+ static void vhost_dummy_handle_output(VirtIODevice *vdev, VirtQueue *vq)
+ {
+ }
+ 
+ static void vhost_user_scsi_save(QEMUFile *f, void *opaque)
+ {
+     VirtIODevice *vdev = VIRTIO_DEVICE(opaque);
+     virtio_save(vdev, f);
+ }
+ 
+ static int vhost_user_scsi_load(QEMUFile *f, void *opaque, int version_id)
+ {
+     VirtIODevice *vdev = VIRTIO_DEVICE(opaque);
+     return virtio_load(vdev, f, version_id);
+ }
+ 
+ static void vhost_user_scsi_realize(DeviceState *dev, Error **errp)
+ {
+     VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(dev);
+     VHostUserSCSI *s = VHOST_USER_SCSI(dev);
+     VHostSCSICommon *vsc = VHOST_SCSI_COMMON(s);
+     static int vhost_user_scsi_id;
+     Error *err = NULL;
+     int ret;
+ 
+     if (!vs->conf.chardev.chr) {
+         error_setg(errp, "vhost-user-scsi: missing chardev");
+         return;
+     }
+ 
+     virtio_scsi_common_realize(dev, vhost_dummy_handle_output,
+                                vhost_dummy_handle_output,
+                                vhost_dummy_handle_output, &err);
+     if (err != NULL) {
+         error_propagate(errp, err);
+         return;
+     }
+ 
+     vsc->dev.nvqs = 2 + vs->conf.num_queues;
+     vsc->dev.vqs = g_new(struct vhost_virtqueue, vsc->dev.nvqs);
+     vsc->dev.vq_index = 0;
+     vsc->dev.backend_features = 0;
+ 
+     ret = vhost_dev_init(&vsc->dev, (void *)&vs->conf.chardev,
+                          VHOST_BACKEND_TYPE_USER, 0);
+     if (ret < 0) {
+         error_setg(errp, "vhost-user-scsi: vhost initialization failed: %s",
+                    strerror(-ret));
+         return;
+     }
+ 
+     /* Channel and lun both are 0 for bootable vhost-user-scsi disk */
+     vsc->channel = 0;
+     vsc->lun = 0;
+     vsc->target = vs->conf.boot_tpgt;
+ 
+     register_savevm(dev, "vhost-user-scsi", vhost_user_scsi_id++, 1,
+                     vhost_user_scsi_save, vhost_user_scsi_load, s);
+ }
+ 
+ static void vhost_user_scsi_unrealize(DeviceState *dev, Error **errp)
+ {
+     VirtIODevice *vdev = VIRTIO_DEVICE(dev);
+     VHostUserSCSI *s = VHOST_USER_SCSI(dev);
+     VHostSCSICommon *vsc = VHOST_SCSI_COMMON(s);
+ 
+     /* This will stop the vhost backend. */
+     vhost_user_scsi_set_status(vdev, 0);
+ 
+     vhost_dev_cleanup(&vsc->dev);
+     g_free(vsc->dev.vqs);
+ 
+     virtio_scsi_common_unrealize(dev, errp);
+ }
+ 
+ static uint64_t vhost_user_scsi_get_features(VirtIODevice *vdev,
+                                              uint64_t features, Error **errp)
+ {
+     VHostUserSCSI *s = VHOST_USER_SCSI(vdev);
+ 
+     /* Turn on predefined features supported by this device */
+     features |= s->host_features;
+ 
+     return vhost_scsi_common_get_features(vdev, features, errp);
+ }
+ 
+ static Property vhost_user_scsi_properties[] = {
+     DEFINE_PROP_CHR("chardev", VirtIOSCSICommon, conf.chardev),
+     DEFINE_PROP_UINT32("boot_tpgt", VirtIOSCSICommon, conf.boot_tpgt, 0),
+     DEFINE_PROP_UINT32("num_queues", VirtIOSCSICommon, conf.num_queues, 1),
+     DEFINE_PROP_UINT32("max_sectors", VirtIOSCSICommon, conf.max_sectors,
+                        0xFFFF),
+     DEFINE_PROP_UINT32("cmd_per_lun", VirtIOSCSICommon, conf.cmd_per_lun, 
128),
+     DEFINE_PROP_BIT64("hotplug", VHostUserSCSI, host_features,
+                                                 VIRTIO_SCSI_F_HOTPLUG,
+                                                 true),
+     DEFINE_PROP_BIT64("param_change", VHostUserSCSI, host_features,
+                                                      VIRTIO_SCSI_F_CHANGE,
+                                                      true),
+     DEFINE_PROP_END_OF_LIST(),
+ };
+ 
+ static void vhost_user_scsi_class_init(ObjectClass *klass, void *data)
+ {
+     DeviceClass *dc = DEVICE_CLASS(klass);
+     VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
+     FWPathProviderClass *fwc = FW_PATH_PROVIDER_CLASS(klass);
+ 
+     dc->props = vhost_user_scsi_properties;
+     set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
+     vdc->realize = vhost_user_scsi_realize;
+     vdc->unrealize = vhost_user_scsi_unrealize;
+     vdc->get_features = vhost_user_scsi_get_features;
+     vdc->set_config = vhost_scsi_common_set_config;
+     vdc->set_status = vhost_user_scsi_set_status;
+     fwc->get_dev_path = vhost_scsi_common_get_fw_dev_path;
+ }
+ 
+ static void vhost_user_scsi_instance_init(Object *obj)
+ {
+     VHostSCSICommon *vsc = VHOST_SCSI_COMMON(obj);
+ 
+     vsc->feature_bits = user_feature_bits;
+ 
+     /* Add the bootindex property for this object */
+     device_add_bootindex_property(obj, &vsc->bootindex, "bootindex", NULL,
+                                   DEVICE(vsc), NULL);
+ }
+ 
+ static const TypeInfo vhost_user_scsi_info = {
+     .name = TYPE_VHOST_USER_SCSI,
+     .parent = TYPE_VHOST_SCSI_COMMON,
+     .instance_size = sizeof(VHostUserSCSI),
+     .class_init = vhost_user_scsi_class_init,
+     .instance_init = vhost_user_scsi_instance_init,
+     .interfaces = (InterfaceInfo[]) {
+         { TYPE_FW_PATH_PROVIDER },
+         { }
+     },
+ };
+ 
+ static void virtio_register_types(void)
+ {
+     type_register_static(&vhost_user_scsi_info);
+ }
+ 
+ type_init(virtio_register_types)
diff --cc include/hw/virtio/virtio-scsi.h
index eac2013ddd,ca77a4263d..de6ae5a9f6
--- a/include/hw/virtio/virtio-scsi.h
+++ b/include/hw/virtio/virtio-scsi.h
@@@ -21,6 -21,7 +21,7 @@@
  #include "hw/virtio/virtio.h"
  #include "hw/pci/pci.h"
  #include "hw/scsi/scsi.h"
 -#include "sysemu/char.h"
++#include "chardev/char-fe.h"
  #include "sysemu/iothread.h"
  
  #define TYPE_VIRTIO_SCSI_COMMON "virtio-scsi-common"




reply via email to

[Prev in Thread] Current Thread [Next in Thread]