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
WARNING: multiple messages have this Message-ID (diff)
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
next reply other threads:[~2018-11-27 19:44 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=ard.biesheuvel@linaro.org \ --cc=catalin.marinas@arm.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=peterz@infradead.org \ --cc=rml@tech9.net \ --cc=schwidefsky@de.ibm.com \ --cc=tglx@linutronix.de \ /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: linkBe 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.