qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Xiaoyao Li <xiaoyao.li@intel.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>,
	"Duan, Zhenzhong" <zhenzhong.duan@intel.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"David Hildenbrand" <david@redhat.com>,
	"Igor Mammedov" <imammedo@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Yanan Wang" <wangyanan55@huawei.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Ani Sinha" <anisinha@redhat.com>, "Peter Xu" <peterx@redhat.com>,
	"Cornelia Huck" <cohuck@redhat.com>,
	"Eric Blake" <eblake@redhat.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Marcelo Tosatti" <mtosatti@redhat.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	"Michael Roth" <michael.roth@amd.com>,
	"Claudio Fontana" <cfontana@suse.de>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Isaku Yamahata" <isaku.yamahata@gmail.com>,
	"Qiang, Chenyi" <chenyi.qiang@intel.com>
Subject: Re: [PATCH v5 25/65] i386/tdx: Add property sept-ve-disable for tdx-guest object
Date: Wed, 26 Jun 2024 22:45:03 +0800	[thread overview]
Message-ID: <73cd4590-19c1-43e6-b861-c6ef9abb0f95@intel.com> (raw)
In-Reply-To: <ZnmKQeMtOq8dyWjC@redhat.com>

On 6/24/2024 11:01 PM, Daniel P. Berrangé wrote:
> On Fri, Jun 14, 2024 at 08:49:57AM +0100, Daniel P. Berrangé wrote:
>> On Fri, Jun 14, 2024 at 09:04:33AM +0800, Xiaoyao Li wrote:
>>> On 6/13/2024 4:35 PM, Duan, Zhenzhong wrote:
>>>>
>>>>
>>>>> -----Original Message-----
>>>>> From: Li, Xiaoyao <xiaoyao.li@intel.com>
>>>>> Subject: Re: [PATCH v5 25/65] i386/tdx: Add property sept-ve-disable for
>>>>> tdx-guest object
>>>>>
>>>>> On 6/6/2024 6:45 PM, Daniel P. Berrangé wrote:
>>>>>> Copying  Zhenzhong Duan as my point relates to the proposed libvirt
>>>>>> TDX patches.
>>>>>>
>>>>>> On Thu, Feb 29, 2024 at 01:36:46AM -0500, Xiaoyao Li wrote:
>>>>>>> Bit 28 of TD attribute, named SEPT_VE_DISABLE. When set to 1, it
>>>>> disables
>>>>>>> EPT violation conversion to #VE on guest TD access of PENDING pages.
>>>>>>>
>>>>>>> Some guest OS (e.g., Linux TD guest) may require this bit as 1.
>>>>>>> Otherwise refuse to boot.
>>>>>>>
>>>>>>> Add sept-ve-disable property for tdx-guest object, for user to configure
>>>>>>> this bit.
>>>>>>>
>>>>>>> Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
>>>>>>> Acked-by: Gerd Hoffmann <kraxel@redhat.com>
>>>>>>> Acked-by: Markus Armbruster <armbru@redhat.com>
>>>>>>> ---
>>>>>>> Changes in v4:
>>>>>>> - collect Acked-by from Markus
>>>>>>>
>>>>>>> Changes in v3:
>>>>>>> - update the comment of property @sept-ve-disable to make it more
>>>>>>>      descriptive and use new format. (Daniel and Markus)
>>>>>>> ---
>>>>>>>     qapi/qom.json         |  7 ++++++-
>>>>>>>     target/i386/kvm/tdx.c | 24 ++++++++++++++++++++++++
>>>>>>>     2 files changed, 30 insertions(+), 1 deletion(-)
>>>>>>>
>>>>>>> diff --git a/qapi/qom.json b/qapi/qom.json
>>>>>>> index 220cc6c98d4b..89ed89b9b46e 100644
>>>>>>> --- a/qapi/qom.json
>>>>>>> +++ b/qapi/qom.json
>>>>>>> @@ -900,10 +900,15 @@
>>>>>>>     #
>>>>>>>     # Properties for tdx-guest objects.
>>>>>>>     #
>>>>>>> +# @sept-ve-disable: toggle bit 28 of TD attributes to control disabling
>>>>>>> +#     of EPT violation conversion to #VE on guest TD access of PENDING
>>>>>>> +#     pages.  Some guest OS (e.g., Linux TD guest) may require this to
>>>>>>> +#     be set, otherwise they refuse to boot.
>>>>>>> +#
>>>>>>>     # Since: 9.0
>>>>>>>     ##
>>>>>>>     { 'struct': 'TdxGuestProperties',
>>>>>>> -  'data': { }}
>>>>>>> +  'data': { '*sept-ve-disable': 'bool' } }
>>>>>>
>>>>>> So this exposes a single boolean property that gets mapped into one
>>>>>> specific bit in the TD attributes:
>>>>>>
>>>>>>> +
>>>>>>> +static void tdx_guest_set_sept_ve_disable(Object *obj, bool value, Error
>>>>> **errp)
>>>>>>> +{
>>>>>>> +    TdxGuest *tdx = TDX_GUEST(obj);
>>>>>>> +
>>>>>>> +    if (value) {
>>>>>>> +        tdx->attributes |= TDX_TD_ATTRIBUTES_SEPT_VE_DISABLE;
>>>>>>> +    } else {
>>>>>>> +        tdx->attributes &= ~TDX_TD_ATTRIBUTES_SEPT_VE_DISABLE;
>>>>>>> +    }
>>>>>>> +}
>>>>>>
>>>>>> If I look at the documentation for TD attributes
>>>>>>
>>>>>>      https://download.01.org/intel-sgx/latest/dcap-
>>>>> latest/linux/docs/Intel_TDX_DCAP_Quoting_Library_API.pdf
>>>>>>
>>>>>> Section "A.3.4. TD Attributes"
>>>>>>
>>>>>> I see "TD attributes" is a 64-bit int, with 5 bits currently
>>>>>> defined "DEBUG", "SEPT_VE_DISABLE", "PKS", "PL", "PERFMON",
>>>>>> and the rest currently reserved for future use. This makes me
>>>>>> wonder about our modelling approach into the future ?
>>>>>>
>>>>>> For the AMD SEV equivalent we've just directly exposed the whole
>>>>>> field as an int:
>>>>>>
>>>>>>         'policy' : 'uint32',
>>>>>>
>>>>>> For the proposed SEV-SNP patches, the same has been done again
>>>>>>
>>>>>> https://lists.nongnu.org/archive/html/qemu-devel/2024-
>>>>> 06/msg00536.html
>>>>>>
>>>>>>         '*policy': 'uint64',
>>>>>>
>>>>>>
>>>>>> The advantage of exposing individual booleans is that it is
>>>>>> self-documenting at the QAPI level, but the disadvantage is
>>>>>> that every time we want to expose ability to control a new
>>>>>> bit in the policy we have to modify QEMU, libvirt, the mgmt
>>>>>> app above libvirt, and whatever tools the end user has to
>>>>>> talk to the mgmt app.
>>>>>>
>>>>>> If we expose a policy int, then newly defined bits only require
>>>>>> a change in QEMU, and everything above QEMU will already be
>>>>>> capable of setting it.
>>>>>>
>>>>>> In fact if I look at the proposed libvirt patches, they have
>>>>>> proposed just exposing a policy "int" field in the XML, which
>>>>>> then has to be unpacked to set the individual QAPI booleans
>>>>>>
>>>>>>
>>>>> https://lists.libvirt.org/archives/list/devel@lists.libvirt.org/message/WXWX
>>>>> EESYUA77DP7YIBP55T2OPSVKV5QW/
>>>>>>
>>>>>> On balance, I think it would be better if QEMU just exposed
>>>>>> the raw TD attributes policy as an uint64 at QAPI, instead
>>>>>> of trying to unpack it to discrete bool fields. This gives
>>>>>> consistency with SEV and SEV-SNP, and with what's proposed
>>>>>> at the libvirt level, and minimizes future changes when
>>>>>> more policy bits are defined.
>>>>>
>>>>> The reasons why introducing individual bit of sept-ve-disable instead of
>>>>> a raw TD attribute as a whole are that
>>>>>
>>>>> 1. other bits like perfmon, PKS, KL are associated with cpu properties,
>>>>> e.g.,
>>>>>
>>>>> 	perfmon -> pmu,
>>>>> 	pks -> pks,
>>>>> 	kl -> keylokcer feature that QEMU currently doesn't support
>>>>>
>>>>> If allowing configuring attribute directly, we need to deal with the
>>>>> inconsistence between attribute vs cpu property.
>>>>
>>>> What about defining those bits associated with cpu properties reserved
>>>> But other bits work as Daniel suggested way.
>>>
>>> I don't understand. Do you mean we provide the interface to configure raw 64
>>> bit attributes while some bits of it are reserved?
>>
>> Just have a mask of what bits are permitted to be set, and report an
>> error if the user sets non-permitted bits.
> 
> Looking at the IGVM patches, the CnofidentialGuestSupport class is
> gaining a "set_guest_policy" method, which takes a "uint64_t policy".
> 
> If (when) IGVM support is extended to cover TDX too, then we're
> going to need to accept the user providing the policy in integer
> format via the IGVM file metadata. This will require adding code
> to check for any inconsistency between the policy bitmask, and
> the CPU flags.
> 
>    https://lists.nongnu.org/archive/html/qemu-devel/2024-06/msg04037.html

