s390/idle: fix suspicious RCU usage
authorPeter Zijlstra <peterz@infradead.org>
Tue, 8 Sep 2020 13:30:31 +0000 (15:30 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Mon, 14 Sep 2020 08:08:07 +0000 (10:08 +0200)
After commit eb1f00237aca ("lockdep,trace: Expose tracepoints") the
lock tracepoints are visible to lockdep and RCU-lockdep is finding a
bunch more RCU violations that were previously hidden.

Switch the idle->seqcount over to using raw_write_*() to avoid the
lockdep annotation and thus the lock tracepoints.

Reported-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/kernel/idle.c

index c73f506..f7f1e64 100644 (file)
@@ -39,14 +39,13 @@ void enabled_wait(void)
        local_irq_restore(flags);
 
        /* Account time spent with enabled wait psw loaded as idle time. */
-       /* XXX seqcount has tracepoints that require RCU */
-       write_seqcount_begin(&idle->seqcount);
+       raw_write_seqcount_begin(&idle->seqcount);
        idle_time = idle->clock_idle_exit - idle->clock_idle_enter;
        idle->clock_idle_enter = idle->clock_idle_exit = 0ULL;
        idle->idle_time += idle_time;
        idle->idle_count++;
        account_idle_time(cputime_to_nsecs(idle_time));
-       write_seqcount_end(&idle->seqcount);
+       raw_write_seqcount_end(&idle->seqcount);
 }
 NOKPROBE_SYMBOL(enabled_wait);