-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fprobe: Add fprobe_header encoding feature
Fprobe store its data structure address and size on the fgraph return stack by __fprobe_header. But most 64bit architecture can combine those to one unsigned long value because 4 MSB in the kernel address are the same. With this encoding, fprobe can consume less space on ret_stack. This introduces asm/fprobe.h to define arch dependent encode/decode macros. Note that since fprobe depends on CONFIG_HAVE_FUNCTION_GRAPH_FREGS, currently only arm64, loongarch, riscv, s390 and x86 are supported. Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Acked-by: Heiko Carstens <hca@linux.ibm.com> # s390 Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Alexei Starovoitov <alexei.starovoitov@gmail.com> Cc: Florent Revest <revest@chromium.org> Cc: Martin KaFai Lau <martin.lau@linux.dev> Cc: bpf <bpf@vger.kernel.org> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Alan Maguire <alan.maguire@oracle.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Will Deacon <will@kernel.org> Cc: Huacai Chen <chenhuacai@kernel.org> Cc: WANG Xuerui <kernel@xen0n.name> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Albert Ou <aou@eecs.berkeley.edu> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Alexander Gordeev <agordeev@linux.ibm.com> Cc: Christian Borntraeger <borntraeger@linux.ibm.com> Cc: Sven Schnelle <svens@linux.ibm.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: x86@kernel.org Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Link: https://lore.kernel.org/173519005783.391279.5307910947400277525.stgit@devnote2 Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
- Loading branch information
Masami Hiramatsu (Google)
authored and
Steven Rostedt (Google)
committed
Dec 26, 2024
1 parent
4346ba1
commit b5fa903
Showing
7 changed files
with
100 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
#ifndef _ASM_LOONGARCH_FPROBE_H | ||
#define _ASM_LOONGARCH_FPROBE_H | ||
|
||
/* | ||
* Explicitly undef ARCH_DEFINE_ENCODE_FPROBE_HEADER, because loongarch does not | ||
* have enough number of fixed MSBs of the address of kernel objects for | ||
* encoding the size of data in fprobe_header. Use 2-entries encoding instead. | ||
*/ | ||
#undef ARCH_DEFINE_ENCODE_FPROBE_HEADER | ||
|
||
#endif /* _ASM_LOONGARCH_FPROBE_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
#ifndef _ASM_S390_FPROBE_H | ||
#define _ASM_S390_FPROBE_H | ||
|
||
#include <asm-generic/fprobe.h> | ||
|
||
#undef FPROBE_HEADER_MSB_PATTERN | ||
#define FPROBE_HEADER_MSB_PATTERN 0 | ||
|
||
#endif /* _ASM_S390_FPROBE_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-only */ | ||
/* | ||
* Generic arch dependent fprobe macros. | ||
*/ | ||
#ifndef __ASM_GENERIC_FPROBE_H__ | ||
#define __ASM_GENERIC_FPROBE_H__ | ||
|
||
#include <linux/bits.h> | ||
|
||
#ifdef CONFIG_64BIT | ||
/* | ||
* Encoding the size and the address of fprobe into one 64bit entry. | ||
* The 32bit architectures should use 2 entries to store those info. | ||
*/ | ||
|
||
#define ARCH_DEFINE_ENCODE_FPROBE_HEADER | ||
|
||
#define FPROBE_HEADER_MSB_SIZE_SHIFT (BITS_PER_LONG - FPROBE_DATA_SIZE_BITS) | ||
#define FPROBE_HEADER_MSB_MASK \ | ||
GENMASK(FPROBE_HEADER_MSB_SIZE_SHIFT - 1, 0) | ||
|
||
/* | ||
* By default, this expects the MSBs in the address of kprobe is 0xf. | ||
* If any arch needs another fixed pattern (e.g. s390 is zero filled), | ||
* override this. | ||
*/ | ||
#define FPROBE_HEADER_MSB_PATTERN \ | ||
GENMASK(BITS_PER_LONG - 1, FPROBE_HEADER_MSB_SIZE_SHIFT) | ||
|
||
#define arch_fprobe_header_encodable(fp) \ | ||
(((unsigned long)(fp) & ~FPROBE_HEADER_MSB_MASK) == \ | ||
FPROBE_HEADER_MSB_PATTERN) | ||
|
||
#define arch_encode_fprobe_header(fp, size) \ | ||
(((unsigned long)(fp) & FPROBE_HEADER_MSB_MASK) | \ | ||
((unsigned long)(size) << FPROBE_HEADER_MSB_SIZE_SHIFT)) | ||
|
||
#define arch_decode_fprobe_header_size(val) \ | ||
((unsigned long)(val) >> FPROBE_HEADER_MSB_SIZE_SHIFT) | ||
|
||
#define arch_decode_fprobe_header_fp(val) \ | ||
((struct fprobe *)(((unsigned long)(val) & FPROBE_HEADER_MSB_MASK) | \ | ||
FPROBE_HEADER_MSB_PATTERN)) | ||
#endif /* CONFIG_64BIT */ | ||
|
||
#endif /* __ASM_GENERIC_FPROBE_H__ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters