All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Boyd <sboyd@codeaurora.org>
To: Lina Iyer <lina.iyer@linaro.org>
Cc: rjw@rjwysocki.net, ulf.hansson@linaro.org, khilman@linaro.org,
	geert@linux-m68k.org, k.kozlowski@samsung.com,
	linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	msivasub@codeaurora.org, agross@codeaurora.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Subject: Re: [PATCH 9/9] ARM: smp: Add runtime PM support for CPU hotplug
Date: Thu, 13 Aug 2015 12:18:18 -0700	[thread overview]
Message-ID: <20150813191818.GT26614@codeaurora.org> (raw)
In-Reply-To: <20150813160038.GP52339@linaro.org>

On 08/13, Lina Iyer wrote:
> On Wed, Aug 12 2015 at 17:47 -0600, Stephen Boyd wrote:
> >On 08/04, Lina Iyer wrote:
> 
> >>+
> >> 	ret = platform_cpu_disable(cpu);
> >> 	if (ret)
> >> 		return ret;
> >>@@ -272,6 +275,13 @@ void __ref cpu_die(void)
> >> {
> >> 	unsigned int cpu = smp_processor_id();
> >>
> >>+	/*
> >>+	 * We dont need the CPU device anymore.
> >>+	 * Lets do this before IRQs are disabled to allow
> >>+	 * runtime PM to suspend the domain as well.
> >>+	 */
> >>+	pm_runtime_put_sync(get_cpu_device(cpu));
> >
> >The two put calls is confusing. __cpu_disable() is called on the
> >CPU that's dying, and cpu_die() is called on the CPU that's doing
> >the takedown.
> >
> Is that right? Looking at the code and the comments, I can only imagine
> that they must be called on the CPU going down. If thats not the case,
> then I need to fix this.
> 
> >That would be two decrements but only one increment
> >in secondary_start_kernel()? How is this properly balanced?
> >
> I dont see __cpu_disable() ending up at cpu_die(). These seem two
> different exit points. I will check again.

Yeah I suspect we want a single call in __cpu_disable() so that
it runs on the CPU that's being hotplugged out.

> 
> >>+
> >> 	idle_task_exit();
> >>
> >> 	local_irq_disable();
> >>@@ -401,6 +412,11 @@ asmlinkage void secondary_start_kernel(void)
> >> 	local_irq_enable();
> >> 	local_fiq_enable();
> >>
> >>+	/* We are running, enable runtime PM for the CPU. */
> >>+	cpu_dev = get_cpu_device(cpu);
> >>+	if (cpu_dev)
> >>+		pm_runtime_get_sync(cpu_dev);
> >
> >Also, where would the dev->power.irq_safe flag be set if we
> >aren't using the genpd DT stuff? It looks like we're going to
> >start causing warnings on devices that don't have the DT magic.
> >
> Not necessarily. I have added _get and _put at points, when the
> interrupts are still enabled. So there should not be a need for the CPU
> devices to be IRQ safe. They will operate as regular devices. If they
> are attached to a non-IRQ safe domain, they would effect power savings
> on the domain.

What about preemption? Preemption is disabled in __cpu_disable()
and secondary_start_kernel() where this patch is calling
pm_runtime_{get,put}_sync(). That should still trigger a warning
with the might_sleep() inside the runtime PM functions if we
haven't set the irq_safe flag.

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

WARNING: multiple messages have this Message-ID (diff)
From: sboyd@codeaurora.org (Stephen Boyd)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 9/9] ARM: smp: Add runtime PM support for CPU hotplug
Date: Thu, 13 Aug 2015 12:18:18 -0700	[thread overview]
Message-ID: <20150813191818.GT26614@codeaurora.org> (raw)
In-Reply-To: <20150813160038.GP52339@linaro.org>

