All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3)
@ 2019-02-06 18:17 Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 01/17] qapi: Belatedly document modular code generation Markus Armbruster
                   ` (16 more replies)
  0 siblings, 17 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

Marc-André posted a v1 that relies on a QAPI schema language extension
'top-unit' to permit splitting the generated code.  Here is his cover
letter:

    The thrid and last part (of "[PATCH v2 00/54] qapi: add #if
    pre-processor conditions to generated code") is about adding schema
    conditions based on the target.

    For now, the qapi code is compiled in common objects (common to all
    targets). This makes it impossible to add #if TARGET_ARM for example.

    The patch "RFC: qapi: learn to split the schema by 'top-unit'"
    proposes to split the schema by "top-unit", so that generated code can
    be built either in common objects or per-target. That patch is a bit
    rough, I would like to get some feedback about the approach before
    trying to improve it. The following patches demonstrate usage of
    target-based #if conditions, and getting rid of the
    qmp_unregister_command() hack.

We already have a way to split generated code: QAPI modules.  I took
the liberty to rework Marc-André's series to use a target module
instead.  Less code, no change to the QAPI language.

v3:
* PATCH v2 01+02 have been merged
* PATCH 01-04: New
* PATCH 05: Rebase of PATCH v2 03
* PATCH 06-17: Trivially rebased, R-by and such retained

Marc-André Lureau (9):
  build-sys: move qmp-introspect per target
  qapi: make rtc-reset-reinjection and SEV depend on TARGET_I386
  qapi: make s390 commands depend on TARGET_S390X
  target.json: add a note about query-cpu* not being s390x-specific
  qapi: make query-gic-capabilities depend on TARGET_ARM
  qapi: make query-cpu-model-expansion depend on s390 or x86
  qapi: make query-cpu-definitions depend on specific targets
  qapi: remove qmp_unregister_command()
  qapi: move RTC_CHANGE to the target schema

Markus Armbruster (8):
  qapi: Belatedly document modular code generation
  qapi: Fix up documentation for recent commit a95291007b2
  qapi: Clean up modular built-in code generation a bit
  qapi: Prepare for system modules other than 'builtin'
  qapi: Generate QAPIEvent stuff into separate files
  qapi: New module target.json
  Revert "qapi-events: add 'if' condition to implicit event enum"
  qmp: Deprecate query-events in favor of query-qmp-schema

 .gitignore                               |   1 +
 Makefile                                 |   1 +
 Makefile.objs                            |  23 +-
 Makefile.target                          |  12 +
 docs/devel/qapi-code-gen.txt             |  82 +++-
 hw/ppc/spapr_rtc.c                       |   2 +-
 hw/s390x/s390-skeys.c                    |   2 +-
 hw/timer/mc146818rtc.c                   |   4 +-
 include/qapi/qmp/dispatch.h              |   1 -
 include/sysemu/arch_init.h               |  11 -
 monitor.c                                |  88 +---
 qapi/misc.json                           | 485 +--------------------
 qapi/qapi-schema.json                    |   1 +
 qapi/qmp-registry.c                      |   8 -
 qapi/target.json                         | 514 +++++++++++++++++++++++
 qemu-deprecated.texi                     |   5 +
 qmp.c                                    |  26 --
 scripts/qapi/commands.py                 |   2 +-
 scripts/qapi/common.py                   |  55 ++-
 scripts/qapi/events.py                   |  38 +-
 scripts/qapi/types.py                    |   4 +-
 scripts/qapi/visit.py                    |   4 +-
 stubs/Makefile.objs                      |   4 -
 stubs/arch-query-cpu-def.c               |  11 -
 stubs/arch-query-cpu-model-baseline.c    |  13 -
 stubs/arch-query-cpu-model-comparison.c  |  13 -
 stubs/arch-query-cpu-model-expansion.c   |  13 -
 stubs/monitor.c                          |   2 +-
 target/arm/helper.c                      |   3 +-
 target/arm/monitor.c                     |   2 +-
 target/i386/cpu.c                        |   7 +-
 target/i386/sev_i386.h                   |   2 +-
 target/ppc/translate_init.inc.c          |   3 +-
 target/s390x/cpu_models.c                |   9 +-
 tests/qapi-schema/comments.out           |   1 +
 tests/qapi-schema/doc-bad-section.out    |   1 +
 tests/qapi-schema/doc-good.out           |   1 +
 tests/qapi-schema/empty.out              |   1 +
 tests/qapi-schema/event-case.out         |   1 +
 tests/qapi-schema/ident-with-escape.out  |   1 +
 tests/qapi-schema/include-relpath.out    |   1 +
 tests/qapi-schema/include-repetition.out |   1 +
 tests/qapi-schema/include-simple.out     |   1 +
 tests/qapi-schema/indented-expr.out      |   1 +
 tests/qapi-schema/qapi-schema-test.out   |   1 +
 tests/test-qmp-event.c                   |   1 +
 tests/test-qobject-input-visitor.c       |   1 -
 ui/vnc.c                                 |   3 +-
 48 files changed, 730 insertions(+), 737 deletions(-)
 create mode 100644 qapi/target.json
 delete mode 100644 stubs/arch-query-cpu-def.c
 delete mode 100644 stubs/arch-query-cpu-model-baseline.c
 delete mode 100644 stubs/arch-query-cpu-model-comparison.c
 delete mode 100644 stubs/arch-query-cpu-model-expansion.c

-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 01/17] qapi: Belatedly document modular code generation
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:26   ` Marc-André Lureau
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 02/17] qapi: Fix up documentation for recent commit a95291007b2 Markus Armbruster
                   ` (15 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

We generate code for built-ins and sub-modules into separate files
since commit cdb6610ae42 and 252dc3105fc (v2.12.0).  Both commits
neglected to update documentation.  Do that now.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 docs/devel/qapi-code-gen.txt | 38 ++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
index 87183d3a09..b91bde647c 100644
--- a/docs/devel/qapi-code-gen.txt
+++ b/docs/devel/qapi-code-gen.txt
@@ -1113,6 +1113,19 @@ Example:
 
 [Uninteresting stuff omitted...]
 
+For a modular QAPI schema (see section Include directives), code for
+each sub-module SUBDIR/SUBMODULE.json is actually generated into
+
+SUBDIR/$(prefix)qapi-types-SUBMODULE.h
+SUBDIR/$(prefix)qapi-types-SUBMODULE.c
+
+If qapi-gen.py is run with option --builtins, additional files are
+created:
+
+qapi-builtin-types.h - C types corresponding to built-in types
+
+qapi-builtin-types.c - Cleanup functions for the above C types
+
 === Code generated for visiting QAPI types ===
 
 These are the visitor functions used to walk through and convert
@@ -1244,6 +1257,19 @@ Example:
 
 [Uninteresting stuff omitted...]
 
+For a modular QAPI schema (see section Include directives), code for
+each sub-module SUBDIR/SUBMODULE.json is actually generated into
+
+SUBDIR/$(prefix)qapi-visit-SUBMODULE.h
+SUBDIR/$(prefix)qapi-visit-SUBMODULE.c
+
+If qapi-gen.py is run with option --builtins, additional files are
+created:
+
+qapi-builtin-visit.h - Visitor functions for built-in types
+
+qapi-builtin-visit.c - Declarations for these visitor functions
+
 === Code generated for commands ===
 
 These are the marshaling/dispatch functions for the commands defined
@@ -1342,6 +1368,12 @@ Example:
 
 [Uninteresting stuff omitted...]
 
+For a modular QAPI schema (see section Include directives), code for
+each sub-module SUBDIR/SUBMODULE.json is actually generated into
+
+SUBDIR/$(prefix)qapi-commands-SUBMODULE.h
+SUBDIR/$(prefix)qapi-commands-SUBMODULE.c
+
 === Code generated for events ===
 
 This is the code related to events defined in the schema, providing
@@ -1402,6 +1434,12 @@ Example:
 
 [Uninteresting stuff omitted...]
 
+For a modular QAPI schema (see section Include directives), code for
+each sub-module SUBDIR/SUBMODULE.json is actually generated into
+
+SUBDIR/$(prefix)qapi-events-SUBMODULE.h
+SUBDIR/$(prefix)qapi-events-SUBMODULE.c
+
 === Code generated for introspection ===
 
 The following files are created:
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 02/17] qapi: Fix up documentation for recent commit a95291007b2
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 01/17] qapi: Belatedly document modular code generation Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:19   ` Marc-André Lureau
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 03/17] qapi: Clean up modular built-in code generation a bit Markus Armbruster
                   ` (14 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 docs/devel/qapi-code-gen.txt | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
index b91bde647c..c9ba8ddb2e 100644
--- a/docs/devel/qapi-code-gen.txt
+++ b/docs/devel/qapi-code-gen.txt
@@ -1410,6 +1410,8 @@ Example:
 
     extern const QEnumLookup example_QAPIEvent_lookup;
 
+    void example_qapi_event_emit(example_QAPIEvent event, QDict *qdict);
+
     #endif /* EXAMPLE_QAPI_EVENTS_H */
     $ cat qapi-generated/example-qapi-events.c
 [Uninteresting stuff omitted...]
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 03/17] qapi: Clean up modular built-in code generation a bit
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 01/17] qapi: Belatedly document modular code generation Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 02/17] qapi: Fix up documentation for recent commit a95291007b2 Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-07 11:15   ` Marc-André Lureau
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 04/17] qapi: Prepare for system modules other than 'builtin' Markus Armbruster
                   ` (13 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

We neglect to call .visit_module() for the special module we use for
built-ins.  Harmless, but clean it up anyway.  The
tests/qapi-schema/*.out now show the built-in module as 'module None'.

Subclasses of QAPISchemaModularCVisitor need to ._add_module() this
special module to enable code generation for built-ins.  When this
hasn't been done, QAPISchemaModularCVisitor.visit_module() does
nothing for the special module.  That looks like built-ins could
accidentally be generated into the wrong module when a subclass
neglects to call ._add_module().  Can't happen, because built-ins are
all visited before any other module.  But that's non-obvious.  Switch
off code generation explicitly.

Split QAPISchemaModularCVisitor._add_module() into ._add_user_module()
and ._add_system_module(), for clarity.

Rename QAPISchemaModularCVisitor._begin_module() to
._begin_user_module().

New QAPISchemaModularCVisitor._is_builtin_module(), for clarity.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 scripts/qapi/commands.py                 |  2 +-
 scripts/qapi/common.py                   | 24 ++++++++++++++++++------
 scripts/qapi/events.py                   |  2 +-
 scripts/qapi/types.py                    |  2 +-
 scripts/qapi/visit.py                    |  2 +-
 tests/qapi-schema/comments.out           |  1 +
 tests/qapi-schema/doc-bad-section.out    |  1 +
 tests/qapi-schema/doc-good.out           |  1 +
 tests/qapi-schema/empty.out              |  1 +
 tests/qapi-schema/event-case.out         |  1 +
 tests/qapi-schema/ident-with-escape.out  |  1 +
 tests/qapi-schema/include-relpath.out    |  1 +
 tests/qapi-schema/include-repetition.out |  1 +
 tests/qapi-schema/include-simple.out     |  1 +
 tests/qapi-schema/indented-expr.out      |  1 +
 tests/qapi-schema/qapi-schema-test.out   |  1 +
 16 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/scripts/qapi/commands.py b/scripts/qapi/commands.py
index 0f3c991918..ebf488953d 100644
--- a/scripts/qapi/commands.py
+++ b/scripts/qapi/commands.py
@@ -242,7 +242,7 @@ class QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor):
         self._regy = QAPIGenCCode()
         self._visited_ret_types = {}
 
-    def _begin_module(self, name):
+    def _begin_user_module(self, name):
         self._visited_ret_types[self._genc] = set()
         commands = self._module_basename('qapi-commands', name)
         types = self._module_basename('qapi-types', name)
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index c89edc0cb0..0e3ec598a4 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -1868,6 +1868,7 @@ class QAPISchema(object):
     def visit(self, visitor):
         visitor.visit_begin(self)
         module = None
+        visitor.visit_module(module)
         for entity in self._entity_list:
             if visitor.visit_needed(entity):
                 if entity.module != module:
@@ -2321,9 +2322,15 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
         self._what = what
         self._blurb = blurb
         self._pydoc = pydoc
+        self._genc = None
+        self._genh = None
         self._module = {}
         self._main_module = None
 
+    @staticmethod
+    def _is_builtin_module(name):
+        return not name
+
     def _module_basename(self, what, name):
         if name is None:
             return re.sub(r'-', '-builtin-', what)
@@ -2334,7 +2341,7 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
         return basename + '-' + os.path.splitext(os.path.basename(name))[0]
 
     def _add_module(self, name, blurb):
-        if self._main_module is None and name is not None:
+        if self._main_module is None and not self._is_builtin_module(name):
             self._main_module = name
         genc = QAPIGenC(blurb, self._pydoc)
         genh = QAPIGenH(blurb, self._pydoc)
@@ -2346,22 +2353,27 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
 
     def write(self, output_dir, opt_builtins=False):
         for name in self._module:
-            if name is None and not opt_builtins:
+            if self._is_builtin_module(name) and not opt_builtins:
                 continue
             basename = self._module_basename(self._what, name)
             (genc, genh) = self._module[name]
             genc.write(output_dir, basename + '.c')
             genh.write(output_dir, basename + '.h')
 
-    def _begin_module(self, name):
+    def _begin_user_module(self, name):
         pass
 
     def visit_module(self, name):
         if name in self._module:
             self._set_module(name)
-            return
-        self._add_module(name, self._blurb)
-        self._begin_module(name)
+        elif self._is_builtin_module(name):
+            # The built-in module has not been created.  No code may
+            # be generated.
+            self._genc = None
+            self._genh = None
+        else:
+            self._add_module(name, self._blurb)
+            self._begin_user_module(name)
 
     def visit_include(self, name, info):
         basename = self._module_basename(self._what, name)
diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
index d86a2d2b3e..6f39cf8196 100644
--- a/scripts/qapi/events.py
+++ b/scripts/qapi/events.py
@@ -142,7 +142,7 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
         self._event_enum_members = []
         self._event_emit_name = c_name(prefix + 'qapi_event_emit')
 
-    def _begin_module(self, name):
+    def _begin_user_module(self, name):
         types = self._module_basename('qapi-types', name)
         visit = self._module_basename('qapi-visit', name)
         self._genc.add(mcgen('''
diff --git a/scripts/qapi/types.py b/scripts/qapi/types.py
index 62d4cf9f95..9fa510f7df 100644
--- a/scripts/qapi/types.py
+++ b/scripts/qapi/types.py
@@ -194,7 +194,7 @@ class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor):
 #include "qapi/util.h"
 '''))
 
-    def _begin_module(self, name):
+    def _begin_user_module(self, name):
         types = self._module_basename('qapi-types', name)
         visit = self._module_basename('qapi-visit', name)
         self._genc.preamble_add(mcgen('''
diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py
index 82eab72b21..ca86009398 100644
--- a/scripts/qapi/visit.py
+++ b/scripts/qapi/visit.py
@@ -298,7 +298,7 @@ class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor):
 ''',
                                       prefix=prefix))
 
-    def _begin_module(self, name):
+    def _begin_user_module(self, name):
         types = self._module_basename('qapi-types', name)
         visit = self._module_basename('qapi-visit', name)
         self._genc.preamble_add(mcgen('''
diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out
index d1abc4b5a1..273f0f54e1 100644
--- a/tests/qapi-schema/comments.out
+++ b/tests/qapi-schema/comments.out
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
diff --git a/tests/qapi-schema/doc-bad-section.out b/tests/qapi-schema/doc-bad-section.out
index db8014eed0..367e2a1c3e 100644
--- a/tests/qapi-schema/doc-bad-section.out
+++ b/tests/qapi-schema/doc-bad-section.out
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out
index 21bf345ff0..d3bca343eb 100644
--- a/tests/qapi-schema/doc-good.out
+++ b/tests/qapi-schema/doc-good.out
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
diff --git a/tests/qapi-schema/empty.out b/tests/qapi-schema/empty.out
index 5483cb7bc6..5b53d00702 100644
--- a/tests/qapi-schema/empty.out
+++ b/tests/qapi-schema/empty.out
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
diff --git a/tests/qapi-schema/event-case.out b/tests/qapi-schema/event-case.out
index f69d4ffe4e..ec8a1406e4 100644
--- a/tests/qapi-schema/event-case.out
+++ b/tests/qapi-schema/event-case.out
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
diff --git a/tests/qapi-schema/ident-with-escape.out b/tests/qapi-schema/ident-with-escape.out
index 7f891f7e90..39754eba8c 100644
--- a/tests/qapi-schema/ident-with-escape.out
+++ b/tests/qapi-schema/ident-with-escape.out
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
diff --git a/tests/qapi-schema/include-relpath.out b/tests/qapi-schema/include-relpath.out
index 783ccfc855..cf8636b78f 100644
--- a/tests/qapi-schema/include-relpath.out
+++ b/tests/qapi-schema/include-relpath.out
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
diff --git a/tests/qapi-schema/include-repetition.out b/tests/qapi-schema/include-repetition.out
index d45977ee56..5423983239 100644
--- a/tests/qapi-schema/include-repetition.out
+++ b/tests/qapi-schema/include-repetition.out
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
diff --git a/tests/qapi-schema/include-simple.out b/tests/qapi-schema/include-simple.out
index 1afe20802a..061f81e509 100644
--- a/tests/qapi-schema/include-simple.out
+++ b/tests/qapi-schema/include-simple.out
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
diff --git a/tests/qapi-schema/indented-expr.out b/tests/qapi-schema/indented-expr.out
index c0cf3243f3..bffdf6756d 100644
--- a/tests/qapi-schema/indented-expr.out
+++ b/tests/qapi-schema/indented-expr.out
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qapi-schema-test.out
index 9464101d26..d8aec17115 100644
--- a/tests/qapi-schema/qapi-schema-test.out
+++ b/tests/qapi-schema/qapi-schema-test.out
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 04/17] qapi: Prepare for system modules other than 'builtin'
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (2 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 03/17] qapi: Clean up modular built-in code generation a bit Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-07 11:16   ` Marc-André Lureau
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 05/17] qapi: Generate QAPIEvent stuff into separate files Markus Armbruster
                   ` (12 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

The next commit wants to generate qapi-emit-events.{c.h}.  To support
that, extend QAPISchemaModularCVisitor to support additional "system
modules", i.e. modules that don't correspond to a (user-defined) QAPI
schema module.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 scripts/qapi/common.py | 35 +++++++++++++++++++++++++----------
 scripts/qapi/types.py  |  2 +-
 scripts/qapi/visit.py  |  2 +-
 3 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index 0e3ec598a4..c327ae5036 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -2327,27 +2327,42 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
         self._module = {}
         self._main_module = None
 
+    @staticmethod
+    def _is_user_module(name):
+        return name and not name.startswith('./')
+
     @staticmethod
     def _is_builtin_module(name):
         return not name
 
     def _module_basename(self, what, name):
-        if name is None:
-            return re.sub(r'-', '-builtin-', what)
-        basename = os.path.join(os.path.dirname(name),
-                                self._prefix + what)
-        if name == self._main_module:
-            return basename
-        return basename + '-' + os.path.splitext(os.path.basename(name))[0]
+        ret = '' if self._is_builtin_module(name) else self._prefix
+        if self._is_user_module(name):
+            dirname, basename = os.path.split(name)
+            ret += what
+            if name != self._main_module:
+                ret += '-' + os.path.splitext(basename)[0]
+            ret = os.path.join(dirname, ret)
+        else:
+            name = name[2:] if name else 'builtin'
+            ret += re.sub(r'-', '-' + name + '-', what)
+        return ret
 
     def _add_module(self, name, blurb):
-        if self._main_module is None and not self._is_builtin_module(name):
-            self._main_module = name
         genc = QAPIGenC(blurb, self._pydoc)
         genh = QAPIGenH(blurb, self._pydoc)
         self._module[name] = (genc, genh)
         self._set_module(name)
 
+    def _add_user_module(self, name, blurb):
+        assert self._is_user_module(name)
+        if self._main_module is None:
+            self._main_module = name
+        self._add_module(name, blurb)
+
+    def _add_system_module(self, name, blurb):
+        self._add_module(name and './' + name, blurb)
+
     def _set_module(self, name):
         self._genc, self._genh = self._module[name]
 
@@ -2372,7 +2387,7 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
             self._genc = None
             self._genh = None
         else:
-            self._add_module(name, self._blurb)
+            self._add_user_module(name, self._blurb)
             self._begin_user_module(name)
 
     def visit_include(self, name, info):
diff --git a/scripts/qapi/types.py b/scripts/qapi/types.py
index 9fa510f7df..2bd6fcd44f 100644
--- a/scripts/qapi/types.py
+++ b/scripts/qapi/types.py
@@ -183,7 +183,7 @@ class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor):
         QAPISchemaModularCVisitor.__init__(
             self, prefix, 'qapi-types', ' * Schema-defined QAPI types',
             __doc__)
-        self._add_module(None, ' * Built-in QAPI types')
+        self._add_system_module(None, ' * Built-in QAPI types')
         self._genc.preamble_add(mcgen('''
 #include "qemu/osdep.h"
 #include "qapi/dealloc-visitor.h"
diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py
index ca86009398..826b8066e1 100644
--- a/scripts/qapi/visit.py
+++ b/scripts/qapi/visit.py
@@ -284,7 +284,7 @@ class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor):
         QAPISchemaModularCVisitor.__init__(
             self, prefix, 'qapi-visit', ' * Schema-defined QAPI visitors',
             __doc__)
-        self._add_module(None, ' * Built-in QAPI visitors')
+        self._add_system_module(None, ' * Built-in QAPI visitors')
         self._genc.preamble_add(mcgen('''
 #include "qemu/osdep.h"
 #include "qemu-common.h"
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 05/17] qapi: Generate QAPIEvent stuff into separate files
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (3 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 04/17] qapi: Prepare for system modules other than 'builtin' Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-07 11:16   ` Marc-André Lureau
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 06/17] build-sys: move qmp-introspect per target Markus Armbruster
                   ` (11 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

Having to include qapi-events.h just for QAPIEvent is suboptimal, but
quite tolerable now.  It'll become problematic when we have events
conditional on the target, because then qapi-events.h won't be usable
from target-independent code anymore.  Avoid that by generating it
into separate files.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 .gitignore                   |  1 +
 Makefile                     |  1 +
 Makefile.objs                |  1 +
 docs/devel/qapi-code-gen.txt | 48 ++++++++++++++++++++++++------------
 monitor.c                    |  2 +-
 scripts/qapi/events.py       | 32 +++++++++++++++---------
 stubs/monitor.c              |  2 +-
 tests/test-qmp-event.c       |  1 +
 ui/vnc.c                     |  3 ++-
 9 files changed, 61 insertions(+), 30 deletions(-)

diff --git a/.gitignore b/.gitignore
index 0430257313..6d66daf713 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,6 +32,7 @@
 /qapi/qapi-builtin-visit.[ch]
 /qapi/qapi-commands-*.[ch]
 /qapi/qapi-commands.[ch]
+/qapi/qapi-emit-events.[ch]
 /qapi/qapi-events-*.[ch]
 /qapi/qapi-events.[ch]
 /qapi/qapi-introspect.[ch]
diff --git a/Makefile b/Makefile
index 1278a3eb52..cd13e26c88 100644
--- a/Makefile
+++ b/Makefile
@@ -101,6 +101,7 @@ GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-visit-%.c)
 GENERATED_QAPI_FILES += qapi/qapi-commands.h qapi/qapi-commands.c
 GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-commands-%.h)
 GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-commands-%.c)
+GENERATED_QAPI_FILES += qapi/qapi-emit-events.h qapi/qapi-emit-events.c
 GENERATED_QAPI_FILES += qapi/qapi-events.h qapi/qapi-events.c
 GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-events-%.h)
 GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-events-%.c)
diff --git a/Makefile.objs b/Makefile.objs
index 67a054b08a..c463899df3 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -12,6 +12,7 @@ util-obj-y += $(QAPI_MODULES:%=qapi/qapi-types-%.o)
 util-obj-y += qapi/qapi-builtin-visit.o
 util-obj-y += qapi/qapi-visit.o
 util-obj-y += $(QAPI_MODULES:%=qapi/qapi-visit-%.o)
+util-obj-y += qapi/qapi-emit-events.o
 util-obj-y += qapi/qapi-events.o
 util-obj-y += $(QAPI_MODULES:%=qapi/qapi-events-%.o)
 util-obj-y += qapi/qapi-introspect.o
diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
index c9ba8ddb2e..b517b0cfbf 100644
--- a/docs/devel/qapi-code-gen.txt
+++ b/docs/devel/qapi-code-gen.txt
@@ -1381,11 +1381,15 @@ qapi_event_send_EVENT().
 
 The following files are created:
 
-$(prefix)qapi-events.h - Function prototypes for each event type, plus an
-                        enumeration of all event names
+$(prefix)qapi-events.h - Function prototypes for each event type
 
 $(prefix)qapi-events.c - Implementation of functions to send an event
 
+$(prefix)qapi-emit-events.h - Enumeration of all event names, and
+                              common event code declarations
+
+$(prefix)qapi-emit-events.c - Common event code definitions
+
 Example:
 
     $ cat qapi-generated/example-qapi-events.h
@@ -1397,9 +1401,32 @@ Example:
     #include "qapi/util.h"
     #include "example-qapi-types.h"
 
-
     void qapi_event_send_my_event(void);
 
+    #endif /* EXAMPLE_QAPI_EVENTS_H */
+    $ cat qapi-generated/example-qapi-events.c
+[Uninteresting stuff omitted...]
+
+    void qapi_event_send_my_event(void)
+    {
+        QDict *qmp;
+
+        qmp = qmp_event_build_dict("MY_EVENT");
+
+        example_qapi_event_emit(EXAMPLE_QAPI_EVENT_MY_EVENT, qmp);
+
+        qobject_unref(qmp);
+    }
+
+[Uninteresting stuff omitted...]
+    $ cat qapi-generated/example-qapi-emit-events.h
+[Uninteresting stuff omitted...]
+
+    #ifndef EXAMPLE_QAPI_EMIT_EVENTS_H
+    #define EXAMPLE_QAPI_EMIT_EVENTS_H
+
+    #include "qapi/util.h"
+
     typedef enum example_QAPIEvent {
         EXAMPLE_QAPI_EVENT_MY_EVENT,
         EXAMPLE_QAPI_EVENT__MAX,
@@ -1412,21 +1439,10 @@ Example:
 
     void example_qapi_event_emit(example_QAPIEvent event, QDict *qdict);
 
-    #endif /* EXAMPLE_QAPI_EVENTS_H */
-    $ cat qapi-generated/example-qapi-events.c
+    #endif /* EXAMPLE_QAPI_EMIT_EVENTS_H */
+    $ cat qapi-generated/example-qapi-emit-events.c
 [Uninteresting stuff omitted...]
 
-    void qapi_event_send_my_event(void)
-    {
-        QDict *qmp;
-
-        qmp = qmp_event_build_dict("MY_EVENT");
-
-        example_qapi_event_emit(EXAMPLE_QAPI_EVENT_MY_EVENT, qmp);
-
-        qobject_unref(qmp);
-    }
-
     const QEnumLookup example_QAPIEvent_lookup = {
         .array = (const char *const[]) {
             [EXAMPLE_QAPI_EVENT_MY_EVENT] = "MY_EVENT",
diff --git a/monitor.c b/monitor.c
index c09fa63940..20d8e2e2aa 100644
--- a/monitor.c
+++ b/monitor.c
@@ -75,7 +75,7 @@
 #include "qemu/thread.h"
 #include "block/qapi.h"
 #include "qapi/qapi-commands.h"
-#include "qapi/qapi-events.h"
+#include "qapi/qapi-emit-events.h"
 #include "qapi/error.h"
 #include "qapi/qmp-event.h"
 #include "qapi/qapi-introspect.h"
diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
index 6f39cf8196..28bbc3745d 100644
--- a/scripts/qapi/events.py
+++ b/scripts/qapi/events.py
@@ -143,12 +143,14 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
         self._event_emit_name = c_name(prefix + 'qapi_event_emit')
 
     def _begin_user_module(self, name):
+        events = self._module_basename('qapi-events', name)
         types = self._module_basename('qapi-types', name)
         visit = self._module_basename('qapi-visit', name)
         self._genc.add(mcgen('''
 #include "qemu/osdep.h"
 #include "qemu-common.h"
-#include "%(prefix)sqapi-events.h"
+#include "%(prefix)sqapi-emit-events.h"
+#include "%(events)s.h"
 #include "%(visit)s.h"
 #include "qapi/error.h"
 #include "qapi/qmp/qdict.h"
@@ -156,26 +158,34 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
 #include "qapi/qmp-event.h"
 
 ''',
-                             visit=visit, prefix=self._prefix))
+                             events=events, visit=visit,
+                             prefix=self._prefix))
         self._genh.add(mcgen('''
 #include "qapi/util.h"
 #include "%(types)s.h"
-
 ''',
                              types=types))
 
     def visit_end(self):
-        (genc, genh) = self._module[self._main_module]
-        genh.add(gen_enum(self._event_enum_name,
-                          self._event_enum_members))
-        genc.add(gen_enum_lookup(self._event_enum_name,
-                                 self._event_enum_members))
-        genh.add(mcgen('''
+        self._add_system_module('emit', ' * QAPI Events emission')
+        self._genc.preamble_add(mcgen('''
+#include "qemu/osdep.h"
+#include "%(prefix)sqapi-emit-events.h"
+''',
+                                      prefix=self._prefix))
+        self._genh.preamble_add(mcgen('''
+#include "qapi/util.h"
+'''))
+        self._genh.add(gen_enum(self._event_enum_name,
+                                self._event_enum_members))
+        self._genc.add(gen_enum_lookup(self._event_enum_name,
+                                       self._event_enum_members))
+        self._genh.add(mcgen('''
 
 void %(event_emit)s(%(event_enum)s event, QDict *qdict);
 ''',
-                       event_emit=self._event_emit_name,
-                       event_enum=self._event_enum_name))
+                             event_emit=self._event_emit_name,
+                             event_enum=self._event_enum_name))
 
     def visit_event(self, name, info, ifcond, arg_type, boxed):
         with ifcontext(ifcond, self._genh, self._genc):
diff --git a/stubs/monitor.c b/stubs/monitor.c
index 32bd7012c3..b57fe6c32f 100644
--- a/stubs/monitor.c
+++ b/stubs/monitor.c
@@ -1,6 +1,6 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
-#include "qapi/qapi-events.h"
+#include "qapi/qapi-emit-events.h"
 #include "qemu-common.h"
 #include "monitor/monitor.h"
 
diff --git a/tests/test-qmp-event.c b/tests/test-qmp-event.c
index bf900f14f4..eee7e08ab6 100644
--- a/tests/test-qmp-event.c
+++ b/tests/test-qmp-event.c
@@ -21,6 +21,7 @@
 #include "qapi/qmp/qstring.h"
 #include "qapi/qmp-event.h"
 #include "test-qapi-events.h"
+#include "test-qapi-emit-events.h"
 
 typedef struct TestEventData {
     QDict *expect;
diff --git a/ui/vnc.c b/ui/vnc.c
index 6002d09407..284ea824d0 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -35,7 +35,8 @@
 #include "qemu/timer.h"
 #include "qemu/acl.h"
 #include "qemu/config-file.h"
-#include "qapi/qapi-events.h"
+#include "qapi/qapi-emit-events.h"
+#include "qapi/qapi-events-ui.h"
 #include "qapi/error.h"
 #include "qapi/qapi-commands-ui.h"
 #include "ui/input.h"
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 06/17] build-sys: move qmp-introspect per target
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (4 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 05/17] qapi: Generate QAPIEvent stuff into separate files Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 07/17] qapi: New module target.json Markus Armbruster
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

The following patches are going to introduce per-target #ifdef in the
schemas.

The introspection data is statically generated once, and must thus be
built per-target to reflect target-specific configuration.

Drop "do_test_visitor_in_qmp_introspect(&qmp_schema_qlit)" since the
schema is no longer in a common object. It is covered by the per-target
query-qmp-schema test instead.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 Makefile.objs                      | 2 --
 Makefile.target                    | 2 ++
 tests/test-qobject-input-visitor.c | 1 -
 3 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/Makefile.objs b/Makefile.objs
index c463899df3..70ee51742f 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -15,7 +15,6 @@ util-obj-y += $(QAPI_MODULES:%=qapi/qapi-visit-%.o)
 util-obj-y += qapi/qapi-emit-events.o
 util-obj-y += qapi/qapi-events.o
 util-obj-y += $(QAPI_MODULES:%=qapi/qapi-events-%.o)
-util-obj-y += qapi/qapi-introspect.o
 
 chardev-obj-y = chardev/
 slirp-obj-$(CONFIG_SLIRP) = slirp/
@@ -95,7 +94,6 @@ common-obj-$(CONFIG_FDT) += device_tree.o
 
 common-obj-y += qapi/qapi-commands.o
 common-obj-y += $(QAPI_MODULES:%=qapi/qapi-commands-%.o)
-common-obj-y += qapi/qapi-introspect.o
 common-obj-y += qmp.o hmp.o
 endif
 
diff --git a/Makefile.target b/Makefile.target
index 401dc1ea6f..d8af835890 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -164,6 +164,8 @@ endif
 
 GENERATED_FILES += hmp-commands.h hmp-commands-info.h
 
+obj-y += qapi/qapi-introspect.o
+
 endif # CONFIG_SOFTMMU
 
 dummy := $(call unnest-vars,,obj-y)
diff --git a/tests/test-qobject-input-visitor.c b/tests/test-qobject-input-visitor.c
index caa90b3d7e..609334adf6 100644
--- a/tests/test-qobject-input-visitor.c
+++ b/tests/test-qobject-input-visitor.c
@@ -1271,7 +1271,6 @@ static void test_visitor_in_qmp_introspect(TestInputVisitorData *data,
                                            const void *unused)
 {
     do_test_visitor_in_qmp_introspect(data, &test_qmp_schema_qlit);
-    do_test_visitor_in_qmp_introspect(data, &qmp_schema_qlit);
 }
 
 int main(int argc, char **argv)
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 07/17] qapi: New module target.json
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (5 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 06/17] build-sys: move qmp-introspect per target Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-07 11:16   ` Marc-André Lureau
  2019-02-07 14:58   ` Eric Blake
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 08/17] qapi: make rtc-reset-reinjection and SEV depend on TARGET_I386 Markus Armbruster
                   ` (9 subsequent siblings)
  16 siblings, 2 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

