All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Cc: qemu-devel@nongnu.org, Michael Roth <mdroth@linux.vnet.ibm.com>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
	Gerd Hoffmann <kraxel@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v6 05/15] qapi: add 'ifcond' to visitor methods
Date: Thu, 28 Jun 2018 19:48:42 +0200	[thread overview]
Message-ID: <876022g5tx.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20180627163551.31610-6-marcandre.lureau@redhat.com> ("Marc-André Lureau"'s message of "Wed, 27 Jun 2018 18:35:41 +0200")

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

> Modify the test visitor to check correct passing of values.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Markus Armbruster <armbru@redhat.com>
> ---
>  scripts/qapi/commands.py               |  2 +-
>  scripts/qapi/common.py                 | 31 ++++++++++++++------------
>  scripts/qapi/doc.py                    | 10 ++++-----
>  scripts/qapi/events.py                 |  2 +-
>  scripts/qapi/introspect.py             | 12 +++++-----
>  scripts/qapi/types.py                  |  8 +++----
>  scripts/qapi/visit.py                  |  8 +++----
>  tests/qapi-schema/qapi-schema-test.out |  9 ++++++++
>  tests/qapi-schema/test-qapi.py         | 19 +++++++++++-----
>  9 files changed, 61 insertions(+), 40 deletions(-)
>  mode change 100644 => 100755 scripts/qapi/doc.py
>
> diff --git a/scripts/qapi/commands.py b/scripts/qapi/commands.py
> index 3b0867c14f..dcc03c7859 100644
> --- a/scripts/qapi/commands.py
> +++ b/scripts/qapi/commands.py
> @@ -277,7 +277,7 @@ void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds);
>                         c_prefix=c_name(self._prefix, protect=False)))
>          genc.add(gen_registry(self._regy, self._prefix))
>  
> -    def visit_command(self, name, info, arg_type, ret_type, gen,
> +    def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
>                        success_response, boxed, allow_oob, allow_preconfig):
>          if not gen:
>              return
> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
> index 46e33e23e4..feae646e09 100644
> --- a/scripts/qapi/common.py
> +++ b/scripts/qapi/common.py
> @@ -1062,26 +1062,26 @@ class QAPISchemaVisitor(object):
>      def visit_builtin_type(self, name, info, json_type):
>          pass
>  
> -    def visit_enum_type(self, name, info, values, prefix):
> +    def visit_enum_type(self, name, info, ifcond, values, prefix):
>          pass
>  
> -    def visit_array_type(self, name, info, element_type):
> +    def visit_array_type(self, name, info, ifcond, element_type):
>          pass
>  
> -    def visit_object_type(self, name, info, base, members, variants):
> +    def visit_object_type(self, name, info, ifcond, base, members, variants):
>          pass
>  
> -    def visit_object_type_flat(self, name, info, members, variants):
> +    def visit_object_type_flat(self, name, info, ifcond, members, variants):
>          pass
>  
> -    def visit_alternate_type(self, name, info, variants):
> +    def visit_alternate_type(self, name, info, ifcond, variants):
>          pass
>  
> -    def visit_command(self, name, info, arg_type, ret_type, gen,
> +    def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
>                        success_response, boxed, allow_oob, allow_preconfig):
>          pass
>  
> -    def visit_event(self, name, info, arg_type, boxed):
> +    def visit_event(self, name, info, ifcond, arg_type, boxed):
>          pass
>  
>  
> @@ -1191,7 +1191,7 @@ class QAPISchemaEnumType(QAPISchemaType):
>          return 'string'
>  
>      def visit(self, visitor):
> -        visitor.visit_enum_type(self.name, self.info,
> +        visitor.visit_enum_type(self.name, self.info, self.ifcond,
>                                  self.member_names(), self.prefix)
>  
>  
> @@ -1225,7 +1225,8 @@ class QAPISchemaArrayType(QAPISchemaType):
>          return 'array of ' + elt_doc_type
>  
>      def visit(self, visitor):
> -        visitor.visit_array_type(self.name, self.info, self.element_type)
> +        visitor.visit_array_type(self.name, self.info, self.ifcond,
> +                                 self.element_type)
>  
>  
>  class QAPISchemaObjectType(QAPISchemaType):
> @@ -1307,9 +1308,9 @@ class QAPISchemaObjectType(QAPISchemaType):
>          return 'object'
>  
>      def visit(self, visitor):
> -        visitor.visit_object_type(self.name, self.info,
> +        visitor.visit_object_type(self.name, self.info, self.ifcond,
>                                    self.base, self.local_members, self.variants)
> -        visitor.visit_object_type_flat(self.name, self.info,
> +        visitor.visit_object_type_flat(self.name, self.info, self.ifcond,
>                                         self.members, self.variants)
>  
>  
> @@ -1462,7 +1463,8 @@ class QAPISchemaAlternateType(QAPISchemaType):
>          return 'value'
>  
>      def visit(self, visitor):
> -        visitor.visit_alternate_type(self.name, self.info, self.variants)
> +        visitor.visit_alternate_type(self.name, self.info, self.ifcond,
> +                                     self.variants)
>  
>      def is_empty(self):
>          return False
> @@ -1505,7 +1507,7 @@ class QAPISchemaCommand(QAPISchemaEntity):
>              assert isinstance(self.ret_type, QAPISchemaType)
>  
>      def visit(self, visitor):
> -        visitor.visit_command(self.name, self.info,
> +        visitor.visit_command(self.name, self.info, self.ifcond,
>                                self.arg_type, self.ret_type,
>                                self.gen, self.success_response,
>                                self.boxed, self.allow_oob,
> @@ -1538,7 +1540,8 @@ class QAPISchemaEvent(QAPISchemaEntity):
>              raise QAPISemError(self.info, "Use of 'boxed' requires 'data'")
>  
>      def visit(self, visitor):
> -        visitor.visit_event(self.name, self.info, self.arg_type, self.boxed)
> +        visitor.visit_event(self.name, self.info, self.ifcond,
> +                            self.arg_type, self.boxed)
>  
>  
>  class QAPISchema(object):
> diff --git a/scripts/qapi/doc.py b/scripts/qapi/doc.py
> old mode 100644
> new mode 100755
> index b5630844f9..4db6674dc3
> --- a/scripts/qapi/doc.py
> +++ b/scripts/qapi/doc.py
> @@ -204,14 +204,14 @@ class QAPISchemaGenDocVisitor(qapi.common.QAPISchemaVisitor):
>      def write(self, output_dir):
>          self._gen.write(output_dir, self._prefix + 'qapi-doc.texi')
>  
> -    def visit_enum_type(self, name, info, values, prefix):
> +    def visit_enum_type(self, name, info, ifcond, values, prefix):
>          doc = self.cur_doc
>          self._gen.add(TYPE_FMT(type='Enum',
>                                 name=doc.symbol,
>                                 body=texi_entity(doc, 'Values',
>                                                  member_func=texi_enum_value)))
>  
> -    def visit_object_type(self, name, info, base, members, variants):
> +    def visit_object_type(self, name, info, ifcond, base, members, variants):
>          doc = self.cur_doc
>          if base and base.is_implicit():
>              base = None
> @@ -220,13 +220,13 @@ class QAPISchemaGenDocVisitor(qapi.common.QAPISchemaVisitor):
>                                 body=texi_entity(doc, 'Members',
>                                                  base, variants)))
>  
> -    def visit_alternate_type(self, name, info, variants):
> +    def visit_alternate_type(self, name, info, ifcond, variants):
>          doc = self.cur_doc
>          self._gen.add(TYPE_FMT(type='Alternate',
>                                 name=doc.symbol,
>                                 body=texi_entity(doc, 'Members')))
>  
> -    def visit_command(self, name, info, arg_type, ret_type, gen,
> +    def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
>                        success_response, boxed, allow_oob, allow_preconfig):
>          doc = self.cur_doc
>          if boxed:
> @@ -240,7 +240,7 @@ class QAPISchemaGenDocVisitor(qapi.common.QAPISchemaVisitor):
>                                name=doc.symbol,
>                                body=body))
>  
> -    def visit_event(self, name, info, arg_type, boxed):
> +    def visit_event(self, name, info, ifcond, arg_type, boxed):
>          doc = self.cur_doc
>          self._gen.add(MSG_FMT(type='Event',
>                                name=doc.symbol,
> diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
> index 5657524688..0a1afac134 100644
> --- a/scripts/qapi/events.py
> +++ b/scripts/qapi/events.py
> @@ -184,7 +184,7 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
>          genh.add(gen_enum(self._enum_name, self._event_names))
>          genc.add(gen_enum_lookup(self._enum_name, self._event_names))
>  
> -    def visit_event(self, name, info, arg_type, boxed):
> +    def visit_event(self, name, info, ifcond, arg_type, boxed):
>          self._genh.add(gen_event_send_decl(name, arg_type, boxed))
>          self._genc.add(gen_event_send(name, arg_type, boxed, self._enum_name))
>          self._event_names.append(name)
> diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py
> index 6ad198ae5b..245cfdfb65 100644
> --- a/scripts/qapi/introspect.py
> +++ b/scripts/qapi/introspect.py
> @@ -149,26 +149,26 @@ const QLitObject %(c_name)s = %(c_string)s;
>      def visit_builtin_type(self, name, info, json_type):
>          self._gen_qlit(name, 'builtin', {'json-type': json_type})
>  
> -    def visit_enum_type(self, name, info, values, prefix):
> +    def visit_enum_type(self, name, info, ifcond, values, prefix):
>          self._gen_qlit(name, 'enum', {'values': values})
>  
> -    def visit_array_type(self, name, info, element_type):
> +    def visit_array_type(self, name, info, ifcond, element_type):
>          element = self._use_type(element_type)
>          self._gen_qlit('[' + element + ']', 'array', {'element-type': element})
>  
> -    def visit_object_type_flat(self, name, info, members, variants):
> +    def visit_object_type_flat(self, name, info, ifcond, members, variants):
>          obj = {'members': [self._gen_member(m) for m in members]}
>          if variants:
>              obj.update(self._gen_variants(variants.tag_member.name,
>                                            variants.variants))
>          self._gen_qlit(name, 'object', obj)
>  
> -    def visit_alternate_type(self, name, info, variants):
> +    def visit_alternate_type(self, name, info, ifcond, variants):
>          self._gen_qlit(name, 'alternate',
>                         {'members': [{'type': self._use_type(m.type)}
>                                      for m in variants.variants]})
>  
> -    def visit_command(self, name, info, arg_type, ret_type, gen,
> +    def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
>                        success_response, boxed, allow_oob, allow_preconfig):
>          arg_type = arg_type or self._schema.the_empty_object_type
>          ret_type = ret_type or self._schema.the_empty_object_type
> @@ -178,7 +178,7 @@ const QLitObject %(c_name)s = %(c_string)s;
>                          'allow-oob': allow_oob,
>                          'allow-preconfig': allow_preconfig})
>  
> -    def visit_event(self, name, info, arg_type, boxed):
> +    def visit_event(self, name, info, ifcond, arg_type, boxed):
>          arg_type = arg_type or self._schema.the_empty_object_type
>          self._gen_qlit(name, 'event', {'arg-type': self._use_type(arg_type)})
>  
> diff --git a/scripts/qapi/types.py b/scripts/qapi/types.py
> index a599352e59..659075f884 100644
> --- a/scripts/qapi/types.py
> +++ b/scripts/qapi/types.py
> @@ -208,16 +208,16 @@ class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor):
>          self._genh.add(gen_type_cleanup_decl(name))
>          self._genc.add(gen_type_cleanup(name))
>  
> -    def visit_enum_type(self, name, info, values, prefix):
> +    def visit_enum_type(self, name, info, ifcond, values, prefix):
>          self._genh.preamble_add(gen_enum(name, values, prefix))
>          self._genc.add(gen_enum_lookup(name, values, prefix))
>  
> -    def visit_array_type(self, name, info, element_type):
> +    def visit_array_type(self, name, info, ifcond, element_type):
>          self._genh.preamble_add(gen_fwd_object_or_array(name))
>          self._genh.add(gen_array(name, element_type))
>          self._gen_type_cleanup(name)
>  
> -    def visit_object_type(self, name, info, base, members, variants):
> +    def visit_object_type(self, name, info, ifcond, base, members, variants):
>          # Nothing to do for the special empty builtin
>          if name == 'q_empty':
>              return
> @@ -231,7 +231,7 @@ class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor):
>              # implicit types won't be directly allocated/freed
>              self._gen_type_cleanup(name)
>  
> -    def visit_alternate_type(self, name, info, variants):
> +    def visit_alternate_type(self, name, info, ifcond, variants):
>          self._genh.preamble_add(gen_fwd_object_or_array(name))
>          self._genh.add(gen_object(name, None,
>                                    [variants.tag_member], variants))
> diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py
> index bdcafb64ee..34fe1ef5eb 100644
> --- a/scripts/qapi/visit.py
> +++ b/scripts/qapi/visit.py
> @@ -310,15 +310,15 @@ class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor):
>  ''',
>                                        types=types))
>  
> -    def visit_enum_type(self, name, info, values, prefix):
> +    def visit_enum_type(self, name, info, ifcond, values, prefix):
>          self._genh.add(gen_visit_decl(name, scalar=True))
>          self._genc.add(gen_visit_enum(name))
>  
> -    def visit_array_type(self, name, info, element_type):
> +    def visit_array_type(self, name, info, ifcond, element_type):
>          self._genh.add(gen_visit_decl(name))
>          self._genc.add(gen_visit_list(name, element_type))
>  
> -    def visit_object_type(self, name, info, base, members, variants):
> +    def visit_object_type(self, name, info, ifcond, base, members, variants):
>          # Nothing to do for the special empty builtin
>          if name == 'q_empty':
>              return
> @@ -331,7 +331,7 @@ class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor):
>              self._genh.add(gen_visit_decl(name))
>              self._genc.add(gen_visit_object(name, base, members, variants))
>  
> -    def visit_alternate_type(self, name, info, variants):
> +    def visit_alternate_type(self, name, info, ifcond, variants):
>          self._genh.add(gen_visit_decl(name))
>          self._genc.add(gen_visit_alternate(name, variants))
>  
> diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qapi-schema-test.out
> index ed25e5b60c..0da92455da 100644
> --- a/tests/qapi-schema/qapi-schema-test.out
> +++ b/tests/qapi-schema/qapi-schema-test.out
> @@ -237,25 +237,34 @@ command __org.qemu_x-command q_obj___org.qemu_x-command-arg -> __org.qemu_x-Unio
>     gen=True success_response=True boxed=False oob=False preconfig=False
>  object TestIfStruct
>      member foo: int optional=False
> +    if ['defined(TEST_IF_STRUCT)']
>  enum TestIfEnum ['foo', 'bar']
> +    if ['defined(TEST_IF_ENUM)']
>  object q_obj_TestStruct-wrapper
>      member data: TestStruct optional=False
>  enum TestIfUnionKind ['foo']
> +    if ['defined(TEST_IF_UNION) && defined(TEST_IF_STRUCT)']
>  object TestIfUnion
>      member type: TestIfUnionKind optional=False
>      tag type
>      case foo: q_obj_TestStruct-wrapper
> +    if ['defined(TEST_IF_UNION) && defined(TEST_IF_STRUCT)']
>  alternate TestIfAlternate
>      tag type
>      case foo: int
>      case bar: TestStruct
> +    if ['defined(TEST_IF_ALT) && defined(TEST_IF_STRUCT)']
>  object q_obj_TestIfCmd-arg
>      member foo: TestIfStruct optional=False
> +    if ['defined(TEST_IF_CMD)', 'defined(TEST_IF_STRUCT)']
>  command TestIfCmd q_obj_TestIfCmd-arg -> UserDefThree
>     gen=True success_response=True boxed=False oob=False preconfig=False
> +    if ['defined(TEST_IF_CMD)', 'defined(TEST_IF_STRUCT)']
>  command TestCmdReturnDefThree None -> UserDefThree
>     gen=True success_response=True boxed=False oob=False preconfig=False
>  object q_obj_TestIfEvent-arg
>      member foo: TestIfStruct optional=False
> +    if ['defined(TEST_IF_EVT) && defined(TEST_IF_STRUCT)']
>  event TestIfEvent q_obj_TestIfEvent-arg
>     boxed=False
> +    if ['defined(TEST_IF_EVT) && defined(TEST_IF_STRUCT)']
> diff --git a/tests/qapi-schema/test-qapi.py b/tests/qapi-schema/test-qapi.py
> index 4512a41504..43aaf5a20b 100644
> --- a/tests/qapi-schema/test-qapi.py
> +++ b/tests/qapi-schema/test-qapi.py
> @@ -23,12 +23,13 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor):
>      def visit_include(self, name, info):
>          print('include %s' % name)
>  
> -    def visit_enum_type(self, name, info, values, prefix):
> +    def visit_enum_type(self, name, info, ifcond, values, prefix):
>          print('enum %s %s' % (name, values))
>          if prefix:
>              print('    prefix %s' % prefix)
> +        self._print_if(ifcond)
>  
> -    def visit_object_type(self, name, info, base, members, variants):
> +    def visit_object_type(self, name, info, ifcond, base, members, variants):
>          print('object %s' % name)
>          if base:
>              print('    base %s' % base.name)
> @@ -36,21 +37,25 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor):
>              print('    member %s: %s optional=%s' % \
>                    (m.name, m.type.name, m.optional))
>          self._print_variants(variants)
> +        self._print_if(ifcond)
>  
> -    def visit_alternate_type(self, name, info, variants):
> +    def visit_alternate_type(self, name, info, ifcond, variants):
>          print('alternate %s' % name)
>          self._print_variants(variants)
> +        self._print_if(ifcond)
>  
> -    def visit_command(self, name, info, arg_type, ret_type, gen,
> +    def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
>                        success_response, boxed, allow_oob, allow_preconfig):
>          print('command %s %s -> %s' % \
>                (name, arg_type and arg_type.name, ret_type and ret_type.name))
>          print('   gen=%s success_response=%s boxed=%s oob=%s preconfig=%s' % \
>                (gen, success_response, boxed, allow_oob, allow_preconfig))
> +        self._print_if(ifcond)
>  
> -    def visit_event(self, name, info, arg_type, boxed):
> +    def visit_event(self, name, info, ifcond, arg_type, boxed):
>          print('event %s %s' % (name, arg_type and arg_type.name))
>          print('   boxed=%s' % boxed)
> +        self._print_if(ifcond)
>  
>      @staticmethod
>      def _print_variants(variants):
> @@ -59,6 +64,10 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor):
>              for v in variants.variants:
>                  print('    case %s: %s' % (v.name, v.type.name))
>  
> +    @staticmethod
> +    def _print_if(ifcond, indent=4):
> +        if ifcond:
> +            print('%sif %s' % (' ' * indent, ifcond))
>  

pycodestyle points out:

    tests/qapi-schema/test-qapi.py:72:1: E305 expected 2 blank lines after class or function definition, found 1

Can touch up when I apply.

>  try:
>      schema = QAPISchema(sys.argv[1])

  reply	other threads:[~2018-06-28 17:48 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-27 16:35 [Qemu-devel] [PATCH v6 00/15] qapi: add #if pre-processor conditions to generated code (part 1) Marc-André Lureau
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 01/15] qapi: add 'if' to top-level expressions Marc-André Lureau
2018-06-28 14:57   ` Markus Armbruster
2018-06-28 15:34     ` Marc-André Lureau
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 02/15] tests Marc-André Lureau
2018-06-27 16:39   ` Marc-André Lureau
2018-06-28 15:35     ` Markus Armbruster
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 03/15] qapi: pass 'if' condition into QAPISchemaEntity objects Marc-André Lureau
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 04/15] qapi: leave the ifcond attribute undefined until check() Marc-André Lureau
2018-06-28 17:45   ` Markus Armbruster
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 05/15] qapi: add 'ifcond' to visitor methods Marc-André Lureau
2018-06-28 17:48   ` Markus Armbruster [this message]
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 06/15] qapi: mcgen() shouldn't indent # lines Marc-André Lureau
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 07/15] qapi: add #if/#endif helpers Marc-André Lureau
2018-07-03 11:53   ` Markus Armbruster
2018-07-03 12:35     ` Marc-André Lureau
2018-07-03 13:37       ` Markus Armbruster
2018-07-03 15:08         ` Marc-André Lureau
2018-07-03 15:34           ` Markus Armbruster
2018-07-03 15:43             ` Marc-André Lureau
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 08/15] qapi-introspect: modify to_qlit() to append ', ' on level > 0 Marc-André Lureau
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 09/15] qapi-introspect: add preprocessor conditions to generated QLit Marc-André Lureau
2018-07-03 12:09   ` Markus Armbruster
2018-07-03 13:11     ` Marc-André Lureau
2018-07-03 13:47       ` Markus Armbruster
2018-07-03 15:08         ` Markus Armbruster
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 10/15] qapi/commands: add #if conditions to commands Marc-André Lureau
2018-07-03 14:43   ` Markus Armbruster
2018-07-03 15:09     ` Markus Armbruster
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 11/15] qapi/events: add #if conditions to events Marc-André Lureau
2018-07-03 14:47   ` Markus Armbruster
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 12/15] qapi-types: add #if conditions to types & visitors Marc-André Lureau
2018-07-03 14:50   ` Markus Armbruster
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 13/15] qapi: add 'If:' section to generated documentation Marc-André Lureau
2018-07-03 14:59   ` Markus Armbruster
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 14/15] qapi: add conditions to VNC type/commands/events on the schema Marc-André Lureau
2018-07-03 15:04   ` Markus Armbruster
2018-06-27 16:35 ` [Qemu-devel] [PATCH v6 15/15] qapi: add conditions to SPICE " Marc-André Lureau
2018-07-03 15:05   ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=876022g5tx.fsf@dusky.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.