qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] the need for if=none for -drive?


From: Markus Armbruster
Subject: Re: [Qemu-devel] the need for if=none for -drive?
Date: Wed, 17 Dec 2014 12:52:19 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux)

Sorry for the slow reply, I missed this one until now.  Adding block
maintainers.

John Snow <address@hidden> writes:

> On 11/02/2014 02:21 AM, Michael Tokarev wrote:
>> All "modern" 2-way drive/device specifications need to explicitly
>> specify if=none for the drive for it to not be used in the default
>> ide bus implicitly.
>
> Which behave like this? I am reasonably sheltered in the IDE and S/ATA
> lands.

-drive's parameter "if" defaults to the board's preferred interface.
if=none was added to shoehorn block devices into the -device world.  As
Michael wrote, you always have to say if=none,id=FOO,... to create
something usable with -device.

>> But how about using some if=unspecified implicitly for all devices
>> which don't specify if=, pick any devices from that list which are
>> referenced from -device, and only add those which left (plus the
>> ones with explicit if=ide) to the default ide bus?
>
> I wouldn't really be opposed to this, since making things more
> explicit and less mysterious with the drive sugar sounds welcome to
> me. I imagine you're trying to avoid the case where if= is omitted and
> QEMU gets to decide what it wants to do in this (highly ambiguous)
> case?
>
>> The change should be strighforward, the only (maybe significant)
>> prob I see is a need to reorder -device/-drive initialization in
>> vl.c.  We might pick them up in drive_check_orphaned() too.  Or,
>> we can walk over -devices when adding -drives with if={unspec,explicit}.
>>
>> (this is a sort of a followup to 6b9e03a4e759876, "qtest/bios-tables:
>> Correct Q35 command line", but ofcourse it's a topic by its own).
>>
>> Thanks,
>>
>> /mjt
>>
>
> It may be a little too late, since it seemed as if defaulting to
> "IF_DEFAULT" always winds up getting mapped to whatever is provided by
> the second argument of drive_new (block_default_type) which usually
> winds up being machine_class->block_default_type -- which for Q35 and
> piix both is IDE. (Implicitly, because it never sets it. interface 0
> is IF_IDE -- which makes the "true default" for if ... IDE, until it
> is overridden.)
>
> Changing this behavior might break more than we fix, perhaps.
>
> I'll leave the masterminding of fixing up the grossly broken drive
> sugar up to Markus, the secret architect of the recent Q35 sugar
> patches :>

IF_DEFAULT is currently used only for the non-option image argument,
-hd[a-d] and -cdrom.  It tells the desugaring function drive_add() not
add an "if" parameter.

Parameter "if" is processed by drive_new().  It defaults to argument
block_default_type.  For -drive, it's the current machine's
block_default_type.  Some machines set IF_SCSI, and two set IF_VIRTIO,
the rest get IF_IDE via zero initialization.

Board initialization code iterates over drives they know, and create
appropriate device models.  Boards never pick up if=none drives.

Anything not picked up by board initialization can be used by -device.
Ideally, these are just the if=none drives, but confusing crap like
"-drive id=foo,if=mtd,file=tmp.qcow2 -device usb-storage,drive=foo" also
works.

Anything not used by -device either triggers an "orphaned drive"
warning, and stays around for possible use by device_add.

Michael proposes to reshuffle this a bit.  Instead of resolving missing
"if" to the machine's block_default_type in drive_new(), keep it
undecided a bit longer.  Give -device first pick.  Anything left over
defaults to the machine's block_default_type as before.

Two remarks.

First, I'm afraid giving -device first pick isn't quite trivial.  The
current code acting on -device creates and connects a device model.
Requires the board to be initialized already.  Either we delay the board
iterating over drives until after -device is done.  Changes failure
modes, need to make sure the error reporting doesn't degrade.  Or we do
an early pass to claim the drives for -device, and actually connect them
later.

Second, while I too find the need for if=none annoying, I'm not sure I
like the amount of extra magic.  Could be too much.  Opinions?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]