We can't add appropriate target-specific conditionals to misc.json,
because that would make all of misc.json unusable in
target-independent code.  To keep misc.json target-independent, we
need to split off target-dependent target.json.

This commit doesn't actually split off anything, it merely creates the
empty module.  The next few patches will move stuff from misc.json
there.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 Makefile.objs         | 20 +++++++++-----------
 Makefile.target       | 10 ++++++++++
 qapi/qapi-schema.json |  1 +
 qapi/target.json      | 13 +++++++++++++
 4 files changed, 33 insertions(+), 11 deletions(-)
 create mode 100644 qapi/target.json

diff --git a/Makefile.objs b/Makefile.objs
index 70ee51742f..5f0a7a8ca5 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -1,20 +1,19 @@
-QAPI_MODULES = block-core block char common crypto introspect job migration
-QAPI_MODULES += misc net rdma rocker run-state sockets tpm trace transaction
-QAPI_MODULES += ui
+QAPI_COMMON_MODULES = block-core block char common crypto introspect
+QAPI_COMMON_MODULES += job migration misc net rdma rocker run-state
+QAPI_COMMON_MODULES += sockets tpm trace transaction ui
+QAPI_TARGET_MODULES = target
+QAPI_MODULES = $(QAPI_COMMON_MODULES) $(QAPI_TARGET_MODULES)
 
 #######################################################################
 # Common libraries for tools and emulators
 stub-obj-y = stubs/ crypto/
 util-obj-y = util/ qobject/ qapi/
 util-obj-y += qapi/qapi-builtin-types.o
-util-obj-y += qapi/qapi-types.o
-util-obj-y += $(QAPI_MODULES:%=qapi/qapi-types-%.o)
+util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-types-%.o)
 util-obj-y += qapi/qapi-builtin-visit.o
-util-obj-y += qapi/qapi-visit.o
-util-obj-y += $(QAPI_MODULES:%=qapi/qapi-visit-%.o)
+util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-visit-%.o)
 util-obj-y += qapi/qapi-emit-events.o
-util-obj-y += qapi/qapi-events.o
-util-obj-y += $(QAPI_MODULES:%=qapi/qapi-events-%.o)
+util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-events-%.o)
 
 chardev-obj-y = chardev/
 slirp-obj-$(CONFIG_SLIRP) = slirp/
@@ -92,8 +91,7 @@ common-obj-$(CONFIG_FDT) += device_tree.o
 ######################################################################
 # qapi
 
-common-obj-y += qapi/qapi-commands.o
-common-obj-y += $(QAPI_MODULES:%=qapi/qapi-commands-%.o)
+common-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-commands-%.o)
 common-obj-y += qmp.o hmp.o
 endif
 
diff --git a/Makefile.target b/Makefile.target
index d8af835890..f908477040 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -164,6 +164,16 @@ endif
 
 GENERATED_FILES += hmp-commands.h hmp-commands-info.h
 
+# FIXME duplicates Makefile.obj's
+QAPI_TARGET_MODULES = target
+obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-types-%.o)
+obj-y += qapi/qapi-types.o
+obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-visit-%.o)
+obj-y += qapi/qapi-visit.o
+obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-events-%.o)
+obj-y += qapi/qapi-events.o
+obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-commands-%.o)
+obj-y += qapi/qapi-commands.o
 obj-y += qapi/qapi-introspect.o
 
 endif # CONFIG_SOFTMMU
diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json
index 1845aa78ff..db61bfd688 100644
--- a/qapi/qapi-schema.json
+++ b/qapi/qapi-schema.json
@@ -97,3 +97,4 @@
 { 'include': 'trace.json' }
 { 'include': 'introspect.json' }
 { 'include': 'misc.json' }
+{ 'include': 'target.json' }
diff --git a/qapi/target.json b/qapi/target.json
new file mode 100644
index 0000000000..8054926293
--- /dev/null
+++ b/qapi/target.json
@@ -0,0 +1,13 @@
+# -*- Mode: Python -*-
+#
+
+##
+# = Target-specific commands & events
+##
+
+##
+# @TARGET-TEMPORARY-DUMMY:
+# Will go away in the next commit.  Needed in this one because empty
+# modules don't generate anything, defeating this commit's purpose.
+##
+{ 'event': 'TARGET-TEMPORARY-DUMMY' }
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 08/17] qapi: make rtc-reset-reinjection and SEV depend on TARGET_I386
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (6 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 07/17] qapi: New module target.json Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 09/17] qapi: make s390 commands depend on TARGET_S390X Markus Armbruster
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Move rtc-reset-reinjection and SEV in target.json and make them
conditional on TARGET_I386.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/timer/mc146818rtc.c |   2 +-
 monitor.c              |  31 --------
 qapi/misc.json         | 166 --------------------------------------
 qapi/target.json       | 177 ++++++++++++++++++++++++++++++++++++++++-
 target/i386/sev_i386.h |   2 +-
 5 files changed, 175 insertions(+), 203 deletions(-)

diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c
index 69483152c3..bc1862b6fc 100644
--- a/hw/timer/mc146818rtc.c
+++ b/hw/timer/mc146818rtc.c
@@ -31,7 +31,7 @@
 #include "sysemu/replay.h"
 #include "hw/timer/mc146818rtc.h"
 #include "qapi/error.h"
-#include "qapi/qapi-commands-misc.h"
+#include "qapi/qapi-commands-target.h"
 #include "qapi/qapi-events-misc.h"
 #include "qapi/visitor.h"
 #include "exec/address-spaces.h"
