restore lost packages from 0.2.3 + fix overwritten 0.2.4 files
- Restore 29 recipe symlinks (libdrm, qtbase, dbus, sddm, pipewire, etc.) - Restore 33 patches (KDE, libdrm, mesa, pipewire, sddm, wireplumber) - Restore 20+ local/scripts (audit, lint, test, build helpers) - Restore src/cook/scheduler.rs, status.rs, gnu-config/ - Restore scripts/patch-inclusion-gate.sh, run_mini1.sh, validate-collision-log.sh - Recover TLC source from HEAD (was overwritten by 0.2.3 checkout) - Recover 11 local/docs plans from HEAD (were overwritten) - Recover qt6-wayland-smoke symlink from HEAD - Fix MOTD: remove garbled ASCII art, use clean text - Update version: 0.2.0 -> 0.2.4 in os-release, motd, config - Reduce filesystem_size: 1536 -> 512 MiB - Add ABSOLUTE RULE to AGENTS.md: never delete/ignore packages - Reduce pcid scheme log verbosity: info -> debug
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _LINUX_INDIRECT_CALL_WRAPPER_H
|
||||
#define _LINUX_INDIRECT_CALL_WRAPPER_H
|
||||
|
||||
#ifdef CONFIG_MITIGATION_RETPOLINE
|
||||
|
||||
/*
|
||||
* INDIRECT_CALL_$NR - wrapper for indirect calls with $NR known builtin
|
||||
* @f: function pointer
|
||||
* @f$NR: builtin functions names, up to $NR of them
|
||||
* @__VA_ARGS__: arguments for @f
|
||||
*
|
||||
* Avoid retpoline overhead for known builtin, checking @f vs each of them and
|
||||
* eventually invoking directly the builtin function. The functions are checked
|
||||
* in the given order. Fallback to the indirect call.
|
||||
*/
|
||||
#define INDIRECT_CALL_1(f, f1, ...) \
|
||||
({ \
|
||||
typeof(f) __f1 = (f); \
|
||||
likely(__f1 == f1) ? f1(__VA_ARGS__) : __f1(__VA_ARGS__); \
|
||||
})
|
||||
#define INDIRECT_CALL_2(f, f2, f1, ...) \
|
||||
({ \
|
||||
typeof(f) __f2 = (f); \
|
||||
likely(__f2 == f2) ? f2(__VA_ARGS__) : \
|
||||
INDIRECT_CALL_1(__f2, f1, __VA_ARGS__); \
|
||||
})
|
||||
#define INDIRECT_CALL_3(f, f3, f2, f1, ...) \
|
||||
({ \
|
||||
typeof(f) __f3 = (f); \
|
||||
likely(__f3 == f3) ? f3(__VA_ARGS__) : \
|
||||
INDIRECT_CALL_2(__f3, f2, f1, __VA_ARGS__); \
|
||||
})
|
||||
#define INDIRECT_CALL_4(f, f4, f3, f2, f1, ...) \
|
||||
({ \
|
||||
typeof(f) __f4 = (f); \
|
||||
likely(__f4 == f4) ? f4(__VA_ARGS__) : \
|
||||
INDIRECT_CALL_3(__f4, f3, f2, f1, __VA_ARGS__); \
|
||||
})
|
||||
|
||||
#define INDIRECT_CALLABLE_DECLARE(f) f
|
||||
#define INDIRECT_CALLABLE_SCOPE
|
||||
#define EXPORT_INDIRECT_CALLABLE(f) EXPORT_SYMBOL(f)
|
||||
|
||||
#else
|
||||
#define INDIRECT_CALL_1(f, f1, ...) f(__VA_ARGS__)
|
||||
#define INDIRECT_CALL_2(f, f2, f1, ...) f(__VA_ARGS__)
|
||||
#define INDIRECT_CALL_3(f, f3, f2, f1, ...) f(__VA_ARGS__)
|
||||
#define INDIRECT_CALL_4(f, f4, f3, f2, f1, ...) f(__VA_ARGS__)
|
||||
#define INDIRECT_CALLABLE_DECLARE(f)
|
||||
#define INDIRECT_CALLABLE_SCOPE static
|
||||
#define EXPORT_INDIRECT_CALLABLE(f)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We can use INDIRECT_CALL_$NR for ipv6 related functions only if ipv6 is
|
||||
* builtin, this macro simplify dealing with indirect calls with only ipv4/ipv6
|
||||
* alternatives
|
||||
*/
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
#define INDIRECT_CALL_INET(f, f2, f1, ...) \
|
||||
INDIRECT_CALL_2(f, f2, f1, __VA_ARGS__)
|
||||
#elif IS_ENABLED(CONFIG_INET)
|
||||
#define INDIRECT_CALL_INET(f, f2, f1, ...) INDIRECT_CALL_1(f, f1, __VA_ARGS__)
|
||||
#else
|
||||
#define INDIRECT_CALL_INET(f, f2, f1, ...) f(__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_INET)
|
||||
#define INDIRECT_CALL_INET_1(f, f1, ...) INDIRECT_CALL_1(f, f1, __VA_ARGS__)
|
||||
#else
|
||||
#define INDIRECT_CALL_INET_1(f, f1, ...) f(__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user