qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH RFC 00/10] qapi: remove all TARGET_* conditionals from the schema
@ 2025-05-08 13:58 Daniel P. Berrangé
  2025-05-08 13:58 ` [PATCH 01/10] qapi: expose rtc-reset-reinjection command unconditionally Daniel P. Berrangé
                   ` (12 more replies)
  0 siblings, 13 replies; 41+ messages in thread
From: Daniel P. Berrangé @ 2025-05-08 13:58 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Philippe Mathieu-Daudé, Paolo Bonzini,
	Markus Armbruster, Pierrick Bouvier, Richard Henderson,
	Daniel P. Berrangé

Pierrick has proposed a series that introduces a concept of runtime
conditionals to the QAPI schema, in order to adapt the TARGET_*
conditionals currently used at build time:

  https://lists.nongnu.org/archive/html/qemu-devel/2025-05/msg01699.html

For the sake of comparison & evaluation, this series illustrates the
alternative approach that we've discussed of entirely removing any
concept of TARGET_* conditionals.

With this the QAPI schema varies solely based on CONFIG_* conditionals,
and is thus invariant across different target emulators.

In this PoC I've taken the minimal effort approach to the problem.

The QAPI schema has removed the TARGET_* conditionals and in order to
make all the emulators then compile, the stubs/ directory is populated
with a bunch of files to provide dummy impls of the target specific QMP
commands.

This is sufficient to make the current QEMU binaries build successfully.

To make the "single binary" concept work, however, would require
additional followup work to eliminate the stubs.

Instead of having stubs we would need to de-couple the QMP command
impl from the machine internals. This would likely require greater
use of interfaces and/or virtual method dispatchers on the machine
class. This would enable the 'qmp_XXXXX' command impls to exist
once. Then they call out to virtual methods on the machine to provide
the real impl, and/or generate an error if the virtual method is not
implemented for the machine.

Daniel P. Berrangé (9):
  qapi: expose rtc-reset-reinjection command unconditionally
  qapi: expand docs for SEV commands
  qapi: make SEV commands unconditionally available
  qapi: expose query-gic-capability command unconditionally
  qapi: make SGX commands unconditionally available
  qapi: make Xen event commands unconditionally available
  qapi: remove the misc-target.json file
  qapi: make most CPU  commands unconditionally available
  qapi: make s390x specific CPU commands unconditionally available

Philippe Mathieu-Daudé (1):
  qapi: Make CpuModelExpansionInfo::deprecated-props optional and
    generic

 hw/i386/kvm/xen-stubs.c               |  13 -
 hw/i386/kvm/xen_evtchn.c              |   2 +-
 hw/i386/monitor.c                     |   2 +-
 hw/i386/sgx-stub.c                    |  13 -
 hw/i386/sgx.c                         |   2 +-
 hw/s390x/cpu-topology.c               |   4 +-
 hw/s390x/s390-skeys.c                 |   1 -
 include/hw/s390x/cpu-topology.h       |   2 +-
 qapi/machine-s390x.json               | 120 ++++++
 qapi/machine-target.json              | 523 --------------------------
 qapi/machine.json                     | 363 ++++++++++++++++++
 qapi/meson.build                      |   5 +-
 qapi/misc-arm.json                    |  49 +++
 qapi/misc-i386.json                   | 479 +++++++++++++++++++++++
 qapi/misc-target.json                 | 504 -------------------------
 qapi/qapi-schema.json                 |   5 +-
 stubs/meson.build                     |   8 +
 stubs/monitor-arm-gic.c               |  12 +
 stubs/monitor-cpu-s390x-kvm.c         |  22 ++
 stubs/monitor-cpu-s390x.c             |  23 ++
 stubs/monitor-cpu.c                   |  21 ++
 stubs/monitor-i386-rtc.c              |  10 +
 stubs/monitor-i386-sev.c              |  36 ++
 stubs/monitor-i386-sgx.c              |  17 +
 stubs/monitor-i386-xen.c              |  16 +
 target/arm/arm-qmp-cmds.c             |   4 +-
 target/i386/cpu-system.c              |   2 +-
 target/i386/cpu.c                     |   2 +-
 target/i386/monitor.c                 |   1 -
 target/i386/sev-system-stub.c         |  32 --
 target/i386/sev.c                     |   2 +-
 target/loongarch/loongarch-qmp-cmds.c |   2 +-
 target/mips/system/mips-qmp-cmds.c    |  12 +-
 target/ppc/ppc-qmp-cmds.c             |  12 +-
 target/riscv/riscv-qmp-cmds.c         |   2 +-
 target/s390x/cpu_models_system.c      |   2 +-
 tests/qtest/qmp-cmd-test.c            |   1 +
 37 files changed, 1219 insertions(+), 1107 deletions(-)
 create mode 100644 qapi/machine-s390x.json
 delete mode 100644 qapi/machine-target.json
 create mode 100644 qapi/misc-arm.json
 create mode 100644 qapi/misc-i386.json
 create mode 100644 stubs/monitor-arm-gic.c
 create mode 100644 stubs/monitor-cpu-s390x-kvm.c
 create mode 100644 stubs/monitor-cpu-s390x.c
 create mode 100644 stubs/monitor-cpu.c
 create mode 100644 stubs/monitor-i386-rtc.c
 create mode 100644 stubs/monitor-i386-sev.c
 create mode 100644 stubs/monitor-i386-sgx.c
 create mode 100644 stubs/monitor-i386-xen.c

