All of lore.kernel.org
 help / color / mirror / Atom feed
From: jacopo mondi <jacopo@jmondi.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>,
	Rich Felker <dalias@libc.org>,
	Jacopo Mondi <jacopo+renesas@jmondi.org>,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	linux-sh@vger.kernel.org, iommu@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/5] sh: split arch/sh/mm/consistent.c
Date: Mon, 23 Jul 2018 10:42:07 +0200	[thread overview]
Message-ID: <20180723084207.GI6784@w540> (raw)
In-Reply-To: <20180719130516.1989-5-hch@lst.de>

[-- Attachment #1: Type: text/plain, Size: 6044 bytes --]

Hi Christoph,

I have a single comment on something I noticed which might be an
implementation bug. On the overall patch architecture, it's very hard
for me to provide a valuable opinion as it's all relatively new for me
here :)

On Thu, Jul 19, 2018 at 06:05:15AM -0700, Christoph Hellwig wrote:
> Half of the file just contains platform device memory setup code which
> is required for all builds, and half contains helpers for dma coherent
> allocation, which is only needed if CONFIG_DMA_NONCOHERENT is enabled.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  arch/sh/kernel/Makefile       |  2 +-
>  arch/sh/kernel/dma-coherent.c | 85 +++++++++++++++++++++++++++++++++++
>  arch/sh/mm/consistent.c       | 80 ---------------------------------
>  3 files changed, 86 insertions(+), 81 deletions(-)
>  create mode 100644 arch/sh/kernel/dma-coherent.c
>
> diff --git a/arch/sh/kernel/Makefile b/arch/sh/kernel/Makefile
> index cb5f1bfb52de..d5ddb64bfffe 100644
> --- a/arch/sh/kernel/Makefile
> +++ b/arch/sh/kernel/Makefile
> @@ -45,7 +45,7 @@ obj-$(CONFIG_DUMP_CODE)		+= disassemble.o
>  obj-$(CONFIG_HIBERNATION)	+= swsusp.o
>  obj-$(CONFIG_DWARF_UNWINDER)	+= dwarf.o
>  obj-$(CONFIG_PERF_EVENTS)	+= perf_event.o perf_callchain.o
> -obj-$(CONFIG_DMA_NONCOHERENT)	+= dma-nommu.o
> +obj-$(CONFIG_DMA_NONCOHERENT)	+= dma-nommu.o dma-coherent.o
>  obj-$(CONFIG_HAVE_HW_BREAKPOINT)		+= hw_breakpoint.o
>
>  ccflags-y := -Werror
> diff --git a/arch/sh/kernel/dma-coherent.c b/arch/sh/kernel/dma-coherent.c
> new file mode 100644
> index 000000000000..0e7720b5d495
> --- /dev/null
> +++ b/arch/sh/kernel/dma-coherent.c
> @@ -0,0 +1,85 @@
> +/*
> + * Copyright (C) 2004 - 2007  Paul Mundt
> + *
> + * This file is subject to the terms and conditions of the GNU General Public
> + * License.  See the file "COPYING" in the main directory of this archive
> + * for more details.
> + */
> +#include <linux/mm.h>
> +#include <linux/init.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/module.h>
> +#include <asm/cacheflush.h>
> +#include <asm/addrspace.h>
> +
> +void *dma_generic_alloc_coherent(struct device *dev, size_t size,
> +				 dma_addr_t *dma_handle, gfp_t gfp,
> +				 unsigned long attrs)
> +{
> +	void *ret, *ret_nocache;
> +	int order = get_order(size);
> +
> +	gfp |= __GFP_ZERO;
> +
> +	ret = (void *)__get_free_pages(gfp, order);
> +	if (!ret)
> +		return NULL;
> +
> +	/*
> +	 * Pages from the page allocator may have data present in
> +	 * cache. So flush the cache before using uncached memory.
> +	 */
> +	sh_sync_dma_for_device(ret, size, DMA_BIDIRECTIONAL);
> +
> +	ret_nocache = (void __force *)ioremap_nocache(virt_to_phys(ret), size);
> +	if (!ret_nocache) {
> +		free_pages((unsigned long)ret, order);
> +		return NULL;
> +	}
> +
> +	split_page(pfn_to_page(virt_to_phys(ret) >> PAGE_SHIFT), order);
> +
> +	*dma_handle = virt_to_phys(ret);
> +	if (!WARN_ON(!dev))
> +		*dma_handle - PFN_PHYS(dev->dma_pfn_offset);

I guess this comes from below...

> +
> +	return ret_nocache;
> +}
> +
> +void dma_generic_free_coherent(struct device *dev, size_t size,
> +			       void *vaddr, dma_addr_t dma_handle,
> +			       unsigned long attrs)
> +{
> +	int order = get_order(size);
> +	unsigned long pfn = (dma_handle >> PAGE_SHIFT);
> +	int k;
> +
> +	if (!WARN_ON(!dev))
> +		pfn + dev->dma_pfn_offset;
> +
> +	for (k = 0; k < (1 << order); k++)
> +		__free_pages(pfn_to_page(pfn + k), 0);
> +
> +	iounmap(vaddr);
> +}
> +
> +void sh_sync_dma_for_device(void *vaddr, size_t size,
> +		    enum dma_data_direction direction)
> +{
> +	void *addr = sh_cacheop_vaddr(vaddr);
> +
> +	switch (direction) {
> +	case DMA_FROM_DEVICE:		/* invalidate only */
> +		__flush_invalidate_region(addr, size);
> +		break;
> +	case DMA_TO_DEVICE:		/* writeback only */
> +		__flush_wback_region(addr, size);
> +		break;
> +	case DMA_BIDIRECTIONAL:		/* writeback and invalidate */
> +		__flush_purge_region(addr, size);
> +		break;
> +	default:
> +		BUG();
> +	}
> +}
> +EXPORT_SYMBOL(sh_sync_dma_for_device);
> diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c
> index 1622ae6b9dbd..792f36129062 100644
> --- a/arch/sh/mm/consistent.c
> +++ b/arch/sh/mm/consistent.c
> @@ -1,10 +1,6 @@
>  /*
> - * arch/sh/mm/consistent.c
> - *
>   * Copyright (C) 2004 - 2007  Paul Mundt
>   *
> - * Declared coherent memory functions based on arch/x86/kernel/pci-dma_32.c
> - *
>   * This file is subject to the terms and conditions of the GNU General Public
>   * License.  See the file "COPYING" in the main directory of this archive
>   * for more details.
> @@ -13,83 +9,7 @@
>  #include <linux/init.h>
>  #include <linux/platform_device.h>
>  #include <linux/dma-mapping.h>
> -#include <linux/dma-debug.h>
>  #include <linux/io.h>
> -#include <linux/module.h>
> -#include <linux/gfp.h>
> -#include <asm/cacheflush.h>
> -#include <asm/addrspace.h>
> -
> -void *dma_generic_alloc_coherent(struct device *dev, size_t size,
> -				 dma_addr_t *dma_handle, gfp_t gfp,
> -				 unsigned long attrs)
> -{
> -	void *ret, *ret_nocache;
> -	int order = get_order(size);
> -
> -	gfp |= __GFP_ZERO;
> -
> -	ret = (void *)__get_free_pages(gfp, order);
> -	if (!ret)
> -		return NULL;
> -
> -	/*
> -	 * Pages from the page allocator may have data present in
> -	 * cache. So flush the cache before using uncached memory.
> -	 */
> -	sh_sync_dma_for_device(ret, size, DMA_BIDIRECTIONAL);
> -
> -	ret_nocache = (void __force *)ioremap_nocache(virt_to_phys(ret), size);
> -	if (!ret_nocache) {
> -		free_pages((unsigned long)ret, order);
> -		return NULL;
> -	}
> -
> -	split_page(pfn_to_page(virt_to_phys(ret) >> PAGE_SHIFT), order);
> -
> -	*dma_handle = virt_to_phys(ret);
> -	if (!WARN_ON(!dev))
> -		*dma_handle -= PFN_PHYS(dev->dma_pfn_offset);

