[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH-for-5.2 v4] hw/core/qdev: Increase qdev_realize() kindness
From: |
Markus Armbruster |
Subject: |
Re: [PATCH-for-5.2 v4] hw/core/qdev: Increase qdev_realize() kindness |
Date: |
Wed, 29 Jul 2020 14:32:07 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
Philippe Mathieu-Daudé <f4bug@amsat.org> writes:
> On 7/29/20 9:39 AM, Markus Armbruster wrote:
>> Paolo Bonzini <pbonzini@redhat.com> writes:
>>
>>> On 28/07/20 09:44, Markus Armbruster wrote:
>>>>> - assert(!DEVICE_GET_CLASS(dev)->bus_type);
>>>>> + } else if (DEVICE_GET_CLASS(dev)->bus_type) {
>>>>> + error_setg(errp, "Unexpected bus '%s' for bus-less device '%s'",
>>>>> + DEVICE_GET_CLASS(dev)->bus_type,
>>>>> + object_get_typename(OBJECT(dev)));
>>>>> + return false;
>>>>> }
>>>>>
>>>>> object_property_set_bool(OBJECT(dev), true, "realized", &err);
>>>> Objection. This turns an abort into something else unless the caller
>>>> passes &error_abort. The caller in your commit message's example does,
>>>> others don't.
>>>>
>>>> Keep the unconditional abort, please. Feel free to print something kind
>>>> right before. I doubt it's all that useful, as I believe whoever gets
>>>> to fix the bug will have to figure out the code anyway, but I could be
>>>> wrong.
>>>>
>>>
>>> This was my request, actually. We have an Error**, we should use it in
>>> case this code is reached via device_add.
>>
>> That's not actually possible.
>
> I agree this condition is not possible in current mainstream.
>
> What I'm working on is:
>
> qmp command that:
> - create a SDCard or FloppyDisk medium
> - eventually link a block driver to it
> - insert the medium into a slot
>
> then another qmp command that
> - eject the medium
> - unlink the block driver
> - destroy the medium
>
> second step is a command that takes as argument
> (block driver, bus endpoint) and automatically
> creates the envelope media and insert it to the bus.
If this makes the error possible, then your code fails to establish
qdev_realize()'s precondition, and therefore needs fixing.
Could a combination of existing commands get the job done?