Just have a glance at the IGVM series (which is a news to me). The IGVM 
series looks specific to SEV-*. Though some of the callbacks introduced 
in ConfidentialGuestSupportClass can be tweaked for TDX, but the 
arguments introduced are specific to SEV-*.

Aside from above, are you going to map (sev-*)'s policy to TDX's 
attributes? I don't think it is a good idea. It mixes up things with 
limited benefit. To me, the common of them is only they are both  64-bit 
field.

> so to me this is another reason to just expose the policy as an
> integer in the QAPI/QOM structure too. Everywhere just wants to
> be working with policy in integer format.

I'm not reluctant to expose TD's attribute as a raw 64-bit data in QAPI 
structure. I just don't like the idea of the permitted mask, which makes 
the 64-bit field incomplete, and makes things complicated. People need 
to learn that some bits are configured in attribute directly while other 
bits are configured via cpu properties indirectly.

Maybe we can allow the direct configurability of raw 64-bit attribute 
and give it highest priority. If inconsistent value is provided via cpu 
properties, warn it and let the attribute value overwrite CPU properties?

> With regards,
> Daniel



  reply	other threads:[~2024-06-26 14:46 UTC|newest]

Thread overview: 124+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-29  6:36 [PATCH v5 00/65] QEMU Guest memfd + QEMU TDX support Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 01/65] linux-headers: Update to Linux v6.8-rc5 Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 02/65] RAMBlock: Add support of KVM private guest memfd Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 03/65] HostMem: Add mechanism to opt in kvm guest memfd via MachineState Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 04/65] trace/kvm: Split address space and slot id in trace_kvm_set_user_memory() Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 05/65] kvm: Enable KVM_SET_USER_MEMORY_REGION2 for memslot Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 06/65] kvm: Introduce support for memory_attributes Xiaoyao Li
2024-03-19  2:03   ` Wang, Lei
2024-03-20 12:44     ` Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 07/65] physmem: Introduce ram_block_discard_guest_memfd_range() Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 08/65] kvm: handle KVM_EXIT_MEMORY_FAULT Xiaoyao Li
2024-03-05  9:10   ` Isaku Yamahata
2024-03-07  6:43     ` Xiaoyao Li
2024-03-19  2:14   ` Wang, Lei
2024-03-20 13:49     ` Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 09/65] trace/kvm: Add trace for page convertion between shared and private Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 10/65] kvm/memory: Make memory type private by default if it has guest memfd backend Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 11/65] *** HACK *** linux-headers: Update headers to pull in TDX API changes Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 12/65] i386: Introduce tdx-guest object Xiaoyao Li
2024-02-29  8:19   ` Markus Armbruster
2024-02-29  6:36 ` [PATCH v5 13/65] target/i386: Implement mc->kvm_type() to get VM type Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 14/65] i386/tdx: Implement tdx_kvm_init() to initialize TDX VM context Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 15/65] i386/tdx: Get tdx_capabilities via KVM_TDX_CAPABILITIES Xiaoyao Li
2024-03-12 23:02   ` Isaku Yamahata
2024-03-19  2:43   ` Wang, Lei
2024-02-29  6:36 ` [PATCH v5 16/65] i386/tdx: Introduce is_tdx_vm() helper and cache tdx_guest object Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 17/65] i386/tdx: Adjust the supported CPUID based on TDX restrictions Xiaoyao Li
2024-05-31  8:47   ` Duan, Zhenzhong
2024-06-12  9:23     ` Xiaoyao Li
2024-06-13  8:26       ` Duan, Zhenzhong
2024-06-14  1:02         ` Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 18/65] i386/tdx: Make Intel-PT unsupported for TD guest Xiaoyao Li
2024-05-31  9:27   ` Duan, Zhenzhong
2024-06-12  9:24     ` Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 19/65] i386/tdx: Update tdx_cpuid_lookup[].tdx_fixed0/1 by tdx_caps.cpuid_config[] Xiaoyao Li
2024-05-31  9:27   ` Duan, Zhenzhong
2024-02-29  6:36 ` [PATCH v5 20/65] i386/tdx: Integrate tdx_caps->xfam_fixed0/1 into tdx_cpuid_lookup Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 21/65] i386/tdx: Integrate tdx_caps->attrs_fixed0/1 to tdx_cpuid_lookup Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 22/65] i386/kvm: Move architectural CPUID leaf generation to separate helper Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 23/65] kvm: Introduce kvm_arch_pre_create_vcpu() Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 24/65] i386/tdx: Initialize TDX before creating TD vcpus Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 25/65] i386/tdx: Add property sept-ve-disable for tdx-guest object Xiaoyao Li
2024-06-06 10:45   ` Daniel P. Berrangé
2024-06-12  8:28     ` Xiaoyao Li
2024-06-13  8:35       ` Duan, Zhenzhong
2024-06-14  1:04         ` Xiaoyao Li
2024-06-14  2:49           ` Duan, Zhenzhong
2024-06-14  7:49           ` Daniel P. Berrangé
2024-06-24 15:01             ` Daniel P. Berrangé
2024-06-26 14:45               ` Xiaoyao Li [this message]
2024-02-29  6:36 ` [PATCH v5 26/65] i386/tdx: Make sept_ve_disable set by default Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 27/65] i386/tdx: Wire CPU features up with attributes of TD guest Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 28/65] i386/tdx: Disable pmu for " Xiaoyao Li
2024-04-16  8:32   ` Chenyi Qiang
2024-04-16  8:55     ` Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 29/65] i386/tdx: Validate TD attributes Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 30/65] i386/tdx: Support user configurable mrconfigid/mrowner/mrownerconfig Xiaoyao Li
2024-02-29  8:37   ` Markus Armbruster
2024-02-29 10:50     ` Xiaoyao Li
2024-02-29 13:25       ` Markus Armbruster
2024-02-29 14:14         ` Xiaoyao Li
2024-03-07  8:39           ` Markus Armbruster
2024-03-07 11:24             ` Xiaoyao Li
2024-03-07 13:56               ` Markus Armbruster
2024-03-11  1:25                 ` Xiaoyao Li
2024-03-11  7:19                   ` Markus Armbruster
2024-02-29  6:36 ` [PATCH v5 31/65] i386/tdx: Implement user specified tsc frequency Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 32/65] i386/tdx: Set kvm_readonly_mem_enabled to false for TDX VM Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 33/65] kvm/tdx: Don't complain when converting vMMIO region to shared Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 34/65] kvm/tdx: Ignore memory conversion to shared of unassigned region Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 35/65] memory: Introduce memory_region_init_ram_guest_memfd() Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 36/65] i386/tdx: load TDVF for TD guest Xiaoyao Li
2024-02-29  6:36 ` [PATCH v5 37/65] i386/tdvf: Introduce function to parse TDVF metadata Xiaoyao Li
2024-06-04  6:32   ` Duan, Zhenzhong
2024-02-29  6:36 ` [PATCH v5 38/65] i386/tdx: Parse TDVF metadata for TDX VM Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 39/65] i386/tdx: Skip BIOS shadowing setup Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 40/65] i386/tdx: Don't initialize pc.rom for TDX VMs Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 41/65] i386/tdx: Track mem_ptr for each firmware entry of TDVF Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 42/65] i386/tdx: Track RAM entries for TDX VM Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 43/65] headers: Add definitions from UEFI spec for volumes, resources, etc Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 44/65] i386/tdx: Setup the TD HOB list Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 45/65] i386/tdx: Populate TDVF private memory via KVM_MEMORY_MAPPING Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 46/65] i386/tdx: Call KVM_TDX_INIT_VCPU to initialize TDX vcpu Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 47/65] i386/tdx: Finalize TDX VM Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 48/65] i386/tdx: handle TDG.VP.VMCALL<SetupEventNotifyInterrupt> Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 49/65] i386/tdx: handle TDG.VP.VMCALL<GetQuote> Xiaoyao Li
2024-02-29  8:40   ` Markus Armbruster
2024-02-29 10:54     ` Xiaoyao Li
2024-02-29 13:28       ` Markus Armbruster
2024-03-07 11:25         ` Xiaoyao Li
2024-03-11  9:27   ` Daniel P. Berrangé
2024-03-12  7:44     ` Xiaoyao Li
2024-03-12 18:02       ` Isaku Yamahata
2024-03-13 15:31       ` Daniel P. Berrangé
2024-03-15  8:41         ` Xiaoyao Li
2024-10-03 18:08   ` Daniel P. Berrangé
2025-04-02 15:26     ` Xiaoyao Li
2025-04-02 15:49       ` Daniel P. Berrangé
2025-04-03  7:28         ` Xiaoyao Li
2025-04-03  8:10           ` Daniel P. Berrangé
2025-04-08  2:00             ` Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 50/65] i386/tdx: handle TDG.VP.VMCALL<MapGPA> hypercall Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 51/65] i386/tdx: Handle TDG.VP.VMCALL<REPORT_FATAL_ERROR> Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 52/65] i386/tdx: Wire TDX_REPORT_FATAL_ERROR with GuestPanic facility Xiaoyao Li
2024-02-29  8:51   ` Markus Armbruster
2024-03-07 11:30     ` Xiaoyao Li
2024-03-07 13:51       ` Markus Armbruster
2024-03-11  1:28         ` Xiaoyao Li
2024-03-11  7:29           ` Markus Armbruster
2024-03-12  7:27             ` Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 53/65] pci-host/q35: Move PAM initialization above SMRAM initialization Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 54/65] q35: Introduce smm_ranges property for q35-pci-host Xiaoyao Li
2024-10-05  8:15   ` Michael Tokarev
2024-02-29  6:37 ` [PATCH v5 55/65] i386/tdx: Disable SMM for TDX VMs Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 56/65] i386/tdx: Disable PIC " Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 57/65] i386/tdx: Don't allow system reset " Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 58/65] i386/tdx: LMCE is not supported for TDX Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 59/65] hw/i386: add eoi_intercept_unsupported member to X86MachineState Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 60/65] hw/i386: add option to forcibly report edge trigger in acpi tables Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 61/65] i386/tdx: Don't synchronize guest tsc for TDs Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 62/65] i386/tdx: Only configure MSR_IA32_UCODE_REV in kvm_init_msrs() " Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 63/65] i386/tdx: Skip kvm_put_apicbase() " Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 64/65] i386/tdx: Don't get/put guest state for TDX VMs Xiaoyao Li
2024-02-29  6:37 ` [PATCH v5 65/65] docs: Add TDX documentation Xiaoyao Li

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=73cd4590-19c1-43e6-b861-c6ef9abb0f95@intel.com \
    --to=xiaoyao.li@intel.com \
    --cc=anisinha@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=cfontana@suse.de \
    --cc=chenyi.qiang@intel.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=eblake@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=imammedo@redhat.com \
    --cc=isaku.yamahata@gmail.com \
    --cc=kraxel@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=michael.roth@amd.com \
    --cc=mst@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=wangyanan55@huawei.com \
    --cc=zhenzhong.duan@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).