aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2019-10-07 09:15:24 -0400
committerIngo Molnar <mingo@kernel.org>2019-10-07 09:15:24 -0400
commita4cf7b392e430a82615b81a2adb0f83c6f746e5e (patch)
treebb64b3f42250bac0f555038db18db3fb8c736299 /tools
parentda0c9ea146cbe92b832f1b0f694840ea8eb33cce (diff)
parent11aad897f6d1a28eae3b7e5b293647c522d65819 (diff)
Merge tag 'perf-urgent-for-mingo-5.4-20191001' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent
Pull perf/urgent fixes from Arnaldo Carvalho de Melo: perf script: Andi Kleen: - Fix recovery from LBR/binary mismatch in the "brstackinsn" --field. perf annotate: Arnaldo Carvalho de Melo: - Propagate errors so that meaningful messages can be presented to the user in case of problems. perf map: Steve MacLean: - Fix handling of maps partially overlapped, resolving symbols in the ranges not replaced by new mmaps. perf tests: Ian Rogers: - Use raise() instead of NULL derefs to avoid causing a SIGILL rather than a SIGSEGV for optimized builds that turn NULL derefs into ud2 instructions. perf LLVM: Ian Rogers: - Don't access out-of-scope array. perf inject: Steve MacLean: - Fix JIT_CODE_MOVE filename, that was having a u64 truncaded into a 32-bit snprintf format and also a missing ".so" suffix in another case. libsubcmd: Ian Rogers: - Make _FORTIFY_SOURCE defines dependent on the feature, avoiding false positives with with memory sanitizers such as LLVM's ASan. Vendor specific events: Intel: Andi Kleen: - Fix period for Intel fixed counters. s390: Thomas Richter (2): - Fix some event details transaction for machine type 8561. tools headers UAPI: Arnaldo Carvalho de Melo: - Sync headers with the kernel, catching new usbdevfs ioctls and madvise behaviours to properly decode in 'perf trace' output. Documentation: Steve MacLean: - Correct and clarify jitdump spec. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools')
-rw-r--r--tools/arch/arm/include/uapi/asm/kvm.h4
-rw-r--r--tools/arch/arm64/include/uapi/asm/kvm.h4
-rw-r--r--tools/arch/s390/include/uapi/asm/kvm.h6
-rw-r--r--tools/arch/x86/include/uapi/asm/vmx.h2
-rw-r--r--tools/include/uapi/asm-generic/mman-common.h3
-rw-r--r--tools/include/uapi/drm/i915_drm.h1
-rw-r--r--tools/include/uapi/linux/fs.h55
-rw-r--r--tools/include/uapi/linux/fscrypt.h181
-rw-r--r--tools/include/uapi/linux/kvm.h3
-rw-r--r--tools/include/uapi/linux/usbdevice_fs.h4
-rw-r--r--tools/lib/subcmd/Makefile8
-rw-r--r--tools/perf/Documentation/asciidoc.conf3
-rw-r--r--tools/perf/Documentation/jitdump-specification.txt4
-rw-r--r--tools/perf/arch/arm/annotate/instructions.c4
-rw-r--r--tools/perf/arch/arm64/annotate/instructions.c4
-rw-r--r--tools/perf/arch/powerpc/util/header.c3
-rw-r--r--tools/perf/arch/s390/annotate/instructions.c6
-rw-r--r--tools/perf/arch/s390/util/header.c9
-rw-r--r--tools/perf/arch/x86/annotate/instructions.c6
-rw-r--r--tools/perf/arch/x86/util/header.c3
-rw-r--r--tools/perf/builtin-kvm.c7
-rw-r--r--tools/perf/builtin-script.c6
-rwxr-xr-xtools/perf/check-headers.sh1
-rw-r--r--tools/perf/pmu-events/arch/s390/cf_z15/basic.json (renamed from tools/perf/pmu-events/arch/s390/cf_m8561/basic.json)0
-rw-r--r--tools/perf/pmu-events/arch/s390/cf_z15/crypto.json (renamed from tools/perf/pmu-events/arch/s390/cf_m8561/crypto.json)0
-rw-r--r--tools/perf/pmu-events/arch/s390/cf_z15/crypto6.json (renamed from tools/perf/pmu-events/arch/s390/cf_m8561/crypto6.json)0
-rw-r--r--tools/perf/pmu-events/arch/s390/cf_z15/extended.json (renamed from tools/perf/pmu-events/arch/s390/cf_m8561/extended.json)0
-rw-r--r--tools/perf/pmu-events/arch/s390/cf_z15/transaction.json7
-rw-r--r--tools/perf/pmu-events/arch/s390/mapfile.csv2
-rw-r--r--tools/perf/pmu-events/jevents.c12
-rw-r--r--tools/perf/tests/perf-hooks.c3
-rw-r--r--tools/perf/util/annotate.c35
-rw-r--r--tools/perf/util/annotate.h4
-rw-r--r--tools/perf/util/evsel.c3
-rw-r--r--tools/perf/util/jitdump.c6
-rw-r--r--tools/perf/util/llvm-utils.c6
-rw-r--r--tools/perf/util/map.c3
-rw-r--r--tools/perf/util/python.c6
38 files changed, 315 insertions, 99 deletions
diff --git a/tools/arch/arm/include/uapi/asm/kvm.h b/tools/arch/arm/include/uapi/asm/kvm.h
index a4217c1a5d01..2769360f195c 100644
--- a/tools/arch/arm/include/uapi/asm/kvm.h
+++ b/tools/arch/arm/include/uapi/asm/kvm.h
@@ -266,8 +266,10 @@ struct kvm_vcpu_events {
266#define KVM_DEV_ARM_ITS_CTRL_RESET 4 266#define KVM_DEV_ARM_ITS_CTRL_RESET 4
267 267
268/* KVM_IRQ_LINE irq field index values */ 268/* KVM_IRQ_LINE irq field index values */
269#define KVM_ARM_IRQ_VCPU2_SHIFT 28
270#define KVM_ARM_IRQ_VCPU2_MASK 0xf
269#define KVM_ARM_IRQ_TYPE_SHIFT 24 271#define KVM_ARM_IRQ_TYPE_SHIFT 24
270#define KVM_ARM_IRQ_TYPE_MASK 0xff 272#define KVM_ARM_IRQ_TYPE_MASK 0xf
271#define KVM_ARM_IRQ_VCPU_SHIFT 16 273#define KVM_ARM_IRQ_VCPU_SHIFT 16
272#define KVM_ARM_IRQ_VCPU_MASK 0xff 274#define KVM_ARM_IRQ_VCPU_MASK 0xff
273#define KVM_ARM_IRQ_NUM_SHIFT 0 275#define KVM_ARM_IRQ_NUM_SHIFT 0
diff --git a/tools/arch/arm64/include/uapi/asm/kvm.h b/tools/arch/arm64/include/uapi/asm/kvm.h
index 9a507716ae2f..67c21f9bdbad 100644
--- a/tools/arch/arm64/include/uapi/asm/kvm.h
+++ b/tools/arch/arm64/include/uapi/asm/kvm.h
@@ -325,8 +325,10 @@ struct kvm_vcpu_events {
325#define KVM_ARM_VCPU_TIMER_IRQ_PTIMER 1 325#define KVM_ARM_VCPU_TIMER_IRQ_PTIMER 1
326 326
327/* KVM_IRQ_LINE irq field index values */ 327/* KVM_IRQ_LINE irq field index values */
328#define KVM_ARM_IRQ_VCPU2_SHIFT 28
329#define KVM_ARM_IRQ_VCPU2_MASK 0xf
328#define KVM_ARM_IRQ_TYPE_SHIFT 24 330#define KVM_ARM_IRQ_TYPE_SHIFT 24
329#define KVM_ARM_IRQ_TYPE_MASK 0xff 331#define KVM_ARM_IRQ_TYPE_MASK 0xf
330#define KVM_ARM_IRQ_VCPU_SHIFT 16 332#define KVM_ARM_IRQ_VCPU_SHIFT 16
331#define KVM_ARM_IRQ_VCPU_MASK 0xff 333#define KVM_ARM_IRQ_VCPU_MASK 0xff
332#define KVM_ARM_IRQ_NUM_SHIFT 0 334#define KVM_ARM_IRQ_NUM_SHIFT 0
diff --git a/tools/arch/s390/include/uapi/asm/kvm.h b/tools/arch/s390/include/uapi/asm/kvm.h
index 47104e5b47fd..436ec7636927 100644
--- a/tools/arch/s390/include/uapi/asm/kvm.h
+++ b/tools/arch/s390/include/uapi/asm/kvm.h
@@ -231,6 +231,12 @@ struct kvm_guest_debug_arch {
231#define KVM_SYNC_GSCB (1UL << 9) 231#define KVM_SYNC_GSCB (1UL << 9)
232#define KVM_SYNC_BPBC (1UL << 10) 232#define KVM_SYNC_BPBC (1UL << 10)
233#define KVM_SYNC_ETOKEN (1UL << 11) 233#define KVM_SYNC_ETOKEN (1UL << 11)
234
235#define KVM_SYNC_S390_VALID_FIELDS \
236 (KVM_SYNC_PREFIX | KVM_SYNC_GPRS | KVM_SYNC_ACRS | KVM_SYNC_CRS | \
237 KVM_SYNC_ARCH0 | KVM_SYNC_PFAULT | KVM_SYNC_VRS | KVM_SYNC_RICCB | \
238 KVM_SYNC_FPRS | KVM_SYNC_GSCB | KVM_SYNC_BPBC | KVM_SYNC_ETOKEN)
239
234/* length and alignment of the sdnx as a power of two */ 240/* length and alignment of the sdnx as a power of two */
235#define SDNXC 8 241#define SDNXC 8
236#define SDNXL (1UL << SDNXC) 242#define SDNXL (1UL << SDNXC)
diff --git a/tools/arch/x86/include/uapi/asm/vmx.h b/tools/arch/x86/include/uapi/asm/vmx.h
index f0b0c90dd398..f01950aa7fae 100644
--- a/tools/arch/x86/include/uapi/asm/vmx.h
+++ b/tools/arch/x86/include/uapi/asm/vmx.h
@@ -31,6 +31,7 @@
31#define EXIT_REASON_EXCEPTION_NMI 0 31#define EXIT_REASON_EXCEPTION_NMI 0
32#define EXIT_REASON_EXTERNAL_INTERRUPT 1 32#define EXIT_REASON_EXTERNAL_INTERRUPT 1
33#define EXIT_REASON_TRIPLE_FAULT 2 33#define EXIT_REASON_TRIPLE_FAULT 2
34#define EXIT_REASON_INIT_SIGNAL 3
34 35
35#define EXIT_REASON_PENDING_INTERRUPT 7 36#define EXIT_REASON_PENDING_INTERRUPT 7
36#define EXIT_REASON_NMI_WINDOW 8 37#define EXIT_REASON_NMI_WINDOW 8
@@ -90,6 +91,7 @@
90 { EXIT_REASON_EXCEPTION_NMI, "EXCEPTION_NMI" }, \ 91 { EXIT_REASON_EXCEPTION_NMI, "EXCEPTION_NMI" }, \
91 { EXIT_REASON_EXTERNAL_INTERRUPT, "EXTERNAL_INTERRUPT" }, \ 92 { EXIT_REASON_EXTERNAL_INTERRUPT, "EXTERNAL_INTERRUPT" }, \
92 { EXIT_REASON_TRIPLE_FAULT, "TRIPLE_FAULT" }, \ 93 { EXIT_REASON_TRIPLE_FAULT, "TRIPLE_FAULT" }, \
94 { EXIT_REASON_INIT_SIGNAL, "INIT_SIGNAL" }, \
93 { EXIT_REASON_PENDING_INTERRUPT, "PENDING_INTERRUPT" }, \ 95 { EXIT_REASON_PENDING_INTERRUPT, "PENDING_INTERRUPT" }, \
94 { EXIT_REASON_NMI_WINDOW, "NMI_WINDOW" }, \ 96 { EXIT_REASON_NMI_WINDOW, "NMI_WINDOW" }, \
95 { EXIT_REASON_TASK_SWITCH, "TASK_SWITCH" }, \ 97 { EXIT_REASON_TASK_SWITCH, "TASK_SWITCH" }, \
diff --git a/tools/include/uapi/asm-generic/mman-common.h b/tools/include/uapi/asm-generic/mman-common.h
index 63b1f506ea67..c160a5354eb6 100644
--- a/tools/include/uapi/asm-generic/mman-common.h
+++ b/tools/include/uapi/asm-generic/mman-common.h
@@ -67,6 +67,9 @@
67#define MADV_WIPEONFORK 18 /* Zero memory on fork, child only */ 67#define MADV_WIPEONFORK 18 /* Zero memory on fork, child only */
68#define MADV_KEEPONFORK 19 /* Undo MADV_WIPEONFORK */ 68#define MADV_KEEPONFORK 19 /* Undo MADV_WIPEONFORK */
69 69
70#define MADV_COLD 20 /* deactivate these pages */
71#define MADV_PAGEOUT 21 /* reclaim these pages */
72
70/* compatibility flags */ 73/* compatibility flags */
71#define MAP_FILE 0 74#define MAP_FILE 0
72 75
diff --git a/tools/include/uapi/drm/i915_drm.h b/tools/include/uapi/drm/i915_drm.h
index 328d05e77d9f..469dc512cca3 100644
--- a/tools/include/uapi/drm/i915_drm.h
+++ b/tools/include/uapi/drm/i915_drm.h
@@ -521,6 +521,7 @@ typedef struct drm_i915_irq_wait {
521#define I915_SCHEDULER_CAP_PRIORITY (1ul << 1) 521#define I915_SCHEDULER_CAP_PRIORITY (1ul << 1)
522#define I915_SCHEDULER_CAP_PREEMPTION (1ul << 2) 522#define I915_SCHEDULER_CAP_PREEMPTION (1ul << 2)
523#define I915_SCHEDULER_CAP_SEMAPHORES (1ul << 3) 523#define I915_SCHEDULER_CAP_SEMAPHORES (1ul << 3)
524#define I915_SCHEDULER_CAP_ENGINE_BUSY_STATS (1ul << 4)
524 525
525#define I915_PARAM_HUC_STATUS 42 526#define I915_PARAM_HUC_STATUS 42
526 527
diff --git a/tools/include/uapi/linux/fs.h b/tools/include/uapi/linux/fs.h
index 2a616aa3f686..379a612f8f1d 100644
--- a/tools/include/uapi/linux/fs.h
+++ b/tools/include/uapi/linux/fs.h
@@ -13,6 +13,9 @@
13#include <linux/limits.h> 13#include <linux/limits.h>
14#include <linux/ioctl.h> 14#include <linux/ioctl.h>
15#include <linux/types.h> 15#include <linux/types.h>
16#ifndef __KERNEL__
17#include <linux/fscrypt.h>
18#endif
16 19
17/* Use of MS_* flags within the kernel is restricted to core mount(2) code. */ 20/* Use of MS_* flags within the kernel is restricted to core mount(2) code. */
18#if !defined(__KERNEL__) 21#if !defined(__KERNEL__)
@@ -213,57 +216,6 @@ struct fsxattr {
213#define FS_IOC_SETFSLABEL _IOW(0x94, 50, char[FSLABEL_MAX]) 216#define FS_IOC_SETFSLABEL _IOW(0x94, 50, char[FSLABEL_MAX])
214 217
215/* 218/*
216 * File system encryption support
217 */
218/* Policy provided via an ioctl on the topmost directory */
219#define FS_KEY_DESCRIPTOR_SIZE 8
220
221#define FS_POLICY_FLAGS_PAD_4 0x00
222#define FS_POLICY_FLAGS_PAD_8 0x01
223#define FS_POLICY_FLAGS_PAD_16 0x02
224#define FS_POLICY_FLAGS_PAD_32 0x03
225#define FS_POLICY_FLAGS_PAD_MASK 0x03
226#define FS_POLICY_FLAG_DIRECT_KEY 0x04 /* use master key directly */
227#define FS_POLICY_FLAGS_VALID 0x07
228
229/* Encryption algorithms */
230#define FS_ENCRYPTION_MODE_INVALID 0
231#define FS_ENCRYPTION_MODE_AES_256_XTS 1
232#define FS_ENCRYPTION_MODE_AES_256_GCM 2
233#define FS_ENCRYPTION_MODE_AES_256_CBC 3
234#define FS_ENCRYPTION_MODE_AES_256_CTS 4
235#define FS_ENCRYPTION_MODE_AES_128_CBC 5
236#define FS_ENCRYPTION_MODE_AES_128_CTS 6
237#define FS_ENCRYPTION_MODE_SPECK128_256_XTS 7 /* Removed, do not use. */
238#define FS_ENCRYPTION_MODE_SPECK128_256_CTS 8 /* Removed, do not use. */
239#define FS_ENCRYPTION_MODE_ADIANTUM 9
240
241struct fscrypt_policy {
242 __u8 version;
243 __u8 contents_encryption_mode;
244 __u8 filenames_encryption_mode;
245 __u8 flags;
246 __u8 master_key_descriptor[FS_KEY_DESCRIPTOR_SIZE];
247};
248
249#define FS_IOC_SET_ENCRYPTION_POLICY _IOR('f', 19, struct fscrypt_policy)
250#define FS_IOC_GET_ENCRYPTION_PWSALT _IOW('f', 20, __u8[16])
251#define FS_IOC_GET_ENCRYPTION_POLICY _IOW('f', 21, struct fscrypt_policy)
252
253/* Parameters for passing an encryption key into the kernel keyring */
254#define FS_KEY_DESC_PREFIX "fscrypt:"
255#define FS_KEY_DESC_PREFIX_SIZE 8
256
257/* Structure that userspace passes to the kernel keyring */
258#define FS_MAX_KEY_SIZE 64
259
260struct fscrypt_key {
261 __u32 mode;
262 __u8 raw[FS_MAX_KEY_SIZE];
263 __u32 size;
264};
265
266/*
267 * Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS) 219 * Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS)
268 * 220 *
269 * Note: for historical reasons, these flags were originally used and 221 * Note: for historical reasons, these flags were originally used and
@@ -306,6 +258,7 @@ struct fscrypt_key {
306#define FS_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ 258#define FS_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
307#define FS_HUGE_FILE_FL 0x00040000 /* Reserved for ext4 */ 259#define FS_HUGE_FILE_FL 0x00040000 /* Reserved for ext4 */
308#define FS_EXTENT_FL 0x00080000 /* Extents */ 260#define FS_EXTENT_FL 0x00080000 /* Extents */
261#define FS_VERITY_FL 0x00100000 /* Verity protected inode */
309#define FS_EA_INODE_FL 0x00200000 /* Inode used for large EA */ 262#define FS_EA_INODE_FL 0x00200000 /* Inode used for large EA */
310#define FS_EOFBLOCKS_FL 0x00400000 /* Reserved for ext4 */ 263#define FS_EOFBLOCKS_FL 0x00400000 /* Reserved for ext4 */
311#define FS_NOCOW_FL 0x00800000 /* Do not cow file */ 264#define FS_NOCOW_FL 0x00800000 /* Do not cow file */
diff --git a/tools/include/uapi/linux/fscrypt.h b/tools/include/uapi/linux/fscrypt.h
new file mode 100644
index 000000000000..39ccfe9311c3
--- /dev/null
+++ b/tools/include/uapi/linux/fscrypt.h
@@ -0,0 +1,181 @@
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * fscrypt user API
4 *
5 * These ioctls can be used on filesystems that support fscrypt. See the
6 * "User API" section of Documentation/filesystems/fscrypt.rst.
7 */
8#ifndef _UAPI_LINUX_FSCRYPT_H
9#define _UAPI_LINUX_FSCRYPT_H
10
11#include <linux/types.h>
12
13/* Encryption policy flags */
14#define FSCRYPT_POLICY_FLAGS_PAD_4 0x00
15#define FSCRYPT_POLICY_FLAGS_PAD_8 0x01
16#define FSCRYPT_POLICY_FLAGS_PAD_16 0x02
17#define FSCRYPT_POLICY_FLAGS_PAD_32 0x03
18#define FSCRYPT_POLICY_FLAGS_PAD_MASK 0x03
19#define FSCRYPT_POLICY_FLAG_DIRECT_KEY 0x04
20#define FSCRYPT_POLICY_FLAGS_VALID 0x07
21
22/* Encryption algorithms */
23#define FSCRYPT_MODE_AES_256_XTS 1
24#define FSCRYPT_MODE_AES_256_CTS 4
25#define FSCRYPT_MODE_AES_128_CBC 5
26#define FSCRYPT_MODE_AES_128_CTS 6
27#define FSCRYPT_MODE_ADIANTUM 9
28#define __FSCRYPT_MODE_MAX 9
29
30/*
31 * Legacy policy version; ad-hoc KDF and no key verification.
32 * For new encrypted directories, use fscrypt_policy_v2 instead.
33 *
34 * Careful: the .version field for this is actually 0, not 1.
35 */
36#define FSCRYPT_POLICY_V1 0
37#define FSCRYPT_KEY_DESCRIPTOR_SIZE 8
38struct fscrypt_policy_v1 {
39 __u8 version;
40 __u8 contents_encryption_mode;
41 __u8 filenames_encryption_mode;
42 __u8 flags;
43 __u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
44};
45#define fscrypt_policy fscrypt_policy_v1
46
47/*
48 * Process-subscribed "logon" key description prefix and payload format.
49 * Deprecated; prefer FS_IOC_ADD_ENCRYPTION_KEY instead.
50 */
51#define FSCRYPT_KEY_DESC_PREFIX "fscrypt:"
52#define FSCRYPT_KEY_DESC_PREFIX_SIZE 8
53#define FSCRYPT_MAX_KEY_SIZE 64
54struct fscrypt_key {
55 __u32 mode;
56 __u8 raw[FSCRYPT_MAX_KEY_SIZE];
57 __u32 size;
58};
59
60/*
61 * New policy version with HKDF and key verification (recommended).
62 */
63#define FSCRYPT_POLICY_V2 2
64#define FSCRYPT_KEY_IDENTIFIER_SIZE 16
65struct fscrypt_policy_v2 {
66 __u8 version;
67 __u8 contents_encryption_mode;
68 __u8 filenames_encryption_mode;
69 __u8 flags;
70 __u8 __reserved[4];
71 __u8 master_key_identifier[FSCRYPT_KEY_IDENTIFIER_SIZE];
72};
73
74/* Struct passed to FS_IOC_GET_ENCRYPTION_POLICY_EX */
75struct fscrypt_get_policy_ex_arg {
76 __u64 policy_size; /* input/output */
77 union {
78 __u8 version;
79 struct fscrypt_policy_v1 v1;
80 struct fscrypt_policy_v2 v2;
81 } policy; /* output */
82};
83
84/*
85 * v1 policy keys are specified by an arbitrary 8-byte key "descriptor",
86 * matching fscrypt_policy_v1::master_key_descriptor.
87 */
88#define FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR 1
89
90/*
91 * v2 policy keys are specified by a 16-byte key "identifier" which the kernel
92 * calculates as a cryptographic hash of the key itself,
93 * matching fscrypt_policy_v2::master_key_identifier.
94 */
95#define FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER 2
96
97/*
98 * Specifies a key, either for v1 or v2 policies. This doesn't contain the
99 * actual key itself; this is just the "name" of the key.
100 */
101struct fscrypt_key_specifier {
102 __u32 type; /* one of FSCRYPT_KEY_SPEC_TYPE_* */
103 __u32 __reserved;
104 union {
105 __u8 __reserved[32]; /* reserve some extra space */
106 __u8 descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
107 __u8 identifier[FSCRYPT_KEY_IDENTIFIER_SIZE];
108 } u;
109};
110
111/* Struct passed to FS_IOC_ADD_ENCRYPTION_KEY */
112struct fscrypt_add_key_arg {
113 struct fscrypt_key_specifier key_spec;
114 __u32 raw_size;
115 __u32 __reserved[9];
116 __u8 raw[];
117};
118
119/* Struct passed to FS_IOC_REMOVE_ENCRYPTION_KEY */
120struct fscrypt_remove_key_arg {
121 struct fscrypt_key_specifier key_spec;
122#define FSCRYPT_KEY_REMOVAL_STATUS_FLAG_FILES_BUSY 0x00000001
123#define FSCRYPT_KEY_REMOVAL_STATUS_FLAG_OTHER_USERS 0x00000002
124 __u32 removal_status_flags; /* output */
125 __u32 __reserved[5];
126};
127
128/* Struct passed to FS_IOC_GET_ENCRYPTION_KEY_STATUS */
129struct fscrypt_get_key_status_arg {
130 /* input */
131 struct fscrypt_key_specifier key_spec;
132 __u32 __reserved[6];
133
134 /* output */
135#define FSCRYPT_KEY_STATUS_ABSENT 1
136#define FSCRYPT_KEY_STATUS_PRESENT 2
137#define FSCRYPT_KEY_STATUS_INCOMPLETELY_REMOVED 3
138 __u32 status;
139#define FSCRYPT_KEY_STATUS_FLAG_ADDED_BY_SELF 0x00000001
140 __u32 status_flags;
141 __u32 user_count;
142 __u32 __out_reserved[13];
143};
144
145#define FS_IOC_SET_ENCRYPTION_POLICY _IOR('f', 19, struct fscrypt_policy)
146#define FS_IOC_GET_ENCRYPTION_PWSALT _IOW('f', 20, __u8[16])
147#define FS_IOC_GET_ENCRYPTION_POLICY _IOW('f', 21, struct fscrypt_policy)
148#define FS_IOC_GET_ENCRYPTION_POLICY_EX _IOWR('f', 22, __u8[9]) /* size + version */
149#define FS_IOC_ADD_ENCRYPTION_KEY _IOWR('f', 23, struct fscrypt_add_key_arg)
150#define FS_IOC_REMOVE_ENCRYPTION_KEY _IOWR('f', 24, struct fscrypt_remove_key_arg)
151#define FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS _IOWR('f', 25, struct fscrypt_remove_key_arg)
152#define FS_IOC_GET_ENCRYPTION_KEY_STATUS _IOWR('f', 26, struct fscrypt_get_key_status_arg)
153
154/**********************************************************************/
155
156/* old names; don't add anything new here! */
157#ifndef __KERNEL__
158#define FS_KEY_DESCRIPTOR_SIZE FSCRYPT_KEY_DESCRIPTOR_SIZE
159#define FS_POLICY_FLAGS_PAD_4 FSCRYPT_POLICY_FLAGS_PAD_4
160#define FS_POLICY_FLAGS_PAD_8 FSCRYPT_POLICY_FLAGS_PAD_8
161#define FS_POLICY_FLAGS_PAD_16 FSCRYPT_POLICY_FLAGS_PAD_16
162#define FS_POLICY_FLAGS_PAD_32 FSCRYPT_POLICY_FLAGS_PAD_32
163#define FS_POLICY_FLAGS_PAD_MASK FSCRYPT_POLICY_FLAGS_PAD_MASK
164#define FS_POLICY_FLAG_DIRECT_KEY FSCRYPT_POLICY_FLAG_DIRECT_KEY
165#define FS_POLICY_FLAGS_VALID FSCRYPT_POLICY_FLAGS_VALID
166#define FS_ENCRYPTION_MODE_INVALID 0 /* never used */
167#define FS_ENCRYPTION_MODE_AES_256_XTS FSCRYPT_MODE_AES_256_XTS
168#define FS_ENCRYPTION_MODE_AES_256_GCM 2 /* never used */
169#define FS_ENCRYPTION_MODE_AES_256_CBC 3 /* never used */
170#define FS_ENCRYPTION_MODE_AES_256_CTS FSCRYPT_MODE_AES_256_CTS
171#define FS_ENCRYPTION_MODE_AES_128_CBC FSCRYPT_MODE_AES_128_CBC
172#define FS_ENCRYPTION_MODE_AES_128_CTS FSCRYPT_MODE_AES_128_CTS
173#define FS_ENCRYPTION_MODE_SPECK128_256_XTS 7 /* removed */
174#define FS_ENCRYPTION_MODE_SPECK128_256_CTS 8 /* removed */
175#define FS_ENCRYPTION_MODE_ADIANTUM FSCRYPT_MODE_ADIANTUM
176#define FS_KEY_DESC_PREFIX FSCRYPT_KEY_DESC_PREFIX
177#define FS_KEY_DESC_PREFIX_SIZE FSCRYPT_KEY_DESC_PREFIX_SIZE
178#define FS_MAX_KEY_SIZE FSCRYPT_MAX_KEY_SIZE
179#endif /* !__KERNEL__ */
180
181#endif /* _UAPI_LINUX_FSCRYPT_H */
diff --git a/tools/include/uapi/linux/kvm.h b/tools/include/uapi/linux/kvm.h
index 5e3f12d5359e..233efbb1c81c 100644
--- a/tools/include/uapi/linux/kvm.h
+++ b/tools/include/uapi/linux/kvm.h
@@ -243,6 +243,8 @@ struct kvm_hyperv_exit {
243#define KVM_INTERNAL_ERROR_SIMUL_EX 2 243#define KVM_INTERNAL_ERROR_SIMUL_EX 2
244/* Encounter unexpected vm-exit due to delivery event. */ 244/* Encounter unexpected vm-exit due to delivery event. */
245#define KVM_INTERNAL_ERROR_DELIVERY_EV 3 245#define KVM_INTERNAL_ERROR_DELIVERY_EV 3
246/* Encounter unexpected vm-exit reason */
247#define KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON 4
246 248
247/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ 249/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
248struct kvm_run { 250struct kvm_run {
@@ -996,6 +998,7 @@ struct kvm_ppc_resize_hpt {
996#define KVM_CAP_ARM_PTRAUTH_ADDRESS 171 998#define KVM_CAP_ARM_PTRAUTH_ADDRESS 171
997#define KVM_CAP_ARM_PTRAUTH_GENERIC 172 999#define KVM_CAP_ARM_PTRAUTH_GENERIC 172
998#define KVM_CAP_PMU_EVENT_FILTER 173 1000#define KVM_CAP_PMU_EVENT_FILTER 173
1001#define KVM_CAP_ARM_IRQ_LINE_LAYOUT_2 174
999 1002
1000#ifdef KVM_CAP_IRQ_ROUTING 1003#ifdef KVM_CAP_IRQ_ROUTING
1001 1004
diff --git a/tools/include/uapi/linux/usbdevice_fs.h b/tools/include/uapi/linux/usbdevice_fs.h
index 78efe870c2b7..cf525cddeb94 100644
--- a/tools/include/uapi/linux/usbdevice_fs.h
+++ b/tools/include/uapi/linux/usbdevice_fs.h
@@ -158,6 +158,7 @@ struct usbdevfs_hub_portinfo {
158#define USBDEVFS_CAP_MMAP 0x20 158#define USBDEVFS_CAP_MMAP 0x20
159#define USBDEVFS_CAP_DROP_PRIVILEGES 0x40 159#define USBDEVFS_CAP_DROP_PRIVILEGES 0x40
160#define USBDEVFS_CAP_CONNINFO_EX 0x80 160#define USBDEVFS_CAP_CONNINFO_EX 0x80
161#define USBDEVFS_CAP_SUSPEND 0x100
161 162
162/* USBDEVFS_DISCONNECT_CLAIM flags & struct */ 163/* USBDEVFS_DISCONNECT_CLAIM flags & struct */
163 164
@@ -223,5 +224,8 @@ struct usbdevfs_streams {
223 * extending size of the data returned. 224 * extending size of the data returned.
224 */ 225 */
225#define USBDEVFS_CONNINFO_EX(len) _IOC(_IOC_READ, 'U', 32, len) 226#define USBDEVFS_CONNINFO_EX(len) _IOC(_IOC_READ, 'U', 32, len)
227#define USBDEVFS_FORBID_SUSPEND _IO('U', 33)
228#define USBDEVFS_ALLOW_SUSPEND _IO('U', 34)
229#define USBDEVFS_WAIT_FOR_RESUME _IO('U', 35)
226 230
227#endif /* _UAPI_LINUX_USBDEVICE_FS_H */ 231#endif /* _UAPI_LINUX_USBDEVICE_FS_H */
diff --git a/tools/lib/subcmd/Makefile b/tools/lib/subcmd/Makefile
index ed61fb3a46c0..5b2cd5e58df0 100644
--- a/tools/lib/subcmd/Makefile
+++ b/tools/lib/subcmd/Makefile
@@ -20,7 +20,13 @@ MAKEFLAGS += --no-print-directory
20LIBFILE = $(OUTPUT)libsubcmd.a 20LIBFILE = $(OUTPUT)libsubcmd.a
21 21
22CFLAGS := $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) 22CFLAGS := $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
23CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fPIC 23CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -fPIC
24
25ifeq ($(DEBUG),0)
26 ifeq ($(feature-fortify-source), 1)
27 CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
28 endif
29endif
24 30
25ifeq ($(CC_NO_CLANG), 0) 31ifeq ($(CC_NO_CLANG), 0)
26 CFLAGS += -O3 32 CFLAGS += -O3
diff --git a/tools/perf/Documentation/asciidoc.conf b/tools/perf/Documentation/asciidoc.conf
index 356b23a40339..2b62ba1e72b7 100644
--- a/tools/perf/Documentation/asciidoc.conf
+++ b/tools/perf/Documentation/asciidoc.conf
@@ -71,6 +71,9 @@ ifdef::backend-docbook[]
71[header] 71[header]
72template::[header-declarations] 72template::[header-declarations]
73<refentry> 73<refentry>
74ifdef::perf_date[]
75<refentryinfo><date>{perf_date}</date></refentryinfo>
76endif::perf_date[]
74<refmeta> 77<refmeta>
75<refentrytitle>{mantitle}</refentrytitle> 78<refentrytitle>{mantitle}</refentrytitle>
76<manvolnum>{manvolnum}</manvolnum> 79<manvolnum>{manvolnum}</manvolnum>
diff --git a/tools/perf/Documentation/jitdump-specification.txt b/tools/perf/Documentation/jitdump-specification.txt
index 4c62b0713651..52152d156ad9 100644
--- a/tools/perf/Documentation/jitdump-specification.txt
+++ b/tools/perf/Documentation/jitdump-specification.txt
@@ -36,8 +36,8 @@ III/ Jitdump file header format
36Each jitdump file starts with a fixed size header containing the following fields in order: 36Each jitdump file starts with a fixed size header containing the following fields in order:
37 37
38 38
39* uint32_t magic : a magic number tagging the file type. The value is 4-byte long and represents the string "JiTD" in ASCII form. It is 0x4A695444 or 0x4454694a depending on the endianness. The field can be used to detect the endianness of the file 39* uint32_t magic : a magic number tagging the file type. The value is 4-byte long and represents the string "JiTD" in ASCII form. It written is as 0x4A695444. The reader will detect an endian mismatch when it reads 0x4454694a.
40* uint32_t version : a 4-byte value representing the format version. It is currently set to 2 40* uint32_t version : a 4-byte value representing the format version. It is currently set to 1
41* uint32_t total_size: size in bytes of file header 41* uint32_t total_size: size in bytes of file header
42* uint32_t elf_mach : ELF architecture encoding (ELF e_machine value as specified in /usr/include/elf.h) 42* uint32_t elf_mach : ELF architecture encoding (ELF e_machine value as specified in /usr/include/elf.h)
43* uint32_t pad1 : padding. Reserved for future use 43* uint32_t pad1 : padding. Reserved for future use
diff --git a/tools/perf/arch/arm/annotate/instructions.c b/tools/perf/arch/arm/annotate/instructions.c
index e1d4b484cc4b..2ff6cedeb9c5 100644
--- a/tools/perf/arch/arm/annotate/instructions.c
+++ b/tools/perf/arch/arm/annotate/instructions.c
@@ -37,7 +37,7 @@ static int arm__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
37 37
38 arm = zalloc(sizeof(*arm)); 38 arm = zalloc(sizeof(*arm));
39 if (!arm) 39 if (!arm)
40 return -1; 40 return ENOMEM;
41 41
42#define ARM_CONDS "(cc|cs|eq|ge|gt|hi|le|ls|lt|mi|ne|pl|vc|vs)" 42#define ARM_CONDS "(cc|cs|eq|ge|gt|hi|le|ls|lt|mi|ne|pl|vc|vs)"
43 err = regcomp(&arm->call_insn, "^blx?" ARM_CONDS "?$", REG_EXTENDED); 43 err = regcomp(&arm->call_insn, "^blx?" ARM_CONDS "?$", REG_EXTENDED);
@@ -59,5 +59,5 @@ out_free_call:
59 regfree(&arm->call_insn); 59 regfree(&arm->call_insn);
60out_free_arm: 60out_free_arm:
61 free(arm); 61 free(arm);
62 return -1; 62 return SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_REGEXP;
63} 63}
diff --git a/tools/perf/arch/arm64/annotate/instructions.c b/tools/perf/arch/arm64/annotate/instructions.c
index 43aa93ed8414..037e292ecd8e 100644
--- a/tools/perf/arch/arm64/annotate/instructions.c
+++ b/tools/perf/arch/arm64/annotate/instructions.c
@@ -95,7 +95,7 @@ static int arm64__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
95 95
96 arm = zalloc(sizeof(*arm)); 96 arm = zalloc(sizeof(*arm));
97 if (!arm) 97 if (!arm)
98 return -1; 98 return ENOMEM;
99 99
100 /* bl, blr */ 100 /* bl, blr */
101 err = regcomp(&arm->call_insn, "^blr?$", REG_EXTENDED); 101 err = regcomp(&arm->call_insn, "^blr?$", REG_EXTENDED);
@@ -118,5 +118,5 @@ out_free_call:
118 regfree(&arm->call_insn); 118 regfree(&arm->call_insn);
119out_free_arm: 119out_free_arm:
120 free(arm); 120 free(arm);
121 return -1; 121 return SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_REGEXP;
122} 122}
diff --git a/tools/perf/arch/powerpc/util/header.c b/tools/perf/arch/powerpc/util/header.c
index b6b7bc7e31a1..3b4cdfc5efd6 100644
--- a/tools/perf/arch/powerpc/util/header.c
+++ b/tools/perf/arch/powerpc/util/header.c
@@ -1,5 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0 1// SPDX-License-Identifier: GPL-2.0
2#include <sys/types.h> 2#include <sys/types.h>
3#include <errno.h>
3#include <unistd.h> 4#include <unistd.h>
4#include <stdio.h> 5#include <stdio.h>
5#include <stdlib.h> 6#include <stdlib.h>
@@ -30,7 +31,7 @@ get_cpuid(char *buffer, size_t sz)
30 buffer[nb-1] = '\0'; 31 buffer[nb-1] = '\0';
31 return 0; 32 return 0;
32 } 33 }
33 return -1; 34 return ENOBUFS;
34} 35}
35 36
36char * 37char *
diff --git a/tools/perf/arch/s390/annotate/instructions.c b/tools/perf/arch/s390/annotate/instructions.c
index 89bb8f2c54ce..a50e70baf918 100644
--- a/tools/perf/arch/s390/annotate/instructions.c
+++ b/tools/perf/arch/s390/annotate/instructions.c
@@ -164,8 +164,10 @@ static int s390__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
164 if (!arch->initialized) { 164 if (!arch->initialized) {
165 arch->initialized = true; 165 arch->initialized = true;
166 arch->associate_instruction_ops = s390__associate_ins_ops; 166 arch->associate_instruction_ops = s390__associate_ins_ops;
167 if (cpuid) 167 if (cpuid) {
168 err = s390__cpuid_parse(arch, cpuid); 168 if (s390__cpuid_parse(arch, cpuid))
169 err = SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING;
170 }
169 } 171 }
170 172
171 return err; 173 return err;
diff --git a/tools/perf/arch/s390/util/header.c b/tools/perf/arch/s390/util/header.c
index 8b0b018d896a..7933f6871c81 100644
--- a/tools/perf/arch/s390/util/header.c
+++ b/tools/perf/arch/s390/util/header.c
@@ -8,6 +8,7 @@
8 */ 8 */
9 9
10#include <sys/types.h> 10#include <sys/types.h>
11#include <errno.h>
11#include <unistd.h> 12#include <unistd.h>
12#include <stdio.h> 13#include <stdio.h>
13#include <string.h> 14#include <string.h>
@@ -54,7 +55,7 @@ int get_cpuid(char *buffer, size_t sz)
54 55
55 sysinfo = fopen(SYSINFO, "r"); 56 sysinfo = fopen(SYSINFO, "r");
56 if (sysinfo == NULL) 57 if (sysinfo == NULL)
57 return -1; 58 return errno;
58 59
59 while ((read = getline(&line, &line_sz, sysinfo)) != -1) { 60 while ((read = getline(&line, &line_sz, sysinfo)) != -1) {
60 if (!strncmp(line, SYSINFO_MANU, strlen(SYSINFO_MANU))) { 61 if (!strncmp(line, SYSINFO_MANU, strlen(SYSINFO_MANU))) {
@@ -89,7 +90,7 @@ int get_cpuid(char *buffer, size_t sz)
89 90
90 /* Missing manufacturer, type or model information should not happen */ 91 /* Missing manufacturer, type or model information should not happen */
91 if (!manufacturer[0] || !type[0] || !model[0]) 92 if (!manufacturer[0] || !type[0] || !model[0])
92 return -1; 93 return EINVAL;
93 94
94 /* 95 /*
95 * Scan /proc/service_levels and return the CPU-MF counter facility 96 * Scan /proc/service_levels and return the CPU-MF counter facility
@@ -133,14 +134,14 @@ skip_sysinfo:
133 else 134 else
134 nbytes = snprintf(buffer, sz, "%s,%s,%s", manufacturer, type, 135 nbytes = snprintf(buffer, sz, "%s,%s,%s", manufacturer, type,
135 model); 136 model);
136 return (nbytes >= sz) ? -1 : 0; 137 return (nbytes >= sz) ? ENOBUFS : 0;
137} 138}
138 139
139char *get_cpuid_str(struct perf_pmu *pmu __maybe_unused) 140char *get_cpuid_str(struct perf_pmu *pmu __maybe_unused)
140{ 141{
141 char *buf = malloc(128); 142 char *buf = malloc(128);
142 143
143 if (buf && get_cpuid(buf, 128) < 0) 144 if (buf && get_cpuid(buf, 128))
144 zfree(&buf); 145 zfree(&buf);
145 return buf; 146 return buf;
146} 147}
diff --git a/tools/perf/arch/x86/annotate/instructions.c b/tools/perf/arch/x86/annotate/instructions.c
index 44f5aba78210..7eb5621c021d 100644
--- a/tools/perf/arch/x86/annotate/instructions.c
+++ b/tools/perf/arch/x86/annotate/instructions.c
@@ -196,8 +196,10 @@ static int x86__annotate_init(struct arch *arch, char *cpuid)
196 if (arch->initialized) 196 if (arch->initialized)
197 return 0; 197 return 0;
198 198
199 if (cpuid) 199 if (cpuid) {
200 err = x86__cpuid_parse(arch, cpuid); 200 if (x86__cpuid_parse(arch, cpuid))
201 err = SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING;
202 }
201 203
202 arch->initialized = true; 204 arch->initialized = true;
203 return err; 205 return err;
diff --git a/tools/perf/arch/x86/util/header.c b/tools/perf/arch/x86/util/header.c
index 662ecf84a421..aa6deb463bf3 100644
--- a/tools/perf/arch/x86/util/header.c
+++ b/tools/perf/arch/x86/util/header.c
@@ -1,5 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0 1// SPDX-License-Identifier: GPL-2.0
2#include <sys/types.h> 2#include <sys/types.h>
3#include <errno.h>
3#include <unistd.h> 4#include <unistd.h>
4#include <stdio.h> 5#include <stdio.h>
5#include <stdlib.h> 6#include <stdlib.h>
@@ -58,7 +59,7 @@ __get_cpuid(char *buffer, size_t sz, const char *fmt)
58 buffer[nb-1] = '\0'; 59 buffer[nb-1] = '\0';
59 return 0; 60 return 0;
60 } 61 }
61 return -1; 62 return ENOBUFS;
62} 63}
63 64
64int 65int
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 2227e2f42c09..58a9e0989491 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -705,14 +705,15 @@ static int process_sample_event(struct perf_tool *tool,
705 705
706static int cpu_isa_config(struct perf_kvm_stat *kvm) 706static int cpu_isa_config(struct perf_kvm_stat *kvm)
707{ 707{
708 char buf[64], *cpuid; 708 char buf[128], *cpuid;
709 int err; 709 int err;
710 710
711 if (kvm->live) { 711 if (kvm->live) {
712 err = get_cpuid(buf, sizeof(buf)); 712 err = get_cpuid(buf, sizeof(buf));
713 if (err != 0) { 713 if (err != 0) {
714 pr_err("Failed to look up CPU type\n"); 714 pr_err("Failed to look up CPU type: %s\n",
715 return err; 715 str_error_r(err, buf, sizeof(buf)));
716 return -err;
716 } 717 }
717 cpuid = buf; 718 cpuid = buf;
718 } else 719 } else
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 286fc70d7402..67be8d31afab 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -1063,7 +1063,7 @@ static int perf_sample__fprintf_brstackinsn(struct perf_sample *sample,
1063 continue; 1063 continue;
1064 1064
1065 insn = 0; 1065 insn = 0;
1066 for (off = 0;; off += ilen) { 1066 for (off = 0; off < (unsigned)len; off += ilen) {
1067 uint64_t ip = start + off; 1067 uint64_t ip = start + off;
1068 1068
1069 printed += ip__fprintf_sym(ip, thread, x.cpumode, x.cpu, &lastsym, attr, fp); 1069 printed += ip__fprintf_sym(ip, thread, x.cpumode, x.cpu, &lastsym, attr, fp);
@@ -1074,6 +1074,7 @@ static int perf_sample__fprintf_brstackinsn(struct perf_sample *sample,
1074 printed += print_srccode(thread, x.cpumode, ip); 1074 printed += print_srccode(thread, x.cpumode, ip);
1075 break; 1075 break;
1076 } else { 1076 } else {
1077 ilen = 0;
1077 printed += fprintf(fp, "\t%016" PRIx64 "\t%s\n", ip, 1078 printed += fprintf(fp, "\t%016" PRIx64 "\t%s\n", ip,
1078 dump_insn(&x, ip, buffer + off, len - off, &ilen)); 1079 dump_insn(&x, ip, buffer + off, len - off, &ilen));
1079 if (ilen == 0) 1080 if (ilen == 0)
@@ -1083,6 +1084,8 @@ static int perf_sample__fprintf_brstackinsn(struct perf_sample *sample,
1083 insn++; 1084 insn++;
1084 } 1085 }
1085 } 1086 }
1087 if (off != (unsigned)len)
1088 printed += fprintf(fp, "\tmismatch of LBR data and executable\n");
1086 } 1089 }
1087 1090
1088 /* 1091 /*
@@ -1123,6 +1126,7 @@ static int perf_sample__fprintf_brstackinsn(struct perf_sample *sample,
1123 goto out; 1126 goto out;
1124 } 1127 }
1125 for (off = 0; off <= end - start; off += ilen) { 1128 for (off = 0; off <= end - start; off += ilen) {
1129 ilen = 0;
1126 printed += fprintf(fp, "\t%016" PRIx64 "\t%s\n", start + off, 1130 printed += fprintf(fp, "\t%016" PRIx64 "\t%s\n", start + off,
1127 dump_insn(&x, start + off, buffer + off, len - off, &ilen)); 1131 dump_insn(&x, start + off, buffer + off, len - off, &ilen));
1128 if (ilen == 0) 1132 if (ilen == 0)
diff --git a/tools/perf/check-headers.sh b/tools/perf/check-headers.sh
index e2e0f06c97d0..cea13cb987d0 100755
--- a/tools/perf/check-headers.sh
+++ b/tools/perf/check-headers.sh
@@ -8,6 +8,7 @@ include/uapi/drm/i915_drm.h
8include/uapi/linux/fadvise.h 8include/uapi/linux/fadvise.h
9include/uapi/linux/fcntl.h 9include/uapi/linux/fcntl.h
10include/uapi/linux/fs.h 10include/uapi/linux/fs.h
11include/uapi/linux/fscrypt.h
11include/uapi/linux/kcmp.h 12include/uapi/linux/kcmp.h
12include/uapi/linux/kvm.h 13include/uapi/linux/kvm.h
13include/uapi/linux/in.h 14include/uapi/linux/in.h
diff --git a/tools/perf/pmu-events/arch/s390/cf_m8561/basic.json b/tools/perf/pmu-events/arch/s390/cf_z15/basic.json
index 17fb5241928b..17fb5241928b 100644
--- a/tools/perf/pmu-events/arch/s390/cf_m8561/basic.json
+++ b/tools/perf/pmu-events/arch/s390/cf_z15/basic.json
diff --git a/tools/perf/pmu-events/arch/s390/cf_m8561/crypto.json b/tools/perf/pmu-events/arch/s390/cf_z15/crypto.json
index db286f19e7b6..db286f19e7b6 100644
--- a/tools/perf/pmu-events/arch/s390/cf_m8561/crypto.json
+++ b/tools/perf/pmu-events/arch/s390/cf_z15/crypto.json
diff --git a/tools/perf/pmu-events/arch/s390/cf_m8561/crypto6.json b/tools/perf/pmu-events/arch/s390/cf_z15/crypto6.json
index 5e36bc2468d0..5e36bc2468d0 100644
--- a/tools/perf/pmu-events/arch/s390/cf_m8561/crypto6.json
+++ b/tools/perf/pmu-events/arch/s390/cf_z15/crypto6.json
diff --git a/tools/perf/pmu-events/arch/s390/cf_m8561/extended.json b/tools/perf/pmu-events/arch/s390/cf_z15/extended.json
index 89e070727e1b..89e070727e1b 100644
--- a/tools/perf/pmu-events/arch/s390/cf_m8561/extended.json
+++ b/tools/perf/pmu-events/arch/s390/cf_z15/extended.json
diff --git a/tools/perf/pmu-events/arch/s390/cf_z15/transaction.json b/tools/perf/pmu-events/arch/s390/cf_z15/transaction.json
new file mode 100644
index 000000000000..1a0034f79f73
--- /dev/null
+++ b/tools/perf/pmu-events/arch/s390/cf_z15/transaction.json
@@ -0,0 +1,7 @@
1[
2 {
3 "BriefDescription": "Transaction count",
4 "MetricName": "transaction",
5 "MetricExpr": "TX_C_TEND + TX_NC_TEND + TX_NC_TABORT + TX_C_TABORT_SPECIAL + TX_C_TABORT_NO_SPECIAL"
6 }
7]
diff --git a/tools/perf/pmu-events/arch/s390/mapfile.csv b/tools/perf/pmu-events/arch/s390/mapfile.csv
index bd3fc577139c..61641a3480e0 100644
--- a/tools/perf/pmu-events/arch/s390/mapfile.csv
+++ b/tools/perf/pmu-events/arch/s390/mapfile.csv
@@ -4,4 +4,4 @@ Family-model,Version,Filename,EventType
4^IBM.282[78].*[13]\.[1-5].[[:xdigit:]]+$,1,cf_zec12,core 4^IBM.282[78].*[13]\.[1-5].[[:xdigit:]]+$,1,cf_zec12,core
5^IBM.296[45].*[13]\.[1-5].[[:xdigit:]]+$,1,cf_z13,core 5^IBM.296[45].*[13]\.[1-5].[[:xdigit:]]+$,1,cf_z13,core
6^IBM.390[67].*[13]\.[1-5].[[:xdigit:]]+$,3,cf_z14,core 6^IBM.390[67].*[13]\.[1-5].[[:xdigit:]]+$,3,cf_z14,core
7^IBM.856[12].*3\.6.[[:xdigit:]]+$,3,cf_m8561,core 7^IBM.856[12].*3\.6.[[:xdigit:]]+$,3,cf_z15,core
diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
index 9e37287da924..e2837260ca4d 100644
--- a/tools/perf/pmu-events/jevents.c
+++ b/tools/perf/pmu-events/jevents.c
@@ -450,12 +450,12 @@ static struct fixed {
450 const char *name; 450 const char *name;
451 const char *event; 451 const char *event;
452} fixed[] = { 452} fixed[] = {
453 { "inst_retired.any", "event=0xc0" }, 453 { "inst_retired.any", "event=0xc0,period=2000003" },
454 { "inst_retired.any_p", "event=0xc0" }, 454 { "inst_retired.any_p", "event=0xc0,period=2000003" },
455 { "cpu_clk_unhalted.ref", "event=0x0,umask=0x03" }, 455 { "cpu_clk_unhalted.ref", "event=0x0,umask=0x03,period=2000003" },
456 { "cpu_clk_unhalted.thread", "event=0x3c" }, 456 { "cpu_clk_unhalted.thread", "event=0x3c,period=2000003" },
457 { "cpu_clk_unhalted.core", "event=0x3c" }, 457 { "cpu_clk_unhalted.core", "event=0x3c,period=2000003" },
458 { "cpu_clk_unhalted.thread_any", "event=0x3c,any=1" }, 458 { "cpu_clk_unhalted.thread_any", "event=0x3c,any=1,period=2000003" },
459 { NULL, NULL}, 459 { NULL, NULL},
460}; 460};
461 461
diff --git a/tools/perf/tests/perf-hooks.c b/tools/perf/tests/perf-hooks.c
index dbc27199c65e..dd865e0bea12 100644
--- a/tools/perf/tests/perf-hooks.c
+++ b/tools/perf/tests/perf-hooks.c
@@ -19,12 +19,11 @@ static void sigsegv_handler(int sig __maybe_unused)
19static void the_hook(void *_hook_flags) 19static void the_hook(void *_hook_flags)
20{ 20{
21 int *hook_flags = _hook_flags; 21 int *hook_flags = _hook_flags;
22 int *p = NULL;
23 22
24 *hook_flags = 1234; 23 *hook_flags = 1234;
25 24
26 /* Generate a segfault, test perf_hooks__recover */ 25 /* Generate a segfault, test perf_hooks__recover */
27 *p = 0; 26 raise(SIGSEGV);
28} 27}
29 28
30int test__perf_hooks(struct test *test __maybe_unused, int subtest __maybe_unused) 29int test__perf_hooks(struct test *test __maybe_unused, int subtest __maybe_unused)
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index e830eadfca2a..4036c7f7b0fb 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1631,6 +1631,19 @@ int symbol__strerror_disassemble(struct symbol *sym __maybe_unused, struct map *
1631 case SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF: 1631 case SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF:
1632 scnprintf(buf, buflen, "Please link with binutils's libopcode to enable BPF annotation"); 1632 scnprintf(buf, buflen, "Please link with binutils's libopcode to enable BPF annotation");
1633 break; 1633 break;
1634 case SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_REGEXP:
1635 scnprintf(buf, buflen, "Problems with arch specific instruction name regular expressions.");
1636 break;
1637 case SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING:
1638 scnprintf(buf, buflen, "Problems while parsing the CPUID in the arch specific initialization.");
1639 break;
1640 case SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE:
1641 scnprintf(buf, buflen, "Invalid BPF file: %s.", dso->long_name);
1642 break;
1643 case SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF:
1644 scnprintf(buf, buflen, "The %s BPF file has no BTF section, compile with -g or use pahole -J.",
1645 dso->long_name);
1646 break;
1634 default: 1647 default:
1635 scnprintf(buf, buflen, "Internal error: Invalid %d error code\n", errnum); 1648 scnprintf(buf, buflen, "Internal error: Invalid %d error code\n", errnum);
1636 break; 1649 break;
@@ -1662,7 +1675,7 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
1662 1675
1663 build_id_path = strdup(filename); 1676 build_id_path = strdup(filename);
1664 if (!build_id_path) 1677 if (!build_id_path)
1665 return -1; 1678 return ENOMEM;
1666 1679
1667 /* 1680 /*
1668 * old style build-id cache has name of XX/XXXXXXX.. while 1681 * old style build-id cache has name of XX/XXXXXXX.. while
@@ -1713,13 +1726,13 @@ static int symbol__disassemble_bpf(struct symbol *sym,
1713 char tpath[PATH_MAX]; 1726 char tpath[PATH_MAX];
1714 size_t buf_size; 1727 size_t buf_size;
1715 int nr_skip = 0; 1728 int nr_skip = 0;
1716 int ret = -1;
1717 char *buf; 1729 char *buf;
1718 bfd *bfdf; 1730 bfd *bfdf;
1731 int ret;
1719 FILE *s; 1732 FILE *s;
1720 1733
1721 if (dso->binary_type != DSO_BINARY_TYPE__BPF_PROG_INFO) 1734 if (dso->binary_type != DSO_BINARY_TYPE__BPF_PROG_INFO)
1722 return -1; 1735 return SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE;
1723 1736
1724 pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__, 1737 pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__,
1725 sym->name, sym->start, sym->end - sym->start); 1738 sym->name, sym->start, sym->end - sym->start);
@@ -1732,8 +1745,10 @@ static int symbol__disassemble_bpf(struct symbol *sym,
1732 assert(bfd_check_format(bfdf, bfd_object)); 1745 assert(bfd_check_format(bfdf, bfd_object));
1733 1746
1734 s = open_memstream(&buf, &buf_size); 1747 s = open_memstream(&buf, &buf_size);
1735 if (!s) 1748 if (!s) {
1749 ret = errno;
1736 goto out; 1750 goto out;
1751 }
1737 init_disassemble_info(&info, s, 1752 init_disassemble_info(&info, s,
1738 (fprintf_ftype) fprintf); 1753 (fprintf_ftype) fprintf);
1739 1754
@@ -1742,8 +1757,10 @@ static int symbol__disassemble_bpf(struct symbol *sym,
1742 1757
1743 info_node = perf_env__find_bpf_prog_info(dso->bpf_prog.env, 1758 info_node = perf_env__find_bpf_prog_info(dso->bpf_prog.env,
1744 dso->bpf_prog.id); 1759 dso->bpf_prog.id);
1745 if (!info_node) 1760 if (!info_node) {
1761 return SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF;
1746 goto out; 1762 goto out;
1763 }
1747 info_linear = info_node->info_linear; 1764 info_linear = info_node->info_linear;
1748 sub_id = dso->bpf_prog.sub_id; 1765 sub_id = dso->bpf_prog.sub_id;
1749 1766
@@ -2071,11 +2088,11 @@ int symbol__annotate(struct symbol *sym, struct map *map,
2071 int err; 2088 int err;
2072 2089
2073 if (!arch_name) 2090 if (!arch_name)
2074 return -1; 2091 return errno;
2075 2092
2076 args.arch = arch = arch__find(arch_name); 2093 args.arch = arch = arch__find(arch_name);
2077 if (arch == NULL) 2094 if (arch == NULL)
2078 return -ENOTSUP; 2095 return ENOTSUP;
2079 2096
2080 if (parch) 2097 if (parch)
2081 *parch = arch; 2098 *parch = arch;
@@ -2971,7 +2988,7 @@ int symbol__annotate2(struct symbol *sym, struct map *map, struct evsel *evsel,
2971 2988
2972 notes->offsets = zalloc(size * sizeof(struct annotation_line *)); 2989 notes->offsets = zalloc(size * sizeof(struct annotation_line *));
2973 if (notes->offsets == NULL) 2990 if (notes->offsets == NULL)
2974 return -1; 2991 return ENOMEM;
2975 2992
2976 if (perf_evsel__is_group_event(evsel)) 2993 if (perf_evsel__is_group_event(evsel))
2977 nr_pcnt = evsel->core.nr_members; 2994 nr_pcnt = evsel->core.nr_members;
@@ -2997,7 +3014,7 @@ int symbol__annotate2(struct symbol *sym, struct map *map, struct evsel *evsel,
2997 3014
2998out_free_offsets: 3015out_free_offsets:
2999 zfree(&notes->offsets); 3016 zfree(&notes->offsets);
3000 return -1; 3017 return err;
3001} 3018}
3002 3019
3003#define ANNOTATION__CFG(n) \ 3020#define ANNOTATION__CFG(n) \
diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
index d94be9140e31..d76fd0e81f46 100644
--- a/tools/perf/util/annotate.h
+++ b/tools/perf/util/annotate.h
@@ -370,6 +370,10 @@ enum symbol_disassemble_errno {
370 370
371 SYMBOL_ANNOTATE_ERRNO__NO_VMLINUX = __SYMBOL_ANNOTATE_ERRNO__START, 371 SYMBOL_ANNOTATE_ERRNO__NO_VMLINUX = __SYMBOL_ANNOTATE_ERRNO__START,
372 SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF, 372 SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF,
373 SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING,
374 SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_REGEXP,
375 SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE,
376 SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF,
373 377
374 __SYMBOL_ANNOTATE_ERRNO__END, 378 __SYMBOL_ANNOTATE_ERRNO__END,
375}; 379};
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 5591af81a070..abc7fda4a0fe 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -30,6 +30,7 @@
30#include "counts.h" 30#include "counts.h"
31#include "event.h" 31#include "event.h"
32#include "evsel.h" 32#include "evsel.h"
33#include "util/env.h"
33#include "util/evsel_config.h" 34#include "util/evsel_config.h"
34#include "util/evsel_fprintf.h" 35#include "util/evsel_fprintf.h"
35#include "evlist.h" 36#include "evlist.h"
@@ -2512,7 +2513,7 @@ struct perf_env *perf_evsel__env(struct evsel *evsel)
2512{ 2513{
2513 if (evsel && evsel->evlist) 2514 if (evsel && evsel->evlist)
2514 return evsel->evlist->env; 2515 return evsel->evlist->env;
2515 return NULL; 2516 return &perf_env;
2516} 2517}
2517 2518
2518static int store_evsel_ids(struct evsel *evsel, struct evlist *evlist) 2519static int store_evsel_ids(struct evsel *evsel, struct evlist *evlist)
diff --git a/tools/perf/util/jitdump.c b/tools/perf/util/jitdump.c
index 1bdf4c6ea3e5..e3ccb0ce1938 100644
--- a/tools/perf/util/jitdump.c
+++ b/tools/perf/util/jitdump.c
@@ -395,7 +395,7 @@ static int jit_repipe_code_load(struct jit_buf_desc *jd, union jr_entry *jr)
395 size_t size; 395 size_t size;
396 u16 idr_size; 396 u16 idr_size;
397 const char *sym; 397 const char *sym;
398 uint32_t count; 398 uint64_t count;
399 int ret, csize, usize; 399 int ret, csize, usize;
400 pid_t pid, tid; 400 pid_t pid, tid;
401 struct { 401 struct {
@@ -418,7 +418,7 @@ static int jit_repipe_code_load(struct jit_buf_desc *jd, union jr_entry *jr)
418 return -1; 418 return -1;
419 419
420 filename = event->mmap2.filename; 420 filename = event->mmap2.filename;
421 size = snprintf(filename, PATH_MAX, "%s/jitted-%d-%u.so", 421 size = snprintf(filename, PATH_MAX, "%s/jitted-%d-%" PRIu64 ".so",
422 jd->dir, 422 jd->dir,
423 pid, 423 pid,
424 count); 424 count);
@@ -529,7 +529,7 @@ static int jit_repipe_code_move(struct jit_buf_desc *jd, union jr_entry *jr)
529 return -1; 529 return -1;
530 530
531 filename = event->mmap2.filename; 531 filename = event->mmap2.filename;
532 size = snprintf(filename, PATH_MAX, "%s/jitted-%d-%"PRIu64, 532 size = snprintf(filename, PATH_MAX, "%s/jitted-%d-%" PRIu64 ".so",
533 jd->dir, 533 jd->dir,
534 pid, 534 pid,
535 jr->move.code_index); 535 jr->move.code_index);
diff --git a/tools/perf/util/llvm-utils.c b/tools/perf/util/llvm-utils.c
index 8d04e3d070b1..8b14e4a7f1dc 100644
--- a/tools/perf/util/llvm-utils.c
+++ b/tools/perf/util/llvm-utils.c
@@ -233,14 +233,14 @@ static int detect_kbuild_dir(char **kbuild_dir)
233 const char *prefix_dir = ""; 233 const char *prefix_dir = "";
234 const char *suffix_dir = ""; 234 const char *suffix_dir = "";
235 235
236 /* _UTSNAME_LENGTH is 65 */
237 char release[128];
238
236 char *autoconf_path; 239 char *autoconf_path;
237 240
238 int err; 241 int err;
239 242
240 if (!test_dir) { 243 if (!test_dir) {
241 /* _UTSNAME_LENGTH is 65 */
242 char release[128];
243
244 err = fetch_kernel_version(NULL, release, 244 err = fetch_kernel_version(NULL, release,
245 sizeof(release)); 245 sizeof(release));
246 if (err) 246 if (err)
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
index 5b83ed1ebbd6..eec9b282c047 100644
--- a/tools/perf/util/map.c
+++ b/tools/perf/util/map.c
@@ -1,5 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0 1// SPDX-License-Identifier: GPL-2.0
2#include "symbol.h" 2#include "symbol.h"
3#include <assert.h>
3#include <errno.h> 4#include <errno.h>
4#include <inttypes.h> 5#include <inttypes.h>
5#include <limits.h> 6#include <limits.h>
@@ -850,6 +851,8 @@ static int maps__fixup_overlappings(struct maps *maps, struct map *map, FILE *fp
850 } 851 }
851 852
852 after->start = map->end; 853 after->start = map->end;
854 after->pgoff += map->end - pos->start;
855 assert(pos->map_ip(pos, map->end) == after->map_ip(after, map->end));
853 __map_groups__insert(pos->groups, after); 856 __map_groups__insert(pos->groups, after);
854 if (verbose >= 2 && !use_browser) 857 if (verbose >= 2 && !use_browser)
855 map__fprintf(after, fp); 858 map__fprintf(after, fp);
diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c
index 53f31053a27a..02460362256d 100644
--- a/tools/perf/util/python.c
+++ b/tools/perf/util/python.c
@@ -14,6 +14,7 @@
14#include "thread_map.h" 14#include "thread_map.h"
15#include "trace-event.h" 15#include "trace-event.h"
16#include "mmap.h" 16#include "mmap.h"
17#include "util/env.h"
17#include <internal/lib.h> 18#include <internal/lib.h>
18#include "../perf-sys.h" 19#include "../perf-sys.h"
19 20
@@ -54,6 +55,11 @@ int parse_callchain_record(const char *arg __maybe_unused,
54} 55}
55 56
56/* 57/*
58 * Add this one here not to drag util/env.c
59 */
60struct perf_env perf_env;
61
62/*
57 * Support debug printing even though util/debug.c is not linked. That means 63 * Support debug printing even though util/debug.c is not linked. That means
58 * implementing 'verbose' and 'eprintf'. 64 * implementing 'verbose' and 'eprintf'.
59 */ 65 */