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
Showing the changes to include (2 of 10 files). Show all
Unified · Split
| @@ -44,9 +44,9 @@ static inline void local_lock_debug_init(local_lock_t *l) · 43 unmodified lines | ||
| 44 | 44 | } |
| 45 | 45 | #else /* CONFIG_DEBUG_LOCK_ALLOC */ |
| 46 | 46 | # define LOCAL_LOCK_DEBUG_INIT(lockname) |
| 47 | −# define local_lock_acquire(__ll) do { typecheck(local_lock_t *, __ll); } while (0) | |
| 48 | −# define local_lock_release(__ll) do { typecheck(local_lock_t *, __ll); } while (0) | |
| 49 | −# define local_lock_debug_init(__ll) do { typecheck(local_lock_t *, __ll); } while (0) | |
| 47 | +static inline void local_lock_acquire(local_lock_t *l) { } | |
| 48 | +static inline void local_lock_release(local_lock_t *l) { } | |
| 49 | +static inline void local_lock_debug_init(local_lock_t *l) { } | |
| 50 | 50 | #endif /* !CONFIG_DEBUG_LOCK_ALLOC */ |
| 51 | 51 | |
| 52 | 52 | #define INIT_LOCAL_LOCK(lockname) { LOCAL_LOCK_DEBUG_INIT(lockname) } |
| @@ -180,13 +180,13 @@ extern int static_call_text_reserved(void *start, void *end); · 179 unmodified lines | ||
| 180 | 180 | |
| 181 | 181 | extern long __static_call_return0(void); |
| 182 | 182 | |
| 183 | −#define __DEFINE_STATIC_CALL(name, _func, _func_init) \ | |
| 183 | +#define DEFINE_STATIC_CALL(name, _func) \ | |
| 184 | 184 | DECLARE_STATIC_CALL(name, _func); \ |
| 185 | 185 | struct static_call_key STATIC_CALL_KEY(name) = { \ |
| 186 | − .func = _func_init, \ | |
| 186 | + .func = _func, \ | |
| 187 | 187 | .type = 1, \ |
| 188 | 188 | }; \ |
| 189 | − ARCH_DEFINE_STATIC_CALL_TRAMP(name, _func_init) | |
| 189 | + ARCH_DEFINE_STATIC_CALL_TRAMP(name, _func) | |
| 190 | 190 | |
| 191 | 191 | #define DEFINE_STATIC_CALL_NULL(name, _func) \ |
| 192 | 192 | DECLARE_STATIC_CALL(name, _func); \ |
| @@ -196,6 +196,14 @@ extern long __static_call_return0(void); · 3 unmodified lines | ||
| 196 | 196 | }; \ |
| 197 | 197 | ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name) |
| 198 | 198 | |
| 199 | +#define DEFINE_STATIC_CALL_RET0(name, _func) \ | |
| 200 | + DECLARE_STATIC_CALL(name, _func); \ | |
| 201 | + struct static_call_key STATIC_CALL_KEY(name) = { \ | |
| 202 | + .func = __static_call_return0, \ | |
| 203 | + .type = 1, \ | |
| 204 | + }; \ | |
| 205 | + ARCH_DEFINE_STATIC_CALL_RET0_TRAMP(name) | |
| 206 | + | |
| 199 | 207 | #define static_call_cond(name) (void)__static_call(name) |
| 200 | 208 | |
| 201 | 209 | #define EXPORT_STATIC_CALL(name) \ |
| @@ -217,12 +225,12 @@ extern long __static_call_return0(void); · 15 unmodified lines | ||
| 217 | 225 | |
| 218 | 226 | static inline int static_call_init(void) { return 0; } |
| 219 | 227 | |
| 220 | −#define __DEFINE_STATIC_CALL(name, _func, _func_init) \ | |
| 228 | +#define DEFINE_STATIC_CALL(name, _func) \ | |
| 221 | 229 | DECLARE_STATIC_CALL(name, _func); \ |
| 222 | 230 | struct static_call_key STATIC_CALL_KEY(name) = { \ |
| 223 | − .func = _func_init, \ | |
| 231 | + .func = _func, \ | |
| 224 | 232 | }; \ |
| 225 | − ARCH_DEFINE_STATIC_CALL_TRAMP(name, _func_init) | |
| 233 | + ARCH_DEFINE_STATIC_CALL_TRAMP(name, _func) | |
| 226 | 234 | |
| 227 | 235 | #define DEFINE_STATIC_CALL_NULL(name, _func) \ |
| 228 | 236 | DECLARE_STATIC_CALL(name, _func); \ |
| @@ -231,6 +239,12 @@ static inline int static_call_init(void) { return 0; } · 2 unmodified lines | ||
| 231 | 239 | }; \ |
| 232 | 240 | ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name) |
| 233 | 241 | |
| 242 | +#define DEFINE_STATIC_CALL_RET0(name, _func) \ | |
| 243 | + DECLARE_STATIC_CALL(name, _func); \ | |
| 244 | + struct static_call_key STATIC_CALL_KEY(name) = { \ | |
| 245 | + .func = __static_call_return0, \ | |
| 246 | + }; \ | |
| 247 | + ARCH_DEFINE_STATIC_CALL_RET0_TRAMP(name) | |
| 234 | 248 | |
| 235 | 249 | #define static_call_cond(name) (void)__static_call(name) |
| 236 | 250 | |
| @@ -248,10 +262,7 @@ static inline int static_call_text_reserved(void *start, void *end) · 11 unmodified lines | ||
| 248 | 262 | return 0; |
| 249 | 263 | } |
| 250 | 264 | |
| 251 | −static inline long __static_call_return0(void) | |
| 252 | −{ | |
| 253 | − return 0; | |
| 254 | −} | |
| 265 | +extern long __static_call_return0(void); | |
| 255 | 266 | |
| 256 | 267 | #define EXPORT_STATIC_CALL(name) \ |
| 257 | 268 | EXPORT_SYMBOL(STATIC_CALL_KEY(name)); \ |
| @@ -281,11 +292,14 @@ static inline long __static_call_return0(void) · 23 unmodified lines | ||
| 281 | 292 | .func = _func_init, \ |
| 282 | 293 | } |
| 283 | 294 | |
| 295 | +#define DEFINE_STATIC_CALL(name, _func) \ | |
| 296 | + __DEFINE_STATIC_CALL(name, _func, _func) | |
| 297 | + | |
| 284 | 298 | #define DEFINE_STATIC_CALL_NULL(name, _func) \ |
| 285 | − DECLARE_STATIC_CALL(name, _func); \ | |
| 286 | − struct static_call_key STATIC_CALL_KEY(name) = { \ | |
| 287 | − .func = NULL, \ | |
| 288 | − } | |
| 299 | + __DEFINE_STATIC_CALL(name, _func, NULL) | |
| 300 | + | |
| 301 | +#define DEFINE_STATIC_CALL_RET0(name, _func) \ | |
| 302 | + __DEFINE_STATIC_CALL(name, _func, __static_call_return0) | |
| 289 | 303 | |
| 290 | 304 | static inline void __static_call_nop(void) { } |
| 291 | 305 | |
| @@ -327,10 +341,4 @@ static inline int static_call_text_reserved(void *start, void *end) · 35 unmodified lines | ||
| 327 | 341 | |
| 328 | 342 | #endif /* CONFIG_HAVE_STATIC_CALL */ |
| 329 | 343 | |
| 330 | −#define DEFINE_STATIC_CALL(name, _func) \ | |
| 331 | − __DEFINE_STATIC_CALL(name, _func, _func) | |
| 332 | − | |
| 333 | −#define DEFINE_STATIC_CALL_RET0(name, _func) \ | |
| 334 | − __DEFINE_STATIC_CALL(name, _func, __static_call_return0) | |
| 335 | − | |
| 336 | 344 | #endif /* _LINUX_STATIC_CALL_H */ |