2013-10-16 12:14:22

by Frederic Weisbecker

[permalink] [raw]
Subject: Re: [tip:timers/core] ARM: Kconfig: allow full nohz CPU accounting

On Thu, Oct 03, 2013 at 06:58:03AM -0700, tip-bot for Kevin Hilman wrote:
> Commit-ID: 31c1fc8187158cb80ccd57c19e024c55af901797
> Gitweb: http://git.kernel.org/tip/31c1fc8187158cb80ccd57c19e024c55af901797
> Author: Kevin Hilman <[email protected]>
> AuthorDate: Mon, 16 Sep 2013 15:28:22 -0700
> Committer: Frederic Weisbecker <[email protected]>
> CommitDate: Mon, 30 Sep 2013 15:37:05 +0200
>
> ARM: Kconfig: allow full nohz CPU accounting
>
> With the 64-bit requirement removed from VIRT_CPU_ACCOUNTING_GEN,
> allow ARM platforms to enable it. Since VIRT_CPU_ACCOUNTING_GEN is a
> dependency for full NO_HZ, this allows ARM platforms to enable full
> NO_HZ as well.

I realize that arm doesn't implement irq work raise. It hooks on the
timer to execute pending irq work. You'll need to implement arch_irq_work_raise()
and implement some sort of self IPI to trigger irq work. The full dynticks subsystem
relies on that to work correctly. It often use that to re-evaluate and possibly restart
the tick after scheduler, posix timer updates, etc...

That notwithstanding that if you have no tick, tick based irq work can't
work.

Thanks.

>
> Signed-off-by: Kevin Hilman <[email protected]>
> Cc: Ingo Molnar <[email protected]>
> Cc: Russell King <[email protected]>
> Cc: Paul E. McKenney <[email protected]>
> Cc: Arm Linux <[email protected]>
> Signed-off-by: Frederic Weisbecker <[email protected]>
> ---
> arch/arm/Kconfig | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 1ad6fb6..323baf0 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -54,6 +54,7 @@ config ARM
> select HAVE_REGS_AND_STACK_ACCESS_API
> select HAVE_SYSCALL_TRACEPOINTS
> select HAVE_UID16
> + select HAVE_VIRT_CPU_ACCOUNTING_GEN
> select IRQ_FORCED_THREADING
> select KTIME_SCALAR
> select MODULES_USE_ELF_REL


2013-10-18 16:37:44

by Stephen Boyd

[permalink] [raw]
Subject: Re: [tip:timers/core] ARM: Kconfig: allow full nohz CPU accounting

On 10/16, Frederic Weisbecker wrote:
> On Thu, Oct 03, 2013 at 06:58:03AM -0700, tip-bot for Kevin Hilman wrote:
> > Commit-ID: 31c1fc8187158cb80ccd57c19e024c55af901797
> > Gitweb: http://git.kernel.org/tip/31c1fc8187158cb80ccd57c19e024c55af901797
> > Author: Kevin Hilman <[email protected]>
> > AuthorDate: Mon, 16 Sep 2013 15:28:22 -0700
> > Committer: Frederic Weisbecker <[email protected]>
> > CommitDate: Mon, 30 Sep 2013 15:37:05 +0200
> >
> > ARM: Kconfig: allow full nohz CPU accounting
> >
> > With the 64-bit requirement removed from VIRT_CPU_ACCOUNTING_GEN,
> > allow ARM platforms to enable it. Since VIRT_CPU_ACCOUNTING_GEN is a
> > dependency for full NO_HZ, this allows ARM platforms to enable full
> > NO_HZ as well.
>
> I realize that arm doesn't implement irq work raise. It hooks on the
> timer to execute pending irq work. You'll need to implement arch_irq_work_raise()
> and implement some sort of self IPI to trigger irq work. The full dynticks subsystem
> relies on that to work correctly. It often use that to re-evaluate and possibly restart
> the tick after scheduler, posix timer updates, etc...
>
> That notwithstanding that if you have no tick, tick based irq work can't
> work.
>

Something like this? The only problem is that this latches on to
the SMP support for IPIs. If CONFIG_SMP is disabled we won't get
arch_irq_work_raise() but perhaps that isn't so big of a deal? Or
we should think about exposing IPI support to UP systems on ARM.

