Merge branch 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: rcu: create new rcu_access_index() and use in mce WARN_ON_SMP(): Add comment to explain ({0;})
This commit is contained in:
commit
fb9a7d76da
|
@ -1626,7 +1626,7 @@ out:
|
|||
static unsigned int mce_poll(struct file *file, poll_table *wait)
|
||||
{
|
||||
poll_wait(file, &mce_wait, wait);
|
||||
if (rcu_dereference_check_mce(mcelog.next))
|
||||
if (rcu_access_index(mcelog.next))
|
||||
return POLLIN | POLLRDNORM;
|
||||
if (!mce_apei_read_done && apei_check_mce())
|
||||
return POLLIN | POLLRDNORM;
|
||||
|
|
|
@ -194,6 +194,13 @@ extern void warn_slowpath_null(const char *file, const int line);
|
|||
#ifdef CONFIG_SMP
|
||||
# define WARN_ON_SMP(x) WARN_ON(x)
|
||||
#else
|
||||
/*
|
||||
* Use of ({0;}) because WARN_ON_SMP(x) may be used either as
|
||||
* a stand alone line statement or as a condition in an if ()
|
||||
* statement.
|
||||
* A simple "0" would cause gcc to give a "statement has no effect"
|
||||
* warning.
|
||||
*/
|
||||
# define WARN_ON_SMP(x) ({0;})
|
||||
#endif
|
||||
|
||||
|
|
|
@ -339,6 +339,12 @@ extern int rcu_my_thread_group_empty(void);
|
|||
((typeof(*p) __force __kernel *)(p)); \
|
||||
})
|
||||
|
||||
#define __rcu_access_index(p, space) \
|
||||
({ \
|
||||
typeof(p) _________p1 = ACCESS_ONCE(p); \
|
||||
rcu_dereference_sparse(p, space); \
|
||||
(_________p1); \
|
||||
})
|
||||
#define __rcu_dereference_index_check(p, c) \
|
||||
({ \
|
||||
typeof(p) _________p1 = ACCESS_ONCE(p); \
|
||||
|
@ -428,6 +434,20 @@ extern int rcu_my_thread_group_empty(void);
|
|||
|
||||
#define rcu_dereference_raw(p) rcu_dereference_check(p, 1) /*@@@ needed? @@@*/
|
||||
|
||||
/**
|
||||
* rcu_access_index() - fetch RCU index with no dereferencing
|
||||
* @p: The index to read
|
||||
*
|
||||
* Return the value of the specified RCU-protected index, but omit the
|
||||
* smp_read_barrier_depends() and keep the ACCESS_ONCE(). This is useful
|
||||
* when the value of this index is accessed, but the index is not
|
||||
* dereferenced, for example, when testing an RCU-protected index against
|
||||
* -1. Although rcu_access_index() may also be used in cases where
|
||||
* update-side locks prevent the value of the index from changing, you
|
||||
* should instead use rcu_dereference_index_protected() for this use case.
|
||||
*/
|
||||
#define rcu_access_index(p) __rcu_access_index((p), __rcu)
|
||||
|
||||
/**
|
||||
* rcu_dereference_index_check() - rcu_dereference for indices with debug checking
|
||||
* @p: The pointer to read, prior to dereferencing
|
||||
|
|
Loading…
Reference in New Issue