Skip to content

RFC preempt_count rework

Peter Zijlstra linux-arch lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 RFC Latest5 patches 13 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/5sched: Introduce preempt_count accessor functionsinclude/linux/preempt.h init/main.c kernel/sched/core.c +3 more+24 -170 replies
2/5sched: Add NEED_RESCHED to the preempt_countinclude/linux/preempt.h include/linux/sched.h include/linux/thread_info.h +3 more+64 -140 replies
3/5sched, arch: Create asm/preempt.harch/alpha/include/asm/Kbuild arch/arc/include/asm/Kbuild arch/arm/include/asm/Kbuild +29 more+51 -140 replies
4/5sched: Create more preempt_count accessorsinclude/asm-generic/preempt.h include/trace/events/sched.h kernel/sched/core.c+18 -50 replies
5/5sched, x86: Provide a per-cpu preempt_count implementationarch/x86/include/asm/Kbuild arch/x86/include/asm/preempt.h arch/x86/include/asm/thread_info.h +6 more+68 -130 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [RFC][PATCH 0/5] preempt_count rework

These patches optimize preempt_enable by firstly folding the preempt and need_resched tests into one -- this should work for all architectures. And secondly by providing per-arch preempt_count implementations; with x86 using per-cpu preempt_count for fastest access.

These patches have so far only been compiled for defconfig-x86_64 + CONFIG_PREEMPT=y and boot tested with kvm -smp 4 upto wanting to mount root.

It still needs asm volatile("call preempt_schedule": : :"memory"); as per Andi's other patches to avoid the C calling convention cluttering the preempt_enable() sites.

---
 arch/alpha/include/asm/Kbuild      |  1 +
 arch/arc/include/asm/Kbuild        |  1 +
 arch/arm/include/asm/Kbuild        |  1 +
 arch/arm64/include/asm/Kbuild      |  1 +
 arch/avr32/include/asm/Kbuild      |  1 +
 arch/blackfin/include/asm/Kbuild   |  1 +
 arch/c6x/include/asm/Kbuild        |  1 +
 arch/cris/include/asm/Kbuild       |  1 +
 arch/frv/include/asm/Kbuild        |  1 +
 arch/h8300/include/asm/Kbuild      |  1 +
 arch/hexagon/include/asm/Kbuild    |  1 +
 arch/ia64/include/asm/Kbuild       |  1 +
 arch/m32r/include/asm/Kbuild       |  1 +
 arch/m68k/include/asm/Kbuild       |  1 +
 arch/metag/include/asm/Kbuild      |  1 +
 arch/microblaze/include/asm/Kbuild |  1 +
 arch/mips/include/asm/Kbuild       |  1 +
 arch/mn10300/include/asm/Kbuild    |  1 +
 arch/openrisc/include/asm/Kbuild   |  1 +
 arch/parisc/include/asm/Kbuild     |  1 +
 arch/powerpc/include/asm/Kbuild    |  1 +
 arch/s390/include/asm/Kbuild       |  1 +
 arch/score/include/asm/Kbuild      |  1 +
 arch/sh/include/asm/Kbuild         |  1 +
 arch/sparc/include/asm/Kbuild      |  1 +
 arch/tile/include/asm/Kbuild       |  1 +
 arch/um/include/asm/Kbuild         |  1 +
 arch/unicore32/include/asm/Kbuild  |  1 +
 arch/x86/include/asm/thread_info.h |  5 ++---
 arch/x86/kernel/asm-offsets.c      |  1 -
 arch/x86/kernel/cpu/common.c       |  5 +++++
 arch/x86/kernel/entry_32.S         |  7 ++-----
 arch/x86/kernel/entry_64.S         |  4 +---
 arch/x86/kernel/process_32.c       | 10 ++++++++++
 arch/x86/kernel/process_64.c       | 10 ++++++++++
 arch/xtensa/include/asm/Kbuild     |  1 +
 include/linux/preempt.h            | 49 ++++++++++++++++++++++++++++++++++++++-----------
 include/linux/sched.h              |  2 +-
 include/linux/thread_info.h        |  1 +
 include/trace/events/sched.h       |  2 +-
 init/main.c                        |  2 +-
 kernel/context_tracking.c          |  3 +--
 kernel/cpu/idle.c                  | 10 ++++++++++
 kernel/sched/core.c                | 31 +++++++++++++++++++------------
 kernel/softirq.c                   |  4 ++--
 kernel/timer.c                     |  8 ++++----
 lib/smp_processor_id.c             |  3 +--
 47 files changed, 138 insertions(+), 48 deletions(-)