----8<-----
arch/arm/include/asm/hardirq.h | 2 +-
arch/arm/kernel/smp.c | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/arch/arm/include/asm/hardirq.h b/arch/arm/include/asm/hardirq.h
index 2740c2a2..3d7351c 100644
--- a/arch/arm/include/asm/hardirq.h
+++ b/arch/arm/include/asm/hardirq.h
@@ -5,7 +5,7 @@
#include <linux/threads.h>
#include <asm/irq.h>

-#define NR_IPI 6
+#define NR_IPI 7

typedef struct {
unsigned int __softirq_pending;
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 72024ea..bf9a0d6d 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -25,6 +25,7 @@
#include <linux/clockchips.h>
#include <linux/completion.h>
#include <linux/cpufreq.h>
+#include <linux/irq_work.h>

#include <linux/atomic.h>
#include <asm/smp.h>
@@ -66,6 +67,7 @@ enum ipi_msg_type {
IPI_CALL_FUNC,
IPI_CALL_FUNC_SINGLE,
IPI_CPU_STOP,
+ IPI_IRQ_WORK,
};

static DECLARE_COMPLETION(cpu_running);
@@ -448,6 +450,13 @@ void arch_send_call_function_single_ipi(int cpu)
smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE);
}

+#ifdef CONFIG_IRQ_WORK
+void arch_irq_work_raise(void)
+{
+ smp_cross_call(cpumask_of(smp_processor_id()), IPI_IRQ_WORK);
+}
+#endif
+
static const char *ipi_types[NR_IPI] = {
#define S(x,s) [x] = s
S(IPI_WAKEUP, "CPU wakeup interrupts"),
@@ -456,6 +465,7 @@ static const char *ipi_types[NR_IPI] = {
S(IPI_CALL_FUNC, "Function call interrupts"),
S(IPI_CALL_FUNC_SINGLE, "Single function call interrupts"),
S(IPI_CPU_STOP, "CPU stop interrupts"),
+ S(IPI_IRQ_WORK, "IRQ work interrupts"),
};

void show_ipi_list(struct seq_file *p, int prec)
@@ -565,6 +575,14 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
irq_exit();
break;

+#ifdef CONFIG_IRQ_WORK
+ case IPI_IRQ_WORK:
+ irq_enter();
+ irq_work_run();
+ irq_exit();
+ break;
+#endif
+
default:
printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n",
cpu, ipinr);
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

2013-10-25 09:38:19

by Frederic Weisbecker

[permalink] [raw]
Subject: Re: [tip:timers/core] ARM: Kconfig: allow full nohz CPU accounting