... here

Is the s/-=/- intended?

Snippets copied here below:

> +	*dma_handle = virt_to_phys(ret);
> +	if (!WARN_ON(!dev))
> +		*dma_handle - PFN_PHYS(dev->dma_pfn_offset);
vs
> -	*dma_handle = virt_to_phys(ret);
> -	if (!WARN_ON(!dev))
> -		*dma_handle -= PFN_PHYS(dev->dma_pfn_offset);



[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: jacopo mondi <jacopo@jmondi.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>,
	Rich Felker <dalias@libc.org>,
	Jacopo Mondi <jacopo+renesas@jmondi.org>,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	linux-sh@vger.kernel.org, iommu@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/5] sh: split arch/sh/mm/consistent.c
Date: Mon, 23 Jul 2018 08:42:07 +0000	[thread overview]
Message-ID: <20180723084207.GI6784@w540> (raw)
In-Reply-To: <20180719130516.1989-5-hch@lst.de>

[-- Attachment #1: Type: text/plain, Size: 6044 bytes --]

Hi Christoph,

I have a single comment on something I noticed which might be an
implementation bug. On the overall patch architecture, it's very hard
for me to provide a valuable opinion as it's all relatively new for me
here :)

On Thu, Jul 19, 2018 at 06:05:15AM -0700, Christoph Hellwig wrote:
> Half of the file just contains platform device memory setup code which
> is required for all builds, and half contains helpers for dma coherent
> allocation, which is only needed if CONFIG_DMA_NONCOHERENT is enabled.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  arch/sh/kernel/Makefile       |  2 +-
>  arch/sh/kernel/dma-coherent.c | 85 +++++++++++++++++++++++++++++++++++
>  arch/sh/mm/consistent.c       | 80 ---------------------------------
>  3 files changed, 86 insertions(+), 81 deletions(-)
>  create mode 100644 arch/sh/kernel/dma-coherent.c
>
> diff --git a/arch/sh/kernel/Makefile b/arch/sh/kernel/Makefile
> index cb5f1bfb52de..d5ddb64bfffe 100644
> --- a/arch/sh/kernel/Makefile
> +++ b/arch/sh/kernel/Makefile
> @@ -45,7 +45,7 @@ obj-$(CONFIG_DUMP_CODE)		+= disassemble.o
>  obj-$(CONFIG_HIBERNATION)	+= swsusp.o
>  obj-$(CONFIG_DWARF_UNWINDER)	+= dwarf.o
>  obj-$(CONFIG_PERF_EVENTS)	+= perf_event.o perf_callchain.o
> -obj-$(CONFIG_DMA_NONCOHERENT)	+= dma-nommu.o
> +obj-$(CONFIG_DMA_NONCOHERENT)	+= dma-nommu.o dma-coherent.o
>  obj-$(CONFIG_HAVE_HW_BREAKPOINT)		+= hw_breakpoint.o
>
>  ccflags-y := -Werror
> diff --git a/arch/sh/kernel/dma-coherent.c b/arch/sh/kernel/dma-coherent.c
> new file mode 100644
> index 000000000000..0e7720b5d495
> --- /dev/null
> +++ b/arch/sh/kernel/dma-coherent.c
> @@ -0,0 +1,85 @@
> +/*
> + * Copyright (C) 2004 - 2007  Paul Mundt
> + *
> + * This file is subject to the terms and conditions of the GNU General Public
> + * License.  See the file "COPYING" in the main directory of this archive
> + * for more details.
> + */
> +#include <linux/mm.h>
> +#include <linux/init.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/module.h>
> +#include <asm/cacheflush.h>
> +#include <asm/addrspace.h>
> +
> +void *dma_generic_alloc_coherent(struct device *dev, size_t size,
> +				 dma_addr_t *dma_handle, gfp_t gfp,
> +				 unsigned long attrs)
> +{
> +	void *ret, *ret_nocache;
> +	int order = get_order(size);
> +
> +	gfp |= __GFP_ZERO;
> +
> +	ret = (void *)__get_free_pages(gfp, order);
> +	if (!ret)
> +		return NULL;
> +
> +	/*
> +	 * Pages from the page allocator may have data present in
> +	 * cache. So flush the cache before using uncached memory.
> +	 */
> +	sh_sync_dma_for_device(ret, size, DMA_BIDIRECTIONAL);
> +
> +	ret_nocache = (void __force *)ioremap_nocache(virt_to_phys(ret), size);
> +	if (!ret_nocache) {
> +		free_pages((unsigned long)ret, order);
> +		return NULL;
> +	}
> +
> +	split_page(pfn_to_page(virt_to_phys(ret) >> PAGE_SHIFT), order);
> +
> +	*dma_handle = virt_to_phys(ret);
> +	if (!WARN_ON(!dev))
> +		*dma_handle - PFN_PHYS(dev->dma_pfn_offset);

I guess this comes from below...

> +
> +	return ret_nocache;
> +}
> +
> +void dma_generic_free_coherent(struct device *dev, size_t size,
> +			       void *vaddr, dma_addr_t dma_handle,
> +			       unsigned long attrs)
> +{
> +	int order = get_order(size);
> +	unsigned long pfn = (dma_handle >> PAGE_SHIFT);
> +	int k;
> +
> +	if (!WARN_ON(!dev))
> +		pfn + dev->dma_pfn_offset;
> +
> +	for (k = 0; k < (1 << order); k++)
> +		__free_pages(pfn_to_page(pfn + k), 0);
> +
> +	iounmap(vaddr);
> +}
> +
> +void sh_sync_dma_for_device(void *vaddr, size_t size,
> +		    enum dma_data_direction direction)
> +{
> +	void *addr = sh_cacheop_vaddr(vaddr);
> +
> +	switch (direction) {
> +	case DMA_FROM_DEVICE:		/* invalidate only */
> +		__flush_invalidate_region(addr, size);
> +		break;
> +	case DMA_TO_DEVICE:		/* writeback only */
> +		__flush_wback_region(addr, size);
> +		break;
> +	case DMA_BIDIRECTIONAL:		/* writeback and invalidate */
> +		__flush_purge_region(addr, size);
> +		break;
> +	default:
> +		BUG();
> +	}
> +}
> +EXPORT_SYMBOL(sh_sync_dma_for_device);
> diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c
> index 1622ae6b9dbd..792f36129062 100644
> --- a/arch/sh/mm/consistent.c
> +++ b/arch/sh/mm/consistent.c
> @@ -1,10 +1,6 @@
>  /*
> - * arch/sh/mm/consistent.c
> - *
>   * Copyright (C) 2004 - 2007  Paul Mundt
>   *
> - * Declared coherent memory functions based on arch/x86/kernel/pci-dma_32.c
> - *
>   * This file is subject to the terms and conditions of the GNU General Public
>   * License.  See the file "COPYING" in the main directory of this archive
>   * for more details.
> @@ -13,83 +9,7 @@
>  #include <linux/init.h>
>  #include <linux/platform_device.h>
>  #include <linux/dma-mapping.h>
> -#include <linux/dma-debug.h>
>  #include <linux/io.h>
> -#include <linux/module.h>
> -#include <linux/gfp.h>
> -#include <asm/cacheflush.h>
> -#include <asm/addrspace.h>
> -
> -void *dma_generic_alloc_coherent(struct device *dev, size_t size,
> -				 dma_addr_t *dma_handle, gfp_t gfp,
> -				 unsigned long attrs)
> -{
> -	void *ret, *ret_nocache;
> -	int order = get_order(size);
> -
> -	gfp |= __GFP_ZERO;
> -
> -	ret = (void *)__get_free_pages(gfp, order);
> -	if (!ret)
> -		return NULL;
> -
> -	/*
> -	 * Pages from the page allocator may have data present in
> -	 * cache. So flush the cache before using uncached memory.
> -	 */
> -	sh_sync_dma_for_device(ret, size, DMA_BIDIRECTIONAL);
> -
> -	ret_nocache = (void __force *)ioremap_nocache(virt_to_phys(ret), size);
> -	if (!ret_nocache) {
> -		free_pages((unsigned long)ret, order);
> -		return NULL;
> -	}
> -
> -	split_page(pfn_to_page(virt_to_phys(ret) >> PAGE_SHIFT), order);
> -
> -	*dma_handle = virt_to_phys(ret);
> -	if (!WARN_ON(!dev))
> -		*dma_handle -= PFN_PHYS(dev->dma_pfn_offset);

