arm SMP on Cortex-A15
Ian Lepore
ian at FreeBSD.org
Wed Mar 19 18:48:41 UTC 2014
On Tue, 2014-03-18 at 07:25 -0600, Ian Lepore wrote:
> On Mon, 2014-03-17 at 09:29 +0100, Wojciech Macek wrote:
> > Hi,
> >
> > Finally I've found some time to continue SMP hacking. It seems that I
> > isolated the tlb/pmam failures and developed two simple patches that help.
> > There are still some pmap changes and TEX remap left, but I don't want to
> > use them now.
> > https://drive.google.com/folderview?id=0B-7yTLrPxaWtSzZPUGgtM3pnUjg&usp=sharing
> > * 01 - ensure that TTB is set before TLB invalidation and flush BTB to
> > comply the specs
> > * 02 - add missing TLB invalidations to pmap and fix invalidation order
> >
> > I chose buildworld -j4 as a stresstest, and run it on Arndale (USB rootfs)
> > and a different 4-core a15 chip (SATA rootfs). On both setups test passed
> > and was significantly faster than the one with previous patchset.
> >
> > I'd like to submit these changes to FreeBSD tree (with some help from our
> > local committers), so any comments and testing are really appreciated.
> >
> > Best regards,
> > Wojtek
>
> The first patch looks fine and is working without any problems for me.
>
> For the second patch, I propose the attached similar patch which
> combines your changes with some I got from Olivier. The main
> differences are moving the tlb flush outside the loop when propagating a
> change to all L1s, and moving the tlb flush (rather than adding another)
> in pmap_kenter_internal().
>
> I believe even with the second patch there may still be some missing tlb
> flushes.
>
> -- Ian
Following up with a third version of the pmap-v6.c patch. On top of the
previous versions, this:
* ensures that cpu_cpwait() is consistantly used after every tlb
flush (sometimes it's a single wait after flushes that happen in
a loop).
* adds a tlb flush to pmap_free_l2_bucket()
* adds a tlb flush to pmap_bootstrap()
* adds a tlb flush to pmap_grow_map()
* adds a tlb flush to pmap_grow_l2_bucket()
* adds a tlb flush to pmap_kenter_section()
I'm not sure there's any armv6/7 platform that needs the cpu_cpwait(),
but if it's going to appear in the code at all, it should at least be
consisant. :)
-- Ian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smp_patch_02b.patch
Type: text/x-patch
Size: 5045 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-arm/attachments/20140319/16af7c60/attachment.bin>
More information about the freebsd-arm
mailing list