diff options
-rw-r--r-- | .travis.yml | 8 | ||||
-rw-r--r-- | hw/s390x/s390-pci-bus.c | 25 | ||||
-rw-r--r-- | hw/tpm/tpm_tis.c | 2 | ||||
-rw-r--r-- | linux-user/sparc/signal.c | 16 | ||||
-rw-r--r-- | net/filter-rewriter.c | 3 | ||||
-rw-r--r-- | qapi/ui.json | 17 | ||||
-rw-r--r-- | qemu-options.hx | 6 | ||||
-rwxr-xr-x | scripts/make-release | 1 | ||||
-rw-r--r-- | tests/tcg/multiarch/linux-test.c | 4 | ||||
-rw-r--r-- | tests/tpm-tests.c | 2 | ||||
-rw-r--r-- | ui/egl-headless.c | 2 |
11 files changed, 63 insertions, 23 deletions
diff --git a/.travis.yml b/.travis.yml index aa49c7b114..d472fd650b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -107,8 +107,14 @@ matrix: - env: CONFIG="--disable-tcg" TEST_CMD="" compiler: gcc - - env: CONFIG="" + # MacOSX builds + - env: CONFIG="--target-list=aarch64-softmmu,arm-softmmu,i386-softmmu,mips-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu" os: osx + osx_image: xcode9.4 + compiler: clang + - env: CONFIG="--target-list=i386-softmmu,ppc-softmmu,ppc64-softmmu,m68k-softmmu,x86_64-softmmu" + os: osx + osx_image: xcode10 compiler: clang # Python builds - env: CONFIG="--target-list=x86_64-softmmu" diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index e42e1b80d6..060ff062bc 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -780,17 +780,31 @@ static void s390_pci_msix_free(S390PCIBusDevice *pbdev) } static S390PCIBusDevice *s390_pci_device_new(S390pciState *s, - const char *target) + const char *target, Error **errp) { - DeviceState *dev = NULL; + Error *local_err = NULL; + DeviceState *dev; dev = qdev_try_create(BUS(s->bus), TYPE_S390_PCI_DEVICE); if (!dev) { + error_setg(errp, "zPCI device could not be created"); return NULL; } - qdev_prop_set_string(dev, "target", target); - qdev_init_nofail(dev); + object_property_set_str(OBJECT(dev), target, "target", &local_err); + if (local_err) { + object_unparent(OBJECT(dev)); + error_propagate_prepend(errp, local_err, + "zPCI device could not be created: "); + return NULL; + } + object_property_set_bool(OBJECT(dev), true, "realized", &local_err); + if (local_err) { + object_unparent(OBJECT(dev)); + error_propagate_prepend(errp, local_err, + "zPCI device could not be created: "); + return NULL; + } return S390_PCI_DEVICE(dev); } @@ -865,9 +879,8 @@ static void s390_pcihost_hot_plug(HotplugHandler *hotplug_dev, pbdev = s390_pci_find_dev_by_target(s, dev->id); if (!pbdev) { - pbdev = s390_pci_device_new(s, dev->id); + pbdev = s390_pci_device_new(s, dev->id, errp); if (!pbdev) { - error_setg(errp, "create zpci device failed"); return; } } diff --git a/hw/tpm/tpm_tis.c b/hw/tpm/tpm_tis.c index 12f5c9a759..d9322692ee 100644 --- a/hw/tpm/tpm_tis.c +++ b/hw/tpm/tpm_tis.c @@ -295,7 +295,7 @@ static void tpm_tis_request_completed(TPMIf *ti, int ret) if (s->cmd.selftest_done) { for (l = 0; l < TPM_TIS_NUM_LOCALITIES; l++) { - s->loc[locty].sts |= TPM_TIS_STS_SELFTEST_DONE; + s->loc[l].sts |= TPM_TIS_STS_SELFTEST_DONE; } } diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c index 295e415b1e..ead169fbaa 100644 --- a/linux-user/sparc/signal.c +++ b/linux-user/sparc/signal.c @@ -282,7 +282,7 @@ long do_sigreturn(CPUSPARCState *env) uint32_t up_psr, pc, npc; target_sigset_t set; sigset_t host_set; - int err=0, i; + int i; sf_addr = env->regwptr[UREG_FP]; trace_user_do_sigreturn(env, sf_addr); @@ -320,10 +320,13 @@ long do_sigreturn(CPUSPARCState *env) } /* FIXME: implement FPU save/restore: - * __get_user(fpu_save, &sf->fpu_save); - * if (fpu_save) - * err |= restore_fpu_state(env, fpu_save); - */ + * __get_user(fpu_save, &sf->fpu_save); + * if (fpu_save) { + * if (restore_fpu_state(env, fpu_save)) { + * goto segv_and_exit; + * } + * } + */ /* This is pretty much atomic, no amount locking would prevent * the races which exist anyways. @@ -336,9 +339,6 @@ long do_sigreturn(CPUSPARCState *env) target_to_host_sigset_internal(&host_set, &set); set_sigmask(&host_set); - if (err) { - goto segv_and_exit; - } unlock_user_struct(sf, sf_addr, 0); return -TARGET_QEMU_ESIGRETURN; diff --git a/net/filter-rewriter.c b/net/filter-rewriter.c index bb8f4d93b1..2e26839bc2 100644 --- a/net/filter-rewriter.c +++ b/net/filter-rewriter.c @@ -155,12 +155,13 @@ static int handle_primary_tcp_pkt(RewriterState *rf, * Active close step 2. */ if (conn->tcp_state == TCPS_FIN_WAIT_1) { - conn->tcp_state = TCPS_TIME_WAIT; /* * For simplify implementation, we needn't wait 2MSL time * in filter rewriter. Because guest kernel will track the * TCP status and wait 2MSL time, if client resend the FIN * packet, guest will apply the last ACK too. + * So, we skip the TCPS_TIME_WAIT state here and go straight + * to TCPS_CLOSED state. */ conn->tcp_state = TCPS_CLOSED; g_hash_table_remove(rf->connection_track_table, key); diff --git a/qapi/ui.json b/qapi/ui.json index bf9e157d5a..e0000248d3 100644 --- a/qapi/ui.json +++ b/qapi/ui.json @@ -1037,6 +1037,20 @@ 'data' : { '*grab-on-hover' : 'bool', '*zoom-to-fit' : 'bool' } } +## +# @DisplayEGLHeadless: +# +# EGL headless display options. +# +# @rendernode: Which DRM render node should be used. Default is the first +# available node on the host. +# +# Since: 3.1 +# +## +{ 'struct' : 'DisplayEGLHeadless', + 'data' : { '*rendernode' : 'str' } } + ## # @DisplayGLMode: # @@ -1086,4 +1100,5 @@ '*window-close' : 'bool', '*gl' : 'DisplayGLMode' }, 'discriminator' : 'type', - 'data' : { 'gtk' : 'DisplayGTK' } } + 'data' : { 'gtk' : 'DisplayGTK', + 'egl-headless' : 'DisplayEGLHeadless'} } diff --git a/qemu-options.hx b/qemu-options.hx index ee379b32e3..f7df472f43 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1216,7 +1216,8 @@ DEF("display", HAS_ARG, QEMU_OPTION_display, "-display gtk[,grab_on_hover=on|off][,gl=on|off]|\n" "-display vnc=<display>[,<optargs>]\n" "-display curses\n" - "-display none" + "-display none\n" + "-display egl-headless[,rendernode=<file>]" " select display type\n" "The default display is equivalent to\n" #if defined(CONFIG_GTK) @@ -1258,6 +1259,9 @@ menus and other UI elements to configure and control the VM during runtime. @item vnc Start a VNC server on display <arg> +@item egl-headless +Offload all OpenGL operations to a local DRI device. For any graphical display, +this display needs to be paired with either VNC or SPICE displays. @end table ETEXI diff --git a/scripts/make-release b/scripts/make-release index 04fa9defdc..c14f75b12c 100755 --- a/scripts/make-release +++ b/scripts/make-release @@ -19,6 +19,7 @@ pushd ${destination} git checkout "v${version}" git submodule update --init (cd roms/seabios && git describe --tags --long --dirty > .version) +(cd roms/skiboot && ./make_version.sh > .version) # FIXME: The following line is a workaround for avoiding filename collisions # when unpacking u-boot sources on case-insensitive filesystems. Once we # update to something with u-boot commit 610eec7f0 we can drop this line. diff --git a/tests/tcg/multiarch/linux-test.c b/tests/tcg/multiarch/linux-test.c index e80eccc0ce..fa4243fc04 100644 --- a/tests/tcg/multiarch/linux-test.c +++ b/tests/tcg/multiarch/linux-test.c @@ -83,7 +83,7 @@ static void test_file(void) struct utimbuf tbuf; struct iovec vecs[2]; DIR *dir; - struct dirent *de; + struct dirent64 *de; /* TODO: make common tempdir creation for tcg tests */ char template[] = "/tmp/linux-test-XXXXXX"; char *tmpdir = mkdtemp(template); @@ -186,7 +186,7 @@ static void test_file(void) error("opendir"); len = 0; for(;;) { - de = readdir(dir); + de = readdir64(dir); if (!de) break; if (strcmp(de->d_name, ".") != 0 && diff --git a/tests/tpm-tests.c b/tests/tpm-tests.c index 93a5beba01..582ec0cfd4 100644 --- a/tests/tpm-tests.c +++ b/tests/tpm-tests.c @@ -22,7 +22,7 @@ static bool tpm_test_swtpm_skip(void) { if (!tpm_util_swtpm_has_tpm2()) { - fprintf(stderr, "swtpm not in PATH or missing --tpm2 support; "); + g_test_message("swtpm not in PATH or missing --tpm2 support"); return true; } diff --git a/ui/egl-headless.c b/ui/egl-headless.c index 42a41310b0..4cf3bbc0e4 100644 --- a/ui/egl-headless.c +++ b/ui/egl-headless.c @@ -176,7 +176,7 @@ static void egl_headless_init(DisplayState *ds, DisplayOptions *opts) egl_dpy *edpy; int idx; - if (egl_rendernode_init(NULL, mode) < 0) { + if (egl_rendernode_init(opts->u.egl_headless.rendernode, mode) < 0) { error_report("egl: render node init failed"); exit(1); } |