|
@@ -321,6 +321,24 @@ static inline void init_hrtick(void)
|
|
}
|
|
}
|
|
#endif /* CONFIG_SCHED_HRTICK */
|
|
#endif /* CONFIG_SCHED_HRTICK */
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * cmpxchg based fetch_or, macro so it works for different integer types
|
|
|
|
+ */
|
|
|
|
+#define fetch_or(ptr, mask) \
|
|
|
|
+ ({ \
|
|
|
|
+ typeof(ptr) _ptr = (ptr); \
|
|
|
|
+ typeof(mask) _mask = (mask); \
|
|
|
|
+ typeof(*_ptr) _old, _val = *_ptr; \
|
|
|
|
+ \
|
|
|
|
+ for (;;) { \
|
|
|
|
+ _old = cmpxchg(_ptr, _val, _val | _mask); \
|
|
|
|
+ if (_old == _val) \
|
|
|
|
+ break; \
|
|
|
|
+ _val = _old; \
|
|
|
|
+ } \
|
|
|
|
+ _old; \
|
|
|
|
+})
|
|
|
|
+
|
|
#if defined(CONFIG_SMP) && defined(TIF_POLLING_NRFLAG)
|
|
#if defined(CONFIG_SMP) && defined(TIF_POLLING_NRFLAG)
|
|
/*
|
|
/*
|
|
* Atomically set TIF_NEED_RESCHED and test for TIF_POLLING_NRFLAG,
|
|
* Atomically set TIF_NEED_RESCHED and test for TIF_POLLING_NRFLAG,
|