diff options
| author | Rafael J. Wysocki <[email protected]> | 2015-12-04 14:01:02 +0100 | 
|---|---|---|
| committer | Rafael J. Wysocki <[email protected]> | 2015-12-04 14:01:02 +0100 | 
| commit | c09c9dd2e9c732658c744a802101d5c34fedde22 (patch) | |
| tree | 89f930ede811e66e7a70761aaca079d779fed38a /tools/perf/tests/bpf-script-example.c | |
| parent | 727ae8be30b428082d3519817f4fb98b712d457d (diff) | |
| parent | 06bf403de344a8a0811ebd24992d2a08022c5225 (diff) | |
Merge branches 'acpi-pci' and 'pm-pci'
* acpi-pci:
  x86/PCI/ACPI: Fix regression caused by commit 4d6b4e69a245
* pm-pci:
  PCI / PM: Tune down retryable runtime suspend error messages
Diffstat (limited to 'tools/perf/tests/bpf-script-example.c')
| -rw-r--r-- | tools/perf/tests/bpf-script-example.c | 48 | 
1 files changed, 48 insertions, 0 deletions
| diff --git a/tools/perf/tests/bpf-script-example.c b/tools/perf/tests/bpf-script-example.c new file mode 100644 index 000000000000..0ec9c2c03164 --- /dev/null +++ b/tools/perf/tests/bpf-script-example.c @@ -0,0 +1,48 @@ +/* + * bpf-script-example.c + * Test basic LLVM building + */ +#ifndef LINUX_VERSION_CODE +# error Need LINUX_VERSION_CODE +# error Example: for 4.2 kernel, put 'clang-opt="-DLINUX_VERSION_CODE=0x40200" into llvm section of ~/.perfconfig' +#endif +#define BPF_ANY 0 +#define BPF_MAP_TYPE_ARRAY 2 +#define BPF_FUNC_map_lookup_elem 1 +#define BPF_FUNC_map_update_elem 2 + +static void *(*bpf_map_lookup_elem)(void *map, void *key) = +	(void *) BPF_FUNC_map_lookup_elem; +static void *(*bpf_map_update_elem)(void *map, void *key, void *value, int flags) = +	(void *) BPF_FUNC_map_update_elem; + +struct bpf_map_def { +	unsigned int type; +	unsigned int key_size; +	unsigned int value_size; +	unsigned int max_entries; +}; + +#define SEC(NAME) __attribute__((section(NAME), used)) +struct bpf_map_def SEC("maps") flip_table = { +	.type = BPF_MAP_TYPE_ARRAY, +	.key_size = sizeof(int), +	.value_size = sizeof(int), +	.max_entries = 1, +}; + +SEC("func=sys_epoll_pwait") +int bpf_func__sys_epoll_pwait(void *ctx) +{ +	int ind =0; +	int *flag = bpf_map_lookup_elem(&flip_table, &ind); +	int new_flag; +	if (!flag) +		return 0; +	/* flip flag and store back */ +	new_flag = !*flag; +	bpf_map_update_elem(&flip_table, &ind, &new_flag, BPF_ANY); +	return new_flag; +} +char _license[] SEC("license") = "GPL"; +int _version SEC("version") = LINUX_VERSION_CODE; |