diff options
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/bench/mem-memcpy.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/tools/perf/bench/mem-memcpy.c b/tools/perf/bench/mem-memcpy.c index d4f4f9806ae4..5165fd1d8d2c 100644 --- a/tools/perf/bench/mem-memcpy.c +++ b/tools/perf/bench/mem-memcpy.c | |||
@@ -22,9 +22,10 @@ | |||
22 | 22 | ||
23 | #define K 1024 | 23 | #define K 1024 |
24 | 24 | ||
25 | static const char *length_str = "1MB"; | 25 | static const char *length_str = "1MB"; |
26 | static const char *routine = "default"; | 26 | static const char *routine = "default"; |
27 | static int use_clock = 0; | 27 | static int use_clock = 0; |
28 | static int clock_fd; | ||
28 | 29 | ||
29 | static const struct option options[] = { | 30 | static const struct option options[] = { |
30 | OPT_STRING('l', "length", &length_str, "1MB", | 31 | OPT_STRING('l', "length", &length_str, "1MB", |
@@ -57,17 +58,19 @@ static const char * const bench_mem_memcpy_usage[] = { | |||
57 | NULL | 58 | NULL |
58 | }; | 59 | }; |
59 | 60 | ||
60 | static int clock_fd; | ||
61 | |||
62 | static struct perf_event_attr clock_attr = { | 61 | static struct perf_event_attr clock_attr = { |
63 | .type = PERF_TYPE_HARDWARE, | 62 | .type = PERF_TYPE_HARDWARE, |
64 | .config = PERF_COUNT_HW_CPU_CYCLES | 63 | .config = PERF_COUNT_HW_CPU_CYCLES |
65 | }; | 64 | }; |
66 | 65 | ||
67 | static void init_clock(void) | 66 | static void init_clock(void) |
68 | { | 67 | { |
69 | clock_fd = sys_perf_event_open(&clock_attr, getpid(), -1, -1, 0); | 68 | clock_fd = sys_perf_event_open(&clock_attr, getpid(), -1, -1, 0); |
70 | BUG_ON(clock_fd < 0); | 69 | |
70 | if (clock_fd < 0 && errno == ENOSYS) | ||
71 | die("No CONFIG_PERF_EVENTS=y kernel support configured?\n"); | ||
72 | else | ||
73 | BUG_ON(clock_fd < 0); | ||
71 | } | 74 | } |
72 | 75 | ||
73 | static u64 get_clock(void) | 76 | static u64 get_clock(void) |
@@ -104,7 +107,8 @@ int bench_mem_memcpy(int argc, const char **argv, | |||
104 | tv_diff.tv_sec = 0; | 107 | tv_diff.tv_sec = 0; |
105 | tv_diff.tv_usec = 0; | 108 | tv_diff.tv_usec = 0; |
106 | length = (size_t)perf_atoll((char *)length_str); | 109 | length = (size_t)perf_atoll((char *)length_str); |
107 | if ((long long int)length <= 0) { | 110 | |
111 | if ((s64)length <= 0) { | ||
108 | fprintf(stderr, "Invalid length:%s\n", length_str); | 112 | fprintf(stderr, "Invalid length:%s\n", length_str); |
109 | return 1; | 113 | return 1; |
110 | } | 114 | } |
@@ -124,9 +128,12 @@ int bench_mem_memcpy(int argc, const char **argv, | |||
124 | } | 128 | } |
125 | 129 | ||
126 | dst = calloc(length, sizeof(char)); | 130 | dst = calloc(length, sizeof(char)); |
127 | assert(dst); | 131 | if (!dst) |
132 | die("memory allocation failed - maybe length is too large?\n"); | ||
133 | |||
128 | src = calloc(length, sizeof(char)); | 134 | src = calloc(length, sizeof(char)); |
129 | assert(src); | 135 | if (!src) |
136 | die("memory allocation failed - maybe length is too large?\n"); | ||
130 | 137 | ||
131 | if (bench_format == BENCH_FORMAT_DEFAULT) { | 138 | if (bench_format == BENCH_FORMAT_DEFAULT) { |
132 | printf("# Copying %s Bytes from %p to %p ...\n\n", | 139 | printf("# Copying %s Bytes from %p to %p ...\n\n", |
@@ -136,8 +143,9 @@ int bench_mem_memcpy(int argc, const char **argv, | |||
136 | if (use_clock) { | 143 | if (use_clock) { |
137 | init_clock(); | 144 | init_clock(); |
138 | clock_start = get_clock(); | 145 | clock_start = get_clock(); |
139 | } else | 146 | } else { |
140 | BUG_ON(gettimeofday(&tv_start, NULL)); | 147 | BUG_ON(gettimeofday(&tv_start, NULL)); |
148 | } | ||
141 | 149 | ||
142 | routines[i].fn(dst, src, length); | 150 | routines[i].fn(dst, src, length); |
143 | 151 | ||
@@ -176,9 +184,8 @@ int bench_mem_memcpy(int argc, const char **argv, | |||
176 | printf("%lf\n", bps); | 184 | printf("%lf\n", bps); |
177 | break; | 185 | break; |
178 | default: | 186 | default: |
179 | /* reaching here is something disaster */ | 187 | /* reaching this means there's some disaster: */ |
180 | fprintf(stderr, "Unknown format:%d\n", bench_format); | 188 | die("unknown format: %d\n", bench_format); |
181 | exit(1); | ||
182 | break; | 189 | break; |
183 | } | 190 | } |
184 | 191 | ||