2013/10/18 Stephen Boyd <[email protected]>:
> On 10/16, Frederic Weisbecker wrote:
>> On Thu, Oct 03, 2013 at 06:58:03AM -0700, tip-bot for Kevin Hilman wrote:
>> > Commit-ID: 31c1fc8187158cb80ccd57c19e024c55af901797
>> > Gitweb: http://git.kernel.org/tip/31c1fc8187158cb80ccd57c19e024c55af901797
>> > Author: Kevin Hilman <[email protected]>
>> > AuthorDate: Mon, 16 Sep 2013 15:28:22 -0700
>> > Committer: Frederic Weisbecker <[email protected]>
>> > CommitDate: Mon, 30 Sep 2013 15:37:05 +0200
>> >
>> > ARM: Kconfig: allow full nohz CPU accounting
>> >
>> > With the 64-bit requirement removed from VIRT_CPU_ACCOUNTING_GEN,
>> > allow ARM platforms to enable it. Since VIRT_CPU_ACCOUNTING_GEN is a
>> > dependency for full NO_HZ, this allows ARM platforms to enable full
>> > NO_HZ as well.
>>
>> I realize that arm doesn't implement irq work raise. It hooks on the
>> timer to execute pending irq work. You'll need to implement arch_irq_work_raise()
>> and implement some sort of self IPI to trigger irq work. The full dynticks subsystem
>> relies on that to work correctly. It often use that to re-evaluate and possibly restart
>> the tick after scheduler, posix timer updates, etc...
>>
>> That notwithstanding that if you have no tick, tick based irq work can't
>> work.
>>
>
> Something like this? The only problem is that this latches on to
> the SMP support for IPIs. If CONFIG_SMP is disabled we won't get
> arch_irq_work_raise() but perhaps that isn't so big of a deal? Or
> we should think about exposing IPI support to UP systems on ARM.
>
> ----8<-----
> arch/arm/include/asm/hardirq.h | 2 +-
> arch/arm/kernel/smp.c | 18 ++++++++++++++++++
> 2 files changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/include/asm/hardirq.h b/arch/arm/include/asm/hardirq.h
> index 2740c2a2..3d7351c 100644
> --- a/arch/arm/include/asm/hardirq.h
> +++ b/arch/arm/include/asm/hardirq.h
> @@ -5,7 +5,7 @@
> #include <linux/threads.h>
> #include <asm/irq.h>
>
> -#define NR_IPI 6
> +#define NR_IPI 7
>
> typedef struct {
> unsigned int __softirq_pending;
> diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
> index 72024ea..bf9a0d6d 100644
> --- a/arch/arm/kernel/smp.c
> +++ b/arch/arm/kernel/smp.c
> @@ -25,6 +25,7 @@
> #include <linux/clockchips.h>
> #include <linux/completion.h>
> #include <linux/cpufreq.h>
> +#include <linux/irq_work.h>
>
> #include <linux/atomic.h>
> #include <asm/smp.h>
> @@ -66,6 +67,7 @@ enum ipi_msg_type {
> IPI_CALL_FUNC,
> IPI_CALL_FUNC_SINGLE,
> IPI_CPU_STOP,
> + IPI_IRQ_WORK,
> };
>
> static DECLARE_COMPLETION(cpu_running);
> @@ -448,6 +450,13 @@ void arch_send_call_function_single_ipi(int cpu)
> smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE);
> }
>
> +#ifdef CONFIG_IRQ_WORK
> +void arch_irq_work_raise(void)
> +{
> + smp_cross_call(cpumask_of(smp_processor_id()), IPI_IRQ_WORK);
> +}
> +#endif
> +
> static const char *ipi_types[NR_IPI] = {
> #define S(x,s) [x] = s
> S(IPI_WAKEUP, "CPU wakeup interrupts"),
> @@ -456,6 +465,7 @@ static const char *ipi_types[NR_IPI] = {
> S(IPI_CALL_FUNC, "Function call interrupts"),
> S(IPI_CALL_FUNC_SINGLE, "Single function call interrupts"),
> S(IPI_CPU_STOP, "CPU stop interrupts"),
> + S(IPI_IRQ_WORK, "IRQ work interrupts"),
> };
>
> void show_ipi_list(struct seq_file *p, int prec)
> @@ -565,6 +575,14 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
> irq_exit();
> break;
>
> +#ifdef CONFIG_IRQ_WORK
> + case IPI_IRQ_WORK:
> + irq_enter();
> + irq_work_run();
> + irq_exit();
> + break;
> +#endif
> +
> default:
> printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n",
> cpu, ipinr);

Yeah that looks good! Indeed it's no big deal if it only support SMP
for now since full dynticks only works on SMP. It might work on UP one
day but we are not yet rushing on that :)

2013-10-28 06:08:16

by Kevin Hilman

[permalink] [raw]
Subject: Re: [tip:timers/core] ARM: Kconfig: allow full nohz CPU accounting

Hi Stephen,

On 10/18/2013 09:37 AM, Stephen Boyd wrote:
> On 10/16, Frederic Weisbecker wrote:
>> On Thu, Oct 03, 2013 at 06:58:03AM -0700, tip-bot for Kevin Hilman wrote:
>>> Commit-ID: 31c1fc8187158cb80ccd57c19e024c55af901797
>>> Gitweb: http://git.kernel.org/tip/31c1fc8187158cb80ccd57c19e024c55af901797
>>> Author: Kevin Hilman <[email protected]>
>>> AuthorDate: Mon, 16 Sep 2013 15:28:22 -0700
>>> Committer: Frederic Weisbecker <[email protected]>
>>> CommitDate: Mon, 30 Sep 2013 15:37:05 +0200
>>>
>>> ARM: Kconfig: allow full nohz CPU accounting
>>>
>>> With the 64-bit requirement removed from VIRT_CPU_ACCOUNTING_GEN,
>>> allow ARM platforms to enable it. Since VIRT_CPU_ACCOUNTING_GEN is a
>>> dependency for full NO_HZ, this allows ARM platforms to enable full
>>> NO_HZ as well.
>>
>> I realize that arm doesn't implement irq work raise. It hooks on the
>> timer to execute pending irq work. You'll need to implement arch_irq_work_raise()
>> and implement some sort of self IPI to trigger irq work. The full dynticks subsystem
>> relies on that to work correctly. It often use that to re-evaluate and possibly restart
>> the tick after scheduler, posix timer updates, etc...
>>
>> That notwithstanding that if you have no tick, tick based irq work can't
>> work.
>>
>
> Something like this? The only problem is that this latches on to
> the SMP support for IPIs. If CONFIG_SMP is disabled we won't get
> arch_irq_work_raise() but perhaps that isn't so big of a deal? Or
> we should think about exposing IPI support to UP systems on ARM.