diff --git a/monitor.c b/monitor.c
index 20d8e2e2aa..1fc48df46c 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1145,12 +1145,6 @@ static void qmp_query_qmp_schema(QDict *qdict, QObject **ret_data,
  */
 static void qmp_unregister_commands_hack(void)
 {
-#ifndef TARGET_I386
-    qmp_unregister_command(&qmp_commands, "rtc-reset-reinjection");
-    qmp_unregister_command(&qmp_commands, "query-sev");
-    qmp_unregister_command(&qmp_commands, "query-sev-launch-measure");
-    qmp_unregister_command(&qmp_commands, "query-sev-capabilities");
-#endif
 #ifndef TARGET_S390X
     qmp_unregister_command(&qmp_commands, "dump-skeys");
 #endif
@@ -4671,31 +4665,6 @@ QemuOptsList qemu_mon_opts = {
     },
 };
 
-#ifndef TARGET_I386
-void qmp_rtc_reset_reinjection(Error **errp)
-{
-    error_setg(errp, QERR_FEATURE_DISABLED, "rtc-reset-reinjection");
-}
-
-SevInfo *qmp_query_sev(Error **errp)
-{
-    error_setg(errp, QERR_FEATURE_DISABLED, "query-sev");
-    return NULL;
-}
-
-SevLaunchMeasureInfo *qmp_query_sev_launch_measure(Error **errp)
-{
-    error_setg(errp, QERR_FEATURE_DISABLED, "query-sev-launch-measure");
-    return NULL;
-}
-
-SevCapability *qmp_query_sev_capabilities(Error **errp)
-{
-    error_setg(errp, QERR_FEATURE_DISABLED, "query-sev-capabilities");
-    return NULL;
-}
-#endif
-
 #ifndef TARGET_S390X
 void qmp_dump_skeys(const char *filename, Error **errp)
 {
diff --git a/qapi/misc.json b/qapi/misc.json
index 426274ecf8..0d9682ba4c 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -3119,24 +3119,6 @@
 { 'event': 'ACPI_DEVICE_OST',
      'data': { 'info': 'ACPIOSTInfo' } }
 
-##
-# @rtc-reset-reinjection:
-#
-# This command will reset the RTC interrupt reinjection backlog.
-# Can be used if another mechanism to synchronize guest time
-# is in effect, for example QEMU guest agent's guest-set-time
-# command.
-#
-# Since: 2.1
-#
-# Example:
-#
-# -> { "execute": "rtc-reset-reinjection" }
-# <- { "return": {} }
-#
-##
-{ 'command': 'rtc-reset-reinjection' }
-
 ##
 # @RTC_CHANGE:
 #
@@ -3365,154 +3347,6 @@
 ##
 { 'command': 'query-vm-generation-id', 'returns': 'GuidInfo' }
 
-
-##
-# @SevState:
-#
-# An enumeration of SEV state information used during @query-sev.
-#
-# @uninit: The guest is uninitialized.
-#
-# @launch-update: The guest is currently being launched; plaintext data and
-#                 register state is being imported.
-#
-# @launch-secret: The guest is currently being launched; ciphertext data
-#                 is being imported.
-#
-# @running: The guest is fully launched or migrated in.
-#
-# @send-update: The guest is currently being migrated out to another machine.
-#
-# @receive-update: The guest is currently being migrated from another machine.
-#
-# Since: 2.12
-##
-{ 'enum': 'SevState',
-  'data': ['uninit', 'launch-update', 'launch-secret', 'running',
-           'send-update', 'receive-update' ] }
-
-##
-# @SevInfo:
-#
-# Information about Secure Encrypted Virtualization (SEV) support
-#
-# @enabled: true if SEV is active
-#
-# @api-major: SEV API major version
-#
-# @api-minor: SEV API minor version
-#
-# @build-id: SEV FW build id
-#
-# @policy: SEV policy value
-#
-# @state: SEV guest state
-#
-# @handle: SEV firmware handle
-#
-# Since: 2.12
-##
-{ 'struct': 'SevInfo',
-    'data': { 'enabled': 'bool',
-              'api-major': 'uint8',
-              'api-minor' : 'uint8',
-              'build-id' : 'uint8',
-              'policy' : 'uint32',
-              'state' : 'SevState',
-              'handle' : 'uint32'
-            }
-}
-
-##
-# @query-sev:
-#
-# Returns information about SEV
-#
-# Returns: @SevInfo
-#
-# Since: 2.12
-#
-# Example:
-#
-# -> { "execute": "query-sev" }
-# <- { "return": { "enabled": true, "api-major" : 0, "api-minor" : 0,
-#                  "build-id" : 0, "policy" : 0, "state" : "running",
-#                  "handle" : 1 } }
-#
-##
-{ 'command': 'query-sev', 'returns': 'SevInfo' }
-
-##
-# @SevLaunchMeasureInfo:
-#
-# SEV Guest Launch measurement information
-#
-# @data: the measurement value encoded in base64
-#
-# Since: 2.12
-#
-##
-{ 'struct': 'SevLaunchMeasureInfo', 'data': {'data': 'str'} }
-
-##
-# @query-sev-launch-measure:
-#
-# Query the SEV guest launch information.
-#
-# Returns: The @SevLaunchMeasureInfo for the guest
-#
-# Since: 2.12
-#
-# Example:
-#
-# -> { "execute": "query-sev-launch-measure" }
-# <- { "return": { "data": "4l8LXeNlSPUDlXPJG5966/8%YZ" } }
-#
-##
-{ 'command': 'query-sev-launch-measure', 'returns': 'SevLaunchMeasureInfo' }
-
-##
-# @SevCapability:
-#
-# The struct describes capability for a Secure Encrypted Virtualization
-# feature.
-#
-# @pdh:  Platform Diffie-Hellman key (base64 encoded)
-#
-# @cert-chain:  PDH certificate chain (base64 encoded)
-#
-# @cbitpos: C-bit location in page table entry
-#
-# @reduced-phys-bits: Number of physical Address bit reduction when SEV is
-#                     enabled
-#
-# Since: 2.12
-##
-{ 'struct': 'SevCapability',
-  'data': { 'pdh': 'str',
-            'cert-chain': 'str',
-            'cbitpos': 'int',
-            'reduced-phys-bits': 'int'} }
-
-##
-# @query-sev-capabilities:
-#
-# This command is used to get the SEV capabilities, and is supported on AMD
-# X86 platforms only.
-#
-# Returns: SevCapability objects.
-#
-# Since: 2.12
-#
-# Example:
-#
-# -> { "execute": "query-sev-capabilities" }
-# <- { "return": { "pdh": "8CCDD8DDD", "cert-chain": "888CCCDDDEE",
-#                  "cbitpos": 47, "reduced-phys-bits": 5}}
-#
-##
-{ 'command': 'query-sev-capabilities', 'returns': 'SevCapability' }
-
 ##
 # @set-numa-node:
 #
diff --git a/qapi/target.json b/qapi/target.json
index 8054926293..2cafd7a0be 100644
--- a/qapi/target.json
+++ b/qapi/target.json
@@ -6,8 +6,177 @@
 ##
 
 ##
-# @TARGET-TEMPORARY-DUMMY:
-# Will go away in the next commit.  Needed in this one because empty
-# modules don't generate anything, defeating this commit's purpose.
+# @rtc-reset-reinjection:
+#
+# This command will reset the RTC interrupt reinjection backlog.
+# Can be used if another mechanism to synchronize guest time
+# is in effect, for example QEMU guest agent's guest-set-time
+# command.
+#
+# Since: 2.1
+#
+# Example:
+#
+# -> { "execute": "rtc-reset-reinjection" }
+# <- { "return": {} }
+#
 ##
-{ 'event': 'TARGET-TEMPORARY-DUMMY' }
+{ 'command': 'rtc-reset-reinjection',
+  'if': 'defined(TARGET_I386)' }
+
+
+##
+# @SevState:
+#
+# An enumeration of SEV state information used during @query-sev.
+#
+# @uninit: The guest is uninitialized.
+#
+# @launch-update: The guest is currently being launched; plaintext data and
+#                 register state is being imported.
+#
+# @launch-secret: The guest is currently being launched; ciphertext data
+#                 is being imported.
+#
+# @running: The guest is fully launched or migrated in.
+#
+# @send-update: The guest is currently being migrated out to another machine.
+#
+# @receive-update: The guest is currently being migrated from another machine.
+#
+# Since: 2.12
+##
+{ 'enum': 'SevState',
+  'data': ['uninit', 'launch-update', 'launch-secret', 'running',
+           'send-update', 'receive-update' ],
+  'if': 'defined(TARGET_I386)' }
+
+##
+# @SevInfo:
+#
+# Information about Secure Encrypted Virtualization (SEV) support
+#
+# @enabled: true if SEV is active
+#
+# @api-major: SEV API major version
+#
+# @api-minor: SEV API minor version
+#
+# @build-id: SEV FW build id
+#
+# @policy: SEV policy value
+#
+# @state: SEV guest state
+#
+# @handle: SEV firmware handle
+#
+# Since: 2.12
+##
+{ 'struct': 'SevInfo',
+    'data': { 'enabled': 'bool',
+              'api-major': 'uint8',
+              'api-minor' : 'uint8',
+              'build-id' : 'uint8',
+              'policy' : 'uint32',
+              'state' : 'SevState',
+              'handle' : 'uint32'
+            },
+  'if': 'defined(TARGET_I386)'
+}
+
+##
+# @query-sev:
+#
+# Returns information about SEV
+#
+# Returns: @SevInfo
+#
+# Since: 2.12
+#
+# Example:
+#
+# -> { "execute": "query-sev" }
+# <- { "return": { "enabled": true, "api-major" : 0, "api-minor" : 0,
+#                  "build-id" : 0, "policy" : 0, "state" : "running",
+#                  "handle" : 1 } }
+#
+##
+{ 'command': 'query-sev', 'returns': 'SevInfo',
+  'if': 'defined(TARGET_I386)' }
+
+
+##
+# @SevLaunchMeasureInfo:
+#
+# SEV Guest Launch measurement information
+#
+# @data: the measurement value encoded in base64
+#
+# Since: 2.12
+#
+##
+{ 'struct': 'SevLaunchMeasureInfo', 'data': {'data': 'str'},
+  'if': 'defined(TARGET_I386)' }
+
+##
+# @query-sev-launch-measure:
+#
+# Query the SEV guest launch information.
+#
+# Returns: The @SevLaunchMeasureInfo for the guest
+#
+# Since: 2.12
+#
+# Example:
+#
+# -> { "execute": "query-sev-launch-measure" }
+# <- { "return": { "data": "4l8LXeNlSPUDlXPJG5966/8%YZ" } }
+#
+##
+{ 'command': 'query-sev-launch-measure', 'returns': 'SevLaunchMeasureInfo',
+  'if': 'defined(TARGET_I386)' }
+
+
+##
+# @SevCapability:
+#
+# The struct describes capability for a Secure Encrypted Virtualization
+# feature.
+#
+# @pdh:  Platform Diffie-Hellman key (base64 encoded)
+#
+# @cert-chain:  PDH certificate chain (base64 encoded)
+#
+# @cbitpos: C-bit location in page table entry
+#
+# @reduced-phys-bits: Number of physical Address bit reduction when SEV is
+#                     enabled
+#
+# Since: 2.12
+##
+{ 'struct': 'SevCapability',
+  'data': { 'pdh': 'str',
+            'cert-chain': 'str',
+            'cbitpos': 'int',
+            'reduced-phys-bits': 'int'},
+  'if': 'defined(TARGET_I386)' }
+
+##
+# @query-sev-capabilities:
+#
+# This command is used to get the SEV capabilities, and is supported on AMD
+# X86 platforms only.
+#
+# Returns: SevCapability objects.
+#
+# Since: 2.12
+#
+# Example:
+#
+# -> { "execute": "query-sev-capabilities" }
+# <- { "return": { "pdh": "8CCDD8DDD", "cert-chain": "888CCCDDDEE",
+#                  "cbitpos": 47, "reduced-phys-bits": 5}}
+#
+##
+{ 'command': 'query-sev-capabilities', 'returns': 'SevCapability',
+  'if': 'defined(TARGET_I386)' }
diff --git a/target/i386/sev_i386.h b/target/i386/sev_i386.h
index b8622dfb1e..c0f9373beb 100644
--- a/target/i386/sev_i386.h
+++ b/target/i386/sev_i386.h
@@ -19,7 +19,7 @@
 #include "sysemu/kvm.h"
 #include "sysemu/sev.h"
 #include "qemu/error-report.h"
-#include "qapi/qapi-commands-misc.h"
+#include "qapi/qapi-commands-target.h"
 
 #define SEV_POLICY_NODBG        0x1
 #define SEV_POLICY_NOKS         0x2
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 09/17] qapi: make s390 commands depend on TARGET_S390X
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (7 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 08/17] qapi: make rtc-reset-reinjection and SEV depend on TARGET_I386 Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 10/17] target.json: add a note about query-cpu* not being s390x-specific Markus Armbruster
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/s390x/s390-skeys.c                   |   2 +-
 include/sysemu/arch_init.h              |   7 --
 monitor.c                               |  14 ---
 qapi/misc.json                          | 137 -----------------------
 qapi/target.json                        | 142 ++++++++++++++++++++++++
 qmp.c                                   |  14 ---
 stubs/Makefile.objs                     |   2 -
 stubs/arch-query-cpu-model-baseline.c   |  13 ---
 stubs/arch-query-cpu-model-comparison.c |  13 ---
 target/s390x/cpu_models.c               |   5 +-
 10 files changed, 146 insertions(+), 203 deletions(-)
 delete mode 100644 stubs/arch-query-cpu-model-baseline.c
 delete mode 100644 stubs/arch-query-cpu-model-comparison.c

diff --git a/hw/s390x/s390-skeys.c b/hw/s390x/s390-skeys.c
index 15f7ab0e53..daac936698 100644
--- a/hw/s390x/s390-skeys.c
+++ b/hw/s390x/s390-skeys.c
@@ -14,7 +14,7 @@
 #include "hw/boards.h"
 #include "hw/s390x/storage-keys.h"
 #include "qapi/error.h"
-#include "qapi/qapi-commands-misc.h"
+#include "qapi/qapi-commands-target.h"
 #include "qapi/qmp/qdict.h"
 #include "qemu/error-report.h"
 #include "sysemu/kvm.h"
diff --git a/include/sysemu/arch_init.h b/include/sysemu/arch_init.h
index 32abdfe6a1..f0ef652b2a 100644
--- a/include/sysemu/arch_init.h
+++ b/include/sysemu/arch_init.h
@@ -36,11 +36,4 @@ CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp);
 CpuModelExpansionInfo *arch_query_cpu_model_expansion(CpuModelExpansionType type,
                                                       CpuModelInfo *mode,
                                                       Error **errp);
-CpuModelCompareInfo *arch_query_cpu_model_comparison(CpuModelInfo *modela,
-                                                     CpuModelInfo *modelb,
-                                                     Error **errp);
-CpuModelBaselineInfo *arch_query_cpu_model_baseline(CpuModelInfo *modela,
-                                                    CpuModelInfo *modelb,
-                                                    Error **errp);
-
 #endif
