On Tue, Jun 23, 2015 at 03:01:44PM +0100, Peter Maydell wrote: > This patchset attempts to improve the warning and error messages for > bad user command lines that attempt to connect a drive up to two > devices. The motivation here is patch #4, which changes the default > interface for the virt board to virtio. That will break some existing > command lines which forgot to specify if=none, and so I would like > us to at least diagnose that user error in a helpful way that points > the user towards adding the missing if=none. > > Version 2 reduces scope, because it turns out that it is harder than > we thought to identify whether a use of an if=something drive is the > auto-plugging or a manual wiring up to a device. So all we do here > is improve the error messages for two situations which were already > errors but with rather cryptic messages: > > (1) Drive specified as to be auto-connected and also manually connected > (and the board does handle this if= type): > > qemu-system-x86_64 -nodefaults -display none \ > -drive if=scsi,file=tmp.qcow2,id=foo -device ide-hd,drive=foo > > Previously: > qemu-system-x86_64: -device ide-hd,drive=foo: Property 'ide-hd.drive' > can't take value 'foo', it's in use > > Now: > qemu-system-x86_64: -device ide-hd,drive=foo: Drive 'foo' is already in > use because it has been automatically connected to another device (did > you need 'if=none' in the drive options?) > > (2) Drive specified to be manually connected in two different ways: > > qemu-system-x86_64 -nodefaults -display none \ > -drive if=none,file=tmp.qcow2,id=foo -device ide-hd,drive=foo \ > -device ide-hd,drive=foo > > Previously: > qemu-system-x86_64: -device ide-hd,drive=foo: Property 'ide-hd.drive' > can't take value 'foo', it's in use > > Now: > qemu-system-x86_64: -device ide-hd,drive=foo: Drive 'foo' is already in > use by another device > > (We'll also produce message 1 in the oddball case where the user creates > a drive if=something-not-handled-by-machine and then wires it up manually > to two different devices; in this case their command line is doubly broken > and if they use if=none as suggested by message 1 they'll then get message 2 > and can fix their own double-usage...) > > Changes v1->v2: > * drop "warn if an if= drive was also connected manually" patch > * change implementation of "improve error message" patch > > > Peter Maydell (3): > qdev-properties-system: Change set_pointer's parse callback to use > Error > qdev-properties-system: Improve error message for drive assignment > conflict > hw/arm/virt: Make block devices default to virtio > > hw/arm/virt.c | 2 ++ > hw/core/qdev-properties-system.c | 42 +++++++++++++++++++++++++++------------- > 2 files changed, 31 insertions(+), 13 deletions(-) > > -- > 1.9.1 > > Reviewed-by: Stefan Hajnoczi