From: Ingo Molnar <mingo@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>,
LKML <linux-kernel@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH 0/3] nohz: Convert tick dependency mask to atomic_t
Date: Tue, 29 Mar 2016 14:59:51 +0200 [thread overview]
Message-ID: <20160329125950.GA2768@gmail.com> (raw)
In-Reply-To: <CA+55aFxzR_gu9b0U6RG+8eGvjtuxjjOf4jfwjOKxhV1UShk6yg@mail.gmail.com>
* Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Tue, Mar 29, 2016 at 4:44 AM, Ingo Molnar <mingo@kernel.org> wrote:
> >
> > Harmonizing thread_info::flags does not look easy, given how much assembly code
> > accesses this field.
>
> It might not be too bad.
>
> For 32-bit architectures (which is still most of them), it's just a
>
> unsigned int/long -> atomic_t
>
> and for 64-bit architectures you end up with three choices:
>
> - it's already 32-bit (alpha, ia64, x86):
>
> unsigned int -> atomic_t
>
> - little-endian long:
>
> atomic_t flags
> unsigned int padding;
>
> - big-endian long (only powerpc? Maybe there's a big-endian MIPS still?)
>
> unsigned int padding;
> atomic_t flags;
Hm, that indeed sounds fairly nice and doable - I thought some architectures do
have a task flag above bit 31, but that does not appear to be so ...
Right now we seem to have 27 bits defined in include/linux/sched.h, with 5 more
bits left for the future. Here's their current usage histogram in the kernel
source:
PF_KTHREAD : 68
PF_MEMALLOC : 65
PF_EXITING : 49
PF_RANDOMIZE : 20
PF_VCPU : 18
PF_FREEZER_SKIP : 15
PF_SUPERPRIV : 14
PF_FSTRANS : 14
PF_NOFREEZE : 13
PF_WQ_WORKER : 12
PF_SWAPWRITE : 12
PF_MEMALLOC_NOIO : 11
PF_FROZEN : 11
PF_NO_SETAFFINITY : 9
PF_LESS_THROTTLE : 8
PF_USED_MATH : 7
PF_SUSPEND_TASK : 7
PF_KSWAPD : 7
PF_FORKNOEXEC : 7
PF_NPROC_EXCEEDED : 6
PF_MCE_PROCESS : 6
PF_MCE_EARLY : 6
PF_USED_ASYNC : 5
PF_SIGNALED : 5
PF_EXITPIDONE : 5
PF_DUMPCORE : 5
PF_MUTEX_TESTER : 1
1)
PF_MUTEX_TESTER could be gotten rid of straight away as it appears to be unused.
2)
I'd also rename the lot while touching every usage site: the PF_ 'process flag'
namespace currently collides with:
- the PF_ 'page flag' namespace
- the PF_ 'protocol family' constants in the networking code
... all of which makes grepping and code reading a bit harder than it should be,
IMHO.
Calling them 'process' flags is a misnomer anyway, these are fundamentally per
task flags.
All in one, having them named TF_ would work for me. TF_ is a mostly unused
namespace in generic code right now, and it would rhyme well with the existing
TIF_ (thread_info flag) namespace.
( I guess ATF_ for 'atomic task flag' would work as well, except that the acronym
sounds too much like a well-known government agency. Plus I guess the ASS
acronym principle applies as well. )
3)
We could also rename the flag itself to __flags, for the following five purposes:
- to make sure there's no lingering unconverted usage, especially in assembly
code that tends to drop types and go by names only.
- and to push people towards using accessors (task_flag(), set_task_flag(),
etc.), not the raw field.
- accessor conversion could precede the type conversion. I.e. the new accessors
could work on the old type as well.
- accessors would also make it easier to extend the type to atomic64_t in the
future, should we ever run out of 32 task flags.
- accessors would make it easier to do per arch conversion as well.
So this:
if (current->flags & PF_KTHREAD)
would look like this:
if (atomic_read(¤t->__task_flags) & TF_KTHREAD)
Or rather, we'd use obviously named accessors:
if (task_flag(current, TF_KTHREAD))
plus:
set_task_flag(current, TF_KTHREAD);
et al.
How does this sound?
Thanks,
Ingo
next prev parent reply other threads:[~2016-03-29 12:59 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-24 14:37 [PATCH 0/3] nohz: Convert tick dependency mask to atomic_t Frederic Weisbecker
2016-03-24 14:37 ` [PATCH 1/3] atomic: Introduce atomic_fetch_or Frederic Weisbecker
2016-03-29 10:36 ` [tip:core/urgent] locking/atomic: Introduce atomic_fetch_or() tip-bot for Frederic Weisbecker
2016-03-24 14:38 ` [PATCH 2/3] nohz: Convert tick dependency mask to atomic_t Frederic Weisbecker
2016-03-25 8:52 ` Ingo Molnar
2016-03-25 14:56 ` Frederic Weisbecker
2016-03-29 10:37 ` [tip:core/urgent] timers/nohz: " tip-bot for Frederic Weisbecker
2016-03-24 14:38 ` [PATCH 3/3] Revert "atomic: Export fetch_or()" Frederic Weisbecker
2016-03-29 10:37 ` [tip:core/urgent] locking/atomic, sched: Unexport fetch_or() tip-bot for Frederic Weisbecker
2016-03-25 8:48 ` [PATCH 0/3] nohz: Convert tick dependency mask to atomic_t Ingo Molnar
2016-03-25 13:17 ` Frederic Weisbecker
2016-03-29 9:44 ` Ingo Molnar
2016-03-29 12:23 ` Linus Torvalds
2016-03-29 12:59 ` Ingo Molnar [this message]
2016-03-29 13:05 ` Ingo Molnar
2016-03-29 13:08 ` Frederic Weisbecker
2016-03-31 6:54 ` Ingo Molnar
2016-03-31 9:20 ` Peter Zijlstra
2016-03-31 13:18 ` Ingo Molnar
2016-03-29 13:14 ` Ingo Molnar
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=20160329125950.GA2768@gmail.com \
--to=mingo@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.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.