diff options
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index e535533d5ab8..1fd04a02d90a 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
@@ -53,9 +53,12 @@ | |||
53 | static DEFINE_MUTEX(mce_chrdev_read_mutex); | 53 | static DEFINE_MUTEX(mce_chrdev_read_mutex); |
54 | 54 | ||
55 | #define rcu_dereference_check_mce(p) \ | 55 | #define rcu_dereference_check_mce(p) \ |
56 | rcu_dereference_index_check((p), \ | 56 | ({ \ |
57 | rcu_read_lock_sched_held() || \ | 57 | rcu_lockdep_assert(rcu_read_lock_sched_held() || \ |
58 | lockdep_is_held(&mce_chrdev_read_mutex)) | 58 | lockdep_is_held(&mce_chrdev_read_mutex), \ |
59 | "suspicious rcu_dereference_check_mce() usage"); \ | ||
60 | smp_load_acquire(&(p)); \ | ||
61 | }) | ||
59 | 62 | ||
60 | #define CREATE_TRACE_POINTS | 63 | #define CREATE_TRACE_POINTS |
61 | #include <trace/events/mce.h> | 64 | #include <trace/events/mce.h> |
@@ -1884,7 +1887,7 @@ out: | |||
1884 | static unsigned int mce_chrdev_poll(struct file *file, poll_table *wait) | 1887 | static unsigned int mce_chrdev_poll(struct file *file, poll_table *wait) |
1885 | { | 1888 | { |
1886 | poll_wait(file, &mce_chrdev_wait, wait); | 1889 | poll_wait(file, &mce_chrdev_wait, wait); |
1887 | if (rcu_access_index(mcelog.next)) | 1890 | if (READ_ONCE(mcelog.next)) |
1888 | return POLLIN | POLLRDNORM; | 1891 | return POLLIN | POLLRDNORM; |
1889 | if (!mce_apei_read_done && apei_check_mce()) | 1892 | if (!mce_apei_read_done && apei_check_mce()) |
1890 | return POLLIN | POLLRDNORM; | 1893 | return POLLIN | POLLRDNORM; |