mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Yinghai Lu <yinghai@kernel.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>,
	Shuah Khan <shuahkhan@gmail.com>,
	Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Borislav Petkov <bp@alien8.de>, Jan Kiszka <jan.kiszka@web.de>,
	Jason Wessel <jason.wessel@windriver.com>,
	linux-kernel@vger.kernel.org, Joerg Roedel <joro@8bytes.org>
Subject: Re: [PATCH v7u1 26/31] x86: Don't enable swiotlb if there is not enough ram for it
Date: Wed, 9 Jan 2013 08:24:09 -0500	[thread overview]
Message-ID: <20130109132409.GB18395@phenom.dumpdata.com> (raw)
In-Reply-To: <CAE9FiQVomDtc0P9B7aTDBrm7kC+i=GYokBmT54w-VBwZsafb5g@mail.gmail.com>

On Tue, Jan 08, 2013 at 05:12:02PM -0800, Yinghai Lu wrote:
> On Tue, Jan 8, 2013 at 5:07 PM, Yinghai Lu <yinghai@kernel.org> wrote:
> > On Tue, Jan 8, 2013 at 4:58 PM, Eric W. Biederman <ebiederm@xmission.com> wrote:
> >
> >>
> >> So instead we need to say?
> >>
> >> +       if (no_iotlb_memory)
> >> +               panic("Cannot allocate SWIOTLB buffer");
> >> +
> >>
> >> Which is just making the panic a little later than it used to be and
> >> seems completely reasonable.
> >
> > yes, looks some driver just use map_single without checking results.
> 
> update one.

Please make it inline.

Anyhow, comments:

> Subject: [PATCH] x86: Don't panic if can not alloc buffer for swiotlb
> 
> Normal boot path on system with iommu support:
> swiotlb buffer will be allocated early at first and then try to initialize
> iommu, if iommu for intel or amd could setup properly, swiotlb buffer

Intel or AMD
> will be freed.
> 
> The early allocating is with bootmem, and could panic when we try to use
> kdump with buffer above 4G only, or with memmap to limit mem under 4G.

Can you provide the memmap example in here, please.

> 
> According to Eric, add _nopanic version and no_iotlb_memory to fail
> map single later if swiotlb is still needed.
> 
> -v2: don't pass nopanic, and use -ENOMEM return value according to Eric.
>      panic early instead of using swiotlb_full to panic...according to Eric/Konrad.
> 
> Suggested-by: Eric W. Biederman <ebiederm@xmission.com>
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Cc: Joerg Roedel <joro@8bytes.org>
> 
> ---
>  arch/x86/kernel/pci-swiotlb.c |    2 -
>  include/linux/swiotlb.h       |    1 
>  lib/swiotlb.c                 |   54 +++++++++++++++++++++++++++++++++++-------
>  3 files changed, 47 insertions(+), 10 deletions(-)
> 
> Index: linux-2.6/include/linux/swiotlb.h
> ===================================================================
> --- linux-2.6.orig/include/linux/swiotlb.h
> +++ linux-2.6/include/linux/swiotlb.h
> @@ -22,6 +22,7 @@ extern int swiotlb_force;
>   */
>  #define IO_TLB_SHIFT 11
>  
> +void swiotlb_init_nopanic(int verbose);

No need for that, lets just use the swiotlb_init version.

>  extern void swiotlb_init(int verbose);
>  extern void swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose);
>  extern unsigned long swiotlb_nr_tbl(void);
> Index: linux-2.6/lib/swiotlb.c
> ===================================================================
> --- linux-2.6.orig/lib/swiotlb.c
> +++ linux-2.6/lib/swiotlb.c
> @@ -122,11 +122,18 @@ static dma_addr_t swiotlb_virt_to_bus(st
>  	return phys_to_dma(hwdev, virt_to_phys(address));
>  }
>  
> +static bool no_iotlb_memory;
> +
>  void swiotlb_print_info(void)
>  {
>  	unsigned long bytes = io_tlb_nslabs << IO_TLB_SHIFT;
>  	unsigned char *vstart, *vend;
>  
> +	if (no_iotlb_memory) {
> +		printk(KERN_INFO "software IO TLB: No low mem\n");

KERN_ERROR or KERN_WARN

> +		return;
> +	}
> +
>  	vstart = phys_to_virt(io_tlb_start);
>  	vend = phys_to_virt(io_tlb_end);
>  
> @@ -136,7 +143,8 @@ void swiotlb_print_info(void)
>  	       bytes >> 20, vstart, vend - 1);
>  }
>  
> -void __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
> +static int __init __swiotlb_init_with_tbl(char *tlb, unsigned long nslabs,
> +				 int verbose)

