All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Menon, Nishanth" <nm@ti.com>
To: Santosh Shilimkar <santosh.shilimkar@ti.com>
Cc: linux-omap@vger.kernel.org
Subject: Re: [PATCH] OMAP2+: CPUfreq: Allow the CPU scaling when secondary CPUs are offline.
Date: Thu, 2 Jun 2011 21:44:16 -0500	[thread overview]
Message-ID: <BANLkTi=LUMdrTzsOXtVwU_aTcecodaJiPg@mail.gmail.com> (raw)
In-Reply-To: <1307026270-313-1-git-send-email-santosh.shilimkar@ti.com>

On Thu, Jun 2, 2011 at 09:51, Santosh Shilimkar
<santosh.shilimkar@ti.com> wrote:
> Current OMAP2PLUS CPUfreq tagret() functions returns when all
> the CPU's are not online. This will break DVFS when secondary
> CPUs are offlined.
>
> The intention of that check was just avoid CPU frequency change
> during the window when CPU becomes online but it's cpufreq_init is
> not done yet.
is it this requirement a boot requirement or a necessity for
cpufreq_driver.init being called for online cpus? Since we maintain
just a single freq_table... why do we care about multiple cpu_inits?

Anyways, tried testing this and .config with CONFIG_SMP_ON_UP and
USERSPACE. it works with one cpu and does not scale 2 cpus :(

After applying this patch on kevin's cpufreq branch, I added some
prints for logging:
diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c
b/arch/arm/mach-omap2/omap2plus-cpufreq.c
index 909bfcb..89856d5 100644
--- a/arch/arm/mach-omap2/omap2plus-cpufreq.c
+++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c
@@ -83,8 +83,13 @@ static int omap_target(struct cpufreq_policy *policy,
 	struct cpufreq_freqs freqs;

 	/* Changes not allowed until all CPUs are online */
-	if (is_smp() && (cpus_initialized < num_online_cpus()))
+	if (is_smp() && (cpus_initialized < num_online_cpus())) {
+		pr_err("%s: cpu %d not ready to go to %d (inits=%d vs
online=%d)\n", __func__,
+                               policy->cpu, target_freq,
cpus_initialized, num_online_cpus());
 		return ret;
+	}
+	pr_err("%s: cpu %d ready to go to %d (inits=%d vs online=%d)\n", __func__,
+		policy->cpu, target_freq, cpus_initialized, num_online_cpus());

 	/* Ensure desired rate is within allowed range.  Some govenors
 	 * (ondemand) will just pass target_freq=0 to get the minimum. */
@@ -197,6 +202,9 @@ static int __cpuinit omap_cpu_init(struct
cpufreq_policy *policy)
 		cpumask_copy(policy->cpus, cpumask);
 		cpus_initialized++;
 		smp_wmb();
+		pr_err("%s: cpu %d cpus_initialized = %d online=%d\n", __func__,
+			policy->cpu, cpus_initialized, num_online_cpus());
+
 	}

 	/* FIXME: what's the actual transition time? */
@@ -212,6 +220,8 @@ static int omap_cpu_exit(struct cpufreq_policy *policy)
 	if (is_smp()) {
 		cpus_initialized--;
 		smp_wmb();
+		pr_err("%s: cpu %d cpus_initialized = %d online=%d\n", __func__,
+			policy->cpu, cpus_initialized, num_online_cpus());
 	}
 	return 0;
 }

on boot, this is what I see:
[    0.421020] omap_cpu_init: cpu 0 cpus_initialized = 1 online=2
[    0.421264] omap_target: cpu 0 not ready to go to 1008000 (inits=1
vs online=2)
[    0.421630] omap_cpu_init: cpu 1 cpus_initialized = 2 online=2
[    0.421691] omap_cpu_exit: cpu 1 cpus_initialized = 1 online=2
...
snip
...
[    2.044128] omap_target: cpu 0 not ready to go to 1008000 (inits=1
vs online=2)
[    2.051849] omap_target: cpu 0 not ready to go to 1008000 (inits=1
vs online=2)
... snip..
...boots up to busybox shell..
/ # head /sys/devices/system/cpu/cpu1/online /sys/devices/system/cpu/cpu0/online

==> /sys/devices/system/cpu/cpu1/online <==
1

==> /sys/devices/system/cpu/cpu0/online <==
1
/ # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
300000 600000 800000 1008000
/ # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
1008000
/ # echo -n "300000">/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
[  130.257385] omap_target: cpu 0 not ready to go to 300000 (inits=1
vs online=2)
/ # echo -n "0" > /sys/devices/system/cpu/cpu1/online
[  144.749877] CPU1: shutdown
/ # head /sys/devices/system/cpu/cpu1/online /sys/devices/system/cpu/cpu0/online

==> /sys/devices/system/cpu/cpu1/online <==
0

==> /sys/devices/system/cpu/cpu0/online <==
1
/ # echo -n "350000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
[  165.881927] omap_target: cpu 0 ready to go to 350000 (inits=1 vs online=1)
[  165.889526] cpufreq-omap: transition: 1008000 --> 0
/ #
/ # echo -n "1" > /sys/devices/system/cpu/cpu1/online
[  176.469360] CPU1: Booted secondary processor
[  176.469421] CPU1: Unknown IPI message 0x1
[  176.475280] Switched to NOHz mode on CPU #1
[  176.600891] omap_cpu_init: cpu 1 cpus_initialized = 2 online=2
[  176.620178] omap_cpu_exit: cpu 1 cpus_initialized = 1 online=2
[  176.626373] omap_target: cpu 0 not ready to go to 350000 (inits=1
vs online=2)

Regards,
Nishanth Menon

  parent reply	other threads:[~2011-06-03  2:44 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-02 14:51 [PATCH] OMAP2+: CPUfreq: Allow the CPU scaling when secondary CPUs are offline Santosh Shilimkar
2011-06-02 23:10 ` Kevin Hilman
2011-06-03  6:26   ` Santosh Shilimkar
2011-06-03  8:31     ` Santosh Shilimkar
2011-06-03 12:05       ` Santosh Shilimkar
2011-06-03  2:44 ` Menon, Nishanth [this message]
2011-06-03  6:39   ` Santosh Shilimkar
2011-06-03 12:04     ` Santosh Shilimkar
2011-06-02 14:53 Santosh Shilimkar
2011-06-03 10:07 ` Igor Dmitriev

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='BANLkTi=LUMdrTzsOXtVwU_aTcecodaJiPg@mail.gmail.com' \
    --to=nm@ti.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=santosh.shilimkar@ti.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.