Care to submit a proper patch for this to LAKML? or if you prefer I can
do it (keeping your authorship.) We need this for proper full NOHZ
support on ARM. Thanks.

Kevin

2013-10-28 16:18:45

by Stephen Boyd

[permalink] [raw]
Subject: Re: [tip:timers/core] ARM: Kconfig: allow full nohz CPU accounting

On 10/27/13 18:32, Kevin Hilman wrote:
> Hi Stephen,
>
> On 10/18/2013 09:37 AM, Stephen Boyd wrote:
>> On 10/16, Frederic Weisbecker wrote:
>>> On Thu, Oct 03, 2013 at 06:58:03AM -0700, tip-bot for Kevin Hilman wrote:
>>>> Commit-ID: 31c1fc8187158cb80ccd57c19e024c55af901797
>>>> Gitweb: http://git.kernel.org/tip/31c1fc8187158cb80ccd57c19e024c55af901797
>>>> Author: Kevin Hilman <[email protected]>
>>>> AuthorDate: Mon, 16 Sep 2013 15:28:22 -0700
>>>> Committer: Frederic Weisbecker <[email protected]>
>>>> CommitDate: Mon, 30 Sep 2013 15:37:05 +0200
>>>>
>>>> ARM: Kconfig: allow full nohz CPU accounting
>>>>
>>>> With the 64-bit requirement removed from VIRT_CPU_ACCOUNTING_GEN,
>>>> allow ARM platforms to enable it. Since VIRT_CPU_ACCOUNTING_GEN is a
>>>> dependency for full NO_HZ, this allows ARM platforms to enable full
>>>> NO_HZ as well.
>>> I realize that arm doesn't implement irq work raise. It hooks on the
>>> timer to execute pending irq work. You'll need to implement arch_irq_work_raise()
>>> and implement some sort of self IPI to trigger irq work. The full dynticks subsystem
>>> relies on that to work correctly. It often use that to re-evaluate and possibly restart
>>> the tick after scheduler, posix timer updates, etc...
>>>
>>> That notwithstanding that if you have no tick, tick based irq work can't
>>> work.
>>>
>> Something like this? The only problem is that this latches on to
>> the SMP support for IPIs. If CONFIG_SMP is disabled we won't get
>> arch_irq_work_raise() but perhaps that isn't so big of a deal? Or
>> we should think about exposing IPI support to UP systems on ARM.
> Care to submit a proper patch for this to LAKML? or if you prefer I can
> do it (keeping your authorship.) We need this for proper full NOHZ
> support on ARM. Thanks.

Sure no problem. Let me write up some sort of commit text and I'll send
it off again.

--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

2013-10-28 18:25:07

by Stephen Boyd

[permalink] [raw]
Subject: [PATCH] ARM: Support arch_irq_work_raise() via self IPIs

This will allow the scheduler tick to be restarted if we're in
full NOHZ mode.

Cc: Kevin Hilman <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Signed-off-by: Stephen Boyd <[email protected]>
---
arch/arm/include/asm/hardirq.h | 2 +-
arch/arm/kernel/smp.c | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/arch/arm/include/asm/hardirq.h b/arch/arm/include/asm/hardirq.h
index 2740c2a2..3d7351c 100644
--- a/arch/arm/include/asm/hardirq.h
+++ b/arch/arm/include/asm/hardirq.h
@@ -5,7 +5,7 @@
#include <linux/threads.h>
#include <asm/irq.h>

-#define NR_IPI 6
+#define NR_IPI 7