... here

Is the s/-=/- intended?

Snippets copied here below:

> +	*dma_handle = virt_to_phys(ret);
> +	if (!WARN_ON(!dev))
> +		*dma_handle - PFN_PHYS(dev->dma_pfn_offset);
vs
> -	*dma_handle = virt_to_phys(ret);
> -	if (!WARN_ON(!dev))
> -		*dma_handle -= PFN_PHYS(dev->dma_pfn_offset);



[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  reply	other threads:[~2018-07-23  8:42 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-19 13:05 use the generic dma-noncoherent code for sh Christoph Hellwig
2018-07-19 13:05 ` Christoph Hellwig
2018-07-19 13:05 ` [PATCH 1/5] sh: simplify get_arch_dma_ops Christoph Hellwig
2018-07-19 13:05   ` Christoph Hellwig
2018-07-19 13:05 ` [PATCH 2/5] sh: introduce a sh_cacheop_vaddr helper Christoph Hellwig
2018-07-19 13:05   ` Christoph Hellwig
2018-07-19 13:05 ` [PATCH 3/5] sh: use dma_direct_ops for the CONFIG_DMA_COHERENT case Christoph Hellwig
2018-07-19 13:05   ` Christoph Hellwig
2018-07-19 13:05 ` [PATCH 4/5] sh: split arch/sh/mm/consistent.c Christoph Hellwig
2018-07-19 13:05   ` Christoph Hellwig
2018-07-23  8:42   ` jacopo mondi [this message]
2018-07-23  8:42     ` jacopo mondi
2018-07-23  8:49     ` Geert Uytterhoeven
2018-07-23  8:49       ` Geert Uytterhoeven
2018-07-23  8:49       ` Geert Uytterhoeven
     [not found]       ` <CAMuHMdX=b0iAnDw1=85MXNBSMD=MxZb27QrO3rEWHYq0vB+3ow-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-07-24 11:43         ` Christoph Hellwig
2018-07-24 11:43           ` Christoph Hellwig
2018-07-24 11:43           ` Christoph Hellwig
2018-07-24 12:11           ` Li, Philip
2018-07-19 13:05 ` [PATCH 5/5] sh: use generic dma_noncoherent_ops Christoph Hellwig
2018-07-19 13:05   ` Christoph Hellwig
  -- strict thread matches above, loose matches on Subject: below --
2018-07-24 12:01 use the generic dma-noncoherent code for sh V2 Christoph Hellwig
2018-07-24 12:01 ` Christoph Hellwig
2018-07-24 12:01 ` [PATCH 1/5] sh: simplify get_arch_dma_ops Christoph Hellwig
2018-07-24 12:01   ` Christoph Hellwig
2018-07-24 12:01 ` [PATCH 2/5] sh: introduce a sh_cacheop_vaddr helper Christoph Hellwig
2018-07-24 12:01   ` Christoph Hellwig
2018-07-24 12:01 ` [PATCH 3/5] sh: use dma_direct_ops for the CONFIG_DMA_COHERENT case Christoph Hellwig
2018-07-24 12:01   ` Christoph Hellwig
2018-07-24 12:01 ` [PATCH 4/5] sh: split arch/sh/mm/consistent.c Christoph Hellwig
2018-07-24 12:01   ` Christoph Hellwig
2018-07-24 12:01 ` [PATCH 5/5] sh: use generic dma_noncoherent_ops Christoph Hellwig
2018-07-24 12:01   ` Christoph Hellwig
2018-07-24 20:21 ` use the generic dma-noncoherent code for sh V2 Christoph Hellwig
2018-07-24 20:21   ` Christoph Hellwig
2018-07-27 16:20   ` Rob Landley
2018-07-27 16:20     ` Rob Landley
     [not found]     ` <18df6608-61c1-963d-bb1a-d46320232f40-VoJi6FS/r0vR7s880joybQ@public.gmane.org>
2018-07-30  9:06       ` Christoph Hellwig
2018-07-30  9:06         ` Christoph Hellwig
2018-07-30  9:06         ` Christoph Hellwig
2018-07-31 13:25         ` Arnd Bergmann
2018-07-31 13:25           ` Arnd Bergmann
2018-07-30  9:24       ` Geert Uytterhoeven
2018-07-30  9:24         ` Geert Uytterhoeven
2018-07-30  9:24         ` Geert Uytterhoeven
2018-07-31 12:56     ` Arnd Bergmann
2018-07-31 12:56       ` Arnd Bergmann
2018-08-17 17:04       ` dmaengine for sh7760 (was Re: use the generic dma-noncoherent code for sh V2) Rob Landley
2018-08-17 17:04         ` Rob Landley
2018-08-17 17:04         ` Rob Landley
2018-08-17 20:23         ` Arnd Bergmann
2018-08-17 20:23           ` Arnd Bergmann
     [not found]           ` <CAK8P3a3x0f_op8PxOaWGNHQ3udg05T6NZggFAd7awns-FoL4yA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-08-19  5:38             ` Rob Landley
2018-08-19  5:38               ` Rob Landley
2018-08-19  5:38               ` Rob Landley
2018-08-20 12:33               ` Arnd Bergmann
2018-08-20 12:33                 ` Arnd Bergmann
2018-07-25  9:40 use the generic dma-noncoherent code for sh V3 Christoph Hellwig
2018-07-25  9:40 ` Christoph Hellwig
2018-07-25  9:40 ` Christoph Hellwig
2018-07-25  9:40 ` [PATCH 1/5] sh: simplify get_arch_dma_ops Christoph Hellwig
2018-07-25  9:40   ` Christoph Hellwig
2018-07-25  9:40 ` [PATCH 2/5] sh: introduce a sh_cacheop_vaddr helper Christoph Hellwig
2018-07-25  9:40   ` Christoph Hellwig
2018-07-25  9:40 ` [PATCH 3/5] sh: use dma_direct_ops for the CONFIG_DMA_COHERENT case Christoph Hellwig
2018-07-25  9:40   ` Christoph Hellwig
2018-07-25  9:40 ` [PATCH 4/5] sh: split arch/sh/mm/consistent.c Christoph Hellwig
2018-07-25  9:40   ` Christoph Hellwig
2018-07-25  9:40 ` [PATCH 5/5] sh: use generic dma_noncoherent_ops Christoph Hellwig
2018-07-25  9:40   ` Christoph Hellwig
2018-07-31  6:06 ` use the generic dma-noncoherent code for sh V3 Yoshinori Sato
2018-07-31  6:06   ` Yoshinori Sato
2018-07-31  7:24   ` Christoph Hellwig
2018-07-31  7:24     ` Christoph Hellwig
2018-08-02  2:09     ` Rich Felker
2018-08-02  2:09       ` Rich Felker
2018-08-02  7:15       ` Christoph Hellwig
2018-08-02  7:15         ` Christoph Hellwig

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=20180723084207.GI6784@w540 \
    --to=jacopo@jmondi.org \
    --cc=dalias@libc.org \
    --cc=hch@lst.de \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jacopo+renesas@jmondi.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sh@vger.kernel.org \
    --cc=thomas.petazzoni@free-electrons.com \
    --cc=ysato@users.sourceforge.jp \
    /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.