[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 16:13:28 +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 2:32 PM, Markus Armbruster wrote:
>> 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.
>
> Yes, because I try to create a bus-ful device without plugging it on
> the bus (I want to set the block driver link before plugging it).
You need to set properties *before* you realize!
[...]