Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging
* x86 updates for Intel errata (myself, Eduardo)
* the big ugly list of x86 VMX features, which was targeted for 5.0 but
caused a Libvirt regression (myself)
# gpg: Signature made Thu 21 Nov 2019 15:35:13 GMT
# gpg: using RSA key BFFBD25F78C7AE83
# gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full]
# gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full]
# Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1
# Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83
* remotes/bonzini/tags/for-upstream:
i386: Add -noTSX aliases for hle=off, rtm=off CPU models
i386: Add new versions of Skylake/Cascadelake/Icelake without TSX
target/i386: add support for MSR_IA32_TSX_CTRL
target/i386: add VMX features to named CPU models
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
diff --git a/.travis.yml b/.travis.yml
index b9a026c..c09b6a0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -79,7 +79,7 @@
- BASE_CONFIG="--disable-docs --disable-tools"
- TEST_CMD="make check V=1"
# This is broadly a list of "mainline" softmmu targets which have support across the major distros
- - MAIN_SOFTMMU_TARGETS="aarch64-softmmu,arm-softmmu,i386-softmmu,mips-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu"
+ - MAIN_SOFTMMU_TARGETS="aarch64-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu"
- CCACHE_SLOPPINESS="include_file_ctime,include_file_mtime"
- CCACHE_MAXSIZE=1G
diff --git a/MAINTAINERS b/MAINTAINERS
index dfb7932..5e5e3e5 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2371,6 +2371,7 @@
TCG Plugins
M: Alex Bennée <alex.bennee@linaro.org>
S: Maintained
+F: docs/devel/tcg-plugins.rst
F: plugins/
F: tests/plugin
diff --git a/audio/audio.c b/audio/audio.c
index 7fc3aa9..56fae55 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1390,6 +1390,7 @@
size_t read = hw->pcm_ops->read(hw, hw->buf_emul + hw->pos_emul,
read_len);
hw->pending_emul += read;
+ hw->pos_emul = (hw->pos_emul + read) % hw->size_emul;
if (read < read_len) {
break;
}
diff --git a/contrib/libvhost-user/libvhost-user.c b/contrib/libvhost-user/libvhost-user.c
index 68c2713..ec27b78 100644
--- a/contrib/libvhost-user/libvhost-user.c
+++ b/contrib/libvhost-user/libvhost-user.c
@@ -992,7 +992,7 @@
vq->shadow_avail_idx = vq->last_avail_idx = vq->inuse + vq->used_idx;
if (vq->inuse) {
- vq->resubmit_list = malloc(sizeof(VuVirtqInflightDesc) * vq->inuse);
+ vq->resubmit_list = calloc(vq->inuse, sizeof(VuVirtqInflightDesc));
if (!vq->resubmit_list) {
return -1;
}
diff --git a/contrib/vhost-user-input/main.c b/contrib/vhost-user-input/main.c
index 449fd21..ef4b776 100644
--- a/contrib/vhost-user-input/main.c
+++ b/contrib/vhost-user-input/main.c
@@ -77,7 +77,7 @@
len = iov_from_buf(elem->in_sg, elem->in_num,
0, &vi->queue[i].event, sizeof(virtio_input_event));
vu_queue_push(dev, vq, elem, len);
- g_free(elem);
+ free(elem);
}
vu_queue_notify(&vi->dev.parent, vq);
@@ -153,7 +153,7 @@
0, &event, sizeof(event));
vi_handle_status(vi, &event);
vu_queue_push(dev, vq, elem, len);
- g_free(elem);
+ free(elem);
}
vu_queue_notify(&vi->dev.parent, vq);
diff --git a/docs/devel/index.rst b/docs/devel/index.rst
index 2ff058b..c86a3cd 100644
--- a/docs/devel/index.rst
+++ b/docs/devel/index.rst
@@ -22,4 +22,4 @@
decodetree
secure-coding-practices
tcg
- plugins
+ tcg-plugins
diff --git a/docs/devel/plugins.rst b/docs/devel/tcg-plugins.rst
similarity index 83%
rename from docs/devel/plugins.rst
rename to docs/devel/tcg-plugins.rst
index b18fb67..718eef0 100644
--- a/docs/devel/plugins.rst
+++ b/docs/devel/tcg-plugins.rst
@@ -25,6 +25,23 @@
API should it need to do so. The best way to avoid this is to submit
your plugin upstream so they can be updated if/when the API changes.
+API versioning
+--------------
+
+All plugins need to declare a symbol which exports the plugin API
+version they were built against. This can be done simply by::
+
+ QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
+
+The core code will refuse to load a plugin that doesn't export a
+`qemu_plugin_version` symbol or if plugin version is outside of QEMU's
+supported range of API versions.
+
+Additionally the `qemu_info_t` structure which is passed to the
+`qemu_plugin_install` method of a plugin will detail the minimum and
+current API versions supported by QEMU. The API version will be
+incremented if new APIs are added. The minimum API version will be
+incremented if existing APIs are changed or removed.
Exposure of QEMU internals
--------------------------
@@ -40,16 +57,14 @@
Usage
=====
-The QEMU binary needs to be compiled for plugin support:
+The QEMU binary needs to be compiled for plugin support::
-::
- configure --enable-plugins
+ configure --enable-plugins
Once built a program can be run with multiple plugins loaded each with
-their own arguments:
+their own arguments::
-::
- $QEMU $OTHER_QEMU_ARGS \
+ $QEMU $OTHER_QEMU_ARGS \
-plugin tests/plugin/libhowvec.so,arg=inline,arg=hint \
-plugin tests/plugin/libhotblocks.so
diff --git a/hw/display/xlnx_dp.c b/hw/display/xlnx_dp.c
index fde3b21..7058443 100644
--- a/hw/display/xlnx_dp.c
+++ b/hw/display/xlnx_dp.c
@@ -394,13 +394,18 @@
written = AUD_write(s->amixer_output_stream,
&s->out_buffer[s->data_ptr], s->byte_left);
} else {
+ int len_to_copy;
/*
* There is nothing to play.. We don't have any data! Fill the
* buffer with zero's and send it.
*/
written = 0;
- memset(s->out_buffer, 0, 1024);
- AUD_write(s->amixer_output_stream, s->out_buffer, 1024);
+ while (avail) {
+ len_to_copy = MIN(AUD_CHBUF_MAX_DEPTH, avail);
+ memset(s->out_buffer, 0, len_to_copy);
+ avail -= AUD_write(s->amixer_output_stream, s->out_buffer,
+ len_to_copy);
+ }
}
} else {
written = AUD_write(s->amixer_output_stream,
diff --git a/po/zh_CN.po b/po/zh_CN.po
index b25e8e3..38de6a4 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -66,7 +66,7 @@
msgstr "分离标签页"
msgid "Show Menubar"
-msgstr ""
+msgstr "显示菜单栏"
msgid "_Machine"
msgstr "虚拟机(_M)"
diff --git a/tests/bios-tables-test.c b/tests/bios-tables-test.c
index 0b33fb2..79f5da0 100644
--- a/tests/bios-tables-test.c
+++ b/tests/bios-tables-test.c
@@ -437,11 +437,11 @@
g_assert(!err || exp_err);
if (g_strcmp0(asl->str, exp_asl->str)) {
+ sdt->tmp_files_retain = true;
if (exp_err) {
fprintf(stderr,
"Warning! iasl couldn't parse the expected aml\n");
} else {
- sdt->tmp_files_retain = true;
exp_sdt->tmp_files_retain = true;
fprintf(stderr,
"acpi-test: Warning! %.4s mismatch. "
diff --git a/tests/tcg/multiarch/float_helpers.c b/tests/tcg/multiarch/float_helpers.c
index 8ee7903..bc530e5 100644
--- a/tests/tcg/multiarch/float_helpers.c
+++ b/tests/tcg/multiarch/float_helpers.c
@@ -79,11 +79,9 @@
#ifndef SNANF
/* Signaling NaN macros, if supported. */
-# if __GNUC_PREREQ(3, 3)
# define SNANF (__builtin_nansf (""))
# define SNAN (__builtin_nans (""))
# define SNANL (__builtin_nansl (""))
-# endif
#endif
static float f32_numbers[] = {
diff --git a/tests/tcg/multiarch/linux-test.c b/tests/tcg/multiarch/linux-test.c
index 673d7c8..8a7c15c 100644
--- a/tests/tcg/multiarch/linux-test.c
+++ b/tests/tcg/multiarch/linux-test.c
@@ -485,7 +485,11 @@
act.sa_flags = SA_SIGINFO;
chk_error(sigaction(SIGSEGV, &act, NULL));
if (setjmp(jmp_env) == 0) {
- *(uint8_t *)0 = 0;
+ /*
+ * clang requires volatile or it will turn this into a
+ * call to abort() instead of forcing a SIGSEGV.
+ */
+ *(volatile uint8_t *)0 = 0;
}
act.sa_handler = SIG_DFL;
diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index 91a9226..0b8c1b2 100755
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -403,7 +403,7 @@
exitcode = 0
if vm.ssh(*cmd) != 0:
exitcode = 3
- if exitcode != 0 and args.interactive:
+ if args.interactive:
vm.ssh()
if not args.snapshot:
diff --git a/ui/gtk.c b/ui/gtk.c
index 2f23922..692ccc7 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -2215,6 +2215,7 @@
setlocale(LC_MESSAGES, "");
setlocale(LC_CTYPE, "C.UTF-8");
bindtextdomain("qemu", CONFIG_QEMU_LOCALEDIR);
+ bind_textdomain_codeset("qemu", "UTF-8");
textdomain("qemu");
window_display = gtk_widget_get_display(s->window);