From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org,
linux-rt-users <linux-rt-users@vger.kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Carsten Emde <C.Emde@osadl.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
John Kacur <jkacur@redhat.com>,
Paul Gortmaker <paul.gortmaker@windriver.com>
Subject: [PATCH RT 08/10] x86/preempt-lazy: fixup should_resched()
Date: Thu, 22 Sep 2016 17:57:55 -0400 [thread overview]
Message-ID: <20160922215834.781622917@goodmis.org> (raw)
In-Reply-To: 20160922215747.696761304@goodmis.org
[-- Attachment #1: 0008-x86-preempt-lazy-fixup-should_resched.patch --]
[-- Type: text/plain, Size: 1932 bytes --]
4.1.33-rt38-rc1 stable review patch.
If anyone has any objections, please let me know.
------------------
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
should_resched() returns true if NEED_RESCHED is set and the
preempt_count is 0 _or_ if NEED_RESCHED_LAZY is set ignoring the preempt
counter. Ignoring the preemp counter is wrong. This patch adds this into
account.
While at it, __preempt_count_dec_and_test() ignores preempt_lazy_count
while checking TIF_NEED_RESCHED_LAZY so we this check, too.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
arch/x86/include/asm/preempt.h | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/arch/x86/include/asm/preempt.h b/arch/x86/include/asm/preempt.h
index c08949b0314d..eff1b8609f77 100644
--- a/arch/x86/include/asm/preempt.h
+++ b/arch/x86/include/asm/preempt.h
@@ -92,6 +92,8 @@ static __always_inline bool __preempt_count_dec_and_test(void)
if (____preempt_count_dec_and_test())
return true;
#ifdef CONFIG_PREEMPT_LAZY
+ if (current_thread_info()->preempt_lazy_count)
+ return false;
return test_thread_flag(TIF_NEED_RESCHED_LAZY);
#else
return false;
@@ -104,8 +106,19 @@ static __always_inline bool __preempt_count_dec_and_test(void)
static __always_inline bool should_resched(int preempt_offset)
{
#ifdef CONFIG_PREEMPT_LAZY
- return unlikely(raw_cpu_read_4(__preempt_count) == preempt_offset ||
- test_thread_flag(TIF_NEED_RESCHED_LAZY));
+ u32 tmp;
+
+ tmp = raw_cpu_read_4(__preempt_count);
+ if (tmp == preempt_offset)
+ return true;
+
+ /* preempt count == 0 ? */
+ tmp &= ~PREEMPT_NEED_RESCHED;
+ if (tmp)
+ return false;
+ if (current_thread_info()->preempt_lazy_count)
+ return false;
+ return test_thread_flag(TIF_NEED_RESCHED_LAZY);
#else
return unlikely(raw_cpu_read_4(__preempt_count) == preempt_offset);
#endif
--
2.8.1
next prev parent reply other threads:[~2016-09-22 21:57 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-22 21:57 [PATCH RT 00/10] Linux 4.1.33-rt38-rc1 Steven Rostedt
2016-09-22 21:57 ` [PATCH RT 01/10] timers: wakeup all timer waiters Steven Rostedt
2016-09-22 21:57 ` [PATCH RT 02/10] timers: wakeup all timer waiters without holding the base lock Steven Rostedt
2016-09-22 21:57 ` [PATCH RT 03/10] sched: lazy_preempt: avoid a warning in the !RT case Steven Rostedt
2016-09-22 21:57 ` [PATCH RT 04/10] scsi/fcoe: Fix get_cpu()/put_cpu_light() imbalance in fcoe_recv_frame() Steven Rostedt
2016-09-22 21:57 ` [PATCH RT 06/10] net: add a lock around icmp_sk() Steven Rostedt
2016-09-22 21:57 ` [PATCH RT 07/10] fs/dcache: resched/chill only if we make no progress Steven Rostedt
2016-09-22 21:57 ` Steven Rostedt [this message]
2016-09-22 21:57 ` [PATCH RT 09/10] fs/dcache: incremental fixup of the retry routine Steven Rostedt
2016-09-22 21:57 ` [PATCH RT 10/10] Linux 4.1.33-rt38-rc1 Steven Rostedt
[not found] ` <20160922215834.076247330@goodmis.org>
2016-09-22 22:04 ` [PATCH RT 05/10] net: add back the missing serialization in ip_send_unicast_reply() Steven Rostedt
-- strict thread matches above, loose matches on Subject: below --
2016-09-23 2:49 [PATCH RT 00/10] Linux 3.14.79-rt85-rc1 Steven Rostedt
2016-09-23 2:49 ` [PATCH RT 08/10] x86/preempt-lazy: fixup should_resched() Steven Rostedt
2016-09-22 23:17 [PATCH RT 00/10] Linux 3.18.42-rt45-rc1 Steven Rostedt
2016-09-22 23:17 ` [PATCH RT 08/10] x86/preempt-lazy: fixup should_resched() Steven Rostedt
2016-09-22 21:47 [PATCH RT 00/10] Linux 4.4.21-rt31-rc1 Steven Rostedt
2016-09-22 21:48 ` [PATCH RT 08/10] x86/preempt-lazy: fixup should_resched() Steven Rostedt
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=20160922215834.781622917@goodmis.org \
--to=rostedt@goodmis.org \
--cc=C.Emde@osadl.org \
--cc=bigeasy@linutronix.de \
--cc=jkacur@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=paul.gortmaker@windriver.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: 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.