mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-27 04:22:58 +00:00
Merge tag 'locking_urgent_for_v5.18_rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull locking fixes from Borislav Petkov: - Allow the compiler to optimize away unused percpu accesses and change the local_lock_* macros back to inline functions - A couple of fixes to static call insn patching * tag 'locking_urgent_for_v5.18_rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: Revert "mm/page_alloc: mark pagesets as __maybe_unused" Revert "locking/local_lock: Make the empty local_lock_*() function a macro." x86/percpu: Remove volatile from arch_raw_cpu_ptr(). static_call: Remove __DEFINE_STATIC_CALL macro static_call: Properly initialise DEFINE_STATIC_CALL_RET0() static_call: Don't make __static_call_return0 static x86,static_call: Fix __static_call_return0 for i386
This commit is contained in:
@@ -44,9 +44,9 @@ static inline void local_lock_debug_init(local_lock_t *l)
|
||||
}
|
||||
#else /* CONFIG_DEBUG_LOCK_ALLOC */
|
||||
# define LOCAL_LOCK_DEBUG_INIT(lockname)
|
||||
# define local_lock_acquire(__ll) do { typecheck(local_lock_t *, __ll); } while (0)
|
||||
# define local_lock_release(__ll) do { typecheck(local_lock_t *, __ll); } while (0)
|
||||
# define local_lock_debug_init(__ll) do { typecheck(local_lock_t *, __ll); } while (0)
|
||||
static inline void local_lock_acquire(local_lock_t *l) { }
|
||||
static inline void local_lock_release(local_lock_t *l) { }
|
||||
static inline void local_lock_debug_init(local_lock_t *l) { }
|
||||
#endif /* !CONFIG_DEBUG_LOCK_ALLOC */
|
||||
|
||||
#define INIT_LOCAL_LOCK(lockname) { LOCAL_LOCK_DEBUG_INIT(lockname) }
|
||||
|
||||
@@ -180,13 +180,13 @@ extern int static_call_text_reserved(void *start, void *end);
|
||||
|
||||
extern long __static_call_return0(void);
|
||||
|
||||
#define __DEFINE_STATIC_CALL(name, _func, _func_init) \
|
||||
#define DEFINE_STATIC_CALL(name, _func) \
|
||||
DECLARE_STATIC_CALL(name, _func); \
|
||||
struct static_call_key STATIC_CALL_KEY(name) = { \
|
||||
.func = _func_init, \
|
||||
.func = _func, \
|
||||
.type = 1, \
|
||||
}; \
|
||||
ARCH_DEFINE_STATIC_CALL_TRAMP(name, _func_init)
|
||||
ARCH_DEFINE_STATIC_CALL_TRAMP(name, _func)
|
||||
|
||||
#define DEFINE_STATIC_CALL_NULL(name, _func) \
|
||||
DECLARE_STATIC_CALL(name, _func); \
|
||||
@@ -196,6 +196,14 @@ extern long __static_call_return0(void);
|
||||
}; \
|
||||
ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name)
|
||||
|
||||
#define DEFINE_STATIC_CALL_RET0(name, _func) \
|
||||
DECLARE_STATIC_CALL(name, _func); \
|
||||
struct static_call_key STATIC_CALL_KEY(name) = { \
|
||||
.func = __static_call_return0, \
|
||||
.type = 1, \
|
||||
}; \
|
||||
ARCH_DEFINE_STATIC_CALL_RET0_TRAMP(name)
|
||||
|
||||
#define static_call_cond(name) (void)__static_call(name)
|
||||
|
||||
#define EXPORT_STATIC_CALL(name) \
|
||||
@@ -217,12 +225,12 @@ extern long __static_call_return0(void);
|
||||
|
||||
static inline int static_call_init(void) { return 0; }
|
||||
|
||||
#define __DEFINE_STATIC_CALL(name, _func, _func_init) \
|
||||
#define DEFINE_STATIC_CALL(name, _func) \
|
||||
DECLARE_STATIC_CALL(name, _func); \
|
||||
struct static_call_key STATIC_CALL_KEY(name) = { \
|
||||
.func = _func_init, \
|
||||
.func = _func, \
|
||||
}; \
|
||||
ARCH_DEFINE_STATIC_CALL_TRAMP(name, _func_init)
|
||||
ARCH_DEFINE_STATIC_CALL_TRAMP(name, _func)
|
||||
|
||||
#define DEFINE_STATIC_CALL_NULL(name, _func) \
|
||||
DECLARE_STATIC_CALL(name, _func); \
|
||||
@@ -231,6 +239,12 @@ static inline int static_call_init(void) { return 0; }
|
||||
}; \
|
||||
ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name)
|
||||
|
||||
#define DEFINE_STATIC_CALL_RET0(name, _func) \
|
||||
DECLARE_STATIC_CALL(name, _func); \
|
||||
struct static_call_key STATIC_CALL_KEY(name) = { \
|
||||
.func = __static_call_return0, \
|
||||
}; \
|
||||
ARCH_DEFINE_STATIC_CALL_RET0_TRAMP(name)
|
||||
|
||||
#define static_call_cond(name) (void)__static_call(name)
|
||||
|
||||
@@ -248,10 +262,7 @@ static inline int static_call_text_reserved(void *start, void *end)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline long __static_call_return0(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
extern long __static_call_return0(void);
|
||||
|
||||
#define EXPORT_STATIC_CALL(name) \
|
||||
EXPORT_SYMBOL(STATIC_CALL_KEY(name)); \
|
||||
@@ -281,11 +292,14 @@ static inline long __static_call_return0(void)
|
||||
.func = _func_init, \
|
||||
}
|
||||
|
||||
#define DEFINE_STATIC_CALL(name, _func) \
|
||||
__DEFINE_STATIC_CALL(name, _func, _func)
|
||||
|
||||
#define DEFINE_STATIC_CALL_NULL(name, _func) \
|
||||
DECLARE_STATIC_CALL(name, _func); \
|
||||
struct static_call_key STATIC_CALL_KEY(name) = { \
|
||||
.func = NULL, \
|
||||
}
|
||||
__DEFINE_STATIC_CALL(name, _func, NULL)
|
||||
|
||||
#define DEFINE_STATIC_CALL_RET0(name, _func) \
|
||||
__DEFINE_STATIC_CALL(name, _func, __static_call_return0)
|
||||
|
||||
static inline void __static_call_nop(void) { }
|
||||
|
||||
@@ -327,10 +341,4 @@ static inline int static_call_text_reserved(void *start, void *end)
|
||||
|
||||
#endif /* CONFIG_HAVE_STATIC_CALL */
|
||||
|
||||
#define DEFINE_STATIC_CALL(name, _func) \
|
||||
__DEFINE_STATIC_CALL(name, _func, _func)
|
||||
|
||||
#define DEFINE_STATIC_CALL_RET0(name, _func) \
|
||||
__DEFINE_STATIC_CALL(name, _func, __static_call_return0)
|
||||
|
||||
#endif /* _LINUX_STATIC_CALL_H */
|
||||
|
||||
Reference in New Issue
Block a user