From: Alexey Makhalov <alexey.makhalov@broadcom.com> To: linux-kernel@vger.kernel.org, virtualization@lists.linux.dev, bp@alien8.de, hpa@zytor.com, dave.hansen@linux.intel.com, mingo@redhat.com, tglx@linutronix.de Cc: x86@kernel.org, netdev@vger.kernel.org, richardcochran@gmail.com, linux-input@vger.kernel.org, dmitry.torokhov@gmail.com, zackr@vmware.com, linux-graphics-maintainer@vmware.com, pv-drivers@vmware.com, namit@vmware.com, timothym@vmware.com, akaher@vmware.com, jsipek@vmware.com, dri-devel@lists.freedesktop.org, daniel@ffwll.ch, airlied@gmail.com, tzimmermann@suse.de, mripard@kernel.org, maarten.lankhorst@linux.intel.com, horms@kernel.org Subject: [PATCH] x86/vmware: Add TDX hypercall support Date: Thu, 7 Dec 2023 18:32:33 -0800 [thread overview] Message-ID: <20231208023233.71170-1-alexey.makhalov@broadcom.com> (raw) In-Reply-To: <64074f04-fd72-488b-831a-ad744bbcd950@broadcom.com> From: Alexey Makhalov <amakhalov@vmware.com> VMware hypercalls use I/O port, VMCALL or VMMCALL instructions. Add __tdx_hypercall path to support TDX guests. No change in high bandwidth hypercalls, as only low bandwidth ones are supported for TDX guests. Co-developed-by: Tim Merrifield <timothym@vmware.com> Signed-off-by: Tim Merrifield <timothym@vmware.com> Signed-off-by: Alexey Makhalov <amakhalov@vmware.com> Reviewed-by: Nadav Amit <namit@vmware.com> --- arch/x86/include/asm/vmware.h | 83 +++++++++++++++++++++++++++++++++++ arch/x86/kernel/cpu/vmware.c | 22 ++++++++++ 2 files changed, 105 insertions(+) diff --git a/arch/x86/include/asm/vmware.h b/arch/x86/include/asm/vmware.h index 719e41260ece..04c698b905ab 100644 --- a/arch/x86/include/asm/vmware.h +++ b/arch/x86/include/asm/vmware.h @@ -34,12 +34,65 @@ #define VMWARE_CMD_GETHZ 45 #define VMWARE_CMD_GETVCPU_INFO 68 #define VMWARE_CMD_STEALCLOCK 91 +/* + * Hypercall command mask: + * bits[6:0] command, range [0, 127] + * bits[19:16] sub-command, range [0, 15] + */ +#define VMWARE_CMD_MASK 0xf007fULL #define CPUID_VMWARE_FEATURES_ECX_VMMCALL BIT(0) #define CPUID_VMWARE_FEATURES_ECX_VMCALL BIT(1) extern u8 vmware_hypercall_mode; +#define VMWARE_TDX_VENDOR_LEAF 0x1af7e4909ULL +#define VMWARE_TDX_HCALL_FUNC 1 + +extern unsigned long vmware_tdx_hypercall(struct tdx_module_args *args); + +/* + * TDCALL[TDG.VP.VMCALL] uses rax (arg0) and rcx (arg2), while the use of + * rbp (arg6) is discouraged by the TDX specification. Therefore, we + * remap those registers to r12, r13 and r14, respectively. + */ +static inline +unsigned long vmware_tdx_hypercall_args(unsigned long cmd, unsigned long in1, + unsigned long in3, unsigned long in4, + unsigned long in5, unsigned long in6, + uint32_t *out1, uint32_t *out2, + uint32_t *out3, uint32_t *out4, + uint32_t *out5, uint32_t *out6) +{ + unsigned long ret; + + struct tdx_module_args args = { + .r13 = cmd, + .rbx = in1, + .rdx = in3, + .rsi = in4, + .rdi = in5, + .r14 = in6, + }; + + ret = vmware_tdx_hypercall(&args); + + if (out1) + *out1 = args.rbx; + if (out2) + *out2 = args.r13; + if (out3) + *out3 = args.rdx; + if (out4) + *out4 = args.rsi; + if (out5) + *out5 = args.rdi; + if (out6) + *out6 = args.r14; + + return ret; +} + /* * The low bandwidth call. The low word of edx is presumed to have OUT bit * set. The high word of edx may contain input data from the caller. @@ -67,6 +120,11 @@ unsigned long vmware_hypercall1(unsigned long cmd, unsigned long in1) { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, 0, 0, 0, 0, + NULL, NULL, NULL, + NULL, NULL, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0) : [port] "i" (VMWARE_HYPERVISOR_PORT), @@ -85,6 +143,11 @@ unsigned long vmware_hypercall3(unsigned long cmd, unsigned long in1, { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, 0, 0, 0, 0, + out1, out2, NULL, + NULL, NULL, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0), "=b" (*out1), "=c" (*out2) : [port] "i" (VMWARE_HYPERVISOR_PORT), @@ -104,6 +167,11 @@ unsigned long vmware_hypercall4(unsigned long cmd, unsigned long in1, { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, 0, 0, 0, 0, + out1, out2, out3, + NULL, NULL, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0), "=b" (*out1), "=c" (*out2), "=d" (*out3) : [port] "i" (VMWARE_HYPERVISOR_PORT), @@ -123,6 +191,11 @@ unsigned long vmware_hypercall5(unsigned long cmd, unsigned long in1, { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, in3, in4, in5, 0, + NULL, out2, NULL, + NULL, NULL, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0), "=c" (*out2) : [port] "i" (VMWARE_HYPERVISOR_PORT), @@ -145,6 +218,11 @@ unsigned long vmware_hypercall6(unsigned long cmd, unsigned long in1, { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, in3, 0, 0, 0, + NULL, out2, out3, + out4, out5, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0), "=c" (*out2), "=d" (*out3), "=S" (*out4), "=D" (*out5) @@ -166,6 +244,11 @@ unsigned long vmware_hypercall7(unsigned long cmd, unsigned long in1, { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, in3, in4, in5, 0, + out1, out2, out3, + NULL, NULL, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0), "=b" (*out1), "=c" (*out2), "=d" (*out3) : [port] "i" (VMWARE_HYPERVISOR_PORT), diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 3aa1adaed18f..bcf1d0fb3e89 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -428,6 +428,28 @@ static bool __init vmware_legacy_x2apic_available(void) (eax & BIT(VCPU_LEGACY_X2APIC)); } +#ifdef CONFIG_INTEL_TDX_GUEST +unsigned long vmware_tdx_hypercall(struct tdx_module_args *args) +{ + if (!hypervisor_is_type(X86_HYPER_VMWARE)) + return 0; + + if (args->r13 & ~VMWARE_CMD_MASK) { + pr_warn("Out of range command %llx\n", args->r13); + return 0; + } + + args->r10 = VMWARE_TDX_VENDOR_LEAF; + args->r11 = VMWARE_TDX_HCALL_FUNC; + args->r12 = VMWARE_HYPERVISOR_MAGIC; + + __tdx_hypercall(args); + + return args->r12; +} +EXPORT_SYMBOL_GPL(vmware_tdx_hypercall); +#endif + #ifdef CONFIG_AMD_MEM_ENCRYPT static void vmware_sev_es_hcall_prepare(struct ghcb *ghcb, struct pt_regs *regs) -- 2.39.0
WARNING: multiple messages have this Message-ID (diff)
From: Alexey Makhalov <alexey.makhalov@broadcom.com> To: linux-kernel@vger.kernel.org, virtualization@lists.linux.dev, bp@alien8.de, hpa@zytor.com, dave.hansen@linux.intel.com, mingo@redhat.com, tglx@linutronix.de Cc: dmitry.torokhov@gmail.com, tzimmermann@suse.de, pv-drivers@vmware.com, netdev@vger.kernel.org, richardcochran@gmail.com, x86@kernel.org, dri-devel@lists.freedesktop.org, horms@kernel.org, akaher@vmware.com, timothym@vmware.com, linux-graphics-maintainer@vmware.com, mripard@kernel.org, jsipek@vmware.com, linux-input@vger.kernel.org, namit@vmware.com, zackr@vmware.com Subject: [PATCH] x86/vmware: Add TDX hypercall support Date: Thu, 7 Dec 2023 18:32:33 -0800 [thread overview] Message-ID: <20231208023233.71170-1-alexey.makhalov@broadcom.com> (raw) In-Reply-To: <64074f04-fd72-488b-831a-ad744bbcd950@broadcom.com> From: Alexey Makhalov <amakhalov@vmware.com> VMware hypercalls use I/O port, VMCALL or VMMCALL instructions. Add __tdx_hypercall path to support TDX guests. No change in high bandwidth hypercalls, as only low bandwidth ones are supported for TDX guests. Co-developed-by: Tim Merrifield <timothym@vmware.com> Signed-off-by: Tim Merrifield <timothym@vmware.com> Signed-off-by: Alexey Makhalov <amakhalov@vmware.com> Reviewed-by: Nadav Amit <namit@vmware.com> --- arch/x86/include/asm/vmware.h | 83 +++++++++++++++++++++++++++++++++++ arch/x86/kernel/cpu/vmware.c | 22 ++++++++++ 2 files changed, 105 insertions(+) diff --git a/arch/x86/include/asm/vmware.h b/arch/x86/include/asm/vmware.h index 719e41260ece..04c698b905ab 100644 --- a/arch/x86/include/asm/vmware.h +++ b/arch/x86/include/asm/vmware.h @@ -34,12 +34,65 @@ #define VMWARE_CMD_GETHZ 45 #define VMWARE_CMD_GETVCPU_INFO 68 #define VMWARE_CMD_STEALCLOCK 91 +/* + * Hypercall command mask: + * bits[6:0] command, range [0, 127] + * bits[19:16] sub-command, range [0, 15] + */ +#define VMWARE_CMD_MASK 0xf007fULL #define CPUID_VMWARE_FEATURES_ECX_VMMCALL BIT(0) #define CPUID_VMWARE_FEATURES_ECX_VMCALL BIT(1) extern u8 vmware_hypercall_mode; +#define VMWARE_TDX_VENDOR_LEAF 0x1af7e4909ULL +#define VMWARE_TDX_HCALL_FUNC 1 + +extern unsigned long vmware_tdx_hypercall(struct tdx_module_args *args); + +/* + * TDCALL[TDG.VP.VMCALL] uses rax (arg0) and rcx (arg2), while the use of + * rbp (arg6) is discouraged by the TDX specification. Therefore, we + * remap those registers to r12, r13 and r14, respectively. + */ +static inline +unsigned long vmware_tdx_hypercall_args(unsigned long cmd, unsigned long in1, + unsigned long in3, unsigned long in4, + unsigned long in5, unsigned long in6, + uint32_t *out1, uint32_t *out2, + uint32_t *out3, uint32_t *out4, + uint32_t *out5, uint32_t *out6) +{ + unsigned long ret; + + struct tdx_module_args args = { + .r13 = cmd, + .rbx = in1, + .rdx = in3, + .rsi = in4, + .rdi = in5, + .r14 = in6, + }; + + ret = vmware_tdx_hypercall(&args); + + if (out1) + *out1 = args.rbx; + if (out2) + *out2 = args.r13; + if (out3) + *out3 = args.rdx; + if (out4) + *out4 = args.rsi; + if (out5) + *out5 = args.rdi; + if (out6) + *out6 = args.r14; + + return ret; +} + /* * The low bandwidth call. The low word of edx is presumed to have OUT bit * set. The high word of edx may contain input data from the caller. @@ -67,6 +120,11 @@ unsigned long vmware_hypercall1(unsigned long cmd, unsigned long in1) { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, 0, 0, 0, 0, + NULL, NULL, NULL, + NULL, NULL, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0) : [port] "i" (VMWARE_HYPERVISOR_PORT), @@ -85,6 +143,11 @@ unsigned long vmware_hypercall3(unsigned long cmd, unsigned long in1, { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, 0, 0, 0, 0, + out1, out2, NULL, + NULL, NULL, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0), "=b" (*out1), "=c" (*out2) : [port] "i" (VMWARE_HYPERVISOR_PORT), @@ -104,6 +167,11 @@ unsigned long vmware_hypercall4(unsigned long cmd, unsigned long in1, { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, 0, 0, 0, 0, + out1, out2, out3, + NULL, NULL, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0), "=b" (*out1), "=c" (*out2), "=d" (*out3) : [port] "i" (VMWARE_HYPERVISOR_PORT), @@ -123,6 +191,11 @@ unsigned long vmware_hypercall5(unsigned long cmd, unsigned long in1, { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, in3, in4, in5, 0, + NULL, out2, NULL, + NULL, NULL, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0), "=c" (*out2) : [port] "i" (VMWARE_HYPERVISOR_PORT), @@ -145,6 +218,11 @@ unsigned long vmware_hypercall6(unsigned long cmd, unsigned long in1, { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, in3, 0, 0, 0, + NULL, out2, out3, + out4, out5, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0), "=c" (*out2), "=d" (*out3), "=S" (*out4), "=D" (*out5) @@ -166,6 +244,11 @@ unsigned long vmware_hypercall7(unsigned long cmd, unsigned long in1, { unsigned long out0; + if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) + return vmware_tdx_hypercall_args(cmd, in1, in3, in4, in5, 0, + out1, out2, out3, + NULL, NULL, NULL); + asm_inline volatile (VMWARE_HYPERCALL : "=a" (out0), "=b" (*out1), "=c" (*out2), "=d" (*out3) : [port] "i" (VMWARE_HYPERVISOR_PORT), diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 3aa1adaed18f..bcf1d0fb3e89 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -428,6 +428,28 @@ static bool __init vmware_legacy_x2apic_available(void) (eax & BIT(VCPU_LEGACY_X2APIC)); } +#ifdef CONFIG_INTEL_TDX_GUEST +unsigned long vmware_tdx_hypercall(struct tdx_module_args *args) +{ + if (!hypervisor_is_type(X86_HYPER_VMWARE)) + return 0; + + if (args->r13 & ~VMWARE_CMD_MASK) { + pr_warn("Out of range command %llx\n", args->r13); + return 0; + } + + args->r10 = VMWARE_TDX_VENDOR_LEAF; + args->r11 = VMWARE_TDX_HCALL_FUNC; + args->r12 = VMWARE_HYPERVISOR_MAGIC; + + __tdx_hypercall(args); + + return args->r12; +} +EXPORT_SYMBOL_GPL(vmware_tdx_hypercall); +#endif + #ifdef CONFIG_AMD_MEM_ENCRYPT static void vmware_sev_es_hcall_prepare(struct ghcb *ghcb, struct pt_regs *regs) -- 2.39.0
next prev parent reply other threads:[~2023-12-08 2:32 UTC|newest] Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-11-22 23:30 [PATCH 0/6] VMware hypercalls enhancements Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-22 23:30 ` [PATCH 1/6] x86/vmware: Move common macros to vmware.h Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-22 23:30 ` [PATCH 2/6] x86/vmware: Introduce vmware_hypercall API Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-22 23:30 ` [PATCH 3/6] ptp/vmware: Use " Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-22 23:30 ` [PATCH 4/6] input/vmmouse: " Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-24 19:46 ` Simon Horman 2023-11-24 19:46 ` Simon Horman 2023-11-25 1:22 ` Alexey Makhalov 2023-11-25 1:22 ` Alexey Makhalov 2023-11-25 4:58 ` dmitry.torokhov 2023-11-25 4:58 ` dmitry.torokhov 2023-11-25 5:01 ` Dmitry Torokhov 2023-11-25 5:01 ` Dmitry Torokhov 2023-11-22 23:30 ` [PATCH 5/6] drm/vmwgfx: " Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-22 23:30 ` [PATCH 6/6] x86/vmware: Add TDX hypercall support Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-22 23:30 ` [PATCH 0/6] VMware hypercalls enhancements Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-12-01 23:24 ` [PATCH v2 " Alexey Makhalov 2023-12-01 23:24 ` Alexey Makhalov 2023-12-01 23:24 ` [PATCH v2 1/6] x86/vmware: Move common macros to vmware.h Alexey Makhalov 2023-12-01 23:24 ` Alexey Makhalov 2023-12-04 10:32 ` Borislav Petkov 2023-12-04 10:32 ` Borislav Petkov 2023-12-01 23:24 ` [PATCH v2 2/6] x86/vmware: Introduce vmware_hypercall API Alexey Makhalov 2023-12-01 23:24 ` Alexey Makhalov 2023-12-04 10:35 ` Borislav Petkov 2023-12-04 10:35 ` Borislav Petkov 2023-12-01 23:24 ` [PATCH v2 3/6] ptp/vmware: Use " Alexey Makhalov 2023-12-01 23:24 ` Alexey Makhalov 2023-12-01 23:24 ` [PATCH v2 4/6] input/vmmouse: " Alexey Makhalov 2023-12-01 23:24 ` Alexey Makhalov 2023-12-01 23:24 ` [PATCH v2 5/6] drm/vmwgfx: " Alexey Makhalov 2023-12-01 23:24 ` Alexey Makhalov 2023-12-05 20:27 ` Borislav Petkov 2023-12-05 20:27 ` Borislav Petkov 2023-12-05 21:18 ` Alexey Makhalov 2023-12-05 21:18 ` Alexey Makhalov 2023-12-01 23:24 ` [PATCH v2 6/6] x86/vmware: Add TDX hypercall support Alexey Makhalov 2023-12-01 23:24 ` Alexey Makhalov 2023-12-04 10:31 ` Borislav Petkov 2023-12-04 10:31 ` Borislav Petkov 2023-12-05 21:24 ` Dave Hansen 2023-12-05 21:24 ` Dave Hansen 2023-12-05 21:41 ` Alexey Makhalov 2023-12-05 21:41 ` Alexey Makhalov 2023-12-05 22:43 ` Tim Merrifield 2023-12-05 22:43 ` Tim Merrifield 2023-12-05 23:03 ` Dave Hansen 2023-12-05 23:03 ` Dave Hansen 2023-12-06 0:11 ` Alexey Makhalov 2023-12-06 0:11 ` Alexey Makhalov 2023-12-06 7:15 ` [PATCH] " Alexey Makhalov 2023-12-06 7:15 ` Alexey Makhalov 2023-12-07 17:12 ` Dave Hansen 2023-12-07 17:12 ` Dave Hansen 2023-12-08 2:27 ` Alexey Makhalov 2023-12-08 2:27 ` Alexey Makhalov 2023-12-08 2:32 ` Alexey Makhalov [this message] 2023-12-08 2:32 ` Alexey Makhalov 2023-12-05 19:57 ` [PATCH v2 6/6] " kernel test robot 2023-12-05 19:57 ` kernel test robot 2023-12-05 21:04 ` kernel test robot 2023-12-05 21:04 ` kernel test robot 2023-11-22 23:30 ` [PATCH 1/6] x86/vmware: Move common macros to vmware.h Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-22 23:30 ` [PATCH 2/6] x86/vmware: Introduce vmware_hypercall API Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-22 23:30 ` [PATCH 3/6] ptp/vmware: Use " Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-22 23:30 ` [PATCH 4/6] input/vmmouse: " Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-22 23:30 ` [PATCH 5/6] drm/vmwgfx: " Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov 2023-11-22 23:30 ` [PATCH 6/6] x86/vmware: Add TDX hypercall support Alexey Makhalov 2023-11-22 23:30 ` Alexey Makhalov
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=20231208023233.71170-1-alexey.makhalov@broadcom.com \ --to=alexey.makhalov@broadcom.com \ --cc=airlied@gmail.com \ --cc=akaher@vmware.com \ --cc=bp@alien8.de \ --cc=daniel@ffwll.ch \ --cc=dave.hansen@linux.intel.com \ --cc=dmitry.torokhov@gmail.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=horms@kernel.org \ --cc=hpa@zytor.com \ --cc=jsipek@vmware.com \ --cc=linux-graphics-maintainer@vmware.com \ --cc=linux-input@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=maarten.lankhorst@linux.intel.com \ --cc=mingo@redhat.com \ --cc=mripard@kernel.org \ --cc=namit@vmware.com \ --cc=netdev@vger.kernel.org \ --cc=pv-drivers@vmware.com \ --cc=richardcochran@gmail.com \ --cc=tglx@linutronix.de \ --cc=timothym@vmware.com \ --cc=tzimmermann@suse.de \ --cc=virtualization@lists.linux.dev \ --cc=x86@kernel.org \ --cc=zackr@vmware.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: linkBe 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.