diff --git a/monitor.c b/monitor.c
index 1fc48df46c..45b37bc982 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1145,19 +1145,12 @@ static void qmp_query_qmp_schema(QDict *qdict, QObject **ret_data,
  */
 static void qmp_unregister_commands_hack(void)
 {
-#ifndef TARGET_S390X
-    qmp_unregister_command(&qmp_commands, "dump-skeys");
-#endif
 #ifndef TARGET_ARM
     qmp_unregister_command(&qmp_commands, "query-gic-capabilities");
 #endif
 #if !defined(TARGET_S390X) && !defined(TARGET_I386)
     qmp_unregister_command(&qmp_commands, "query-cpu-model-expansion");
 #endif
-#if !defined(TARGET_S390X)
-    qmp_unregister_command(&qmp_commands, "query-cpu-model-baseline");
-    qmp_unregister_command(&qmp_commands, "query-cpu-model-comparison");
-#endif
 #if !defined(TARGET_PPC) && !defined(TARGET_ARM) && !defined(TARGET_I386) \
     && !defined(TARGET_S390X)
     qmp_unregister_command(&qmp_commands, "query-cpu-definitions");
@@ -4665,13 +4658,6 @@ QemuOptsList qemu_mon_opts = {
     },
 };
 
-#ifndef TARGET_S390X
-void qmp_dump_skeys(const char *filename, Error **errp)
-{
-    error_setg(errp, QERR_FEATURE_DISABLED, "dump-skeys");
-}
-#endif
-
 #ifndef TARGET_ARM
 GICCapabilityList *qmp_query_gic_capabilities(Error **errp)
 {
diff --git a/qapi/misc.json b/qapi/misc.json
index 0d9682ba4c..431de64590 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -1907,27 +1907,6 @@
 { 'command': 'query-dump-guest-memory-capability',
   'returns': 'DumpGuestMemoryCapability' }
 
-##
-# @dump-skeys:
-#
-# Dump guest's storage keys
-#
-# @filename: the path to the file to dump to
-#
-# This command is only supported on s390 architecture.
-#
-# Since: 2.5
-#
-# Example:
-#
-# -> { "execute": "dump-skeys",
-#      "arguments": { "filename": "/tmp/skeys" } }
-# <- { "return": {} }
-#
-##
-{ 'command': 'dump-skeys',
-  'data': { 'filename': 'str' } }
-
 ##
 # @object-add:
 #
@@ -2294,122 +2273,6 @@
 { 'enum': 'CpuModelCompareResult',
   'data': [ 'incompatible', 'identical', 'superset', 'subset' ] }
 
-##
-# @CpuModelCompareInfo:
-#
-# The result of a CPU model comparison.
-#
-# @result: The result of the compare operation.
-# @responsible-properties: List of properties that led to the comparison result
-#                          not being identical.
-#
-# @responsible-properties is a list of QOM property names that led to
-# both CPUs not being detected as identical. For identical models, this
-# list is empty.
-# If a QOM property is read-only, that means there's no known way to make the
-# CPU models identical. If the special property name "type" is included, the
-# models are by definition not identical and cannot be made identical.
-#
-# Since: 2.8.0
-##
-{ 'struct': 'CpuModelCompareInfo',
-  'data': {'result': 'CpuModelCompareResult',
-           'responsible-properties': ['str']
-          }
-}
-
-##
-# @query-cpu-model-comparison:
-#
-# Compares two CPU models, returning how they compare in a specific
-# configuration. The results indicates how both models compare regarding
-# runnability. This result can be used by tooling to make decisions if a
-# certain CPU model will run in a certain configuration or if a compatible
-# CPU model has to be created by baselining.
-#
-# Usually, a CPU model is compared against the maximum possible CPU model
-# of a certain configuration (e.g. the "host" model for KVM). If that CPU
-# model is identical or a subset, it will run in that configuration.
-#
-# The result returned by this command may be affected by:
-#
-# * QEMU version: CPU models may look different depending on the QEMU version.
-#   (Except for CPU models reported as "static" in query-cpu-definitions.)
-# * machine-type: CPU model may look different depending on the machine-type.
-#   (Except for CPU models reported as "static" in query-cpu-definitions.)
-# * machine options (including accelerator): in some architectures, CPU models
-#   may look different depending on machine and accelerator options. (Except for
-#   CPU models reported as "static" in query-cpu-definitions.)
-# * "-cpu" arguments and global properties: arguments to the -cpu option and
-#   global properties may affect expansion of CPU models. Using
-#   query-cpu-model-expansion while using these is not advised.
-#
-# Some architectures may not support comparing CPU models. s390x supports
-# comparing CPU models.
-#
-# Returns: a CpuModelBaselineInfo. Returns an error if comparing CPU models is
-#          not supported, if a model cannot be used, if a model contains
-#          an unknown cpu definition name, unknown properties or properties
-#          with wrong types.
-#
-# Since: 2.8.0
-##
-{ 'command': 'query-cpu-model-comparison',
-  'data': { 'modela': 'CpuModelInfo', 'modelb': 'CpuModelInfo' },
-  'returns': 'CpuModelCompareInfo' }
-
-##
-# @CpuModelBaselineInfo:
-#
-# The result of a CPU model baseline.
-#
-# @model: the baselined CpuModelInfo.
-#
-# Since: 2.8.0
-##
-{ 'struct': 'CpuModelBaselineInfo',
-  'data': { 'model': 'CpuModelInfo' } }
-
-##
-# @query-cpu-model-baseline:
-#
-# Baseline two CPU models, creating a compatible third model. The created
-# model will always be a static, migration-safe CPU model (see "static"
-# CPU model expansion for details).
-#
-# This interface can be used by tooling to create a compatible CPU model out
-# two CPU models. The created CPU model will be identical to or a subset of
-# both CPU models when comparing them. Therefore, the created CPU model is
-# guaranteed to run where the given CPU models run.
-#
-# The result returned by this command may be affected by:
-#
-# * QEMU version: CPU models may look different depending on the QEMU version.
-#   (Except for CPU models reported as "static" in query-cpu-definitions.)
-# * machine-type: CPU model may look different depending on the machine-type.
-#   (Except for CPU models reported as "static" in query-cpu-definitions.)
-# * machine options (including accelerator): in some architectures, CPU models
-#   may look different depending on machine and accelerator options. (Except for
-#   CPU models reported as "static" in query-cpu-definitions.)
-# * "-cpu" arguments and global properties: arguments to the -cpu option and
-#   global properties may affect expansion of CPU models. Using
-#   query-cpu-model-expansion while using these is not advised.
-#
-# Some architectures may not support baselining CPU models. s390x supports
-# baselining CPU models.
-#
-# Returns: a CpuModelBaselineInfo. Returns an error if baselining CPU models is
-#          not supported, if a model cannot be used, if a model contains
-#          an unknown cpu definition name, unknown properties or properties
-#          with wrong types.
-#
-# Since: 2.8.0
-##
-{ 'command': 'query-cpu-model-baseline',
-  'data': { 'modela': 'CpuModelInfo',
-            'modelb': 'CpuModelInfo' },
-  'returns': 'CpuModelBaselineInfo' }
-
 ##
 # @AddfdInfo:
 #
diff --git a/qapi/target.json b/qapi/target.json
index 2cafd7a0be..17671d77c1 100644
--- a/qapi/target.json
+++ b/qapi/target.json
@@ -5,6 +5,8 @@
 # = Target-specific commands & events
 ##
 
+{ 'include': 'misc.json' }
+
 ##
 # @rtc-reset-reinjection:
 #
@@ -180,3 +182,143 @@
 ##
 { 'command': 'query-sev-capabilities', 'returns': 'SevCapability',
   'if': 'defined(TARGET_I386)' }
+
+##
+# @dump-skeys:
+#
+# Dump guest's storage keys
+#
+# @filename: the path to the file to dump to
+#
+# This command is only supported on s390 architecture.
+#
+# Since: 2.5
+#
+# Example:
+#
+# -> { "execute": "dump-skeys",
+#      "arguments": { "filename": "/tmp/skeys" } }
+# <- { "return": {} }
+#
+##
+{ 'command': 'dump-skeys',
+  'data': { 'filename': 'str' },
+  'if': 'defined(TARGET_S390X)' }
+
+##
+# @CpuModelBaselineInfo:
+#
+# The result of a CPU model baseline.
+#
+# @model: the baselined CpuModelInfo.
+#
+# Since: 2.8.0
+##
+{ 'struct': 'CpuModelBaselineInfo',
+  'data': { 'model': 'CpuModelInfo' },
+  'if': 'defined(TARGET_S390X)' }
+
+##
+# @CpuModelCompareInfo:
+#
+# The result of a CPU model comparison.
+#
+# @result: The result of the compare operation.
+# @responsible-properties: List of properties that led to the comparison result
+#                          not being identical.
+#
+# @responsible-properties is a list of QOM property names that led to
+# both CPUs not being detected as identical. For identical models, this
+# list is empty.
+# If a QOM property is read-only, that means there's no known way to make the
+# CPU models identical. If the special property name "type" is included, the
+# models are by definition not identical and cannot be made identical.
+#
+# Since: 2.8.0
+##
+{ 'struct': 'CpuModelCompareInfo',
+  'data': { 'result': 'CpuModelCompareResult',
+            'responsible-properties': ['str'] },
+  'if': 'defined(TARGET_S390X)' }
+
+##
+# @query-cpu-model-comparison:
+#
+# Compares two CPU models, returning how they compare in a specific
+# configuration. The results indicates how both models compare regarding
+# runnability. This result can be used by tooling to make decisions if a
+# certain CPU model will run in a certain configuration or if a compatible
+# CPU model has to be created by baselining.
+#
+# Usually, a CPU model is compared against the maximum possible CPU model
+# of a certain configuration (e.g. the "host" model for KVM). If that CPU
+# model is identical or a subset, it will run in that configuration.
+#
+# The result returned by this command may be affected by:
+#
+# * QEMU version: CPU models may look different depending on the QEMU version.
+#   (Except for CPU models reported as "static" in query-cpu-definitions.)
+# * machine-type: CPU model may look different depending on the machine-type.
+#   (Except for CPU models reported as "static" in query-cpu-definitions.)
+# * machine options (including accelerator): in some architectures, CPU models
+#   may look different depending on machine and accelerator options. (Except for
+#   CPU models reported as "static" in query-cpu-definitions.)
+# * "-cpu" arguments and global properties: arguments to the -cpu option and
+#   global properties may affect expansion of CPU models. Using
+#   query-cpu-model-expansion while using these is not advised.
+#
+# Some architectures may not support comparing CPU models. s390x supports
+# comparing CPU models.
+#
+# Returns: a CpuModelBaselineInfo. Returns an error if comparing CPU models is
+#          not supported, if a model cannot be used, if a model contains
+#          an unknown cpu definition name, unknown properties or properties
+#          with wrong types.
+#
+# Since: 2.8.0
+##
+{ 'command': 'query-cpu-model-comparison',
+  'data': { 'modela': 'CpuModelInfo', 'modelb': 'CpuModelInfo' },
+  'returns': 'CpuModelCompareInfo',
+  'if': 'defined(TARGET_S390X)' }
+
+##
+# @query-cpu-model-baseline:
+#
+# Baseline two CPU models, creating a compatible third model. The created
+# model will always be a static, migration-safe CPU model (see "static"
+# CPU model expansion for details).
+#
+# This interface can be used by tooling to create a compatible CPU model out
+# two CPU models. The created CPU model will be identical to or a subset of
+# both CPU models when comparing them. Therefore, the created CPU model is
+# guaranteed to run where the given CPU models run.
+#
+# The result returned by this command may be affected by:
+#
+# * QEMU version: CPU models may look different depending on the QEMU version.
+#   (Except for CPU models reported as "static" in query-cpu-definitions.)
+# * machine-type: CPU model may look different depending on the machine-type.
+#   (Except for CPU models reported as "static" in query-cpu-definitions.)
+# * machine options (including accelerator): in some architectures, CPU models
+#   may look different depending on machine and accelerator options. (Except for
+#   CPU models reported as "static" in query-cpu-definitions.)
+# * "-cpu" arguments and global properties: arguments to the -cpu option and
+#   global properties may affect expansion of CPU models. Using
+#   query-cpu-model-expansion while using these is not advised.
+#
+# Some architectures may not support baselining CPU models. s390x supports
+# baselining CPU models.
+#
+# Returns: a CpuModelBaselineInfo. Returns an error if baselining CPU models is
+#          not supported, if a model cannot be used, if a model contains
+#          an unknown cpu definition name, unknown properties or properties
+#          with wrong types.
+#
+# Since: 2.8.0
+##
+{ 'command': 'query-cpu-model-baseline',
+  'data': { 'modela': 'CpuModelInfo',
+            'modelb': 'CpuModelInfo' },
+  'returns': 'CpuModelBaselineInfo',
+  'if': 'defined(TARGET_S390X)' }
diff --git a/qmp.c b/qmp.c
index 4c819dd8cf..8a613bf7c7 100644
--- a/qmp.c
+++ b/qmp.c
@@ -617,20 +617,6 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
     return arch_query_cpu_model_expansion(type, model, errp);
 }
 
-CpuModelCompareInfo *qmp_query_cpu_model_comparison(CpuModelInfo *modela,
-                                                    CpuModelInfo *modelb,
-                                                    Error **errp)
-{
-    return arch_query_cpu_model_comparison(modela, modelb, errp);
-}
-
-CpuModelBaselineInfo *qmp_query_cpu_model_baseline(CpuModelInfo *modela,
-                                                   CpuModelInfo *modelb,
-                                                   Error **errp)
-{
-    return arch_query_cpu_model_baseline(modela, modelb, errp);
-}
-
 void qmp_add_client(const char *protocol, const char *fdname,
                     bool has_skipauth, bool skipauth, bool has_tls, bool tls,
                     Error **errp)
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index 5dd0aeeec6..48eb080bfb 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -1,7 +1,5 @@
 stub-obj-y += arch-query-cpu-def.o
 stub-obj-y += arch-query-cpu-model-expansion.o
-stub-obj-y += arch-query-cpu-model-comparison.o
-stub-obj-y += arch-query-cpu-model-baseline.o
 stub-obj-y += bdrv-next-monitor-owned.o
 stub-obj-y += blk-commit-all.o
 stub-obj-y += blockdev-close-all-bdrv-states.o
diff --git a/stubs/arch-query-cpu-model-baseline.c b/stubs/arch-query-cpu-model-baseline.c
deleted file mode 100644
index 0d066da328..0000000000
--- a/stubs/arch-query-cpu-model-baseline.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "qemu/osdep.h"
-#include "qemu-common.h"
-#include "sysemu/arch_init.h"
-#include "qapi/error.h"
-#include "qapi/qmp/qerror.h"
-
-CpuModelBaselineInfo *arch_query_cpu_model_baseline(CpuModelInfo *modela,
-                                                    CpuModelInfo *modelb,
-                                                    Error **errp)
-{
-    error_setg(errp, QERR_UNSUPPORTED);
-    return NULL;
-}
diff --git a/stubs/arch-query-cpu-model-comparison.c b/stubs/arch-query-cpu-model-comparison.c
deleted file mode 100644
index 8eb311a26c..0000000000
--- a/stubs/arch-query-cpu-model-comparison.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "qemu/osdep.h"
-#include "qemu-common.h"
-#include "sysemu/arch_init.h"
-#include "qapi/error.h"
-#include "qapi/qmp/qerror.h"
-
-CpuModelCompareInfo *arch_query_cpu_model_comparison(CpuModelInfo *modela,
-                                                     CpuModelInfo *modelb,
-                                                     Error **errp)
-{
-    error_setg(errp, QERR_UNSUPPORTED);
-    return NULL;
-}
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index 7c253ff308..b532cd8d10 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -25,6 +25,7 @@
 #include "sysemu/arch_init.h"
 #include "hw/pci/pci.h"
 #endif
+#include "qapi/qapi-commands-target.h"
 
 #define CPUDEF_INIT(_type, _gen, _ec_ga, _mha_pow, _hmfai, _name, _desc) \
     {                                                                    \
@@ -605,7 +606,7 @@ static void list_add_feat(const char *name, void *opaque)
     *last = entry;
 }
 
-CpuModelCompareInfo *arch_query_cpu_model_comparison(CpuModelInfo *infoa,
+CpuModelCompareInfo *qmp_query_cpu_model_comparison(CpuModelInfo *infoa,
                                                      CpuModelInfo *infob,
                                                      Error **errp)
 {
@@ -678,7 +679,7 @@ CpuModelCompareInfo *arch_query_cpu_model_comparison(CpuModelInfo *infoa,
     return compare_info;
 }
 
-CpuModelBaselineInfo *arch_query_cpu_model_baseline(CpuModelInfo *infoa,
+CpuModelBaselineInfo *qmp_query_cpu_model_baseline(CpuModelInfo *infoa,
                                                     CpuModelInfo *infob,
                                                     Error **errp)
 {
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 10/17] target.json: add a note about query-cpu* not being s390x-specific
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (8 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 09/17] qapi: make s390 commands depend on TARGET_S390X Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 11/17] qapi: make query-gic-capabilities depend on TARGET_ARM Markus Armbruster
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 qapi/target.json | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/qapi/target.json b/qapi/target.json
index 17671d77c1..010df35ebb 100644
--- a/qapi/target.json
+++ b/qapi/target.json
@@ -275,6 +275,9 @@
 #          an unknown cpu definition name, unknown properties or properties
 #          with wrong types.
 #
+# Note: this command isn't specific to s390x, but is only implemented
+# on this architecture currently.
+#
 # Since: 2.8.0
 ##
 { 'command': 'query-cpu-model-comparison',
@@ -315,6 +318,9 @@
 #          an unknown cpu definition name, unknown properties or properties
 #          with wrong types.
 #
+# Note: this command isn't specific to s390x, but is only implemented
+# on this architecture currently.
+#
 # Since: 2.8.0
 ##
 { 'command': 'query-cpu-model-baseline',
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 11/17] qapi: make query-gic-capabilities depend on TARGET_ARM
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (9 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 10/17] target.json: add a note about query-cpu* not being s390x-specific Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 12/17] qapi: make query-cpu-model-expansion depend on s390 or x86 Markus Armbruster
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 monitor.c            | 11 -----------
 qapi/misc.json       | 43 ------------------------------------------
 qapi/target.json     | 45 ++++++++++++++++++++++++++++++++++++++++++++
 target/arm/monitor.c |  2 +-
 4 files changed, 46 insertions(+), 55 deletions(-)

diff --git a/monitor.c b/monitor.c
index 45b37bc982..377d3d4d8d 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1145,9 +1145,6 @@ static void qmp_query_qmp_schema(QDict *qdict, QObject **ret_data,
  */
 static void qmp_unregister_commands_hack(void)
 {
-#ifndef TARGET_ARM
-    qmp_unregister_command(&qmp_commands, "query-gic-capabilities");
-#endif
 #if !defined(TARGET_S390X) && !defined(TARGET_I386)
     qmp_unregister_command(&qmp_commands, "query-cpu-model-expansion");
 #endif
@@ -4658,14 +4655,6 @@ QemuOptsList qemu_mon_opts = {
     },
 };
 
-#ifndef TARGET_ARM
-GICCapabilityList *qmp_query_gic_capabilities(Error **errp)
-{
-    error_setg(errp, QERR_FEATURE_DISABLED, "query-gic-capabilities");
-    return NULL;
-}
-#endif
-
 HotpluggableCPUList *qmp_query_hotpluggable_cpus(Error **errp)
 {
     MachineState *ms = MACHINE(qdev_get_machine());
diff --git a/qapi/misc.json b/qapi/misc.json
index 431de64590..9df45a27ca 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -3044,49 +3044,6 @@
 ##
 { 'command': 'xen-load-devices-state', 'data': {'filename': 'str'} }
 
-##
-# @GICCapability:
-#
-# The struct describes capability for a specific GIC (Generic
-# Interrupt Controller) version. These bits are not only decided by
-# QEMU/KVM software version, but also decided by the hardware that
-# the program is running upon.
-#
-# @version:  version of GIC to be described. Currently, only 2 and 3
-#            are supported.
-#
-# @emulated: whether current QEMU/hardware supports emulated GIC
-#            device in user space.
-#
-# @kernel:   whether current QEMU/hardware supports hardware
-#            accelerated GIC device in kernel.
-#
-# Since: 2.6
-##
-{ 'struct': 'GICCapability',
-  'data': { 'version': 'int',
-            'emulated': 'bool',
-            'kernel': 'bool' } }
-
-##
-# @query-gic-capabilities:
-#
-# This command is ARM-only. It will return a list of GICCapability
-# objects that describe its capability bits.
-#
-# Returns: a list of GICCapability objects.
-#
-# Since: 2.6
-#
-# Example:
-#
-# -> { "execute": "query-gic-capabilities" }
-# <- { "return": [{ "version": 2, "emulated": true, "kernel": false },
-#                 { "version": 3, "emulated": false, "kernel": true } ] }
-#
-##
-{ 'command': 'query-gic-capabilities', 'returns': ['GICCapability'] }
-
 ##
 # @CpuInstanceProperties:
 #
diff --git a/qapi/target.json b/qapi/target.json
index 010df35ebb..f4a7054921 100644
--- a/qapi/target.json
+++ b/qapi/target.json
@@ -328,3 +328,48 @@
             'modelb': 'CpuModelInfo' },
   'returns': 'CpuModelBaselineInfo',
   'if': 'defined(TARGET_S390X)' }
+
+##
+# @GICCapability:
+#
+# The struct describes capability for a specific GIC (Generic
+# Interrupt Controller) version. These bits are not only decided by
+# QEMU/KVM software version, but also decided by the hardware that
+# the program is running upon.
+#
+# @version:  version of GIC to be described. Currently, only 2 and 3
+#            are supported.
+#
+# @emulated: whether current QEMU/hardware supports emulated GIC
+#            device in user space.
+#
+# @kernel:   whether current QEMU/hardware supports hardware
+#            accelerated GIC device in kernel.
+#
+# Since: 2.6
+##
+{ 'struct': 'GICCapability',
+  'data': { 'version': 'int',
+            'emulated': 'bool',
+            'kernel': 'bool' },
+  'if': 'defined(TARGET_ARM)' }
+
+##
+# @query-gic-capabilities:
+#
+# This command is ARM-only. It will return a list of GICCapability
+# objects that describe its capability bits.
+#
+# Returns: a list of GICCapability objects.
+#
+# Since: 2.6
+#
+# Example:
+#
+# -> { "execute": "query-gic-capabilities" }
+# <- { "return": [{ "version": 2, "emulated": true, "kernel": false },
+#                 { "version": 3, "emulated": false, "kernel": true } ] }
+#
+##
+{ 'command': 'query-gic-capabilities', 'returns': ['GICCapability'],
+  'if': 'defined(TARGET_ARM)' }
diff --git a/target/arm/monitor.c b/target/arm/monitor.c
index 4cdd2676dd..41b32b94b2 100644
--- a/target/arm/monitor.c
+++ b/target/arm/monitor.c
@@ -23,7 +23,7 @@
 #include "qemu/osdep.h"
 #include "hw/boards.h"
 #include "kvm_arm.h"
-#include "qapi/qapi-commands-misc.h"
+#include "qapi/qapi-commands-target.h"
 
 static GICCapability *gic_cap_new(int version)
 {
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 12/17] qapi: make query-cpu-model-expansion depend on s390 or x86
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (10 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 11/17] qapi: make query-gic-capabilities depend on TARGET_ARM Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 13/17] qapi: make query-cpu-definitions depend on specific targets Markus Armbruster
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 include/sysemu/arch_init.h             |  3 --
 monitor.c                              |  3 --
 qapi/misc.json                         | 51 -------------------------
 qapi/target.json                       | 52 ++++++++++++++++++++++++++
 qmp.c                                  |  7 ----
 stubs/Makefile.objs                    |  1 -
 stubs/arch-query-cpu-model-expansion.c | 13 -------
 target/i386/cpu.c                      |  5 ++-
 target/s390x/cpu_models.c              |  2 +-
 9 files changed, 57 insertions(+), 80 deletions(-)
 delete mode 100644 stubs/arch-query-cpu-model-expansion.c

diff --git a/include/sysemu/arch_init.h b/include/sysemu/arch_init.h
index f0ef652b2a..2497fd3351 100644
--- a/include/sysemu/arch_init.h
+++ b/include/sysemu/arch_init.h
@@ -33,7 +33,4 @@ int kvm_available(void);
 int xen_available(void);
 
 CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp);
-CpuModelExpansionInfo *arch_query_cpu_model_expansion(CpuModelExpansionType type,
-                                                      CpuModelInfo *mode,
-                                                      Error **errp);
 #endif
diff --git a/monitor.c b/monitor.c
index 377d3d4d8d..7a228ff6ea 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1145,9 +1145,6 @@ static void qmp_query_qmp_schema(QDict *qdict, QObject **ret_data,
  */
 static void qmp_unregister_commands_hack(void)
 {
-#if !defined(TARGET_S390X) && !defined(TARGET_I386)
-    qmp_unregister_command(&qmp_commands, "query-cpu-model-expansion");
-#endif
 #if !defined(TARGET_PPC) && !defined(TARGET_ARM) && !defined(TARGET_I386) \
     && !defined(TARGET_S390X)
     qmp_unregister_command(&qmp_commands, "query-cpu-definitions");
diff --git a/qapi/misc.json b/qapi/misc.json
index 9df45a27ca..1255201267 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -2199,57 +2199,6 @@
   'data': [ 'static', 'full' ] }
 
 
-##
-# @CpuModelExpansionInfo:
-#
-# The result of a cpu model expansion.
-#
-# @model: the expanded CpuModelInfo.
-#
-# Since: 2.8.0
-##
-{ 'struct': 'CpuModelExpansionInfo',
-  'data': { 'model': 'CpuModelInfo' } }
-
-
-##
-# @query-cpu-model-expansion:
-#
-# Expands a given CPU model (or a combination of CPU model + additional options)
-# to different granularities, allowing tooling to get an understanding what a
-# specific CPU model looks like in QEMU under a certain configuration.
-#
-# This interface can be used to query the "host" CPU model.
-#
-# The data returned by this command may be affected by:
-#
-# * QEMU version: CPU models may look different depending on the QEMU version.
-#   (Except for CPU models reported as "static" in query-cpu-definitions.)
-# * machine-type: CPU model  may look different depending on the machine-type.
-#   (Except for CPU models reported as "static" in query-cpu-definitions.)
-# * machine options (including accelerator): in some architectures, CPU models
-#   may look different depending on machine and accelerator options. (Except for
-#   CPU models reported as "static" in query-cpu-definitions.)
-# * "-cpu" arguments and global properties: arguments to the -cpu option and
-#   global properties may affect expansion of CPU models. Using
-#   query-cpu-model-expansion while using these is not advised.
-#
-# Some architectures may not support all expansion types. s390x supports
-# "full" and "static".
-#
-# Returns: a CpuModelExpansionInfo. Returns an error if expanding CPU models is
-#          not supported, if the model cannot be expanded, if the model contains
-#          an unknown CPU definition name, unknown properties or properties
-#          with a wrong type. Also returns an error if an expansion type is
-#          not supported.
-#
-# Since: 2.8.0
-##
-{ 'command': 'query-cpu-model-expansion',
-  'data': { 'type': 'CpuModelExpansionType',
-            'model': 'CpuModelInfo' },
-  'returns': 'CpuModelExpansionInfo' }
-
 ##
 # @CpuModelCompareResult:
 #
diff --git a/qapi/target.json b/qapi/target.json
index f4a7054921..35653648bb 100644
--- a/qapi/target.json
+++ b/qapi/target.json
@@ -373,3 +373,55 @@
 ##
 { 'command': 'query-gic-capabilities', 'returns': ['GICCapability'],
   'if': 'defined(TARGET_ARM)' }
+
+##
+# @CpuModelExpansionInfo:
+#
+# The result of a cpu model expansion.
+#
+# @model: the expanded CpuModelInfo.
+#
+# Since: 2.8.0
+##
+{ 'struct': 'CpuModelExpansionInfo',
+  'data': { 'model': 'CpuModelInfo' },
+  'if': 'defined(TARGET_S390X) || defined(TARGET_I386)' }
+
+##
+# @query-cpu-model-expansion:
+#
+# Expands a given CPU model (or a combination of CPU model + additional options)
+# to different granularities, allowing tooling to get an understanding what a
+# specific CPU model looks like in QEMU under a certain configuration.
+#
+# This interface can be used to query the "host" CPU model.
+#
+# The data returned by this command may be affected by:
+#
+# * QEMU version: CPU models may look different depending on the QEMU version.
+#   (Except for CPU models reported as "static" in query-cpu-definitions.)
+# * machine-type: CPU model  may look different depending on the machine-type.
+#   (Except for CPU models reported as "static" in query-cpu-definitions.)
+# * machine options (including accelerator): in some architectures, CPU models
+#   may look different depending on machine and accelerator options. (Except for
+#   CPU models reported as "static" in query-cpu-definitions.)
+# * "-cpu" arguments and global properties: arguments to the -cpu option and
+#   global properties may affect expansion of CPU models. Using
+#   query-cpu-model-expansion while using these is not advised.
+#
+# Some architectures may not support all expansion types. s390x supports
+# "full" and "static".
+#
+# Returns: a CpuModelExpansionInfo. Returns an error if expanding CPU models is
+#          not supported, if the model cannot be expanded, if the model contains
+#          an unknown CPU definition name, unknown properties or properties
+#          with a wrong type. Also returns an error if an expansion type is
+#          not supported.
+#
+# Since: 2.8.0
+##
+{ 'command': 'query-cpu-model-expansion',
+  'data': { 'type': 'CpuModelExpansionType',
+            'model': 'CpuModelInfo' },
+  'returns': 'CpuModelExpansionInfo',
+  'if': 'defined(TARGET_S390X) || defined(TARGET_I386)' }
diff --git a/qmp.c b/qmp.c
index 8a613bf7c7..c81af9d23f 100644
--- a/qmp.c
+++ b/qmp.c
@@ -610,13 +610,6 @@ CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
     return arch_query_cpu_definitions(errp);
 }
 
-CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
-                                                     CpuModelInfo *model,
-                                                     Error **errp)
-{
-    return arch_query_cpu_model_expansion(type, model, errp);
-}
-
 void qmp_add_client(const char *protocol, const char *fdname,
                     bool has_skipauth, bool skipauth, bool has_tls, bool tls,
                     Error **errp)
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index 48eb080bfb..e28f443b7b 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -1,5 +1,4 @@
 stub-obj-y += arch-query-cpu-def.o
