@@ -151,6 +151,7 @@ check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -global is
# Conflicting (-fdX wins)
check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -global isa-fdc.driveA=none0
check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -global isa-fdc.driveB=none0
+check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -global floppy.drive=none0
echo
echo
@@ -192,12 +193,16 @@ check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IM
-global isa-fdc.driveB=none0 -device floppy,drive=none1
check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \
-global isa-fdc.driveB=none0 -device floppy,drive=none1,unit=0
+check_floppy_qtree -drive if=none,file="$TEST_IMG" \
+ -global floppy.drive=none0 -device floppy,unit=0
# Conflicting
check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \
-global isa-fdc.driveA=none0 -device floppy,drive=none1,unit=0
check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \
-global isa-fdc.driveB=none0 -device floppy,drive=none1,unit=1
+check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \
+ -global floppy.drive=none0 -device floppy,drive=none1,unit=0
echo
echo
@@ -205,8 +210,10 @@ echo === Attempt to use drive twice ===
# if=none
check_floppy_qtree -drive if=none -device floppy,drive=none0 -device floppy -device floppy,drive=none0
+check_floppy_qtree -drive if=none -global floppy.drive=none0 -device floppy -device floppy
# if=floppy
check_floppy_qtree -fda "" -device floppy,drive=floppy0
+check_floppy_qtree -fda "" -global floppy.drive=floppy0
# default if=floppy (not found, because it's created later)
check_floppy_qtree -device floppy,drive=floppy0
@@ -860,6 +860,50 @@ sd0: [not inserted]
(qemu) quit
+Testing: -fda TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -global floppy.drive=none0
+
+ dev: isa-fdc, id ""
+ iobase = 1008 (0x3f0)
+ irq = 6 (0x6)
+ dma = 2 (0x2)
+ driveA = ""
+ driveB = ""
+ check_media_rate = true
+ fdtypeA = "auto"
+ fdtypeB = "auto"
+ fallback = "288"
+ isa irq 6
+ bus: floppy-bus.0
+ type floppy-bus
+ dev: floppy, id ""
+ unit = 0 (0x0)
+ drive = "floppy0"
+ logical_block_size = 512 (0x200)
+ physical_block_size = 512 (0x200)
+ min_io_size = 0 (0x0)
+ opt_io_size = 0 (0x0)
+ discard_granularity = 4294967295 (0xffffffff)
+ write-cache = "auto"
+ share-rw = false
+ drive-type = "144"
+floppy0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
+ Attached to: /machine/unattached/device[15]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+
+none0 (NODE_NAME): TEST_DIR/t.qcow2.2 (qcow2)
+ Attached to: /machine/unattached/device[15]
+ Cache mode: writeback
+
+ide1-cd0: [not inserted]
+ Attached to: /machine/unattached/device[22]
+ Removable device: not locked, tray closed
+
+sd0: [not inserted]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+
=== Mixing -fdX and -device ===
@@ -1438,21 +1482,111 @@ sd0: [not inserted]
(qemu) quit
+Testing: -drive if=none,file=TEST_DIR/t.qcow2 -global floppy.drive=none0 -device floppy,unit=0
+
+ dev: isa-fdc, id ""
+ iobase = 1008 (0x3f0)
+ irq = 6 (0x6)
+ dma = 2 (0x2)
+ driveA = ""
+ driveB = ""
+ check_media_rate = true
+ fdtypeA = "auto"
+ fdtypeB = "auto"
+ fallback = "288"
+ isa irq 6
+ bus: floppy-bus.0
+ type floppy-bus
+ dev: floppy, id ""
+ unit = 0 (0x0)
+ drive = "none0"
+ logical_block_size = 512 (0x200)
+ physical_block_size = 512 (0x200)
+ min_io_size = 0 (0x0)
+ opt_io_size = 0 (0x0)
+ discard_granularity = 4294967295 (0xffffffff)
+ write-cache = "auto"
+ share-rw = false
+ drive-type = "144"
+none0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
+ Attached to: /machine/peripheral-anon/device[0]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+
+ide1-cd0: [not inserted]
+ Attached to: /machine/unattached/device[21]
+ Removable device: not locked, tray closed
+
+sd0: [not inserted]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+
Testing: -drive if=none,file=TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -global isa-fdc.driveA=none0 -device floppy,drive=none1,unit=0
QEMU_PROG: -device floppy,drive=none1,unit=0: Floppy unit 0 is in use
Testing: -drive if=none,file=TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -global isa-fdc.driveB=none0 -device floppy,drive=none1,unit=1
QEMU_PROG: -device floppy,drive=none1,unit=1: Floppy unit 1 is in use
+Testing: -drive if=none,file=TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -global floppy.drive=none0 -device floppy,drive=none1,unit=0
+
+ dev: isa-fdc, id ""
+ iobase = 1008 (0x3f0)
+ irq = 6 (0x6)
+ dma = 2 (0x2)
+ driveA = ""
+ driveB = ""
+ check_media_rate = true
+ fdtypeA = "auto"
+ fdtypeB = "auto"
+ fallback = "288"
+ isa irq 6
+ bus: floppy-bus.0
+ type floppy-bus
+ dev: floppy, id ""
+ unit = 0 (0x0)
+ drive = "none1"
+ logical_block_size = 512 (0x200)
+ physical_block_size = 512 (0x200)
+ min_io_size = 0 (0x0)
+ opt_io_size = 0 (0x0)
+ discard_granularity = 4294967295 (0xffffffff)
+ write-cache = "auto"
+ share-rw = false
+ drive-type = "144"
+none0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
+ Attached to: /machine/peripheral-anon/device[0]
+ Cache mode: writeback
+
+none1 (NODE_NAME): TEST_DIR/t.qcow2.2 (qcow2)
+ Attached to: /machine/peripheral-anon/device[0]
+ Removable device: not locked, tray closed
+ Cache mode: writeback
+
+ide1-cd0: [not inserted]
+ Attached to: /machine/unattached/device[21]
+ Removable device: not locked, tray closed
+
+sd0: [not inserted]
+ Removable device: not locked, tray closed
+(qemu) quit
+
+
=== Attempt to use drive twice ===
Testing: -drive if=none -device floppy,drive=none0 -device floppy -device floppy,drive=none0
QEMU_PROG: -device floppy,drive=none0: Drive 'none0' is already in use by another device
+Testing: -drive if=none -global floppy.drive=none0 -device floppy -device floppy
+QEMU_PROG: -device floppy: can't apply global floppy.drive=none0: Drive 'none0' is already in use by another device
+
Testing: -fda -device floppy,drive=floppy0
QEMU_PROG: -device floppy,drive=floppy0: Drive 'floppy0' is already in use because it has been automatically connected to another device (did you need 'if=none' in the drive options?)
+Testing: -fda -global floppy.drive=floppy0
+QEMU_PROG: can't apply global floppy.drive=floppy0: Drive 'floppy0' is already in use because it has been automatically connected to another device (did you need 'if=none' in the drive options?)
+
Testing: -device floppy,drive=floppy0
QEMU_PROG: -device floppy,drive=floppy0: Property 'floppy.drive' can't find value 'floppy0'
Use of -global to set a default backend for non-singleton devices is a bad idea. But as long as we permit it, we better test it. Test output demonstrates we screw up when -global floppy clashes with -fda or with -device floppy: according to "info qtree", only the latter backend is attached, but according to "info block", both are. Here's the clash with -device: Testing: -drive if=none,file=TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -global floppy.drive=none0 -device floppy,drive=none1,unit=0 dev: isa-fdc, id "" [...] driveA = "" driveB = "" [...] bus: floppy-bus.0 type floppy-bus dev: floppy, id "" unit = 0 (0x0) ---> drive = "none1" [...] none0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) ---> Attached to: /machine/peripheral-anon/device[0] Cache mode: writeback none1 (NODE_NAME): TEST_DIR/t.qcow2.2 (qcow2) ---> Attached to: /machine/peripheral-anon/device[0] Removable device: not locked, tray closed Cache mode: writeback /machine/peripheral-anon/device[0] is the floppy created with -device. Test output further demonstrates the "Drive 'FOO' is already in use because it has been automatically connected to another device" error message can be misleading. With '-fda "" -global floppy.drive=floppy0', it's in use because -global reuses -fda's backend. There is no other device involved. Signed-off-by: Markus Armbruster <armbru@redhat.com> --- tests/qemu-iotests/172 | 7 ++ tests/qemu-iotests/172.out | 134 +++++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+)