linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv7 00/11]  thread_info: use helpers to snapshot thread flags
@ 2021-11-17 16:30 Mark Rutland
  2021-11-17 16:30 ` [PATCHv7 01/11] thread_info: add " Mark Rutland
                   ` (10 more replies)
  0 siblings, 11 replies; 24+ messages in thread
From: Mark Rutland @ 2021-11-17 16:30 UTC (permalink / raw)
  To: linux-kernel, tglx, mingo, peterz
  Cc: benh, boqun.feng, bp, catalin.marinas, dvyukov, efuller, elver,
	ink, joey.gouly, jonas, juri.lelli, linux, luto, mark.rutland,
	mattst88, michal.simek, mpe, npiggin, paulmck, paulus, rth,
	shorne, stefan.kristiansson, vincent.guittot, will

TIP folk (Peter?), I've been assuming this would go via the TIP tree. Are you
happy to pick this up nowish, or as a fixup after the next -rc1? There have
been no significant changes since v3 (aisde from the addition of the PPC fix
for v7), and this has continued to apply cleanly since then (with no conflicts
when rebasing up to v5.16-rc1).

If nothing else, it would be really nice to get the first patch (adding the
accessors) merged, so that we can convert each architecture in turn.

Usual blurb below...

As thread_info::flags scan be manipulated by remote threads, it is
necessary to use atomics or READ_ONCE() to ensure that code manipulates
a consistent snapshot, but we open-code plain accesses to
thread_info::flags across the kernel tree.

Generally we get away with this, but tools like KCSAN legitimately warn
that there is a data-race, and this is potentially fragile with compiler
optimizations, LTO, etc.

These patches introduce new helpers to snapshot the thread flags, with the
intent being that these should replace all plain accesses.

Since v1 [1]:
* Drop RFC
* Make read_ti_thread_flags() __always_inline
* Clarify commit messages
* Fix typo in arm64 patch
* Accumulate Reviewed-by / Acked-by tags
* Drop powerpc patch to avoid potential conflicts (per [2])

Since v2 [3]:
* Rebase to v5.14-rc1
* Reinstate powerpc patch

Since v3 [4]:
* Rebase to v5.14-rc4

Since v4 [5]:
* Rebase to v5.15-rc1
* Apply Acked-by / Tested-by tags

Since v5 [6]:
* Fix trivial whitespace bug in x86 patch

Since v6 [7]:
* Rebase to v5.16-rc1
* Fix new issue on PPC where thread flags could be discarded

[1] https://lore.kernel.org/r/20210609122001.18277-1-mark.rutland@arm.com
[2] https://lore.kernel.org/r/87k0mvtgeb.fsf@mpe.ellerman.id.au
[3] https://lore.kernel.org/r/20210621090602.16883-1-mark.rutland@arm.com
[4] https://lore.kernel.org/r/20210713113842.2106-1-mark.rutland@arm.com
[5] https://lore.kernel.org/r/20210803095428.17009-1-mark.rutland@arm.com
[6] https://lore.kernel.org/r/20210914103027.53565-1-mark.rutland@arm.com
[7] https://lore.kernel.org/lkml/20211022135643.7442-1-mark.rutland@arm.com

Thanks,
Mark.

Mark Rutland (11):
  thread_info: add helpers to snapshot thread flags
  entry: snapshot thread flags
  sched: snapshot thread flags
  alpha: snapshot thread flags
  arm: snapshot thread flags
  arm64: snapshot thread flags
  microblaze: snapshot thread flags
  openrisc: snapshot thread flags
  powerpc: avoid discarding flags in system_call_exception()
  powerpc: snapshot thread flags
  x86: snapshot thread flags

 arch/alpha/kernel/signal.c          |  2 +-
 arch/arm/kernel/signal.c            |  2 +-
 arch/arm/mm/alignment.c             |  2 +-
 arch/arm64/kernel/entry-common.c    |  2 +-
 arch/arm64/kernel/ptrace.c          |  4 ++--
 arch/arm64/kernel/signal.c          |  2 +-
 arch/arm64/kernel/syscall.c         |  4 ++--
 arch/microblaze/kernel/signal.c     |  2 +-
 arch/openrisc/kernel/signal.c       |  2 +-
 arch/powerpc/kernel/interrupt.c     | 15 +++++++--------
 arch/powerpc/kernel/ptrace/ptrace.c |  3 +--
 arch/x86/kernel/process.c           |  8 ++++----
 arch/x86/kernel/process.h           |  4 ++--
 arch/x86/mm/tlb.c                   |  2 +-
 include/linux/entry-kvm.h           |  2 +-
 include/linux/thread_info.h         | 14 ++++++++++++++
 kernel/entry/common.c               |  4 ++--
 kernel/entry/kvm.c                  |  4 ++--
 kernel/sched/core.c                 |  2 +-
 19 files changed, 46 insertions(+), 34 deletions(-)

