[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] the need for if=none for -drive?
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] the need for if=none for -drive? |
Date: |
Thu, 8 Jan 2015 13:47:45 +0000 |
On Wed, Dec 17, 2014 at 11:52 AM, Markus Armbruster <address@hidden> wrote:
> 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?
I agree with both these points.
Not sure it's worth the effort to implement this correctly, review, and test it.
Stefan
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] the need for if=none for -drive?,
Stefan Hajnoczi <=