typedef struct {
unsigned int __softirq_pending;
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 72024ea..bf9a0d6d 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -25,6 +25,7 @@
#include <linux/clockchips.h>
#include <linux/completion.h>
#include <linux/cpufreq.h>
+#include <linux/irq_work.h>

#include <linux/atomic.h>
#include <asm/smp.h>
@@ -66,6 +67,7 @@ enum ipi_msg_type {
IPI_CALL_FUNC,
IPI_CALL_FUNC_SINGLE,
IPI_CPU_STOP,
+ IPI_IRQ_WORK,
};

static DECLARE_COMPLETION(cpu_running);
@@ -448,6 +450,13 @@ void arch_send_call_function_single_ipi(int cpu)
smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE);
}

+#ifdef CONFIG_IRQ_WORK
+void arch_irq_work_raise(void)
+{
+ smp_cross_call(cpumask_of(smp_processor_id()), IPI_IRQ_WORK);
+}
+#endif
+
static const char *ipi_types[NR_IPI] = {
#define S(x,s) [x] = s
S(IPI_WAKEUP, "CPU wakeup interrupts"),
@@ -456,6 +465,7 @@ static const char *ipi_types[NR_IPI] = {
S(IPI_CALL_FUNC, "Function call interrupts"),
S(IPI_CALL_FUNC_SINGLE, "Single function call interrupts"),
S(IPI_CPU_STOP, "CPU stop interrupts"),
+ S(IPI_IRQ_WORK, "IRQ work interrupts"),
};

void show_ipi_list(struct seq_file *p, int prec)
@@ -565,6 +575,14 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
irq_exit();
break;

+#ifdef CONFIG_IRQ_WORK
+ case IPI_IRQ_WORK:
+ irq_enter();
+ irq_work_run();
+ irq_exit();
+ break;
+#endif
+
default:
printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n",
cpu, ipinr);
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation

2013-10-29 01:58:45

by Kevin Hilman

[permalink] [raw]
Subject: Re: [PATCH] ARM: Support arch_irq_work_raise() via self IPIs

Stephen Boyd <[email protected]> writes:

> This will allow the scheduler tick to be restarted if we're in
> full NOHZ mode.
>
> Cc: Kevin Hilman <[email protected]>
> Cc: Frederic Weisbecker <[email protected]>
> Signed-off-by: Stephen Boyd <[email protected]>

Minor nit, but I'd prefer a more verbose changelog (I forget things
quickly and like to rely on changelogs for my memory.) Probably worth
adding something like: "By default, irq_work is tied to the tick
processing (update_process_times()) but in full NOHZ mode, no tick means
no IRQ work. In order for IRQ work to be done in full NOHZ mode, a
self-IPI is used to process IRQ work."

Other than the changelog nit, patch looks good, feel free to add

Reviewed-by: Kevin Hilman <[email protected]>

If Russell is OK with this, it can go to his patch system.

Kevin

2013-10-29 06:01:01

by Stephen Boyd

[permalink] [raw]
Subject: Re: [PATCH] ARM: Support arch_irq_work_raise() via self IPIs

On 10/28, Kevin Hilman wrote:
> Stephen Boyd <[email protected]> writes:
>
> > This will allow the scheduler tick to be restarted if we're in
> > full NOHZ mode.
> >
> > Cc: Kevin Hilman <[email protected]>
> > Cc: Frederic Weisbecker <[email protected]>
> > Signed-off-by: Stephen Boyd <[email protected]>
>
> Minor nit, but I'd prefer a more verbose changelog (I forget things
> quickly and like to rely on changelogs for my memory.) Probably worth
> adding something like: "By default, irq_work is tied to the tick
> processing (update_process_times()) but in full NOHZ mode, no tick means
> no IRQ work. In order for IRQ work to be done in full NOHZ mode, a
> self-IPI is used to process IRQ work."
>
> Other than the changelog nit, patch looks good, feel free to add
>
> Reviewed-by: Kevin Hilman <[email protected]>
>
> If Russell is OK with this, it can go to his patch system.
>

Fair enough. This is what I came up with. I'll send it off to the
patch tracker in about 12 hours if nobody else has anymore
comments.

----8<-----
ARM: Support arch_irq_work_raise() via self IPIs

