From: Scott Wood <scottwood@freescale.com>
To: christophe leroy <christophe.leroy@c-s.fr>
Cc: Michael Ellerman <mpe@ellerman.id.au>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>, <sojkam1@fel.cvut.cz>,
<linux-kernel@vger.kernel.org>, <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH v2] powerpc32: memcpy/memset: only use dcbz once cache is enabled
Date: Mon, 14 Sep 2015 11:32:14 -0500 [thread overview]
Message-ID: <1442248334.2909.85.camel@freescale.com> (raw)
In-Reply-To: <55F3F701.5030303@c-s.fr>
On Sat, 2015-09-12 at 11:57 +0200, christophe leroy wrote:
> Le 11/09/2015 03:24, Michael Ellerman a écrit :
> > On Thu, 2015-09-10 at 17:05 -0500, Scott Wood wrote:
> > >
> > > I don't think this duplication is what Michael meant by "the normal cpu
> > > feature sections". What else is going to use this very specific
> > > infrastructure?
> > Yeah, sorry, I was hoping you could do it with the existing cpu feature
> > mechanism.
> >
> > It looks like the timing doesn't work, ie. you need to patch this stuff in
> > machine_init(), which is later than the regular patching which gets done
> > in
> > early_init().
> >
> > This is one of the festering differences we have between the 32 and 64-bit
> > initialisation code, ie. on 64-bit we do the patching much later.
> >
> >
>
> I've just thought about maybe another alternative.
> Is there any issue with calling do_feature_fixups() twice for the same
> features ?
> If not, we could define a MMU_CACHE_NOW_ON dummy MMU feature, then
> call again do_feature_fixups() in machine_init() to patch memcpy/memset
> stuff, something like:
>
> In arch/powerpc/include/asm/mmu.h:
> +#define MMU_CACHE_NOW_ON ASM_CONST(0x00008000)
>
> In arch/powerpc/kernel/setup_32.c: @machine_init()
>
> udbg_early_init();
>
> + spec = identify_cpu(0, mfspr(SPRN_PVR));
> + do_feature_fixups(spec->mmu_features | MMU_CACHE_NOW_ON,
> + &__start___mmu_ftr_fixup,
> + &__stop___mmu_ftr_fixup);
This will cause cpu_setup() to be called twice on booke. I'm not sure if
that will cause any harm with the current cpu_setup() implementation, but
it's complexity that is better avoided. Why not just use cur_cpu_spec?
How much code is between the enabling of caches and the application of fixups
(quite a lot on booke where cache is enabled by the bootloader...)? Perhaps
it's better to label it something that indicates that cache block operations
are safe to use, so nobody gets the idea that it's OK to use it to protect
things that can only be done before caches are enabled.
What happens if someone sees MMU_CACHE_NOW_ON (or whatever it ends up being
called) and decides to call mmu_has_feature()? At least set the bit in
spec->mmu_features rather than just for the do_feature_fixups() argument, and
hope that nobody implements MMU_FTRS_POSSIBLE/ALWAYS, or checks the feature
on 64-bit... I'm not 100% convinced that abusing cpu feature mechanisms for
boot sequence control is a good idea. The direct patching alternative is
quite simple, and if we were to accumulate enough instances of that (or more
complicated instances) then patching infrastructure that is explicitly
relating to the current state of the system rather than permanent hardware
description could be justified.
-Scott
prev parent reply other threads:[~2015-09-14 16:32 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-10 6:41 [PATCH v2] powerpc32: memcpy/memset: only use dcbz once cache is enabled Christophe Leroy
2015-09-10 22:05 ` Scott Wood
2015-09-11 1:24 ` Michael Ellerman
2015-09-12 9:57 ` christophe leroy
2015-09-14 9:59 ` Michael Ellerman
2015-09-14 16:32 ` Scott Wood [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=1442248334.2909.85.camel@freescale.com \
--to=scottwood@freescale.com \
--cc=benh@kernel.crashing.org \
--cc=christophe.leroy@c-s.fr \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=paulus@samba.org \
--cc=sojkam1@fel.cvut.cz \
/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;
as well as URLs for NNTP newsgroup(s).