diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2018-10-25 14:18:06 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2018-10-30 10:46:23 -0400 |
commit | 73d141adcea66de656d0c8336811f2b0bbd9700c (patch) | |
tree | 545c26dade2f2ddcdbd1afc3178ff83b584dbe47 /tools | |
parent | 496fd346b71ffa0ff35623e9ec79df0bad47bd66 (diff) |
perf trace beauty: Beautify mount/umount's 'flags' argument
# trace -e mount mount -o ro -t debugfs nodev /mnt
0.000 ( 1.040 ms): mount/27235 mount(dev_name: 0x5601cc8c64e0, dir_name: 0x5601cc8c6500, type: 0x5601cc8c6480, flags: RDONLY) = 0
# trace -e mount mount -o remount,relatime -t debugfs nodev /mnt
0.000 ( 2.946 ms): mount/27262 mount(dev_name: 0x55f4a73d64e0, dir_name: 0x55f4a73d6500, type: 0x55f4a73d6480, flags: REMOUNT|RELATIME) = 0
# trace -e mount mount -o remount,strictatime -t debugfs nodev /mnt
0.000 ( 2.934 ms): mount/27265 mount(dev_name: 0x5617f71d94e0, dir_name: 0x5617f71d9500, type: 0x5617f71d9480, flags: REMOUNT|STRICTATIME) = 0
# trace -e mount mount -o remount,suid,silent -t debugfs nodev /mnt
0.000 ( 0.049 ms): mount/27273 mount(dev_name: 0x55ad65df24e0, dir_name: 0x55ad65df2500, type: 0x55ad65df2480, flags: REMOUNT|SILENT) = 0
# trace -e mount mount -o remount,rw,sync,lazytime -t debugfs nodev /mnt
0.000 ( 2.684 ms): mount/27281 mount(dev_name: 0x561216055530, dir_name: 0x561216055550, type: 0x561216055510, flags: SYNCHRONOUS|REMOUNT|LAZYTIME) = 0
# trace -e mount mount -o remount,dirsync -t debugfs nodev /mnt
0.000 ( 3.512 ms): mount/27314 mount(dev_name: 0x55c4e7188480, dir_name: 0x55c4e7188530, type: 0x55c4e71884a0, flags: REMOUNT|DIRSYNC, data: 0x55c4e71884e0) = 0
#
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Benjamin Peterson <benjamin@python.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-i5ncao73c0bd02qprgrq6wb9@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/Makefile.perf | 8 | ||||
-rw-r--r-- | tools/perf/builtin-trace.c | 3 | ||||
-rw-r--r-- | tools/perf/trace/beauty/Build | 1 | ||||
-rw-r--r-- | tools/perf/trace/beauty/beauty.h | 6 | ||||
-rw-r--r-- | tools/perf/trace/beauty/mount_flags.c | 43 |
5 files changed, 61 insertions, 0 deletions
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index 2f3bf025e305..a31c5c29d53a 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf | |||
@@ -460,6 +460,12 @@ madvise_behavior_tbl := $(srctree)/tools/perf/trace/beauty/madvise_behavior.sh | |||
460 | $(madvise_behavior_array): $(madvise_hdr_dir)/mman-common.h $(madvise_behavior_tbl) | 460 | $(madvise_behavior_array): $(madvise_hdr_dir)/mman-common.h $(madvise_behavior_tbl) |
461 | $(Q)$(SHELL) '$(madvise_behavior_tbl)' $(madvise_hdr_dir) > $@ | 461 | $(Q)$(SHELL) '$(madvise_behavior_tbl)' $(madvise_hdr_dir) > $@ |
462 | 462 | ||
463 | mount_flags_array := $(beauty_outdir)/mount_flags_array.c | ||
464 | mount_flags_tbl := $(srctree)/tools/perf/trace/beauty/mount_flags.sh | ||
465 | |||
466 | $(mount_flags_array): $(linux_uapi_dir)/fs.h $(mount_flags_tbl) | ||
467 | $(Q)$(SHELL) '$(mount_flags_tbl)' $(linux_uapi_dir) > $@ | ||
468 | |||
463 | prctl_option_array := $(beauty_outdir)/prctl_option_array.c | 469 | prctl_option_array := $(beauty_outdir)/prctl_option_array.c |
464 | prctl_hdr_dir := $(srctree)/tools/include/uapi/linux/ | 470 | prctl_hdr_dir := $(srctree)/tools/include/uapi/linux/ |
465 | prctl_option_tbl := $(srctree)/tools/perf/trace/beauty/prctl_option.sh | 471 | prctl_option_tbl := $(srctree)/tools/perf/trace/beauty/prctl_option.sh |
@@ -577,6 +583,7 @@ prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders $(drm_ioc | |||
577 | $(socket_ipproto_array) \ | 583 | $(socket_ipproto_array) \ |
578 | $(vhost_virtio_ioctl_array) \ | 584 | $(vhost_virtio_ioctl_array) \ |
579 | $(madvise_behavior_array) \ | 585 | $(madvise_behavior_array) \ |
586 | $(mount_flags_array) \ | ||
580 | $(perf_ioctl_array) \ | 587 | $(perf_ioctl_array) \ |
581 | $(prctl_option_array) \ | 588 | $(prctl_option_array) \ |
582 | $(arch_errno_name_array) | 589 | $(arch_errno_name_array) |
@@ -863,6 +870,7 @@ clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clea | |||
863 | $(OUTPUT)tests/llvm-src-{base,kbuild,prologue,relocation}.c \ | 870 | $(OUTPUT)tests/llvm-src-{base,kbuild,prologue,relocation}.c \ |
864 | $(OUTPUT)pmu-events/pmu-events.c \ | 871 | $(OUTPUT)pmu-events/pmu-events.c \ |
865 | $(OUTPUT)$(madvise_behavior_array) \ | 872 | $(OUTPUT)$(madvise_behavior_array) \ |
873 | $(OUTPUT)$(mount_flags_array) \ | ||
866 | $(OUTPUT)$(drm_ioctl_array) \ | 874 | $(OUTPUT)$(drm_ioctl_array) \ |
867 | $(OUTPUT)$(pkey_alloc_access_rights_array) \ | 875 | $(OUTPUT)$(pkey_alloc_access_rights_array) \ |
868 | $(OUTPUT)$(sndrv_ctl_ioctl_array) \ | 876 | $(OUTPUT)$(sndrv_ctl_ioctl_array) \ |
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 14fb63e17de5..76c14c0129fc 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c | |||
@@ -726,6 +726,9 @@ static struct syscall_fmt { | |||
726 | .arg = { [0] = { .scnprintf = SCA_HEX, /* addr */ }, | 726 | .arg = { [0] = { .scnprintf = SCA_HEX, /* addr */ }, |
727 | [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ }, | 727 | [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ }, |
728 | [3] = { .scnprintf = SCA_MMAP_FLAGS, /* flags */ }, }, }, | 728 | [3] = { .scnprintf = SCA_MMAP_FLAGS, /* flags */ }, }, }, |
729 | { .name = "mount", | ||
730 | .arg = { [3] = { .scnprintf = SCA_MOUNT_FLAGS, /* flags */ | ||
731 | .mask_val = SCAMV_MOUNT_FLAGS, /* flags */ }, }, }, | ||
729 | { .name = "mprotect", | 732 | { .name = "mprotect", |
730 | .arg = { [0] = { .scnprintf = SCA_HEX, /* start */ }, | 733 | .arg = { [0] = { .scnprintf = SCA_HEX, /* start */ }, |
731 | [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ }, }, }, | 734 | [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ }, }, }, |
diff --git a/tools/perf/trace/beauty/Build b/tools/perf/trace/beauty/Build index c3b0afd67760..304313073242 100644 --- a/tools/perf/trace/beauty/Build +++ b/tools/perf/trace/beauty/Build | |||
@@ -5,6 +5,7 @@ ifeq ($(SRCARCH),$(filter $(SRCARCH),x86)) | |||
5 | libperf-y += ioctl.o | 5 | libperf-y += ioctl.o |
6 | endif | 6 | endif |
7 | libperf-y += kcmp.o | 7 | libperf-y += kcmp.o |
8 | libperf-y += mount_flags.o | ||
8 | libperf-y += pkey_alloc.o | 9 | libperf-y += pkey_alloc.o |
9 | libperf-y += prctl.o | 10 | libperf-y += prctl.o |
10 | libperf-y += sockaddr.o | 11 | libperf-y += sockaddr.o |
diff --git a/tools/perf/trace/beauty/beauty.h b/tools/perf/trace/beauty/beauty.h index a1806c4f3ccd..039c29039b2c 100644 --- a/tools/perf/trace/beauty/beauty.h +++ b/tools/perf/trace/beauty/beauty.h | |||
@@ -123,6 +123,12 @@ size_t syscall_arg__scnprintf_kcmp_type(char *bf, size_t size, struct syscall_ar | |||
123 | size_t syscall_arg__scnprintf_kcmp_idx(char *bf, size_t size, struct syscall_arg *arg); | 123 | size_t syscall_arg__scnprintf_kcmp_idx(char *bf, size_t size, struct syscall_arg *arg); |
124 | #define SCA_KCMP_IDX syscall_arg__scnprintf_kcmp_idx | 124 | #define SCA_KCMP_IDX syscall_arg__scnprintf_kcmp_idx |
125 | 125 | ||
126 | unsigned long syscall_arg__mask_val_mount_flags(struct syscall_arg *arg, unsigned long flags); | ||
127 | #define SCAMV_MOUNT_FLAGS syscall_arg__mask_val_mount_flags | ||
128 | |||
129 | size_t syscall_arg__scnprintf_mount_flags(char *bf, size_t size, struct syscall_arg *arg); | ||
130 | #define SCA_MOUNT_FLAGS syscall_arg__scnprintf_mount_flags | ||
131 | |||
126 | size_t syscall_arg__scnprintf_pkey_alloc_access_rights(char *bf, size_t size, struct syscall_arg *arg); | 132 | size_t syscall_arg__scnprintf_pkey_alloc_access_rights(char *bf, size_t size, struct syscall_arg *arg); |
127 | #define SCA_PKEY_ALLOC_ACCESS_RIGHTS syscall_arg__scnprintf_pkey_alloc_access_rights | 133 | #define SCA_PKEY_ALLOC_ACCESS_RIGHTS syscall_arg__scnprintf_pkey_alloc_access_rights |
128 | 134 | ||
diff --git a/tools/perf/trace/beauty/mount_flags.c b/tools/perf/trace/beauty/mount_flags.c new file mode 100644 index 000000000000..712935c6620a --- /dev/null +++ b/tools/perf/trace/beauty/mount_flags.c | |||
@@ -0,0 +1,43 @@ | |||
1 | // SPDX-License-Identifier: LGPL-2.1 | ||
2 | /* | ||
3 | * trace/beauty/mount_flags.c | ||
4 | * | ||
5 | * Copyright (C) 2018, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com> | ||
6 | */ | ||
7 | |||
8 | #include "trace/beauty/beauty.h" | ||
9 | #include <linux/compiler.h> | ||
10 | #include <linux/kernel.h> | ||
11 | #include <linux/log2.h> | ||
12 | #include <sys/mount.h> | ||
13 | |||
14 | static size_t mount__scnprintf_flags(unsigned long flags, char *bf, size_t size) | ||
15 | { | ||
16 | #include "trace/beauty/generated/mount_flags_array.c" | ||
17 | static DEFINE_STRARRAY(mount_flags); | ||
18 | |||
19 | return strarray__scnprintf_flags(&strarray__mount_flags, bf, size, flags); | ||
20 | } | ||
21 | |||
22 | unsigned long syscall_arg__mask_val_mount_flags(struct syscall_arg *arg __maybe_unused, unsigned long flags) | ||
23 | { | ||
24 | // do_mount in fs/namespace.c: | ||
25 | /* | ||
26 | * Pre-0.97 versions of mount() didn't have a flags word. When the | ||
27 | * flags word was introduced its top half was required to have the | ||
28 | * magic value 0xC0ED, and this remained so until 2.4.0-test9. | ||
29 | * Therefore, if this magic number is present, it carries no | ||
30 | * information and must be discarded. | ||
31 | */ | ||
32 | if ((flags & MS_MGC_MSK) == MS_MGC_VAL) | ||
33 | flags &= ~MS_MGC_MSK; | ||
34 | |||
35 | return flags; | ||
36 | } | ||
37 | |||
38 | size_t syscall_arg__scnprintf_mount_flags(char *bf, size_t size, struct syscall_arg *arg) | ||
39 | { | ||
40 | unsigned long flags = arg->val; | ||
41 | |||
42 | return mount__scnprintf_flags(flags, bf, size); | ||
43 | } | ||