|
@@ -92,10 +92,7 @@ void smp_prepare_boot_cpu(void);
|
|
|
/*
|
|
|
* These macros fold the SMP functionality into a single CPU system
|
|
|
*/
|
|
|
-
|
|
|
-#if !defined(__smp_processor_id) || !defined(CONFIG_PREEMPT)
|
|
|
-# define smp_processor_id() 0
|
|
|
-#endif
|
|
|
+#define raw_smp_processor_id() 0
|
|
|
#define hard_smp_processor_id() 0
|
|
|
#define smp_call_function(func,info,retry,wait) ({ 0; })
|
|
|
#define on_each_cpu(func,info,retry,wait) ({ func(info); 0; })
|
|
@@ -106,30 +103,25 @@ static inline void smp_send_reschedule(int cpu) { }
|
|
|
#endif /* !SMP */
|
|
|
|
|
|
/*
|
|
|
- * DEBUG_PREEMPT support: check whether smp_processor_id() is being
|
|
|
- * used in a preemption-safe way.
|
|
|
+ * smp_processor_id(): get the current CPU ID.
|
|
|
*
|
|
|
- * An architecture has to enable this debugging code explicitly.
|
|
|
- * It can do so by renaming the smp_processor_id() macro to
|
|
|
- * __smp_processor_id(). This should only be done after some minimal
|
|
|
- * testing, because usually there are a number of false positives
|
|
|
- * that an architecture will trigger.
|
|
|
+ * if DEBUG_PREEMPT is enabled the we check whether it is
|
|
|
+ * used in a preemption-safe way. (smp_processor_id() is safe
|
|
|
+ * if it's used in a preemption-off critical section, or in
|
|
|
+ * a thread that is bound to the current CPU.)
|
|
|
*
|
|
|
- * To fix a false positive (i.e. smp_processor_id() use that the
|
|
|
- * debugging code reports but which use for some reason is legal),
|
|
|
- * change the smp_processor_id() reference to _smp_processor_id(),
|
|
|
- * which is the nondebug variant. NOTE: don't use this to hack around
|
|
|
- * real bugs.
|
|
|
+ * NOTE: raw_smp_processor_id() is for internal use only
|
|
|
+ * (smp_processor_id() is the preferred variant), but in rare
|
|
|
+ * instances it might also be used to turn off false positives
|
|
|
+ * (i.e. smp_processor_id() use that the debugging code reports but
|
|
|
+ * which use for some reason is legal). Don't use this to hack around
|
|
|
+ * the warning message, as your code might not work under PREEMPT.
|
|
|
*/
|
|
|
-#ifdef __smp_processor_id
|
|
|
-# if defined(CONFIG_PREEMPT) && defined(CONFIG_DEBUG_PREEMPT)
|
|
|
- extern unsigned int smp_processor_id(void);
|
|
|
-# else
|
|
|
-# define smp_processor_id() __smp_processor_id()
|
|
|
-# endif
|
|
|
-# define _smp_processor_id() __smp_processor_id()
|
|
|
+#ifdef CONFIG_DEBUG_PREEMPT
|
|
|
+ extern unsigned int debug_smp_processor_id(void);
|
|
|
+# define smp_processor_id() debug_smp_processor_id()
|
|
|
#else
|
|
|
-# define _smp_processor_id() smp_processor_id()
|
|
|
+# define smp_processor_id() raw_smp_processor_id()
|
|
|
#endif
|
|
|
|
|
|
#define get_cpu() ({ preempt_disable(); smp_processor_id(); })
|