From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Glauber de Oliveira Costa <gcosta@redhat.com>
Cc: linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
rusty@rustcorp.com.au, ak@suse.de, mingo@elte.hu,
chrisw@sous-sol.org, avi@qumranet.com, anthony@codemonkey.ws,
virtualization@lists.linux-foundation.org, lguest@ozlabs.org,
kvm-devel@lists.sourceforge.net, zach@vmware.com,
tglx@linutronix.de, jun.nakajima@intel.com, glommer@gmail.com,
Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [PATCH 16/16] make vsmp a paravirt client
Date: Wed, 31 Oct 2007 21:38:30 -0700 [thread overview]
Message-ID: <47295846.8000700@goop.org> (raw)
In-Reply-To: <1193858187364-git-send-email-gcosta@redhat.com>
Glauber de Oliveira Costa wrote:
> This patch makes vsmp a paravirt client. It now uses the whole
> infrastructure provided by pvops. When we detect we're running
> a vsmp box, we change the irq-related paravirt operations (and so,
> it have to happen quite early), and the patching function
>
> Signed-off-by: Glauber de Oliveira Costa <gcosta@redhat.com>
> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
> Acked-by: Jeremy Fitzhardinge <jeremy@xensource.com>
> ---
> arch/x86/Kconfig.x86_64 | 3 +-
> arch/x86/kernel/setup_64.c | 3 ++
> arch/x86/kernel/vsmp_64.c | 72 +++++++++++++++++++++++++++++++++++++++----
> include/asm-x86/setup.h | 3 +-
> 4 files changed, 71 insertions(+), 10 deletions(-)
>
> diff --git a/arch/x86/Kconfig.x86_64 b/arch/x86/Kconfig.x86_64
> index 04734dd..544bad5 100644
> --- a/arch/x86/Kconfig.x86_64
> +++ b/arch/x86/Kconfig.x86_64
> @@ -148,15 +148,14 @@ config X86_PC
> bool "PC-compatible"
> help
> Choose this option if your computer is a standard PC or compatible.
> -
> config X86_VSMP
> bool "Support for ScaleMP vSMP"
> depends on PCI
> + select PARAVIRT
> help
> Support for ScaleMP vSMP systems. Say 'Y' here if this kernel is
> supposed to run on these EM64T-based machines. Only choose this option
> if you have one of these machines.
> -
> endchoice
>
> choice
> diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c
> index 44a11e3..c522549 100644
> --- a/arch/x86/kernel/setup_64.c
> +++ b/arch/x86/kernel/setup_64.c
> @@ -335,6 +335,9 @@ void __init setup_arch(char **cmdline_p)
>
> init_memory_mapping(0, (end_pfn_map << PAGE_SHIFT));
>
> +#ifdef CONFIG_VSMP
> + vsmp_init();
> +#endif
> dmi_scan_machine();
>
> #ifdef CONFIG_SMP
> diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c
> index 414caf0..547d3b3 100644
> --- a/arch/x86/kernel/vsmp_64.c
> +++ b/arch/x86/kernel/vsmp_64.c
> @@ -8,18 +8,70 @@
> *
> * Ravikiran Thirumalai <kiran@scalemp.com>,
> * Shai Fultheim <shai@scalemp.com>
> + * Paravirt ops integration: Glauber de Oliveira Costa <gcosta@redhat.com>
> */
> -
> #include <linux/init.h>
> #include <linux/pci_ids.h>
> #include <linux/pci_regs.h>
> #include <asm/pci-direct.h>
> #include <asm/io.h>
> +#include <asm/paravirt.h>
> +
> +/*
> + * Interrupt control for the VSMP architecture:
> + */
> +
> +static inline unsigned long vsmp_save_fl(void)
>
No point being inline.
> +{
> + unsigned long flags = native_save_fl();
> +
> + if (flags & X86_EFLAGS_IF)
> + return X86_EFLAGS_IF;
>
Is this right, or should the if be testing _AC? Otherwise, why not just
"return flags & X86_EFLAGS_IF"?
> + return 0;
> +}
>
> -static int __init vsmp_init(void)
> +static inline void vsmp_restore_fl(unsigned long flags)
> +{
> + if (flags & X86_EFLAGS_IF)
> + flags &= ~X86_EFLAGS_AC;
> + if (!(flags & X86_EFLAGS_IF))
> + flags &= X86_EFLAGS_AC;
>
Just use "else"?
> + native_restore_fl(flags);
> +}
> +
> +static inline void vsmp_irq_disable(void)
> +{
> + unsigned long flags = native_save_fl();
> +
> + vsmp_restore_fl((flags & ~X86_EFLAGS_IF));
>
((double paren?))
> +}
> +
> +static inline void vsmp_irq_enable(void)
> +{
> + unsigned long flags = native_save_fl();
> +
> + vsmp_restore_fl((flags | X86_EFLAGS_IF));
> +}
> +
> +static unsigned __init vsmp_patch(u8 type, u16 clobbers, void *ibuf,
> + unsigned long addr, unsigned len)
> +{
> + switch (type) {
> + case PARAVIRT_PATCH(pv_irq_ops.irq_enable):
> + case PARAVIRT_PATCH(pv_irq_ops.irq_disable):
> + case PARAVIRT_PATCH(pv_irq_ops.save_fl):
> + case PARAVIRT_PATCH(pv_irq_ops.restore_fl):
> + return paravirt_patch_default(type, clobbers, ibuf, addr, len);
> + default:
> + return native_patch(type, clobbers, ibuf, addr, len);
> + }
> +
> +}
> +
> +int __init vsmp_init(void)
> {
> void *address;
> - unsigned int cap, ctl;
> + unsigned int cap, ctl, cfg;
>
> if (!early_pci_allowed())
> return 0;
> @@ -29,8 +81,16 @@ static int __init vsmp_init(void)
> (read_pci_config_16(0, 0x1f, 0, PCI_DEVICE_ID) != PCI_DEVICE_ID_SCALEMP_VSMP_CTL))
> return 0;
>
> + /* If we are, use the distinguished irq functions */
> + pv_irq_ops.irq_disable = vsmp_irq_disable;
> + pv_irq_ops.irq_enable = vsmp_irq_enable;
> + pv_irq_ops.save_fl = vsmp_save_fl;
> + pv_irq_ops.restore_fl = vsmp_restore_fl;
> + pv_init_ops.patch = vsmp_patch;
> +
> /* set vSMP magic bits to indicate vSMP capable kernel */
> - address = ioremap(read_pci_config(0, 0x1f, 0, PCI_BASE_ADDRESS_0), 8);
> + cfg = read_pci_config(0, 0x1f, 0, PCI_BASE_ADDRESS_0);
> + address = early_ioremap(cfg, 8);
> cap = readl(address);
> ctl = readl(address + 4);
> printk("vSMP CTL: capabilities:0x%08x control:0x%08x\n", cap, ctl);
> @@ -42,8 +102,6 @@ static int __init vsmp_init(void)
> printk("vSMP CTL: control set to:0x%08x\n", ctl);
> }
>
> - iounmap(address);
> + early_iounmap(address, 8);
> return 0;
> }
> -
> -core_initcall(vsmp_init);
> diff --git a/include/asm-x86/setup.h b/include/asm-x86/setup.h
> index 071e054..dd7996c 100644
> --- a/include/asm-x86/setup.h
> +++ b/include/asm-x86/setup.h
> @@ -58,7 +58,8 @@ void __init add_memory_region(unsigned long long start,
>
> extern unsigned long init_pg_tables_end;
>
> -
> +/* For EM64T-based VSMP machines */
> +int vsmp_init(void);
>
> #endif /* __i386__ */
> #endif /* _SETUP */
>
WARNING: multiple messages have this Message-ID (diff)
From: Jeremy Fitzhardinge <jeremy-TSDbQ3PG+2Y@public.gmane.org>
To: Glauber de Oliveira Costa
<gcosta-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: zach-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org,
lguest-mnsaURCQ41sdnm+yROfE0A@public.gmane.org,
kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org,
ak-l3A5Bk7waGM@public.gmane.org,
akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org,
virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
Subject: Re: [PATCH 16/16] make vsmp a paravirt client
Date: Wed, 31 Oct 2007 21:38:30 -0700 [thread overview]
Message-ID: <47295846.8000700@goop.org> (raw)
In-Reply-To: <1193858187364-git-send-email-gcosta-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Glauber de Oliveira Costa wrote:
> This patch makes vsmp a paravirt client. It now uses the whole
> infrastructure provided by pvops. When we detect we're running
> a vsmp box, we change the irq-related paravirt operations (and so,
> it have to happen quite early), and the patching function
>
> Signed-off-by: Glauber de Oliveira Costa <gcosta-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> Signed-off-by: Steven Rostedt <rostedt-nx8X9YLhiw1AfugRpC6u6w@public.gmane.org>
> Acked-by: Jeremy Fitzhardinge <jeremy-8XJ3FbD+ij9l57MIdRCFDg@public.gmane.org>
> ---
> arch/x86/Kconfig.x86_64 | 3 +-
> arch/x86/kernel/setup_64.c | 3 ++
> arch/x86/kernel/vsmp_64.c | 72 +++++++++++++++++++++++++++++++++++++++----
> include/asm-x86/setup.h | 3 +-
> 4 files changed, 71 insertions(+), 10 deletions(-)
>
> diff --git a/arch/x86/Kconfig.x86_64 b/arch/x86/Kconfig.x86_64
> index 04734dd..544bad5 100644
> --- a/arch/x86/Kconfig.x86_64
> +++ b/arch/x86/Kconfig.x86_64
> @@ -148,15 +148,14 @@ config X86_PC
> bool "PC-compatible"
> help
> Choose this option if your computer is a standard PC or compatible.
> -
> config X86_VSMP
> bool "Support for ScaleMP vSMP"
> depends on PCI
> + select PARAVIRT
> help
> Support for ScaleMP vSMP systems. Say 'Y' here if this kernel is
> supposed to run on these EM64T-based machines. Only choose this option
> if you have one of these machines.
> -
> endchoice
>
> choice
> diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c
> index 44a11e3..c522549 100644
> --- a/arch/x86/kernel/setup_64.c
> +++ b/arch/x86/kernel/setup_64.c
> @@ -335,6 +335,9 @@ void __init setup_arch(char **cmdline_p)
>
> init_memory_mapping(0, (end_pfn_map << PAGE_SHIFT));
>
> +#ifdef CONFIG_VSMP
> + vsmp_init();
> +#endif
> dmi_scan_machine();
>
> #ifdef CONFIG_SMP
> diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c
> index 414caf0..547d3b3 100644
> --- a/arch/x86/kernel/vsmp_64.c
> +++ b/arch/x86/kernel/vsmp_64.c
> @@ -8,18 +8,70 @@
> *
> * Ravikiran Thirumalai <kiran-Yzr3oMT/Kq5BDgjK7y7TUQ@public.gmane.org>,
> * Shai Fultheim <shai-Yzr3oMT/Kq5BDgjK7y7TUQ@public.gmane.org>
> + * Paravirt ops integration: Glauber de Oliveira Costa <gcosta-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> */
> -
> #include <linux/init.h>
> #include <linux/pci_ids.h>
> #include <linux/pci_regs.h>
> #include <asm/pci-direct.h>
> #include <asm/io.h>
> +#include <asm/paravirt.h>
> +
> +/*
> + * Interrupt control for the VSMP architecture:
> + */
> +
> +static inline unsigned long vsmp_save_fl(void)
>
No point being inline.
> +{
> + unsigned long flags = native_save_fl();
> +
> + if (flags & X86_EFLAGS_IF)
> + return X86_EFLAGS_IF;
>
Is this right, or should the if be testing _AC? Otherwise, why not just
"return flags & X86_EFLAGS_IF"?
> + return 0;
> +}
>
> -static int __init vsmp_init(void)
> +static inline void vsmp_restore_fl(unsigned long flags)
> +{
> + if (flags & X86_EFLAGS_IF)
> + flags &= ~X86_EFLAGS_AC;
> + if (!(flags & X86_EFLAGS_IF))
> + flags &= X86_EFLAGS_AC;
>
Just use "else"?
> + native_restore_fl(flags);
> +}
> +
> +static inline void vsmp_irq_disable(void)
> +{
> + unsigned long flags = native_save_fl();
> +
> + vsmp_restore_fl((flags & ~X86_EFLAGS_IF));
>
((double paren?))
> +}
> +
> +static inline void vsmp_irq_enable(void)
> +{
> + unsigned long flags = native_save_fl();
> +
> + vsmp_restore_fl((flags | X86_EFLAGS_IF));
> +}
> +
> +static unsigned __init vsmp_patch(u8 type, u16 clobbers, void *ibuf,
> + unsigned long addr, unsigned len)
> +{
> + switch (type) {
> + case PARAVIRT_PATCH(pv_irq_ops.irq_enable):
> + case PARAVIRT_PATCH(pv_irq_ops.irq_disable):
> + case PARAVIRT_PATCH(pv_irq_ops.save_fl):
> + case PARAVIRT_PATCH(pv_irq_ops.restore_fl):
> + return paravirt_patch_default(type, clobbers, ibuf, addr, len);
> + default:
> + return native_patch(type, clobbers, ibuf, addr, len);
> + }
> +
> +}
> +
> +int __init vsmp_init(void)
> {
> void *address;
> - unsigned int cap, ctl;
> + unsigned int cap, ctl, cfg;
>
> if (!early_pci_allowed())
> return 0;
> @@ -29,8 +81,16 @@ static int __init vsmp_init(void)
> (read_pci_config_16(0, 0x1f, 0, PCI_DEVICE_ID) != PCI_DEVICE_ID_SCALEMP_VSMP_CTL))
> return 0;
>
> + /* If we are, use the distinguished irq functions */
> + pv_irq_ops.irq_disable = vsmp_irq_disable;
> + pv_irq_ops.irq_enable = vsmp_irq_enable;
> + pv_irq_ops.save_fl = vsmp_save_fl;
> + pv_irq_ops.restore_fl = vsmp_restore_fl;
> + pv_init_ops.patch = vsmp_patch;
> +
> /* set vSMP magic bits to indicate vSMP capable kernel */
> - address = ioremap(read_pci_config(0, 0x1f, 0, PCI_BASE_ADDRESS_0), 8);
> + cfg = read_pci_config(0, 0x1f, 0, PCI_BASE_ADDRESS_0);
> + address = early_ioremap(cfg, 8);
> cap = readl(address);
> ctl = readl(address + 4);
> printk("vSMP CTL: capabilities:0x%08x control:0x%08x\n", cap, ctl);
> @@ -42,8 +102,6 @@ static int __init vsmp_init(void)
> printk("vSMP CTL: control set to:0x%08x\n", ctl);
> }
>
> - iounmap(address);
> + early_iounmap(address, 8);
> return 0;
> }
> -
> -core_initcall(vsmp_init);
> diff --git a/include/asm-x86/setup.h b/include/asm-x86/setup.h
> index 071e054..dd7996c 100644
> --- a/include/asm-x86/setup.h
> +++ b/include/asm-x86/setup.h
> @@ -58,7 +58,8 @@ void __init add_memory_region(unsigned long long start,
>
> extern unsigned long init_pg_tables_end;
>
> -
> +/* For EM64T-based VSMP machines */
> +int vsmp_init(void);
>
> #endif /* __i386__ */
> #endif /* _SETUP */
>
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
next prev parent reply other threads:[~2007-11-01 4:38 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-31 19:14 [PATCH 0/7] (Re-)introducing pvops for x86_64 - Real pvops work part Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 1/16] Wipe out traditional opt from x86_64 Makefile Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 2/16] paravirt hooks at entry functions Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 3/16] read/write_crX, clts and wbinvd for 64-bit paravirt Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 4/16] provide native irq initialization function Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 5/16] report ring kernel is running without paravirt Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 6/16] export math_state_restore Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 7/16] native versions for set pagetables Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 8/16] add native functions for descriptors handling Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 9/16] This patch add provisions for time related functions so they Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 10/16] export cpu_gdt_descr Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 11/16] turn priviled operation into a macro in head_64.S Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 12/16] tweak io_64.h for paravirt Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 13/16] native versions for page table entries values Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 14/16] prepare x86_64 architecture initialization for paravirt Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:14 ` Glauber de Oliveira Costa
2007-10-31 19:15 ` [PATCH 15/16] consolidation of paravirt for 32 and 64 bits Glauber de Oliveira Costa
2007-10-31 19:15 ` Glauber de Oliveira Costa
2007-10-31 19:15 ` Glauber de Oliveira Costa
2007-10-31 19:15 ` [PATCH 16/16] make vsmp a paravirt client Glauber de Oliveira Costa
2007-10-31 19:15 ` Glauber de Oliveira Costa
2007-10-31 19:15 ` Glauber de Oliveira Costa
2007-11-01 4:38 ` Jeremy Fitzhardinge
2007-11-01 4:38 ` Jeremy Fitzhardinge [this message]
2007-11-01 4:38 ` Jeremy Fitzhardinge
2007-10-31 19:14 ` [PATCH 12/16] tweak io_64.h for paravirt Glauber de Oliveira Costa
2007-11-01 4:50 ` [PATCH 11/16] turn priviled operation into a macro in head_64.S Jeremy Fitzhardinge
2007-11-01 4:50 ` Jeremy Fitzhardinge
2007-11-01 13:50 ` Glauber de Oliveira Costa
2007-11-01 13:50 ` Glauber de Oliveira Costa
2007-11-01 13:50 ` Glauber de Oliveira Costa
2007-11-01 4:50 ` Jeremy Fitzhardinge
2007-10-31 19:14 ` [PATCH 7/16] native versions for set pagetables Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 5/16] report ring kernel is running without paravirt Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 4/16] provide native irq initialization function Glauber de Oliveira Costa
2007-11-01 4:48 ` [PATCH 3/16] read/write_crX, clts and wbinvd for 64-bit paravirt Jeremy Fitzhardinge
2007-11-01 4:48 ` Jeremy Fitzhardinge
2007-11-01 4:48 ` Jeremy Fitzhardinge
2007-11-01 13:48 ` Glauber de Oliveira Costa
2007-11-01 13:48 ` Glauber de Oliveira Costa
2007-11-01 13:48 ` Glauber de Oliveira Costa
2007-11-01 15:30 ` Jeremy Fitzhardinge
2007-11-01 15:30 ` Jeremy Fitzhardinge
2007-11-01 16:07 ` Keir Fraser
2007-11-01 16:07 ` Keir Fraser
2007-11-01 16:07 ` Keir Fraser
2007-11-01 16:13 ` Glauber de Oliveira Costa
2007-11-01 16:13 ` Glauber de Oliveira Costa
2007-11-01 16:13 ` Glauber de Oliveira Costa
2007-11-01 17:41 ` Jeremy Fitzhardinge
2007-11-01 17:41 ` Jeremy Fitzhardinge
2007-11-01 17:41 ` Jeremy Fitzhardinge
2007-11-01 16:55 ` [Lguest] " Zachary Amsden
2007-11-01 16:55 ` Zachary Amsden
2007-11-01 16:55 ` Zachary Amsden
2007-11-02 1:21 ` [Lguest] " Jeremy Fitzhardinge
2007-11-02 1:21 ` Jeremy Fitzhardinge
2007-11-02 1:21 ` Jeremy Fitzhardinge
2007-11-01 15:30 ` Jeremy Fitzhardinge
2007-10-31 19:14 ` [PATCH 2/16] paravirt hooks at entry functions Glauber de Oliveira Costa
2007-10-31 19:14 ` [PATCH 1/16] Wipe out traditional opt from x86_64 Makefile Glauber de Oliveira Costa
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=47295846.8000700@goop.org \
--to=jeremy@goop.org \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=anthony@codemonkey.ws \
--cc=avi@qumranet.com \
--cc=chrisw@sous-sol.org \
--cc=gcosta@redhat.com \
--cc=glommer@gmail.com \
--cc=jun.nakajima@intel.com \
--cc=kvm-devel@lists.sourceforge.net \
--cc=lguest@ozlabs.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.org \
--cc=rusty@rustcorp.com.au \
--cc=tglx@linutronix.de \
--cc=virtualization@lists.linux-foundation.org \
--cc=zach@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: 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.