All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] hw: support machine filtering without is_available
@ 2026-11-05 10:24 Daniel P. Berrangé
  2026-11-05 10:24 ` [PATCH 1/4] hw/core: record permitted targets against MachineClass Daniel P. Berrangé
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Daniel P. Berrangé @ 2026-11-05 10:24 UTC (permalink / raw)
  To: qemu-devel
  Cc: Yonggang Luo, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Daniel P. Berrangé

The 'is_available' callback on TypeInfo is based on a mistaken
notion that we should filter out classes at registration time
based on architecture.

This creates new problems however, some already present and
some which will impact a future multi-target binary

 * For introspection of the binaries' features, we have
   a dependancy on selecting a target before we can
   introspect features. It would require re-launching
   QEMU for each target, leading to lots of redundant
   introspection and a big time sink. It would also not
   be possible to introspect targets

 * It creates a circular dependancy on QOM initialization
   inside the QOM initialization code, since 'target_info()'
   itself uses QOM. This then requires further work to break
   by initializing QOM target info before the rest of QOM.

 * We have no means to introspect what targets a machine
   type can be used with, as this information is expressed
   as code (in target_XXXX() methods), instead of as data.

 * New fields in TypeInfo requires more changes to macros
   used for initializing machines.

There is no inherant conceptual reason why we must filter out
classes at type registration time. This is just a shortcut to
workaround historical technical debt where certain classes
have clashing names. This is an undesirable approach, as it
is trading one set of problems for a new set of problems.

This series proposes removal of the 'is_available' concept
from QOM, and illustrates handling machines with full introspection
support available from the MachineClass.

This implies fixing the root cause, of clashing class names,
but does not include patches since various series have already
been posted for machine class name fixes.

The machine changes are fairly simple

 * MachineClass gains a 'targets' field which is a bit mask
   of SysEmuTarget
 * machine_class_is_available() matches 'targets' against
   'target_info()'
 * -machine CLI enforces machine_class_is_available()
 * query-machines filters on machine_class_is_available
   by default
 * query-machines gains 'all-targets': 'bool' to opt-in
   to returning the unfiltered list, with a 'targets'
   list present

NB, this removes filtering from riscv CPUs with no
alternative proposed. I'm unclear what this was trying
to address to begin with, but utlimately it should be
possible to address it with runtime filtering/matching
of classes, instead of hiding TypeInfo registration.
If someone gives me info on the CPUs problem I can a
make a design suggestion.

Daniel P. Berrangé (4):
  hw/core: record permitted targets against MachineClass
  hw: replace 'is_available' with 'targets' in machines
  target/riscv: remove 'is_available' from riscv CPUs
  qom: drop the 'is_available' callback from TypeInfo

 hw/arm/aspeed_ast27x0-fc.c  |  3 ++-
 hw/arm/aspeed_ast27x0_evb.c |  5 +++--
 hw/arm/raspi.c              | 21 +++++++++++++--------
 hw/arm/raspi4b.c            |  3 ++-
 hw/arm/virt.c               |  5 +++--
 hw/core/machine-qmp-cmds.c  | 18 ++++++++++++++++++
 hw/core/machine.c           | 13 +++++++++++++
 hw/hexagon/virt.c           |  3 ++-
 hw/m68k/virt.c              |  4 ++--
 hw/or1k/virt.c              |  3 ++-
 hw/riscv/virt.c             |  4 +++-
 include/hw/core/boards.h    |  3 +++
 include/qom/object.h        |  3 ---
 qapi/machine.json           | 12 +++++++++++-
 qom/object.c                |  4 ----
 rust/qom/src/qom.rs         |  1 -
 system/vl.c                 |  9 +++++++++
 target/riscv/kvm/kvm-cpu.c  |  1 -
 target/riscv/tcg/tcg-cpu.c  |  1 -
 19 files changed, 86 insertions(+), 30 deletions(-)

-- 
2.56.0



^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2026-11-06 17:13 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-05 10:24 [PATCH 0/4] hw: support machine filtering without is_available Daniel P. Berrangé
2026-11-05 10:24 ` [PATCH 1/4] hw/core: record permitted targets against MachineClass Daniel P. Berrangé
2026-11-05 10:24 ` [PATCH 2/4] hw: replace 'is_available' with 'targets' in machines Daniel P. Berrangé
2026-11-05 10:24 ` [PATCH 3/4] target/riscv: remove 'is_available' from riscv CPUs Daniel P. Berrangé
2026-11-05 10:24 ` [PATCH 4/4] qom: drop the 'is_available' callback from TypeInfo Daniel P. Berrangé
2026-11-05 17:25 ` [PATCH 0/4] hw: support machine filtering without is_available Pierrick Bouvier
2026-11-06 15:35   ` Daniel P. Berrangé
2026-11-06 16:28     ` Yonggang Luo
2026-11-06 17:13     ` Pierrick Bouvier
2026-11-05 19:18 ` Yonggang Luo
2026-11-05 19:24   ` Pierrick Bouvier

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.