-- 
2.11.0


^ permalink raw reply	[flat|nested] 24+ messages in thread
* [PATCH v8 03/11] sched: snapshot thread flags
@ 2021-11-29 13:06 Mark Rutland
  2021-11-30 23:08 ` [tip: core/entry] sched: Snapshot " tip-bot2 for Mark Rutland
  0 siblings, 1 reply; 24+ messages in thread
From: Mark Rutland @ 2021-11-29 13:06 UTC (permalink / raw)
  To: linux-kernel
  Cc: benh, boqun.feng, bp, catalin.marinas, dvyukov, efuller, elver,
	ink, jonas, juri.lelli, linux, luto, mark.rutland, mattst88,
	michal.simek, mingo, mpe, npiggin, paulmck, paulus, peterz, rth,
	shorne, stefan.kristiansson, tglx, vincent.guittot, will

Some thread flags can be set remotely, and so even when IRQs are
disabled, the flags can change under our feet. Generally this is
unlikely to cause a problem in practice, but it is somewhat unsound, and
KCSAN will legitimately warn that there is a data race.

To avoid such issues, a snapshot of the flags has to be taken prior to
using them. Some places already use READ_ONCE() for that, others do not.

Convert them all to the new flag accessor helpers.

The READ_ONCE(ti->flags) .. cmpxchg(ti->flags) loop in
set_nr_if_polling() is left as-is for clarity.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Paul E. McKenney <paulmck@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Vincent Guittot <vincent.guittot@linaro.org>
---
 kernel/sched/core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 3c9b0fda64ac..7ba05dedaf5b 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -8520,7 +8520,7 @@ void sched_show_task(struct task_struct *p)
 	rcu_read_unlock();
 	pr_cont(" stack:%5lu pid:%5d ppid:%6d flags:0x%08lx\n",
 		free, task_pid_nr(p), ppid,
-		(unsigned long)task_thread_info(p)->flags);
+		read_task_thread_flags(p));
 
 	print_worker_info(KERN_INFO, p);
 	print_stop_info(KERN_INFO, p);
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2021-11-30 23:09 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-17 16:30 [PATCHv7 00/11] thread_info: use helpers to snapshot thread flags Mark Rutland
2021-11-17 16:30 ` [PATCHv7 01/11] thread_info: add " Mark Rutland
2021-11-26 20:23   ` [tip: core/entry] thread_info: Add " tip-bot2 for Mark Rutland
2021-11-17 16:30 ` [PATCHv7 02/11] entry: " Mark Rutland
2021-11-26 20:22   ` [tip: core/entry] entry: Snapshot " tip-bot2 for Mark Rutland
2021-11-17 16:30 ` [PATCHv7 03/11] sched: snapshot " Mark Rutland
2021-11-26 20:22   ` [tip: core/entry] sched: Snapshot " tip-bot2 for Mark Rutland
2021-11-17 16:30 ` [PATCHv7 04/11] alpha: snapshot " Mark Rutland
2021-11-26 20:22   ` [tip: core/entry] alpha: Snapshot " tip-bot2 for Mark Rutland
2021-11-17 16:30 ` [PATCHv7 05/11] arm: snapshot " Mark Rutland
2021-11-26 20:22   ` [tip: core/entry] ARM: Snapshot " tip-bot2 for Mark Rutland
2021-11-17 16:30 ` [PATCHv7 06/11] arm64: snapshot " Mark Rutland
2021-11-26 20:22   ` [tip: core/entry] " tip-bot2 for Mark Rutland
2021-11-17 16:30 ` [PATCHv7 07/11] microblaze: " Mark Rutland
2021-11-26 20:22   ` [tip: core/entry] microblaze: Snapshot " tip-bot2 for Mark Rutland
2021-11-17 16:30 ` [PATCHv7 08/11] openrisc: snapshot " Mark Rutland
2021-11-26 20:22   ` [tip: core/entry] openrisc: Snapshot " tip-bot2 for Mark Rutland
2021-11-17 16:30 ` [PATCHv7 09/11] powerpc: avoid discarding flags in system_call_exception() Mark Rutland
2021-11-26 20:22   ` [tip: core/entry] powerpc: Avoid " tip-bot2 for Mark Rutland
2021-11-17 16:30 ` [PATCHv7 10/11] powerpc: snapshot thread flags Mark Rutland
2021-11-26 20:22   ` [tip: core/entry] powerpc: Snapshot " tip-bot2 for Mark Rutland
2021-11-17 16:30 ` [PATCHv7 11/11] x86: snapshot " Mark Rutland
2021-11-26 20:22   ` [tip: core/entry] x86: Snapshot " tip-bot2 for Mark Rutland
2021-11-29 13:06 [PATCH v8 03/11] sched: snapshot " Mark Rutland
2021-11-30 23:08 ` [tip: core/entry] sched: Snapshot " tip-bot2 for Mark Rutland

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).