-- 
2.49.0



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

end of thread, other threads:[~2025-05-13 16:38 UTC | newest]

Thread overview: 41+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-08 13:58 [PATCH RFC 00/10] qapi: remove all TARGET_* conditionals from the schema Daniel P. Berrangé
2025-05-08 13:58 ` [PATCH 01/10] qapi: expose rtc-reset-reinjection command unconditionally Daniel P. Berrangé
2025-05-10  9:57   ` Markus Armbruster
2025-05-12 18:33     ` Daniel P. Berrangé
2025-05-13  0:54       ` Pierrick Bouvier
2025-05-13  1:09         ` Pierrick Bouvier
2025-05-13  7:55       ` Markus Armbruster
2025-05-08 13:58 ` [PATCH 02/10] qapi: expand docs for SEV commands Daniel P. Berrangé
2025-05-13 12:06   ` Markus Armbruster
2025-05-13 12:21     ` Daniel P. Berrangé
2025-05-08 13:58 ` [PATCH 03/10] qapi: make SEV commands unconditionally available Daniel P. Berrangé
2025-05-08 13:58 ` [PATCH 04/10] qapi: expose query-gic-capability command unconditionally Daniel P. Berrangé
2025-05-08 13:58 ` [PATCH 05/10] qapi: make SGX commands unconditionally available Daniel P. Berrangé
2025-05-08 13:58 ` [PATCH 06/10] qapi: make Xen event " Daniel P. Berrangé
2025-05-08 15:01   ` Philippe Mathieu-Daudé
2025-05-08 17:48     ` David Woodhouse
2025-05-08 17:53       ` Daniel P. Berrangé
2025-05-08 19:08         ` David Woodhouse
2025-05-08 13:58 ` [PATCH 07/10] qapi: remove the misc-target.json file Daniel P. Berrangé
2025-05-08 13:58 ` [PATCH 08/10] qapi: Make CpuModelExpansionInfo::deprecated-props optional and generic Daniel P. Berrangé
2025-05-13 12:38   ` Markus Armbruster
2025-05-13 12:41     ` Daniel P. Berrangé
2025-05-08 13:58 ` [PATCH 09/10] qapi: make most CPU commands unconditionally available Daniel P. Berrangé
2025-05-08 20:55   ` Pierrick Bouvier
2025-05-13 12:44   ` Markus Armbruster
2025-05-13 16:37     ` Daniel P. Berrangé
2025-05-08 13:58 ` [PATCH 10/10] qapi: make s390x specific " Daniel P. Berrangé
2025-05-08 14:56 ` [PATCH RFC 00/10] qapi: remove all TARGET_* conditionals from the schema Philippe Mathieu-Daudé
2025-05-08 14:58   ` Daniel P. Berrangé
2025-05-08 21:09 ` Pierrick Bouvier
2025-05-09  9:02   ` Daniel P. Berrangé
2025-05-09 13:43     ` Markus Armbruster
2025-05-09 13:56       ` Daniel P. Berrangé
2025-05-10  6:08         ` Markus Armbruster
2025-05-12 18:38           ` Daniel P. Berrangé
2025-05-10  9:28 ` Markus Armbruster
2025-05-12 18:39   ` Daniel P. Berrangé
2025-05-12 20:09     ` Pierrick Bouvier
2025-05-13  7:59       ` Markus Armbruster
2025-05-13 14:36         ` Pierrick Bouvier
2025-05-13 14:55           ` Daniel P. Berrangé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).