All of lore.kernel.org
 help / color / mirror / Atom feed
From: Will Deacon <will.deacon@arm.com>
To: John Garry <john.garry@huawei.com>
Cc: "zhichang.yuan" <yuanzhichang@hisilicon.com>,
	mark.rutland@arm.com, devicetree@vger.kernel.org,
	lorenzo.pieralisi@arm.com, benh@kernel.crashing.org,
	minyard@acm.org, arnd@arndb.de, catalin.marinas@arm.com,
	gabriele.paoloni@huawei.com, zhichang.yuan02@gmail.com,
	liviu.dudau@arm.com, linux-kernel@vger.kernel.org,
	xuwei5@hisilicon.com, linuxarm@huawei.com, olof@lixom.net,
	robh+dt@kernel.org, zourongrong@gmail.com,
	linux-serial@vger.kernel.org, linux-pci@vger.kernel.org,
	bhelgaas@google.com, kantyzc@163.com,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH V5 1/3] ARM64 LPC: Indirect ISA port IO introduced
Date: Tue, 8 Nov 2016 16:49:49 +0000	[thread overview]
Message-ID: <20161108164948.GG20591@arm.com> (raw)
In-Reply-To: <8adfe182-4939-479d-6013-25ec40021b20@huawei.com>

On Tue, Nov 08, 2016 at 04:33:44PM +0000, John Garry wrote:
> On 08/11/2016 16:12, Will Deacon wrote:
> >On Tue, Nov 08, 2016 at 11:47:07AM +0800, zhichang.yuan wrote:
> >>+static inline void arm64_set_extops(struct extio_ops *ops)
> >>+{
> >>+	if (ops)
> >>+		WRITE_ONCE(arm64_extio_ops, ops);
> >
> >Why does this need to be WRITE_ONCE? You don't have READ_ONCE on the reader
> >side. Also, what if multiple drivers want to set different ops for distinct
> >address ranges?
> 
> I think that the idea here is that we only have possibly one master in the
> system which offers indirectIO backend, so another one could not possibly
> re-set this value.

Why is that assumption valid, and why does WRITE_ONCE help there? It's not
ONCE as in WARN_ONCE, more ONCE as in exactly-once-per-invocation.

> >>diff --git a/arch/arm64/kernel/extio.c b/arch/arm64/kernel/extio.c
> >>new file mode 100644
> >>index 0000000..647b3fa
> >>--- /dev/null
> >>+++ b/arch/arm64/kernel/extio.c
> >>@@ -0,0 +1,27 @@
> >>+/*
> >>+ * Copyright (C) 2016 Hisilicon Limited, All Rights Reserved.
> >>+ * Author: Zhichang Yuan <yuanzhichang@hisilicon.com>
> >>+ *
> >>+ * This program is free software; you can redistribute it and/or modify
> >>+ * it under the terms of the GNU General Public License version 2 as
> >>+ * published by the Free Software Foundation.
> >>+ *
> >>+ * This program is distributed in the hope that it will be useful,
> >>+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >>+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> >>+ * GNU General Public License for more details.
> >>+ *
> >>+ * You should have received a copy of the GNU General Public License
> >>+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
> >>+ */
> >>+
> >>+#include <linux/io.h>
> >>+
> >>+struct extio_ops *arm64_extio_ops;
> >>+
> >>+
> >>+BUILD_EXTIO(b, u8)
> >>+
> >>+BUILD_EXTIO(w, u16)
> >>+
> >>+BUILD_EXTIO(l, u32)
> >
> >Is there no way to make this slightly more generic, so that it can be
> >re-used elsewhere? For example, if struct extio_ops was common, then
> >you could have the singleton (which maybe should be an interval tree?),
> >type definition, setter function and the BUILD_EXTIO invocations
> >somewhere generic, rather than squirelled away in the arch backend.
> >
> The concern would be that some architecture which uses generic higher-level
> ISA accessor ops, but have IO space, could be affected.

You're already adding a Kconfig symbol for this stuff, so you can keep
that if you don't want it on other architectures. I'm just arguing that
plumbing drivers directly into arch code via arm64_set_extops is not
something I'm particularly fond of, especially when it looks like it
could be avoided with a small amount of effort.

Will

WARNING: multiple messages have this Message-ID (diff)
From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V5 1/3] ARM64 LPC: Indirect ISA port IO introduced
Date: Tue, 8 Nov 2016 16:49:49 +0000	[thread overview]
Message-ID: <20161108164948.GG20591@arm.com> (raw)
In-Reply-To: <8adfe182-4939-479d-6013-25ec40021b20@huawei.com>

