[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 08/35] qdev: hotplug for buss-less devices
From: |
Alexey Kardashevskiy |
Subject: |
Re: [Qemu-devel] [PATCH 08/35] qdev: hotplug for buss-less devices |
Date: |
Mon, 07 Apr 2014 12:26:23 +1000 |
User-agent: |
Mozilla/5.0 (X11; Linux i686 on x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 |
On 04/05/2014 12:36 AM, Igor Mammedov wrote:
> Adds get_hotplug_handler() method to machine, and
> makes bus-less device to use it during hotplug
> as a means to discover hotplug handler controller.
> Returned controller is used to permorm a hotplug
> action.
"returned controller" is a machine here?
Why not to make a memory controller + bus instead? I thought this is the
preferred approach in qom'ed QEMU :)
> Signed-off-by: Igor Mammedov <address@hidden>
> ---
> hw/core/qdev.c | 13 +++++++++++++
> include/hw/boards.h | 8 ++++++++
> 2 files changed, 21 insertions(+)
>
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index 60f9df1..50bb8f5 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -34,6 +34,7 @@
> #include "qapi/qmp/qjson.h"
> #include "monitor/monitor.h"
> #include "hw/hotplug.h"
> +#include "hw/boards.h"
>
> int qdev_hotplug = 0;
> static bool qdev_hot_added = false;
> @@ -761,6 +762,18 @@ static void device_set_realized(Object *obj, bool value,
> Error **err)
> local_err == NULL) {
> hotplug_handler_plug(dev->parent_bus->hotplug_handler,
> dev, &local_err);
> + } else if (local_err == NULL &&
> + object_dynamic_cast(qdev_get_machine(), TYPE_MACHINE)) {
> + HotplugHandler *hotplug_ctrl;
> + MachineState *machine = MACHINE(qdev_get_machine());
> + MachineClass *mc = MACHINE_GET_CLASS(machine);
> +
> + if (mc->get_hotplug_handler) {
> + hotplug_ctrl = mc->get_hotplug_handler(machine, dev);
> + if (hotplug_ctrl) {
> + hotplug_handler_plug(hotplug_ctrl, dev, &local_err);
> + }
> + }
> }
>
> if (qdev_get_vmsd(dev) && local_err == NULL) {
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index 3567190..67750b5 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -73,6 +73,11 @@ extern MachineState *current_machine;
> /**
> * MachineClass:
> * @qemu_machine: #QEMUMachine
> + * @get_hotplug_handler: this function is called during bus-less
> + * device hotplug. If defined it returns pointer to an instance
> + * of HotplugHandler object, which handles hotplug operation
> + * for a given @dev. It may return NULL if @dev doesn't require
> + * any actions to be performed by hotplug handler.
> */
> struct MachineClass {
> /*< private >*/
> @@ -80,6 +85,9 @@ struct MachineClass {
> /*< public >*/
>
> QEMUMachine *qemu_machine;
> +
> + HotplugHandler *(*get_hotplug_handler)(MachineState *machine,
> + DeviceState *dev);
> };
>
> /**
>
--
Alexey
- [Qemu-devel] [PATCH 00/35] pc: ACPI memory hotplug, Igor Mammedov, 2014/04/04
- [Qemu-devel] [PATCH 01/35] qemu-option: introduce qemu_find_opts_singleton, Igor Mammedov, 2014/04/04
- [Qemu-devel] [PATCH 04/35] add memdev backend infrastructure, Igor Mammedov, 2014/04/04
- [Qemu-devel] [PATCH 05/35] vl.c: extend -m option to support options for memory hotplug, Igor Mammedov, 2014/04/04
- [Qemu-devel] [PATCH 06/35] add pc-{i440fx,q35}-2.1 machine types, Igor Mammedov, 2014/04/04
- [Qemu-devel] [PATCH 03/35] object_add: allow completion handler to get canonical path, Igor Mammedov, 2014/04/04
- [Qemu-devel] [PATCH 08/35] qdev: hotplug for buss-less devices, Igor Mammedov, 2014/04/04
[Qemu-devel] [PATCH 09/35] qdev: expose DeviceState.hotplugged field as a property, Igor Mammedov, 2014/04/04
[Qemu-devel] [PATCH 12/35] dimm: do not allow to set already busy memdev, Igor Mammedov, 2014/04/04