aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
Diffstat (limited to 'hw')
-rw-r--r--hw/block/fdc.c11
-rw-r--r--hw/intc/xics_kvm.c11
-rw-r--r--hw/net/e1000.c8
-rw-r--r--hw/ppc/spapr_irq.c1
-rw-r--r--hw/riscv/boot.c12
-rw-r--r--hw/scsi/scsi-disk.c10
6 files changed, 27 insertions, 26 deletions
diff --git a/hw/block/fdc.c b/hw/block/fdc.c
index 77af9979de..9b24cb9b85 100644
--- a/hw/block/fdc.c
+++ b/hw/block/fdc.c
@@ -514,6 +514,7 @@ static void floppy_drive_realize(DeviceState *qdev, Error **errp)
FloppyDrive *dev = FLOPPY_DRIVE(qdev);
FloppyBus *bus = FLOPPY_BUS(qdev->parent_bus);
FDrive *drive;
+ bool read_only;
int ret;
if (dev->unit == -1) {
@@ -542,6 +543,12 @@ static void floppy_drive_realize(DeviceState *qdev, Error **errp)
dev->conf.blk = blk_new(qemu_get_aio_context(), 0, BLK_PERM_ALL);
ret = blk_attach_dev(dev->conf.blk, qdev);
assert(ret == 0);
+
+ /* Don't take write permissions on an empty drive to allow attaching a
+ * read-only node later */
+ read_only = true;
+ } else {
+ read_only = !blk_bs(dev->conf.blk) || blk_is_read_only(dev->conf.blk);
}
blkconf_blocksizes(&dev->conf);
@@ -559,9 +566,7 @@ static void floppy_drive_realize(DeviceState *qdev, Error **errp)
dev->conf.rerror = BLOCKDEV_ON_ERROR_AUTO;
dev->conf.werror = BLOCKDEV_ON_ERROR_AUTO;
- if (!blkconf_apply_backend_options(&dev->conf,
- blk_is_read_only(dev->conf.blk),
- false, errp)) {
+ if (!blkconf_apply_backend_options(&dev->conf, read_only, false, errp)) {
return;
}
diff --git a/hw/intc/xics_kvm.c b/hw/intc/xics_kvm.c
index 2df1f3e92c..65c35f90f9 100644
--- a/hw/intc/xics_kvm.c
+++ b/hw/intc/xics_kvm.c
@@ -430,17 +430,6 @@ fail:
void xics_kvm_disconnect(SpaprMachineState *spapr, Error **errp)
{
- /* The KVM XICS device is not in use */
- if (kernel_xics_fd == -1) {
- return;
- }
-
- if (!kvm_enabled() || !kvm_check_extension(kvm_state, KVM_CAP_IRQ_XICS)) {
- error_setg(errp,
- "KVM and IRQ_XICS capability must be present for KVM XICS device");
- return;
- }
-
/*
* Only on P9 using the XICS-on XIVE KVM device:
*
diff --git a/hw/net/e1000.c b/hw/net/e1000.c
index 1dc1466332..a023ceb27c 100644
--- a/hw/net/e1000.c
+++ b/hw/net/e1000.c
@@ -1381,11 +1381,6 @@ static int e1000_pre_save(void *opaque)
E1000State *s = opaque;
NetClientState *nc = qemu_get_queue(s->nic);
- /* If the mitigation timer is active, emulate a timeout now. */
- if (s->mit_timer_on) {
- e1000_mit_timer(s);
- }
-
/*
* If link is down and auto-negotiation is supported and ongoing,
* complete auto-negotiation immediately. This allows us to look
@@ -1423,7 +1418,8 @@ static int e1000_post_load(void *opaque, int version_id)
s->mit_irq_level = false;
}
s->mit_ide = 0;
- s->mit_timer_on = false;
+ s->mit_timer_on = true;
+ timer_mod(s->mit_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 1);
/* nc.link_down can't be migrated, so infer link_down according
* to link status bit in mac_reg[STATUS].
diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c
index ff3df0bbd8..d07aed8ca9 100644
--- a/hw/ppc/spapr_irq.c
+++ b/hw/ppc/spapr_irq.c
@@ -86,6 +86,7 @@ static void spapr_irq_init_kvm(SpaprMachineState *spapr,
* emulated mode
*/
error_prepend(&local_err, "kernel_irqchip allowed but unavailable: ");
+ error_append_hint(&local_err, "Falling back to kernel-irqchip=off\n");
warn_report_err(local_err);
}
}
diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
index 5dee63011b..6b7d322e85 100644
--- a/hw/riscv/boot.c
+++ b/hw/riscv/boot.c
@@ -26,6 +26,7 @@
#include "hw/riscv/boot.h"
#include "hw/boards.h"
#include "elf.h"
+#include "sysemu/qtest.h"
#if defined(TARGET_RISCV32)
# define KERNEL_BOOT_ADDRESS 0x80400000
@@ -46,10 +47,13 @@ void riscv_find_and_load_firmware(MachineState *machine,
* In the future this defaul will change to loading the prebuilt
* OpenSBI firmware. Let's warn the user and then continue.
*/
- warn_report("No -bios option specified. Not loading a firmware.");
- warn_report("This default will change in QEMU 4.3. Please use the " \
- "-bios option to aviod breakages when this happens.");
- warn_report("See QEMU's deprecation documentation for details");
+ if (!qtest_enabled()) {
+ warn_report("No -bios option specified. Not loading a firmware.");
+ warn_report("This default will change in a future QEMU release. " \
+ "Please use the -bios option to avoid breakages when "\
+ "this happens.");
+ warn_report("See QEMU's deprecation documentation for details.");
+ }
return;
}
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index 8e95e3e38d..af3e622dc5 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -2318,6 +2318,7 @@ static void scsi_disk_unit_attention_reported(SCSIDevice *dev)
static void scsi_realize(SCSIDevice *dev, Error **errp)
{
SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
+ bool read_only;
if (!s->qdev.conf.blk) {
error_setg(errp, "drive property not set");
@@ -2351,8 +2352,13 @@ static void scsi_realize(SCSIDevice *dev, Error **errp)
return;
}
}
- if (!blkconf_apply_backend_options(&dev->conf,
- blk_is_read_only(s->qdev.conf.blk),
+
+ read_only = blk_is_read_only(s->qdev.conf.blk);
+ if (dev->type == TYPE_ROM) {
+ read_only = true;
+ }
+
+ if (!blkconf_apply_backend_options(&dev->conf, read_only,
dev->type == TYPE_DISK, errp)) {
return;
}