From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Saito Hideo <hsaito.ppc@gmail.com>
Cc: linuxppc-dev list <linuxppc-dev@ozlabs.org>,
linux-kernel@vger.kernel.org,
Kumar Gala <galak@gate.crashing.org>
Subject: Re: can't flush tlb on e500
Date: Fri, 22 May 2009 19:42:16 +1000 [thread overview]
Message-ID: <1242985336.26104.30.camel@pasglop> (raw)
In-Reply-To: <1242984470.26104.29.camel@pasglop>
On Fri, 2009-05-22 at 19:27 +1000, Benjamin Herrenschmidt wrote:
> On Wed, 2009-05-20 at 19:12 +0900, Saito Hideo wrote:
>
> > I think that the tlb should be cleared before mm->context.id is set
> > MMU_NO_CONTEXT.
>
> You are right, this definitely looks like a bug on platforms that have
> HW support for the tlbil instruction (and thus care about the PID for
> flushing) which afaik is only the case of recent freescale chips.
In fact, you are doubly right in that it also happens on other platforms
because local_flush_tlb_mm() will check if the PID is MMU_NO_CONTEXT
regardless of what tlbilx supports.. oops
Looks like I only ran my context torture test with CONFIG_SMP enabled.
Shame on me.
> Have you verified that this change fixes your problem ?
>
> Can you re-submit to linuxppc-dev@ozlabs.org mailing list, along with
> proper changeset comment and signed-off-by: line ?
>
> Cheers,
> Ben.
>
> > --- arch/powerpc/mm/mmu_context_nohash.c.orig 2009-03-24
> > 08:12:14.000000000 +0900
> > +++ arch/powerpc/mm/mmu_context_nohash.c 2009-05-20 18:33:53.000000000 +0900
> > @@ -122,22 +122,22 @@ static unsigned int steal_context_up(uns
> > struct mm_struct *mm;
> > int cpu = smp_processor_id();
> >
> > /* Pick up the victim mm */
> > mm = context_mm[id];
> >
> > pr_debug("[%d] steal context %d from mm @%p\n", cpu, id, mm);
> >
> > - /* Mark this mm has having no context anymore */
> > - mm->context.id = MMU_NO_CONTEXT;
> > -
> > /* Flush the TLB for that context */
> > local_flush_tlb_mm(mm);
> >
> > + /* Mark this mm has having no context anymore */
> > + mm->context.id = MMU_NO_CONTEXT;
> > +
> > /* XXX This clear should ultimately be part of local_flush_tlb_mm */
> > __clear_bit(id, stale_map[cpu]);
> >
> > return id;
> > }
> >
> > #ifdef DEBUG_MAP_CONSISTENCY
> > static void context_check_map(void)
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at http://www.tux.org/lkml/
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev
next prev parent reply other threads:[~2009-05-22 9:42 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-20 10:12 can't flush tlb on e500 Saito Hideo
2009-05-22 0:57 ` Hideo Saito
2009-05-22 9:20 ` Benjamin Herrenschmidt
2009-05-22 9:27 ` Benjamin Herrenschmidt
2009-05-22 9:27 ` Benjamin Herrenschmidt
2009-05-22 9:42 ` Benjamin Herrenschmidt [this message]
-- strict thread matches above, loose matches on Subject: below --
2009-05-25 1:33 Hideo Saito
2009-05-25 4:20 ` Benjamin Herrenschmidt
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=1242985336.26104.30.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=galak@gate.crashing.org \
--cc=hsaito.ppc@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.