From: Kevin Hilman <khilman-l0cyMroinI0@public.gmane.org>
To: Shubhrajyoti D <shubhrajyoti-l0cyMroinI0@public.gmane.org>
Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org,
tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org,
w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org
Subject: Re: [PATCHv8 04/18] I2C: OMAP: I2C register restore only if context is lost
Date: Tue, 17 Apr 2012 06:45:44 -0700 [thread overview]
Message-ID: <87d376zd2v.fsf@ti.com> (raw)
In-Reply-To: <1334235995-6727-5-git-send-email-shubhrajyoti-l0cyMroinI0@public.gmane.org> (Shubhrajyoti D.'s message of "Thu, 12 Apr 2012 18:36:21 +0530")
Shubhrajyoti D <shubhrajyoti-l0cyMroinI0@public.gmane.org> writes:
> Currently i2c register restore is done always.
> Adding conditional restore.
> The i2c register restore is done only if the context is lost.
OK, minor comment below.
> Also remove the definition of SYSS_RESETDONE_MASK and use the
> one in omap_hwmod.h.
The definition is removed, but I don't see any of the users removed.
If the users were cleaned up earlier in the series, then the removal of
this should be done with that, or as a separate patch. I don't see why
it belongs with this patch.
> Signed-off-by: Shubhrajyoti D <shubhrajyoti-l0cyMroinI0@public.gmane.org>
> ---
> arch/arm/plat-omap/i2c.c | 3 ++
> drivers/i2c/busses/i2c-omap.c | 52 ++++++++++++++++++++++++++--------------
> include/linux/i2c-omap.h | 1 +
> 3 files changed, 38 insertions(+), 18 deletions(-)
>
> diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c
> index db071bc..4ccab07 100644
> --- a/arch/arm/plat-omap/i2c.c
> +++ b/arch/arm/plat-omap/i2c.c
> @@ -179,6 +179,9 @@ static inline int omap2_i2c_add_bus(int bus_id)
> */
> if (cpu_is_omap34xx())
> pdata->set_mpu_wkup_lat = omap_pm_set_max_mpu_wakeup_lat_compat;
> +
> + pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count;
> +
> pdev = omap_device_build(name, bus_id, oh, pdata,
> sizeof(struct omap_i2c_bus_platform_data),
> NULL, 0, 0);
> diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
> index a882558..45389db 100644
> --- a/drivers/i2c/busses/i2c-omap.c
> +++ b/drivers/i2c/busses/i2c-omap.c
> @@ -43,6 +43,7 @@
> #include <linux/slab.h>
> #include <linux/i2c-omap.h>
> #include <linux/pm_runtime.h>
> +#include <plat/omap_device.h>
>
> /* I2C controller revisions */
> #define OMAP_I2C_OMAP1_REV_2 0x20
> @@ -157,9 +158,6 @@ enum {
> #define OMAP_I2C_SYSTEST_SDA_I (1 << 1) /* SDA line sense in */
> #define OMAP_I2C_SYSTEST_SDA_O (1 << 0) /* SDA line drive out */
>
> -/* OCP_SYSSTATUS bit definitions */
> -#define SYSS_RESETDONE_MASK (1 << 0)
> -
> /* OCP_SYSCONFIG bit definitions */
> #define SYSC_CLOCKACTIVITY_MASK (0x3 << 8)
> #define SYSC_SIDLEMODE_MASK (0x3 << 3)
> @@ -184,6 +182,7 @@ struct omap_i2c_dev {
> u32 latency; /* maximum mpu wkup latency */
> void (*set_mpu_wkup_lat)(struct device *dev,
> long latency);
> + int (*get_context_loss_count)(struct device *dev);
> u32 speed; /* Speed of bus in kHz */
> u32 dtrev; /* extra revision from DT */
> u32 flags;
> @@ -206,6 +205,7 @@ struct omap_i2c_dev {
> u16 syscstate;
> u16 westate;
> u16 errata;
> + int dev_lost_count;
> };
>
> static const u8 reg_map_ip_v1[] = {
> @@ -1025,6 +1025,7 @@ omap_i2c_probe(struct platform_device *pdev)
> dev->speed = pdata->clkrate;
> dev->flags = pdata->flags;
> dev->set_mpu_wkup_lat = pdata->set_mpu_wkup_lat;
> + dev->get_context_loss_count = pdata->get_context_loss_count;
> dev->dtrev = pdata->rev;
> }
>
> @@ -1151,12 +1152,32 @@ omap_i2c_remove(struct platform_device *pdev)
> }
>
> #ifdef CONFIG_PM_RUNTIME
> +static void omap_i2c_restore(struct omap_i2c_dev *dev)
> +{
> + omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
> + omap_i2c_write_reg(dev, OMAP_I2C_PSC_REG, dev->pscstate);
> + omap_i2c_write_reg(dev, OMAP_I2C_SCLL_REG, dev->scllstate);
> + omap_i2c_write_reg(dev, OMAP_I2C_SCLH_REG, dev->sclhstate);
> + omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, dev->bufstate);
> + omap_i2c_write_reg(dev, OMAP_I2C_WE_REG, dev->westate);
> + omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
> + /*
> + * Don't write to this register if the IE state is 0 as it can
> + * cause deadlock.
> + */
> + if (dev->iestate)
> + omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, dev->iestate);
> +
> +}
> static int omap_i2c_runtime_suspend(struct device *dev)
> {
> struct platform_device *pdev = to_platform_device(dev);
> struct omap_i2c_dev *_dev = platform_get_drvdata(pdev);
> u16 iv;
>
> + if (_dev->get_context_loss_count)
> + _dev->dev_lost_count = _dev->get_context_loss_count(dev);
> +
> _dev->iestate = omap_i2c_read_reg(_dev, OMAP_I2C_IE_REG);
> if (_dev->dtrev == OMAP_I2C_IP_VERSION_2)
> omap_i2c_write_reg(_dev, OMAP_I2C_IP_V2_IRQENABLE_CLR, 1);
> @@ -1179,24 +1200,19 @@ static int omap_i2c_runtime_resume(struct device *dev)
> {
> struct platform_device *pdev = to_platform_device(dev);
> struct omap_i2c_dev *_dev = platform_get_drvdata(pdev);
> + int loss_cnt;
>
> - if (_dev->flags & OMAP_I2C_FLAG_RESET_REGS_POSTIDLE) {
> - omap_i2c_write_reg(_dev, OMAP_I2C_CON_REG, 0);
> - omap_i2c_write_reg(_dev, OMAP_I2C_PSC_REG, _dev->pscstate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_SCLL_REG, _dev->scllstate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_SCLH_REG, _dev->sclhstate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_BUF_REG, _dev->bufstate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_SYSC_REG, _dev->syscstate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_WE_REG, _dev->westate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
> + if (_dev->get_context_loss_count) {
> + loss_cnt = _dev->get_context_loss_count(dev);
> + if (loss_cnt < 0)
> + return loss_cnt;
To avoid messing up driver state, upon error, you should probably
restore context, not abort.
> + if (_dev->dev_lost_count == loss_cnt && _dev->dev_lost_count)
> + return 0;
Why the non-zero check?
Seems like all you need to check is if (_dev->dev_lost_count != loss_cnt).
Kevin
> }
>
> - /*
> - * Don't write to this register if the IE state is 0 as it can
> - * cause deadlock.
> - */
> - if (_dev->iestate)
> - omap_i2c_write_reg(_dev, OMAP_I2C_IE_REG, _dev->iestate);
> + if (_dev->flags & OMAP_I2C_FLAG_RESET_REGS_POSTIDLE)
> + omap_i2c_restore(_dev);
>
> return 0;
> }
> diff --git a/include/linux/i2c-omap.h b/include/linux/i2c-omap.h
> index 92a0dc7..c76cbc0 100644
> --- a/include/linux/i2c-omap.h
> +++ b/include/linux/i2c-omap.h
> @@ -35,6 +35,7 @@ struct omap_i2c_bus_platform_data {
> u32 rev;
> u32 flags;
> void (*set_mpu_wkup_lat)(struct device *dev, long set);
> + int (*get_context_loss_count)(struct device *dev);
> };
>
> #endif
WARNING: multiple messages have this Message-ID (diff)
From: khilman@ti.com (Kevin Hilman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv8 04/18] I2C: OMAP: I2C register restore only if context is lost
Date: Tue, 17 Apr 2012 06:45:44 -0700 [thread overview]
Message-ID: <87d376zd2v.fsf@ti.com> (raw)
In-Reply-To: <1334235995-6727-5-git-send-email-shubhrajyoti@ti.com> (Shubhrajyoti D.'s message of "Thu, 12 Apr 2012 18:36:21 +0530")
Shubhrajyoti D <shubhrajyoti@ti.com> writes:
> Currently i2c register restore is done always.
> Adding conditional restore.
> The i2c register restore is done only if the context is lost.
OK, minor comment below.
> Also remove the definition of SYSS_RESETDONE_MASK and use the
> one in omap_hwmod.h.
The definition is removed, but I don't see any of the users removed.
If the users were cleaned up earlier in the series, then the removal of
this should be done with that, or as a separate patch. I don't see why
it belongs with this patch.
> Signed-off-by: Shubhrajyoti D <shubhrajyoti@ti.com>
> ---
> arch/arm/plat-omap/i2c.c | 3 ++
> drivers/i2c/busses/i2c-omap.c | 52 ++++++++++++++++++++++++++--------------
> include/linux/i2c-omap.h | 1 +
> 3 files changed, 38 insertions(+), 18 deletions(-)
>
> diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c
> index db071bc..4ccab07 100644
> --- a/arch/arm/plat-omap/i2c.c
> +++ b/arch/arm/plat-omap/i2c.c
> @@ -179,6 +179,9 @@ static inline int omap2_i2c_add_bus(int bus_id)
> */
> if (cpu_is_omap34xx())
> pdata->set_mpu_wkup_lat = omap_pm_set_max_mpu_wakeup_lat_compat;
> +
> + pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count;
> +
> pdev = omap_device_build(name, bus_id, oh, pdata,
> sizeof(struct omap_i2c_bus_platform_data),
> NULL, 0, 0);
> diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
> index a882558..45389db 100644
> --- a/drivers/i2c/busses/i2c-omap.c
> +++ b/drivers/i2c/busses/i2c-omap.c
> @@ -43,6 +43,7 @@
> #include <linux/slab.h>
> #include <linux/i2c-omap.h>
> #include <linux/pm_runtime.h>
> +#include <plat/omap_device.h>
>
> /* I2C controller revisions */
> #define OMAP_I2C_OMAP1_REV_2 0x20
> @@ -157,9 +158,6 @@ enum {
> #define OMAP_I2C_SYSTEST_SDA_I (1 << 1) /* SDA line sense in */
> #define OMAP_I2C_SYSTEST_SDA_O (1 << 0) /* SDA line drive out */
>
> -/* OCP_SYSSTATUS bit definitions */
> -#define SYSS_RESETDONE_MASK (1 << 0)
> -
> /* OCP_SYSCONFIG bit definitions */
> #define SYSC_CLOCKACTIVITY_MASK (0x3 << 8)
> #define SYSC_SIDLEMODE_MASK (0x3 << 3)
> @@ -184,6 +182,7 @@ struct omap_i2c_dev {
> u32 latency; /* maximum mpu wkup latency */
> void (*set_mpu_wkup_lat)(struct device *dev,
> long latency);
> + int (*get_context_loss_count)(struct device *dev);
> u32 speed; /* Speed of bus in kHz */
> u32 dtrev; /* extra revision from DT */
> u32 flags;
> @@ -206,6 +205,7 @@ struct omap_i2c_dev {
> u16 syscstate;
> u16 westate;
> u16 errata;
> + int dev_lost_count;
> };
>
> static const u8 reg_map_ip_v1[] = {
> @@ -1025,6 +1025,7 @@ omap_i2c_probe(struct platform_device *pdev)
> dev->speed = pdata->clkrate;
> dev->flags = pdata->flags;
> dev->set_mpu_wkup_lat = pdata->set_mpu_wkup_lat;
> + dev->get_context_loss_count = pdata->get_context_loss_count;
> dev->dtrev = pdata->rev;
> }
>
> @@ -1151,12 +1152,32 @@ omap_i2c_remove(struct platform_device *pdev)
> }
>
> #ifdef CONFIG_PM_RUNTIME
> +static void omap_i2c_restore(struct omap_i2c_dev *dev)
> +{
> + omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
> + omap_i2c_write_reg(dev, OMAP_I2C_PSC_REG, dev->pscstate);
> + omap_i2c_write_reg(dev, OMAP_I2C_SCLL_REG, dev->scllstate);
> + omap_i2c_write_reg(dev, OMAP_I2C_SCLH_REG, dev->sclhstate);
> + omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, dev->bufstate);
> + omap_i2c_write_reg(dev, OMAP_I2C_WE_REG, dev->westate);
> + omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
> + /*
> + * Don't write to this register if the IE state is 0 as it can
> + * cause deadlock.
> + */
> + if (dev->iestate)
> + omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, dev->iestate);
> +
> +}
> static int omap_i2c_runtime_suspend(struct device *dev)
> {
> struct platform_device *pdev = to_platform_device(dev);
> struct omap_i2c_dev *_dev = platform_get_drvdata(pdev);
> u16 iv;
>
> + if (_dev->get_context_loss_count)
> + _dev->dev_lost_count = _dev->get_context_loss_count(dev);
> +
> _dev->iestate = omap_i2c_read_reg(_dev, OMAP_I2C_IE_REG);
> if (_dev->dtrev == OMAP_I2C_IP_VERSION_2)
> omap_i2c_write_reg(_dev, OMAP_I2C_IP_V2_IRQENABLE_CLR, 1);
> @@ -1179,24 +1200,19 @@ static int omap_i2c_runtime_resume(struct device *dev)
> {
> struct platform_device *pdev = to_platform_device(dev);
> struct omap_i2c_dev *_dev = platform_get_drvdata(pdev);
> + int loss_cnt;
>
> - if (_dev->flags & OMAP_I2C_FLAG_RESET_REGS_POSTIDLE) {
> - omap_i2c_write_reg(_dev, OMAP_I2C_CON_REG, 0);
> - omap_i2c_write_reg(_dev, OMAP_I2C_PSC_REG, _dev->pscstate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_SCLL_REG, _dev->scllstate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_SCLH_REG, _dev->sclhstate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_BUF_REG, _dev->bufstate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_SYSC_REG, _dev->syscstate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_WE_REG, _dev->westate);
> - omap_i2c_write_reg(_dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
> + if (_dev->get_context_loss_count) {
> + loss_cnt = _dev->get_context_loss_count(dev);
> + if (loss_cnt < 0)
> + return loss_cnt;
To avoid messing up driver state, upon error, you should probably
restore context, not abort.
> + if (_dev->dev_lost_count == loss_cnt && _dev->dev_lost_count)
> + return 0;
Why the non-zero check?
Seems like all you need to check is if (_dev->dev_lost_count != loss_cnt).
Kevin
> }
>
> - /*
> - * Don't write to this register if the IE state is 0 as it can
> - * cause deadlock.
> - */
> - if (_dev->iestate)
> - omap_i2c_write_reg(_dev, OMAP_I2C_IE_REG, _dev->iestate);
> + if (_dev->flags & OMAP_I2C_FLAG_RESET_REGS_POSTIDLE)
> + omap_i2c_restore(_dev);
>
> return 0;
> }
> diff --git a/include/linux/i2c-omap.h b/include/linux/i2c-omap.h
> index 92a0dc7..c76cbc0 100644
> --- a/include/linux/i2c-omap.h
> +++ b/include/linux/i2c-omap.h
> @@ -35,6 +35,7 @@ struct omap_i2c_bus_platform_data {
> u32 rev;
> u32 flags;
> void (*set_mpu_wkup_lat)(struct device *dev, long set);
> + int (*get_context_loss_count)(struct device *dev);
> };
>
> #endif
next prev parent reply other threads:[~2012-04-17 13:45 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-12 13:06 [PATCHv8 00/18] I2C Updates Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 02/18] I2C: OMAP: Remove reset at init Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
[not found] ` <1334235995-6727-1-git-send-email-shubhrajyoti-l0cyMroinI0@public.gmane.org>
2012-04-12 13:06 ` [PATCHv8 01/18] I2C: OMAP: make omap_i2c_unidle/idle functions depend on CONFIG_PM_RUNTIME Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 03/18] I2C: OMAP: Recover from Bus Busy condition Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 04/18] I2C: OMAP: I2C register restore only if context is lost Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-16 18:13 ` Tony Lindgren
2012-04-16 18:13 ` Tony Lindgren
2012-04-17 5:50 ` Shubhrajyoti
2012-04-17 5:50 ` Shubhrajyoti
[not found] ` <1334235995-6727-5-git-send-email-shubhrajyoti-l0cyMroinI0@public.gmane.org>
2012-04-17 13:45 ` Kevin Hilman [this message]
2012-04-17 13:45 ` Kevin Hilman
[not found] ` <87d376zd2v.fsf-l0cyMroinI0@public.gmane.org>
2012-04-17 15:08 ` Shubhrajyoti Datta
2012-04-17 15:08 ` Shubhrajyoti Datta
2012-04-18 7:19 ` Datta, Shubhrajyoti
2012-04-18 7:19 ` Datta, Shubhrajyoti
2012-04-18 14:08 ` Kevin Hilman
2012-04-18 14:08 ` Kevin Hilman
[not found] ` <CANQgH-af1VCutKqpq8jK1yTPHybgvnUNA3zdfQq4AYcWcJRtvA@mail.gmail.com>
[not found] ` <CANQgH-af1VCutKqpq8jK1yTPHybgvnUNA3zdfQq4AYcWcJRtvA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-04-20 14:17 ` Datta, Shubhrajyoti
2012-04-20 14:17 ` Datta, Shubhrajyoti
2012-04-12 13:06 ` [PATCHv8 08/18] I2C: OMAP: Fix the error handling Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 09/18] I2C: OMAP: Correct I2C revision for OMAP3 Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 10/18] I2C: OMAP: Don't check if wait_for_completion_timeout() returns less than zero Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 12/18] I2C: OMAP: Fix the crash in i2c remove Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 13/18] I2C: OMAP: Handle error check for pm runtime Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 15/18] I2C: OMAP: make the read ready processing a separate function Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 17/18] I2C: OMAP: Do not set the XUDF if the underflow is not reached Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 18/18] I2C: OMAP: Rename the 1p153 to the erratum id i462 Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 05/18] I2C: OMAP: Fix the interrupt clearing in OMAP4 Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 06/18] I2C: OMAP: Fix the mismatch of pm_runtime enable and disable Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 07/18] I2C: OMAP: Optimise the remove code Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 11/18] I2C: OMAP: use devm_* functions Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 14/18] I2C: OMAP: Use SET_RUNTIME_PM_OPS Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
2012-04-12 13:06 ` [PATCHv8 16/18] I2C: OMAP: fix missing handling of errata I2C_OMAP3_1P153 Shubhrajyoti D
2012-04-12 13:06 ` Shubhrajyoti D
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=87d376zd2v.fsf@ti.com \
--to=khilman-l0cymroini0@public.gmane.org \
--cc=ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=shubhrajyoti-l0cyMroinI0@public.gmane.org \
--cc=tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org \
--cc=w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@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.