From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 5/6] ARM: re-implement physical address space switching
Date: Wed, 15 Apr 2015 13:07:38 +0100 [thread overview]
Message-ID: <20150415120738.GD2866@leverpostej> (raw)
In-Reply-To: <552C14F0.7020006@oracle.com>
Hi,
> >> To the best of my knowledge, the page table walkers aren't affected by
> >> SCTLR.C, and use the attributes in TTBR{0,1} or TTBCR when translation
> >> is active (i.e. when SCTLR.M is set). So at this point they can make
> >> cacheable accesses to the page tables (and allocate into the caches) in
> >> the background...
> >
> > We had better clear those bits too then.
> >
> >> I think that the cache flush needs to be performed after both
> >> SCTLR.{C,M} are cleared in lpae_pgtables_remap_asm, just before the page
> >> table updates. So long as the relevant pieces of kernel text are
> >> initially clean to the PoC, we shouldn't need to flush anything
> >> beforehand.
> >
> > To that I say... no bloody way in hell, even once hell has frozen
> > over. It took almost a _day_ to get this much working, much of it
> > was attempting to use cache flushing functions after the MMU had
> > been turned off.
> >
> > If it was possible to make it work, I'd have done so. It isn't, so
> > please forget the idea.
> >
> I fully agree. I gone through the same pane while incorporating Will's
> comment on similar lines last time.
I'm surprised that it's so painful to get that working. I don't have a
system I could test this on, so unfortunately I can't offer much help
there.
> >>> +ENTRY(lpae_pgtables_remap_asm)
> >>> + stmfd sp!, {r4-r8, lr}
> >>> +
> >>> + mrc p15, 0, r8, c1, c0, 0 @ read control reg
> >>> + bic ip, r8, #CR_M @ disable caches and MMU
> >>> + mcr p15, 0, ip, c1, c0, 0
> >>> + dsb
> >>> + isb
> >>
> >> Shouldn't the DSB be between the STMFD and the MCR (given the SP doesn't
> >> point to an idmap/physical address)?
> >>
> >> I don't see why we need a DSB after the write to the SCTLR.
> >>
> dsb can be moved up after stmfd but leaving as above should be fine
> as well.
I don't think that it's safe to leave it where it is. Currently the
STMFD could be reordered w.r.t. the cp15 accesses, and hence the write
may occur with translation disabled (and would go to the wrong physical
address).
We need to ensure that the STMFD is executed before the MCR potentially
changes the execution context. The DSB will ensure that in addition to
ensuring completion of the write (i.e. it isn't left sat in a write
buffer).
> >> [...]
> >>
> >>> + dsb
> >>> + isb
> >>> +
> >>> + mcr p15, 0, r8, c1, c0, 0 @ re-enable MMU
> >>> + dsb
> >>> + isb
> >>
> >> Similarly, isn't the last DSB redundant?
> >
> This dsb probably can be dropped but I leave that to Russell
> to decide. That one extra instruction doesn't hurt much.
I don't see that it adds anything to the ISB given the DSB; ISB prior to
the write to the SCTLR -- there's nothing it would ensure completion of
that the first DSB won't already have.
Mark.
next prev parent reply other threads:[~2015-04-15 12:07 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-08 9:44 [PATCH 0/7] Fix Keystone 2 physical address switch Russell King - ARM Linux
2015-04-08 9:45 ` [PATCH 1/6] ARM: keystone2: move platform notifier initialisation into platform init Russell King
2015-04-13 18:57 ` santosh shilimkar
2015-04-08 9:45 ` [PATCH 2/6] ARM: keystone2: move update of the phys-to-virt constants into generic code Russell King
2015-04-08 14:56 ` Grygorii.Strashko@linaro.org
2015-04-08 18:00 ` Russell King - ARM Linux
2015-04-09 14:51 ` Grygorii.Strashko@linaro.org
2015-04-09 15:49 ` Russell King - ARM Linux
2015-04-09 16:15 ` Grygorii.Strashko@linaro.org
2015-04-08 19:19 ` Russell King - ARM Linux
2015-04-13 19:02 ` santosh shilimkar
2015-04-08 9:45 ` [PATCH 3/6] ARM: keystone2: move address space switch printk to " Russell King
2015-04-13 19:02 ` santosh shilimkar
2015-04-08 9:45 ` [PATCH 4/6] ARM: keystone2: rename init_meminfo to pv_fixup Russell King
2015-04-13 19:03 ` santosh shilimkar
2015-04-08 9:45 ` [PATCH 5/6] ARM: re-implement physical address space switching Russell King
2015-04-08 14:34 ` Thomas Petazzoni
2015-04-08 17:27 ` santosh shilimkar
2015-04-08 18:10 ` Russell King - ARM Linux
2015-04-08 17:36 ` Mark Rutland
2015-04-08 17:55 ` Russell King - ARM Linux
2015-04-13 19:11 ` santosh shilimkar
2015-04-15 12:07 ` Mark Rutland [this message]
2015-04-15 17:27 ` santosh shilimkar
2015-04-23 11:24 ` Mark Rutland
2015-05-06 10:18 ` Russell King - ARM Linux
2015-05-06 10:37 ` Mark Rutland
2015-05-06 11:33 ` Russell King - ARM Linux
2015-05-06 15:33 ` Mark Rutland
2015-05-06 15:50 ` Russell King - ARM Linux
2015-05-06 16:14 ` Mark Rutland
2015-05-06 16:24 ` Will Deacon
2015-04-08 9:45 ` [PATCH 6/6] ARM: cleanup early_paging_init() calling Russell King
2015-04-13 19:13 ` santosh shilimkar
2015-04-08 17:21 ` [PATCH 0/7] Fix Keystone 2 physical address switch santosh shilimkar
2015-04-09 16:21 ` Russell King - ARM Linux
2015-04-09 16:35 ` santosh shilimkar
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=20150415120738.GD2866@leverpostej \
--to=mark.rutland@arm.com \
--cc=linux-arm-kernel@lists.infradead.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