[PATCH v4 00/16] hw/acpi: convert object props to class props

Mark Cave-Ayland posted 16 patches 9 hours ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20260821111550.276011-1-mark.caveayland@nutanix.com
Maintainers: "Michael S. Tsirkin" <mst@redhat.com>, Igor Mammedov <imammedo@redhat.com>, Ani Sinha <anisinha@redhat.com>, "Philippe Mathieu-Daudé" <philmd@mailo.com>, Aurelien Jarno <aurelien@aurel32.net>, Peter Maydell <peter.maydell@linaro.org>, Paolo Bonzini <pbonzini@redhat.com>, Richard Henderson <richard.henderson@linaro.org>, "Daniel P. Berrangé" <berrange@redhat.com>
include/hw/acpi/ich9.h         |   2 +-
include/hw/pci/pci_bus.h       |   2 +
include/qom/object.h           |  90 +++++++++++++++++
hw/acpi/generic_event_device.c |  10 ++
hw/acpi/ich9.c                 | 126 +++++++++++-------------
hw/acpi/pci-bridge.c           |   9 +-
hw/acpi/pcihp.c                |  35 +++----
hw/acpi/piix4.c                |  51 +++++++---
hw/arm/virt-acpi-build.c       |   7 +-
hw/i386/acpi-build.c           |   7 +-
hw/isa/lpc_ich9.c              |  36 ++++---
hw/pci/pci.c                   |   7 ++
qom/object.c                   | 171 +++++++++++++++++++++++++++++++++
13 files changed, 431 insertions(+), 122 deletions(-)
[PATCH v4 00/16] hw/acpi: convert object props to class props
Posted by Mark Cave-Ayland 9 hours ago
[Background: based upon Peter's feedback at
 https://lists.gnu.org/archive/html/qemu-devel/2026-06/msg07717.html I realised
 that what we really need are object_class_property_add_*_ptr() equivalents to
 the existing object_property_add_*_ptr() functions to make it easier to
 convert existing properties.

 There are actually existing functions with these names that are already in use
 but after observation these are really static properties, so these are renamed
 to aid porting object props to class props, as well as making the difference
 clearer.]

