From: "Terje Bergström" <tbergstrom-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
To: Thierry Reding
<thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org>
Cc: Arto Merilainen
<amerilainen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
"airlied-cv59FeDIM0c@public.gmane.org"
<airlied-cv59FeDIM0c@public.gmane.org>,
"dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org"
<dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>,
"linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCHv5,RESEND 4/8] gpu: host1x: Add debug support
Date: Mon, 4 Feb 2013 20:41:25 -0800 [thread overview]
Message-ID: <51108D75.9030302@nvidia.com> (raw)
In-Reply-To: <20130204110339.GA28134-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
On 04.02.2013 03:03, Thierry Reding wrote:
> * PGP Signed by an unknown key
>
> On Tue, Jan 15, 2013 at 01:44:00PM +0200, Terje Bergstrom wrote:
>> diff --git a/drivers/gpu/host1x/debug.c b/drivers/gpu/host1x/debug.c
> [...]
>> +static pid_t host1x_debug_null_kickoff_pid;
>> +unsigned int host1x_debug_trace_cmdbuf;
>> +
>> +static pid_t host1x_debug_force_timeout_pid;
>> +static u32 host1x_debug_force_timeout_val;
>> +static u32 host1x_debug_force_timeout_channel;
>
> Please group static and non-static variables.
Will do.
>
>> diff --git a/drivers/gpu/host1x/debug.h b/drivers/gpu/host1x/debug.h
> [...]
>> +struct output {
>> + void (*fn)(void *ctx, const char *str, size_t len);
>> + void *ctx;
>> + char buf[256];
>> +};
>
> Do we really need this kind of abstraction? There really should be only
> one location where debug information is obtained, so I don't see a need
> for this.
This is used by debugfs code to direct to debugfs, and
nvhost_debug_dump() to send via printk.
>
>> diff --git a/drivers/gpu/host1x/dev.h b/drivers/gpu/host1x/dev.h
> [...]
>> struct host1x_syncpt_ops {
>> void (*reset)(struct host1x_syncpt *);
>> void (*reset_wait_base)(struct host1x_syncpt *);
>> @@ -117,6 +133,7 @@ struct host1x {
>> struct host1x_channel_ops channel_op;
>> struct host1x_cdma_ops cdma_op;
>> struct host1x_pushbuffer_ops cdma_pb_op;
>> + struct host1x_debug_ops debug_op;
>> struct host1x_syncpt_ops syncpt_op;
>> struct host1x_intr_ops intr_op;
>
> Again, better to pass in a const pointer to the ops structure.
Ok.
>
>> diff --git a/drivers/gpu/host1x/hw/debug_hw.c b/drivers/gpu/host1x/hw/debug_hw.c
>
>> +static int show_channel_command(struct output *o, u32 addr, u32 val, int *count)
>> +{
>> + unsigned mask;
>> + unsigned subop;
>> +
>> + switch (val >> 28) {
>> + case 0x0:
>
> These can easily be derived by looking at the debug output, but it may
> still make sense to assign symbolic names to them.
I have another suggestion. In downstream I removed the decoding part and
I just print out a string of hex. That removes quite a bit bunch of code
from kernel. It makes the debug output also more compact.
It's much easier to write a user space program to decode than maintain
it in kernel.
>
>> +static void show_channel_word(struct output *o, int *state, int *count,
>> + u32 addr, u32 val, struct host1x_cdma *cdma)
>> +{
>> + static int start_count, dont_print;
>
> What if two processes read debug information at the same time?
show_channels() acquires cdma.lock, so that shouldn't happen.
>
>> +static void do_show_channel_gather(struct output *o,
>> + phys_addr_t phys_addr,
>> + u32 words, struct host1x_cdma *cdma,
>> + phys_addr_t pin_addr, u32 *map_addr)
>> +{
>> + /* Map dmaget cursor to corresponding mem handle */
>> + u32 offset;
>> + int state, count, i;
>> +
>> + offset = phys_addr - pin_addr;
>> + /*
>> + * Sometimes we're given different hardware address to the same
>> + * page - in these cases the offset will get an invalid number and
>> + * we just have to bail out.
>> + */
>
> Why's that?
Because of a race - memory might've been unpinned and unmapped from
IOMMU and when we re-map (pin), we are given a new address.
But, I think this comment is a bit stale - we used to dump also old
gathers. The latest code only dumps jobs in sync queue, so the race
shouldn't happen.
>
>> + map_addr = host1x_memmgr_mmap(mem);
>> + if (!map_addr) {
>> + host1x_debug_output(o, "[could not mmap]\n");
>> + return;
>> + }
>> +
>> + /* Get base address from mem */
>> + sgt = host1x_memmgr_pin(mem);
>> + if (IS_ERR(sgt)) {
>> + host1x_debug_output(o, "[couldn't pin]\n");
>> + host1x_memmgr_munmap(mem, map_addr);
>> + return;
>> + }
>
> Maybe you should stick with one of "could not" or "couldn't". Makes it
> easier to search for.
I prefer "could not", so I'll use that.
>
>> +static void show_channel_gathers(struct output *o, struct host1x_cdma *cdma)
>> +{
>> + struct host1x_job *job;
>> +
>> + list_for_each_entry(job, &cdma->sync_queue, list) {
>> + int i;
>> + host1x_debug_output(o,
>> + "\n%p: JOB, syncpt_id=%d, syncpt_val=%d,"
>> + " first_get=%08x, timeout=%d"
>> + " num_slots=%d, num_handles=%d\n",
>> + job,
>> + job->syncpt_id,
>> + job->syncpt_end,
>> + job->first_get,
>> + job->timeout,
>> + job->num_slots,
>> + job->num_unpins);
>
> This could go on fewer lines.
Yes, will merge.
>
>> +static void host1x_debug_show_channel_cdma(struct host1x *m,
>> + struct host1x_channel *ch, struct output *o, int chid)
>> +{
> [...]
>> + switch (cbstat) {
>> + case 0x00010008:
>
> Again, symbolic names would be nice.
I propose I remove the decoding from kernel, and save 200 lines.
Terje
WARNING: multiple messages have this Message-ID (diff)
From: "Terje Bergström" <tbergstrom@nvidia.com>
To: Thierry Reding <thierry.reding@avionic-design.de>
Cc: Arto Merilainen <amerilainen@nvidia.com>,
"airlied@linux.ie" <airlied@linux.ie>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
"linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCHv5,RESEND 4/8] gpu: host1x: Add debug support
Date: Mon, 4 Feb 2013 20:41:25 -0800 [thread overview]
Message-ID: <51108D75.9030302@nvidia.com> (raw)
In-Reply-To: <20130204110339.GA28134@avionic-0098.mockup.avionic-design.de>
On 04.02.2013 03:03, Thierry Reding wrote:
> * PGP Signed by an unknown key
>
> On Tue, Jan 15, 2013 at 01:44:00PM +0200, Terje Bergstrom wrote:
>> diff --git a/drivers/gpu/host1x/debug.c b/drivers/gpu/host1x/debug.c
> [...]
>> +static pid_t host1x_debug_null_kickoff_pid;
>> +unsigned int host1x_debug_trace_cmdbuf;
>> +
>> +static pid_t host1x_debug_force_timeout_pid;
>> +static u32 host1x_debug_force_timeout_val;
>> +static u32 host1x_debug_force_timeout_channel;
>
> Please group static and non-static variables.
Will do.
>
>> diff --git a/drivers/gpu/host1x/debug.h b/drivers/gpu/host1x/debug.h
> [...]
>> +struct output {
>> + void (*fn)(void *ctx, const char *str, size_t len);
>> + void *ctx;
>> + char buf[256];
>> +};
>
> Do we really need this kind of abstraction? There really should be only
> one location where debug information is obtained, so I don't see a need
> for this.
This is used by debugfs code to direct to debugfs, and
nvhost_debug_dump() to send via printk.
>
>> diff --git a/drivers/gpu/host1x/dev.h b/drivers/gpu/host1x/dev.h
> [...]
>> struct host1x_syncpt_ops {
>> void (*reset)(struct host1x_syncpt *);
>> void (*reset_wait_base)(struct host1x_syncpt *);
>> @@ -117,6 +133,7 @@ struct host1x {
>> struct host1x_channel_ops channel_op;
>> struct host1x_cdma_ops cdma_op;
>> struct host1x_pushbuffer_ops cdma_pb_op;
>> + struct host1x_debug_ops debug_op;
>> struct host1x_syncpt_ops syncpt_op;
>> struct host1x_intr_ops intr_op;
>
> Again, better to pass in a const pointer to the ops structure.
Ok.
>
>> diff --git a/drivers/gpu/host1x/hw/debug_hw.c b/drivers/gpu/host1x/hw/debug_hw.c
>
>> +static int show_channel_command(struct output *o, u32 addr, u32 val, int *count)
>> +{
>> + unsigned mask;
>> + unsigned subop;
>> +
>> + switch (val >> 28) {
>> + case 0x0:
>
> These can easily be derived by looking at the debug output, but it may
> still make sense to assign symbolic names to them.
I have another suggestion. In downstream I removed the decoding part and
I just print out a string of hex. That removes quite a bit bunch of code
from kernel. It makes the debug output also more compact.
It's much easier to write a user space program to decode than maintain
it in kernel.
>
>> +static void show_channel_word(struct output *o, int *state, int *count,
>> + u32 addr, u32 val, struct host1x_cdma *cdma)
>> +{
>> + static int start_count, dont_print;
>
> What if two processes read debug information at the same time?
show_channels() acquires cdma.lock, so that shouldn't happen.
>
>> +static void do_show_channel_gather(struct output *o,
>> + phys_addr_t phys_addr,
>> + u32 words, struct host1x_cdma *cdma,
>> + phys_addr_t pin_addr, u32 *map_addr)
>> +{
>> + /* Map dmaget cursor to corresponding mem handle */
>> + u32 offset;
>> + int state, count, i;
>> +
>> + offset = phys_addr - pin_addr;
>> + /*
>> + * Sometimes we're given different hardware address to the same
>> + * page - in these cases the offset will get an invalid number and
>> + * we just have to bail out.
>> + */
>
> Why's that?
Because of a race - memory might've been unpinned and unmapped from
IOMMU and when we re-map (pin), we are given a new address.
But, I think this comment is a bit stale - we used to dump also old
gathers. The latest code only dumps jobs in sync queue, so the race
shouldn't happen.
>
>> + map_addr = host1x_memmgr_mmap(mem);
>> + if (!map_addr) {
>> + host1x_debug_output(o, "[could not mmap]\n");
>> + return;
>> + }
>> +
>> + /* Get base address from mem */
>> + sgt = host1x_memmgr_pin(mem);
>> + if (IS_ERR(sgt)) {
>> + host1x_debug_output(o, "[couldn't pin]\n");
>> + host1x_memmgr_munmap(mem, map_addr);
>> + return;
>> + }
>
> Maybe you should stick with one of "could not" or "couldn't". Makes it
> easier to search for.
I prefer "could not", so I'll use that.
>
>> +static void show_channel_gathers(struct output *o, struct host1x_cdma *cdma)
>> +{
>> + struct host1x_job *job;
>> +
>> + list_for_each_entry(job, &cdma->sync_queue, list) {
>> + int i;
>> + host1x_debug_output(o,
>> + "\n%p: JOB, syncpt_id=%d, syncpt_val=%d,"
>> + " first_get=%08x, timeout=%d"
>> + " num_slots=%d, num_handles=%d\n",
>> + job,
>> + job->syncpt_id,
>> + job->syncpt_end,
>> + job->first_get,
>> + job->timeout,
>> + job->num_slots,
>> + job->num_unpins);
>
> This could go on fewer lines.
Yes, will merge.
>
>> +static void host1x_debug_show_channel_cdma(struct host1x *m,
>> + struct host1x_channel *ch, struct output *o, int chid)
>> +{
> [...]
>> + switch (cbstat) {
>> + case 0x00010008:
>
> Again, symbolic names would be nice.
I propose I remove the decoding from kernel, and save 200 lines.
Terje
next prev parent reply other threads:[~2013-02-05 4:41 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-15 11:43 [PATCHv5,RESEND 0/8] Support for Tegra 2D hardware Terje Bergstrom
2013-01-15 11:43 ` Terje Bergstrom
2013-01-15 11:43 ` [PATCHv5,RESEND 1/8] gpu: host1x: Add host1x driver Terje Bergstrom
2013-01-15 11:43 ` Terje Bergstrom
2013-02-04 9:09 ` Thierry Reding
2013-02-04 9:09 ` Thierry Reding
[not found] ` <20130204090941.GA27443-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-02-05 3:30 ` Terje Bergström
2013-02-05 3:30 ` Terje Bergström
[not found] ` <51107CC0.9060900-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-05 7:43 ` Thierry Reding
2013-02-05 7:43 ` Thierry Reding
2013-02-06 20:13 ` Terje Bergström
2013-01-15 11:43 ` [PATCHv5,RESEND 2/8] gpu: host1x: Add syncpoint wait and interrupts Terje Bergstrom
2013-01-15 11:43 ` Terje Bergstrom
[not found] ` <1358250244-9678-3-git-send-email-tbergstrom-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-04 10:30 ` Thierry Reding
2013-02-04 10:30 ` Thierry Reding
[not found] ` <20130204103032.GB27443-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-02-05 4:29 ` Terje Bergström
2013-02-05 4:29 ` Terje Bergström
[not found] ` <51108A94.3060501-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-05 8:42 ` Thierry Reding
2013-02-05 8:42 ` Thierry Reding
[not found] ` <20130205084255.GB20437-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-02-06 20:29 ` Terje Bergström
2013-02-06 20:29 ` Terje Bergström
[not found] ` <5112BD26.5060800-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-06 20:38 ` Thierry Reding
2013-02-06 20:38 ` Thierry Reding
[not found] ` <20130206203854.GA1012-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-02-06 20:41 ` Terje Bergström
2013-02-06 20:41 ` Terje Bergström
2013-01-15 11:43 ` [PATCHv5,RESEND 3/8] gpu: host1x: Add channel support Terje Bergstrom
2013-01-15 11:43 ` Terje Bergstrom
[not found] ` <1358250244-9678-4-git-send-email-tbergstrom-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-25 15:24 ` Thierry Reding
2013-02-25 15:24 ` Thierry Reding
2013-02-26 9:48 ` Terje Bergström
[not found] ` <512C84E2.5090201-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-27 8:56 ` Thierry Reding
2013-02-27 8:56 ` Thierry Reding
2013-03-08 16:16 ` Terje Bergström
2013-03-08 16:16 ` Terje Bergström
[not found] ` <513A0ED0.4070701-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-03-08 20:43 ` Thierry Reding
2013-03-08 20:43 ` Thierry Reding
[not found] ` <20130308204301.GA30742-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-03-11 6:29 ` Terje Bergström
2013-03-11 6:29 ` Terje Bergström
[not found] ` <513D79E7.5000801-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-03-11 7:18 ` Thierry Reding
2013-03-11 7:18 ` Thierry Reding
[not found] ` <20130311071851.GA6033-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-03-11 9:21 ` Terje Bergström
2013-03-11 9:21 ` Terje Bergström
[not found] ` <513DA201.9010707-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-03-11 9:41 ` Thierry Reding
2013-03-11 9:41 ` Thierry Reding
2013-01-15 11:44 ` [PATCHv5,RESEND 4/8] gpu: host1x: Add debug support Terje Bergstrom
2013-01-15 11:44 ` Terje Bergstrom
2013-02-04 11:03 ` Thierry Reding
[not found] ` <20130204110339.GA28134-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-02-05 4:41 ` Terje Bergström [this message]
2013-02-05 4:41 ` Terje Bergström
2013-02-05 9:15 ` Thierry Reding
2013-02-05 9:15 ` Thierry Reding
[not found] ` <20130205091555.GC20437-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-02-06 20:58 ` Terje Bergström
2013-02-06 20:58 ` Terje Bergström
[not found] ` <5112C3EB.7020205-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-08 6:54 ` Thierry Reding
2013-02-08 6:54 ` Thierry Reding
2013-01-15 11:44 ` [PATCHv5,RESEND 5/8] drm: tegra: Move drm to live under host1x Terje Bergstrom
2013-01-15 11:44 ` Terje Bergstrom
[not found] ` <1358250244-9678-6-git-send-email-tbergstrom-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-04 11:08 ` Thierry Reding
2013-02-04 11:08 ` Thierry Reding
[not found] ` <20130204110804.GA595-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-02-05 4:45 ` Terje Bergström
2013-02-05 4:45 ` Terje Bergström
[not found] ` <51108E70.5000602-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-05 9:26 ` Thierry Reding
2013-02-05 9:26 ` Thierry Reding
2013-01-15 11:44 ` [PATCHv5,RESEND 6/8] gpu: host1x: Remove second host1x driver Terje Bergstrom
2013-01-15 11:44 ` Terje Bergstrom
[not found] ` <1358250244-9678-7-git-send-email-tbergstrom-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-04 11:23 ` Thierry Reding
2013-02-04 11:23 ` Thierry Reding
2013-01-15 11:44 ` [PATCHv5,RESEND 7/8] ARM: tegra: Add board data and 2D clocks Terje Bergstrom
2013-01-15 11:44 ` Terje Bergstrom
[not found] ` <1358250244-9678-8-git-send-email-tbergstrom-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-04 11:26 ` Thierry Reding
2013-02-04 11:26 ` Thierry Reding
[not found] ` <20130204112622.GC595-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-02-04 17:06 ` Stephen Warren
2013-02-04 17:06 ` Stephen Warren
2013-02-05 4:47 ` Terje Bergström
2013-02-05 4:47 ` Terje Bergström
[not found] ` <1358250244-9678-1-git-send-email-tbergstrom-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-15 11:44 ` [PATCHv5,RESEND 8/8] drm: tegra: Add gr2d device Terje Bergstrom
2013-01-15 11:44 ` Terje Bergstrom
[not found] ` <1358250244-9678-9-git-send-email-tbergstrom-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-04 12:56 ` Thierry Reding
2013-02-04 12:56 ` Thierry Reding
2013-02-05 5:17 ` Terje Bergström
[not found] ` <511095F9.6040607-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-05 9:54 ` Thierry Reding
2013-02-05 9:54 ` Thierry Reding
[not found] ` <20130205095403.GF20437-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-02-06 21:23 ` Terje Bergström
2013-02-06 21:23 ` Terje Bergström
[not found] ` <5112C9C5.8080205-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-08 7:07 ` Thierry Reding
2013-02-08 7:07 ` Thierry Reding
[not found] ` <20130208070734.GB15429-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-02-11 0:42 ` Terje Bergström
2013-02-11 0:42 ` Terje Bergström
[not found] ` <51183E8D.1090607-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-11 6:44 ` Thierry Reding
2013-02-11 6:44 ` Thierry Reding
[not found] ` <20130211064452.GA16676-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>
2013-02-11 15:40 ` Terje Bergström
2013-02-11 15:40 ` Terje Bergström
2013-01-22 9:03 ` [PATCHv5,RESEND 0/8] Support for Tegra 2D hardware Terje Bergström
2013-01-22 9:03 ` Terje Bergström
2013-02-01 11:29 ` Terje Bergström
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=51108D75.9030302@nvidia.com \
--to=tbergstrom-ddmlm1+adcrqt0dzr+alfa@public.gmane.org \
--cc=airlied-cv59FeDIM0c@public.gmane.org \
--cc=amerilainen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.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 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.