aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce.c11
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 @@
53static DEFINE_MUTEX(mce_chrdev_read_mutex); 53static 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:
1884static unsigned int mce_chrdev_poll(struct file *file, poll_table *wait) 1887static 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;