Collapse it in. Meaning make swiotlb_init_with_tbl return an int. This will
require altering the Xen version of Xen-SWIOTLB but that should be fairly easy.


>  {
>  	void *v_overflow_buffer;
>  	unsigned long i, bytes;
> @@ -150,9 +158,10 @@ void __init swiotlb_init_with_tbl(char *
>  	/*
>  	 * Get the overflow emergency buffer
>  	 */
> -	v_overflow_buffer = alloc_bootmem_low_pages(PAGE_ALIGN(io_tlb_overflow));
> +	v_overflow_buffer = alloc_bootmem_low_pages_nopanic(
> +						PAGE_ALIGN(io_tlb_overflow));
>  	if (!v_overflow_buffer)
> -		panic("Cannot allocate SWIOTLB overflow buffer!\n");
> +		return -ENOMEM;
>  
>  	io_tlb_overflow_buffer = __pa(v_overflow_buffer);
>  
> @@ -169,14 +178,22 @@ void __init swiotlb_init_with_tbl(char *
>  
>  	if (verbose)
>  		swiotlb_print_info();
> +
> +	return 0;
> +}
> +
> +void __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
> +{
> +	if (__swiotlb_init_with_tbl(tlb, nslabs, verbose) == -ENOMEM)
> +		panic("Cannot allocate SWIOTLB buffer");

And that way we can get rid of this.

>  }
>  
>  /*
>   * Statically reserve bounce buffer space and initialize bounce buffer data
>   * structures for the software IO TLB used to implement the DMA API.
>   */
> -static void __init
> -swiotlb_init_with_default_size(size_t default_size, int verbose)
> +static  __init
> +int swiotlb_init_with_default_size(size_t default_size, int verbose)
>  {
>  	unsigned char *vstart;
>  	unsigned long bytes;
> @@ -191,17 +208,33 @@ swiotlb_init_with_default_size(size_t de
>  	/*
>  	 * Get IO TLB memory from the low pages
>  	 */
> -	vstart = alloc_bootmem_low_pages(PAGE_ALIGN(bytes));
> +	vstart = alloc_bootmem_low_pages_nopanic(PAGE_ALIGN(bytes));
>  	if (!vstart)
> -		panic("Cannot allocate SWIOTLB buffer");
> +		return -ENOMEM;
>  
> -	swiotlb_init_with_tbl(vstart, io_tlb_nslabs, verbose);
> +	if (__swiotlb_init_with_tbl(vstart, io_tlb_nslabs, verbose) == -ENOMEM) {
> +		free_bootmem(io_tlb_start,
> +				     PAGE_ALIGN(io_tlb_nslabs << IO_TLB_SHIFT));
> +		return -ENOMEM;
> +	}
> +
> +	return 0;
> +}
> +
> +void __init
> +swiotlb_init_nopanic(int verbose)
> +{
> +	/* default to 64MB */
> +	if (swiotlb_init_with_default_size(64 * (1<<20), verbose) == -ENOMEM)
> +		pr_warn("Cannot allocate SWIOTLB buffer");
>  }

And this
>  
>  void __init
>  swiotlb_init(int verbose)
>  {
> -	swiotlb_init_with_default_size(64 * (1<<20), verbose);	/* default to 64MB */
> +	/* default to 64MB */
> +	if (swiotlb_init_with_default_size(64 * (1<<20), verbose) == -ENOMEM)
> +		panic("Cannot allocate SWIOTLB buffer");
>  }

And just make this function return 'int'
>  
>  /*
> @@ -405,6 +438,9 @@ phys_addr_t swiotlb_tbl_map_single(struc
>  	unsigned long offset_slots;
>  	unsigned long max_slots;
>  
> +	if (no_iotlb_memory)
> +		panic("Cannot allocate SWIOTLB buffer");
> +
>  	mask = dma_get_seg_boundary(hwdev);
>  
>  	tbl_dma_addr &= mask;
> Index: linux-2.6/arch/x86/kernel/pci-swiotlb.c
> ===================================================================
> --- linux-2.6.orig/arch/x86/kernel/pci-swiotlb.c
> +++ linux-2.6/arch/x86/kernel/pci-swiotlb.c
> @@ -91,7 +91,7 @@ IOMMU_INIT(pci_swiotlb_detect_4gb,
>  void __init pci_swiotlb_init(void)
>  {
>  	if (swiotlb) {
> -		swiotlb_init(0);
> +		swiotlb_init_nopanic(0);
>  		dma_ops = &swiotlb_dma_ops;
>  	}
>  }

  parent reply	other threads:[~2013-01-09 13:24 UTC|newest]

Thread overview: 199+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-04  0:48 [PATCH v7u1 00/31] x86, boot, 64bit: Add support for loading ramdisk and bzImage above 4G Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 01/31] x86, mm: Fix page table early allocation offset checking Yinghai Lu
2013-01-04  7:17   ` Borislav Petkov
2013-01-04 21:50     ` Yinghai Lu
2013-01-05 13:05       ` Borislav Petkov
2013-01-15 12:27   ` Stefano Stabellini
2013-01-04  0:48 ` [PATCH v7u1 02/31] x86, 64bit, mm: make pgd next calculation consistent with pud/pmd Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 03/31] x86, realmode: set real_mode permissions early Yinghai Lu
2013-01-04 20:15   ` Borislav Petkov
2013-01-04 20:58     ` Yinghai Lu
2013-01-04 21:04       ` Borislav Petkov
2013-01-04 22:13         ` Yinghai Lu
2013-01-05 13:25           ` Borislav Petkov
2013-01-07 12:40             ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 04/31] x86, 64bit, mm: add generic kernel/ident mapping helper Yinghai Lu
2013-01-04 21:19   ` Borislav Petkov
2013-01-04 22:19     ` Yinghai Lu
2013-01-05 13:21       ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 05/31] x86, 64bit: copy zero-page early Yinghai Lu
2013-01-07 15:53   ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 06/31] x86, 64bit, realmode: use init_level4_pgt to set trapmoline_pgt directly Yinghai Lu
2013-01-04 17:18   ` Sakkinen, Jarkko
2013-01-04 22:01     ` Yinghai Lu
2013-01-05  9:59       ` Sakkinen, Jarkko
2013-01-07 15:54   ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 07/31] x86, realmode: Separate real_mode reserve and setup Yinghai Lu
2013-01-04 17:18   ` Sakkinen, Jarkko
2013-01-07 15:54   ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 08/31] x86, 64bit: early #PF handler set page table Yinghai Lu
2013-01-07 15:55   ` Borislav Petkov
2013-01-10  1:56     ` Yinghai Lu
2013-01-10 12:19       ` Borislav Petkov
2013-01-10 17:05         ` Yinghai Lu
2013-01-10 20:27           ` Borislav Petkov
2013-01-12 22:04             ` H. Peter Anvin
2013-01-04  0:48 ` [PATCH v7u1 09/31] x86, 64bit: #PF handler set page to cover 2M only Yinghai Lu
2013-01-09 22:57   ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 10/31] x86, 64bit: Don't set max_pfn_mapped wrong value early on native path Yinghai Lu
2013-01-11 12:13   ` Borislav Petkov
2013-01-11 16:42     ` Yinghai Lu
2013-01-11 16:52       ` Borislav Petkov
2013-01-15 13:48   ` Stefano Stabellini
2013-01-15 15:22     ` Konrad Rzeszutek Wilk
2013-01-15 15:59       ` Stefano Stabellini
2013-01-15 16:37     ` Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 11/31] x86: Merge early_reserve_initrd for 32bit and 64bit Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 12/31] x86: add get_ramdisk_image/size() Yinghai Lu
2013-01-07 15:56   ` Borislav Petkov
2013-01-10  1:53     ` Yinghai Lu
2013-01-10 12:13       ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 13/31] x86, boot: add get_cmd_line_ptr() Yinghai Lu
2013-01-07 15:56   ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 14/31] x86, boot: move checking of cmd_line_ptr out of common path Yinghai Lu
2013-01-07 16:00   ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 15/31] x86, boot: pass cmd_line_ptr with unsigned long instead Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 16/31] x86, boot: move verify_cpu.S and no_longmode down Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 17/31] x86, boot: Move lldt/ltr out of 64bit code section Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 18/31] x86, kexec: remove 1024G limitation for kexec buffer on 64bit Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 19/31] x86, kexec: set ident mapping for kernel that is above max_pfn Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 20/31] x86, kexec: replace ident_mapping_init and init_level4_page Yinghai Lu
2013-01-04 21:01   ` Borislav Petkov
2013-01-04 22:04     ` Yinghai Lu
2013-01-05 13:24       ` Borislav Petkov
2013-01-10  1:26         ` Yinghai Lu
2013-01-10 11:59           ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 21/31] x86, kexec: only set ident mapping for ram Yinghai Lu
2013-01-13 12:56   ` Borislav Petkov
2013-01-14  5:46     ` Yinghai Lu
2013-01-14  9:53       ` Borislav Petkov
2013-01-14 18:17         ` Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 22/31] x86, boot: add fields to support load bzImage and ramdisk above 4G Yinghai Lu
2013-01-13 21:41   ` Borislav Petkov
2013-01-14  5:37     ` Yinghai Lu
2013-01-14  9:43       ` Borislav Petkov
2013-01-14 23:06         ` Yinghai Lu
2013-01-14 17:49       ` H. Peter Anvin
2013-01-14 18:57         ` Yinghai Lu
2013-01-14 18:59           ` H. Peter Anvin
2013-01-14 19:19             ` Yinghai Lu
2013-01-14 19:50             ` Yinghai Lu
2013-01-14 19:56               ` H. Peter Anvin
2013-01-14 20:05                 ` Yinghai Lu
2013-01-15  6:17                   ` Yinghai Lu
2013-01-15 15:50                     ` Borislav Petkov
2013-01-15 16:03                       ` Yinghai Lu
2013-01-15 16:48                         ` Borislav Petkov
2013-01-15 18:43                           ` Yinghai Lu
2013-01-15 19:49                             ` Borislav Petkov
2013-01-15 20:16                               ` Yinghai Lu
2013-01-15 20:28                                 ` Borislav Petkov
2013-01-14 20:05           ` Borislav Petkov
2013-01-14 20:14             ` Yinghai Lu
2013-01-14 20:26               ` Borislav Petkov
2013-01-14 22:38                 ` Yinghai Lu
2013-01-14 23:11                   ` Borislav Petkov
2013-01-15  1:04                     ` Yinghai Lu
2013-01-14 23:10     ` H. Peter Anvin
2013-01-14 23:21       ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 23/31] x86, boot: update comments about entries for 64bit image Yinghai Lu
2013-01-14 11:20   ` Borislav Petkov
2013-01-14 18:35     ` Yinghai Lu
2013-01-14 18:37       ` Yinghai Lu
2013-01-14 18:46         ` Borislav Petkov
2013-01-14 20:01           ` Yinghai Lu
2013-01-14 18:43       ` Borislav Petkov
2013-01-04  0:48 ` [PATCH v7u1 24/31] x86, boot: Not need to check setup_header version for setup_data Yinghai Lu
2013-01-14 11:26   ` Borislav Petkov
2013-01-14 17:37     ` H. Peter Anvin
2013-01-14 18:04       ` Borislav Petkov
2013-01-14 18:42         ` H. Peter Anvin
2013-01-04  0:48 ` [PATCH v7u1 25/31] memblock: add memblock_mem_size() Yinghai Lu
2013-01-14 20:42   ` H. Peter Anvin
2013-01-14 22:28     ` Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 26/31] x86: Don't enable swiotlb if there is not enough ram for it Yinghai Lu
2013-01-04 16:05   ` Konrad Rzeszutek Wilk
2013-01-04 19:57     ` Yinghai Lu
2013-01-04 17:50   ` Shuah Khan
2013-01-04 20:34     ` Yinghai Lu
2013-01-04 21:02       ` Shuah Khan
2013-01-04 22:10         ` Yinghai Lu
2013-01-04 22:26           ` Shuah Khan
2013-01-04 22:34             ` Yinghai Lu
2013-01-04 22:47             ` Eric W. Biederman
2013-01-04 22:56               ` Shuah Khan
2013-01-04 23:00                 ` Yinghai Lu
2013-01-04 23:21                   ` Shuah Khan
2013-01-04 23:55                     ` Yinghai Lu
2013-01-05  2:02                       ` Shuah Khan
2013-01-05  4:10                         ` Yinghai Lu
2013-01-05 22:04                           ` Shuah Khan
2013-01-04 22:58               ` Yinghai Lu
2013-01-07 15:26           ` Konrad Rzeszutek Wilk
2013-01-07 17:02             ` Shuah Khan
2013-01-07 19:29               ` Konrad Rzeszutek Wilk
2013-01-08  2:22               ` Eric W. Biederman
2013-01-08  2:48                 ` Konrad Rzeszutek Wilk
2013-01-08  3:03                   ` Eric W. Biederman
2013-01-08  3:01                 ` Yinghai Lu
2013-01-08  3:13                   ` Eric W. Biederman
2013-01-08  3:50                     ` Yinghai Lu
2013-01-08 23:40                       ` Yinghai Lu
2013-01-09  0:04                         ` Eric W. Biederman
2013-01-09  0:43                         ` Konrad Rzeszutek Wilk
2013-01-09  0:56                           ` Yinghai Lu
2013-01-09  0:58                           ` Eric W. Biederman
2013-01-09  1:07                             ` Yinghai Lu
2013-01-09  1:12                               ` Yinghai Lu
2013-01-09  2:31                                 ` Eric W. Biederman
2013-01-09 13:24                                 ` Konrad Rzeszutek Wilk [this message]
2013-01-09 17:27                                   ` Yinghai Lu
2013-01-09 18:01                                     ` Shuah Khan
2013-01-09 19:13                                       ` Yinghai Lu
2013-01-09 21:00                                     ` Eric W. Biederman
2013-01-09 21:15                                       ` Yinghai Lu
2013-01-10 23:07                                         ` Yinghai Lu
2013-01-10 23:15                                           ` Eric W. Biederman
2013-01-10 23:55                                             ` Yinghai Lu
2013-01-11 16:35                                           ` Konrad Rzeszutek Wilk
2013-01-11 16:52                                             ` Yinghai Lu
2013-01-11 17:49                                               ` Yinghai Lu
2013-01-15  6:19                                                 ` Yinghai Lu
2013-01-18 15:55                                                   ` Konrad Rzeszutek Wilk
2013-01-24 15:39                                                     ` Konrad Rzeszutek Wilk
2013-01-24 16:51                                                       ` Shuah Khan
2013-01-24 19:22                                                         ` Shuah Khan
2013-01-24 21:50                                                           ` Yinghai Lu
2013-01-29  2:27                                                             ` Shuah Khan
2013-01-29  3:44                                                               ` Yinghai Lu
2013-01-31 19:28                                                                 ` Shuah Khan
2013-01-31 19:35                                                                   ` H. Peter Anvin
2013-01-09 13:12                             ` Konrad Rzeszutek Wilk
2013-01-07 20:32             ` Yinghai Lu
2013-01-07 21:30               ` Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 27/31] x86, kdump: remove crashkernel range find limit for 64bit Yinghai Lu
2013-01-14 15:43   ` Borislav Petkov
2013-01-14 18:18     ` Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 28/31] x86: add Crash kernel low reservation Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 29/31] x86: Merge early kernel reserve for 32bit and 64bit Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 30/31] x86, 64bit, mm: Mark data/bss/brk to nx Yinghai Lu
2013-01-04  0:48 ` [PATCH v7u1 31/31] x86, 64bit, mm: hibernate use generic mapping_init Yinghai Lu
2013-01-04 11:43   ` Rafael J. Wysocki
2013-01-04 21:59     ` Yinghai Lu
2013-01-04 22:07       ` Rafael J. Wysocki
2013-01-04  7:09 ` [PATCH v7u1 00/31] x86, boot, 64bit: Add support for loading ramdisk and bzImage above 4G Borislav Petkov
2013-01-04 21:44   ` Yinghai Lu
2013-01-14 20:45 ` H. Peter Anvin
2013-01-14 22:44   ` Yinghai Lu
2013-01-14 23:16     ` H. Peter Anvin
2013-01-14 23:39       ` David Woodhouse
2013-01-14 23:50         ` H. Peter Anvin
2013-01-15  0:12           ` David Woodhouse
2013-01-15 12:19 ` Stefano Stabellini
2013-01-15 16:43   ` Yinghai Lu
2013-01-15 19:28     ` Yinghai Lu
2013-01-16 11:32       ` Stefano Stabellini
2013-01-16 17:31         ` Yinghai Lu
2013-01-16 17:38           ` H. Peter Anvin
2013-01-16 18:20             ` Yinghai Lu
2013-01-17  2:35               ` Yinghai Lu

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=20130109132409.GB18395@phenom.dumpdata.com \
    --to=konrad.wilk@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=bp@alien8.de \
    --cc=ebiederm@xmission.com \
    --cc=hpa@zytor.com \
    --cc=jan.kiszka@web.de \
    --cc=jason.wessel@windriver.com \
    --cc=joro@8bytes.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=shuahkhan@gmail.com \
    --cc=tglx@linutronix.de \
    --cc=yinghai@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome