Thread (30 messages) 30 messages, 7 authors, 2014-09-10
STALE4290d

[PATCH v2 1/3] arm64: spin-table: handle unmapped cpu-release-addrs

From: mark.rutland@arm.com (Mark Rutland)
Date: 2014-07-30 12:49:08
Also in: linux-efi

On Wed, Jul 30, 2014 at 01:42:58PM +0100, Will Deacon wrote:
On Wed, Jul 30, 2014 at 01:30:29PM +0100, Mark Rutland wrote:
quoted
On Wed, Jul 30, 2014 at 01:00:40PM +0100, Ard Biesheuvel wrote:
quoted
On 30 July 2014 13:30, Will Deacon [off-list ref] wrote:
quoted
On Wed, Jul 30, 2014 at 11:59:02AM +0100, Ard Biesheuvel wrote:
quoted
From: Mark Rutland <mark.rutland@arm.com>

In certain cases the cpu-release-addr of a CPU may not fall in the
linear mapping (e.g. when the kernel is loaded above this address due to
the presence of other images in memory). This is problematic for the
spin-table code as it assumes that it can trivially convert a
cpu-release-addr to a valid VA in the linear map.

This patch modifies the spin-table code to use a temporary cached
mapping to write to a given cpu-release-addr, enabling us to support
addresses regardless of whether they are covered by the linear mapping.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Tested-by: Mark Salter <redacted>
[ardb: added (__force void *) cast]
Signed-off-by: Ard Biesheuvel <redacted>
---
 arch/arm64/kernel/smp_spin_table.c | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)
I'm nervous about this. What if the spin table sits in the same physical 64k
frame as a read-sensitive device and we're running with 64k pages?
I see what you mean. This is potentially hairy, as EFI already
ioremap_cache()s everything known to it as normal DRAM, so using plain
ioremap() here if pfn_valid() returns false for cpu-release-addr's PFN
may still result in mappings with different attributes for the same
region. So how should we decide whether to call ioremap() or
ioremap_cache() in this case?
If we're careful about handling mismatched attributes we might be able
to get away with always using a device mapping.
Even then, I think ioremap hits a WARN_ON if pfn_valid.
Ok, that's that idea dead then.
quoted
I'll need to have a think about that, I'm not sure on the architected
cache behaviour in such a case.
Of we just skip the cache flush if !pfn_valid.
I don't think that's always safe given Ard's comment that the EFI code
will possibly have a mapping covering the region created by
ioremap_cache.

Ard, what exactly does the EFI code map with ioremap_cache, and why?

Cheers,
Mark.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help