All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Heiko Stübner" <heiko@sntech.de>
To: Alexander Kochetkov <al.kochet@gmail.com>
Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-rockchip@lists.infradead.org,
	Thomas Gleixner <tglx@linutronix.de>,
	Mark Rutland <mark.rutland@arm.com>,
	Rob Herring <robh+dt@kernel.org>,
	Russell King <linux@armlinux.org.uk>,
	Caesar Wang <wxt@rock-chips.com>,
	Huang Tao <huangtao@rock-chips.com>,
	Daniel Lezcano <daniel.lezcano@linaro.org>
Subject: Re: [PATCH v3 13/13] clocksource/drivers/rockchip_timer: Prevent ftrace recursion
Date: Tue, 29 Nov 2016 16:01:09 +0100	[thread overview]
Message-ID: <7837485.H9nfDmPu0F@diego> (raw)
In-Reply-To: <1480427118-5126-14-git-send-email-al.kochet@gmail.com>

Am Dienstag, 29. November 2016, 16:45:18 schrieb Alexander Kochetkov:
> Currently rockchip_timer can be used as a scheduler clock. We properly
> marked rk_timer_sched_clock_read() as notrace but we then call another
> function rk_timer_counter_read() that _wasn't_ notrace.
> 
> Having a traceable function in the sched_clock() path leads to a recursion
> within ftrace and a kernel crash.
> 
> Fix this by adding an extra notrace function to keep other users of
> rk_timer_counter_read() traceable.
> 
> Signed-off-by: Alexander Kochetkov <al.kochet@gmail.com>

you introduced the issue yourself in patch 11/13. In general any patch should 
never leave the kernel in a worse state than it was before, so no patch should 
ever introduce known issues itself.

In that line of thought, don't patches 10+11 introduce warnings about unused 
functions as well when applied without patch 12?

Maybe merge them?


Heiko

> ---
>  drivers/clocksource/rockchip_timer.c |    9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/clocksource/rockchip_timer.c
> b/drivers/clocksource/rockchip_timer.c index 1af80a0..a127822 100644
> --- a/drivers/clocksource/rockchip_timer.c
> +++ b/drivers/clocksource/rockchip_timer.c
> @@ -87,7 +87,7 @@ static void rk_timer_update_counter(u64 cycles, struct
> rk_timer *timer) writel_relaxed(upper, timer->base + TIMER_LOAD_COUNT1);
>  }
> 
> -static u64 rk_timer_counter_read(struct rk_timer *timer)
> +static u64 notrace _rk_timer_counter_read(struct rk_timer *timer)
>  {
>  	u64 counter;
>  	u32 lower;
> @@ -106,6 +106,11 @@ static u64 rk_timer_counter_read(struct rk_timer
> *timer) return counter;
>  }
> 
> +static u64 rk_timer_counter_read(struct rk_timer *timer)
> +{
> +	return _rk_timer_counter_read(timer);
> +}
> +
>  static void rk_timer_interrupt_clear(struct rk_timer *timer)
>  {
>  	writel_relaxed(1, timer->base + TIMER_INT_STATUS);
> @@ -168,7 +173,7 @@ static u64 notrace rk_timer_sched_clock_read(void)
>  {
>  	struct rk_clocksource *_cs = &cs_timer;
> 
> -	return ~rk_timer_counter_read(&_cs->timer);
> +	return ~_rk_timer_counter_read(&_cs->timer);
>  }
> 
>  static int __init rk_timer_init(struct device_node *np, u32 ctrl_reg)

WARNING: multiple messages have this Message-ID (diff)
From: "Heiko Stübner" <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
To: Alexander Kochetkov <al.kochet-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
	Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
	Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Russell King <linux-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org>,
	Caesar Wang <wxt-TNX95d0MmH7DzftRWevZcw@public.gmane.org>,
	Huang Tao <huangtao-TNX95d0MmH7DzftRWevZcw@public.gmane.org>,
	Daniel Lezcano
	<daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Subject: Re: [PATCH v3 13/13] clocksource/drivers/rockchip_timer: Prevent ftrace recursion
Date: Tue, 29 Nov 2016 16:01:09 +0100	[thread overview]
Message-ID: <7837485.H9nfDmPu0F@diego> (raw)
In-Reply-To: <1480427118-5126-14-git-send-email-al.kochet-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Am Dienstag, 29. November 2016, 16:45:18 schrieb Alexander Kochetkov:
> Currently rockchip_timer can be used as a scheduler clock. We properly
> marked rk_timer_sched_clock_read() as notrace but we then call another
> function rk_timer_counter_read() that _wasn't_ notrace.
> 
> Having a traceable function in the sched_clock() path leads to a recursion
> within ftrace and a kernel crash.
> 
> Fix this by adding an extra notrace function to keep other users of
> rk_timer_counter_read() traceable.
> 
> Signed-off-by: Alexander Kochetkov <al.kochet-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

you introduced the issue yourself in patch 11/13. In general any patch should 
never leave the kernel in a worse state than it was before, so no patch should 
ever introduce known issues itself.

In that line of thought, don't patches 10+11 introduce warnings about unused 
functions as well when applied without patch 12?

Maybe merge them?


Heiko

> ---
>  drivers/clocksource/rockchip_timer.c |    9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/clocksource/rockchip_timer.c
> b/drivers/clocksource/rockchip_timer.c index 1af80a0..a127822 100644
> --- a/drivers/clocksource/rockchip_timer.c
> +++ b/drivers/clocksource/rockchip_timer.c
> @@ -87,7 +87,7 @@ static void rk_timer_update_counter(u64 cycles, struct
> rk_timer *timer) writel_relaxed(upper, timer->base + TIMER_LOAD_COUNT1);
>  }
> 
> -static u64 rk_timer_counter_read(struct rk_timer *timer)
> +static u64 notrace _rk_timer_counter_read(struct rk_timer *timer)
>  {
>  	u64 counter;
>  	u32 lower;
> @@ -106,6 +106,11 @@ static u64 rk_timer_counter_read(struct rk_timer
> *timer) return counter;
>  }
> 
> +static u64 rk_timer_counter_read(struct rk_timer *timer)
> +{
> +	return _rk_timer_counter_read(timer);
> +}
> +
>  static void rk_timer_interrupt_clear(struct rk_timer *timer)
>  {
>  	writel_relaxed(1, timer->base + TIMER_INT_STATUS);
> @@ -168,7 +173,7 @@ static u64 notrace rk_timer_sched_clock_read(void)
>  {
>  	struct rk_clocksource *_cs = &cs_timer;
> 
> -	return ~rk_timer_counter_read(&_cs->timer);
> +	return ~_rk_timer_counter_read(&_cs->timer);
>  }
> 
>  static int __init rk_timer_init(struct device_node *np, u32 ctrl_reg)

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: heiko@sntech.de (Heiko Stübner)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 13/13] clocksource/drivers/rockchip_timer: Prevent ftrace recursion
Date: Tue, 29 Nov 2016 16:01:09 +0100	[thread overview]
Message-ID: <7837485.H9nfDmPu0F@diego> (raw)
In-Reply-To: <1480427118-5126-14-git-send-email-al.kochet@gmail.com>

Am Dienstag, 29. November 2016, 16:45:18 schrieb Alexander Kochetkov:
> Currently rockchip_timer can be used as a scheduler clock. We properly
> marked rk_timer_sched_clock_read() as notrace but we then call another
> function rk_timer_counter_read() that _wasn't_ notrace.
> 
> Having a traceable function in the sched_clock() path leads to a recursion
> within ftrace and a kernel crash.
> 
> Fix this by adding an extra notrace function to keep other users of
> rk_timer_counter_read() traceable.
> 
> Signed-off-by: Alexander Kochetkov <al.kochet@gmail.com>

you introduced the issue yourself in patch 11/13. In general any patch should 
never leave the kernel in a worse state than it was before, so no patch should 
ever introduce known issues itself.

In that line of thought, don't patches 10+11 introduce warnings about unused 
functions as well when applied without patch 12?

Maybe merge them?


Heiko

