Philippe Mathieu-Daudé <f4...@amsat.org> writes: > On 7/29/20 2:32 PM, Markus Armbruster wrote: >> Philippe Mathieu-Daudé <f4...@amsat.org> writes: >> >>> On 7/29/20 9:39 AM, Markus Armbruster wrote: >>>> Paolo Bonzini <pbonz...@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! [...]