Compare commits
19
Commits
v4.2.0-rc3
...
v4.2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b0ca999a43 | ||
|
|
52901abf94 | ||
|
|
9b4efa2ede | ||
|
|
f56281abd9 | ||
|
|
8350b17be0 | ||
|
|
a2fad86497 | ||
|
|
02f9c885ed | ||
|
|
2605188240 | ||
|
|
1bdc319ab5 | ||
|
|
24d68f3737 | ||
|
|
64bef038e7 | ||
|
|
39032981fa | ||
|
|
cb09104ea8 | ||
|
|
5a0948d36c | ||
|
|
4dbac1aed2 | ||
|
|
fb2246882a | ||
|
|
b944295090 | ||
|
|
bf876a688c | ||
|
|
f24ec9fead |
No files matched your search
+1
-7
@@ -237,13 +237,7 @@ matrix:
|
||||
- TEST_CMD=""
|
||||
|
||||
|
||||
# MacOSX builds
|
||||
- env:
|
||||
- CONFIG="--target-list=${MAIN_SOFTMMU_TARGETS}"
|
||||
os: osx
|
||||
osx_image: xcode9.4
|
||||
compiler: clang
|
||||
|
||||
# MacOSX builds - cirrus.yml also tests some MacOS builds including latest Xcode
|
||||
|
||||
- env:
|
||||
- CONFIG="--target-list=i386-softmmu,ppc-softmmu,ppc64-softmmu,m68k-softmmu,x86_64-softmmu"
|
||||
|
||||
+1
-1
@@ -1973,7 +1973,7 @@ static void raw_aio_attach_aio_context(BlockDriverState *bs,
|
||||
#ifdef CONFIG_LINUX_AIO
|
||||
BDRVRawState *s = bs->opaque;
|
||||
if (s->use_linux_aio) {
|
||||
Error *local_err;
|
||||
Error *local_err = NULL;
|
||||
if (!aio_setup_linux_aio(new_context, &local_err)) {
|
||||
error_reportf_err(local_err, "Unable to use native AIO, "
|
||||
"falling back to thread pool: ");
|
||||
|
||||
@@ -1469,8 +1469,10 @@ int coroutine_fn qcow2_co_remove_persistent_dirty_bitmap(BlockDriverState *bs,
|
||||
Qcow2BitmapList *bm_list;
|
||||
|
||||
if (s->nb_bitmaps == 0) {
|
||||
/* Absence of the bitmap is not an error: see explanation above
|
||||
* bdrv_remove_persistent_dirty_bitmap() definition. */
|
||||
/*
|
||||
* Absence of the bitmap is not an error: see explanation above
|
||||
* bdrv_co_remove_persistent_dirty_bitmap() definition.
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1485,7 +1487,8 @@ int coroutine_fn qcow2_co_remove_persistent_dirty_bitmap(BlockDriverState *bs,
|
||||
|
||||
bm = find_bitmap_by_name(bm_list, name);
|
||||
if (bm == NULL) {
|
||||
ret = -EINVAL;
|
||||
/* Absence of the bitmap is not an error, see above. */
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
+14
-13
@@ -2795,6 +2795,7 @@ static bool failover_unplug_primary(VirtIONet *n)
|
||||
|
||||
static bool failover_replug_primary(VirtIONet *n, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
HotplugHandler *hotplug_ctrl;
|
||||
PCIDevice *pdev = PCI_DEVICE(n->primary_dev);
|
||||
|
||||
@@ -2806,32 +2807,33 @@ static bool failover_replug_primary(VirtIONet *n, Error **errp)
|
||||
qemu_find_opts("device"),
|
||||
n->primary_device_dict, errp);
|
||||
if (!n->primary_device_opts) {
|
||||
error_setg(errp, "virtio_net: couldn't find primary device opts");
|
||||
goto out;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (!n->primary_dev) {
|
||||
error_setg(errp, "virtio_net: couldn't find primary device");
|
||||
goto out;
|
||||
}
|
||||
|
||||
n->primary_bus = n->primary_dev->parent_bus;
|
||||
if (!n->primary_bus) {
|
||||
error_setg(errp, "virtio_net: couldn't find primary bus");
|
||||
goto out;
|
||||
return false;
|
||||
}
|
||||
qdev_set_parent_bus(n->primary_dev, n->primary_bus);
|
||||
n->primary_should_be_hidden = false;
|
||||
qemu_opt_set_bool(n->primary_device_opts,
|
||||
"partially_hotplugged", true, errp);
|
||||
"partially_hotplugged", true, &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
hotplug_ctrl = qdev_get_hotplug_handler(n->primary_dev);
|
||||
if (hotplug_ctrl) {
|
||||
hotplug_handler_pre_plug(hotplug_ctrl, n->primary_dev, errp);
|
||||
hotplug_handler_pre_plug(hotplug_ctrl, n->primary_dev, &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
hotplug_handler_plug(hotplug_ctrl, n->primary_dev, errp);
|
||||
}
|
||||
|
||||
out:
|
||||
return *errp == NULL;
|
||||
error_propagate(errp, err);
|
||||
return !err;
|
||||
}
|
||||
|
||||
static void virtio_net_handle_migration_primary(VirtIONet *n,
|
||||
@@ -2849,8 +2851,7 @@ static void virtio_net_handle_migration_primary(VirtIONet *n,
|
||||
}
|
||||
}
|
||||
|
||||
if (migration_in_setup(s) && !should_be_hidden &&
|
||||
n->primary_dev) {
|
||||
if (migration_in_setup(s) && !should_be_hidden) {
|
||||
if (failover_unplug_primary(n)) {
|
||||
vmstate_unregister(n->primary_dev, qdev_get_vmsd(n->primary_dev),
|
||||
n->primary_dev);
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@
|
||||
- SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware
|
||||
implementation for certain IBM POWER hardware. The sources are at
|
||||
https://github.com/aik/SLOF, and the image currently in qemu is
|
||||
built from git tag qemu-slof-20191022.
|
||||
built from git tag qemu-slof-20191209.
|
||||
|
||||
- sgabios (the Serial Graphics Adapter option ROM) provides a means for
|
||||
legacy x86 software to communicate with an attached serial console as
|
||||
|
||||
Binary file not shown.
@@ -112,7 +112,7 @@ void sclp_get_loadparm_ascii(char *loadparm)
|
||||
ReadInfo *sccb = (void *)_sccb;
|
||||
|
||||
memset((char *)_sccb, 0, sizeof(ReadInfo));
|
||||
sccb->h.length = sizeof(ReadInfo);
|
||||
sccb->h.length = SCCB_SIZE;
|
||||
if (!sclp_service_call(SCLP_CMDW_READ_SCP_INFO, sccb)) {
|
||||
ebcdic_to_ascii((char *) sccb->loadparm, loadparm, LOADPARM_LEN);
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+1
-1
Submodule roms/SLOF updated: 899d988365...8ebf2f55e1.
@@ -637,6 +637,8 @@ static void hvf_store_events(CPUState *cpu, uint32_t ins_len, uint64_t idtvec_in
|
||||
env->exception_injected = 0;
|
||||
env->interrupt_injected = -1;
|
||||
env->nmi_injected = false;
|
||||
env->ins_len = 0;
|
||||
env->has_error_code = false;
|
||||
if (idtvec_info & VMCS_IDT_VEC_VALID) {
|
||||
switch (idtvec_info & VMCS_IDT_VEC_TYPE) {
|
||||
case VMCS_IDT_VEC_HWINTR:
|
||||
@@ -659,7 +661,7 @@ static void hvf_store_events(CPUState *cpu, uint32_t ins_len, uint64_t idtvec_in
|
||||
(idtvec_info & VMCS_IDT_VEC_TYPE) == VMCS_IDT_VEC_SWINTR) {
|
||||
env->ins_len = ins_len;
|
||||
}
|
||||
if (idtvec_info & VMCS_INTR_DEL_ERRCODE) {
|
||||
if (idtvec_info & VMCS_IDT_VEC_ERRCODE_VALID) {
|
||||
env->has_error_code = true;
|
||||
env->error_code = rvmcs(cpu->hvf_fd, VMCS_IDT_VECTORING_ERROR);
|
||||
}
|
||||
|
||||
@@ -345,8 +345,6 @@ void vmx_clear_int_window_exiting(CPUState *cpu)
|
||||
~VMCS_PRI_PROC_BASED_CTLS_INT_WINDOW_EXITING);
|
||||
}
|
||||
|
||||
#define NMI_VEC 2
|
||||
|
||||
bool hvf_inject_interrupts(CPUState *cpu_state)
|
||||
{
|
||||
X86CPU *x86cpu = X86_CPU(cpu_state);
|
||||
@@ -357,7 +355,11 @@ bool hvf_inject_interrupts(CPUState *cpu_state)
|
||||
bool have_event = true;
|
||||
if (env->interrupt_injected != -1) {
|
||||
vector = env->interrupt_injected;
|
||||
intr_type = VMCS_INTR_T_SWINTR;
|
||||
if (env->ins_len) {
|
||||
intr_type = VMCS_INTR_T_SWINTR;
|
||||
} else {
|
||||
intr_type = VMCS_INTR_T_HWINTR;
|
||||
}
|
||||
} else if (env->exception_nr != -1) {
|
||||
vector = env->exception_nr;
|
||||
if (vector == EXCP03_INT3 || vector == EXCP04_INTO) {
|
||||
@@ -366,7 +368,7 @@ bool hvf_inject_interrupts(CPUState *cpu_state)
|
||||
intr_type = VMCS_INTR_T_HWEXCEPTION;
|
||||
}
|
||||
} else if (env->nmi_injected) {
|
||||
vector = NMI_VEC;
|
||||
vector = EXCP02_NMI;
|
||||
intr_type = VMCS_INTR_T_NMI;
|
||||
} else {
|
||||
have_event = false;
|
||||
@@ -390,6 +392,8 @@ bool hvf_inject_interrupts(CPUState *cpu_state)
|
||||
if (env->has_error_code) {
|
||||
wvmcs(cpu_state->hvf_fd, VMCS_ENTRY_EXCEPTION_ERROR,
|
||||
env->error_code);
|
||||
/* Indicate that VMCS_ENTRY_EXCEPTION_ERROR is valid */
|
||||
info |= VMCS_INTR_DEL_ERRCODE;
|
||||
}
|
||||
/*printf("reinject %lx err %d\n", info, err);*/
|
||||
wvmcs(cpu_state->hvf_fd, VMCS_ENTRY_INTR_INFO, info);
|
||||
@@ -399,7 +403,7 @@ bool hvf_inject_interrupts(CPUState *cpu_state)
|
||||
if (cpu_state->interrupt_request & CPU_INTERRUPT_NMI) {
|
||||
if (!(env->hflags2 & HF2_NMI_MASK) && !(info & VMCS_INTR_VALID)) {
|
||||
cpu_state->interrupt_request &= ~CPU_INTERRUPT_NMI;
|
||||
info = VMCS_INTR_VALID | VMCS_INTR_T_NMI | NMI_VEC;
|
||||
info = VMCS_INTR_VALID | VMCS_INTR_T_NMI | EXCP02_NMI;
|
||||
wvmcs(cpu_state->hvf_fd, VMCS_ENTRY_INTR_INFO, info);
|
||||
} else {
|
||||
vmx_set_nmi_window_exiting(cpu_state);
|
||||
|
||||
@@ -2572,6 +2572,14 @@ static void kvm_msr_entry_add_vmx(X86CPU *cpu, FeatureWordArray f)
|
||||
uint64_t kvm_vmx_basic =
|
||||
kvm_arch_get_supported_msr_feature(kvm_state,
|
||||
MSR_IA32_VMX_BASIC);
|
||||
|
||||
if (!kvm_vmx_basic) {
|
||||
/* If the kernel doesn't support VMX feature (kvm_intel.nested=0),
|
||||
* then kvm_vmx_basic will be 0 and KVM_SET_MSR will fail.
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
uint64_t kvm_vmx_misc =
|
||||
kvm_arch_get_supported_msr_feature(kvm_state,
|
||||
MSR_IA32_VMX_MISC);
|
||||
|
||||
Reference in new issue
Block a user