-stub-obj-y += arch-query-cpu-model-expansion.o
 stub-obj-y += bdrv-next-monitor-owned.o
 stub-obj-y += blk-commit-all.o
 stub-obj-y += blockdev-close-all-bdrv-states.o
diff --git a/stubs/arch-query-cpu-model-expansion.c b/stubs/arch-query-cpu-model-expansion.c
deleted file mode 100644
index 26273a8b10..0000000000
--- a/stubs/arch-query-cpu-model-expansion.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "qemu/osdep.h"
-#include "qemu-common.h"
-#include "sysemu/arch_init.h"
-#include "qapi/error.h"
-#include "qapi/qmp/qerror.h"
-
-CpuModelExpansionInfo *arch_query_cpu_model_expansion(CpuModelExpansionType type,
-                                                      CpuModelInfo *mode,
-                                                      Error **errp)
-{
-    error_setg(errp, QERR_UNSUPPORTED);
-    return NULL;
-}
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 7483daef58..22c8533066 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -41,6 +41,7 @@
 #include "qapi/visitor.h"
 #include "qom/qom-qobject.h"
 #include "sysemu/arch_init.h"
+#include "qapi/qapi-commands-target.h"
 
 #include "standard-headers/asm-x86/kvm_para.h"
 
@@ -3921,6 +3922,7 @@ static void x86_cpu_load_def(X86CPU *cpu, X86CPUDefinition *def, Error **errp)
 
 }
 
+#ifndef CONFIG_USER_ONLY
 /* Return a QDict containing keys for all properties that can be included
  * in static expansion of CPU models. All properties set by x86_cpu_load_def()
  * must be included in the dictionary.
@@ -4068,7 +4070,7 @@ out:
 }
 
 CpuModelExpansionInfo *
-arch_query_cpu_model_expansion(CpuModelExpansionType type,
+qmp_query_cpu_model_expansion(CpuModelExpansionType type,
                                                       CpuModelInfo *model,
                                                       Error **errp)
 {
@@ -4123,6 +4125,7 @@ out:
     }
     return ret;
 }
+#endif  /* !CONFIG_USER_ONLY */
 
 static gchar *x86_gdb_arch_name(CPUState *cs)
 {
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index b532cd8d10..cf87488bfc 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -567,7 +567,7 @@ static void cpu_info_from_model(CpuModelInfo *info, const S390CPUModel *model,
     }
 }
 
-CpuModelExpansionInfo *arch_query_cpu_model_expansion(CpuModelExpansionType type,
+CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
                                                       CpuModelInfo *model,
                                                       Error **errp)
 {
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 13/17] qapi: make query-cpu-definitions depend on specific targets
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (11 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 12/17] qapi: make query-cpu-model-expansion depend on s390 or x86 Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 14/17] qapi: remove qmp_unregister_command() Markus Armbruster
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

It depends on TARGET_PPC || TARGET_ARM || TARGET_I386 || TARGET_S390X.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 include/sysemu/arch_init.h      |  1 -
 monitor.c                       | 22 ------------
 qapi/misc.json                  | 58 ------------------------------
 qapi/target.json                | 64 +++++++++++++++++++++++++++++++++
 qmp.c                           |  5 ---
 stubs/Makefile.objs             |  1 -
 stubs/arch-query-cpu-def.c      | 11 ------
 target/arm/helper.c             |  3 +-
 target/i386/cpu.c               |  2 +-
 target/ppc/translate_init.inc.c |  3 +-
 target/s390x/cpu_models.c       |  2 +-
 11 files changed, 70 insertions(+), 102 deletions(-)
 delete mode 100644 stubs/arch-query-cpu-def.c

diff --git a/include/sysemu/arch_init.h b/include/sysemu/arch_init.h
index 2497fd3351..10cbafe970 100644
--- a/include/sysemu/arch_init.h
+++ b/include/sysemu/arch_init.h
@@ -32,5 +32,4 @@ extern const uint32_t arch_type;
 int kvm_available(void);
 int xen_available(void);
 
-CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp);
 #endif
diff --git a/monitor.c b/monitor.c
index 7a228ff6ea..eeec289aae 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1131,26 +1131,6 @@ static void qmp_query_qmp_schema(QDict *qdict, QObject **ret_data,
     *ret_data = qobject_from_qlit(&qmp_schema_qlit);
 }
 
-/*
- * We used to define commands in qmp-commands.hx in addition to the
- * QAPI schema.  This permitted defining some of them only in certain
- * configurations.  query-commands has always reflected that (good,
- * because it lets QMP clients figure out what's actually available),
- * while query-qmp-schema never did (not so good).  This function is a
- * hack to keep the configuration-specific commands defined exactly as
- * before, even though qmp-commands.hx is gone.
- *
- * FIXME Educate the QAPI schema on configuration-specific commands,
- * and drop this hack.
- */
-static void qmp_unregister_commands_hack(void)
-{
-#if !defined(TARGET_PPC) && !defined(TARGET_ARM) && !defined(TARGET_I386) \
-    && !defined(TARGET_S390X)
-    qmp_unregister_command(&qmp_commands, "query-cpu-definitions");
-#endif
-}
-
 static void monitor_init_qmp_commands(void)
 {
     /*
@@ -1169,8 +1149,6 @@ static void monitor_init_qmp_commands(void)
     qmp_register_command(&qmp_commands, "netdev_add", qmp_netdev_add,
                          QCO_NO_OPTIONS);
 
-    qmp_unregister_commands_hack();
-
     QTAILQ_INIT(&qmp_cap_negotiation_commands);
     qmp_register_command(&qmp_cap_negotiation_commands, "qmp_capabilities",
                          qmp_marshal_qmp_capabilities, QCO_ALLOW_PRECONFIG);
diff --git a/qapi/misc.json b/qapi/misc.json
index 1255201267..82f9147353 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -2057,54 +2057,6 @@
 ##
 { 'command': 'query-current-machine', 'returns': 'CurrentMachineParams' }
 
-##
-# @CpuDefinitionInfo:
-#
-# Virtual CPU definition.
-#
-# @name: the name of the CPU definition
-#
-# @migration-safe: whether a CPU definition can be safely used for
-#                  migration in combination with a QEMU compatibility machine
-#                  when migrating between different QEMU versions and between
-#                  hosts with different sets of (hardware or software)
-#                  capabilities. If not provided, information is not available
-#                  and callers should not assume the CPU definition to be
-#                  migration-safe. (since 2.8)
-#
-# @static: whether a CPU definition is static and will not change depending on
-#          QEMU version, machine type, machine options and accelerator options.
-#          A static model is always migration-safe. (since 2.8)
-#
-# @unavailable-features: List of properties that prevent
-#                        the CPU model from running in the current
-#                        host. (since 2.8)
-# @typename: Type name that can be used as argument to @device-list-properties,
-#            to introspect properties configurable using -cpu or -global.
-#            (since 2.9)
-#
-# @unavailable-features is a list of QOM property names that
-# represent CPU model attributes that prevent the CPU from running.
-# If the QOM property is read-only, that means there's no known
-# way to make the CPU model run in the current host. Implementations
-# that choose not to provide specific information return the
-# property name "type".
-# If the property is read-write, it means that it MAY be possible
-# to run the CPU model in the current host if that property is
-# changed. Management software can use it as hints to suggest or
-# choose an alternative for the user, or just to generate meaningful
-# error messages explaining why the CPU model can't be used.
-# If @unavailable-features is an empty list, the CPU model is
-# runnable using the current host and machine-type.
-# If @unavailable-features is not present, runnability
-# information for the CPU is not available.
-#
-# Since: 1.2.0
-##
-{ 'struct': 'CpuDefinitionInfo',
-  'data': { 'name': 'str', '*migration-safe': 'bool', 'static': 'bool',
-            '*unavailable-features': [ 'str' ], 'typename': 'str' } }
-
 ##
 # @MemoryInfo:
 #
@@ -2137,16 +2089,6 @@
 ##
 { 'command': 'query-memory-size-summary', 'returns': 'MemoryInfo' }
 
-##
-# @query-cpu-definitions:
-#
-# Return a list of supported virtual CPU definitions
-#
-# Returns: a list of CpuDefInfo
-#
-# Since: 1.2.0
-##
-{ 'command': 'query-cpu-definitions', 'returns': ['CpuDefinitionInfo'] }
 
 ##
 # @CpuModelInfo:
diff --git a/qapi/target.json b/qapi/target.json
index 35653648bb..5c41a0aee7 100644
--- a/qapi/target.json
+++ b/qapi/target.json
@@ -425,3 +425,67 @@
             'model': 'CpuModelInfo' },
   'returns': 'CpuModelExpansionInfo',
   'if': 'defined(TARGET_S390X) || defined(TARGET_I386)' }
+
+##
+# @CpuDefinitionInfo:
+#
+# Virtual CPU definition.
+#
+# @name: the name of the CPU definition
+#
+# @migration-safe: whether a CPU definition can be safely used for
+#                  migration in combination with a QEMU compatibility machine
+#                  when migrating between different QEMU versions and between
+#                  hosts with different sets of (hardware or software)
+#                  capabilities. If not provided, information is not available
+#                  and callers should not assume the CPU definition to be
+#                  migration-safe. (since 2.8)
+#
+# @static: whether a CPU definition is static and will not change depending on
+#          QEMU version, machine type, machine options and accelerator options.
+#          A static model is always migration-safe. (since 2.8)
+#
+# @unavailable-features: List of properties that prevent
+#                        the CPU model from running in the current
+#                        host. (since 2.8)
+# @typename: Type name that can be used as argument to @device-list-properties,
+#            to introspect properties configurable using -cpu or -global.
+#            (since 2.9)
+#
+# @unavailable-features is a list of QOM property names that
+# represent CPU model attributes that prevent the CPU from running.
+# If the QOM property is read-only, that means there's no known
+# way to make the CPU model run in the current host. Implementations
+# that choose not to provide specific information return the
+# property name "type".
+# If the property is read-write, it means that it MAY be possible
+# to run the CPU model in the current host if that property is
+# changed. Management software can use it as hints to suggest or
+# choose an alternative for the user, or just to generate meaningful
+# error messages explaining why the CPU model can't be used.
+# If @unavailable-features is an empty list, the CPU model is
+# runnable using the current host and machine-type.
+# If @unavailable-features is not present, runnability
+# information for the CPU is not available.
+#
+# Since: 1.2.0
+##
+{ 'struct': 'CpuDefinitionInfo',
+  'data': { 'name': 'str',
+            '*migration-safe': 'bool',
+            'static': 'bool',
+            '*unavailable-features': [ 'str' ],
+            'typename': 'str' },
+  'if': 'defined(TARGET_PPC) || defined(TARGET_ARM) || defined(TARGET_I386) || defined(TARGET_S390X)' }
+
+##
+# @query-cpu-definitions:
+#
+# Return a list of supported virtual CPU definitions
+#
+# Returns: a list of CpuDefInfo
+#
+# Since: 1.2.0
+##
+{ 'command': 'query-cpu-definitions', 'returns': ['CpuDefinitionInfo'],
+  'if': 'defined(TARGET_PPC) || defined(TARGET_ARM) || defined(TARGET_I386) || defined(TARGET_S390X)' }
diff --git a/qmp.c b/qmp.c
index c81af9d23f..b92d62cd5f 100644
--- a/qmp.c
+++ b/qmp.c
@@ -605,11 +605,6 @@ ObjectPropertyInfoList *qmp_qom_list_properties(const char *typename,
     return prop_list;
 }
 
-CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
-{
-    return arch_query_cpu_definitions(errp);
-}
-
 void qmp_add_client(const char *protocol, const char *fdname,
                     bool has_skipauth, bool skipauth, bool has_tls, bool tls,
                     Error **errp)
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index e28f443b7b..4eb2947371 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -1,4 +1,3 @@
-stub-obj-y += arch-query-cpu-def.o
 stub-obj-y += bdrv-next-monitor-owned.o
 stub-obj-y += blk-commit-all.o
 stub-obj-y += blockdev-close-all-bdrv-states.o
diff --git a/stubs/arch-query-cpu-def.c b/stubs/arch-query-cpu-def.c
deleted file mode 100644
index d436f95314..0000000000
--- a/stubs/arch-query-cpu-def.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "qemu/osdep.h"
-#include "qemu-common.h"
-#include "sysemu/arch_init.h"
-#include "qapi/error.h"
-#include "qapi/qmp/qerror.h"
-
-CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp)
-{
-    error_setg(errp, QERR_UNSUPPORTED);
-    return NULL;
-}
diff --git a/target/arm/helper.c b/target/arm/helper.c
index d070879894..f05495d771 100644
--- a/target/arm/helper.c
+++ b/target/arm/helper.c
@@ -19,6 +19,7 @@
 #include "sysemu/kvm.h"
 #include "fpu/softfloat.h"
 #include "qemu/range.h"
+#include "qapi/qapi-commands-target.h"
 
 #define ARM_CPU_FREQ 1000000000 /* FIXME: 1 GHz, should be configurable */
 
@@ -6656,7 +6657,7 @@ static void arm_cpu_add_definition(gpointer data, gpointer user_data)
     *cpu_list = entry;
 }
 
-CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp)
+CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
 {
     CpuDefinitionInfoList *cpu_list = NULL;
     GSList *list;
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 22c8533066..92f9a898c4 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -3794,7 +3794,7 @@ static void x86_cpu_definition_entry(gpointer data, gpointer user_data)
     *cpu_list = entry;
 }
 
-CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp)
+CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
 {
     CpuDefinitionInfoList *cpu_list = NULL;
     GSList *list = get_sorted_cpu_model_list();
diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c
index 59e0b86762..f393a408ac 100644
--- a/target/ppc/translate_init.inc.c
+++ b/target/ppc/translate_init.inc.c
@@ -38,6 +38,7 @@
 #include "qemu/cutils.h"
 #include "disas/capstone.h"
 #include "fpu/softfloat.h"
+#include "qapi/qapi-commands-target.h"
 
 //#define PPC_DUMP_CPU
 //#define PPC_DEBUG_SPR
@@ -10201,7 +10202,7 @@ static void ppc_cpu_defs_entry(gpointer data, gpointer user_data)
     *first = entry;
 }
 
-CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp)
+CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
 {
     CpuDefinitionInfoList *cpu_list = NULL;
     GSList *list;
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index cf87488bfc..5ef34abbf1 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -433,7 +433,7 @@ static void create_cpu_model_list(ObjectClass *klass, void *opaque)
     *cpu_list = entry;
 }
 
-CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp)
+CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
 {
     struct CpuDefinitionInfoListData list_data = {
         .list = NULL,
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 14/17] qapi: remove qmp_unregister_command()
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (12 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 13/17] qapi: make query-cpu-definitions depend on specific targets Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 15/17] Revert "qapi-events: add 'if' condition to implicit event enum" Markus Armbruster
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

This command is no longer needed, the schema has compile-time
configuration conditions.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 include/qapi/qmp/dispatch.h | 1 -
 qapi/qmp-registry.c         | 8 --------
 2 files changed, 9 deletions(-)

diff --git a/include/qapi/qmp/dispatch.h b/include/qapi/qmp/dispatch.h
index 68a528a9aa..9aa426a398 100644
--- a/include/qapi/qmp/dispatch.h
+++ b/include/qapi/qmp/dispatch.h
@@ -39,7 +39,6 @@ typedef QTAILQ_HEAD(QmpCommandList, QmpCommand) QmpCommandList;
 
 void qmp_register_command(QmpCommandList *cmds, const char *name,
                           QmpCommandFunc *fn, QmpCommandOptions options);
-void qmp_unregister_command(QmpCommandList *cmds, const char *name);
 QmpCommand *qmp_find_command(QmpCommandList *cmds, const char *name);
 void qmp_disable_command(QmpCommandList *cmds, const char *name);
 void qmp_enable_command(QmpCommandList *cmds, const char *name);
diff --git a/qapi/qmp-registry.c b/qapi/qmp-registry.c
index 5af484cd9a..ca00f74795 100644
--- a/qapi/qmp-registry.c
+++ b/qapi/qmp-registry.c
@@ -27,14 +27,6 @@ void qmp_register_command(QmpCommandList *cmds, const char *name,
     QTAILQ_INSERT_TAIL(cmds, cmd, node);
 }
 
-void qmp_unregister_command(QmpCommandList *cmds, const char *name)
-{
-    QmpCommand *cmd = qmp_find_command(cmds, name);
-
-    QTAILQ_REMOVE(cmds, cmd, node);
-    g_free(cmd);
-}
-
 QmpCommand *qmp_find_command(QmpCommandList *cmds, const char *name)
 {
     QmpCommand *cmd;
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 15/17] Revert "qapi-events: add 'if' condition to implicit event enum"
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (13 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 14/17] qapi: remove qmp_unregister_command() Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:30   ` Marc-André Lureau
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema Markus Armbruster
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 17/17] qapi: move RTC_CHANGE to the target schema Markus Armbruster
  16 siblings, 1 reply; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

This reverts commit 7bd263490590ee6fcf34ecb6203437e22f6e5a9c.

The commit applied the events' conditions to the members of enum
QAPIEvent.  Awkward, because it renders QAPIEvent unusable in
target-independent code as soon as we make an event target-dependent.
Reverting this has the following effects:

* ui/vnc.c can remain target independent.

* monitor_qapi_event_conf[] doesn't have to muck around with #ifdef.

* query-events again doesn't reflect conditionals.  I'm going to
  deprecate it in favor of query-qmp-schema.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 scripts/qapi/events.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
index 28bbc3745d..2067660be4 100644
--- a/scripts/qapi/events.py
+++ b/scripts/qapi/events.py
@@ -193,7 +193,9 @@ void %(event_emit)s(%(event_enum)s event, QDict *qdict);
             self._genc.add(gen_event_send(name, arg_type, boxed,
                                           self._event_enum_name,
                                           self._event_emit_name))
-        self._event_enum_members.append(QAPISchemaMember(name, ifcond))
+        # Note: we generate the enum member regardless of @ifcond, to
+        # keep the enumeration usable in target-independent code.
+        self._event_enum_members.append(QAPISchemaMember(name))
 
 
 def gen_events(schema, output_dir, prefix):
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (14 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 15/17] Revert "qapi-events: add 'if' condition to implicit event enum" Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:42   ` Eric Blake
  2019-02-07 11:19   ` [Qemu-devel] " Marc-André Lureau
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 17/17] qapi: move RTC_CHANGE to the target schema Markus Armbruster
  16 siblings, 2 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

query-events doesn't reflect compile-time configuration.  Instead of
fixing that, deprecate the command in favor of query-qmp-schema.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 monitor.c            | 5 +++++
 qapi/misc.json       | 7 +++++--
 qemu-deprecated.texi | 5 +++++
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/monitor.c b/monitor.c
index eeec289aae..9f27621ed1 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1099,6 +1099,11 @@ CommandInfoList *qmp_query_commands(Error **errp)
 
 EventInfoList *qmp_query_events(Error **errp)
 {
+    /*
+     * TODO This deprecated command is the only user of
+     * QAPIEvent_str() and QAPIEvent_lookup[].  When the command goes,
+     * they should go, too.
+     */
     EventInfoList *info, *ev_list = NULL;
     QAPIEvent e;
 
diff --git a/qapi/misc.json b/qapi/misc.json
index 82f9147353..98f59f828a 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -318,12 +318,15 @@
 ##
 # @query-events:
 #
-# Return a list of supported QMP events by this server
+# Return information on QMP events.
 #
-# Returns: A list of @EventInfo for all supported events
+# Returns: A list of @EventInfo.
 #
 # Since: 1.2.0
 #
+# Note: This command is deprecated, because its output doesn't reflect
+# compile-time configuration.  Use query-qmp-schema instead.
+#
 # Example:
 #
 # -> { "execute": "query-events" }
diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi
index 9cc20b365c..3288e102d6 100644
--- a/qemu-deprecated.texi
+++ b/qemu-deprecated.texi
@@ -103,6 +103,11 @@ Use ``device_add'' for hotplugging vCPUs instead of ``cpu-add''.  See
 documentation of ``query-hotpluggable-cpus'' for additional
 details.
 
+@subsection query-events (since 4.0)
+
+The ``query-events'' command has been superseded by the more powerful
+and accurate ``query-qmp-schema'' command.
+
 @section Human Monitor Protocol (HMP) commands
 
 @subsection The hub_id parameter of 'hostfwd_add' / 'hostfwd_remove' (since 3.1)
-- 
2.17.2

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

* [Qemu-devel] [PATCH v3 17/17] qapi: move RTC_CHANGE to the target schema
  2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
                   ` (15 preceding siblings ...)
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema Markus Armbruster
@ 2019-02-06 18:17 ` Markus Armbruster
  2019-02-06 18:40   ` Eric Blake
  16 siblings, 1 reply; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 18:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

