- 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 -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEzv7L6UO9uDPlPSfHEsHwGGHeVUoFAmJStZ4ACgkQEsHwGGHe VUpUpA/8DHOMUQa7rM8z49ZWBV01HNVCLECTeeKshQBLyJfWc84MNOfdPbpgEGvY XE/eIZDnTMB5UKD0bfRqD+AQ0fXjl3NiLnJrdDZJqEQAiP/wGBswKNXMire8xPT8 9MfaOKYWYPl0LY2uZBWVLcdC+lVe4kRGfhqAcl4LRx0ZSvMzgjcFy34NeXY8LlXD kFQJEzHa97CTROje54mtmXEt7Y5bxjxWwVTSyfEt0hJPGo1bJtJP6FaY01Muj+Xu h/OGNx3KLOYf9MqQC31caAwKgtUOptm8bTpvG3onaHg29qJgz2umKwONyOjYrUUn 2PE3NREfMuKI38nf88pX+lOCs6/I1uVIjJPvAVJijIcuI1ZBXrfm26IP0lZ3LqG1 h/9Y5gChiZPn1j90VnF4UCJUm4u3bYEAHqKIQgUdpcpUqX0NlxbDiXoYxJWfHnmB PBJ0PE7Vdo4MPK0n3BGVrzXAFeOyHsohAsKFijT8afRCMAOF/ebmVs/tI5NygFrK 11e/U13/78iKkazZSxWew8vU3yXA39W5Rym7aPnhR2lWxvN+xQOjNTgZTxF9hUcZ 6AcsaYJgHR7nD8SM7Y9+cwHWOWaDEdZMg9XSkgvyd1p0tHb4u+Ve/SQK7sA3j9q7 ZmZyFSE1X3K+M1i+75rUSVmIEVM5cpfhodN89iRje/JIZ1KyRT8= =hSOc -----END PGP SIGNATURE----- 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:
commit
50c94de67c
10 changed files with 585 additions and 572 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue