From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 43F8DC433EF for ; Fri, 27 May 2022 11:10:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238488AbiE0LKd (ORCPT ); Fri, 27 May 2022 07:10:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57422 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351212AbiE0LK0 (ORCPT ); Fri, 27 May 2022 07:10:26 -0400 Received: from mail-pg1-x52c.google.com (mail-pg1-x52c.google.com [IPv6:2607:f8b0:4864:20::52c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DE5C0106559 for ; Fri, 27 May 2022 04:10:24 -0700 (PDT) Received: by mail-pg1-x52c.google.com with SMTP id g184so3703366pgc.1 for ; Fri, 27 May 2022 04:10:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=wIHYvm2K7nibOvcUritOjONU5u9cYsOry1JPgOzcrJ4=; b=7vQ+6n4itBAKx3GAx1doP/A1+RLQntp+PUZ65lR80ZQfMCSy0UJjDAgrppd9EVdmAd aI+COuNHHfFwn7enHezaf+J8+hTQfQCngk+6v0cPDOutpOCpAZla3EriqO+qh0fgyvbT TqkVKnA5MMPTLMyRdJxMInnGZVKeSsdGDiZ9UIbpb7jOJcbe2Mqt537osw9XkVF+CCEr ojNEDAWJowtD4firQNU3MzFjp/59H/ZshUA7YCqz+6/lKfKLJzKxh6iIx6+EP2059DO9 QF1uG5ChZz4gqMtqjp3IkIroitSTp2kX1ObNDDzt2UZe4djWqnPGKGK2O1Tu7tTgqH1x g0jA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=wIHYvm2K7nibOvcUritOjONU5u9cYsOry1JPgOzcrJ4=; b=41Dlnu03g0fbzX6wEk9QqLrPniWV4WcGiBtSq+JVvRCv0IBhe5wmf8vK/ZgcWJ+vsi /q0hp59NiLNaOD3z60AIj0ddGKF0HR4Uc8TSHndNznJ+MSFPrv1SpKAIYICZfJhNoYt9 WUrCF23ycBIcQBOog9DqUqM27wwZZnfKFRFmyZbNq224sv+VuY74UAx3wVq8IFfVDuEs tfPJ41Qb+6FytLGtrcIkojkqpDp97qKVcEJQb2k3QJ/EzeKtqBOSlF30z8kn49Tn84+f TmITyfQyB01yxj3plQlMDKOdmI7oKbsH9Ps9fAGqCJkWZGT4RzVY9eK4ZiezWjX3ViNv gOEA== X-Gm-Message-State: AOAM533oMD0DfpHfNMkXbCJ/thJfaR6x5ypFGVsFCnVOxXv9tnB9sKpr ZegX12jfUCqq5U5WeIz8aKlI2Q== X-Google-Smtp-Source: ABdhPJyUhg9mYKRTWaeNWG1metTMJhlddg/09vUDN3DGgAQwHufJJrQn/XrtDBVi9TZypY7cy/d9Lw== X-Received: by 2002:a65:6093:0:b0:373:9c75:19ec with SMTP id t19-20020a656093000000b003739c7519ecmr37546462pgu.539.1653649824394; Fri, 27 May 2022 04:10:24 -0700 (PDT) Received: from C02GF2LXMD6R.bytedance.net ([139.177.225.246]) by smtp.gmail.com with ESMTPSA id w9-20020aa78589000000b0051827128aeasm3152176pfn.131.2022.05.27.04.10.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 May 2022 04:10:24 -0700 (PDT) From: Zhang Yuchen To: akpm@linux-foundation.org, david@redhat.com, peterz@infradead.org, mingo@redhat.com, ast@kernel.org Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-s390@vger.kernel.org, linux-api@vger.kernel.org, fam.zheng@bytedance.com, Zhang Yuchen Subject: [PATCH] procfs: add syscall statistics Date: Fri, 27 May 2022 19:09:59 +0800 Message-Id: <20220527110959.54559-1-zhangyuchen.lcr@bytedance.com> X-Mailer: git-send-email 2.32.1 (Apple Git-133) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add /proc/syscalls to display percpu syscall count. We need a less resource-intensive way to count syscall per cpu for system problem location. There is a similar utility syscount in the BCC project, but syscount has a high performance cost. The following is a comparison on the same machine, using UnixBench System Call Overhead: ┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━┓ ┃ Change ┃ Unixbench Score ┃ Loss ┃ ┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━┩ │ no change │ 1072.6 │ --- │ │ syscall count │ 982.5 │ 8.40% │ │ bpf syscount │ 614.2 │ 42.74% │ └───────────────┴─────────────────┴────────┘ UnixBench System Call Use sys_gettid to test, this system call only reads one variable, so the performance penalty seems large. When tested with fork, the test scores were almost the same. So the conclusion is that it does not have a significant impact on system call performance. This function depends on CONFIG_FTRACE_SYSCALLS because the system call number is stored in syscall_metadata. Signed-off-by: Zhang Yuchen --- Documentation/filesystems/proc.rst | 28 +++++++++ arch/arm64/include/asm/syscall_wrapper.h | 2 +- arch/s390/include/asm/syscall_wrapper.h | 4 +- arch/x86/include/asm/syscall_wrapper.h | 2 +- fs/proc/Kconfig | 7 +++ fs/proc/Makefile | 1 + fs/proc/syscall.c | 79 ++++++++++++++++++++++++ include/linux/syscalls.h | 51 +++++++++++++-- 8 files changed, 165 insertions(+), 9 deletions(-) create mode 100644 fs/proc/syscall.c diff --git a/Documentation/filesystems/proc.rst b/Documentation/filesystems/proc.rst index 1bc91fb8c321..80394a98a192 100644 --- a/Documentation/filesystems/proc.rst +++ b/Documentation/filesystems/proc.rst @@ -686,6 +686,7 @@ files are there, and which are missing. fs File system parameters, currently nfs/exports (2.4) ide Directory containing info about the IDE subsystem interrupts Interrupt usage + syscalls Syscall count for each cpu iomem Memory map (2.4) ioports I/O port usage irq Masks for irq to cpu affinity (2.4)(smp?) @@ -1225,6 +1226,33 @@ Provides counts of softirq handlers serviced since boot time, for each CPU. HRTIMER: 0 0 0 0 RCU: 1678 1769 2178 2250 +syscalls +~~~~~~~~ + +Provides counts of syscall since boot time, for each cpu. + +:: + + > cat /proc/syscalls + CPU0 CPU1 CPU2 CPU3 + 0: 3743 3099 3770 3242 sys_read + 1: 222 559 822 522 sys_write + 2: 0 0 0 0 sys_open + 3: 6481 18754 12077 7349 sys_close + 4: 11362 11120 11343 10665 sys_newstat + 5: 5224 13880 8578 5971 sys_newfstat + 6: 1228 1269 1459 1508 sys_newlstat + 7: 90 43 64 67 sys_poll + 8: 1635 1000 2071 1161 sys_lseek + .... omit the middle line .... + 441: 0 0 0 0 sys_epoll_pwait2 + 442: 0 0 0 0 sys_mount_setattr + 443: 0 0 0 0 sys_quotactl_fd + 447: 0 0 0 0 sys_memfd_secret + 448: 0 0 0 0 sys_process_mrelease + 449: 0 0 0 0 sys_futex_waitv + 450: 0 0 0 0 sys_set_mempolicy_home_node + 1.3 Networking info in /proc/net -------------------------------- diff --git a/arch/arm64/include/asm/syscall_wrapper.h b/arch/arm64/include/asm/syscall_wrapper.h index b383b4802a7b..d9ec21df4c44 100644 --- a/arch/arm64/include/asm/syscall_wrapper.h +++ b/arch/arm64/include/asm/syscall_wrapper.h @@ -66,7 +66,7 @@ struct pt_regs; } \ static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) -#define SYSCALL_DEFINE0(sname) \ +#define __SYSCALL_DEFINE0(sname) \ SYSCALL_METADATA(_##sname, 0); \ asmlinkage long __arm64_sys_##sname(const struct pt_regs *__unused); \ ALLOW_ERROR_INJECTION(__arm64_sys_##sname, ERRNO); \ diff --git a/arch/s390/include/asm/syscall_wrapper.h b/arch/s390/include/asm/syscall_wrapper.h index fde7e6b1df48..f8d7d9010de2 100644 --- a/arch/s390/include/asm/syscall_wrapper.h +++ b/arch/s390/include/asm/syscall_wrapper.h @@ -77,7 +77,7 @@ ALLOW_ERROR_INJECTION(__s390_compat_sys_##sname, ERRNO); \ long __s390_compat_sys_##sname(void) -#define SYSCALL_DEFINE0(sname) \ +#define __SYSCALL_DEFINE0(sname) \ SYSCALL_METADATA(_##sname, 0); \ long __s390x_sys_##sname(void); \ ALLOW_ERROR_INJECTION(__s390x_sys_##sname, ERRNO); \ @@ -128,7 +128,7 @@ #define __S390_SYS_STUBx(x, fullname, name, ...) -#define SYSCALL_DEFINE0(sname) \ +#define __SYSCALL_DEFINE0(sname) \ SYSCALL_METADATA(_##sname, 0); \ long __s390x_sys_##sname(void); \ ALLOW_ERROR_INJECTION(__s390x_sys_##sname, ERRNO); \ diff --git a/arch/x86/include/asm/syscall_wrapper.h b/arch/x86/include/asm/syscall_wrapper.h index 59358d1bf880..1f16436c13bd 100644 --- a/arch/x86/include/asm/syscall_wrapper.h +++ b/arch/x86/include/asm/syscall_wrapper.h @@ -246,7 +246,7 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs); * SYSCALL_DEFINEx() -- which is essential for the COND_SYSCALL() and SYS_NI() * macros to work correctly. */ -#define SYSCALL_DEFINE0(sname) \ +#define __SYSCALL_DEFINE0(sname) \ SYSCALL_METADATA(_##sname, 0); \ static long __do_sys_##sname(const struct pt_regs *__unused); \ __X64_SYS_STUB0(sname) \ diff --git a/fs/proc/Kconfig b/fs/proc/Kconfig index c930001056f9..9e5fa75ebd2a 100644 --- a/fs/proc/Kconfig +++ b/fs/proc/Kconfig @@ -100,6 +100,13 @@ config PROC_CHILDREN Say Y if you are running any user-space software which takes benefit from this interface. For example, rkt is such a piece of software. +config PROC_SYSCALLS + bool "Include /proc/syscalls file" if EXPERT + depends on PROC_FS && FTRACE_SYSCALLS + default n + help + Provides a file that shows the number of syscall on each cpu. + config PROC_PID_ARCH_STATUS def_bool n depends on PROC_FS diff --git a/fs/proc/Makefile b/fs/proc/Makefile index bd08616ed8ba..f381a7aa90ae 100644 --- a/fs/proc/Makefile +++ b/fs/proc/Makefile @@ -31,6 +31,7 @@ proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o proc-$(CONFIG_NET) += proc_net.o proc-$(CONFIG_PROC_KCORE) += kcore.o proc-$(CONFIG_PROC_VMCORE) += vmcore.o +proc-$(CONFIG_PROC_SYSCALLS) += syscall.o proc-$(CONFIG_PRINTK) += kmsg.o proc-$(CONFIG_PROC_PAGE_MONITOR) += page.o proc-$(CONFIG_BOOT_CONFIG) += bootconfig.o diff --git a/fs/proc/syscall.c b/fs/proc/syscall.c new file mode 100644 index 000000000000..88196b16f430 --- /dev/null +++ b/fs/proc/syscall.c @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include +#include +#include + +#include + +DEFINE_PER_CPU(u64 [NR_syscalls], __per_cpu_syscall_count); + +extern const char *get_syscall_name(int syscall_nr); + +int show_syscalls(struct seq_file *p, void *v) +{ + int i = *(loff_t *)v, j; + static int prec; + const char *syscall_name = get_syscall_name(i); + + if (i > NR_syscalls) + return 0; + + /* print header and calculate the width of the first column */ + if (i == 0) { + for (prec = 3, j = 1000; prec < 10 && j <= NR_syscalls; ++prec) + j *= 10; + seq_printf(p, "%*s", prec + 8, ""); + for_each_online_cpu(j) + seq_printf(p, "CPU%-8d", j); + seq_putc(p, '\n'); + } + + if (syscall_name == NULL) + return 0; + + seq_printf(p, "%*d: ", prec, i); + for_each_online_cpu(j) + seq_printf(p, "%10llu ", + per_cpu(__per_cpu_syscall_count, j)[i]); + seq_printf(p, " %s", syscall_name); + seq_putc(p, '\n'); + + return 0; +} + +/* + * /proc/syscalls + */ +static void *int_seq_start(struct seq_file *f, loff_t *pos) +{ + return (*pos <= NR_syscalls) ? pos : NULL; +} + +static void *int_seq_next(struct seq_file *f, void *v, loff_t *pos) +{ + (*pos)++; + if (*pos > NR_syscalls) + return NULL; + return pos; +} + +static void int_seq_stop(struct seq_file *f, void *v) +{ + /* Nothing to do */ +} + +static const struct seq_operations int_seq_ops = { + .start = int_seq_start, + .next = int_seq_next, + .stop = int_seq_stop, + .show = show_syscalls +}; + +static int __init proc_syscall_init(void) +{ + proc_create_seq("syscalls", 0, NULL, &int_seq_ops); + return 0; +} + +fs_initcall(proc_syscall_init); diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index a34b0f9a9972..a3d50b8d39d8 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -86,6 +86,7 @@ enum landlock_rule_type; #include #include #include +#include #ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER /* @@ -206,8 +207,8 @@ static inline int is_syscall_trace_event(struct trace_event_call *tp_event) } #endif -#ifndef SYSCALL_DEFINE0 -#define SYSCALL_DEFINE0(sname) \ +#ifndef __SYSCALL_DEFINE0 +#define __SYSCALL_DEFINE0(sname) \ SYSCALL_METADATA(_##sname, 0); \ asmlinkage long sys_##sname(void); \ ALLOW_ERROR_INJECTION(sys_##sname, ERRNO); \ @@ -223,9 +224,49 @@ static inline int is_syscall_trace_event(struct trace_event_call *tp_event) #define SYSCALL_DEFINE_MAXARGS 6 -#define SYSCALL_DEFINEx(x, sname, ...) \ - SYSCALL_METADATA(sname, x, __VA_ARGS__) \ - __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) +#ifdef CONFIG_PROC_SYSCALLS +DECLARE_PER_CPU(u64[], __per_cpu_syscall_count); + +#define SYSCALL_COUNT_DECLAREx(sname, x, ...) \ + static inline long __count_sys##sname(__MAP(x, __SC_DECL, __VA_ARGS__)); + +#define __SYSCALL_COUNT(syscall_nr) \ + this_cpu_inc(__per_cpu_syscall_count[(syscall_nr)]) + +#define SYSCALL_COUNT_FUNCx(sname, x, ...) \ + { \ + __SYSCALL_COUNT(__syscall_meta_##sname.syscall_nr); \ + return __count_sys##sname(__MAP(x, __SC_CAST, __VA_ARGS__)); \ + } \ + static inline long __count_sys##sname(__MAP(x, __SC_DECL, __VA_ARGS__)) + +#define SYSCALL_COUNT_DECLARE0(sname) \ + static inline long __count_sys_##sname(void); + +#define SYSCALL_COUNT_FUNC0(sname) \ + { \ + __SYSCALL_COUNT(__syscall_meta__##sname.syscall_nr); \ + return __count_sys_##sname(); \ + } \ + static inline long __count_sys_##sname(void) + +#else +#define SYSCALL_COUNT_DECLAREx(sname, x, ...) +#define SYSCALL_COUNT_FUNCx(sname, x, ...) +#define SYSCALL_COUNT_DECLARE0(sname) +#define SYSCALL_COUNT_FUNC0(sname) +#endif + +#define SYSCALL_DEFINEx(x, sname, ...) \ + SYSCALL_METADATA(sname, x, __VA_ARGS__) \ + SYSCALL_COUNT_DECLAREx(sname, x, __VA_ARGS__) \ + __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) \ + SYSCALL_COUNT_FUNCx(sname, x, __VA_ARGS__) + +#define SYSCALL_DEFINE0(sname) \ + SYSCALL_COUNT_DECLARE0(sname) \ + __SYSCALL_DEFINE0(sname) \ + SYSCALL_COUNT_FUNC0(sname) #define __PROTECT(...) asmlinkage_protect(__VA_ARGS__) -- 2.30.2 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C2A93C433F5 for ; Fri, 27 May 2022 11:12:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=YwvOHaXKUbk1oD/rrYLX2MBAEGvs8Ird2KitRbbUiBY=; b=ZWQEO5ALaeQMiB 5L+n6rxNqmpw2LFtYmeMEjrvX1E57Yn39qMlj3a1tMj8cqq4D97aZ5IJQDrSR0GcMUDhrDFQRRnW9 fd91RZZtN3WMtj5YTXnvwK1gsx/TqbtW+5jiBBWaUwIlYO0rYRndW9L2tvHRpYHmZtgqXj7opeupj 0sxv6eh+NwcUUk/MBUw33acnXF/qc3xwr4qCt4X/DeKSHFzF4LdM4Qpbf8b4SePwjBjEreuyE+MhH zVPoSK5ughWiQZYNvWOKzAHgJ8PL4evZNkWuKmZmLFss0D21iW8nX4kHFy3P3TefoR73PjUol8wI4 ghvuosnqXDdCMpxy9cjA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nuXrR-00HT2W-S1; Fri, 27 May 2022 11:10:29 +0000 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nuXrO-00HT0f-6N for linux-arm-kernel@lists.infradead.org; Fri, 27 May 2022 11:10:28 +0000 Received: by mail-pf1-x42c.google.com with SMTP id y189so4049868pfy.10 for ; Fri, 27 May 2022 04:10:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=wIHYvm2K7nibOvcUritOjONU5u9cYsOry1JPgOzcrJ4=; b=7vQ+6n4itBAKx3GAx1doP/A1+RLQntp+PUZ65lR80ZQfMCSy0UJjDAgrppd9EVdmAd aI+COuNHHfFwn7enHezaf+J8+hTQfQCngk+6v0cPDOutpOCpAZla3EriqO+qh0fgyvbT TqkVKnA5MMPTLMyRdJxMInnGZVKeSsdGDiZ9UIbpb7jOJcbe2Mqt537osw9XkVF+CCEr ojNEDAWJowtD4firQNU3MzFjp/59H/ZshUA7YCqz+6/lKfKLJzKxh6iIx6+EP2059DO9 QF1uG5ChZz4gqMtqjp3IkIroitSTp2kX1ObNDDzt2UZe4djWqnPGKGK2O1Tu7tTgqH1x g0jA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=wIHYvm2K7nibOvcUritOjONU5u9cYsOry1JPgOzcrJ4=; b=PGZptoLX0X2bhxhMlZWT52fJT6hT7YxDGjV2VlYH9E5czNFJoH3vtix568DakWoZ4G j2tihYwNOPZ6S1yyJ+y7yTopgE+/8GmYzE3tNItmjhs+0Babkxh3wbJeAycwKT3gCOK5 2RcFVxcmsfKNScvY5ivz2gcARDzCtvl3/PPMjN/Gtn1xkcj4UpLrLzhi8+hhvEQBWPMR T0jU3XBJym1YqzPBHnAZUWScjWPtz+0+QcGR5PiSym4lWz7ic6cX1HSzk5BjKqotHUdF Pw8afJnIc49OueqAgZlvqZe9e092hRSHaGzIh2mN7NPbLVlmbHlJZbfwOff6A4cQRsC6 jDgQ== X-Gm-Message-State: AOAM5309mA/912M53sOwDkrKkNyuB7dGVCzSGZ1zQpZ7ml9aQRCkGWiy 2Xgw3gedPaJGL1UJ2zLC0bkkCDoxI+zANMUe X-Google-Smtp-Source: ABdhPJyUhg9mYKRTWaeNWG1metTMJhlddg/09vUDN3DGgAQwHufJJrQn/XrtDBVi9TZypY7cy/d9Lw== X-Received: by 2002:a65:6093:0:b0:373:9c75:19ec with SMTP id t19-20020a656093000000b003739c7519ecmr37546462pgu.539.1653649824394; Fri, 27 May 2022 04:10:24 -0700 (PDT) Received: from C02GF2LXMD6R.bytedance.net ([139.177.225.246]) by smtp.gmail.com with ESMTPSA id w9-20020aa78589000000b0051827128aeasm3152176pfn.131.2022.05.27.04.10.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 May 2022 04:10:24 -0700 (PDT) From: Zhang Yuchen To: akpm@linux-foundation.org, david@redhat.com, peterz@infradead.org, mingo@redhat.com, ast@kernel.org Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-s390@vger.kernel.org, linux-api@vger.kernel.org, fam.zheng@bytedance.com, Zhang Yuchen Subject: [PATCH] procfs: add syscall statistics Date: Fri, 27 May 2022 19:09:59 +0800 Message-Id: <20220527110959.54559-1-zhangyuchen.lcr@bytedance.com> X-Mailer: git-send-email 2.32.1 (Apple Git-133) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220527_041026_506690_306D5964 X-CRM114-Status: GOOD ( 27.32 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org QWRkIC9wcm9jL3N5c2NhbGxzIHRvIGRpc3BsYXkgcGVyY3B1IHN5c2NhbGwgY291bnQuCgpXZSBu ZWVkIGEgbGVzcyByZXNvdXJjZS1pbnRlbnNpdmUgd2F5IHRvIGNvdW50IHN5c2NhbGwgcGVyIGNw dQpmb3Igc3lzdGVtIHByb2JsZW0gbG9jYXRpb24uCgpUaGVyZSBpcyBhIHNpbWlsYXIgdXRpbGl0 eSBzeXNjb3VudCBpbiB0aGUgQkNDIHByb2plY3QsIGJ1dCBzeXNjb3VudApoYXMgYSBoaWdoIHBl cmZvcm1hbmNlIGNvc3QuCgpUaGUgZm9sbG93aW5nIGlzIGEgY29tcGFyaXNvbiBvbiB0aGUgc2Ft ZSBtYWNoaW5lLCB1c2luZyBVbml4QmVuY2gKU3lzdGVtIENhbGwgT3ZlcmhlYWQ6CgogICAg4pSP 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSz4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSz4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSTCiAgICDilIMgQ2hhbmdlICAgICAgICDilIMgVW5peGJlbmNoIFNjb3Jl IOKUgyBMb3NzICAg4pSDCiAgICDilKHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilYfilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilYfilIHilIHilIHilIHilIHilIHilIHilIHilKkKICAgIOKUgiBubyBjaGFuZ2Ug ICAgIOKUgiAxMDcyLjYgICAgICAgICAg4pSCIC0tLSAgICDilIIKICAgIOKUgiBzeXNjYWxsIGNv dW50IOKUgiA5ODIuNSAgICAgICAgICAg4pSCIDguNDAlICDilIIKICAgIOKUgiBicGYgc3lzY291 bnQgIOKUgiA2MTQuMiAgICAgICAgICAg4pSCIDQyLjc0JSDilIIKICAgIOKUlOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUmAoKVW5peEJlbmNoIFN5c3RlbSBDYWxsIFVzZSBzeXNfZ2V0dGlkIHRvIHRlc3QsIHRoaXMg c3lzdGVtIGNhbGwgb25seSByZWFkcwpvbmUgdmFyaWFibGUsIHNvIHRoZSBwZXJmb3JtYW5jZSBw ZW5hbHR5IHNlZW1zIGxhcmdlLiBXaGVuIHRlc3RlZCB3aXRoCmZvcmssIHRoZSB0ZXN0IHNjb3Jl cyB3ZXJlIGFsbW9zdCB0aGUgc2FtZS4KClNvIHRoZSBjb25jbHVzaW9uIGlzIHRoYXQgaXQgZG9l cyBub3QgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiBzeXN0ZW0KY2FsbCBwZXJmb3JtYW5j ZS4KClRoaXMgZnVuY3Rpb24gZGVwZW5kcyBvbiBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGJlY2F1 c2UgdGhlIHN5c3RlbSBjYWxsCm51bWJlciBpcyBzdG9yZWQgaW4gc3lzY2FsbF9tZXRhZGF0YS4K ClNpZ25lZC1vZmYtYnk6IFpoYW5nIFl1Y2hlbiA8emhhbmd5dWNoZW4ubGNyQGJ5dGVkYW5jZS5j b20+Ci0tLQogRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCAgICAgICB8IDI4ICsr KysrKysrKwogYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaCB8ICAyICst CiBhcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmggIHwgIDQgKy0KIGFyY2gv eDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oICAgfCAgMiArLQogZnMvcHJvYy9LY29u ZmlnICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3ICsrKwogZnMvcHJvYy9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIGZzL3Byb2Mvc3lzY2FsbC5jICAgICAgICAg ICAgICAgICAgICAgICAgfCA3OSArKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGlu dXgvc3lzY2FsbHMuaCAgICAgICAgICAgICAgICAgfCA1MSArKysrKysrKysrKysrLS0KIDggZmls ZXMgY2hhbmdlZCwgMTY1IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZnMvcHJvYy9zeXNjYWxsLmMKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Zp bGVzeXN0ZW1zL3Byb2MucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdApp bmRleCAxYmM5MWZiOGMzMjEuLjgwMzk0YTk4YTE5MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlv bi9maWxlc3lzdGVtcy9wcm9jLnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3By b2MucnN0CkBAIC02ODYsNiArNjg2LDcgQEAgZmlsZXMgYXJlIHRoZXJlLCBhbmQgd2hpY2ggYXJl IG1pc3NpbmcuCiAgZnMgCSAgICAgIEZpbGUgc3lzdGVtIHBhcmFtZXRlcnMsIGN1cnJlbnRseSBu ZnMvZXhwb3J0cwkoMi40KQogIGlkZSAgICAgICAgICBEaXJlY3RvcnkgY29udGFpbmluZyBpbmZv IGFib3V0IHRoZSBJREUgc3Vic3lzdGVtCiAgaW50ZXJydXB0cyAgIEludGVycnVwdCB1c2FnZQor IHN5c2NhbGxzICAgICBTeXNjYWxsIGNvdW50IGZvciBlYWNoIGNwdQogIGlvbWVtIAkgICAgICBN ZW1vcnkgbWFwCQkJCQkoMi40KQogIGlvcG9ydHMgICAgICBJL08gcG9ydCB1c2FnZQogIGlycSAJ ICAgICAgTWFza3MgZm9yIGlycSB0byBjcHUgYWZmaW5pdHkJCQkoMi40KShzbXA/KQpAQCAtMTIy NSw2ICsxMjI2LDMzIEBAIFByb3ZpZGVzIGNvdW50cyBvZiBzb2Z0aXJxIGhhbmRsZXJzIHNlcnZp Y2VkIHNpbmNlIGJvb3QgdGltZSwgZm9yIGVhY2ggQ1BVLgogICAgIEhSVElNRVI6ICAgICAgICAg MCAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgMAogCVJDVTogICAgICAxNjc4ICAgICAg IDE3NjkgICAgICAgMjE3OCAgICAgICAyMjUwCiAKK3N5c2NhbGxzCit+fn5+fn5+fgorCitQcm92 aWRlcyBjb3VudHMgb2Ygc3lzY2FsbCBzaW5jZSBib290IHRpbWUsIGZvciBlYWNoIGNwdS4KKwor OjoKKworICAgID4gY2F0IC9wcm9jL3N5c2NhbGxzCisgICAgICAgICAgICAgICBDUFUwICAgICAg IENQVTEgICAgICAgQ1BVMiAgICAgICBDUFUzCisgICAgICAwOiAgICAgICAzNzQzICAgICAgIDMw OTkgICAgICAgMzc3MCAgICAgICAzMjQyICAgc3lzX3JlYWQKKyAgICAgIDE6ICAgICAgICAyMjIg ICAgICAgIDU1OSAgICAgICAgODIyICAgICAgICA1MjIgICBzeXNfd3JpdGUKKyAgICAgIDI6ICAg ICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICAwICAgICAgICAgIDAgICBzeXNfb3BlbgorICAg ICAgMzogICAgICAgNjQ4MSAgICAgIDE4NzU0ICAgICAgMTIwNzcgICAgICAgNzM0OSAgIHN5c19j bG9zZQorICAgICAgNDogICAgICAxMTM2MiAgICAgIDExMTIwICAgICAgMTEzNDMgICAgICAxMDY2 NSAgIHN5c19uZXdzdGF0CisgICAgICA1OiAgICAgICA1MjI0ICAgICAgMTM4ODAgICAgICAgODU3 OCAgICAgICA1OTcxICAgc3lzX25ld2ZzdGF0CisgICAgICA2OiAgICAgICAxMjI4ICAgICAgIDEy NjkgICAgICAgMTQ1OSAgICAgICAxNTA4ICAgc3lzX25ld2xzdGF0CisgICAgICA3OiAgICAgICAg IDkwICAgICAgICAgNDMgICAgICAgICA2NCAgICAgICAgIDY3ICAgc3lzX3BvbGwKKyAgICAgIDg6 ICAgICAgIDE2MzUgICAgICAgMTAwMCAgICAgICAyMDcxICAgICAgIDExNjEgICBzeXNfbHNlZWsK KyAgICAuLi4uIG9taXQgdGhlIG1pZGRsZSBsaW5lIC4uLi4KKyAgICA0NDE6ICAgICAgICAgIDAg ICAgICAgICAgMCAgICAgICAgICAwICAgICAgICAgIDAgICBzeXNfZXBvbGxfcHdhaXQyCisgICAg NDQyOiAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICAwICAgc3lzX21v dW50X3NldGF0dHIKKyAgICA0NDM6ICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICAwICAg ICAgICAgIDAgICBzeXNfcXVvdGFjdGxfZmQKKyAgICA0NDc6ICAgICAgICAgIDAgICAgICAgICAg MCAgICAgICAgICAwICAgICAgICAgIDAgICBzeXNfbWVtZmRfc2VjcmV0CisgICAgNDQ4OiAgICAg ICAgICAwICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICAwICAgc3lzX3Byb2Nlc3NfbXJl bGVhc2UKKyAgICA0NDk6ICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICAwICAgICAgICAg IDAgICBzeXNfZnV0ZXhfd2FpdHYKKyAgICA0NTA6ICAgICAgICAgIDAgICAgICAgICAgMCAgICAg ICAgICAwICAgICAgICAgIDAgICBzeXNfc2V0X21lbXBvbGljeV9ob21lX25vZGUKKwogMS4zIE5l dHdvcmtpbmcgaW5mbyBpbiAvcHJvYy9uZXQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVy LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oCmluZGV4IGIzODNi NDgwMmE3Yi4uZDllYzIxZGY0YzQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNt L3N5c2NhbGxfd3JhcHBlci5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbF93 cmFwcGVyLmgKQEAgLTY2LDcgKzY2LDcgQEAgc3RydWN0IHB0X3JlZ3M7CiAJfQkJCQkJCQkJCVwK IAlzdGF0aWMgaW5saW5lIGxvbmcgX19kb19zeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFQ0wsX19W QV9BUkdTX18pKQogCi0jZGVmaW5lIFNZU0NBTExfREVGSU5FMChzbmFtZSkJCQkJCQkJXAorI2Rl ZmluZSBfX1NZU0NBTExfREVGSU5FMChzbmFtZSkJCQkJCQkJXAogCVNZU0NBTExfTUVUQURBVEEo XyMjc25hbWUsIDApOwkJCQkJCVwKIAlhc21saW5rYWdlIGxvbmcgX19hcm02NF9zeXNfIyNzbmFt ZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqX191bnVzZWQpOwlcCiAJQUxMT1dfRVJST1JfSU5KRUNU SU9OKF9fYXJtNjRfc3lzXyMjc25hbWUsIEVSUk5PKTsJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3Mz OTAvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20v c3lzY2FsbF93cmFwcGVyLmgKaW5kZXggZmRlN2U2YjFkZjQ4Li5mOGQ3ZDkwMTBkZTIgMTAwNjQ0 Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaAorKysgYi9hcmNo L3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgKQEAgLTc3LDcgKzc3LDcgQEAKIAlB TExPV19FUlJPUl9JTkpFQ1RJT04oX19zMzkwX2NvbXBhdF9zeXNfIyNzbmFtZSwgRVJSTk8pOwlc CiAJbG9uZyBfX3MzOTBfY29tcGF0X3N5c18jI3NuYW1lKHZvaWQpCiAKLSNkZWZpbmUgU1lTQ0FM TF9ERUZJTkUwKHNuYW1lKQkJCQkJCVwKKyNkZWZpbmUgX19TWVNDQUxMX0RFRklORTAoc25hbWUp CQkJCQkJXAogCVNZU0NBTExfTUVUQURBVEEoXyMjc25hbWUsIDApOwkJCQkJXAogCWxvbmcgX19z MzkweF9zeXNfIyNzbmFtZSh2b2lkKTsJCQkJCVwKIAlBTExPV19FUlJPUl9JTkpFQ1RJT04oX19z MzkweF9zeXNfIyNzbmFtZSwgRVJSTk8pOwkJXApAQCAtMTI4LDcgKzEyOCw3IEBACiAKICNkZWZp bmUgX19TMzkwX1NZU19TVFVCeCh4LCBmdWxsbmFtZSwgbmFtZSwgLi4uKQogCi0jZGVmaW5lIFNZ U0NBTExfREVGSU5FMChzbmFtZSkJCQkJCQlcCisjZGVmaW5lIF9fU1lTQ0FMTF9ERUZJTkUwKHNu YW1lKQkJCQkJCVwKIAlTWVNDQUxMX01FVEFEQVRBKF8jI3NuYW1lLCAwKTsJCQkJCVwKIAlsb25n IF9fczM5MHhfc3lzXyMjc25hbWUodm9pZCk7CQkJCQlcCiAJQUxMT1dfRVJST1JfSU5KRUNUSU9O KF9fczM5MHhfc3lzXyMjc25hbWUsIEVSUk5PKTsJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lu Y2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2Fs bF93cmFwcGVyLmgKaW5kZXggNTkzNThkMWJmODgwLi4xZjE2NDM2YzEzYmQgMTAwNjQ0Ci0tLSBh L2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oCisrKyBiL2FyY2gveDg2L2lu Y2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oCkBAIC0yNDYsNyArMjQ2LDcgQEAgZXh0ZXJuIGxv bmcgX19pYTMyX3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKICAq IFNZU0NBTExfREVGSU5FeCgpIC0tIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgdGhlIENPTkRfU1lT Q0FMTCgpIGFuZCBTWVNfTkkoKQogICogbWFjcm9zIHRvIHdvcmsgY29ycmVjdGx5LgogICovCi0j ZGVmaW5lIFNZU0NBTExfREVGSU5FMChzbmFtZSkJCQkJCQlcCisjZGVmaW5lIF9fU1lTQ0FMTF9E RUZJTkUwKHNuYW1lKQkJCQkJCVwKIAlTWVNDQUxMX01FVEFEQVRBKF8jI3NuYW1lLCAwKTsJCQkJ CVwKIAlzdGF0aWMgbG9uZyBfX2RvX3N5c18jI3NuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpf X3VudXNlZCk7CVwKIAlfX1g2NF9TWVNfU1RVQjAoc25hbWUpCQkJCQkJXApkaWZmIC0tZ2l0IGEv ZnMvcHJvYy9LY29uZmlnIGIvZnMvcHJvYy9LY29uZmlnCmluZGV4IGM5MzAwMDEwNTZmOS4uOWU1 ZmE3NWViZDJhIDEwMDY0NAotLS0gYS9mcy9wcm9jL0tjb25maWcKKysrIGIvZnMvcHJvYy9LY29u ZmlnCkBAIC0xMDAsNiArMTAwLDEzIEBAIGNvbmZpZyBQUk9DX0NISUxEUkVOCiAJICBTYXkgWSBp ZiB5b3UgYXJlIHJ1bm5pbmcgYW55IHVzZXItc3BhY2Ugc29mdHdhcmUgd2hpY2ggdGFrZXMgYmVu ZWZpdCBmcm9tCiAJICB0aGlzIGludGVyZmFjZS4gRm9yIGV4YW1wbGUsIHJrdCBpcyBzdWNoIGEg cGllY2Ugb2Ygc29mdHdhcmUuCiAKK2NvbmZpZyBQUk9DX1NZU0NBTExTCisJYm9vbCAiSW5jbHVk ZSAvcHJvYy9zeXNjYWxscyBmaWxlIiBpZiBFWFBFUlQKKwlkZXBlbmRzIG9uIFBST0NfRlMgJiYg RlRSQUNFX1NZU0NBTExTCisJZGVmYXVsdCBuCisJaGVscAorCSAgUHJvdmlkZXMgYSBmaWxlIHRo YXQgc2hvd3MgdGhlIG51bWJlciBvZiBzeXNjYWxsIG9uIGVhY2ggY3B1LgorCiBjb25maWcgUFJP Q19QSURfQVJDSF9TVEFUVVMKIAlkZWZfYm9vbCBuCiAJZGVwZW5kcyBvbiBQUk9DX0ZTCmRpZmYg LS1naXQgYS9mcy9wcm9jL01ha2VmaWxlIGIvZnMvcHJvYy9NYWtlZmlsZQppbmRleCBiZDA4NjE2 ZWQ4YmEuLmYzODFhN2FhOTBhZSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9NYWtlZmlsZQorKysgYi9m cy9wcm9jL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBAIHByb2MtJChDT05GSUdfUFJPQ19TWVND VEwpCSs9IHByb2Nfc3lzY3RsLm8KIHByb2MtJChDT05GSUdfTkVUKQkJKz0gcHJvY19uZXQubwog cHJvYy0kKENPTkZJR19QUk9DX0tDT1JFKQkrPSBrY29yZS5vCiBwcm9jLSQoQ09ORklHX1BST0Nf Vk1DT1JFKQkrPSB2bWNvcmUubworcHJvYy0kKENPTkZJR19QUk9DX1NZU0NBTExTKQkrPSBzeXNj YWxsLm8KIHByb2MtJChDT05GSUdfUFJJTlRLKQkrPSBrbXNnLm8KIHByb2MtJChDT05GSUdfUFJP Q19QQUdFX01PTklUT1IpCSs9IHBhZ2UubwogcHJvYy0kKENPTkZJR19CT09UX0NPTkZJRykJKz0g Ym9vdGNvbmZpZy5vCmRpZmYgLS1naXQgYS9mcy9wcm9jL3N5c2NhbGwuYyBiL2ZzL3Byb2Mvc3lz Y2FsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODgxOTZiMTZm NDMwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcHJvYy9zeXNjYWxsLmMKQEAgLTAsMCArMSw3OSBA QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyNpbmNsdWRlIDxsaW51eC9m cy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+ CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS9zeXNjYWxsLmg+ CisKK0RFRklORV9QRVJfQ1BVKHU2NCBbTlJfc3lzY2FsbHNdLCBfX3Blcl9jcHVfc3lzY2FsbF9j b3VudCk7CisKK2V4dGVybiBjb25zdCBjaGFyICpnZXRfc3lzY2FsbF9uYW1lKGludCBzeXNjYWxs X25yKTsKKworaW50IHNob3dfc3lzY2FsbHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQor eworCWludCBpID0gKihsb2ZmX3QgKil2LCBqOworCXN0YXRpYyBpbnQgcHJlYzsKKwljb25zdCBj aGFyICpzeXNjYWxsX25hbWUgPSBnZXRfc3lzY2FsbF9uYW1lKGkpOworCisJaWYgKGkgPiBOUl9z eXNjYWxscykKKwkJcmV0dXJuIDA7CisKKwkvKiBwcmludCBoZWFkZXIgYW5kIGNhbGN1bGF0ZSB0 aGUgd2lkdGggb2YgdGhlIGZpcnN0IGNvbHVtbiAqLworCWlmIChpID09IDApIHsKKwkJZm9yIChw cmVjID0gMywgaiA9IDEwMDA7IHByZWMgPCAxMCAmJiBqIDw9IE5SX3N5c2NhbGxzOyArK3ByZWMp CisJCQlqICo9IDEwOworCQlzZXFfcHJpbnRmKHAsICIlKnMiLCBwcmVjICsgOCwgIiIpOworCQlm b3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICJDUFUlLThkIiwgaik7CisJ CXNlcV9wdXRjKHAsICdcbicpOworCX0KKworCWlmIChzeXNjYWxsX25hbWUgPT0gTlVMTCkKKwkJ cmV0dXJuIDA7CisKKwlzZXFfcHJpbnRmKHAsICIlKmQ6ICIsIHByZWMsIGkpOworCWZvcl9lYWNo X29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwbGx1ICIsCisJCQkgICBwZXJfY3B1 KF9fcGVyX2NwdV9zeXNjYWxsX2NvdW50LCBqKVtpXSk7CisJc2VxX3ByaW50ZihwLCAiICAlcyIs IHN5c2NhbGxfbmFtZSk7CisJc2VxX3B1dGMocCwgJ1xuJyk7CisKKwlyZXR1cm4gMDsKK30KKwor LyoKKyAqIC9wcm9jL3N5c2NhbGxzCisgKi8KK3N0YXRpYyB2b2lkICppbnRfc2VxX3N0YXJ0KHN0 cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuICgqcG9zIDw9IE5SX3N5 c2NhbGxzKSA/IHBvcyA6IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICppbnRfc2VxX25leHQoc3Ry dWN0IHNlcV9maWxlICpmLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKwlp ZiAoKnBvcyA+IE5SX3N5c2NhbGxzKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcG9zOworfQor CitzdGF0aWMgdm9pZCBpbnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQor eworCS8qIE5vdGhpbmcgdG8gZG8gKi8KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3Bl cmF0aW9ucyBpbnRfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBpbnRfc2VxX3N0YXJ0LAorCS5uZXh0 ICA9IGludF9zZXFfbmV4dCwKKwkuc3RvcCAgPSBpbnRfc2VxX3N0b3AsCisJLnNob3cgID0gc2hv d19zeXNjYWxscworfTsKKworc3RhdGljIGludCBfX2luaXQgcHJvY19zeXNjYWxsX2luaXQodm9p ZCkKK3sKKwlwcm9jX2NyZWF0ZV9zZXEoInN5c2NhbGxzIiwgMCwgTlVMTCwgJmludF9zZXFfb3Bz KTsKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGwocHJvY19zeXNjYWxsX2luaXQpOwpkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxs cy5oCmluZGV4IGEzNGIwZjlhOTk3Mi4uYTNkNTBiOGQzOWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRl L2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC04Niw2 ICs4Niw3IEBAIGVudW0gbGFuZGxvY2tfcnVsZV90eXBlOwogI2luY2x1ZGUgPGxpbnV4L2tleS5o PgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8dHJhY2Uvc3lzY2Fs bC5oPgorI2luY2x1ZGUgPGFzbS9zeXNjYWxsLmg+CiAKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNf U1lTQ0FMTF9XUkFQUEVSCiAvKgpAQCAtMjA2LDggKzIwNyw4IEBAIHN0YXRpYyBpbmxpbmUgaW50 IGlzX3N5c2NhbGxfdHJhY2VfZXZlbnQoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKnRwX2V2ZW50 KQogfQogI2VuZGlmCiAKLSNpZm5kZWYgU1lTQ0FMTF9ERUZJTkUwCi0jZGVmaW5lIFNZU0NBTExf REVGSU5FMChzbmFtZSkJCQkJCVwKKyNpZm5kZWYgX19TWVNDQUxMX0RFRklORTAKKyNkZWZpbmUg X19TWVNDQUxMX0RFRklORTAoc25hbWUpCQkJCQlcCiAJU1lTQ0FMTF9NRVRBREFUQShfIyNzbmFt ZSwgMCk7CQkJCVwKIAlhc21saW5rYWdlIGxvbmcgc3lzXyMjc25hbWUodm9pZCk7CQkJXAogCUFM TE9XX0VSUk9SX0lOSkVDVElPTihzeXNfIyNzbmFtZSwgRVJSTk8pOwkJXApAQCAtMjIzLDkgKzIy NCw0OSBAQCBzdGF0aWMgaW5saW5lIGludCBpc19zeXNjYWxsX3RyYWNlX2V2ZW50KHN0cnVjdCB0 cmFjZV9ldmVudF9jYWxsICp0cF9ldmVudCkKIAogI2RlZmluZSBTWVNDQUxMX0RFRklORV9NQVhB UkdTCTYKIAotI2RlZmluZSBTWVNDQUxMX0RFRklORXgoeCwgc25hbWUsIC4uLikJCQkJXAotCVNZ U0NBTExfTUVUQURBVEEoc25hbWUsIHgsIF9fVkFfQVJHU19fKQkJCVwKLQlfX1NZU0NBTExfREVG SU5FeCh4LCBzbmFtZSwgX19WQV9BUkdTX18pCisjaWZkZWYgQ09ORklHX1BST0NfU1lTQ0FMTFMK K0RFQ0xBUkVfUEVSX0NQVSh1NjRbXSwgX19wZXJfY3B1X3N5c2NhbGxfY291bnQpOworCisjZGVm aW5lIFNZU0NBTExfQ09VTlRfREVDTEFSRXgoc25hbWUsIHgsIC4uLikgXAorCXN0YXRpYyBpbmxp bmUgbG9uZyBfX2NvdW50X3N5cyMjc25hbWUoX19NQVAoeCwgX19TQ19ERUNMLCBfX1ZBX0FSR1Nf XykpOworCisjZGVmaW5lIF9fU1lTQ0FMTF9DT1VOVChzeXNjYWxsX25yKSBcCisJdGhpc19jcHVf aW5jKF9fcGVyX2NwdV9zeXNjYWxsX2NvdW50WyhzeXNjYWxsX25yKV0pCisKKyNkZWZpbmUgU1lT Q0FMTF9DT1VOVF9GVU5DeChzbmFtZSwgeCwgLi4uKQkJCQkJXAorCXsJCQkJCQkJCQlcCisJCV9f U1lTQ0FMTF9DT1VOVChfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLnN5c2NhbGxfbnIpOwkJXAorCQly ZXR1cm4gX19jb3VudF9zeXMjI3NuYW1lKF9fTUFQKHgsIF9fU0NfQ0FTVCwgX19WQV9BUkdTX18p KTsJXAorCX0JCQkJCQkJCQlcCisJc3RhdGljIGlubGluZSBsb25nIF9fY291bnRfc3lzIyNzbmFt ZShfX01BUCh4LCBfX1NDX0RFQ0wsIF9fVkFfQVJHU19fKSkKKworI2RlZmluZSBTWVNDQUxMX0NP VU5UX0RFQ0xBUkUwKHNuYW1lKSBcCisJc3RhdGljIGlubGluZSBsb25nIF9fY291bnRfc3lzXyMj c25hbWUodm9pZCk7CisKKyNkZWZpbmUgU1lTQ0FMTF9DT1VOVF9GVU5DMChzbmFtZSkJCQkJCVwK Kwl7CQkJCQkJCQlcCisJCV9fU1lTQ0FMTF9DT1VOVChfX3N5c2NhbGxfbWV0YV9fIyNzbmFtZS5z eXNjYWxsX25yKTsJXAorCQlyZXR1cm4gX19jb3VudF9zeXNfIyNzbmFtZSgpOwkJCQlcCisJfQkJ CQkJCQkJXAorCXN0YXRpYyBpbmxpbmUgbG9uZyBfX2NvdW50X3N5c18jI3NuYW1lKHZvaWQpCisK KyNlbHNlCisjZGVmaW5lIFNZU0NBTExfQ09VTlRfREVDTEFSRXgoc25hbWUsIHgsIC4uLikKKyNk ZWZpbmUgU1lTQ0FMTF9DT1VOVF9GVU5DeChzbmFtZSwgeCwgLi4uKQorI2RlZmluZSBTWVNDQUxM X0NPVU5UX0RFQ0xBUkUwKHNuYW1lKQorI2RlZmluZSBTWVNDQUxMX0NPVU5UX0ZVTkMwKHNuYW1l KQorI2VuZGlmCisKKyNkZWZpbmUgU1lTQ0FMTF9ERUZJTkV4KHgsIHNuYW1lLCAuLi4pCQkJXAor CVNZU0NBTExfTUVUQURBVEEoc25hbWUsIHgsIF9fVkFfQVJHU19fKQkJXAorCVNZU0NBTExfQ09V TlRfREVDTEFSRXgoc25hbWUsIHgsIF9fVkFfQVJHU19fKQlcCisJX19TWVNDQUxMX0RFRklORXgo eCwgc25hbWUsIF9fVkFfQVJHU19fKQlcCisJU1lTQ0FMTF9DT1VOVF9GVU5DeChzbmFtZSwgeCwg X19WQV9BUkdTX18pCisKKyNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKHNuYW1lKQkJXAorCVNZU0NB TExfQ09VTlRfREVDTEFSRTAoc25hbWUpCVwKKwlfX1NZU0NBTExfREVGSU5FMChzbmFtZSkJXAor CVNZU0NBTExfQ09VTlRfRlVOQzAoc25hbWUpCiAKICNkZWZpbmUgX19QUk9URUNUKC4uLikgYXNt bGlua2FnZV9wcm90ZWN0KF9fVkFfQVJHU19fKQogCi0tIAoyLjMwLjIKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==