[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH 08/10] hw/misc/vmcoreinfo: Implement 'vmcore-info' object
From: |
Marc-André Lureau |
Subject: |
Re: [RFC PATCH 08/10] hw/misc/vmcoreinfo: Implement 'vmcore-info' object |
Date: |
Fri, 20 Dec 2024 12:50:08 +0400 |
Hi
On Thu, Dec 19, 2024 at 7:39 PM Philippe Mathieu-Daudé
<philmd@linaro.org> wrote:
>
> 'vmcore-info' object allow to transition from '-device'
> to 'object', following the deprecation process.
>
Is there a strong motivation behind this? just replacing -device with
-object doesn't really give anything, does it?
Also I'd rather keep the name "vmcoreinfo" since that's how it used to
be, and also the name used by the kernel ELF etc.
> No need to modify VMCoreInfoState since DeviceState
> already inherits from Object state.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> include/hw/misc/vmcoreinfo.h | 4 ++-
> hw/misc/vmcoreinfo.c | 48 +++++++++++++++++++++++++++++++++++-
> 2 files changed, 50 insertions(+), 2 deletions(-)
>
> diff --git a/include/hw/misc/vmcoreinfo.h b/include/hw/misc/vmcoreinfo.h
> index 122c69686b0..d4cce42cee6 100644
> --- a/include/hw/misc/vmcoreinfo.h
> +++ b/include/hw/misc/vmcoreinfo.h
> @@ -16,8 +16,10 @@
> #include "standard-headers/linux/qemu_fw_cfg.h"
> #include "qom/object.h"
>
> +#define TYPE_VMCOREINFO "vmcore-info"
> +OBJECT_DECLARE_SIMPLE_TYPE(VMCoreInfoState, VMCOREINFO)
> +
> #define TYPE_VMCOREINFO_DEVICE "vmcoreinfo"
> -typedef struct VMCoreInfoState VMCoreInfoState;
> DECLARE_INSTANCE_CHECKER(VMCoreInfoState, VMCOREINFO_DEVICE,
> TYPE_VMCOREINFO_DEVICE)
>
> diff --git a/hw/misc/vmcoreinfo.c b/hw/misc/vmcoreinfo.c
> index a0511ea0da4..e2258e08fb1 100644
> --- a/hw/misc/vmcoreinfo.c
> +++ b/hw/misc/vmcoreinfo.c
> @@ -12,11 +12,11 @@
>
> #include "qemu/osdep.h"
> #include "qapi/error.h"
> -#include "qemu/module.h"
> #include "sysemu/reset.h"
> #include "hw/nvram/fw_cfg.h"
> #include "migration/vmstate.h"
> #include "hw/misc/vmcoreinfo.h"
> +#include "qom/object_interfaces.h"
>
> static const VMStateDescription vmstate_vmcoreinfo = {
> .name = "vmcoreinfo",
> @@ -32,6 +32,11 @@ static const VMStateDescription vmstate_vmcoreinfo = {
> },
> };
>
> +static char *vmcoreinfo_get_vmstate_id(VMStateIf *vmif)
> +{
> + return g_strdup(TYPE_VMCOREINFO);
> +}
> +
> static void fw_cfg_vmci_write(void *opaque, off_t offset, size_t len)
> {
> VMCoreInfoState *s = opaque;
> @@ -88,6 +93,32 @@ static void vmcoreinfo_device_realize(DeviceState *dev,
> Error **errp)
> vmcoreinfo_realize(VMCOREINFO_DEVICE(dev), errp);
> }
>
> +static bool vmcoreinfo_can_be_deleted(UserCreatable *uc)
> +{
> + return false;
> +}
> +
> +static void vmcoreinfo_complete(UserCreatable *uc, Error **errp)
> +{
> + if (vmstate_register_any(VMSTATE_IF(uc), &vmstate_vmcoreinfo, uc) < 0) {
> + error_setg(errp, "%s: Failed to register vmstate", TYPE_VMCOREINFO);
> + }
> +
> + vmcoreinfo_realize(VMCOREINFO(uc), errp);
> +}
> +
> +static void vmcoreinfo_class_init(ObjectClass *oc, void *data)
> +{
> + UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
> + VMStateIfClass *vc = VMSTATE_IF_CLASS(oc);
> + ResettableClass *rc = RESETTABLE_CLASS(oc);
> +
> + ucc->complete = vmcoreinfo_complete;
> + ucc->can_be_deleted = vmcoreinfo_can_be_deleted;
> + vc->get_id = vmcoreinfo_get_vmstate_id;
> + rc->phases.hold = vmcoreinfo_reset_hold;
> +}
> +
> static void vmcoreinfo_device_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *dc = DEVICE_CLASS(klass);
> @@ -106,6 +137,18 @@ static const TypeInfo vmcoreinfo_types[] = {
> .parent = TYPE_DEVICE,
> .instance_size = sizeof(VMCoreInfoState),
> .class_init = vmcoreinfo_device_class_init,
> + },
> + {
> + .name = TYPE_VMCOREINFO,
> + .parent = TYPE_OBJECT,
> + .instance_size = sizeof(VMCoreInfoState),
> + .class_init = vmcoreinfo_class_init,
> + .interfaces = (InterfaceInfo[]) {
> + { TYPE_RESETTABLE_INTERFACE },
> + { TYPE_USER_CREATABLE },
> + { TYPE_VMSTATE_IF },
> + { }
> + }
> }
> };
>
> @@ -116,6 +159,9 @@ VMCoreInfoState *vmcoreinfo_find(void)
> Object *obj;
>
> obj = object_resolve_path_type("", TYPE_VMCOREINFO_DEVICE, NULL);
> + if (!obj) {
> + obj = object_resolve_path_type("", TYPE_VMCOREINFO, NULL);
> + }
>
> return obj ? (VMCoreInfoState *)obj : NULL;
> }
> --
> 2.47.1
>
- [RFC PATCH 04/10] hw/misc/vmcoreinfo: Rename VMCOREINFO_DEVICE -> TYPE_VMCOREINFO_DEVICE, (continued)
- [RFC PATCH 04/10] hw/misc/vmcoreinfo: Rename VMCOREINFO_DEVICE -> TYPE_VMCOREINFO_DEVICE, Philippe Mathieu-Daudé, 2024/12/19
- [RFC PATCH 09/10] hw/misc/vmcoreinfo: Deprecate '-device vmcoreinfo', Philippe Mathieu-Daudé, 2024/12/19
- [RFC PATCH 05/10] hw/misc/vmcoreinfo: Convert to three-phase reset interface, Philippe Mathieu-Daudé, 2024/12/19
- [RFC PATCH 07/10] hw/misc/vmcoreinfo: Factor vmcoreinfo_device_realize() out, Philippe Mathieu-Daudé, 2024/12/19
- [RFC PATCH 02/10] hw/misc/vmcoreinfo: Rename opaque pointer as 'opaque', Philippe Mathieu-Daudé, 2024/12/19
- [RFC PATCH 08/10] hw/misc/vmcoreinfo: Implement 'vmcore-info' object, Philippe Mathieu-Daudé, 2024/12/19
- Re: [RFC PATCH 08/10] hw/misc/vmcoreinfo: Implement 'vmcore-info' object,
Marc-André Lureau <=
- [RFC PATCH-for-10.2 10/10] hw/misc/vmcoreinfo: Remove legacy '-device vmcoreinfo', Philippe Mathieu-Daudé, 2024/12/19
- [RFC PATCH 06/10] hw/misc/vmcoreinfo: Move vmstate_vmcoreinfo[] around, Philippe Mathieu-Daudé, 2024/12/19
- Re: [RFC PATCH 00/10] hw/misc/vmcoreinfo: Convert from QDev to plain Object, Daniel P . Berrangé, 2024/12/19