On Tue, Nov 08, 2016 at 04:33:44PM +0000, John Garry wrote:
> On 08/11/2016 16:12, Will Deacon wrote:
> >On Tue, Nov 08, 2016 at 11:47:07AM +0800, zhichang.yuan wrote:
> >>+static inline void arm64_set_extops(struct extio_ops *ops)
> >>+{
> >>+	if (ops)
> >>+		WRITE_ONCE(arm64_extio_ops, ops);
> >
> >Why does this need to be WRITE_ONCE? You don't have READ_ONCE on the reader
> >side. Also, what if multiple drivers want to set different ops for distinct
> >address ranges?
> 
> I think that the idea here is that we only have possibly one master in the
> system which offers indirectIO backend, so another one could not possibly
> re-set this value.

Why is that assumption valid, and why does WRITE_ONCE help there? It's not
ONCE as in WARN_ONCE, more ONCE as in exactly-once-per-invocation.

> >>diff --git a/arch/arm64/kernel/extio.c b/arch/arm64/kernel/extio.c
> >>new file mode 100644
> >>index 0000000..647b3fa
> >>--- /dev/null
> >>+++ b/arch/arm64/kernel/extio.c
> >>@@ -0,0 +1,27 @@
> >>+/*
> >>+ * Copyright (C) 2016 Hisilicon Limited, All Rights Reserved.
> >>+ * Author: Zhichang Yuan <yuanzhichang@hisilicon.com>
> >>+ *
> >>+ * This program is free software; you can redistribute it and/or modify
> >>+ * it under the terms of the GNU General Public License version 2 as
> >>+ * published by the Free Software Foundation.
> >>+ *
> >>+ * This program is distributed in the hope that it will be useful,
> >>+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >>+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> >>+ * GNU General Public License for more details.
> >>+ *
> >>+ * You should have received a copy of the GNU General Public License
> >>+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
> >>+ */
> >>+
> >>+#include <linux/io.h>
> >>+
> >>+struct extio_ops *arm64_extio_ops;
> >>+
> >>+
> >>+BUILD_EXTIO(b, u8)
> >>+
> >>+BUILD_EXTIO(w, u16)
> >>+
> >>+BUILD_EXTIO(l, u32)
> >
> >Is there no way to make this slightly more generic, so that it can be
> >re-used elsewhere? For example, if struct extio_ops was common, then
> >you could have the singleton (which maybe should be an interval tree?),
> >type definition, setter function and the BUILD_EXTIO invocations
> >somewhere generic, rather than squirelled away in the arch backend.
> >
> The concern would be that some architecture which uses generic higher-level
> ISA accessor ops, but have IO space, could be affected.

You're already adding a Kconfig symbol for this stuff, so you can keep
that if you don't want it on other architectures. I'm just arguing that
plumbing drivers directly into arch code via arm64_set_extops is not
something I'm particularly fond of, especially when it looks like it
could be avoided with a small amount of effort.

Will

  reply	other threads:[~2016-11-08 16:49 UTC|newest]

Thread overview: 263+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-08  3:47 [PATCH V5 0/3] ARM64 LPC: legacy ISA I/O support zhichang.yuan
2016-11-08  3:47 ` zhichang.yuan
2016-11-08  3:47 ` zhichang.yuan
2016-11-08  3:47 ` [PATCH V5 1/3] ARM64 LPC: Indirect ISA port IO introduced zhichang.yuan
2016-11-08  3:47   ` zhichang.yuan
2016-11-08  3:47   ` zhichang.yuan
2016-11-08 12:03   ` Mark Rutland
2016-11-08 12:03     ` Mark Rutland
2016-11-08 12:03     ` Mark Rutland
2016-11-08 16:09     ` Arnd Bergmann
2016-11-08 16:09       ` Arnd Bergmann
2016-11-08 16:09       ` Arnd Bergmann
2016-11-08 16:09       ` Arnd Bergmann
2016-11-08 16:15       ` Arnd Bergmann
2016-11-08 16:15         ` Arnd Bergmann
2016-11-08 23:16     ` Benjamin Herrenschmidt
2016-11-08 23:16       ` Benjamin Herrenschmidt
2016-11-08 23:16       ` Benjamin Herrenschmidt
2016-11-10  8:33       ` zhichang.yuan
2016-11-10  8:33         ` zhichang.yuan
2016-11-10  8:33         ` zhichang.yuan
2016-11-10 11:22       ` Mark Rutland
2016-11-10 11:22         ` Mark Rutland
2016-11-10 19:32         ` Benjamin Herrenschmidt
2016-11-10 19:32           ` Benjamin Herrenschmidt
2016-11-10 19:32           ` Benjamin Herrenschmidt
2016-11-10 19:32           ` Benjamin Herrenschmidt
2016-11-11 10:07           ` zhichang.yuan
2016-11-11 10:07             ` zhichang.yuan
2016-11-11 10:07             ` zhichang.yuan
2016-11-18  9:20             ` Arnd Bergmann
2016-11-18  9:20               ` Arnd Bergmann
2016-11-18  9:20               ` Arnd Bergmann
2016-11-18 11:12               ` zhichang.yuan
2016-11-18 11:12                 ` zhichang.yuan
2016-11-18 11:12                 ` zhichang.yuan
2016-11-18 11:38                 ` Arnd Bergmann
2016-11-18 11:38                   ` Arnd Bergmann
2016-11-21 12:58       ` John Garry
2016-11-21 12:58         ` John Garry
2016-11-21 12:58         ` John Garry
2016-11-08 16:12   ` Will Deacon
2016-11-08 16:12     ` Will Deacon
2016-11-08 16:12     ` Will Deacon
2016-11-08 16:33     ` John Garry
2016-11-08 16:33       ` John Garry
2016-11-08 16:33       ` John Garry
2016-11-08 16:33       ` John Garry
2016-11-08 16:49       ` Will Deacon [this message]
2016-11-08 16:49         ` Will Deacon
2016-11-08 17:05         ` John Garry
2016-11-08 17:05           ` John Garry
2016-11-08 17:05           ` John Garry
2016-11-08 22:35         ` Arnd Bergmann
2016-11-08 22:35           ` Arnd Bergmann
2016-11-08 22:35           ` Arnd Bergmann
2016-11-09 11:29           ` John Garry
2016-11-09 11:29             ` John Garry
2016-11-09 11:29             ` John Garry
2016-11-09 21:33             ` Arnd Bergmann
2016-11-09 21:33               ` Arnd Bergmann
2016-11-09 21:33               ` Arnd Bergmann
2016-12-22  8:15   ` Ming Lei
2016-12-22  8:15     ` Ming Lei
2016-12-22  8:15     ` Ming Lei
2016-12-22  8:15     ` Ming Lei
2016-12-23  1:43     ` zhichang.yuan
2016-12-23  1:43       ` zhichang.yuan
2016-12-23  1:43       ` zhichang.yuan
2016-12-23  1:43       ` zhichang.yuan
2016-12-23  7:24       ` Ming Lei
2016-12-23  7:24         ` Ming Lei
2016-12-23  7:24         ` Ming Lei
2016-12-23  7:24         ` Ming Lei
2017-01-06 11:43     ` Arnd Bergmann
2017-01-06 11:43       ` Arnd Bergmann
2017-01-06 11:43       ` Arnd Bergmann
2017-01-06 11:43       ` Arnd Bergmann
2017-01-07  1:25       ` 答复: " Yuanzhichang
2016-11-08  3:47 ` [PATCH V5 2/3] ARM64 LPC: Add missing range exception for special ISA zhichang.yuan
2016-11-08  3:47   ` zhichang.yuan
2016-11-08  3:47   ` zhichang.yuan
2016-11-08  5:17   ` kbuild test robot
2016-11-08  5:17     ` kbuild test robot
2016-11-08  5:17     ` kbuild test robot
2016-11-08  5:17     ` kbuild test robot
2016-11-08  5:27   ` kbuild test robot
2016-11-08  5:27     ` kbuild test robot
2016-11-08  5:27     ` kbuild test robot
2016-11-08 11:49   ` Mark Rutland
2016-11-08 11:49     ` Mark Rutland
2016-11-08 16:19     ` Arnd Bergmann
2016-11-08 16:19       ` Arnd Bergmann
2016-11-08 16:19       ` Arnd Bergmann
2016-11-08 17:10       ` Mark Rutland
2016-11-08 17:10         ` Mark Rutland
2016-11-08 17:10         ` Mark Rutland
2016-11-09 13:54       ` One Thousand Gnomes
2016-11-09 13:54         ` One Thousand Gnomes
2016-11-09 14:51         ` Gabriele Paoloni
2016-11-09 14:51           ` Gabriele Paoloni
2016-11-09 14:51           ` Gabriele Paoloni
2016-11-09 21:38         ` Arnd Bergmann
2016-11-09 21:38           ` Arnd Bergmann
2016-11-09 21:38           ` Arnd Bergmann
2016-11-14 11:11           ` One Thousand Gnomes
2016-11-14 11:11             ` One Thousand Gnomes
2016-11-14 11:11             ` One Thousand Gnomes
2016-11-18  9:22             ` Arnd Bergmann
2016-11-18  9:22               ` Arnd Bergmann
2016-11-18  9:22               ` Arnd Bergmann
2016-11-18  9:22               ` Arnd Bergmann
2016-11-08 23:12     ` Benjamin Herrenschmidt
2016-11-08 23:12       ` Benjamin Herrenschmidt
2016-11-08 23:12       ` Benjamin Herrenschmidt
2016-11-08 23:12       ` Benjamin Herrenschmidt
2016-11-09 11:20       ` Mark Rutland
2016-11-09 11:20         ` Mark Rutland
2016-11-10  7:08         ` Benjamin Herrenschmidt
2016-11-10  7:08           ` Benjamin Herrenschmidt
2016-11-10  7:08           ` Benjamin Herrenschmidt
2016-11-09 11:39   ` liviu.dudau
2016-11-09 11:39     ` liviu.dudau at arm.com
2016-11-09 11:39     ` liviu.dudau-5wv7dgnIgG8
2016-11-09 16:16     ` Gabriele Paoloni
2016-11-09 16:16       ` Gabriele Paoloni
2016-11-09 16:16       ` Gabriele Paoloni
2016-11-09 16:16       ` Gabriele Paoloni
2016-11-09 16:50       ` liviu.dudau
2016-11-09 16:50         ` liviu.dudau at arm.com
2016-11-09 16:50         ` liviu.dudau-5wv7dgnIgG8
2016-11-10  6:24         ` zhichang.yuan
2016-11-10  6:24           ` zhichang.yuan
2016-11-10  6:24           ` zhichang.yuan
2016-11-10 16:06         ` Gabriele Paoloni
2016-11-10 16:06           ` Gabriele Paoloni
2016-11-10 16:06           ` Gabriele Paoloni
2016-11-10 16:06           ` Gabriele Paoloni
2016-11-11 10:37           ` liviu.dudau
2016-11-11 10:37             ` liviu.dudau at arm.com
2016-11-11 10:37             ` liviu.dudau
2016-11-08  3:47 ` [PATCH V5 3/3] ARM64 LPC: LPC driver implementation on Hip06 zhichang.yuan
2016-11-08  3:47   ` zhichang.yuan
2016-11-08  3:47   ` zhichang.yuan
2016-11-08  6:11   ` kbuild test robot
2016-11-08  6:11     ` kbuild test robot
2016-11-08  6:11     ` kbuild test robot
2016-11-08 16:24   ` Arnd Bergmann
2016-11-08 16:24     ` Arnd Bergmann
2016-11-09 12:10     ` Gabriele Paoloni
2016-11-09 12:10       ` Gabriele Paoloni
2016-11-09 12:10       ` Gabriele Paoloni
2016-11-09 21:34       ` Arnd Bergmann
2016-11-09 21:34         ` Arnd Bergmann
2016-11-09 21:34         ` Arnd Bergmann
2016-11-09 21:34         ` Arnd Bergmann
2016-11-10  6:40         ` zhichang.yuan
2016-11-10  6:40           ` zhichang.yuan
2016-11-10  6:40           ` zhichang.yuan
2016-11-10  9:12           ` Arnd Bergmann
2016-11-10  9:12             ` Arnd Bergmann
2016-11-10  9:12             ` Arnd Bergmann
2016-11-10 12:36             ` zhichang.yuan
2016-11-10 12:36               ` zhichang.yuan
2016-11-10 12:36               ` zhichang.yuan
2016-11-18 11:46               ` Arnd Bergmann
2016-11-18 11:46                 ` Arnd Bergmann
2016-11-18 11:46                 ` Arnd Bergmann
2016-11-18 11:46                 ` Arnd Bergmann
2016-11-10 15:36             ` Gabriele Paoloni
2016-11-10 15:36               ` Gabriele Paoloni
2016-11-10 15:36               ` Gabriele Paoloni
2016-11-10 16:07               ` Arnd Bergmann
2016-11-10 16:07                 ` Arnd Bergmann
2016-11-10 16:07                 ` Arnd Bergmann
2016-11-11 10:09                 ` zhichang.yuan
2016-11-11 10:09                   ` zhichang.yuan
2016-11-11 10:09                   ` zhichang.yuan
2016-11-11 10:48                 ` liviu.dudau
2016-11-11 10:48                   ` liviu.dudau at arm.com
2016-11-11 10:48                   ` liviu.dudau
2016-11-11 13:39                 ` Gabriele Paoloni
2016-11-11 13:39                   ` Gabriele Paoloni
2016-11-11 13:39                   ` Gabriele Paoloni
2016-11-11 14:45                   ` liviu.dudau
2016-11-11 14:45                     ` liviu.dudau at arm.com
2016-11-11 14:45                     ` liviu.dudau-5wv7dgnIgG8
2016-11-11 15:53                     ` Gabriele Paoloni
2016-11-11 15:53                       ` Gabriele Paoloni
2016-11-11 15:53                       ` Gabriele Paoloni
2016-11-11 15:53                       ` Gabriele Paoloni
2016-11-11 18:16                       ` liviu.dudau
2016-11-11 18:16                         ` liviu.dudau at arm.com
2016-11-11 18:16                         ` liviu.dudau
2016-11-14  8:26                         ` Gabriele Paoloni
2016-11-14  8:26                           ` Gabriele Paoloni
2016-11-14  8:26                           ` Gabriele Paoloni
2016-11-14  8:26                           ` Gabriele Paoloni
2016-11-14 11:26                           ` liviu.dudau
2016-11-14 11:26                             ` liviu.dudau at arm.com
2016-11-14 11:26                             ` liviu.dudau
2016-11-18 10:17                             ` Arnd Bergmann
2016-11-18 10:17                               ` Arnd Bergmann
2016-11-18 10:17                               ` Arnd Bergmann
2016-11-18 12:07                               ` Gabriele Paoloni
2016-11-18 12:07                                 ` Gabriele Paoloni
2016-11-18 12:07                                 ` Gabriele Paoloni
2016-11-18 12:24                                 ` Arnd Bergmann
2016-11-18 12:24                                   ` Arnd Bergmann
2016-11-18 12:24                                   ` Arnd Bergmann
2016-11-18 12:24                                   ` Arnd Bergmann
2016-11-18 12:53                                   ` Gabriele Paoloni
2016-11-18 12:53                                     ` Gabriele Paoloni
2016-11-18 12:53                                     ` Gabriele Paoloni
2016-11-18 12:53                                     ` Gabriele Paoloni
2016-11-18 13:42                                     ` Arnd Bergmann
2016-11-18 13:42                                       ` Arnd Bergmann
2016-11-18 13:42                                       ` Arnd Bergmann
2016-11-18 16:18                                       ` Gabriele Paoloni
2016-11-18 16:18                                         ` Gabriele Paoloni
2016-11-18 16:18                                         ` Gabriele Paoloni
2016-11-18 16:34                                         ` Arnd Bergmann
2016-11-18 16:34                                           ` Arnd Bergmann
2016-11-18 16:34                                           ` Arnd Bergmann
2016-11-18 17:03                                           ` Gabriele Paoloni
2016-11-18 17:03                                             ` Gabriele Paoloni
2016-11-18 17:03                                             ` Gabriele Paoloni
2016-11-23 14:16                                             ` Arnd Bergmann
2016-11-23 14:16                                               ` Arnd Bergmann
2016-11-23 14:16                                               ` Arnd Bergmann
2016-11-23 14:16                                               ` Arnd Bergmann
2016-11-23 15:22                                               ` Gabriele Paoloni
2016-11-23 15:22                                                 ` Gabriele Paoloni
2016-11-23 15:22                                                 ` Gabriele Paoloni
2016-11-23 17:07                                                 ` Arnd Bergmann
2016-11-23 17:07                                                   ` Arnd Bergmann
2016-11-23 17:07                                                   ` Arnd Bergmann
2016-11-23 23:23                                                   ` Arnd Bergmann
2016-11-23 23:23                                                     ` Arnd Bergmann
2016-11-23 23:23                                                     ` Arnd Bergmann
2016-11-24  9:12                                                     ` zhichang.yuan
2016-11-24  9:12                                                       ` zhichang.yuan
2016-11-24  9:12                                                       ` zhichang.yuan
2016-11-24 10:24                                                       ` Arnd Bergmann
2016-11-24 10:24                                                         ` Arnd Bergmann
2016-11-24 10:24                                                         ` Arnd Bergmann
2016-11-24 10:24                                                         ` Arnd Bergmann
2016-11-25  8:46                                                     ` Gabriele Paoloni
2016-11-25  8:46                                                       ` Gabriele Paoloni
2016-11-25  8:46                                                       ` Gabriele Paoloni
2016-11-25 12:03                                                       ` Arnd Bergmann
2016-11-25 12:03                                                         ` Arnd Bergmann
2016-11-25 12:03                                                         ` Arnd Bergmann
2016-11-25 16:27                                                         ` Gabriele Paoloni
2016-11-25 16:27                                                           ` Gabriele Paoloni
2016-11-25 16:27                                                           ` Gabriele Paoloni
2016-11-11 16:54                     ` zhichang.yuan
2016-11-11 16:54                       ` zhichang.yuan
2016-11-11 16:54                       ` zhichang.yuan
2016-11-11 16:54                       ` zhichang.yuan
2016-11-14 11:06         ` One Thousand Gnomes
2016-11-14 11:06           ` One Thousand Gnomes
2016-11-14 11:06           ` One Thousand Gnomes

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=20161108164948.GG20591@arm.com \
    --to=will.deacon@arm.com \
    --cc=arnd@arndb.de \
    --cc=benh@kernel.crashing.org \
    --cc=bhelgaas@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=devicetree@vger.kernel.org \
    --cc=gabriele.paoloni@huawei.com \
    --cc=john.garry@huawei.com \
    --cc=kantyzc@163.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=liviu.dudau@arm.com \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=minyard@acm.org \
    --cc=olof@lixom.net \
    --cc=robh+dt@kernel.org \
    --cc=xuwei5@hisilicon.com \
    --cc=yuanzhichang@hisilicon.com \
    --cc=zhichang.yuan02@gmail.com \
    --cc=zourongrong@gmail.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.