diff options
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/Documentation/perf-timechart.txt | 3 | ||||
-rw-r--r-- | tools/perf/Makefile | 23 | ||||
-rw-r--r-- | tools/perf/builtin-record.c | 6 | ||||
-rw-r--r-- | tools/perf/builtin-sched.c | 4 | ||||
-rw-r--r-- | tools/perf/builtin-stat.c | 8 | ||||
-rw-r--r-- | tools/perf/builtin-timechart.c | 10 | ||||
-rw-r--r-- | tools/perf/builtin-top.c | 1 | ||||
-rw-r--r-- | tools/perf/builtin-trace.c | 6 | ||||
-rw-r--r-- | tools/perf/design.txt | 3 | ||||
-rw-r--r-- | tools/perf/util/parse-events.c | 5 | ||||
-rw-r--r-- | tools/perf/util/svghelper.c | 14 | ||||
-rw-r--r-- | tools/perf/util/symbol.c | 3 | ||||
-rw-r--r-- | tools/perf/util/trace-event-parse.c | 17 |
13 files changed, 71 insertions, 32 deletions
diff --git a/tools/perf/Documentation/perf-timechart.txt b/tools/perf/Documentation/perf-timechart.txt index 1c2ed3090cce..a7910099d6fd 100644 --- a/tools/perf/Documentation/perf-timechart.txt +++ b/tools/perf/Documentation/perf-timechart.txt | |||
@@ -31,6 +31,9 @@ OPTIONS | |||
31 | -w:: | 31 | -w:: |
32 | --width=:: | 32 | --width=:: |
33 | Select the width of the SVG file (default: 1000) | 33 | Select the width of the SVG file (default: 1000) |
34 | -p:: | ||
35 | --power-only:: | ||
36 | Only output the CPU power section of the diagram | ||
34 | 37 | ||
35 | 38 | ||
36 | SEE ALSO | 39 | SEE ALSO |
diff --git a/tools/perf/Makefile b/tools/perf/Makefile index b5f1953b6144..742a32eee8fc 100644 --- a/tools/perf/Makefile +++ b/tools/perf/Makefile | |||
@@ -157,11 +157,18 @@ uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not') | |||
157 | uname_P := $(shell sh -c 'uname -p 2>/dev/null || echo not') | 157 | uname_P := $(shell sh -c 'uname -p 2>/dev/null || echo not') |
158 | uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not') | 158 | uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not') |
159 | 159 | ||
160 | # If we're on a 64-bit kernel, use -m64 | 160 | # |
161 | ifndef NO_64BIT | 161 | # Add -m32 for cross-builds: |
162 | ifneq ($(patsubst %64,%,$(uname_M)),$(uname_M)) | 162 | # |
163 | M64 := -m64 | 163 | ifdef NO_64BIT |
164 | endif | 164 | MBITS := -m32 |
165 | else | ||
166 | # | ||
167 | # If we're on a 64-bit kernel, use -m64: | ||
168 | # | ||
169 | ifneq ($(patsubst %64,%,$(uname_M)),$(uname_M)) | ||
170 | MBITS := -m64 | ||
171 | endif | ||
165 | endif | 172 | endif |
166 | 173 | ||
167 | # CFLAGS and LDFLAGS are for the users to override from the command line. | 174 | # CFLAGS and LDFLAGS are for the users to override from the command line. |
@@ -194,7 +201,7 @@ EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wold-style-definition | |||
194 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wstrict-prototypes | 201 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wstrict-prototypes |
195 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wdeclaration-after-statement | 202 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wdeclaration-after-statement |
196 | 203 | ||
197 | CFLAGS = $(M64) -ggdb3 -Wall -Wextra -std=gnu99 -Werror -O6 -fstack-protector-all -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) | 204 | CFLAGS = $(MBITS) -ggdb3 -Wall -Wextra -std=gnu99 -Werror -O6 -fstack-protector-all -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) |
198 | LDFLAGS = -lpthread -lrt -lelf -lm | 205 | LDFLAGS = -lpthread -lrt -lelf -lm |
199 | ALL_CFLAGS = $(CFLAGS) | 206 | ALL_CFLAGS = $(CFLAGS) |
200 | ALL_LDFLAGS = $(LDFLAGS) | 207 | ALL_LDFLAGS = $(LDFLAGS) |
@@ -416,7 +423,7 @@ ifeq ($(uname_S),Darwin) | |||
416 | endif | 423 | endif |
417 | 424 | ||
418 | ifneq ($(shell sh -c "(echo '\#include <libelf.h>'; echo 'int main(void) { Elf * elf = elf_begin(0, ELF_C_READ_MMAP, 0); return (long)elf; }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -o /dev/null $(ALL_LDFLAGS) > /dev/null 2>&1 && echo y"), y) | 425 | ifneq ($(shell sh -c "(echo '\#include <libelf.h>'; echo 'int main(void) { Elf * elf = elf_begin(0, ELF_C_READ_MMAP, 0); return (long)elf; }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -o /dev/null $(ALL_LDFLAGS) > /dev/null 2>&1 && echo y"), y) |
419 | msg := $(error No libelf.h/libelf found, please install libelf-dev/elfutils-libelf-devel); | 426 | msg := $(error No libelf.h/libelf found, please install libelf-dev/elfutils-libelf-devel and glibc-dev[el]); |
420 | endif | 427 | endif |
421 | 428 | ||
422 | ifdef NO_DEMANGLE | 429 | ifdef NO_DEMANGLE |
@@ -728,7 +735,7 @@ $(BUILT_INS): perf$X | |||
728 | common-cmds.h: util/generate-cmdlist.sh command-list.txt | 735 | common-cmds.h: util/generate-cmdlist.sh command-list.txt |
729 | 736 | ||
730 | common-cmds.h: $(wildcard Documentation/perf-*.txt) | 737 | common-cmds.h: $(wildcard Documentation/perf-*.txt) |
731 | $(QUIET_GEN)util/generate-cmdlist.sh > $@+ && mv $@+ $@ | 738 | $(QUIET_GEN). util/generate-cmdlist.sh > $@+ && mv $@+ $@ |
732 | 739 | ||
733 | $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh | 740 | $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh |
734 | $(QUIET_GEN)$(RM) $@ $@+ && \ | 741 | $(QUIET_GEN)$(RM) $@ $@+ && \ |
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index a5a050af8e7d..3eeef339c787 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
@@ -41,6 +41,7 @@ static int raw_samples = 0; | |||
41 | static int system_wide = 0; | 41 | static int system_wide = 0; |
42 | static int profile_cpu = -1; | 42 | static int profile_cpu = -1; |
43 | static pid_t target_pid = -1; | 43 | static pid_t target_pid = -1; |
44 | static pid_t child_pid = -1; | ||
44 | static int inherit = 1; | 45 | static int inherit = 1; |
45 | static int force = 0; | 46 | static int force = 0; |
46 | static int append_file = 0; | 47 | static int append_file = 0; |
@@ -184,6 +185,9 @@ static void sig_handler(int sig) | |||
184 | 185 | ||
185 | static void sig_atexit(void) | 186 | static void sig_atexit(void) |
186 | { | 187 | { |
188 | if (child_pid != -1) | ||
189 | kill(child_pid, SIGTERM); | ||
190 | |||
187 | if (signr == -1) | 191 | if (signr == -1) |
188 | return; | 192 | return; |
189 | 193 | ||
@@ -610,6 +614,8 @@ static int __cmd_record(int argc, const char **argv) | |||
610 | exit(-1); | 614 | exit(-1); |
611 | } | 615 | } |
612 | } | 616 | } |
617 | |||
618 | child_pid = pid; | ||
613 | } | 619 | } |
614 | 620 | ||
615 | if (realtime_prio) { | 621 | if (realtime_prio) { |
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index ea9c15c0cdfe..ce2d5be4f30e 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c | |||
@@ -1287,7 +1287,7 @@ static struct sort_dimension *available_sorts[] = { | |||
1287 | 1287 | ||
1288 | static LIST_HEAD(sort_list); | 1288 | static LIST_HEAD(sort_list); |
1289 | 1289 | ||
1290 | static int sort_dimension__add(char *tok, struct list_head *list) | 1290 | static int sort_dimension__add(const char *tok, struct list_head *list) |
1291 | { | 1291 | { |
1292 | int i; | 1292 | int i; |
1293 | 1293 | ||
@@ -1917,7 +1917,7 @@ static void setup_sorting(void) | |||
1917 | 1917 | ||
1918 | free(str); | 1918 | free(str); |
1919 | 1919 | ||
1920 | sort_dimension__add((char *)"pid", &cmp_pid); | 1920 | sort_dimension__add("pid", &cmp_pid); |
1921 | } | 1921 | } |
1922 | 1922 | ||
1923 | static const char *record_args[] = { | 1923 | static const char *record_args[] = { |
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index e5f6ece65a13..3db31e7bf173 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c | |||
@@ -69,7 +69,8 @@ static int run_idx = 0; | |||
69 | static int run_count = 1; | 69 | static int run_count = 1; |
70 | static int inherit = 1; | 70 | static int inherit = 1; |
71 | static int scale = 1; | 71 | static int scale = 1; |
72 | static int target_pid = -1; | 72 | static pid_t target_pid = -1; |
73 | static pid_t child_pid = -1; | ||
73 | static int null_run = 0; | 74 | static int null_run = 0; |
74 | 75 | ||
75 | static int fd[MAX_NR_CPUS][MAX_COUNTERS]; | 76 | static int fd[MAX_NR_CPUS][MAX_COUNTERS]; |
@@ -285,6 +286,8 @@ static int run_perf_stat(int argc __used, const char **argv) | |||
285 | exit(-1); | 286 | exit(-1); |
286 | } | 287 | } |
287 | 288 | ||
289 | child_pid = pid; | ||
290 | |||
288 | /* | 291 | /* |
289 | * Wait for the child to be ready to exec. | 292 | * Wait for the child to be ready to exec. |
290 | */ | 293 | */ |
@@ -433,6 +436,9 @@ static void skip_signal(int signo) | |||
433 | 436 | ||
434 | static void sig_atexit(void) | 437 | static void sig_atexit(void) |
435 | { | 438 | { |
439 | if (child_pid != -1) | ||
440 | kill(child_pid, SIGTERM); | ||
441 | |||
436 | if (signr == -1) | 442 | if (signr == -1) |
437 | return; | 443 | return; |
438 | 444 | ||
diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 4405681b3134..702d8fe58fbc 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c | |||
@@ -46,6 +46,8 @@ static u64 turbo_frequency; | |||
46 | 46 | ||
47 | static u64 first_time, last_time; | 47 | static u64 first_time, last_time; |
48 | 48 | ||
49 | static int power_only; | ||
50 | |||
49 | 51 | ||
50 | static struct perf_header *header; | 52 | static struct perf_header *header; |
51 | 53 | ||
@@ -547,7 +549,7 @@ static void end_sample_processing(void) | |||
547 | u64 cpu; | 549 | u64 cpu; |
548 | struct power_event *pwr; | 550 | struct power_event *pwr; |
549 | 551 | ||
550 | for (cpu = 0; cpu < numcpus; cpu++) { | 552 | for (cpu = 0; cpu <= numcpus; cpu++) { |
551 | pwr = malloc(sizeof(struct power_event)); | 553 | pwr = malloc(sizeof(struct power_event)); |
552 | if (!pwr) | 554 | if (!pwr) |
553 | return; | 555 | return; |
@@ -871,7 +873,7 @@ static int determine_display_tasks(u64 threshold) | |||
871 | /* no exit marker, task kept running to the end */ | 873 | /* no exit marker, task kept running to the end */ |
872 | if (p->end_time == 0) | 874 | if (p->end_time == 0) |
873 | p->end_time = last_time; | 875 | p->end_time = last_time; |
874 | if (p->total_time >= threshold) | 876 | if (p->total_time >= threshold && !power_only) |
875 | p->display = 1; | 877 | p->display = 1; |
876 | 878 | ||
877 | c = p->all; | 879 | c = p->all; |
@@ -882,7 +884,7 @@ static int determine_display_tasks(u64 threshold) | |||
882 | if (c->start_time == 1) | 884 | if (c->start_time == 1) |
883 | c->start_time = first_time; | 885 | c->start_time = first_time; |
884 | 886 | ||
885 | if (c->total_time >= threshold) { | 887 | if (c->total_time >= threshold && !power_only) { |
886 | c->display = 1; | 888 | c->display = 1; |
887 | count++; | 889 | count++; |
888 | } | 890 | } |
@@ -1134,6 +1136,8 @@ static const struct option options[] = { | |||
1134 | "output file name"), | 1136 | "output file name"), |
1135 | OPT_INTEGER('w', "width", &svg_page_width, | 1137 | OPT_INTEGER('w', "width", &svg_page_width, |
1136 | "page width"), | 1138 | "page width"), |
1139 | OPT_BOOLEAN('p', "power-only", &power_only, | ||
1140 | "output power data only"), | ||
1137 | OPT_END() | 1141 | OPT_END() |
1138 | }; | 1142 | }; |
1139 | 1143 | ||
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 1ca88896eee4..37512e936235 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c | |||
@@ -782,6 +782,7 @@ static const char *skip_symbols[] = { | |||
782 | "exit_idle", | 782 | "exit_idle", |
783 | "mwait_idle", | 783 | "mwait_idle", |
784 | "mwait_idle_with_hints", | 784 | "mwait_idle_with_hints", |
785 | "poll_idle", | ||
785 | "ppc64_runlatch_off", | 786 | "ppc64_runlatch_off", |
786 | "pseries_dedicated_idle_sleep", | 787 | "pseries_dedicated_idle_sleep", |
787 | NULL | 788 | NULL |
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index e9d256e2f47d..0c5e4f72f2ba 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c | |||
@@ -219,10 +219,6 @@ remap: | |||
219 | more: | 219 | more: |
220 | event = (event_t *)(buf + head); | 220 | event = (event_t *)(buf + head); |
221 | 221 | ||
222 | size = event->header.size; | ||
223 | if (!size) | ||
224 | size = 8; | ||
225 | |||
226 | if (head + event->header.size >= page_size * mmap_window) { | 222 | if (head + event->header.size >= page_size * mmap_window) { |
227 | unsigned long shift = page_size * (head / page_size); | 223 | unsigned long shift = page_size * (head / page_size); |
228 | int res; | 224 | int res; |
@@ -237,7 +233,6 @@ more: | |||
237 | 233 | ||
238 | size = event->header.size; | 234 | size = event->header.size; |
239 | 235 | ||
240 | |||
241 | if (!size || process_event(event, offset, head) < 0) { | 236 | if (!size || process_event(event, offset, head) < 0) { |
242 | 237 | ||
243 | /* | 238 | /* |
@@ -290,7 +285,6 @@ int cmd_trace(int argc, const char **argv, const char *prefix __used) | |||
290 | usage_with_options(annotate_usage, options); | 285 | usage_with_options(annotate_usage, options); |
291 | } | 286 | } |
292 | 287 | ||
293 | |||
294 | setup_pager(); | 288 | setup_pager(); |
295 | 289 | ||
296 | return __cmd_trace(); | 290 | return __cmd_trace(); |
diff --git a/tools/perf/design.txt b/tools/perf/design.txt index f1946d107b10..fdd42a824c98 100644 --- a/tools/perf/design.txt +++ b/tools/perf/design.txt | |||
@@ -455,3 +455,6 @@ will need at least this: | |||
455 | 455 | ||
456 | If your architecture does have hardware capabilities, you can override the | 456 | If your architecture does have hardware capabilities, you can override the |
457 | weak stub hw_perf_event_init() to register hardware counters. | 457 | weak stub hw_perf_event_init() to register hardware counters. |
458 | |||
459 | Architectures that have d-cache aliassing issues, such as Sparc and ARM, | ||
460 | should select PERF_USE_VMALLOC in order to avoid these for perf mmap(). | ||
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 87c424de79ee..8cfb48cbbea0 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c | |||
@@ -691,7 +691,10 @@ static void store_event_type(const char *orgname) | |||
691 | FILE *file; | 691 | FILE *file; |
692 | int id; | 692 | int id; |
693 | 693 | ||
694 | sprintf(filename, "/sys/kernel/debug/tracing/events/%s/id", orgname); | 694 | sprintf(filename, "%s/", debugfs_path); |
695 | strncat(filename, orgname, strlen(orgname)); | ||
696 | strcat(filename, "/id"); | ||
697 | |||
695 | c = strchr(filename, ':'); | 698 | c = strchr(filename, ':'); |
696 | if (c) | 699 | if (c) |
697 | *c = '/'; | 700 | *c = '/'; |
diff --git a/tools/perf/util/svghelper.c b/tools/perf/util/svghelper.c index a778fd0f4ae4..856655d8b0b8 100644 --- a/tools/perf/util/svghelper.c +++ b/tools/perf/util/svghelper.c | |||
@@ -28,7 +28,7 @@ static u64 turbo_frequency, max_freq; | |||
28 | 28 | ||
29 | int svg_page_width = 1000; | 29 | int svg_page_width = 1000; |
30 | 30 | ||
31 | #define MIN_TEXT_SIZE 0.001 | 31 | #define MIN_TEXT_SIZE 0.01 |
32 | 32 | ||
33 | static u64 total_height; | 33 | static u64 total_height; |
34 | static FILE *svgfile; | 34 | static FILE *svgfile; |
@@ -217,6 +217,18 @@ static char *cpu_model(void) | |||
217 | } | 217 | } |
218 | fclose(file); | 218 | fclose(file); |
219 | } | 219 | } |
220 | |||
221 | /* CPU type */ | ||
222 | file = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies", "r"); | ||
223 | if (file) { | ||
224 | while (fgets(buf, 255, file)) { | ||
225 | unsigned int freq; | ||
226 | freq = strtoull(buf, NULL, 10); | ||
227 | if (freq > max_freq) | ||
228 | max_freq = freq; | ||
229 | } | ||
230 | fclose(file); | ||
231 | } | ||
220 | return cpu_m; | 232 | return cpu_m; |
221 | } | 233 | } |
222 | 234 | ||
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 559fb06210f5..47ea0609a760 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c | |||
@@ -324,8 +324,7 @@ static inline int elf_sym__is_function(const GElf_Sym *sym) | |||
324 | { | 324 | { |
325 | return elf_sym__type(sym) == STT_FUNC && | 325 | return elf_sym__type(sym) == STT_FUNC && |
326 | sym->st_name != 0 && | 326 | sym->st_name != 0 && |
327 | sym->st_shndx != SHN_UNDEF && | 327 | sym->st_shndx != SHN_UNDEF; |
328 | sym->st_size != 0; | ||
329 | } | 328 | } |
330 | 329 | ||
331 | static inline int elf_sym__is_label(const GElf_Sym *sym) | 330 | static inline int elf_sym__is_label(const GElf_Sym *sym) |
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c index f6a8437141c8..55c9659a56e2 100644 --- a/tools/perf/util/trace-event-parse.c +++ b/tools/perf/util/trace-event-parse.c | |||
@@ -618,7 +618,7 @@ static int test_type(enum event_type type, enum event_type expect) | |||
618 | } | 618 | } |
619 | 619 | ||
620 | static int test_type_token(enum event_type type, char *token, | 620 | static int test_type_token(enum event_type type, char *token, |
621 | enum event_type expect, char *expect_tok) | 621 | enum event_type expect, const char *expect_tok) |
622 | { | 622 | { |
623 | if (type != expect) { | 623 | if (type != expect) { |
624 | die("Error: expected type %d but read %d", | 624 | die("Error: expected type %d but read %d", |
@@ -650,7 +650,7 @@ static int read_expect_type(enum event_type expect, char **tok) | |||
650 | return __read_expect_type(expect, tok, 1); | 650 | return __read_expect_type(expect, tok, 1); |
651 | } | 651 | } |
652 | 652 | ||
653 | static int __read_expected(enum event_type expect, char *str, int newline_ok) | 653 | static int __read_expected(enum event_type expect, const char *str, int newline_ok) |
654 | { | 654 | { |
655 | enum event_type type; | 655 | enum event_type type; |
656 | char *token; | 656 | char *token; |
@@ -668,12 +668,12 @@ static int __read_expected(enum event_type expect, char *str, int newline_ok) | |||
668 | return 0; | 668 | return 0; |
669 | } | 669 | } |
670 | 670 | ||
671 | static int read_expected(enum event_type expect, char *str) | 671 | static int read_expected(enum event_type expect, const char *str) |
672 | { | 672 | { |
673 | return __read_expected(expect, str, 1); | 673 | return __read_expected(expect, str, 1); |
674 | } | 674 | } |
675 | 675 | ||
676 | static int read_expected_item(enum event_type expect, char *str) | 676 | static int read_expected_item(enum event_type expect, const char *str) |
677 | { | 677 | { |
678 | return __read_expected(expect, str, 0); | 678 | return __read_expected(expect, str, 0); |
679 | } | 679 | } |
@@ -1968,10 +1968,11 @@ static const struct flag flags[] = { | |||
1968 | { "NET_TX_SOFTIRQ", 2 }, | 1968 | { "NET_TX_SOFTIRQ", 2 }, |
1969 | { "NET_RX_SOFTIRQ", 3 }, | 1969 | { "NET_RX_SOFTIRQ", 3 }, |
1970 | { "BLOCK_SOFTIRQ", 4 }, | 1970 | { "BLOCK_SOFTIRQ", 4 }, |
1971 | { "TASKLET_SOFTIRQ", 5 }, | 1971 | { "BLOCK_IOPOLL_SOFTIRQ", 5 }, |
1972 | { "SCHED_SOFTIRQ", 6 }, | 1972 | { "TASKLET_SOFTIRQ", 6 }, |
1973 | { "HRTIMER_SOFTIRQ", 7 }, | 1973 | { "SCHED_SOFTIRQ", 7 }, |
1974 | { "RCU_SOFTIRQ", 8 }, | 1974 | { "HRTIMER_SOFTIRQ", 8 }, |
1975 | { "RCU_SOFTIRQ", 9 }, | ||
1975 | 1976 | ||
1976 | { "HRTIMER_NORESTART", 0 }, | 1977 | { "HRTIMER_NORESTART", 0 }, |
1977 | { "HRTIMER_RESTART", 1 }, | 1978 | { "HRTIMER_RESTART", 1 }, |