On 08/13, Lina Iyer wrote:
> On Wed, Aug 12 2015 at 17:47 -0600, Stephen Boyd wrote:
> >On 08/04, Lina Iyer wrote:
> 
> >>+
> >> 	ret = platform_cpu_disable(cpu);
> >> 	if (ret)
> >> 		return ret;
> >>@@ -272,6 +275,13 @@ void __ref cpu_die(void)
> >> {
> >> 	unsigned int cpu = smp_processor_id();
> >>
> >>+	/*
> >>+	 * We dont need the CPU device anymore.
> >>+	 * Lets do this before IRQs are disabled to allow
> >>+	 * runtime PM to suspend the domain as well.
> >>+	 */
> >>+	pm_runtime_put_sync(get_cpu_device(cpu));
> >
> >The two put calls is confusing. __cpu_disable() is called on the
> >CPU that's dying, and cpu_die() is called on the CPU that's doing
> >the takedown.
> >
> Is that right? Looking at the code and the comments, I can only imagine
> that they must be called on the CPU going down. If thats not the case,
> then I need to fix this.
> 
> >That would be two decrements but only one increment
> >in secondary_start_kernel()? How is this properly balanced?
> >
> I dont see __cpu_disable() ending up at cpu_die(). These seem two
> different exit points. I will check again.

Yeah I suspect we want a single call in __cpu_disable() so that
it runs on the CPU that's being hotplugged out.

> 
> >>+
> >> 	idle_task_exit();
> >>
> >> 	local_irq_disable();
> >>@@ -401,6 +412,11 @@ asmlinkage void secondary_start_kernel(void)
> >> 	local_irq_enable();
> >> 	local_fiq_enable();
> >>
> >>+	/* We are running, enable runtime PM for the CPU. */
> >>+	cpu_dev = get_cpu_device(cpu);
> >>+	if (cpu_dev)
> >>+		pm_runtime_get_sync(cpu_dev);
> >
> >Also, where would the dev->power.irq_safe flag be set if we
> >aren't using the genpd DT stuff? It looks like we're going to
> >start causing warnings on devices that don't have the DT magic.
> >
> Not necessarily. I have added _get and _put at points, when the
> interrupts are still enabled. So there should not be a need for the CPU
> devices to be IRQ safe. They will operate as regular devices. If they
> are attached to a non-IRQ safe domain, they would effect power savings
> on the domain.

What about preemption? Preemption is disabled in __cpu_disable()
and secondary_start_kernel() where this patch is calling
pm_runtime_{get,put}_sync(). That should still trigger a warning
with the might_sleep() inside the runtime PM functions if we
haven't set the irq_safe flag.

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

  reply	other threads:[~2015-08-13 19:18 UTC|newest]

Thread overview: 120+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-04 23:35 [PATCH 0/9] ARM: PM / Domains: Generic PM domains for CPUs/Clusters Lina Iyer
2015-08-04 23:35 ` Lina Iyer
2015-08-04 23:35 ` [PATCH 1/9] PM / Domains: Allocate memory outside domain locks Lina Iyer
2015-08-04 23:35   ` Lina Iyer
2015-08-12 19:47   ` Kevin Hilman
2015-08-12 19:47     ` Kevin Hilman
2015-09-01 12:40   ` Ulf Hansson
2015-09-01 12:40     ` Ulf Hansson
2015-08-04 23:35 ` [PATCH 2/9] PM / Domains: Remove dev->driver check for runtime PM Lina Iyer
2015-08-04 23:35   ` Lina Iyer
2015-08-12 19:50   ` Kevin Hilman
2015-08-12 19:50     ` Kevin Hilman
2015-08-13  8:57     ` Geert Uytterhoeven
2015-08-13  8:57       ` Geert Uytterhoeven
2015-08-14  3:40       ` Kevin Hilman
2015-08-14  3:40         ` Kevin Hilman
2015-08-14  7:24         ` Geert Uytterhoeven
2015-08-14  7:24           ` Geert Uytterhoeven
2015-08-14 17:19           ` Kevin Hilman
2015-08-14 17:19             ` Kevin Hilman
2015-08-16  9:24             ` Geert Uytterhoeven
2015-08-16  9:24               ` Geert Uytterhoeven
2015-08-21 21:04               ` Kevin Hilman
2015-08-21 21:04                 ` Kevin Hilman
2015-08-24 19:50                 ` Lina Iyer
2015-08-24 19:50                   ` Lina Iyer
2015-08-25  9:24                   ` Geert Uytterhoeven
2015-08-25  9:24                     ` Geert Uytterhoeven
2015-09-01 13:28   ` Ulf Hansson
2015-09-01 13:28     ` Ulf Hansson
2015-08-04 23:35 ` [PATCH 3/9] PM / Domains: Support IRQ safe PM domains Lina Iyer
2015-08-04 23:35   ` Lina Iyer
2015-08-12 20:12   ` Kevin Hilman
2015-08-12 20:12     ` Kevin Hilman
2015-08-12 20:47     ` Lina Iyer
2015-08-12 20:47       ` Lina Iyer
2015-08-12 23:03   ` Stephen Boyd
2015-08-12 23:03     ` Stephen Boyd
2015-08-04 23:35 ` [PATCH 4/9] kernel/cpu_pm: fix cpu_cluster_pm_exit comment Lina Iyer
2015-08-04 23:35   ` Lina Iyer
2015-08-12 20:13   ` Kevin Hilman
2015-08-12 20:13     ` Kevin Hilman
2015-08-04 23:35 ` [PATCH 5/9] ARM: common: Introduce PM domains for CPUs/clusters Lina Iyer
2015-08-04 23:35   ` Lina Iyer
2015-08-06  3:14   ` Rob Herring
2015-08-06  3:14     ` Rob Herring
2015-08-07 23:45     ` Kevin Hilman
2015-08-07 23:45       ` Kevin Hilman
2015-08-11 13:07       ` Geert Uytterhoeven
2015-08-11 13:07         ` Geert Uytterhoeven
2015-08-11 15:58         ` Lina Iyer
2015-08-11 15:58           ` Lina Iyer
2015-08-11 20:12           ` Rob Herring
2015-08-11 20:12             ` Rob Herring
2015-08-11 22:29             ` Lina Iyer
2015-08-11 22:29               ` Lina Iyer
2015-08-12 19:00             ` [PATCH v2 1/2] " Lina Iyer
2015-08-12 19:00               ` Lina Iyer
2015-08-13 17:29               ` Rob Herring
2015-08-13 17:29                 ` Rob Herring
2015-08-13 20:12                 ` Lina Iyer
2015-08-13 20:12                   ` Lina Iyer
2015-08-13 22:01                   ` Rob Herring
2015-08-13 22:01                     ` Rob Herring
2015-08-14 14:38                     ` Lina Iyer
2015-08-14 14:38                       ` Lina Iyer
2015-08-12 19:00             ` [PATCH v2 2/2] ARM: domain: Add platform handlers for CPU PM domains Lina Iyer
2015-08-12 19:00               ` Lina Iyer
2015-08-13 15:01     ` [PATCH 5/9] ARM: common: Introduce PM domains for CPUs/clusters Lorenzo Pieralisi
2015-08-13 15:01       ` Lorenzo Pieralisi
2015-08-13 15:45       ` Lina Iyer
2015-08-13 15:45         ` Lina Iyer
2015-08-13 15:52         ` Lorenzo Pieralisi
2015-08-13 15:52           ` Lorenzo Pieralisi
2015-08-13 16:22           ` Lina Iyer
2015-08-13 16:22             ` Lina Iyer
2015-08-14  3:51           ` Kevin Hilman
2015-08-14  3:51             ` Kevin Hilman
2015-08-14  4:02             ` Lina Iyer
2015-08-14  4:02               ` Lina Iyer
2015-08-14 15:49             ` Lorenzo Pieralisi
2015-08-14 15:49               ` Lorenzo Pieralisi
2015-08-14 19:11               ` Kevin Hilman
2015-08-14 19:11                 ` Kevin Hilman
2015-08-13 17:26         ` Sudeep Holla
2015-08-13 17:26           ` Sudeep Holla
2015-08-13 19:27           ` Lina Iyer
2015-08-13 19:27             ` Lina Iyer
2015-08-14  9:52             ` Sudeep Holla
2015-08-14  9:52               ` Sudeep Holla
2015-08-04 23:35 ` [PATCH 6/9] ARM: domain: Add platform handlers for CPU PM domains Lina Iyer
2015-08-04 23:35   ` Lina Iyer
2015-08-05 14:45   ` Rob Herring
2015-08-05 14:45     ` Rob Herring
2015-08-05 16:38     ` Lina Iyer
2015-08-05 16:38       ` Lina Iyer
2015-08-05 19:23     ` Lina Iyer
2015-08-05 19:23       ` Lina Iyer
2015-08-06  3:01       ` Rob Herring
2015-08-06  3:01         ` Rob Herring
2015-08-10 15:36         ` Lina Iyer
2015-08-10 15:36           ` Lina Iyer
2015-08-04 23:35 ` [PATCH 7/9] ARM: cpuidle: Add runtime PM support for CPU idle Lina Iyer
2015-08-04 23:35   ` Lina Iyer
2015-08-04 23:35 ` [PATCH 8/9] ARM64: smp: Add runtime PM support for CPU hotplug Lina Iyer
2015-08-04 23:35   ` Lina Iyer
2015-08-04 23:35 ` [PATCH 9/9] ARM: " Lina Iyer
2015-08-04 23:35   ` Lina Iyer
2015-08-12 20:28   ` Kevin Hilman
2015-08-12 20:28     ` Kevin Hilman
2015-08-12 20:43     ` Lina Iyer
2015-08-12 20:43       ` Lina Iyer
2015-08-14 18:59       ` Kevin Hilman
2015-08-14 18:59         ` Kevin Hilman
2015-08-12 23:47   ` Stephen Boyd
2015-08-12 23:47     ` Stephen Boyd
2015-08-13 16:00     ` Lina Iyer
2015-08-13 16:00       ` Lina Iyer
2015-08-13 19:18       ` Stephen Boyd [this message]
2015-08-13 19:18         ` Stephen Boyd

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=20150813191818.GT26614@codeaurora.org \
    --to=sboyd@codeaurora.org \
    --cc=agross@codeaurora.org \
    --cc=catalin.marinas@arm.com \
    --cc=geert@linux-m68k.org \
    --cc=k.kozlowski@samsung.com \
    --cc=khilman@linaro.org \
    --cc=lina.iyer@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=msivasub@codeaurora.org \
    --cc=rjw@rjwysocki.net \
    --cc=ulf.hansson@linaro.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.