By default, IRQ work is run from the tick interrupt (see
irq_work_run() in update_process_times()). When we're in full
NOHZ mode, restarting the tick requires the use of IRQ work and
if the only place we run IRQ work is in the tick interrupt we
have an unbreakable cycle. Implement arch_irq_work_raise() via
self IPIs to break this cycle and get the tick started again.
Note that we implement this via IPIs which are only available on
SMP builds. This shouldn't be a problem because full NOHZ is only
supported on SMP builds anyway.

Signed-off-by: Stephen Boyd <[email protected]>
Reviewed-by: Kevin Hilman <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

2013-10-29 08:25:56

by Frederic Weisbecker

[permalink] [raw]
Subject: Re: [PATCH] ARM: Support arch_irq_work_raise() via self IPIs

On Mon, Oct 28, 2013 at 11:00:58PM -0700, Stephen Boyd wrote:
> On 10/28, Kevin Hilman wrote:
> > Stephen Boyd <[email protected]> writes:
> >
> > > This will allow the scheduler tick to be restarted if we're in
> > > full NOHZ mode.
> > >
> > > Cc: Kevin Hilman <[email protected]>
> > > Cc: Frederic Weisbecker <[email protected]>
> > > Signed-off-by: Stephen Boyd <[email protected]>
> >
> > Minor nit, but I'd prefer a more verbose changelog (I forget things
> > quickly and like to rely on changelogs for my memory.) Probably worth
> > adding something like: "By default, irq_work is tied to the tick
> > processing (update_process_times()) but in full NOHZ mode, no tick means
> > no IRQ work. In order for IRQ work to be done in full NOHZ mode, a
> > self-IPI is used to process IRQ work."
> >
> > Other than the changelog nit, patch looks good, feel free to add
> >
> > Reviewed-by: Kevin Hilman <[email protected]>
> >
> > If Russell is OK with this, it can go to his patch system.
> >
>
> Fair enough. This is what I came up with. I'll send it off to the
> patch tracker in about 12 hours if nobody else has anymore
> comments.
>
> ----8<-----
> ARM: Support arch_irq_work_raise() via self IPIs
>
> By default, IRQ work is run from the tick interrupt (see
> irq_work_run() in update_process_times()). When we're in full
> NOHZ mode, restarting the tick requires the use of IRQ work and
> if the only place we run IRQ work is in the tick interrupt we
> have an unbreakable cycle. Implement arch_irq_work_raise() via
> self IPIs to break this cycle and get the tick started again.
> Note that we implement this via IPIs which are only available on
> SMP builds. This shouldn't be a problem because full NOHZ is only
> supported on SMP builds anyway.

Nice description!

Thanks!

>
> Signed-off-by: Stephen Boyd <[email protected]>
> Reviewed-by: Kevin Hilman <[email protected]>
> Cc: Frederic Weisbecker <[email protected]>
> --
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
> hosted by The Linux Foundation

2013-10-29 19:01:41

by Kevin Hilman

[permalink] [raw]
Subject: Re: [PATCH] ARM: Support arch_irq_work_raise() via self IPIs

Stephen Boyd <[email protected]> writes:

> On 10/28, Kevin Hilman wrote:
>> Stephen Boyd <[email protected]> writes:
>>
>> > This will allow the scheduler tick to be restarted if we're in
>> > full NOHZ mode.
>> >
>> > Cc: Kevin Hilman <[email protected]>
>> > Cc: Frederic Weisbecker <[email protected]>
>> > Signed-off-by: Stephen Boyd <[email protected]>
>>
>> Minor nit, but I'd prefer a more verbose changelog (I forget things
>> quickly and like to rely on changelogs for my memory.) Probably worth
>> adding something like: "By default, irq_work is tied to the tick
>> processing (update_process_times()) but in full NOHZ mode, no tick means
>> no IRQ work. In order for IRQ work to be done in full NOHZ mode, a
>> self-IPI is used to process IRQ work."
>>
>> Other than the changelog nit, patch looks good, feel free to add
>>
>> Reviewed-by: Kevin Hilman <[email protected]>
>>
>> If Russell is OK with this, it can go to his patch system.
>>
>
> Fair enough. This is what I came up with. I'll send it off to the
> patch tracker in about 12 hours if nobody else has anymore
> comments.

Nice description, thanks for the respin.

Kevin