From: Ulf Hansson <ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> To: Jon Hunter <jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Cc: Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>, Jason Cooper <jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org>, Marc Zyngier <marc.zyngier-5wv7dgnIgG8@public.gmane.org>, Jiang Liu <jiang.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>, Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>, Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>, Kevin Hilman <khilman-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, Geert Uytterhoeven <geert-Td1EMuHUCqxL1ZNQvxDV9g@public.gmane.org>, Grygorii Strashko <grygorii.strashko-l0cyMroinI0@public.gmane.org>, Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>, Linus Walleij <linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>, Soren Brinkmann <soren.brinkmann-gjFFaj9aHVfQT0dZR+AlfA@public.gmane.org>, "linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>, "linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" <linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>, "linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" <linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>, "Rafael J. Wysocki" <rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org> Subject: Re: [RFC PATCH V2 3/8] genirq: Add runtime power management support for IRQ chips Date: Mon, 18 Jan 2016 15:47:56 +0100 [thread overview] Message-ID: <CAPDyKFqZK4HYWgXam63=eCKAWsjwCiQbT5jdmgjqid_er3Sg1g@mail.gmail.com> (raw) In-Reply-To: <1450349309-8107-4-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> +linux-pm, Rafael On 17 December 2015 at 11:48, Jon Hunter <jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote: > Some IRQ chips may be located in a power domain outside of the CPU > subsystem and hence will require device specific runtime power management. > In order to support such IRQ chips, add a pointer for a device structure > to the irq_chip structure, and if this pointer is populated by the IRQ > chip driver and the flag CHIP_HAS_RPM is set, then the pm_runtime_get/put > APIs for this chip will be called when an IRQ is requested/freed, > respectively. Overall I like the idea of this patch(set), as it will allow us to save power for "unused" irqchips. > > Signed-off-by: Jon Hunter <jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> > --- > include/linux/irq.h | 4 ++++ > kernel/irq/internals.h | 24 ++++++++++++++++++++++++ > kernel/irq/manage.c | 7 +++++++ > 3 files changed, 35 insertions(+) > > diff --git a/include/linux/irq.h b/include/linux/irq.h > index 3c1c96786248..7a61a7f76177 100644 > --- a/include/linux/irq.h > +++ b/include/linux/irq.h > @@ -307,6 +307,7 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) > /** > * struct irq_chip - hardware interrupt chip descriptor > * > + * @dev: pointer to associated device > * @name: name for /proc/interrupts > * @irq_startup: start up the interrupt (defaults to ->enable if NULL) > * @irq_shutdown: shut down the interrupt (defaults to ->disable if NULL) > @@ -344,6 +345,7 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) > * @flags: chip specific flags > */ > struct irq_chip { > + struct device *dev; > const char *name; > unsigned int (*irq_startup)(struct irq_data *data); > void (*irq_shutdown)(struct irq_data *data); > @@ -399,6 +401,7 @@ struct irq_chip { > * IRQCHIP_SKIP_SET_WAKE: Skip chip.irq_set_wake(), for this irq chip > * IRQCHIP_ONESHOT_SAFE: One shot does not require mask/unmask > * IRQCHIP_EOI_THREADED: Chip requires eoi() on unmask in threaded mode > + * IRQCHIP_HAS_PM: Chip requires runtime power management Perhaps we don't need to add a specific flag for this, but instead just check if the ->dev pointer has been assigned and then perform runtime PM management? > */ > enum { > IRQCHIP_SET_TYPE_MASKED = (1 << 0), > @@ -408,6 +411,7 @@ enum { > IRQCHIP_SKIP_SET_WAKE = (1 << 4), > IRQCHIP_ONESHOT_SAFE = (1 << 5), > IRQCHIP_EOI_THREADED = (1 << 6), > + IRQCHIP_HAS_RPM = (1 << 7), > }; > > #include <linux/irqdesc.h> > diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h > index fcab63c66905..30a2add7cae6 100644 > --- a/kernel/irq/internals.h > +++ b/kernel/irq/internals.h > @@ -7,6 +7,7 @@ > */ > #include <linux/irqdesc.h> > #include <linux/kernel_stat.h> > +#include <linux/pm_runtime.h> > > #ifdef CONFIG_SPARSE_IRQ > # define IRQ_BITMAP_BITS (NR_IRQS + 8196) > @@ -125,6 +126,29 @@ static inline void chip_bus_sync_unlock(struct irq_desc *desc) > desc->irq_data.chip->irq_bus_sync_unlock(&desc->irq_data); > } > > +/* Inline functions for support of irq chips that require runtime pm */ > +static inline int chip_pm_get(struct irq_desc *desc) Why does these new get/put functions need to be inline functions and thus defined in the header file? Perhaps move them to manage.c are better? > +{ > + int retval = 0; > + > + if (desc->irq_data.chip->dev && > + desc->irq_data.chip->flags & IRQCHIP_HAS_RPM) > + retval = pm_runtime_get_sync(desc->irq_data.chip->dev); > + > + return (retval < 0) ? retval : 0; > +} > + > +static inline int chip_pm_put(struct irq_desc *desc) > +{ > + int retval = 0; > + > + if (desc->irq_data.chip->dev && > + desc->irq_data.chip->flags & IRQCHIP_HAS_RPM) > + retval = pm_runtime_put(desc->irq_data.chip->dev); > + > + return (retval < 0) ? retval : 0; This won't play nicely when CONFIG_PM is unset, as pm_runtime_put() would return -ENOSYS. In such cases I guess you would like to ignore the error!? > +} > + > #define _IRQ_DESC_CHECK (1 << 0) > #define _IRQ_DESC_PERCPU (1 << 1) > > diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c > index 2a429b061171..8a96e4f1e985 100644 > --- a/kernel/irq/manage.c > +++ b/kernel/irq/manage.c > @@ -1116,6 +1116,10 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) > if (!try_module_get(desc->owner)) > return -ENODEV; > > + ret = chip_pm_get(desc); > + if (ret < 0) > + return ret; > + > new->irq = irq; > > /* > @@ -1400,6 +1404,7 @@ out_thread: > put_task_struct(t); > } > out_mput: > + chip_pm_put(desc); > module_put(desc->owner); > return ret; > } > @@ -1513,6 +1518,7 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id) > } > } I don't think using __free_irq() is the correct place to decrease the runtime PM usage count. It will keep the irqchip runtime resumed even if there are no irqs enabled for it. Instead I would rather allow the irqchip to be runtime suspended, when there are no irqs enabled on it. Therefore you should rather use __enable|disable_irq() from where you increase/decrease the runtime PM usage count. Although, I realize that may become a bit troublesome as in some of the execution paths where these functions are invoked, are done while holding a spinlock with irqs disabled. Invoking pm_runtime_get_sync() thus leads to that the irqchip's runtime PM callbacks needs to be irqsafe. Another option is to somehow make use the asynchronous API; pm_runtime_get() instead. > > + chip_pm_put(desc); > module_put(desc->owner); > kfree(action->secondary); > return action; > @@ -1799,6 +1805,7 @@ static struct irqaction *__free_percpu_irq(unsigned int irq, void __percpu *dev_ > > unregister_handler_proc(irq, action); > > + chip_pm_put(desc); > module_put(desc->owner); > return action; Kind regards Uffe
WARNING: multiple messages have this Message-ID (diff)
From: Ulf Hansson <ulf.hansson@linaro.org> To: Jon Hunter <jonathanh@nvidia.com> Cc: Thomas Gleixner <tglx@linutronix.de>, Jason Cooper <jason@lakedaemon.net>, Marc Zyngier <marc.zyngier@arm.com>, Jiang Liu <jiang.liu@linux.intel.com>, Stephen Warren <swarren@wwwdotorg.org>, Thierry Reding <thierry.reding@gmail.com>, Kevin Hilman <khilman@kernel.org>, Geert Uytterhoeven <geert@linux-m68k.org>, Grygorii Strashko <grygorii.strashko@ti.com>, Lars-Peter Clausen <lars@metafoo.de>, Linus Walleij <linus.walleij@linaro.org>, Soren Brinkmann <soren.brinkmann@xilinx.com>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, "linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>, "linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>, "Rafael J. Wysocki" <rjw@rjwysocki.net> Subject: Re: [RFC PATCH V2 3/8] genirq: Add runtime power management support for IRQ chips Date: Mon, 18 Jan 2016 15:47:56 +0100 [thread overview] Message-ID: <CAPDyKFqZK4HYWgXam63=eCKAWsjwCiQbT5jdmgjqid_er3Sg1g@mail.gmail.com> (raw) In-Reply-To: <1450349309-8107-4-git-send-email-jonathanh@nvidia.com> +linux-pm, Rafael On 17 December 2015 at 11:48, Jon Hunter <jonathanh@nvidia.com> wrote: > Some IRQ chips may be located in a power domain outside of the CPU > subsystem and hence will require device specific runtime power management. > In order to support such IRQ chips, add a pointer for a device structure > to the irq_chip structure, and if this pointer is populated by the IRQ > chip driver and the flag CHIP_HAS_RPM is set, then the pm_runtime_get/put > APIs for this chip will be called when an IRQ is requested/freed, > respectively. Overall I like the idea of this patch(set), as it will allow us to save power for "unused" irqchips. > > Signed-off-by: Jon Hunter <jonathanh@nvidia.com> > --- > include/linux/irq.h | 4 ++++ > kernel/irq/internals.h | 24 ++++++++++++++++++++++++ > kernel/irq/manage.c | 7 +++++++ > 3 files changed, 35 insertions(+) > > diff --git a/include/linux/irq.h b/include/linux/irq.h > index 3c1c96786248..7a61a7f76177 100644 > --- a/include/linux/irq.h > +++ b/include/linux/irq.h > @@ -307,6 +307,7 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) > /** > * struct irq_chip - hardware interrupt chip descriptor > * > + * @dev: pointer to associated device > * @name: name for /proc/interrupts > * @irq_startup: start up the interrupt (defaults to ->enable if NULL) > * @irq_shutdown: shut down the interrupt (defaults to ->disable if NULL) > @@ -344,6 +345,7 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) > * @flags: chip specific flags > */ > struct irq_chip { > + struct device *dev; > const char *name; > unsigned int (*irq_startup)(struct irq_data *data); > void (*irq_shutdown)(struct irq_data *data); > @@ -399,6 +401,7 @@ struct irq_chip { > * IRQCHIP_SKIP_SET_WAKE: Skip chip.irq_set_wake(), for this irq chip > * IRQCHIP_ONESHOT_SAFE: One shot does not require mask/unmask > * IRQCHIP_EOI_THREADED: Chip requires eoi() on unmask in threaded mode > + * IRQCHIP_HAS_PM: Chip requires runtime power management Perhaps we don't need to add a specific flag for this, but instead just check if the ->dev pointer has been assigned and then perform runtime PM management? > */ > enum { > IRQCHIP_SET_TYPE_MASKED = (1 << 0), > @@ -408,6 +411,7 @@ enum { > IRQCHIP_SKIP_SET_WAKE = (1 << 4), > IRQCHIP_ONESHOT_SAFE = (1 << 5), > IRQCHIP_EOI_THREADED = (1 << 6), > + IRQCHIP_HAS_RPM = (1 << 7), > }; > > #include <linux/irqdesc.h> > diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h > index fcab63c66905..30a2add7cae6 100644 > --- a/kernel/irq/internals.h > +++ b/kernel/irq/internals.h > @@ -7,6 +7,7 @@ > */ > #include <linux/irqdesc.h> > #include <linux/kernel_stat.h> > +#include <linux/pm_runtime.h> > > #ifdef CONFIG_SPARSE_IRQ > # define IRQ_BITMAP_BITS (NR_IRQS + 8196) > @@ -125,6 +126,29 @@ static inline void chip_bus_sync_unlock(struct irq_desc *desc) > desc->irq_data.chip->irq_bus_sync_unlock(&desc->irq_data); > } > > +/* Inline functions for support of irq chips that require runtime pm */ > +static inline int chip_pm_get(struct irq_desc *desc) Why does these new get/put functions need to be inline functions and thus defined in the header file? Perhaps move them to manage.c are better? > +{ > + int retval = 0; > + > + if (desc->irq_data.chip->dev && > + desc->irq_data.chip->flags & IRQCHIP_HAS_RPM) > + retval = pm_runtime_get_sync(desc->irq_data.chip->dev); > + > + return (retval < 0) ? retval : 0; > +} > + > +static inline int chip_pm_put(struct irq_desc *desc) > +{ > + int retval = 0; > + > + if (desc->irq_data.chip->dev && > + desc->irq_data.chip->flags & IRQCHIP_HAS_RPM) > + retval = pm_runtime_put(desc->irq_data.chip->dev); > + > + return (retval < 0) ? retval : 0; This won't play nicely when CONFIG_PM is unset, as pm_runtime_put() would return -ENOSYS. In such cases I guess you would like to ignore the error!? > +} > + > #define _IRQ_DESC_CHECK (1 << 0) > #define _IRQ_DESC_PERCPU (1 << 1) > > diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c > index 2a429b061171..8a96e4f1e985 100644 > --- a/kernel/irq/manage.c > +++ b/kernel/irq/manage.c > @@ -1116,6 +1116,10 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) > if (!try_module_get(desc->owner)) > return -ENODEV; > > + ret = chip_pm_get(desc); > + if (ret < 0) > + return ret; > + > new->irq = irq; > > /* > @@ -1400,6 +1404,7 @@ out_thread: > put_task_struct(t); > } > out_mput: > + chip_pm_put(desc); > module_put(desc->owner); > return ret; > } > @@ -1513,6 +1518,7 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id) > } > } I don't think using __free_irq() is the correct place to decrease the runtime PM usage count. It will keep the irqchip runtime resumed even if there are no irqs enabled for it. Instead I would rather allow the irqchip to be runtime suspended, when there are no irqs enabled on it. Therefore you should rather use __enable|disable_irq() from where you increase/decrease the runtime PM usage count. Although, I realize that may become a bit troublesome as in some of the execution paths where these functions are invoked, are done while holding a spinlock with irqs disabled. Invoking pm_runtime_get_sync() thus leads to that the irqchip's runtime PM callbacks needs to be irqsafe. Another option is to somehow make use the asynchronous API; pm_runtime_get() instead. > > + chip_pm_put(desc); > module_put(desc->owner); > kfree(action->secondary); > return action; > @@ -1799,6 +1805,7 @@ static struct irqaction *__free_percpu_irq(unsigned int irq, void __percpu *dev_ > > unregister_handler_proc(irq, action); > > + chip_pm_put(desc); > module_put(desc->owner); > return action; Kind regards Uffe
next prev parent reply other threads:[~2016-01-18 14:47 UTC|newest] Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-12-17 10:48 [RFC PATCH V2 0/8] Add support for Tegra210 AGIC Jon Hunter 2015-12-17 10:48 ` Jon Hunter 2015-12-17 10:48 ` [RFC PATCH V2 1/8] irqdomain: Ensure type settings match for an existing mapping Jon Hunter 2015-12-17 10:48 ` Jon Hunter 2015-12-17 13:16 ` Linus Walleij [not found] ` <CACRpkdYPvMfqou7t9K_5=Ojx3U_sc8B2Zkxgeu=1JXxCUU_E2Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2015-12-18 10:10 ` Jon Hunter 2015-12-18 10:10 ` Jon Hunter 2015-12-22 9:58 ` Linus Walleij [not found] ` <CACRpkdbjRiW8gcZcifHLELjBukpsCKyTQ+NpP51+v3kYLDcPHA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2015-12-22 10:00 ` Linus Walleij 2015-12-22 10:00 ` Linus Walleij [not found] ` <CACRpkdasLeVyE7MXyJ=LQHSYxUDE77VttX_TdqMV6afgk_NqrQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2015-12-22 11:27 ` Jon Hunter 2015-12-22 11:27 ` Jon Hunter 2015-12-22 11:31 ` Grygorii Strashko 2015-12-22 11:31 ` Grygorii Strashko [not found] ` <1450349309-8107-1-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-12-17 10:48 ` [RFC PATCH V2 2/8] irqdomain: Don't set type when mapping an IRQ Jon Hunter 2015-12-17 10:48 ` Jon Hunter [not found] ` <1450349309-8107-3-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-12-17 12:18 ` Linus Walleij 2015-12-17 12:18 ` Linus Walleij 2015-12-22 11:18 ` Grygorii Strashko 2015-12-22 11:18 ` Grygorii Strashko [not found] ` <56793191.30502-l0cyMroinI0@public.gmane.org> 2015-12-22 11:56 ` Jon Hunter 2015-12-22 11:56 ` Jon Hunter [not found] ` <56793A5B.4040302-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2016-03-18 9:16 ` Geert Uytterhoeven 2016-03-18 9:16 ` Geert Uytterhoeven 2015-12-17 10:48 ` [RFC PATCH V2 3/8] genirq: Add runtime power management support for IRQ chips Jon Hunter 2015-12-17 10:48 ` Jon Hunter 2015-12-17 13:19 ` Linus Walleij 2015-12-18 10:20 ` Jon Hunter 2016-01-12 18:40 ` Grygorii Strashko 2016-01-12 18:40 ` Grygorii Strashko 2016-01-12 21:43 ` Sören Brinkmann 2016-01-12 21:43 ` Sören Brinkmann [not found] ` <1450349309-8107-4-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2016-01-18 14:47 ` Ulf Hansson [this message] 2016-01-18 14:47 ` Ulf Hansson 2016-01-19 10:43 ` Jon Hunter 2016-01-20 15:30 ` Thomas Gleixner 2016-01-21 8:38 ` Jon Hunter 2016-01-21 8:38 ` Jon Hunter 2016-01-21 12:40 ` Ulf Hansson 2016-01-21 12:40 ` Ulf Hansson 2016-01-21 12:40 ` Ulf Hansson 2016-01-21 19:51 ` Thomas Gleixner 2016-01-22 11:08 ` Ulf Hansson 2016-01-22 11:08 ` Ulf Hansson 2016-01-26 17:17 ` Thomas Gleixner 2016-02-05 14:37 ` Linus Walleij 2016-02-05 14:37 ` Linus Walleij [not found] ` <CACRpkdbE-Ny585yK+DBkNENpWyk8rSEvdRdvLgMTCBp13grp4w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2016-03-18 13:57 ` Grygorii Strashko 2016-03-18 13:57 ` Grygorii Strashko 2015-12-17 10:48 ` [RFC PATCH V2 4/8] irqchip/gic: Don't initialise chip if mapping IO space fails Jon Hunter 2015-12-17 10:48 ` Jon Hunter [not found] ` <1450349309-8107-5-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-12-17 13:21 ` Linus Walleij 2015-12-17 13:21 ` Linus Walleij 2015-12-17 10:48 ` [RFC PATCH V2 5/8] irqchip/gic: Return an error if GIC initialisation fails Jon Hunter 2015-12-17 10:48 ` Jon Hunter [not found] ` <1450349309-8107-6-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-12-17 13:26 ` Linus Walleij 2015-12-17 13:26 ` Linus Walleij [not found] ` <CACRpkdaw+DM5ddi27UpJEg-+3A3ffS7k_Qnm4i-w2rLhpxp+8g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2015-12-18 10:24 ` Jon Hunter 2015-12-18 10:24 ` Jon Hunter 2015-12-17 10:48 ` [RFC PATCH V2 6/8] irqchip/gic: Assign irqchip dynamically Jon Hunter 2015-12-17 10:48 ` Jon Hunter [not found] ` <1450349309-8107-7-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-12-17 11:00 ` Marc Zyngier 2015-12-17 11:00 ` Marc Zyngier [not found] ` <567295B5.8050900-5wv7dgnIgG8@public.gmane.org> 2015-12-18 10:26 ` Jon Hunter 2015-12-18 10:26 ` Jon Hunter 2015-12-17 10:48 ` [RFC PATCH V2 7/8] irqchip/gic: Prepare for adding platform driver Jon Hunter 2015-12-17 10:48 ` Jon Hunter 2015-12-17 10:48 ` [RFC PATCH V2 8/8] irqchip/gic: Add support for tegra AGIC interrupt controller Jon Hunter 2015-12-17 10:48 ` Jon Hunter 2015-12-17 10:58 ` Jon Hunter 2015-12-17 10:58 ` Jon Hunter [not found] ` <1450349309-8107-9-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-12-17 13:32 ` Linus Walleij 2015-12-17 13:32 ` Linus Walleij 2015-12-18 10:44 ` Jon Hunter [not found] ` <5673E38B.7060702-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-12-22 10:03 ` Linus Walleij 2015-12-22 10:03 ` Linus Walleij
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='CAPDyKFqZK4HYWgXam63=eCKAWsjwCiQbT5jdmgjqid_er3Sg1g@mail.gmail.com' \ --to=ulf.hansson-qsej5fyqhm4dnm+yrofe0a@public.gmane.org \ --cc=geert-Td1EMuHUCqxL1ZNQvxDV9g@public.gmane.org \ --cc=grygorii.strashko-l0cyMroinI0@public.gmane.org \ --cc=jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org \ --cc=jiang.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \ --cc=jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \ --cc=khilman-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \ --cc=lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org \ --cc=linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \ --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=marc.zyngier-5wv7dgnIgG8@public.gmane.org \ --cc=rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org \ --cc=soren.brinkmann-gjFFaj9aHVfQT0dZR+AlfA@public.gmane.org \ --cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \ --cc=tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org \ --cc=thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@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: linkBe 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.