All of lore.kernel.org
 help / color / mirror / Atom feed
From: Claudio Fontana <cfontana@suse.de>
To: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Stefano Stabellini" <sstabellini@kernel.org>,
	"Wenchao Wang" <wenchao.wang@intel.com>,
	"Roman Bolshakov" <r.bolshakov@yadro.com>,
	"Sunil Muthuswamy" <sunilmut@microsoft.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>
Cc: "Laurent Vivier" <lvivier@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Eduardo Habkost" <ehabkost@redhat.com>,
	"Paul Durrant" <paul@xen.org>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Jason Wang" <jasowang@redhat.com>,
	"Marcelo Tosatti" <mtosatti@redhat.com>,
	qemu-devel@nongnu.org, "Peter Xu" <peterx@redhat.com>,
	"Dario Faggioli" <dfaggioli@suse.com>,
	"Cameron Esfahani" <dirty@apple.com>,
	haxm-team@intel.com, "Claudio Fontana" <cfontana@suse.de>,
	"Anthony Perard" <anthony.perard@citrix.com>,
	"Bruce Rogers" <brogers@suse.com>,
	"Olaf Hering" <ohering@suse.de>,
	"Emilio G . Cota" <cota@braap.org>,
	"Colin Xu" <colin.xu@intel.com>
Subject: [PATCH v11 24/25] cpu: move cc->transaction_failed to tcg_ops
Date: Fri, 11 Dec 2020 09:31:42 +0100	[thread overview]
Message-ID: <20201211083143.14350-25-cfontana@suse.de> (raw)
In-Reply-To: <20201211083143.14350-1-cfontana@suse.de>

Signed-off-by: Claudio Fontana <cfontana@suse.de>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
---
 include/hw/core/cpu.h         | 18 +++++++-----------
 include/hw/core/tcg-cpu-ops.h | 14 ++++++++++++++
 hw/mips/jazz.c                |  9 +++++++--
 target/alpha/cpu.c            |  2 +-
 target/arm/cpu.c              |  4 ++--
 target/m68k/cpu.c             |  2 +-
 target/microblaze/cpu.c       |  2 +-
 target/mips/cpu.c             |  4 +++-
 target/riscv/cpu.c            |  2 +-
 target/riscv/cpu_helper.c     |  2 +-
 target/sparc/cpu.c            |  2 +-
 target/xtensa/cpu.c           |  2 +-
 target/xtensa/helper.c        |  4 ++--
 13 files changed, 42 insertions(+), 25 deletions(-)

diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index b178549d48..0c6c17fb48 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -89,8 +89,6 @@ struct TranslationBlock;
  * @has_work: Callback for checking if there is work to do.
  * @do_unaligned_access: Callback for unaligned access handling, if
  * the target defines #TARGET_ALIGNED_ONLY.
- * @do_transaction_failed: Callback for handling failed memory transactions
- * (ie bus faults or external aborts; not MMU faults)
  * @virtio_is_big_endian: Callback to return %true if a CPU which supports
  * runtime configurable endianness is currently big-endian. Non-configurable
  * CPUs can use the default implementation of this method. This method should
