On Mon, 4 Sep 2017 17:36:59 +0100 Peter Maydell <peter.mayd...@linaro.org> wrote:
> I just got bitten by qdev_get_machine()'s behaviour on the user-only > emulators, where it can return something that isn't NULL and isn't > an instance of TYPE_MACHINE either. user-only shouldn't get to qdev_get_machine() at all, issue probably in container_get(). I'd try to fix wrong user if possible and maybe add ifdef build failure to qdev_get_machine() so it would not build in user mode. > It looks like maybe this can happen in some cases in softmmu too, > judging by the way that qdev_get_hotplug_handler() does an > object_dynamic_cast() check that it really got back a TYPE_MACHINE. As I recall only bus or machine provide hotplug_handler currently, but it's possible to extend to other objects if we find use-case. We could do static cast to machine instead dynamic there but in hotplug case it will abort QEMU if error happens, hence dynamic check to avoid be more resilient during hotplug. (well, if qdev_get_machine() returns not machine during startup we would be screwed anyways, but that should break much earlier) > Is this intentional? Does anything rely on qdev_get_machine() > returning something odd like this? > > In the code I have which ran into this I can just make it do an > object_dynamic_cast() check like the hotplug_handler code does, > but if the current implementation is intentional we should > probably document that this is what you're supposed to do. > > thanks > -- PMM