A few targets don't emit RTC_CHANGE, we could restrict the event to
the tagets that do emit it.

Note: There is a lot more of events & commands that we could restrict
to capable targets, with the cost of some additional complexity, but
the benefit of added correctness and better introspection.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/ppc/spapr_rtc.c     |  2 +-
 hw/timer/mc146818rtc.c |  2 +-
 qapi/misc.json         | 23 -----------------------
 qapi/target.json       | 23 +++++++++++++++++++++++
 4 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/hw/ppc/spapr_rtc.c b/hw/ppc/spapr_rtc.c
index cd049f389d..eb95a7077d 100644
--- a/hw/ppc/spapr_rtc.c
+++ b/hw/ppc/spapr_rtc.c
@@ -31,7 +31,7 @@
 #include "sysemu/sysemu.h"
 #include "hw/ppc/spapr.h"
 #include "qapi/error.h"
-#include "qapi/qapi-events-misc.h"
+#include "qapi/qapi-events-target.h"
 #include "qemu/cutils.h"
 
 void spapr_rtc_read(sPAPRRTCState *rtc, struct tm *tm, uint32_t *ns)
diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c
index bc1862b6fc..513f105e62 100644
--- a/hw/timer/mc146818rtc.c
+++ b/hw/timer/mc146818rtc.c
@@ -32,7 +32,7 @@
 #include "hw/timer/mc146818rtc.h"
 #include "qapi/error.h"
 #include "qapi/qapi-commands-target.h"
-#include "qapi/qapi-events-misc.h"
+#include "qapi/qapi-events-target.h"
 #include "qapi/visitor.h"
 #include "exec/address-spaces.h"
 
diff --git a/qapi/misc.json b/qapi/misc.json
index 98f59f828a..8b3ca4fdd3 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -2876,29 +2876,6 @@
 { 'event': 'ACPI_DEVICE_OST',
      'data': { 'info': 'ACPIOSTInfo' } }
 
-##
-# @RTC_CHANGE:
-#
-# Emitted when the guest changes the RTC time.
-#
-# @offset: offset between base RTC clock (as specified by -rtc base), and
-#          new RTC clock value. Note that value will be different depending
-#          on clock chosen to drive RTC (specified by -rtc clock).
-#
-# Note: This event is rate-limited.
-#
-# Since: 0.13.0
-#
-# Example:
-#
-# <-   { "event": "RTC_CHANGE",
-#        "data": { "offset": 78 },
-#        "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
-#
-##
-{ 'event': 'RTC_CHANGE',
-  'data': { 'offset': 'int' } }
-
 ##
 # @ReplayMode:
 #
diff --git a/qapi/target.json b/qapi/target.json
index 5c41a0aee7..da7b4be51e 100644
--- a/qapi/target.json
+++ b/qapi/target.json
@@ -7,6 +7,29 @@
 
 { 'include': 'misc.json' }
 
+##
+# @RTC_CHANGE:
+#
+# Emitted when the guest changes the RTC time.
+#
+# @offset: offset between base RTC clock (as specified by -rtc base), and
+#          new RTC clock value
+#
+# Note: This event is rate-limited.
+#
+# Since: 0.13.0
+#
+# Example:
+#
+# <-   { "event": "RTC_CHANGE",
+#        "data": { "offset": 78 },
+#        "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
+#
+##
+{ 'event': 'RTC_CHANGE',
+  'data': { 'offset': 'int' },
+  'if': 'defined(TARGET_ALPHA) || defined(TARGET_ARM) || defined(TARGET_HPPA) || defined(TARGET_I386) || defined(TARGET_MIPS) || defined(TARGET_MIPS64) || defined(TARGET_MOXIE) || defined(TARGET_PPC) || defined(TARGET_PPC64) || defined(TARGET_S390X) || defined(TARGET_SH4) || defined(TARGET_SPARC)' }
+
 ##
 # @rtc-reset-reinjection:
 #
-- 
2.17.2

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

* Re: [Qemu-devel] [PATCH v3 02/17] qapi: Fix up documentation for recent commit a95291007b2
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 02/17] qapi: Fix up documentation for recent commit a95291007b2 Markus Armbruster
@ 2019-02-06 18:19   ` Marc-André Lureau
  0 siblings, 0 replies; 36+ messages in thread
From: Marc-André Lureau @ 2019-02-06 18:19 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: QEMU

On Wed, Feb 6, 2019 at 7:18 PM Markus Armbruster <armbru@redhat.com> wrote:
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

> ---
>  docs/devel/qapi-code-gen.txt | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
> index b91bde647c..c9ba8ddb2e 100644
> --- a/docs/devel/qapi-code-gen.txt
> +++ b/docs/devel/qapi-code-gen.txt
> @@ -1410,6 +1410,8 @@ Example:
>
>      extern const QEnumLookup example_QAPIEvent_lookup;
>
> +    void example_qapi_event_emit(example_QAPIEvent event, QDict *qdict);
> +
>      #endif /* EXAMPLE_QAPI_EVENTS_H */
>      $ cat qapi-generated/example-qapi-events.c
>  [Uninteresting stuff omitted...]
> --
> 2.17.2
>
>


-- 
Marc-André Lureau

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

* Re: [Qemu-devel] [PATCH v3 01/17] qapi: Belatedly document modular code generation
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 01/17] qapi: Belatedly document modular code generation Markus Armbruster
@ 2019-02-06 18:26   ` Marc-André Lureau
  0 siblings, 0 replies; 36+ messages in thread
From: Marc-André Lureau @ 2019-02-06 18:26 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel

On Wed, Feb 6, 2019 at 7:17 PM Markus Armbruster <armbru@redhat.com> wrote:
>
> We generate code for built-ins and sub-modules into separate files
> since commit cdb6610ae42 and 252dc3105fc (v2.12.0).  Both commits
> neglected to update documentation.  Do that now.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

> ---
>  docs/devel/qapi-code-gen.txt | 38 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
>
> diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
> index 87183d3a09..b91bde647c 100644
> --- a/docs/devel/qapi-code-gen.txt
> +++ b/docs/devel/qapi-code-gen.txt
> @@ -1113,6 +1113,19 @@ Example:
>
>  [Uninteresting stuff omitted...]
>
> +For a modular QAPI schema (see section Include directives), code for
> +each sub-module SUBDIR/SUBMODULE.json is actually generated into
> +
> +SUBDIR/$(prefix)qapi-types-SUBMODULE.h
> +SUBDIR/$(prefix)qapi-types-SUBMODULE.c
> +
> +If qapi-gen.py is run with option --builtins, additional files are
> +created:
> +
> +qapi-builtin-types.h - C types corresponding to built-in types
> +
> +qapi-builtin-types.c - Cleanup functions for the above C types
> +
>  === Code generated for visiting QAPI types ===
>
>  These are the visitor functions used to walk through and convert
> @@ -1244,6 +1257,19 @@ Example:
>
>  [Uninteresting stuff omitted...]
>
> +For a modular QAPI schema (see section Include directives), code for
> +each sub-module SUBDIR/SUBMODULE.json is actually generated into
> +
> +SUBDIR/$(prefix)qapi-visit-SUBMODULE.h
> +SUBDIR/$(prefix)qapi-visit-SUBMODULE.c
> +
> +If qapi-gen.py is run with option --builtins, additional files are
> +created:
> +
> +qapi-builtin-visit.h - Visitor functions for built-in types
> +
> +qapi-builtin-visit.c - Declarations for these visitor functions
> +
>  === Code generated for commands ===
>
>  These are the marshaling/dispatch functions for the commands defined
> @@ -1342,6 +1368,12 @@ Example:
>
>  [Uninteresting stuff omitted...]
>
> +For a modular QAPI schema (see section Include directives), code for
> +each sub-module SUBDIR/SUBMODULE.json is actually generated into
> +
> +SUBDIR/$(prefix)qapi-commands-SUBMODULE.h
> +SUBDIR/$(prefix)qapi-commands-SUBMODULE.c
> +
>  === Code generated for events ===
>
>  This is the code related to events defined in the schema, providing
> @@ -1402,6 +1434,12 @@ Example:
>
>  [Uninteresting stuff omitted...]
>
> +For a modular QAPI schema (see section Include directives), code for
> +each sub-module SUBDIR/SUBMODULE.json is actually generated into
> +
> +SUBDIR/$(prefix)qapi-events-SUBMODULE.h
> +SUBDIR/$(prefix)qapi-events-SUBMODULE.c
> +
>  === Code generated for introspection ===
>
>  The following files are created:
> --
> 2.17.2
>

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

* Re: [Qemu-devel] [PATCH v3 15/17] Revert "qapi-events: add 'if' condition to implicit event enum"
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 15/17] Revert "qapi-events: add 'if' condition to implicit event enum" Markus Armbruster
@ 2019-02-06 18:30   ` Marc-André Lureau
  2019-02-06 20:08     ` Markus Armbruster
  0 siblings, 1 reply; 36+ messages in thread
From: Marc-André Lureau @ 2019-02-06 18:30 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel

Hi

On Wed, Feb 6, 2019 at 7:17 PM Markus Armbruster <armbru@redhat.com> wrote:
>
> This reverts commit 7bd263490590ee6fcf34ecb6203437e22f6e5a9c.
>
> The commit applied the events' conditions to the members of enum
> QAPIEvent.  Awkward, because it renders QAPIEvent unusable in
> target-independent code as soon as we make an event target-dependent.

Well, my solution didn't have this problem iirc. You could mention
that by having target-specific event enums, we could solve this.
It might be worth a FIXME too.

> Reverting this has the following effects:
>
> * ui/vnc.c can remain target independent.
>
> * monitor_qapi_event_conf[] doesn't have to muck around with #ifdef.
>
> * query-events again doesn't reflect conditionals.  I'm going to
>   deprecate it in favor of query-qmp-schema.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

But that's ok for now:
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

> ---
>  scripts/qapi/events.py | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
> index 28bbc3745d..2067660be4 100644
> --- a/scripts/qapi/events.py
> +++ b/scripts/qapi/events.py
> @@ -193,7 +193,9 @@ void %(event_emit)s(%(event_enum)s event, QDict *qdict);
>              self._genc.add(gen_event_send(name, arg_type, boxed,
>                                            self._event_enum_name,
>                                            self._event_emit_name))
> -        self._event_enum_members.append(QAPISchemaMember(name, ifcond))
> +        # Note: we generate the enum member regardless of @ifcond, to
> +        # keep the enumeration usable in target-independent code.
> +        self._event_enum_members.append(QAPISchemaMember(name))
>
>
>  def gen_events(schema, output_dir, prefix):
> --
> 2.17.2
>

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

* Re: [Qemu-devel] [PATCH v3 17/17] qapi: move RTC_CHANGE to the target schema
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 17/17] qapi: move RTC_CHANGE to the target schema Markus Armbruster
@ 2019-02-06 18:40   ` Eric Blake
  2019-02-06 20:09     ` Markus Armbruster
  0 siblings, 1 reply; 36+ messages in thread
From: Eric Blake @ 2019-02-06 18:40 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel; +Cc: marcandre.lureau