@@ -159,10 +157,6 @@ struct CPUClass {
     void (*do_unaligned_access)(CPUState *cpu, vaddr addr,
                                 MMUAccessType access_type,
                                 int mmu_idx, uintptr_t retaddr);
-    void (*do_transaction_failed)(CPUState *cpu, hwaddr physaddr, vaddr addr,
-                                  unsigned size, MMUAccessType access_type,
-                                  int mmu_idx, MemTxAttrs attrs,
-                                  MemTxResult response, uintptr_t retaddr);
     bool (*virtio_is_big_endian)(CPUState *cpu);
     int (*memory_rw_debug)(CPUState *cpu, vaddr addr,
                            uint8_t *buf, int len, bool is_write);
@@ -848,7 +842,7 @@ static inline void cpu_unaligned_access(CPUState *cpu, vaddr addr,
 
     cc->do_unaligned_access(cpu, addr, access_type, mmu_idx, retaddr);
 }
-
+#ifdef CONFIG_TCG
 static inline void cpu_transaction_failed(CPUState *cpu, hwaddr physaddr,
                                           vaddr addr, unsigned size,
                                           MMUAccessType access_type,
@@ -858,12 +852,14 @@ static inline void cpu_transaction_failed(CPUState *cpu, hwaddr physaddr,
 {
     CPUClass *cc = CPU_GET_CLASS(cpu);
 
-    if (!cpu->ignore_memory_transaction_failures && cc->do_transaction_failed) {
-        cc->do_transaction_failed(cpu, physaddr, addr, size, access_type,
-                                  mmu_idx, attrs, response, retaddr);
+    if (!cpu->ignore_memory_transaction_failures &&
+        cc->tcg_ops.do_transaction_failed) {
+        cc->tcg_ops.do_transaction_failed(cpu, physaddr, addr, size, access_type,
+                                          mmu_idx, attrs, response, retaddr);
     }
 }
-#endif
+#endif /* CONFIG_TCG */
+#endif /* CONFIG_SOFTMMU */
 
 #endif /* NEED_CPU_H */
 
diff --git a/include/hw/core/tcg-cpu-ops.h b/include/hw/core/tcg-cpu-ops.h
index a7387b5c39..dbf17c4f96 100644
--- a/include/hw/core/tcg-cpu-ops.h
+++ b/include/hw/core/tcg-cpu-ops.h
@@ -11,6 +11,7 @@
 #define TCG_CPU_OPS_H
 
 #include "hw/core/cpu.h"
+#include "exec/memattrs.h"
 
 /**
  * struct TcgCpuOperations: TCG operations specific to a CPU class
@@ -55,6 +56,19 @@ typedef struct TcgCpuOperations {
                      bool probe, uintptr_t retaddr);
     /** @debug_excp_handler: Callback for handling debug exceptions */
     void (*debug_excp_handler)(CPUState *cpu);
+
+#ifndef CONFIG_USER_ONLY
+    /**
+     * @do_transaction_failed: Callback for handling failed memory transactions
+     * (ie bus faults or external aborts; not MMU faults)
+     */
+    void (*do_transaction_failed)(CPUState *cpu, hwaddr physaddr, vaddr addr,
+                                  unsigned size, MMUAccessType access_type,
+                                  int mmu_idx, MemTxAttrs attrs,
+                                  MemTxResult response, uintptr_t retaddr);
+
+#endif /* !CONFIG_USER_ONLY */
+
 } TcgCpuOperations;
 
 #endif /* TCG_CPU_OPS_H */
diff --git a/hw/mips/jazz.c b/hw/mips/jazz.c
index 71448f72ac..753256d377 100644
--- a/hw/mips/jazz.c
+++ b/hw/mips/jazz.c
@@ -115,6 +115,8 @@ static const MemoryRegionOps dma_dummy_ops = {
 #define MAGNUM_BIOS_SIZE_MAX 0x7e000
 #define MAGNUM_BIOS_SIZE                                                       \
         (BIOS_SIZE < MAGNUM_BIOS_SIZE_MAX ? BIOS_SIZE : MAGNUM_BIOS_SIZE_MAX)
+
+#if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY)
 static void (*real_do_transaction_failed)(CPUState *cpu, hwaddr physaddr,
                                           vaddr addr, unsigned size,
                                           MMUAccessType access_type,
@@ -136,6 +138,7 @@ static void mips_jazz_do_transaction_failed(CPUState *cs, hwaddr physaddr,
     (*real_do_transaction_failed)(cs, physaddr, addr, size, access_type,
                                   mmu_idx, attrs, response, retaddr);
 }
+#endif /* CONFIG_TCG && !CONFIG_USER_ONLY */
 
 static void mips_jazz_init(MachineState *machine,
                            enum jazz_model_e jazz_model)
@@ -204,8 +207,10 @@ static void mips_jazz_init(MachineState *machine,
      * memory region that catches all memory accesses, as we do on Malta.
      */
     cc = CPU_GET_CLASS(cpu);
-    real_do_transaction_failed = cc->do_transaction_failed;
-    cc->do_transaction_failed = mips_jazz_do_transaction_failed;
+#if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY)
+    real_do_transaction_failed = cc->tcg_ops.do_transaction_failed;
+    cc->tcg_ops.do_transaction_failed = mips_jazz_do_transaction_failed;
+#endif /* CONFIG_TCG && !CONFIG_USER_ONLY */
 
     /* allocate RAM */
     memory_region_add_subregion(address_space, 0, machine->ram);
diff --git a/target/alpha/cpu.c b/target/alpha/cpu.c
index 66f1166672..a1696bebeb 100644
--- a/target/alpha/cpu.c
+++ b/target/alpha/cpu.c
@@ -225,7 +225,7 @@ static void alpha_cpu_class_init(ObjectClass *oc, void *data)
     cc->gdb_write_register = alpha_cpu_gdb_write_register;
     cc->tcg_ops.tlb_fill = alpha_cpu_tlb_fill;
 #ifndef CONFIG_USER_ONLY
-    cc->do_transaction_failed = alpha_cpu_do_transaction_failed;
+    cc->tcg_ops.do_transaction_failed = alpha_cpu_do_transaction_failed;
     cc->do_unaligned_access = alpha_cpu_do_unaligned_access;
     cc->get_phys_page_debug = alpha_cpu_get_phys_page_debug;
     dc->vmsd = &vmstate_alpha_cpu;
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 1d0fe58771..39663d2861 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -2268,11 +2268,11 @@ static void arm_cpu_class_init(ObjectClass *oc, void *data)
     cc->debug_check_watchpoint = arm_debug_check_watchpoint;
     cc->do_unaligned_access = arm_cpu_do_unaligned_access;
 #if !defined(CONFIG_USER_ONLY)
-    cc->do_transaction_failed = arm_cpu_do_transaction_failed;
+    cc->tcg_ops.do_transaction_failed = arm_cpu_do_transaction_failed;
     cc->adjust_watchpoint_address = arm_adjust_watchpoint_address;
     cc->tcg_ops.do_interrupt = arm_cpu_do_interrupt;
 #endif /* CONFIG_TCG && !CONFIG_USER_ONLY */
-#endif
+#endif /* CONFIG_TCG */
 }
 
 #ifdef CONFIG_KVM
diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c
index 3e84de772c..3f60c99865 100644
--- a/target/m68k/cpu.c
+++ b/target/m68k/cpu.c
@@ -285,7 +285,7 @@ static void m68k_cpu_class_init(ObjectClass *c, void *data)
     cc->gdb_write_register = m68k_cpu_gdb_write_register;
     cc->tcg_ops.tlb_fill = m68k_cpu_tlb_fill;
 #if defined(CONFIG_SOFTMMU)
-    cc->do_transaction_failed = m68k_cpu_transaction_failed;
+    cc->tcg_ops.do_transaction_failed = m68k_cpu_transaction_failed;
     cc->get_phys_page_debug = m68k_cpu_get_phys_page_debug;
 #endif
     cc->disas_set_info = m68k_cpu_disas_set_info;
diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c
index 4f95248b2e..fa57a324dc 100644
--- a/target/microblaze/cpu.c
+++ b/target/microblaze/cpu.c
@@ -327,7 +327,7 @@ static void mb_cpu_class_init(ObjectClass *oc, void *data)
     cc->gdb_write_register = mb_cpu_gdb_write_register;
     cc->tcg_ops.tlb_fill = mb_cpu_tlb_fill;
 #ifndef CONFIG_USER_ONLY
-    cc->do_transaction_failed = mb_cpu_transaction_failed;
+    cc->tcg_ops.do_transaction_failed = mb_cpu_transaction_failed;
     cc->get_phys_page_debug = mb_cpu_get_phys_page_debug;
     dc->vmsd = &vmstate_mb_cpu;
 #endif
diff --git a/target/mips/cpu.c b/target/mips/cpu.c
index 25c4a55a6a..fe8bca41b7 100644
--- a/target/mips/cpu.c
+++ b/target/mips/cpu.c
@@ -241,7 +241,6 @@ static void mips_cpu_class_init(ObjectClass *c, void *data)
     cc->gdb_read_register = mips_cpu_gdb_read_register;
     cc->gdb_write_register = mips_cpu_gdb_write_register;
 #ifndef CONFIG_USER_ONLY
-    cc->do_transaction_failed = mips_cpu_do_transaction_failed;
     cc->do_unaligned_access = mips_cpu_do_unaligned_access;
     cc->get_phys_page_debug = mips_cpu_get_phys_page_debug;
     cc->vmsd = &vmstate_mips_cpu;
@@ -253,6 +252,9 @@ static void mips_cpu_class_init(ObjectClass *c, void *data)
     cc->tcg_ops.cpu_exec_interrupt = mips_cpu_exec_interrupt;
     cc->tcg_ops.synchronize_from_tb = mips_cpu_synchronize_from_tb;
     cc->tcg_ops.tlb_fill = mips_cpu_tlb_fill;
+#ifndef CONFIG_USER_ONLY
+    cc->tcg_ops.do_transaction_failed = mips_cpu_do_transaction_failed;
+#endif /* CONFIG_USER_ONLY */
 #endif /* CONFIG_TCG */
 
     cc->gdb_num_core_regs = 73;
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index 6a815569cc..7dfd8d7339 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -555,7 +555,7 @@ static void riscv_cpu_class_init(ObjectClass *c, void *data)
     cc->gdb_stop_before_watchpoint = true;
     cc->disas_set_info = riscv_cpu_disas_set_info;
 #ifndef CONFIG_USER_ONLY
-    cc->do_transaction_failed = riscv_cpu_do_transaction_failed;
+    cc->tcg_ops.do_transaction_failed = riscv_cpu_do_transaction_failed;
     cc->do_unaligned_access = riscv_cpu_do_unaligned_access;
     cc->get_phys_page_debug = riscv_cpu_get_phys_page_debug;
     /* For now, mark unmigratable: */
diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
index a2787b1d48..4c3e0382ce 100644
--- a/target/riscv/cpu_helper.c
+++ b/target/riscv/cpu_helper.c
@@ -667,7 +667,7 @@ void riscv_cpu_do_unaligned_access(CPUState *cs, vaddr addr,
     env->badaddr = addr;
     riscv_raise_exception(env, cs->exception_index, retaddr);
 }
-#endif
+#endif /* !CONFIG_USER_ONLY */
 
 bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
                         MMUAccessType access_type, int mmu_idx,
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index 3f23aa5962..009d0f07c3 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -873,7 +873,7 @@ static void sparc_cpu_class_init(ObjectClass *oc, void *data)
     cc->gdb_write_register = sparc_cpu_gdb_write_register;
     cc->tcg_ops.tlb_fill = sparc_cpu_tlb_fill;
 #ifndef CONFIG_USER_ONLY
-    cc->do_transaction_failed = sparc_cpu_do_transaction_failed;
+    cc->tcg_ops.do_transaction_failed = sparc_cpu_do_transaction_failed;
     cc->do_unaligned_access = sparc_cpu_do_unaligned_access;
     cc->get_phys_page_debug = sparc_cpu_get_phys_page_debug;
     cc->vmsd = &vmstate_sparc_cpu;
diff --git a/target/xtensa/cpu.c b/target/xtensa/cpu.c
index 3ff025f0fe..fc52fde696 100644
--- a/target/xtensa/cpu.c
+++ b/target/xtensa/cpu.c
@@ -205,7 +205,7 @@ static void xtensa_cpu_class_init(ObjectClass *oc, void *data)
 #ifndef CONFIG_USER_ONLY
     cc->do_unaligned_access = xtensa_cpu_do_unaligned_access;
     cc->get_phys_page_debug = xtensa_cpu_get_phys_page_debug;
-    cc->do_transaction_failed = xtensa_cpu_do_transaction_failed;
+    cc->tcg_ops.do_transaction_failed = xtensa_cpu_do_transaction_failed;
 #endif
     cc->tcg_ops.debug_excp_handler = xtensa_breakpoint_handler;
     cc->disas_set_info = xtensa_cpu_disas_set_info;
diff --git a/target/xtensa/helper.c b/target/xtensa/helper.c
index 05e2b7f70a..eeffee297d 100644
--- a/target/xtensa/helper.c
+++ b/target/xtensa/helper.c
@@ -261,7 +261,7 @@ bool xtensa_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
     cpu_loop_exit_restore(cs, retaddr);
 }
 
-#else
+#else /* !CONFIG_USER_ONLY */
 
 void xtensa_cpu_do_unaligned_access(CPUState *cs,
                                     vaddr addr, MMUAccessType access_type,
@@ -337,4 +337,4 @@ void xtensa_runstall(CPUXtensaState *env, bool runstall)
         qemu_cpu_kick(cpu);
     }
 }
-#endif
+#endif /* !CONFIG_USER_ONLY */
-- 
2.26.2



  parent reply	other threads:[~2020-12-11  8:48 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-11  8:31 [PATCH v11 00/25] i386 cleanup PART 1 Claudio Fontana
2020-12-11  8:31 ` [PATCH v11 01/25] accel/tcg: split CpusAccel into three TCG variants Claudio Fontana
2020-12-11  8:31 ` [PATCH v11 02/25] accel/tcg: split tcg_start_vcpu_thread Claudio Fontana
2020-12-11  8:31 ` [PATCH v11 03/25] accel/tcg: rename tcg-cpus functions to match module name Claudio Fontana
2020-12-11  8:31 ` [PATCH v11 04/25] i386: move kvm accel files into kvm/ Claudio Fontana
2020-12-11 16:08   ` Richard Henderson
2020-12-11  8:31 ` [PATCH v11 05/25] i386: move whpx accel files into whpx/ Claudio Fontana
2020-12-11 16:09   ` Richard Henderson
2020-12-11 20:41   ` Eduardo Habkost
2020-12-12  9:24     ` Claudio Fontana
2020-12-11  8:31 ` [PATCH v11 06/25] i386: move hax accel files into hax/ Claudio Fontana
2020-12-11 16:10   ` Richard Henderson
2020-12-11  8:31 ` [PATCH v11 07/25] i386: hvf: remove stale MAINTAINERS entry for old hvf stubs Claudio Fontana
2020-12-11  8:31 ` [PATCH v11 08/25] i386: move TCG accel files into tcg/ Claudio Fontana
2020-12-11 16:10   ` Richard Henderson
2020-12-11  8:31 ` [PATCH v11 09/25] i386: move cpu dump out of helper.c into cpu-dump.c Claudio Fontana
2020-12-11 16:13   ` Richard Henderson
2020-12-11 17:21     ` Claudio Fontana
2020-12-11  8:31 ` [PATCH v11 10/25] i386: move TCG cpu class initialization out of helper.c Claudio Fontana
2020-12-11 16:44   ` Richard Henderson
2020-12-11 17:31     ` Claudio Fontana
2020-12-11  8:31 ` [PATCH v11 11/25] tcg: cpu_exec_{enter,exit} helpers Claudio Fontana
2020-12-11 16:45   ` Richard Henderson
2020-12-11  8:31 ` [PATCH v11 12/25] tcg: make CPUClass.cpu_exec_* optional Claudio Fontana
2020-12-11  8:31 ` [PATCH v11 13/25] tcg: Make CPUClass.debug_excp_handler optional Claudio Fontana
2020-12-11  8:31 ` [PATCH v11 14/25] cpu: Remove unnecessary noop methods Claudio Fontana
2020-12-11 11:05   ` Philippe Mathieu-Daudé
2020-12-11  8:31 ` [PATCH v11 15/25] cpu: Introduce TCGCpuOperations struct Claudio Fontana
2020-12-11 16:55   ` Richard Henderson
2020-12-11 16:57     ` Richard Henderson
2020-12-11  8:31 ` [PATCH v11 16/25] target/riscv: remove CONFIG_TCG, as it is always TCG Claudio Fontana
2020-12-11 16:56   ` Richard Henderson
2020-12-11 17:19     ` Claudio Fontana
2020-12-11  8:31 ` [PATCH v11 17/25] accel/tcg: split TCG-only code from cpu_exec_realizefn Claudio Fontana
2020-12-11 16:58   ` Richard Henderson
2020-12-11  8:31 ` [PATCH v11 18/25] cpu: Move synchronize_from_tb() to tcg_ops Claudio Fontana
2020-12-11 17:05   ` Richard Henderson
2020-12-11 17:10     ` Claudio Fontana
2020-12-11 17:11       ` Claudio Fontana
2020-12-11 17:28       ` Richard Henderson
2020-12-11 17:47         ` Claudio Fontana
2020-12-11 18:04           ` Richard Henderson
2020-12-11 18:15           ` Claudio Fontana
2020-12-11 18:22             ` Richard Henderson
2020-12-11 18:26               ` Philippe Mathieu-Daudé
2020-12-11 18:51                 ` Claudio Fontana
2020-12-11 18:54                   ` Philippe Mathieu-Daudé
2020-12-11 20:02                   ` Eduardo Habkost
2020-12-12 10:00                     ` Claudio Fontana
2020-12-12 11:41                       ` Claudio Fontana
2020-12-14 21:04                       ` Eduardo Habkost
2020-12-11  8:31 ` [PATCH v11 19/25] cpu: Move cpu_exec_* " Claudio Fontana
2020-12-11 17:30   ` Richard Henderson
2020-12-11  8:31 ` [PATCH v11 20/25] cpu: Move tlb_fill " Claudio Fontana
2020-12-11 17:42   ` Richard Henderson
2020-12-11  8:31 ` [PATCH v11 21/25] cpu: Move debug_excp_handler " Claudio Fontana
2020-12-11 17:44   ` Richard Henderson
2020-12-11  8:31 ` [PATCH v11 22/25] target/arm: do not use cc->do_interrupt for KVM directly Claudio Fontana
2020-12-11 17:44   ` Richard Henderson
2020-12-11  8:31 ` [PATCH v11 23/25] cpu: move cc->do_interrupt to tcg_ops Claudio Fontana
2020-12-11 17:46   ` Richard Henderson
2020-12-11  8:31 ` Claudio Fontana [this message]
2020-12-11 11:00   ` [PATCH v11 24/25] cpu: move cc->transaction_failed " Philippe Mathieu-Daudé
2020-12-11 17:50   ` Richard Henderson
2020-12-11  8:31 ` [PATCH v11 25/25] cpu: move do_unaligned_access " Claudio Fontana
2020-12-11 11:01   ` Philippe Mathieu-Daudé
2020-12-11 17:58   ` Richard Henderson
2020-12-11  8:57 ` [PATCH v11 00/25] i386 cleanup PART 1 no-reply
2020-12-11 11:07 ` Philippe Mathieu-Daudé

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=20201211083143.14350-25-cfontana@suse.de \
    --to=cfontana@suse.de \
    --cc=alex.bennee@linaro.org \
    --cc=anthony.perard@citrix.com \
    --cc=brogers@suse.com \
    --cc=colin.xu@intel.com \
    --cc=cota@braap.org \
    --cc=dfaggioli@suse.com \
    --cc=dirty@apple.com \
    --cc=ehabkost@redhat.com \
    --cc=haxm-team@intel.com \
    --cc=jasowang@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=ohering@suse.de \
    --cc=paul@xen.org \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=peterx@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=r.bolshakov@yadro.com \
    --cc=richard.henderson@linaro.org \
    --cc=sstabellini@kernel.org \
    --cc=sunilmut@microsoft.com \
    --cc=thuth@redhat.com \
    --cc=wenchao.wang@intel.com \
    /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.