From: Mark Rutland <mark.rutland@arm.com>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Stephen Boyd <sboyd@codeaurora.org>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Krzysztof Kozlowski <k.kozlowski@samsung.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Arnd Bergmann <arnd@arndb.de>,
Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Catalin Marinas <Catalin.Marinas@arm.com>,
Will Deacon <Will.Deacon@arm.com>
Subject: Re: [PATCH v2] ARM: Don't use complete() during __cpu_die
Date: Fri, 13 Feb 2015 17:21:41 +0000 [thread overview]
Message-ID: <20150213172141.GF2529@leverpostej> (raw)
In-Reply-To: <20150213162725.GC8656@n2100.arm.linux.org.uk>
On Fri, Feb 13, 2015 at 04:27:25PM +0000, Russell King - ARM Linux wrote:
> On Fri, Feb 13, 2015 at 03:52:08PM +0000, Mark Rutland wrote:
> > > @@ -194,10 +195,6 @@ int __cpu_disable(void)
> > > unsigned int cpu = smp_processor_id();
> > > int ret;
> > >
> > > - ret = platform_cpu_disable(cpu);
> > > - if (ret)
> > > - return ret;
> >
> > For PSCI 0.2+ I was hoping to hook the MIGRATE logic in here. The secure
> > side may reject hotplugging of a CPU, but it's a dynamic property of the
> > system and so can't be probed once at boot time.
>
> You may have to think about how to deal with the static nature of the
> sysfs CPU hotplug properties then - or, you may wish to have the existing
> behaviour where we expose the sysfs hotplug properties on all CPUs and
> rely on returning -EPERM.
>
> One question does come up - if it's a dynamic property of the system,
> what ensures that it can't change between the point when we test it
> (in __cpu_disable()) and when we actually come to take the CPU offline?
By relying on hotplug operations being serialised and the secure OS not
moving arbitrarily (as required by the PSCI spec).
This matters in the case of a UP, migrateable secure OS (AKA TOS). It
lives on a core, but we can ask it (via the PSCI implementation) to
move. It will only move in response to MIGRATE calls, and at boot time
we would query which CPU it's on (which should in practice be CPU0
except in rare cases like a crash kernel).
At __cpu_disable time (where the current platform_cpu_disable callback
is), if the core being disabled has the TOS resident it would call
MIGRATE, passsing the physical ID of another CPU to migrate to. If this
fails, then the TOS didn't move and we can't hotplug. If it succeeds,
then we know it has moved to the other CPU.
The disabled CPU then goes through the rest of the teardown, eventually
calling PSCI_OFF to actually be shut down.
We can then wait for the dying CPU to have been killed with
AFFINITY_INFO (as with the current psci_cpu_kill implementation). As we
can't initiate antoehr hotplug before this we can't race and migrate the
TOS back to the original CPU.
> How does the secure side signal its rejection of hotunplugging of a CPU?
It returns an error code in response to the PSCI MIGRATE call.
> If it happens after __cpu_disable(), then that's a problem: the system
> will have gone through all the expensive preparation by that time to
> shut the CPU down, and it will expect the CPU to go offline. The only
> way it can come back at that point is by going through a CPU plug-in
> cycle... which means going back through secondary_start_kernel.
This would happen within __cpu_disable, as the current
platform_cpu_disable() call does, before it's too late to abort the
hotplug.
Thanks,
Mark.
next prev parent reply other threads:[~2015-02-13 17:22 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-05 10:14 [PATCH v2] ARM: Don't use complete() during __cpu_die Krzysztof Kozlowski
2015-02-05 10:50 ` Russell King - ARM Linux
2015-02-05 11:00 ` Krzysztof Kozlowski
2015-02-05 11:08 ` Russell King - ARM Linux
2015-02-05 11:28 ` Mark Rutland
2015-02-05 11:30 ` Russell King - ARM Linux
2015-02-05 14:29 ` Paul E. McKenney
2015-02-05 16:11 ` Russell King - ARM Linux
2015-02-05 17:02 ` Paul E. McKenney
2015-02-05 17:34 ` Russell King - ARM Linux
2015-02-05 17:54 ` Paul E. McKenney
2015-02-10 1:24 ` Stephen Boyd
2015-02-10 1:37 ` Paul E. McKenney
2015-02-10 2:05 ` Stephen Boyd
2015-02-10 3:05 ` Paul E. McKenney
2015-02-10 15:14 ` Mark Rutland
2015-02-10 20:48 ` Stephen Boyd
2015-02-10 21:04 ` Stephen Boyd
2015-02-10 21:15 ` Russell King - ARM Linux
2015-02-10 21:49 ` Stephen Boyd
2015-02-10 22:05 ` Stephen Boyd
2015-02-13 15:52 ` Mark Rutland
2015-02-13 16:27 ` Russell King - ARM Linux
2015-02-13 17:21 ` Mark Rutland [this message]
2015-02-13 17:30 ` Russell King - ARM Linux
2015-02-13 16:28 ` Stephen Boyd
2015-02-13 15:38 ` Mark Rutland
2015-02-10 20:58 ` Russell King - ARM Linux
2015-02-10 15:41 ` Russell King - ARM Linux
2015-02-10 18:33 ` Stephen Boyd
2015-02-25 12:56 ` Russell King - ARM Linux
2015-02-25 16:47 ` Nicolas Pitre
2015-02-25 17:00 ` Russell King - ARM Linux
2015-02-25 18:13 ` Nicolas Pitre
2015-02-25 20:16 ` Nicolas Pitre
2015-02-26 1:05 ` Paul E. McKenney
2015-03-22 23:30 ` Paul E. McKenney
2015-03-23 12:55 ` Russell King - ARM Linux
2015-03-23 13:21 ` Paul E. McKenney
2015-03-23 14:00 ` Russell King - ARM Linux
2015-03-23 15:37 ` Paul E. McKenney
2015-03-23 16:56 ` Paul E. McKenney
2015-02-26 19:14 ` Daniel Thompson
2015-02-26 19:47 ` Nicolas Pitre
2015-02-05 10:53 ` Mark Rutland
2015-02-05 10:59 ` Krzysztof Kozlowski
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=20150213172141.GF2529@leverpostej \
--to=mark.rutland@arm.com \
--cc=Catalin.Marinas@arm.com \
--cc=Will.Deacon@arm.com \
--cc=arnd@arndb.de \
--cc=b.zolnierkie@samsung.com \
--cc=k.kozlowski@samsung.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=m.szyprowski@samsung.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=sboyd@codeaurora.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox