diff options
Diffstat (limited to 'samples/bpf/trace_event_user.c')
| -rw-r--r-- | samples/bpf/trace_event_user.c | 27 | 
1 files changed, 24 insertions, 3 deletions
| diff --git a/samples/bpf/trace_event_user.c b/samples/bpf/trace_event_user.c index 1fa1becfa641..d08046ab81f0 100644 --- a/samples/bpf/trace_event_user.c +++ b/samples/bpf/trace_event_user.c @@ -122,6 +122,16 @@ static void print_stacks(void)  	}  } +static inline int generate_load(void) +{ +	if (system("dd if=/dev/zero of=/dev/null count=5000k status=none") < 0) { +		printf("failed to generate some load with dd: %s\n", strerror(errno)); +		return -1; +	} + +	return 0; +} +  static void test_perf_event_all_cpu(struct perf_event_attr *attr)  {  	int nr_cpus = sysconf(_SC_NPROCESSORS_CONF); @@ -142,7 +152,11 @@ static void test_perf_event_all_cpu(struct perf_event_attr *attr)  		assert(ioctl(pmu_fd[i], PERF_EVENT_IOC_SET_BPF, prog_fd[0]) == 0);  		assert(ioctl(pmu_fd[i], PERF_EVENT_IOC_ENABLE) == 0);  	} -	system("dd if=/dev/zero of=/dev/null count=5000k status=none"); + +	if (generate_load() < 0) { +		error = 1; +		goto all_cpu_err; +	}  	print_stacks();  all_cpu_err:  	for (i--; i >= 0; i--) { @@ -156,7 +170,7 @@ all_cpu_err:  static void test_perf_event_task(struct perf_event_attr *attr)  { -	int pmu_fd; +	int pmu_fd, error = 0;  	/* per task perf event, enable inherit so the "dd ..." command can be traced properly.  	 * Enabling inherit will cause bpf_perf_prog_read_time helper failure. @@ -171,10 +185,17 @@ static void test_perf_event_task(struct perf_event_attr *attr)  	}  	assert(ioctl(pmu_fd, PERF_EVENT_IOC_SET_BPF, prog_fd[0]) == 0);  	assert(ioctl(pmu_fd, PERF_EVENT_IOC_ENABLE) == 0); -	system("dd if=/dev/zero of=/dev/null count=5000k status=none"); + +	if (generate_load() < 0) { +		error = 1; +		goto err; +	}  	print_stacks(); +err:  	ioctl(pmu_fd, PERF_EVENT_IOC_DISABLE);  	close(pmu_fd); +	if (error) +		int_exit(0);  }  static void test_bpf_perf_event(void) |