[-- Attachment #1: Type: text/plain, Size: 802 bytes --]

On 2/6/19 12:17 PM, Markus Armbruster wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> A few targets don't emit RTC_CHANGE, we could restrict the event to
> the tagets that do emit it.

s/tagets/targets/

> 
> Note: There is a lot more of events & commands that we could restrict

s/is a lot more of/are a lot more/

> to capable targets, with the cost of some additional complexity, but
> the benefit of added correctness and better introspection.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Markus Armbruster <armbru@redhat.com>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema Markus Armbruster
@ 2019-02-06 18:42   ` Eric Blake
  2019-02-07 12:29     ` [Qemu-devel] [libvirt] " Peter Krempa
  2019-02-07 11:19   ` [Qemu-devel] " Marc-André Lureau
  1 sibling, 1 reply; 36+ messages in thread
From: Eric Blake @ 2019-02-06 18:42 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel; +Cc: marcandre.lureau, libvirt-list

[-- Attachment #1: Type: text/plain, Size: 2562 bytes --]

Adding libvirt in cc

On 2/6/19 12:17 PM, Markus Armbruster wrote:
> query-events doesn't reflect compile-time configuration.  Instead of
> fixing that, deprecate the command in favor of query-qmp-schema.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  monitor.c            | 5 +++++
>  qapi/misc.json       | 7 +++++--
>  qemu-deprecated.texi | 5 +++++
>  3 files changed, 15 insertions(+), 2 deletions(-)

Libvirt uses query-events; we'll need to patch libvirt to start relying
on query-qmp-schema before this deprecation cycle can complete (although
I'm in favor of making the change).

> 
> diff --git a/monitor.c b/monitor.c
> index eeec289aae..9f27621ed1 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -1099,6 +1099,11 @@ CommandInfoList *qmp_query_commands(Error **errp)
>  
>  EventInfoList *qmp_query_events(Error **errp)
>  {
> +    /*
> +     * TODO This deprecated command is the only user of
> +     * QAPIEvent_str() and QAPIEvent_lookup[].  When the command goes,
> +     * they should go, too.
> +     */
>      EventInfoList *info, *ev_list = NULL;
>      QAPIEvent e;
>  
> diff --git a/qapi/misc.json b/qapi/misc.json
> index 82f9147353..98f59f828a 100644
> --- a/qapi/misc.json
> +++ b/qapi/misc.json
> @@ -318,12 +318,15 @@
>  ##
>  # @query-events:
>  #
> -# Return a list of supported QMP events by this server
> +# Return information on QMP events.
>  #
> -# Returns: A list of @EventInfo for all supported events
> +# Returns: A list of @EventInfo.
>  #
>  # Since: 1.2.0
>  #
> +# Note: This command is deprecated, because its output doesn't reflect
> +# compile-time configuration.  Use query-qmp-schema instead.
> +#
>  # Example:
>  #
>  # -> { "execute": "query-events" }
> diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi
> index 9cc20b365c..3288e102d6 100644
> --- a/qemu-deprecated.texi
> +++ b/qemu-deprecated.texi
> @@ -103,6 +103,11 @@ Use ``device_add'' for hotplugging vCPUs instead of ``cpu-add''.  See
>  documentation of ``query-hotpluggable-cpus'' for additional
>  details.
>  
> +@subsection query-events (since 4.0)
> +
> +The ``query-events'' command has been superseded by the more powerful
> +and accurate ``query-qmp-schema'' command.
> +
>  @section Human Monitor Protocol (HMP) commands
>  
>  @subsection The hub_id parameter of 'hostfwd_add' / 'hostfwd_remove' (since 3.1)
> 

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 15/17] Revert "qapi-events: add 'if' condition to implicit event enum"
  2019-02-06 18:30   ` Marc-André Lureau
@ 2019-02-06 20:08     ` Markus Armbruster
  0 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 20:08 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel

Marc-André Lureau <marcandre.lureau@redhat.com> writes:

> Hi
>
> On Wed, Feb 6, 2019 at 7:17 PM Markus Armbruster <armbru@redhat.com> wrote:
>>
>> This reverts commit 7bd263490590ee6fcf34ecb6203437e22f6e5a9c.
>>
>> The commit applied the events' conditions to the members of enum
>> QAPIEvent.  Awkward, because it renders QAPIEvent unusable in
>> target-independent code as soon as we make an event target-dependent.
>
> Well, my solution didn't have this problem iirc. You could mention
> that by having target-specific event enums, we could solve this.

What about appending:

    Another option would be to split target-dependent parts off enum
    QAPIEvent into a target-dependent enum.  Doesn't seem worthwhile right
    now.

> It might be worth a FIXME too.

Well, the only thing that's broken is query-events, and I propose to
delete it instead of fixing it.

>> Reverting this has the following effects:
>>
>> * ui/vnc.c can remain target independent.
>>
>> * monitor_qapi_event_conf[] doesn't have to muck around with #ifdef.
>>
>> * query-events again doesn't reflect conditionals.  I'm going to
>>   deprecate it in favor of query-qmp-schema.
>>
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>
> But that's ok for now:
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Thanks!

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

* Re: [Qemu-devel] [PATCH v3 17/17] qapi: move RTC_CHANGE to the target schema
  2019-02-06 18:40   ` Eric Blake
@ 2019-02-06 20:09     ` Markus Armbruster
  0 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-06 20:09 UTC (permalink / raw)
  To: Eric Blake; +Cc: qemu-devel, marcandre.lureau

Eric Blake <eblake@redhat.com> writes:

> On 2/6/19 12:17 PM, Markus Armbruster wrote:
>> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>> 
>> A few targets don't emit RTC_CHANGE, we could restrict the event to
>> the tagets that do emit it.
>
> s/tagets/targets/
>
>> 
>> Note: There is a lot more of events & commands that we could restrict
>
> s/is a lot more of/are a lot more/
>
>> to capable targets, with the cost of some additional complexity, but
>> the benefit of added correctness and better introspection.
>> 
>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>> Reviewed-by: Markus Armbruster <armbru@redhat.com>
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---

Will fix, thanks!

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

* Re: [Qemu-devel] [PATCH v3 03/17] qapi: Clean up modular built-in code generation a bit
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 03/17] qapi: Clean up modular built-in code generation a bit Markus Armbruster
@ 2019-02-07 11:15   ` Marc-André Lureau
  2019-02-07 12:46     ` Markus Armbruster
  0 siblings, 1 reply; 36+ messages in thread
From: Marc-André Lureau @ 2019-02-07 11:15 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel

Hi

On Wed, Feb 6, 2019 at 7:17 PM Markus Armbruster <armbru@redhat.com> wrote:
>
> We neglect to call .visit_module() for the special module we use for
> built-ins.  Harmless, but clean it up anyway.  The
> tests/qapi-schema/*.out now show the built-in module as 'module None'.
>
> Subclasses of QAPISchemaModularCVisitor need to ._add_module() this
> special module to enable code generation for built-ins.  When this
> hasn't been done, QAPISchemaModularCVisitor.visit_module() does
> nothing for the special module.  That looks like built-ins could
> accidentally be generated into the wrong module when a subclass
> neglects to call ._add_module().  Can't happen, because built-ins are
> all visited before any other module.  But that's non-obvious.  Switch
> off code generation explicitly.
>
> Split QAPISchemaModularCVisitor._add_module() into ._add_user_module()
> and ._add_system_module(), for clarity.

That's in next patch.

>
> Rename QAPISchemaModularCVisitor._begin_module() to
> ._begin_user_module().
>
> New QAPISchemaModularCVisitor._is_builtin_module(), for clarity.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


> ---
>  scripts/qapi/commands.py                 |  2 +-
>  scripts/qapi/common.py                   | 24 ++++++++++++++++++------
>  scripts/qapi/events.py                   |  2 +-
>  scripts/qapi/types.py                    |  2 +-
>  scripts/qapi/visit.py                    |  2 +-
>  tests/qapi-schema/comments.out           |  1 +
>  tests/qapi-schema/doc-bad-section.out    |  1 +
>  tests/qapi-schema/doc-good.out           |  1 +
>  tests/qapi-schema/empty.out              |  1 +
>  tests/qapi-schema/event-case.out         |  1 +
>  tests/qapi-schema/ident-with-escape.out  |  1 +
>  tests/qapi-schema/include-relpath.out    |  1 +
>  tests/qapi-schema/include-repetition.out |  1 +
>  tests/qapi-schema/include-simple.out     |  1 +
>  tests/qapi-schema/indented-expr.out      |  1 +
>  tests/qapi-schema/qapi-schema-test.out   |  1 +
>  16 files changed, 33 insertions(+), 10 deletions(-)
>
> diff --git a/scripts/qapi/commands.py b/scripts/qapi/commands.py
> index 0f3c991918..ebf488953d 100644
> --- a/scripts/qapi/commands.py
> +++ b/scripts/qapi/commands.py
> @@ -242,7 +242,7 @@ class QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor):
>          self._regy = QAPIGenCCode()
>          self._visited_ret_types = {}
>
> -    def _begin_module(self, name):
> +    def _begin_user_module(self, name):
>          self._visited_ret_types[self._genc] = set()
>          commands = self._module_basename('qapi-commands', name)
>          types = self._module_basename('qapi-types', name)
> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
> index c89edc0cb0..0e3ec598a4 100644
> --- a/scripts/qapi/common.py
> +++ b/scripts/qapi/common.py
> @@ -1868,6 +1868,7 @@ class QAPISchema(object):
>      def visit(self, visitor):
>          visitor.visit_begin(self)
>          module = None
> +        visitor.visit_module(module)
>          for entity in self._entity_list:
>              if visitor.visit_needed(entity):
>                  if entity.module != module:
> @@ -2321,9 +2322,15 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
>          self._what = what
>          self._blurb = blurb
>          self._pydoc = pydoc
> +        self._genc = None
> +        self._genh = None
>          self._module = {}
>          self._main_module = None
>
> +    @staticmethod
> +    def _is_builtin_module(name):
> +        return not name
> +
>      def _module_basename(self, what, name):
>          if name is None:
>              return re.sub(r'-', '-builtin-', what)
> @@ -2334,7 +2341,7 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
>          return basename + '-' + os.path.splitext(os.path.basename(name))[0]
>
>      def _add_module(self, name, blurb):
> -        if self._main_module is None and name is not None:
> +        if self._main_module is None and not self._is_builtin_module(name):
>              self._main_module = name
>          genc = QAPIGenC(blurb, self._pydoc)
>          genh = QAPIGenH(blurb, self._pydoc)
> @@ -2346,22 +2353,27 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
>
>      def write(self, output_dir, opt_builtins=False):
>          for name in self._module:
> -            if name is None and not opt_builtins:
> +            if self._is_builtin_module(name) and not opt_builtins:
>                  continue
>              basename = self._module_basename(self._what, name)
>              (genc, genh) = self._module[name]
>              genc.write(output_dir, basename + '.c')
>              genh.write(output_dir, basename + '.h')
>
> -    def _begin_module(self, name):
> +    def _begin_user_module(self, name):
>          pass
>
>      def visit_module(self, name):
>          if name in self._module:
>              self._set_module(name)
> -            return
> -        self._add_module(name, self._blurb)
> -        self._begin_module(name)
> +        elif self._is_builtin_module(name):
> +            # The built-in module has not been created.  No code may
> +            # be generated.
> +            self._genc = None
> +            self._genh = None
> +        else:
> +            self._add_module(name, self._blurb)
> +            self._begin_user_module(name)
>
>      def visit_include(self, name, info):
>          basename = self._module_basename(self._what, name)
> diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
> index d86a2d2b3e..6f39cf8196 100644
> --- a/scripts/qapi/events.py
> +++ b/scripts/qapi/events.py
> @@ -142,7 +142,7 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
>          self._event_enum_members = []
>          self._event_emit_name = c_name(prefix + 'qapi_event_emit')
>
> -    def _begin_module(self, name):
> +    def _begin_user_module(self, name):
>          types = self._module_basename('qapi-types', name)
>          visit = self._module_basename('qapi-visit', name)
>          self._genc.add(mcgen('''
> diff --git a/scripts/qapi/types.py b/scripts/qapi/types.py
> index 62d4cf9f95..9fa510f7df 100644
> --- a/scripts/qapi/types.py
> +++ b/scripts/qapi/types.py
> @@ -194,7 +194,7 @@ class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor):
>  #include "qapi/util.h"
>  '''))
>
> -    def _begin_module(self, name):
> +    def _begin_user_module(self, name):
>          types = self._module_basename('qapi-types', name)
>          visit = self._module_basename('qapi-visit', name)
>          self._genc.preamble_add(mcgen('''
> diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py
> index 82eab72b21..ca86009398 100644
> --- a/scripts/qapi/visit.py
> +++ b/scripts/qapi/visit.py
> @@ -298,7 +298,7 @@ class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor):
>  ''',
>                                        prefix=prefix))
>
> -    def _begin_module(self, name):
> +    def _begin_user_module(self, name):
>          types = self._module_basename('qapi-types', name)
>          visit = self._module_basename('qapi-visit', name)
>          self._genc.preamble_add(mcgen('''
> diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out
> index d1abc4b5a1..273f0f54e1 100644
> --- a/tests/qapi-schema/comments.out
> +++ b/tests/qapi-schema/comments.out
> @@ -1,3 +1,4 @@
> +module None
>  object q_empty
>  enum QType
>      prefix QTYPE
> diff --git a/tests/qapi-schema/doc-bad-section.out b/tests/qapi-schema/doc-bad-section.out
> index db8014eed0..367e2a1c3e 100644
> --- a/tests/qapi-schema/doc-bad-section.out
> +++ b/tests/qapi-schema/doc-bad-section.out
> @@ -1,3 +1,4 @@
> +module None
>  object q_empty
>  enum QType
>      prefix QTYPE
> diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out
> index 21bf345ff0..d3bca343eb 100644
> --- a/tests/qapi-schema/doc-good.out
> +++ b/tests/qapi-schema/doc-good.out
> @@ -1,3 +1,4 @@
> +module None
>  object q_empty
>  enum QType
>      prefix QTYPE
> diff --git a/tests/qapi-schema/empty.out b/tests/qapi-schema/empty.out
> index 5483cb7bc6..5b53d00702 100644
> --- a/tests/qapi-schema/empty.out
> +++ b/tests/qapi-schema/empty.out
> @@ -1,3 +1,4 @@
> +module None
>  object q_empty
>  enum QType
>      prefix QTYPE
> diff --git a/tests/qapi-schema/event-case.out b/tests/qapi-schema/event-case.out
> index f69d4ffe4e..ec8a1406e4 100644
> --- a/tests/qapi-schema/event-case.out
> +++ b/tests/qapi-schema/event-case.out
> @@ -1,3 +1,4 @@
> +module None
>  object q_empty
>  enum QType
>      prefix QTYPE
> diff --git a/tests/qapi-schema/ident-with-escape.out b/tests/qapi-schema/ident-with-escape.out
> index 7f891f7e90..39754eba8c 100644
> --- a/tests/qapi-schema/ident-with-escape.out
> +++ b/tests/qapi-schema/ident-with-escape.out
> @@ -1,3 +1,4 @@
> +module None
>  object q_empty
>  enum QType
>      prefix QTYPE
> diff --git a/tests/qapi-schema/include-relpath.out b/tests/qapi-schema/include-relpath.out
> index 783ccfc855..cf8636b78f 100644
> --- a/tests/qapi-schema/include-relpath.out
> +++ b/tests/qapi-schema/include-relpath.out
> @@ -1,3 +1,4 @@
> +module None
>  object q_empty
>  enum QType
>      prefix QTYPE
> diff --git a/tests/qapi-schema/include-repetition.out b/tests/qapi-schema/include-repetition.out
> index d45977ee56..5423983239 100644
> --- a/tests/qapi-schema/include-repetition.out
> +++ b/tests/qapi-schema/include-repetition.out
> @@ -1,3 +1,4 @@
> +module None
>  object q_empty
>  enum QType
>      prefix QTYPE
> diff --git a/tests/qapi-schema/include-simple.out b/tests/qapi-schema/include-simple.out
> index 1afe20802a..061f81e509 100644
> --- a/tests/qapi-schema/include-simple.out
> +++ b/tests/qapi-schema/include-simple.out
> @@ -1,3 +1,4 @@
> +module None
>  object q_empty
>  enum QType
>      prefix QTYPE
> diff --git a/tests/qapi-schema/indented-expr.out b/tests/qapi-schema/indented-expr.out
> index c0cf3243f3..bffdf6756d 100644
> --- a/tests/qapi-schema/indented-expr.out
> +++ b/tests/qapi-schema/indented-expr.out
> @@ -1,3 +1,4 @@
> +module None
>  object q_empty
>  enum QType
>      prefix QTYPE
> diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qapi-schema-test.out
> index 9464101d26..d8aec17115 100644
> --- a/tests/qapi-schema/qapi-schema-test.out
> +++ b/tests/qapi-schema/qapi-schema-test.out
> @@ -1,3 +1,4 @@
> +module None
>  object q_empty
>  enum QType
>      prefix QTYPE
> --
> 2.17.2
>

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

* Re: [Qemu-devel] [PATCH v3 05/17] qapi: Generate QAPIEvent stuff into separate files
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 05/17] qapi: Generate QAPIEvent stuff into separate files Markus Armbruster
@ 2019-02-07 11:16   ` Marc-André Lureau
  0 siblings, 0 replies; 36+ messages in thread
From: Marc-André Lureau @ 2019-02-07 11:16 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel

On Wed, Feb 6, 2019 at 7:17 PM Markus Armbruster <armbru@redhat.com> wrote:
>
> Having to include qapi-events.h just for QAPIEvent is suboptimal, but
> quite tolerable now.  It'll become problematic when we have events
> conditional on the target, because then qapi-events.h won't be usable
> from target-independent code anymore.  Avoid that by generating it
> into separate files.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


> ---
>  .gitignore                   |  1 +
>  Makefile                     |  1 +
>  Makefile.objs                |  1 +
>  docs/devel/qapi-code-gen.txt | 48 ++++++++++++++++++++++++------------
>  monitor.c                    |  2 +-
>  scripts/qapi/events.py       | 32 +++++++++++++++---------
>  stubs/monitor.c              |  2 +-
>  tests/test-qmp-event.c       |  1 +
>  ui/vnc.c                     |  3 ++-
>  9 files changed, 61 insertions(+), 30 deletions(-)
>
> diff --git a/.gitignore b/.gitignore
> index 0430257313..6d66daf713 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -32,6 +32,7 @@
>  /qapi/qapi-builtin-visit.[ch]
>  /qapi/qapi-commands-*.[ch]
>  /qapi/qapi-commands.[ch]
> +/qapi/qapi-emit-events.[ch]
>  /qapi/qapi-events-*.[ch]
>  /qapi/qapi-events.[ch]
>  /qapi/qapi-introspect.[ch]
> diff --git a/Makefile b/Makefile
> index 1278a3eb52..cd13e26c88 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -101,6 +101,7 @@ GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-visit-%.c)
>  GENERATED_QAPI_FILES += qapi/qapi-commands.h qapi/qapi-commands.c
>  GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-commands-%.h)
>  GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-commands-%.c)
> +GENERATED_QAPI_FILES += qapi/qapi-emit-events.h qapi/qapi-emit-events.c
>  GENERATED_QAPI_FILES += qapi/qapi-events.h qapi/qapi-events.c
>  GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-events-%.h)
>  GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-events-%.c)
> diff --git a/Makefile.objs b/Makefile.objs
> index 67a054b08a..c463899df3 100644
> --- a/Makefile.objs
> +++ b/Makefile.objs
> @@ -12,6 +12,7 @@ util-obj-y += $(QAPI_MODULES:%=qapi/qapi-types-%.o)
>  util-obj-y += qapi/qapi-builtin-visit.o
>  util-obj-y += qapi/qapi-visit.o
>  util-obj-y += $(QAPI_MODULES:%=qapi/qapi-visit-%.o)
> +util-obj-y += qapi/qapi-emit-events.o
>  util-obj-y += qapi/qapi-events.o
>  util-obj-y += $(QAPI_MODULES:%=qapi/qapi-events-%.o)
>  util-obj-y += qapi/qapi-introspect.o
> diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
> index c9ba8ddb2e..b517b0cfbf 100644
> --- a/docs/devel/qapi-code-gen.txt
> +++ b/docs/devel/qapi-code-gen.txt
> @@ -1381,11 +1381,15 @@ qapi_event_send_EVENT().
>
>  The following files are created:
>
> -$(prefix)qapi-events.h - Function prototypes for each event type, plus an
> -                        enumeration of all event names
> +$(prefix)qapi-events.h - Function prototypes for each event type
>
>  $(prefix)qapi-events.c - Implementation of functions to send an event
>
> +$(prefix)qapi-emit-events.h - Enumeration of all event names, and
> +                              common event code declarations
> +
> +$(prefix)qapi-emit-events.c - Common event code definitions
> +
>  Example:
>
>      $ cat qapi-generated/example-qapi-events.h
> @@ -1397,9 +1401,32 @@ Example:
>      #include "qapi/util.h"
>      #include "example-qapi-types.h"
>
> -
>      void qapi_event_send_my_event(void);
>
> +    #endif /* EXAMPLE_QAPI_EVENTS_H */
> +    $ cat qapi-generated/example-qapi-events.c
> +[Uninteresting stuff omitted...]
> +
> +    void qapi_event_send_my_event(void)
> +    {
> +        QDict *qmp;
> +
> +        qmp = qmp_event_build_dict("MY_EVENT");
> +
> +        example_qapi_event_emit(EXAMPLE_QAPI_EVENT_MY_EVENT, qmp);
> +
> +        qobject_unref(qmp);
> +    }
> +
> +[Uninteresting stuff omitted...]
> +    $ cat qapi-generated/example-qapi-emit-events.h
> +[Uninteresting stuff omitted...]
> +
> +    #ifndef EXAMPLE_QAPI_EMIT_EVENTS_H
> +    #define EXAMPLE_QAPI_EMIT_EVENTS_H
> +
> +    #include "qapi/util.h"
> +
>      typedef enum example_QAPIEvent {
>          EXAMPLE_QAPI_EVENT_MY_EVENT,
>          EXAMPLE_QAPI_EVENT__MAX,
> @@ -1412,21 +1439,10 @@ Example:
>
>      void example_qapi_event_emit(example_QAPIEvent event, QDict *qdict);
>
> -    #endif /* EXAMPLE_QAPI_EVENTS_H */
> -    $ cat qapi-generated/example-qapi-events.c
> +    #endif /* EXAMPLE_QAPI_EMIT_EVENTS_H */
> +    $ cat qapi-generated/example-qapi-emit-events.c
>  [Uninteresting stuff omitted...]
>
> -    void qapi_event_send_my_event(void)
> -    {
> -        QDict *qmp;
> -
> -        qmp = qmp_event_build_dict("MY_EVENT");
> -
> -        example_qapi_event_emit(EXAMPLE_QAPI_EVENT_MY_EVENT, qmp);
> -
> -        qobject_unref(qmp);
> -    }
> -
>      const QEnumLookup example_QAPIEvent_lookup = {
>          .array = (const char *const[]) {
>              [EXAMPLE_QAPI_EVENT_MY_EVENT] = "MY_EVENT",
> diff --git a/monitor.c b/monitor.c
> index c09fa63940..20d8e2e2aa 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -75,7 +75,7 @@
>  #include "qemu/thread.h"
>  #include "block/qapi.h"
>  #include "qapi/qapi-commands.h"
> -#include "qapi/qapi-events.h"
> +#include "qapi/qapi-emit-events.h"
>  #include "qapi/error.h"
>  #include "qapi/qmp-event.h"
>  #include "qapi/qapi-introspect.h"
> diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
> index 6f39cf8196..28bbc3745d 100644
> --- a/scripts/qapi/events.py
> +++ b/scripts/qapi/events.py
> @@ -143,12 +143,14 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
>          self._event_emit_name = c_name(prefix + 'qapi_event_emit')
>
>      def _begin_user_module(self, name):
> +        events = self._module_basename('qapi-events', name)
>          types = self._module_basename('qapi-types', name)
>          visit = self._module_basename('qapi-visit', name)
>          self._genc.add(mcgen('''
>  #include "qemu/osdep.h"
>  #include "qemu-common.h"
> -#include "%(prefix)sqapi-events.h"
> +#include "%(prefix)sqapi-emit-events.h"
> +#include "%(events)s.h"
>  #include "%(visit)s.h"
>  #include "qapi/error.h"
>  #include "qapi/qmp/qdict.h"
> @@ -156,26 +158,34 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
>  #include "qapi/qmp-event.h"
>
>  ''',
> -                             visit=visit, prefix=self._prefix))
> +                             events=events, visit=visit,
> +                             prefix=self._prefix))
>          self._genh.add(mcgen('''
>  #include "qapi/util.h"
>  #include "%(types)s.h"
> -
>  ''',
>                               types=types))
>
>      def visit_end(self):
> -        (genc, genh) = self._module[self._main_module]
> -        genh.add(gen_enum(self._event_enum_name,
> -                          self._event_enum_members))
> -        genc.add(gen_enum_lookup(self._event_enum_name,
> -                                 self._event_enum_members))
> -        genh.add(mcgen('''
> +        self._add_system_module('emit', ' * QAPI Events emission')
> +        self._genc.preamble_add(mcgen('''
> +#include "qemu/osdep.h"
> +#include "%(prefix)sqapi-emit-events.h"
> +''',
> +                                      prefix=self._prefix))
> +        self._genh.preamble_add(mcgen('''
> +#include "qapi/util.h"
> +'''))
> +        self._genh.add(gen_enum(self._event_enum_name,
> +                                self._event_enum_members))
> +        self._genc.add(gen_enum_lookup(self._event_enum_name,
> +                                       self._event_enum_members))
> +        self._genh.add(mcgen('''
>
>  void %(event_emit)s(%(event_enum)s event, QDict *qdict);
>  ''',
> -                       event_emit=self._event_emit_name,
> -                       event_enum=self._event_enum_name))
> +                             event_emit=self._event_emit_name,
> +                             event_enum=self._event_enum_name))
>
>      def visit_event(self, name, info, ifcond, arg_type, boxed):
>          with ifcontext(ifcond, self._genh, self._genc):
> diff --git a/stubs/monitor.c b/stubs/monitor.c
> index 32bd7012c3..b57fe6c32f 100644
> --- a/stubs/monitor.c
> +++ b/stubs/monitor.c
> @@ -1,6 +1,6 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> -#include "qapi/qapi-events.h"
> +#include "qapi/qapi-emit-events.h"
>  #include "qemu-common.h"
>  #include "monitor/monitor.h"
>
> diff --git a/tests/test-qmp-event.c b/tests/test-qmp-event.c
> index bf900f14f4..eee7e08ab6 100644
> --- a/tests/test-qmp-event.c
> +++ b/tests/test-qmp-event.c
> @@ -21,6 +21,7 @@
>  #include "qapi/qmp/qstring.h"
>  #include "qapi/qmp-event.h"
>  #include "test-qapi-events.h"
> +#include "test-qapi-emit-events.h"
>
>  typedef struct TestEventData {
>      QDict *expect;
> diff --git a/ui/vnc.c b/ui/vnc.c
> index 6002d09407..284ea824d0 100644
> --- a/ui/vnc.c
> +++ b/ui/vnc.c
> @@ -35,7 +35,8 @@
>  #include "qemu/timer.h"
>  #include "qemu/acl.h"
>  #include "qemu/config-file.h"
> -#include "qapi/qapi-events.h"
> +#include "qapi/qapi-emit-events.h"
> +#include "qapi/qapi-events-ui.h"
>  #include "qapi/error.h"
>  #include "qapi/qapi-commands-ui.h"
>  #include "ui/input.h"
> --
> 2.17.2
>

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

* Re: [Qemu-devel] [PATCH v3 07/17] qapi: New module target.json
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 07/17] qapi: New module target.json Markus Armbruster
@ 2019-02-07 11:16   ` Marc-André Lureau
  2019-02-07 14:58   ` Eric Blake
  1 sibling, 0 replies; 36+ messages in thread
From: Marc-André Lureau @ 2019-02-07 11:16 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel

On Wed, Feb 6, 2019 at 7:17 PM Markus Armbruster <armbru@redhat.com> wrote:
>
> We can't add appropriate target-specific conditionals to misc.json,
> because that would make all of misc.json unusable in
> target-independent code.  To keep misc.json target-independent, we
> need to split off target-dependent target.json.
>
> This commit doesn't actually split off anything, it merely creates the
> empty module.  The next few patches will move stuff from misc.json
> there.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


> ---
>  Makefile.objs         | 20 +++++++++-----------
>  Makefile.target       | 10 ++++++++++
>  qapi/qapi-schema.json |  1 +
>  qapi/target.json      | 13 +++++++++++++
>  4 files changed, 33 insertions(+), 11 deletions(-)
>  create mode 100644 qapi/target.json
>
> diff --git a/Makefile.objs b/Makefile.objs
> index 70ee51742f..5f0a7a8ca5 100644
> --- a/Makefile.objs
> +++ b/Makefile.objs
> @@ -1,20 +1,19 @@
> -QAPI_MODULES = block-core block char common crypto introspect job migration
> -QAPI_MODULES += misc net rdma rocker run-state sockets tpm trace transaction
> -QAPI_MODULES += ui
> +QAPI_COMMON_MODULES = block-core block char common crypto introspect
> +QAPI_COMMON_MODULES += job migration misc net rdma rocker run-state
> +QAPI_COMMON_MODULES += sockets tpm trace transaction ui
> +QAPI_TARGET_MODULES = target
> +QAPI_MODULES = $(QAPI_COMMON_MODULES) $(QAPI_TARGET_MODULES)
>
>  #######################################################################
>  # Common libraries for tools and emulators
>  stub-obj-y = stubs/ crypto/
>  util-obj-y = util/ qobject/ qapi/
>  util-obj-y += qapi/qapi-builtin-types.o
> -util-obj-y += qapi/qapi-types.o
> -util-obj-y += $(QAPI_MODULES:%=qapi/qapi-types-%.o)
> +util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-types-%.o)
>  util-obj-y += qapi/qapi-builtin-visit.o
> -util-obj-y += qapi/qapi-visit.o
> -util-obj-y += $(QAPI_MODULES:%=qapi/qapi-visit-%.o)
> +util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-visit-%.o)
>  util-obj-y += qapi/qapi-emit-events.o
> -util-obj-y += qapi/qapi-events.o
> -util-obj-y += $(QAPI_MODULES:%=qapi/qapi-events-%.o)
> +util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-events-%.o)
>
>  chardev-obj-y = chardev/
>  slirp-obj-$(CONFIG_SLIRP) = slirp/
> @@ -92,8 +91,7 @@ common-obj-$(CONFIG_FDT) += device_tree.o
>  ######################################################################
>  # qapi
>
> -common-obj-y += qapi/qapi-commands.o
> -common-obj-y += $(QAPI_MODULES:%=qapi/qapi-commands-%.o)
> +common-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-commands-%.o)
>  common-obj-y += qmp.o hmp.o
>  endif
>
> diff --git a/Makefile.target b/Makefile.target
> index d8af835890..f908477040 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -164,6 +164,16 @@ endif
>
>  GENERATED_FILES += hmp-commands.h hmp-commands-info.h
>
> +# FIXME duplicates Makefile.obj's
> +QAPI_TARGET_MODULES = target
> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-types-%.o)
> +obj-y += qapi/qapi-types.o
> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-visit-%.o)
> +obj-y += qapi/qapi-visit.o
> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-events-%.o)
> +obj-y += qapi/qapi-events.o
> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-commands-%.o)
> +obj-y += qapi/qapi-commands.o
>  obj-y += qapi/qapi-introspect.o
>
>  endif # CONFIG_SOFTMMU
> diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json
> index 1845aa78ff..db61bfd688 100644
> --- a/qapi/qapi-schema.json
> +++ b/qapi/qapi-schema.json
> @@ -97,3 +97,4 @@
>  { 'include': 'trace.json' }
>  { 'include': 'introspect.json' }
>  { 'include': 'misc.json' }
> +{ 'include': 'target.json' }
> diff --git a/qapi/target.json b/qapi/target.json
> new file mode 100644
> index 0000000000..8054926293
> --- /dev/null
> +++ b/qapi/target.json
> @@ -0,0 +1,13 @@
> +# -*- Mode: Python -*-
> +#
> +
> +##
> +# = Target-specific commands & events
> +##
> +
> +##
> +# @TARGET-TEMPORARY-DUMMY:
> +# Will go away in the next commit.  Needed in this one because empty
> +# modules don't generate anything, defeating this commit's purpose.
> +##
> +{ 'event': 'TARGET-TEMPORARY-DUMMY' }
> --
> 2.17.2
>

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

* Re: [Qemu-devel] [PATCH v3 04/17] qapi: Prepare for system modules other than 'builtin'
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 04/17] qapi: Prepare for system modules other than 'builtin' Markus Armbruster
@ 2019-02-07 11:16   ` Marc-André Lureau
  0 siblings, 0 replies; 36+ messages in thread
From: Marc-André Lureau @ 2019-02-07 11:16 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel

On Wed, Feb 6, 2019 at 7:17 PM Markus Armbruster <armbru@redhat.com> wrote:
>
> The next commit wants to generate qapi-emit-events.{c.h}.  To support
> that, extend QAPISchemaModularCVisitor to support additional "system
> modules", i.e. modules that don't correspond to a (user-defined) QAPI
> schema module.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


> ---
>  scripts/qapi/common.py | 35 +++++++++++++++++++++++++----------
>  scripts/qapi/types.py  |  2 +-
>  scripts/qapi/visit.py  |  2 +-
>  3 files changed, 27 insertions(+), 12 deletions(-)
>
> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
> index 0e3ec598a4..c327ae5036 100644
> --- a/scripts/qapi/common.py
> +++ b/scripts/qapi/common.py
> @@ -2327,27 +2327,42 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
>          self._module = {}
>          self._main_module = None
>
> +    @staticmethod
> +    def _is_user_module(name):
> +        return name and not name.startswith('./')
> +
>      @staticmethod
>      def _is_builtin_module(name):
>          return not name
>
>      def _module_basename(self, what, name):
> -        if name is None:
> -            return re.sub(r'-', '-builtin-', what)
> -        basename = os.path.join(os.path.dirname(name),
> -                                self._prefix + what)
> -        if name == self._main_module:
> -            return basename
> -        return basename + '-' + os.path.splitext(os.path.basename(name))[0]
> +        ret = '' if self._is_builtin_module(name) else self._prefix
> +        if self._is_user_module(name):
> +            dirname, basename = os.path.split(name)
> +            ret += what
> +            if name != self._main_module:
> +                ret += '-' + os.path.splitext(basename)[0]
> +            ret = os.path.join(dirname, ret)
> +        else:
> +            name = name[2:] if name else 'builtin'
> +            ret += re.sub(r'-', '-' + name + '-', what)
> +        return ret
>
>      def _add_module(self, name, blurb):
> -        if self._main_module is None and not self._is_builtin_module(name):
> -            self._main_module = name
>          genc = QAPIGenC(blurb, self._pydoc)
>          genh = QAPIGenH(blurb, self._pydoc)
>          self._module[name] = (genc, genh)
>          self._set_module(name)
>
> +    def _add_user_module(self, name, blurb):
> +        assert self._is_user_module(name)
> +        if self._main_module is None:
> +            self._main_module = name
> +        self._add_module(name, blurb)
> +
> +    def _add_system_module(self, name, blurb):
> +        self._add_module(name and './' + name, blurb)
> +
>      def _set_module(self, name):
>          self._genc, self._genh = self._module[name]
>
> @@ -2372,7 +2387,7 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
>              self._genc = None
>              self._genh = None
>          else:
> -            self._add_module(name, self._blurb)
> +            self._add_user_module(name, self._blurb)
>              self._begin_user_module(name)
>
>      def visit_include(self, name, info):
> diff --git a/scripts/qapi/types.py b/scripts/qapi/types.py
> index 9fa510f7df..2bd6fcd44f 100644
> --- a/scripts/qapi/types.py
> +++ b/scripts/qapi/types.py
> @@ -183,7 +183,7 @@ class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor):
>          QAPISchemaModularCVisitor.__init__(
>              self, prefix, 'qapi-types', ' * Schema-defined QAPI types',
>              __doc__)
> -        self._add_module(None, ' * Built-in QAPI types')
> +        self._add_system_module(None, ' * Built-in QAPI types')
>          self._genc.preamble_add(mcgen('''
>  #include "qemu/osdep.h"
>  #include "qapi/dealloc-visitor.h"
> diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py
> index ca86009398..826b8066e1 100644
> --- a/scripts/qapi/visit.py
> +++ b/scripts/qapi/visit.py
> @@ -284,7 +284,7 @@ class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor):
>          QAPISchemaModularCVisitor.__init__(
>              self, prefix, 'qapi-visit', ' * Schema-defined QAPI visitors',
>              __doc__)
> -        self._add_module(None, ' * Built-in QAPI visitors')
> +        self._add_system_module(None, ' * Built-in QAPI visitors')
>          self._genc.preamble_add(mcgen('''
>  #include "qemu/osdep.h"
>  #include "qemu-common.h"
> --
> 2.17.2
>

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

* Re: [Qemu-devel] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema Markus Armbruster
  2019-02-06 18:42   ` Eric Blake
@ 2019-02-07 11:19   ` Marc-André Lureau
  1 sibling, 0 replies; 36+ messages in thread
From: Marc-André Lureau @ 2019-02-07 11:19 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel

Hi
On Wed, Feb 6, 2019 at 7:17 PM Markus Armbruster <armbru@redhat.com> wrote:
>
> query-events doesn't reflect compile-time configuration.  Instead of
> fixing that, deprecate the command in favor of query-qmp-schema.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

sounds good to me (regardless on when the command is actually removed,
depending on libvirt needs).

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

> ---
>  monitor.c            | 5 +++++
>  qapi/misc.json       | 7 +++++--
>  qemu-deprecated.texi | 5 +++++
>  3 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/monitor.c b/monitor.c
> index eeec289aae..9f27621ed1 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -1099,6 +1099,11 @@ CommandInfoList *qmp_query_commands(Error **errp)
>
>  EventInfoList *qmp_query_events(Error **errp)
>  {
> +    /*
> +     * TODO This deprecated command is the only user of
> +     * QAPIEvent_str() and QAPIEvent_lookup[].  When the command goes,
> +     * they should go, too.
> +     */
>      EventInfoList *info, *ev_list = NULL;
>      QAPIEvent e;
>
> diff --git a/qapi/misc.json b/qapi/misc.json
> index 82f9147353..98f59f828a 100644
> --- a/qapi/misc.json
> +++ b/qapi/misc.json
> @@ -318,12 +318,15 @@
>  ##
>  # @query-events:
>  #
> -# Return a list of supported QMP events by this server
> +# Return information on QMP events.
>  #
> -# Returns: A list of @EventInfo for all supported events
> +# Returns: A list of @EventInfo.
>  #
>  # Since: 1.2.0
>  #
> +# Note: This command is deprecated, because its output doesn't reflect
> +# compile-time configuration.  Use query-qmp-schema instead.
> +#
>  # Example:
>  #
>  # -> { "execute": "query-events" }
> diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi
> index 9cc20b365c..3288e102d6 100644
> --- a/qemu-deprecated.texi
> +++ b/qemu-deprecated.texi
> @@ -103,6 +103,11 @@ Use ``device_add'' for hotplugging vCPUs instead of ``cpu-add''.  See
>  documentation of ``query-hotpluggable-cpus'' for additional
>  details.
>
> +@subsection query-events (since 4.0)
> +
> +The ``query-events'' command has been superseded by the more powerful
> +and accurate ``query-qmp-schema'' command.
> +
>  @section Human Monitor Protocol (HMP) commands
>
>  @subsection The hub_id parameter of 'hostfwd_add' / 'hostfwd_remove' (since 3.1)
> --
> 2.17.2
>

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

* Re: [Qemu-devel] [libvirt] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema
  2019-02-06 18:42   ` Eric Blake
@ 2019-02-07 12:29     ` Peter Krempa
  2019-02-07 13:46       ` Markus Armbruster
  0 siblings, 1 reply; 36+ messages in thread
From: Peter Krempa @ 2019-02-07 12:29 UTC (permalink / raw)
  To: Eric Blake; +Cc: Markus Armbruster, qemu-devel, marcandre.lureau, libvirt-list

[-- Attachment #1: Type: text/plain, Size: 914 bytes --]

On Wed, Feb 06, 2019 at 12:42:05 -0600, Eric Blake wrote:
> Adding libvirt in cc
> 
> On 2/6/19 12:17 PM, Markus Armbruster wrote:
> > query-events doesn't reflect compile-time configuration.  Instead of
> > fixing that, deprecate the command in favor of query-qmp-schema.
> > 
> > Signed-off-by: Markus Armbruster <armbru@redhat.com>
> > ---
> >  monitor.c            | 5 +++++
> >  qapi/misc.json       | 7 +++++--
> >  qemu-deprecated.texi | 5 +++++
> >  3 files changed, 15 insertions(+), 2 deletions(-)
> 
> Libvirt uses query-events; we'll need to patch libvirt to start relying
> on query-qmp-schema before this deprecation cycle can complete (although
> I'm in favor of making the change).

Patches to use 'query-qmp-schema' output rather than 'query-events' in
libvirt:

https://www.redhat.com/archives/libvir-list/2019-February/msg00298.html

You can start the deprecation clock.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 03/17] qapi: Clean up modular built-in code generation a bit
  2019-02-07 11:15   ` Marc-André Lureau
@ 2019-02-07 12:46     ` Markus Armbruster
  0 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-07 12:46 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel

Marc-André Lureau <marcandre.lureau@redhat.com> writes:

> Hi
>
> On Wed, Feb 6, 2019 at 7:17 PM Markus Armbruster <armbru@redhat.com> wrote:
>>
>> We neglect to call .visit_module() for the special module we use for
>> built-ins.  Harmless, but clean it up anyway.  The
>> tests/qapi-schema/*.out now show the built-in module as 'module None'.
>>
>> Subclasses of QAPISchemaModularCVisitor need to ._add_module() this
>> special module to enable code generation for built-ins.  When this
>> hasn't been done, QAPISchemaModularCVisitor.visit_module() does
>> nothing for the special module.  That looks like built-ins could
>> accidentally be generated into the wrong module when a subclass
>> neglects to call ._add_module().  Can't happen, because built-ins are
>> all visited before any other module.  But that's non-obvious.  Switch
>> off code generation explicitly.
>>
>> Split QAPISchemaModularCVisitor._add_module() into ._add_user_module()
>> and ._add_system_module(), for clarity.
>
> That's in next patch.

You caught me fiddling with the patch split after having written the
commit messages.  Will fix.

>> Rename QAPISchemaModularCVisitor._begin_module() to
>> ._begin_user_module().
>>
>> New QAPISchemaModularCVisitor._is_builtin_module(), for clarity.
>>
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Thanks!

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

* Re: [Qemu-devel] [libvirt] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema
  2019-02-07 12:29     ` [Qemu-devel] [libvirt] " Peter Krempa
@ 2019-02-07 13:46       ` Markus Armbruster
  2019-02-08 11:17         ` Peter Krempa
  0 siblings, 1 reply; 36+ messages in thread
From: Markus Armbruster @ 2019-02-07 13:46 UTC (permalink / raw)
  To: Peter Krempa; +Cc: Eric Blake, marcandre.lureau, libvirt-list, qemu-devel

Peter Krempa <pkrempa@redhat.com> writes:

> On Wed, Feb 06, 2019 at 12:42:05 -0600, Eric Blake wrote:
>> Adding libvirt in cc
>> 
>> On 2/6/19 12:17 PM, Markus Armbruster wrote:
>> > query-events doesn't reflect compile-time configuration.  Instead of
>> > fixing that, deprecate the command in favor of query-qmp-schema.
>> > 
>> > Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> > ---
>> >  monitor.c            | 5 +++++
>> >  qapi/misc.json       | 7 +++++--
>> >  qemu-deprecated.texi | 5 +++++
>> >  3 files changed, 15 insertions(+), 2 deletions(-)
>> 
>> Libvirt uses query-events; we'll need to patch libvirt to start relying
>> on query-qmp-schema before this deprecation cycle can complete (although
>> I'm in favor of making the change).
>
> Patches to use 'query-qmp-schema' output rather than 'query-events' in
> libvirt:
>
> https://www.redhat.com/archives/libvir-list/2019-February/msg00298.html
>
> You can start the deprecation clock.

Awesome!

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

* Re: [Qemu-devel] [PATCH v3 07/17] qapi: New module target.json
  2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 07/17] qapi: New module target.json Markus Armbruster
  2019-02-07 11:16   ` Marc-André Lureau
@ 2019-02-07 14:58   ` Eric Blake
  2019-02-07 16:32     ` Markus Armbruster
  1 sibling, 1 reply; 36+ messages in thread
From: Eric Blake @ 2019-02-07 14:58 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel; +Cc: marcandre.lureau

[-- Attachment #1: Type: text/plain, Size: 1604 bytes --]

On 2/6/19 12:17 PM, Markus Armbruster wrote:
> We can't add appropriate target-specific conditionals to misc.json,
> because that would make all of misc.json unusable in
> target-independent code.  To keep misc.json target-independent, we
> need to split off target-dependent target.json.
> 
> This commit doesn't actually split off anything, it merely creates the
> empty module.  The next few patches will move stuff from misc.json
> there.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  Makefile.objs         | 20 +++++++++-----------
>  Makefile.target       | 10 ++++++++++
>  qapi/qapi-schema.json |  1 +
>  qapi/target.json      | 13 +++++++++++++
>  4 files changed, 33 insertions(+), 11 deletions(-)
>  create mode 100644 qapi/target.json

> +++ b/Makefile.target
> @@ -164,6 +164,16 @@ endif
>  
>  GENERATED_FILES += hmp-commands.h hmp-commands-info.h
>  
> +# FIXME duplicates Makefile.obj's

Is this addressed later in the series, or should the commit message call
it out?

> +QAPI_TARGET_MODULES = target
> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-types-%.o)
> +obj-y += qapi/qapi-types.o
> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-visit-%.o)
> +obj-y += qapi/qapi-visit.o
> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-events-%.o)
> +obj-y += qapi/qapi-events.o
> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-commands-%.o)
> +obj-y += qapi/qapi-commands.o
>  obj-y += qapi/qapi-introspect.o
>  
-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [Qemu-devel] [PATCH v3 07/17] qapi: New module target.json
  2019-02-07 14:58   ` Eric Blake
@ 2019-02-07 16:32     ` Markus Armbruster
  0 siblings, 0 replies; 36+ messages in thread
From: Markus Armbruster @ 2019-02-07 16:32 UTC (permalink / raw)
  To: Eric Blake; +Cc: qemu-devel, marcandre.lureau

Eric Blake <eblake@redhat.com> writes:

> On 2/6/19 12:17 PM, Markus Armbruster wrote:
>> We can't add appropriate target-specific conditionals to misc.json,
>> because that would make all of misc.json unusable in
>> target-independent code.  To keep misc.json target-independent, we
>> need to split off target-dependent target.json.
>> 
>> This commit doesn't actually split off anything, it merely creates the
>> empty module.  The next few patches will move stuff from misc.json
>> there.
>> 
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>>  Makefile.objs         | 20 +++++++++-----------
>>  Makefile.target       | 10 ++++++++++
>>  qapi/qapi-schema.json |  1 +
>>  qapi/target.json      | 13 +++++++++++++
>>  4 files changed, 33 insertions(+), 11 deletions(-)
>>  create mode 100644 qapi/target.json
>
>> +++ b/Makefile.target
>> @@ -164,6 +164,16 @@ endif
>>  
>>  GENERATED_FILES += hmp-commands.h hmp-commands-info.h
>>  
>> +# FIXME duplicates Makefile.obj's
>
> Is this addressed later in the series, or should the commit message call
> it out?

It's not addressed.

I added the FIXME for my RFC v2, which went out in a bit of a hurry
right before my Christmas break.  I promptly forgot it exists.

Either I find a way to avoid the duplication, or I mention the FIXME in
my commit message.

Thanks!

>> +QAPI_TARGET_MODULES = target
>> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-types-%.o)
>> +obj-y += qapi/qapi-types.o
>> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-visit-%.o)
>> +obj-y += qapi/qapi-visit.o
>> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-events-%.o)
>> +obj-y += qapi/qapi-events.o
>> +obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-commands-%.o)
>> +obj-y += qapi/qapi-commands.o
>>  obj-y += qapi/qapi-introspect.o
>>  

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

* Re: [Qemu-devel] [libvirt] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema
  2019-02-07 13:46       ` Markus Armbruster
@ 2019-02-08 11:17         ` Peter Krempa
  0 siblings, 0 replies; 36+ messages in thread
From: Peter Krempa @ 2019-02-08 11:17 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: marcandre.lureau, libvirt-list, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 1245 bytes --]

On Thu, Feb 07, 2019 at 14:46:41 +0100, Markus Armbruster wrote:
> Peter Krempa <pkrempa@redhat.com> writes:
> 
> > On Wed, Feb 06, 2019 at 12:42:05 -0600, Eric Blake wrote:
> >> Adding libvirt in cc
> >> 
> >> On 2/6/19 12:17 PM, Markus Armbruster wrote:
> >> > query-events doesn't reflect compile-time configuration.  Instead of
> >> > fixing that, deprecate the command in favor of query-qmp-schema.
> >> > 
> >> > Signed-off-by: Markus Armbruster <armbru@redhat.com>
> >> > ---
> >> >  monitor.c            | 5 +++++
> >> >  qapi/misc.json       | 7 +++++--
> >> >  qemu-deprecated.texi | 5 +++++
> >> >  3 files changed, 15 insertions(+), 2 deletions(-)
> >> 
> >> Libvirt uses query-events; we'll need to patch libvirt to start relying
> >> on query-qmp-schema before this deprecation cycle can complete (although
> >> I'm in favor of making the change).
> >
> > Patches to use 'query-qmp-schema' output rather than 'query-events' in
> > libvirt:
> >
> > https://www.redhat.com/archives/libvir-list/2019-February/msg00298.html
> >
> > You can start the deprecation clock.
> 
> Awesome!

It's now pushed. Thankfully our existing infrastructure for querying
schema was able to handle it without any changes.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

end of thread, other threads:[~2019-02-08 11:18 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 01/17] qapi: Belatedly document modular code generation Markus Armbruster
2019-02-06 18:26   ` Marc-André Lureau
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 02/17] qapi: Fix up documentation for recent commit a95291007b2 Markus Armbruster
2019-02-06 18:19   ` Marc-André Lureau
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 03/17] qapi: Clean up modular built-in code generation a bit Markus Armbruster
2019-02-07 11:15   ` Marc-André Lureau
2019-02-07 12:46     ` Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 04/17] qapi: Prepare for system modules other than 'builtin' Markus Armbruster
2019-02-07 11:16   ` Marc-André Lureau
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 05/17] qapi: Generate QAPIEvent stuff into separate files Markus Armbruster
2019-02-07 11:16   ` Marc-André Lureau
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 06/17] build-sys: move qmp-introspect per target Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 07/17] qapi: New module target.json Markus Armbruster
2019-02-07 11:16   ` Marc-André Lureau
2019-02-07 14:58   ` Eric Blake
2019-02-07 16:32     ` Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 08/17] qapi: make rtc-reset-reinjection and SEV depend on TARGET_I386 Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 09/17] qapi: make s390 commands depend on TARGET_S390X Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 10/17] target.json: add a note about query-cpu* not being s390x-specific Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 11/17] qapi: make query-gic-capabilities depend on TARGET_ARM Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 12/17] qapi: make query-cpu-model-expansion depend on s390 or x86 Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 13/17] qapi: make query-cpu-definitions depend on specific targets Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 14/17] qapi: remove qmp_unregister_command() Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 15/17] Revert "qapi-events: add 'if' condition to implicit event enum" Markus Armbruster
2019-02-06 18:30   ` Marc-André Lureau
2019-02-06 20:08     ` Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema Markus Armbruster
2019-02-06 18:42   ` Eric Blake
2019-02-07 12:29     ` [Qemu-devel] [libvirt] " Peter Krempa
2019-02-07 13:46       ` Markus Armbruster
2019-02-08 11:17         ` Peter Krempa
2019-02-07 11:19   ` [Qemu-devel] " Marc-André Lureau
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 17/17] qapi: move RTC_CHANGE to the target schema Markus Armbruster
2019-02-06 18:40   ` Eric Blake
2019-02-06 20:09     ` Markus Armbruster

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.