From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 0/2] arm64: Only call into preempt_schedule() if need_resched()
Date: Tue, 27 Nov 2018 19:45:00 +0000 [thread overview]
Message-ID: <1543347902-21170-1-git-send-email-will.deacon@arm.com> (raw)
Hi all,
This pair of patches improves our preempt_enable() implementation slightly
on arm64 by making the resulting call to preempt_schedule() conditional
on need_resched(), which is tracked in bit 32 of the preempt count. The
logic is inverted so that we can detect the preempt count going to zero
and need_resched being set with a single CBZ instruction.
Consequently, our preempt_enable() code (including prologue/epilogue)
goes from:
40: a9bf7bfd stp x29, x30, [sp, #-16]!
44: 910003fd mov x29, sp
48: d5384101 mrs x1, sp_el0
4c: b9401020 ldr w0, [x1, #16]
50: 51000400 sub w0, w0, #0x1
54: b9001020 str w0, [x1, #16]
58: 350000a0 cbnz w0, 6c
5c: f9400020 ldr x0, [x1]
60: 721f001f tst w0, #0x2
64: 54000040 b.eq 6c // b.none
68: 94000000 bl 0 <preempt_schedule>
6c: a8c17bfd ldp x29, x30, [sp], #16
70: d65f03c0 ret
to:
40: a9bf7bfd stp x29, x30, [sp, #-16]!
44: 910003fd mov x29, sp
48: d5384101 mrs x1, sp_el0
4c: f9400820 ldr x0, [x1, #16]
50: d1000400 sub x0, x0, #0x1
54: b9001020 str w0, [x1, #16]
58: b4000060 cbz x0, 64 <will+0x24>
5c: a8c17bfd ldp x29, x30, [sp], #16
60: d65f03c0 ret
64: 94000000 bl 0 <preempt_schedule>
68: a8c17bfd ldp x29, x30, [sp], #16
6c: d65f03c0 ret
Will
--->8
Will Deacon (2):
preempt: Move PREEMPT_NEED_RESCHED definition into arch code
arm64: preempt: Provide our own implementation of asm/preempt.h
arch/arm64/include/asm/Kbuild | 1 -
arch/arm64/include/asm/preempt.h | 78 ++++++++++++++++++++++++++++++++++++
arch/arm64/include/asm/thread_info.h | 13 +++++-
arch/s390/include/asm/preempt.h | 2 +
arch/x86/include/asm/preempt.h | 3 ++
include/linux/preempt.h | 3 --
6 files changed, 95 insertions(+), 5 deletions(-)
create mode 100644 arch/arm64/include/asm/preempt.h
--
2.1.4
WARNING: multiple messages have this Message-ID (diff)
From: Will Deacon <will.deacon@arm.com>
To: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org, ard.biesheuvel@linaro.org,
catalin.marinas@arm.com, rml@tech9.net, tglx@linutronix.de,
peterz@infradead.org, schwidefsky@de.ibm.com,
Will Deacon <will.deacon@arm.com>
Subject: [PATCH 0/2] arm64: Only call into preempt_schedule() if need_resched()
Date: Tue, 27 Nov 2018 19:45:00 +0000 [thread overview]
Message-ID: <1543347902-21170-1-git-send-email-will.deacon@arm.com> (raw)
Hi all,
This pair of patches improves our preempt_enable() implementation slightly
on arm64 by making the resulting call to preempt_schedule() conditional
on need_resched(), which is tracked in bit 32 of the preempt count. The
logic is inverted so that we can detect the preempt count going to zero
and need_resched being set with a single CBZ instruction.
Consequently, our preempt_enable() code (including prologue/epilogue)
goes from:
40: a9bf7bfd stp x29, x30, [sp, #-16]!
44: 910003fd mov x29, sp
48: d5384101 mrs x1, sp_el0
4c: b9401020 ldr w0, [x1, #16]
50: 51000400 sub w0, w0, #0x1
54: b9001020 str w0, [x1, #16]
58: 350000a0 cbnz w0, 6c
5c: f9400020 ldr x0, [x1]
60: 721f001f tst w0, #0x2
64: 54000040 b.eq 6c // b.none
68: 94000000 bl 0 <preempt_schedule>
6c: a8c17bfd ldp x29, x30, [sp], #16
70: d65f03c0 ret
to:
40: a9bf7bfd stp x29, x30, [sp, #-16]!
44: 910003fd mov x29, sp
48: d5384101 mrs x1, sp_el0
4c: f9400820 ldr x0, [x1, #16]
50: d1000400 sub x0, x0, #0x1
54: b9001020 str w0, [x1, #16]
58: b4000060 cbz x0, 64 <will+0x24>
5c: a8c17bfd ldp x29, x30, [sp], #16
60: d65f03c0 ret
64: 94000000 bl 0 <preempt_schedule>
68: a8c17bfd ldp x29, x30, [sp], #16
6c: d65f03c0 ret
Will
--->8
Will Deacon (2):
preempt: Move PREEMPT_NEED_RESCHED definition into arch code
arm64: preempt: Provide our own implementation of asm/preempt.h
arch/arm64/include/asm/Kbuild | 1 -
arch/arm64/include/asm/preempt.h | 78 ++++++++++++++++++++++++++++++++++++
arch/arm64/include/asm/thread_info.h | 13 +++++-
arch/s390/include/asm/preempt.h | 2 +
arch/x86/include/asm/preempt.h | 3 ++
include/linux/preempt.h | 3 --
6 files changed, 95 insertions(+), 5 deletions(-)
create mode 100644 arch/arm64/include/asm/preempt.h
--
2.1.4
next reply other threads:[~2018-11-27 19:45 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-27 19:45 Will Deacon [this message]
2018-11-27 19:45 ` [PATCH 0/2] arm64: Only call into preempt_schedule() if need_resched() Will Deacon
2018-11-27 19:45 ` [PATCH 1/2] preempt: Move PREEMPT_NEED_RESCHED definition into arch code Will Deacon
2018-11-27 19:45 ` Will Deacon
2018-11-27 19:45 ` [PATCH 2/2] arm64: preempt: Provide our own implementation of asm/preempt.h Will Deacon
2018-11-27 19:45 ` Will Deacon
2018-11-28 15:35 ` Ard Biesheuvel
2018-11-28 15:35 ` Ard Biesheuvel
2018-11-28 16:40 ` Peter Zijlstra
2018-11-28 16:40 ` Peter Zijlstra
2018-11-28 16:45 ` Ard Biesheuvel
2018-11-28 16:45 ` Ard Biesheuvel
2018-11-28 8:56 ` [PATCH 0/2] arm64: Only call into preempt_schedule() if need_resched() Peter Zijlstra
2018-11-28 8:56 ` Peter Zijlstra
2018-11-28 9:01 ` Peter Zijlstra
2018-11-28 9:01 ` Peter Zijlstra
2018-11-28 12:04 ` Will Deacon
2018-11-28 12:04 ` Will Deacon
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=1543347902-21170-1-git-send-email-will.deacon@arm.com \
--to=will.deacon@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.