|
@@ -98,8 +98,17 @@
|
|
|
typedef struct { DECLARE_BITMAP(bits, MAX_NUMNODES); } nodemask_t;
|
|
|
extern nodemask_t _unused_nodemask_arg_;
|
|
|
|
|
|
+/*
|
|
|
+ * The inline keyword gives the compiler room to decide to inline, or
|
|
|
+ * not inline a function as it sees best. However, as these functions
|
|
|
+ * are called in both __init and non-__init functions, if they are not
|
|
|
+ * inlined we will end up with a section mis-match error (of the type of
|
|
|
+ * freeable items not being freed). So we must use __always_inline here
|
|
|
+ * to fix the problem. If other functions in the future also end up in
|
|
|
+ * this situation they will also need to be annotated as __always_inline
|
|
|
+ */
|
|
|
#define node_set(node, dst) __node_set((node), &(dst))
|
|
|
-static inline void __node_set(int node, volatile nodemask_t *dstp)
|
|
|
+static __always_inline void __node_set(int node, volatile nodemask_t *dstp)
|
|
|
{
|
|
|
set_bit(node, dstp->bits);
|
|
|
}
|