[Note: this will have substantial conflicts with Marc-André's series "qom/qdev:
 associate properties with QAPI schema types" at
 https://patchew.org/QEMU/20260818-qom-qapi-v3-0-24b8bbbe3d86@redhat.com/.]

Since the use of object props is effectively deprecated, here is an attempt
to convert all use of object props in hw/acpi to class props. The eventual
aim is to continue working through the codebase, removing all remaining uses
of object props.

The series is lightly tested: it passes "make check", GitLab CI and some
simple local tests. I'm mostly interested for feedback on the conversion
strategy, and to get a feel for the best way to merge this series since once
the basic conversion patterns are in place, the same patterns can be applied
elsewhere and it would be good to minimise the merge window for such changes.

The following warnings below are generated by checkpatch but are incorrect
since they form part of macro definitions:

1/16 Checking commit 58e8d5fb5971 (qom/object.c: introduce OBJECT_CLASS_PROPERTY_SCALAR_GETTER(type) macro)
ERROR: spaces required around that '*' (ctx:WxB)
#41: FILE: qom/object.c:2720:
+        type##_t value = *(type##_t *)object_class_prop_ptr(obj, \
                                     ^

total: 1 errors, 0 warnings, 28 lines checked

Patch 1/16 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

2/15 Checking commit 2068ae0d4ded (qom/object.c: introduce OBJECT_CLASS_PROPERTY_SCALAR_SETTER(type) macro)
ERROR: spaces required around that '*' (ctx:WxV)
#28: FILE: qom/object.c:2730:
+        type##_t *field = (type##_t *)object_class_prop_ptr(obj, \
                  ^

ERROR: spaces required around that '*' (ctx:WxB)
#28: FILE: qom/object.c:2730:
+        type##_t *field = (type##_t *)object_class_prop_ptr(obj, \


Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>

(Patches still requiring review: 5, 6)


v4:
- Add R-B tags from Marc-André

- Fix comments mismatch within object_class_property_add_*_ptr() descriptions in
  object.h

- Add patch 5 implementing object_class_property_add_uint64_ptr() now required by
  patch 6

- Don't promote ICH9_LPC_SMI_NEGOTIATED_FEAT_PROP to a Property in patch 6 since it
  must be marked as read-only: use object_class_property_add_uint64_ptr() instead


v3:
- Re-implement the object_class_property_add_*_ptr() get/set functions using
  new OBJECT_CLASS_PROPERTY_SCALAR_GETTER() and
  OBJECT_CLASS_PROPERTY_SCALAR_SETTER() macros, similar as has already been
  done for object properties

- Drop most R-B tags since nearly all patches have changed since v2

- Split conversion of static variables to static class properties into separate
  commits to act as a reference for future conversions

- Drop patch 6 from v2 since that has already been merged separately by Phil

- Use UINT32_MAX to indicate ACPI_PCIHP_PROP_BSEL has not been set in patch 13
  instead of -1. This is because the existing object_property_add_*_ptr()
  functions always use unsigned scalars: let's try and keep this the same for the
  object_class_property_add_*_ptr() functions if possible

- Add a new object_class_property_add_bool_ptr() function rather than using
  object_class_property_add_bool() in patch 10 since it avoids writing explicit
  helpers for each property, and there will likely be other cases in future

- Rebase onto master


v2:
- Add object_class_property_add_*_ptr() functions matching the existing
  object_property_add_*_ptr() functions for class functions

- Rework patch to use new functions instead of manually adding get/set
  functions as part of the conversion

- Ignore existing R-Bs since this approach is quite different to v1

- Rebase onto master


Mark Cave-Ayland (16):
  qom/object.c: introduce OBJECT_CLASS_PROPERTY_SCALAR_GETTER(type)
    macro
  qom/object.c: introduce OBJECT_CLASS_PROPERTY_SCALAR_SETTER(type)
    macro
  qom/object.c: introduce DEFINE_OBJECT_CLASS_PROPERTY_SCALAR_METHODS()
    macro
  qom/object.c: add object_class_property_add_uint8_ptr()
  qom/object.c: add object_class_property_add_uint64_ptr()
  hw/isa/lpc_ich9.c: convert ich9_lpc_initfn() object props to class
    props
  hw/acpi/ich9.c: don't pass ICH9LPCPMRegs via opaque for
    ACPI_PM_PROP_GPE0_BLK prop
  qom/object.c: add object_class_property_add_uint32_ptr()
  hw/acpi/ich9.c: convert ACPI_PM_PROP_GPE0_BLK_LEN to a static class
    property
  qom/object.c: add object_class_property_add_bool_ptr()
  hw/acpi/ich9.c: convert object props in ICH9_LPC_DEVICE to class props
  qom/object.c: add object_class_property_add_uint16_ptr()
  hw/acpi/pcihp.c: convert ACPI_PCIHP_IO_BASE_PROP and
    ACPI_PCIHP_IO_BASE_PROP to class props
  hw/acpi/pcihp.c: convert ACPI_PCIHP_PROP_BSEL from object prop to
    class prop
  hw/acpi/piix4.c: convert static variables to static class properties
  hw/acpi/piix4.c: convert ACPI_PM_PROP_PM_IO_BASE to a class prop

 include/hw/acpi/ich9.h         |   2 +-
 include/hw/pci/pci_bus.h       |   2 +
 include/qom/object.h           |  90 +++++++++++++++++
 hw/acpi/generic_event_device.c |  10 ++
 hw/acpi/ich9.c                 | 126 +++++++++++-------------
 hw/acpi/pci-bridge.c           |   9 +-
 hw/acpi/pcihp.c                |  35 +++----
 hw/acpi/piix4.c                |  51 +++++++---
 hw/arm/virt-acpi-build.c       |   7 +-
 hw/i386/acpi-build.c           |   7 +-
 hw/isa/lpc_ich9.c              |  36 ++++---
 hw/pci/pci.c                   |   7 ++
 qom/object.c                   | 171 +++++++++++++++++++++++++++++++++
 13 files changed, 431 insertions(+), 122 deletions(-)

-- 
2.43.0