public inbox for linux-arm-kernel@lists.infradead.org 
 help / color / mirror / Atom feed
From: per.forlin@stericsson•com (Per Förlin)
To: linux-arm-kernel@lists•infradead.org
Subject: [PATCH] ARM: reboot: disable nonboot CPUs
Date: Wed, 4 Jul 2012 16:19:26 +0200	[thread overview]
Message-ID: <4FF450EE.4040409@stericsson.com> (raw)
In-Reply-To: <20120704095053.GJ16319@n2100.arm.linux.org.uk>

On 07/04/2012 11:50 AM, Russell King - ARM Linux wrote:
> On Wed, Jul 04, 2012 at 09:51:02AM +0200, Per Forlin wrote:
>> Disable the nonboot CPUs to safely migrate tasks and interrupts
>> to the boot CPU. This will prevent the nonboot CPUs to
>> interfer or block the boot CPU from being able to reboot
>> the system successfully.
>>
>> This reboot issue was detected on u8500 when using ab8500 to initaite a
>> system restart. The issue happens because smp_send_stop() stops the CPUs
>> wihouth migrating all resources.
>> If not issuing smp_send_stop() u8500 reboots successfully.
>>
>> It's optional to support CONFIG_PM_SLEEP_SMP therefore smp_send_stop()
>> can't simply be replaced by disable_nonboot_cpus()
> 
> I don't understand what or why you're trying to do this, it seems to be
> unreliable to rely upon conditional sleep support to make system reboot
> to work.
> 
> Yes, we know at the moment that smp_send_stop() results in the secondary
> CPUs ending up spinning in the kernel, which is then potentially replaced
> buy whatever happens after boot, but short of creating a new per-subarch
> function, I don't see much other alternative.
> 
> Doesn't your kernel restart trigger a system hardware reset in any case?
> That's about the only reliable way to do a system restart with SMP.

Thanks for your reply,

The system doesn't reset in the case when calling smp_send_stop().
This is because the reboot mechanism has a couple of dependencies and some of them lives on CPU1.
The reboot is performed by an external chip that eventually switches of a regulator that triggers the restart.
After smp_send_stop() the mailbox communication with the external chip fails, therefore the reboot doesn't happen.
Right now I don't know in detail why this communication fails.

Here are my options
1. Run disble_nonboot_cpus() to migrate resources from CPU1 to CPU0
2. Skip calling smp_send_stop(), that works fine on my platform.
3. Make sure there are no reboot-dependencies on CPU1. Currently I lack the detail understanding of what these dependencies are.

BR
Per

      reply	other threads:[~2012-07-04 14:19 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-04  7:51 [PATCH] ARM: reboot: disable nonboot CPUs Per Forlin
2012-07-04  9:50 ` Russell King - ARM Linux
2012-07-04 14:19   ` Per Förlin [this message]

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=4FF450EE.4040409@stericsson.com \
    --to=per.forlin@stericsson$(echo .)com \
    --cc=linux-arm-kernel@lists$(echo .)infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox