Message ID | 20211028150521.1973821-4-philmd@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hw/core: Restrict qdev-hotplug to sysemu | expand |
Hi Philippe, On 2021/10/28 23:05, Philippe Mathieu-Daudé wrote: > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > hw/core/qdev-hotplug.c | 73 ++++++++++++++++++++++++++++++++++++++++++ > hw/core/qdev.c | 60 ---------------------------------- > hw/core/meson.build | 1 + > 3 files changed, 74 insertions(+), 60 deletions(-) > create mode 100644 hw/core/qdev-hotplug.c > > diff --git a/hw/core/qdev-hotplug.c b/hw/core/qdev-hotplug.c > new file mode 100644 > index 00000000000..d495d0e9c70 > --- /dev/null > +++ b/hw/core/qdev-hotplug.c > @@ -0,0 +1,73 @@ > +/* > + * QDev Hotplug handlers > + * > + * Copyright (c) Red Hat I find that this is a bit different from what we have in the existing files after a git grep in QEMU, maybe better as: Copyright (c) 2021 Red Hat, Inc. > + * > + * SPDX-License-Identifier: GPL-2.0-or-later > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or later. > + * See the COPYING file in the top-level directory. > + */ > + > +#include "qemu/osdep.h" > +#include "hw/qdev-core.h" > +#include "hw/boards.h" > + > +HotplugHandler *qdev_get_machine_hotplug_handler(DeviceState *dev) > +{ > + MachineState *machine; > + MachineClass *mc; > + Object *m_obj = qdev_get_machine(); > + > + if (object_dynamic_cast(m_obj, TYPE_MACHINE)) { > + machine = MACHINE(m_obj); > + mc = MACHINE_GET_CLASS(machine); > + if (mc->get_hotplug_handler) { > + return mc->get_hotplug_handler(machine, dev); > + } > + } > + > + return NULL; > +} > + > +bool qdev_hotplug_allowed(DeviceState *dev, Error **errp) > +{ > + MachineState *machine; > + MachineClass *mc; > + Object *m_obj = qdev_get_machine(); > + > + if (object_dynamic_cast(m_obj, TYPE_MACHINE)) { > + machine = MACHINE(m_obj); > + mc = MACHINE_GET_CLASS(machine); > + if (mc->hotplug_allowed) { > + return mc->hotplug_allowed(machine, dev, errp); > + } > + } > + > + return true; > +} > + > +HotplugHandler *qdev_get_bus_hotplug_handler(DeviceState *dev) > +{ > + if (dev->parent_bus) { > + return dev->parent_bus->hotplug_handler; > + } > + return NULL; > +} > + > +HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev) > +{ > + HotplugHandler *hotplug_ctrl = qdev_get_machine_hotplug_handler(dev); > + > + if (hotplug_ctrl == NULL && dev->parent_bus) { > + hotplug_ctrl = qdev_get_bus_hotplug_handler(dev); > + } > + return hotplug_ctrl; > +} > + > +/* can be used as ->unplug() callback for the simple cases */ > +void qdev_simple_device_unplug_cb(HotplugHandler *hotplug_dev, > + DeviceState *dev, Error **errp) > +{ > + qdev_unrealize(dev); > +} > diff --git a/hw/core/qdev.c b/hw/core/qdev.c > index 7f06403752d..cede76fce47 100644 > --- a/hw/core/qdev.c > +++ b/hw/core/qdev.c > @@ -33,7 +33,6 @@ > #include "qapi/visitor.h" > #include "qemu/error-report.h" > #include "qemu/option.h" > -#include "hw/hotplug.h" > #include "hw/irq.h" > #include "hw/qdev-properties.h" > #include "hw/boards.h" > @@ -238,58 +237,6 @@ void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id, > dev->alias_required_for_version = required_for_version; > } > > -HotplugHandler *qdev_get_machine_hotplug_handler(DeviceState *dev) > -{ > - MachineState *machine; > - MachineClass *mc; > - Object *m_obj = qdev_get_machine(); > - > - if (object_dynamic_cast(m_obj, TYPE_MACHINE)) { > - machine = MACHINE(m_obj); > - mc = MACHINE_GET_CLASS(machine); > - if (mc->get_hotplug_handler) { > - return mc->get_hotplug_handler(machine, dev); > - } > - } > - > - return NULL; > -} > - > -bool qdev_hotplug_allowed(DeviceState *dev, Error **errp) > -{ > - MachineState *machine; > - MachineClass *mc; > - Object *m_obj = qdev_get_machine(); > - > - if (object_dynamic_cast(m_obj, TYPE_MACHINE)) { > - machine = MACHINE(m_obj); > - mc = MACHINE_GET_CLASS(machine); > - if (mc->hotplug_allowed) { > - return mc->hotplug_allowed(machine, dev, errp); > - } > - } > - > - return true; > -} > - > -HotplugHandler *qdev_get_bus_hotplug_handler(DeviceState *dev) > -{ > - if (dev->parent_bus) { > - return dev->parent_bus->hotplug_handler; > - } > - return NULL; > -} > - > -HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev) > -{ > - HotplugHandler *hotplug_ctrl = qdev_get_machine_hotplug_handler(dev); > - > - if (hotplug_ctrl == NULL && dev->parent_bus) { > - hotplug_ctrl = qdev_get_bus_hotplug_handler(dev); > - } > - return hotplug_ctrl; > -} > - > static int qdev_prereset(DeviceState *dev, void *opaque) > { > trace_qdev_reset_tree(dev, object_get_typename(OBJECT(dev))); > @@ -371,13 +318,6 @@ static void device_reset_child_foreach(Object *obj, ResettableChildCallback cb, > } > } > > -/* can be used as ->unplug() callback for the simple cases */ > -void qdev_simple_device_unplug_cb(HotplugHandler *hotplug_dev, > - DeviceState *dev, Error **errp) > -{ > - qdev_unrealize(dev); > -} > - > bool qdev_realize(DeviceState *dev, BusState *bus, Error **errp) > { > assert(!dev->realized && !dev->parent_bus); > diff --git a/hw/core/meson.build b/hw/core/meson.build > index 4d04069f85f..85f2ad1374b 100644 > --- a/hw/core/meson.build > +++ b/hw/core/meson.build > @@ -11,6 +11,7 @@ > 'irq.c', > 'clock.c', > 'qdev-clock.c', > + 'qdev-hotplug.c', > )) > > common_ss.add(files('cpu-common.c')) Besides, Reviewed-by: Yanan Wang <wangyanan55@huawei.com> Thanks, Yanan .
diff --git a/hw/core/qdev-hotplug.c b/hw/core/qdev-hotplug.c new file mode 100644 index 00000000000..d495d0e9c70 --- /dev/null +++ b/hw/core/qdev-hotplug.c @@ -0,0 +1,73 @@ +/* + * QDev Hotplug handlers + * + * Copyright (c) Red Hat + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "hw/qdev-core.h" +#include "hw/boards.h" + +HotplugHandler *qdev_get_machine_hotplug_handler(DeviceState *dev) +{ + MachineState *machine; + MachineClass *mc; + Object *m_obj = qdev_get_machine(); + + if (object_dynamic_cast(m_obj, TYPE_MACHINE)) { + machine = MACHINE(m_obj); + mc = MACHINE_GET_CLASS(machine); + if (mc->get_hotplug_handler) { + return mc->get_hotplug_handler(machine, dev); + } + } + + return NULL; +} + +bool qdev_hotplug_allowed(DeviceState *dev, Error **errp) +{ + MachineState *machine; + MachineClass *mc; + Object *m_obj = qdev_get_machine(); + + if (object_dynamic_cast(m_obj, TYPE_MACHINE)) { + machine = MACHINE(m_obj); + mc = MACHINE_GET_CLASS(machine); + if (mc->hotplug_allowed) { + return mc->hotplug_allowed(machine, dev, errp); + } + } + + return true; +} + +HotplugHandler *qdev_get_bus_hotplug_handler(DeviceState *dev) +{ + if (dev->parent_bus) { + return dev->parent_bus->hotplug_handler; + } + return NULL; +} + +HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev) +{ + HotplugHandler *hotplug_ctrl = qdev_get_machine_hotplug_handler(dev); + + if (hotplug_ctrl == NULL && dev->parent_bus) { + hotplug_ctrl = qdev_get_bus_hotplug_handler(dev); + } + return hotplug_ctrl; +} + +/* can be used as ->unplug() callback for the simple cases */ +void qdev_simple_device_unplug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + qdev_unrealize(dev); +} diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 7f06403752d..cede76fce47 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -33,7 +33,6 @@ #include "qapi/visitor.h" #include "qemu/error-report.h" #include "qemu/option.h" -#include "hw/hotplug.h" #include "hw/irq.h" #include "hw/qdev-properties.h" #include "hw/boards.h" @@ -238,58 +237,6 @@ void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id, dev->alias_required_for_version = required_for_version; } -HotplugHandler *qdev_get_machine_hotplug_handler(DeviceState *dev) -{ - MachineState *machine; - MachineClass *mc; - Object *m_obj = qdev_get_machine(); - - if (object_dynamic_cast(m_obj, TYPE_MACHINE)) { - machine = MACHINE(m_obj); - mc = MACHINE_GET_CLASS(machine); - if (mc->get_hotplug_handler) { - return mc->get_hotplug_handler(machine, dev); - } - } - - return NULL; -} - -bool qdev_hotplug_allowed(DeviceState *dev, Error **errp) -{ - MachineState *machine; - MachineClass *mc; - Object *m_obj = qdev_get_machine(); - - if (object_dynamic_cast(m_obj, TYPE_MACHINE)) { - machine = MACHINE(m_obj); - mc = MACHINE_GET_CLASS(machine); - if (mc->hotplug_allowed) { - return mc->hotplug_allowed(machine, dev, errp); - } - } - - return true; -} - -HotplugHandler *qdev_get_bus_hotplug_handler(DeviceState *dev) -{ - if (dev->parent_bus) { - return dev->parent_bus->hotplug_handler; - } - return NULL; -} - -HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev) -{ - HotplugHandler *hotplug_ctrl = qdev_get_machine_hotplug_handler(dev); - - if (hotplug_ctrl == NULL && dev->parent_bus) { - hotplug_ctrl = qdev_get_bus_hotplug_handler(dev); - } - return hotplug_ctrl; -} - static int qdev_prereset(DeviceState *dev, void *opaque) { trace_qdev_reset_tree(dev, object_get_typename(OBJECT(dev))); @@ -371,13 +318,6 @@ static void device_reset_child_foreach(Object *obj, ResettableChildCallback cb, } } -/* can be used as ->unplug() callback for the simple cases */ -void qdev_simple_device_unplug_cb(HotplugHandler *hotplug_dev, - DeviceState *dev, Error **errp) -{ - qdev_unrealize(dev); -} - bool qdev_realize(DeviceState *dev, BusState *bus, Error **errp) { assert(!dev->realized && !dev->parent_bus); diff --git a/hw/core/meson.build b/hw/core/meson.build index 4d04069f85f..85f2ad1374b 100644 --- a/hw/core/meson.build +++ b/hw/core/meson.build @@ -11,6 +11,7 @@ 'irq.c', 'clock.c', 'qdev-clock.c', + 'qdev-hotplug.c', )) common_ss.add(files('cpu-common.c'))
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- hw/core/qdev-hotplug.c | 73 ++++++++++++++++++++++++++++++++++++++++++ hw/core/qdev.c | 60 ---------------------------------- hw/core/meson.build | 1 + 3 files changed, 74 insertions(+), 60 deletions(-) create mode 100644 hw/core/qdev-hotplug.c