[PATCH RT 1/2] lockdep: Fix backport of "Correctly annotate hardirq context in irq_exit()"

From: Steven Rostedt
Date: Thu Oct 30 2014 - 21:11:04 EST


3.2.63-rt93-rc1 stable review patch.
If anyone has any objections, please let me know.

------------------

From: "Steven Rostedt (Red Hat)" <rostedt@xxxxxxxxxxx>

The backport of f1a83e652bed "lockdep: Correctly annotate hardirq context
in irq_exit()" to v3.2.53-rt76 wasn't correct because v3.2-rt had two
calls to invoke_softirq(). One when __ARCH_IRQ_EXIT_IRQS_DISABLED is defined
and another when it is not defined. v3.14 which introduced this change
only had one version.

When I backported this change, I didn't see the two places and only one
was added. Unfortunately, it was the one that x86 does not use, and this
caused a lockdep splat on one of my tests. It only affected the -rt patch
when PREEMPT_RT_FULL was not set, so I did not spend much time looking to
see what broke.

Well, I finally spent a little time and found the cause, and this was
a simple fix. Now my all my tests pass on the v3.2-rt kernel, even the
one where I test CONFIG_PREEMPT_RT_FULL not set.

Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Signed-off-by: Steven Rostedt <rostedt@xxxxxxxxxxx>
---
kernel/softirq.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/kernel/softirq.c b/kernel/softirq.c
index 7d882ccfa22b..56d30853345d 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -637,9 +637,10 @@ static inline void invoke_softirq(void)
static inline void invoke_softirq(void)
{
#ifndef CONFIG_PREEMPT_RT_FULL
- if (!force_irqthreads)
+ if (!force_irqthreads) {
+ lockdep_softirq_from_hardirq();
do_softirq();
- else {
+ } else {
__local_bh_disable((unsigned long)__builtin_return_address(0),
SOFTIRQ_OFFSET);
wakeup_softirqd();
--
2.1.1


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/