[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"
- [Qemu-devel] [PULL v3 00/33] Misc patches for 2017-06-01,
Paolo Bonzini <=