From: catalin.marinas@arm.com (Catalin Marinas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] arm64: Get the number of bits in ASID from the CPU
Date: Fri, 11 Jul 2014 13:34:44 +0100 [thread overview]
Message-ID: <20140711123444.GF11473@arm.com> (raw)
In-Reply-To: <20140710205012.GA21305@nvidia.com>
On Thu, Jul 10, 2014 at 09:50:12PM +0100, Allen Martin wrote:
> On Tue, Jul 08, 2014 at 02:42:17PM -0700, Catalin Marinas wrote:
> > On 8 Jul 2014, at 20:14, Allen Martin <amartin@nvidia.com> wrote:
> > > --- a/arch/arm64/mm/context.c
> > > +++ b/arch/arm64/mm/context.c
> > [?]
> > >
> > > @@ -142,9 +141,9 @@ void __new_context(struct mm_struct *mm)
> > > */
> > > if (unlikely((asid & ((1 << bits) - 1)) == 0)) {
> >
> > That?s the part where it uses the actual number of bits supported by
> > the hardware (bits is computed higher up in this function based on
> > ID_AA64MMFR0_EL1).
> >
> > > /* increment the ASID version */
> > > - cpu_last_asid += (1 << MAX_ASID_BITS) - (1 << bits);
> >
> > And here it bumps the generation at bit 16 onwards.
>
> So based on your feedback and my read of the code, it looks like on
> CPUs that implement 8 bits of ASID (ID_AA64MMFR0_EL1 & 0xf0 == 0x20),
> bits 7:0 of asid are the real hw ASID, bits 31:16 are the ASID
> "version" which is how hw ASID wrap is counted, and bits 15:8 are
> unused.
That's correct.
> A few quesions come up:
>
> in set_mm_context():
> > if (likely((mm->context.id ^ cpu_last_asid) >> MAX_ASID_BITS))
>
> why is this likely() ? Shouldn't this only happen on an ASID wrap?
set_mm_context() is called when we want to change the ASID because the
old one was from a previous generation. So the check above is the likely
case where generations differ. The unlikely case would be that the
context was already updated by IPI from a roll-over on another CPU.
> in __new_context():
> > /* increment the ASID version */
> > cpu_last_asid += (1 << MAX_ASID_BITS) - (1 << bits);
> > if (cpu_last_asid == 0)
> > cpu_last_asid = ASID_FIRST_VERSION;
>
> How do you prevent two processes from having the same context.id in
> the case of ASID version wrap? Since context.id is 64 bits, should
> asid and cpu_last_asid be 64 bits as well to make this less likely?
context.id is 32-bit. There is indeed a risk of an application not being
scheduled for a long time and ASID version rolling-over. We could make
both variables 64-bit.
> > So unless you find some bug in the existing logic, I don?t think your
> > patch is needed.
>
> After reading your comments and looking at the code some more I'm not
> sure it's needed either. I guess the only advantage is that it uses
> bits 15:8 for ASID version instead of having them be unused. I'll dig
> more on why this patch was added to begin with.
Note that we plan to re-write this algorithm anyway because the IPI
during roll-over doesn't scale well. The 32-bit arm port already has a
new algorithm, the problem on 64-bit would be that the bitmap would be
bigger (64K bits = 8KB) and it needs benchmarking.
--
Catalin
prev parent reply other threads:[~2014-07-11 12:34 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-08 19:14 [PATCH] arm64: Get the number of bits in ASID from the CPU Allen Martin
2014-07-08 21:42 ` Catalin Marinas
2014-07-10 20:50 ` Allen Martin
2014-07-11 12:34 ` Catalin Marinas [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=20140711123444.GF11473@arm.com \
--to=catalin.marinas@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 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.