> ---
>  drivers/clocksource/rockchip_timer.c |    9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/clocksource/rockchip_timer.c
> b/drivers/clocksource/rockchip_timer.c index 1af80a0..a127822 100644
> --- a/drivers/clocksource/rockchip_timer.c
> +++ b/drivers/clocksource/rockchip_timer.c
> @@ -87,7 +87,7 @@ static void rk_timer_update_counter(u64 cycles, struct
> rk_timer *timer) writel_relaxed(upper, timer->base + TIMER_LOAD_COUNT1);
>  }
> 
> -static u64 rk_timer_counter_read(struct rk_timer *timer)
> +static u64 notrace _rk_timer_counter_read(struct rk_timer *timer)
>  {
>  	u64 counter;
>  	u32 lower;
> @@ -106,6 +106,11 @@ static u64 rk_timer_counter_read(struct rk_timer
> *timer) return counter;
>  }
> 
> +static u64 rk_timer_counter_read(struct rk_timer *timer)
> +{
> +	return _rk_timer_counter_read(timer);
> +}
> +
>  static void rk_timer_interrupt_clear(struct rk_timer *timer)
>  {
>  	writel_relaxed(1, timer->base + TIMER_INT_STATUS);
> @@ -168,7 +173,7 @@ static u64 notrace rk_timer_sched_clock_read(void)
>  {
>  	struct rk_clocksource *_cs = &cs_timer;
> 
> -	return ~rk_timer_counter_read(&_cs->timer);
> +	return ~_rk_timer_counter_read(&_cs->timer);
>  }
> 
>  static int __init rk_timer_init(struct device_node *np, u32 ctrl_reg)

  reply	other threads:[~2016-11-29 15:03 UTC|newest]

Thread overview: 147+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-28 14:31 [PATCHv2 00/11] Implement clocksource for rockchip SoC using rockchip timer Alexander Kochetkov
2016-11-28 14:31 ` Alexander Kochetkov
2016-11-28 14:31 ` Alexander Kochetkov
2016-11-28 14:31 ` [PATCHv2 01/11] dt-bindings: clarify compatible property for rockchip timers Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31 ` [PATCHv2 02/11] ARM: dts: rockchip: update compatible property for rk3228 timer Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31 ` [PATCHv2 03/11] ARM: dts: rockchip: update compatible property for rk3229 timer Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31 ` [PATCHv2 04/11] ARM: dts: rockchip: add timer entries to rk3188 dtsi Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31 ` [PATCHv2 05/11] clocksource/drivers/rockchip_timer: split bc_timer into rk_timer and rk_clock_event_device Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31 ` [PATCHv2 06/11] clocksource/drivers/rockchip_timer: low level routines take rk_timer as parameter Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31 ` [PATCHv2 07/11] clocksource/drivers/rockchip_timer: drop unused rk_base() and rk_ctrl() Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31 ` [PATCHv2 08/11] clocksource/drivers/rockchip_timer: move TIMER_INT_UNMASK out of rk_timer_enable() Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31 ` [PATCHv2 09/11] clocksource/drivers/rockchip_timer: implement loading 64bit value into timer Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31 ` [PATCHv2 10/11] clocksource/drivers/rockchip_timer: implement reading 64bit value from timer Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31 ` [PATCHv2 11/11] clocksource/drivers/rockchip_timer: implement clocksource timer Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-28 14:31   ` Alexander Kochetkov
2016-11-29 13:45 ` [PATCH v3 00/13] Implement clocksource for rockchip SoC using rockchip timer Alexander Kochetkov
2016-11-29 13:45   ` Alexander Kochetkov
2016-11-29 13:45   ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 01/13] dt-bindings: clarify compatible property for rockchip timers Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 02/13] ARM: dts: rockchip: update compatible property for rk3228 timer Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 03/13] ARM: dts: rockchip: update compatible property for rk3229 timer Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 04/13] ARM: dts: rockchip: add timer entries to rk3188 dtsi Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 05/13] ARM: dts: rockchip: disable arm-global-timer for rk3188 Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 06/13] clocksource/drivers/rockchip_timer: split bc_timer into rk_timer and rk_clock_event_device Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 07/13] clocksource/drivers/rockchip_timer: low level routines take rk_timer as parameter Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 08/13] clocksource/drivers/rockchip_timer: drop unused rk_base() and rk_ctrl() Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 15:03     ` Heiko Stübner
2016-11-29 15:03       ` Heiko Stübner
2016-11-29 15:03       ` Heiko Stübner
2016-11-29 13:45   ` [PATCH v3 09/13] clocksource/drivers/rockchip_timer: move TIMER_INT_UNMASK out of rk_timer_enable() Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 10/13] clocksource/drivers/rockchip_timer: implement loading 64bit value into timer Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 11/13] clocksource/drivers/rockchip_timer: implement reading 64bit value from timer Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 12/13] clocksource/drivers/rockchip_timer: implement clocksource timer Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45   ` [PATCH v3 13/13] clocksource/drivers/rockchip_timer: Prevent ftrace recursion Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 13:45     ` Alexander Kochetkov
2016-11-29 15:01     ` Heiko Stübner [this message]
2016-11-29 15:01       ` Heiko Stübner
2016-11-29 15:01       ` Heiko Stübner
2016-11-29 15:36       ` Alexander Kochetkov
2016-11-29 15:36         ` Alexander Kochetkov
2016-11-29 15:36         ` Alexander Kochetkov
2016-11-29 16:14 ` [PATCH v4 0/9] Implement clocksource for rockchip SoC using rockchip timer Alexander Kochetkov
2016-11-29 16:14   ` Alexander Kochetkov
2016-11-29 16:14   ` Alexander Kochetkov
2016-11-29 16:14   ` [PATCH v4 1/9] dt-bindings: clarify compatible property for rockchip timers Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2016-12-05 22:22     ` Rob Herring
2016-12-05 22:22       ` Rob Herring
2016-12-05 22:22       ` Rob Herring
2016-11-29 16:14   ` [PATCH v4 2/9] ARM: dts: rockchip: update compatible property for rk3228 timer Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2017-01-23 15:40     ` Daniel Lezcano
2017-01-23 15:40       ` Daniel Lezcano
2017-01-23 15:40       ` Daniel Lezcano
2017-01-23 16:12       ` Heiko Stübner
2017-01-23 16:12         ` Heiko Stübner
2017-01-23 16:12         ` Heiko Stübner
2017-01-23 16:13       ` Alexander Kochetkov
2017-01-23 16:13         ` Alexander Kochetkov
2017-01-23 16:13         ` Alexander Kochetkov
2016-11-29 16:14   ` [PATCH v4 3/9] ARM: dts: rockchip: update compatible property for rk3229 timer Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2016-11-29 16:14   ` [PATCH v4 4/9] ARM: dts: rockchip: add timer entries to rk3188 SoC Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2016-11-29 16:14   ` [PATCH v4 5/9] ARM: dts: rockchip: disable arm-global-timer for rk3188 Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2017-01-23 16:14     ` Heiko Stübner
2017-01-23 16:14       ` Heiko Stübner
2016-11-29 16:14   ` [PATCH v4 6/9] clocksource/drivers/rockchip_timer: split bc_timer into rk_timer and rk_clock_event_device Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2017-01-23 16:26     ` Daniel Lezcano
2017-01-23 16:26       ` Daniel Lezcano
2017-01-23 16:45       ` Alexander Kochetkov
2017-01-23 16:45         ` Alexander Kochetkov
2016-11-29 16:14   ` [PATCH v4 7/9] clocksource/drivers/rockchip_timer: low level routines take rk_timer as parameter Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2016-11-29 16:14   ` [PATCH v4 8/9] clocksource/drivers/rockchip_timer: move TIMER_INT_UNMASK out of rk_timer_enable() Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2016-11-29 16:14   ` [PATCH v4 9/9] clocksource/drivers/rockchip_timer: implement clocksource timer Alexander Kochetkov
2016-11-29 16:14     ` Alexander Kochetkov
2017-01-23 17:09     ` Heiko Stübner
2017-01-23 17:09       ` Heiko Stübner
2016-12-21 14:21   ` [PATCH v4 0/9] Implement clocksource for rockchip SoC using rockchip timer Alexander Kochetkov
2016-12-21 14:21     ` Alexander Kochetkov
2016-12-21 14:21     ` Alexander Kochetkov
2017-01-23 14:47     ` Daniel Lezcano
2017-01-23 14:47       ` Daniel Lezcano
2017-01-23 14:47       ` Daniel Lezcano
2017-01-23 17:12       ` Heiko Stübner
2017-01-23 17:12         ` Heiko Stübner
2017-01-23 17:24         ` Alexander Kochetkov
2017-01-23 17:24           ` Alexander Kochetkov
2017-01-23 17:24           ` Alexander Kochetkov
2017-01-23 17:57           ` Daniel Lezcano
2017-01-23 17:57             ` Daniel Lezcano
2017-01-26 11:08             ` Alexander Kochetkov
2017-01-26 11:08               ` Alexander Kochetkov
2017-01-26 11:08               ` Alexander Kochetkov
2017-01-26 13:19               ` Daniel Lezcano
2017-01-26 13:19                 ` Daniel Lezcano

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=7837485.H9nfDmPu0F@diego \
    --to=heiko@sntech.de \
    --cc=al.kochet@gmail.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=huangtao@rock-chips.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=linux@armlinux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=wxt@rock-chips.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.