Commit b229b6ca authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'perf-tools-fixes-for-v6.1-2022-10-26' of...

Merge tag 'perf-tools-fixes-for-v6.1-2022-10-26' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux

Pull perf tool fixes from Arnaldo Carvalho de Melo:

 - Fix some aspects of building with an older (than the one in the
   kernel sources) libbpf present in a distro, when building with
   LIBBPF_DYNAMIC=1.

 - Fix errno setting races with event_fd and the signal handler in 'perf
   record'.

 - Fix Power10 hv-24x7 metric events when some events may have a zero
   count based on system configuration.

 - Do not fail Intel-PT misc test w/o libpython, just skip it.

 - Fix incorrect arm64 Hisi hip08 L3 metrics (IF_BP_MISP_BR_RET,
   IF_BP_MISP_BR_RET, IF_BP_MISP_BR_BL) due to mistakes in the
   documentation used to generate the JSON files for these metrics.

 - Fix auxtrace (Intel PT, ARM Coresight) address filter symbol name
   match for modules, we need to skip the module name.

 - Sync copies of files with the kernel sources, including ppc syscall
   tables and assorted headers, some resulting in tools being able to
   decode new network protocols (IPPROTO_L2TP) and statx masks
   (STATX_DIOALIGN).

 - Fix PMU name pai_crypto in the vendor events file (JSON) for s390.

 - Fix man page build wrt perf-arm-coresight.txt as the build process
   assumes files starting with 'perf-' are man pages, and this file
   isn't one.

* tag 'perf-tools-fixes-for-v6.1-2022-10-26' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux:
  perf vendor events arm64: Fix incorrect Hisi hip08 L3 metrics
  perf auxtrace: Fix address filter symbol name match for modules
  tools headers UAPI: Sync linux/perf_event.h with the kernel sources
  tools headers cpufeatures: Sync with the kernel sources
  tools headers uapi: Sync linux/stat.h with the kernel sources
  tools include UAPI: Sync sound/asound.h copy with the kernel sources
  tools headers uapi: Update linux/in.h copy
  tools headers: Update the copy of x86's memcpy_64.S used in 'perf bench'
  tools headers arm64: Sync arm64's cputype.h with the kernel sources
  perf test: Do not fail Intel-PT misc test w/o libpython
  perf list: Fix PMU name pai_crypto in perf list on s390
  perf record: Fix event fd races
  perf bpf: Fix build with libbpf 0.7.0 by checking if bpf_program__set_insns() is available
  perf bpf: Fix build with libbpf 0.7.0 by adding prototype for bpf_load_program()
  perf vendor events power10: Fix hv-24x7 metric events
  perf docs: Fix man page build wrt perf-arm-coresight.txt
  tools headers UAPI: Sync powerpc syscall tables with the kernel sources
parents a2718383 e9229d5b
...@@ -60,6 +60,7 @@ ...@@ -60,6 +60,7 @@
#define ARM_CPU_IMP_FUJITSU 0x46 #define ARM_CPU_IMP_FUJITSU 0x46
#define ARM_CPU_IMP_HISI 0x48 #define ARM_CPU_IMP_HISI 0x48
#define ARM_CPU_IMP_APPLE 0x61 #define ARM_CPU_IMP_APPLE 0x61
#define ARM_CPU_IMP_AMPERE 0xC0
#define ARM_CPU_PART_AEM_V8 0xD0F #define ARM_CPU_PART_AEM_V8 0xD0F
#define ARM_CPU_PART_FOUNDATION 0xD00 #define ARM_CPU_PART_FOUNDATION 0xD00
...@@ -123,6 +124,8 @@ ...@@ -123,6 +124,8 @@
#define APPLE_CPU_PART_M1_ICESTORM_MAX 0x028 #define APPLE_CPU_PART_M1_ICESTORM_MAX 0x028
#define APPLE_CPU_PART_M1_FIRESTORM_MAX 0x029 #define APPLE_CPU_PART_M1_FIRESTORM_MAX 0x029
#define AMPERE_CPU_PART_AMPERE1 0xAC3
#define MIDR_CORTEX_A53 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A53) #define MIDR_CORTEX_A53 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A53)
#define MIDR_CORTEX_A57 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A57) #define MIDR_CORTEX_A57 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A57)
#define MIDR_CORTEX_A72 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A72) #define MIDR_CORTEX_A72 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A72)
...@@ -172,6 +175,7 @@ ...@@ -172,6 +175,7 @@
#define MIDR_APPLE_M1_FIRESTORM_PRO MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_FIRESTORM_PRO) #define MIDR_APPLE_M1_FIRESTORM_PRO MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_FIRESTORM_PRO)
#define MIDR_APPLE_M1_ICESTORM_MAX MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_ICESTORM_MAX) #define MIDR_APPLE_M1_ICESTORM_MAX MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_ICESTORM_MAX)
#define MIDR_APPLE_M1_FIRESTORM_MAX MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_FIRESTORM_MAX) #define MIDR_APPLE_M1_FIRESTORM_MAX MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_FIRESTORM_MAX)
#define MIDR_AMPERE1 MIDR_CPU_MODEL(ARM_CPU_IMP_AMPERE, AMPERE_CPU_PART_AMPERE1)
/* Fujitsu Erratum 010001 affects A64FX 1.0 and 1.1, (v0r0 and v1r0) */ /* Fujitsu Erratum 010001 affects A64FX 1.0 and 1.1, (v0r0 and v1r0) */
#define MIDR_FUJITSU_ERRATUM_010001 MIDR_FUJITSU_A64FX #define MIDR_FUJITSU_ERRATUM_010001 MIDR_FUJITSU_A64FX
......
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
#define X86_FEATURE_SYSCALL32 ( 3*32+14) /* "" syscall in IA32 userspace */ #define X86_FEATURE_SYSCALL32 ( 3*32+14) /* "" syscall in IA32 userspace */
#define X86_FEATURE_SYSENTER32 ( 3*32+15) /* "" sysenter in IA32 userspace */ #define X86_FEATURE_SYSENTER32 ( 3*32+15) /* "" sysenter in IA32 userspace */
#define X86_FEATURE_REP_GOOD ( 3*32+16) /* REP microcode works well */ #define X86_FEATURE_REP_GOOD ( 3*32+16) /* REP microcode works well */
/* FREE! ( 3*32+17) */ #define X86_FEATURE_AMD_LBR_V2 ( 3*32+17) /* AMD Last Branch Record Extension Version 2 */
#define X86_FEATURE_LFENCE_RDTSC ( 3*32+18) /* "" LFENCE synchronizes RDTSC */ #define X86_FEATURE_LFENCE_RDTSC ( 3*32+18) /* "" LFENCE synchronizes RDTSC */
#define X86_FEATURE_ACC_POWER ( 3*32+19) /* AMD Accumulated Power Mechanism */ #define X86_FEATURE_ACC_POWER ( 3*32+19) /* AMD Accumulated Power Mechanism */
#define X86_FEATURE_NOPL ( 3*32+20) /* The NOPL (0F 1F) instructions */ #define X86_FEATURE_NOPL ( 3*32+20) /* The NOPL (0F 1F) instructions */
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
* Output: * Output:
* rax original destination * rax original destination
*/ */
SYM_FUNC_START(__memcpy) SYM_TYPED_FUNC_START(__memcpy)
ALTERNATIVE_2 "jmp memcpy_orig", "", X86_FEATURE_REP_GOOD, \ ALTERNATIVE_2 "jmp memcpy_orig", "", X86_FEATURE_REP_GOOD, \
"jmp memcpy_erms", X86_FEATURE_ERMS "jmp memcpy_erms", X86_FEATURE_ERMS
......
...@@ -103,6 +103,7 @@ FEATURE_TESTS_EXTRA := \ ...@@ -103,6 +103,7 @@ FEATURE_TESTS_EXTRA := \
libbpf-bpf_prog_load \ libbpf-bpf_prog_load \
libbpf-bpf_object__next_program \ libbpf-bpf_object__next_program \
libbpf-bpf_object__next_map \ libbpf-bpf_object__next_map \
libbpf-bpf_program__set_insns \
libbpf-bpf_create_map \ libbpf-bpf_create_map \
libpfm4 \ libpfm4 \
libdebuginfod \ libdebuginfod \
......
...@@ -63,6 +63,7 @@ FILES= \ ...@@ -63,6 +63,7 @@ FILES= \
test-libbpf-bpf_map_create.bin \ test-libbpf-bpf_map_create.bin \
test-libbpf-bpf_object__next_program.bin \ test-libbpf-bpf_object__next_program.bin \
test-libbpf-bpf_object__next_map.bin \ test-libbpf-bpf_object__next_map.bin \
test-libbpf-bpf_program__set_insns.bin \
test-libbpf-btf__raw_data.bin \ test-libbpf-btf__raw_data.bin \
test-get_cpuid.bin \ test-get_cpuid.bin \
test-sdt.bin \ test-sdt.bin \
...@@ -316,6 +317,9 @@ $(OUTPUT)test-libbpf-bpf_object__next_program.bin: ...@@ -316,6 +317,9 @@ $(OUTPUT)test-libbpf-bpf_object__next_program.bin:
$(OUTPUT)test-libbpf-bpf_object__next_map.bin: $(OUTPUT)test-libbpf-bpf_object__next_map.bin:
$(BUILD) -lbpf $(BUILD) -lbpf
$(OUTPUT)test-libbpf-bpf_program__set_insns.bin:
$(BUILD) -lbpf
$(OUTPUT)test-libbpf-btf__raw_data.bin: $(OUTPUT)test-libbpf-btf__raw_data.bin:
$(BUILD) -lbpf $(BUILD) -lbpf
......
// SPDX-License-Identifier: GPL-2.0
#include <bpf/libbpf.h>
int main(void)
{
bpf_program__set_insns(NULL /* prog */, NULL /* new_insns */, 0 /* new_insn_cnt */);
return 0;
}
...@@ -68,6 +68,8 @@ enum { ...@@ -68,6 +68,8 @@ enum {
#define IPPROTO_PIM IPPROTO_PIM #define IPPROTO_PIM IPPROTO_PIM
IPPROTO_COMP = 108, /* Compression Header Protocol */ IPPROTO_COMP = 108, /* Compression Header Protocol */
#define IPPROTO_COMP IPPROTO_COMP #define IPPROTO_COMP IPPROTO_COMP
IPPROTO_L2TP = 115, /* Layer 2 Tunnelling Protocol */
#define IPPROTO_L2TP IPPROTO_L2TP
IPPROTO_SCTP = 132, /* Stream Control Transport Protocol */ IPPROTO_SCTP = 132, /* Stream Control Transport Protocol */
#define IPPROTO_SCTP IPPROTO_SCTP #define IPPROTO_SCTP IPPROTO_SCTP
IPPROTO_UDPLITE = 136, /* UDP-Lite (RFC 3828) */ IPPROTO_UDPLITE = 136, /* UDP-Lite (RFC 3828) */
...@@ -188,21 +190,13 @@ struct ip_mreq_source { ...@@ -188,21 +190,13 @@ struct ip_mreq_source {
}; };
struct ip_msfilter { struct ip_msfilter {
__be32 imsf_multiaddr;
__be32 imsf_interface;
__u32 imsf_fmode;
__u32 imsf_numsrc;
union { union {
struct { __be32 imsf_slist[1];
__be32 imsf_multiaddr_aux; __DECLARE_FLEX_ARRAY(__be32, imsf_slist_flex);
__be32 imsf_interface_aux;
__u32 imsf_fmode_aux;
__u32 imsf_numsrc_aux;
__be32 imsf_slist[1];
};
struct {
__be32 imsf_multiaddr;
__be32 imsf_interface;
__u32 imsf_fmode;
__u32 imsf_numsrc;
__be32 imsf_slist_flex[];
};
}; };
}; };
......
...@@ -164,8 +164,6 @@ enum perf_event_sample_format { ...@@ -164,8 +164,6 @@ enum perf_event_sample_format {
PERF_SAMPLE_WEIGHT_STRUCT = 1U << 24, PERF_SAMPLE_WEIGHT_STRUCT = 1U << 24,
PERF_SAMPLE_MAX = 1U << 25, /* non-ABI */ PERF_SAMPLE_MAX = 1U << 25, /* non-ABI */
__PERF_SAMPLE_CALLCHAIN_EARLY = 1ULL << 63, /* non-ABI; internal use */
}; };
#define PERF_SAMPLE_WEIGHT_TYPE (PERF_SAMPLE_WEIGHT | PERF_SAMPLE_WEIGHT_STRUCT) #define PERF_SAMPLE_WEIGHT_TYPE (PERF_SAMPLE_WEIGHT | PERF_SAMPLE_WEIGHT_STRUCT)
...@@ -263,6 +261,17 @@ enum { ...@@ -263,6 +261,17 @@ enum {
PERF_BR_MAX, PERF_BR_MAX,
}; };
/*
* Common branch speculation outcome classification
*/
enum {
PERF_BR_SPEC_NA = 0, /* Not available */
PERF_BR_SPEC_WRONG_PATH = 1, /* Speculative but on wrong path */
PERF_BR_NON_SPEC_CORRECT_PATH = 2, /* Non-speculative but on correct path */
PERF_BR_SPEC_CORRECT_PATH = 3, /* Speculative and on correct path */
PERF_BR_SPEC_MAX,
};
enum { enum {
PERF_BR_NEW_FAULT_ALGN = 0, /* Alignment fault */ PERF_BR_NEW_FAULT_ALGN = 0, /* Alignment fault */
PERF_BR_NEW_FAULT_DATA = 1, /* Data fault */ PERF_BR_NEW_FAULT_DATA = 1, /* Data fault */
...@@ -282,11 +291,11 @@ enum { ...@@ -282,11 +291,11 @@ enum {
PERF_BR_PRIV_HV = 3, PERF_BR_PRIV_HV = 3,
}; };
#define PERF_BR_ARM64_FIQ PERF_BR_NEW_ARCH_1 #define PERF_BR_ARM64_FIQ PERF_BR_NEW_ARCH_1
#define PERF_BR_ARM64_DEBUG_HALT PERF_BR_NEW_ARCH_2 #define PERF_BR_ARM64_DEBUG_HALT PERF_BR_NEW_ARCH_2
#define PERF_BR_ARM64_DEBUG_EXIT PERF_BR_NEW_ARCH_3 #define PERF_BR_ARM64_DEBUG_EXIT PERF_BR_NEW_ARCH_3
#define PERF_BR_ARM64_DEBUG_INST PERF_BR_NEW_ARCH_4 #define PERF_BR_ARM64_DEBUG_INST PERF_BR_NEW_ARCH_4
#define PERF_BR_ARM64_DEBUG_DATA PERF_BR_NEW_ARCH_5 #define PERF_BR_ARM64_DEBUG_DATA PERF_BR_NEW_ARCH_5
#define PERF_SAMPLE_BRANCH_PLM_ALL \ #define PERF_SAMPLE_BRANCH_PLM_ALL \
(PERF_SAMPLE_BRANCH_USER|\ (PERF_SAMPLE_BRANCH_USER|\
...@@ -1397,6 +1406,7 @@ union perf_mem_data_src { ...@@ -1397,6 +1406,7 @@ union perf_mem_data_src {
* abort: aborting a hardware transaction * abort: aborting a hardware transaction
* cycles: cycles from last branch (or 0 if not supported) * cycles: cycles from last branch (or 0 if not supported)
* type: branch type * type: branch type
* spec: branch speculation info (or 0 if not supported)
*/ */
struct perf_branch_entry { struct perf_branch_entry {
__u64 from; __u64 from;
...@@ -1407,9 +1417,10 @@ struct perf_branch_entry { ...@@ -1407,9 +1417,10 @@ struct perf_branch_entry {
abort:1, /* transaction abort */ abort:1, /* transaction abort */
cycles:16, /* cycle count to last branch */ cycles:16, /* cycle count to last branch */
type:4, /* branch type */ type:4, /* branch type */
spec:2, /* branch speculation info */
new_type:4, /* additional branch type */ new_type:4, /* additional branch type */
priv:3, /* privilege level */ priv:3, /* privilege level */
reserved:33; reserved:31;
}; };
union perf_sample_weight { union perf_sample_weight {
......
...@@ -124,7 +124,8 @@ struct statx { ...@@ -124,7 +124,8 @@ struct statx {
__u32 stx_dev_minor; __u32 stx_dev_minor;
/* 0x90 */ /* 0x90 */
__u64 stx_mnt_id; __u64 stx_mnt_id;
__u64 __spare2; __u32 stx_dio_mem_align; /* Memory buffer alignment for direct I/O */
__u32 stx_dio_offset_align; /* File offset alignment for direct I/O */
/* 0xa0 */ /* 0xa0 */
__u64 __spare3[12]; /* Spare space for future expansion */ __u64 __spare3[12]; /* Spare space for future expansion */
/* 0x100 */ /* 0x100 */
...@@ -152,6 +153,7 @@ struct statx { ...@@ -152,6 +153,7 @@ struct statx {
#define STATX_BASIC_STATS 0x000007ffU /* The stuff in the normal stat struct */ #define STATX_BASIC_STATS 0x000007ffU /* The stuff in the normal stat struct */
#define STATX_BTIME 0x00000800U /* Want/got stx_btime */ #define STATX_BTIME 0x00000800U /* Want/got stx_btime */
#define STATX_MNT_ID 0x00001000U /* Got stx_mnt_id */ #define STATX_MNT_ID 0x00001000U /* Got stx_mnt_id */
#define STATX_DIOALIGN 0x00002000U /* Want/got direct I/O alignment info */
#define STATX__RESERVED 0x80000000U /* Reserved for future struct statx expansion */ #define STATX__RESERVED 0x80000000U /* Reserved for future struct statx expansion */
......
...@@ -3,22 +3,6 @@ ...@@ -3,22 +3,6 @@
* Advanced Linux Sound Architecture - ALSA - Driver * Advanced Linux Sound Architecture - ALSA - Driver
* Copyright (c) 1994-2003 by Jaroslav Kysela <perex@perex.cz>, * Copyright (c) 1994-2003 by Jaroslav Kysela <perex@perex.cz>,
* Abramo Bagnara <abramo@alsa-project.org> * Abramo Bagnara <abramo@alsa-project.org>
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/ */
#ifndef _UAPI__SOUND_ASOUND_H #ifndef _UAPI__SOUND_ASOUND_H
......
...@@ -588,6 +588,10 @@ ifndef NO_LIBELF ...@@ -588,6 +588,10 @@ ifndef NO_LIBELF
ifeq ($(feature-libbpf-bpf_object__next_map), 1) ifeq ($(feature-libbpf-bpf_object__next_map), 1)
CFLAGS += -DHAVE_LIBBPF_BPF_OBJECT__NEXT_MAP CFLAGS += -DHAVE_LIBBPF_BPF_OBJECT__NEXT_MAP
endif endif
$(call feature_check,libbpf-bpf_program__set_insns)
ifeq ($(feature-libbpf-bpf_program__set_insns), 1)
CFLAGS += -DHAVE_LIBBPF_BPF_PROGRAM__SET_INSNS
endif
$(call feature_check,libbpf-btf__raw_data) $(call feature_check,libbpf-btf__raw_data)
ifeq ($(feature-libbpf-btf__raw_data), 1) ifeq ($(feature-libbpf-btf__raw_data), 1)
CFLAGS += -DHAVE_LIBBPF_BTF__RAW_DATA CFLAGS += -DHAVE_LIBBPF_BTF__RAW_DATA
...@@ -604,6 +608,7 @@ ifndef NO_LIBELF ...@@ -604,6 +608,7 @@ ifndef NO_LIBELF
CFLAGS += -DHAVE_LIBBPF_BPF_PROG_LOAD CFLAGS += -DHAVE_LIBBPF_BPF_PROG_LOAD
CFLAGS += -DHAVE_LIBBPF_BPF_OBJECT__NEXT_PROGRAM CFLAGS += -DHAVE_LIBBPF_BPF_OBJECT__NEXT_PROGRAM
CFLAGS += -DHAVE_LIBBPF_BPF_OBJECT__NEXT_MAP CFLAGS += -DHAVE_LIBBPF_BPF_OBJECT__NEXT_MAP
CFLAGS += -DHAVE_LIBBPF_BPF_PROGRAM__SET_INSNS
CFLAGS += -DHAVE_LIBBPF_BTF__RAW_DATA CFLAGS += -DHAVE_LIBBPF_BTF__RAW_DATA
CFLAGS += -DHAVE_LIBBPF_BPF_MAP_CREATE CFLAGS += -DHAVE_LIBBPF_BPF_MAP_CREATE
endif endif
......
...@@ -228,8 +228,10 @@ ...@@ -228,8 +228,10 @@
176 64 rt_sigtimedwait sys_rt_sigtimedwait 176 64 rt_sigtimedwait sys_rt_sigtimedwait
177 nospu rt_sigqueueinfo sys_rt_sigqueueinfo compat_sys_rt_sigqueueinfo 177 nospu rt_sigqueueinfo sys_rt_sigqueueinfo compat_sys_rt_sigqueueinfo
178 nospu rt_sigsuspend sys_rt_sigsuspend compat_sys_rt_sigsuspend 178 nospu rt_sigsuspend sys_rt_sigsuspend compat_sys_rt_sigsuspend
179 common pread64 sys_pread64 compat_sys_ppc_pread64 179 32 pread64 sys_ppc_pread64 compat_sys_ppc_pread64
180 common pwrite64 sys_pwrite64 compat_sys_ppc_pwrite64 179 64 pread64 sys_pread64
180 32 pwrite64 sys_ppc_pwrite64 compat_sys_ppc_pwrite64
180 64 pwrite64 sys_pwrite64
181 common chown sys_chown 181 common chown sys_chown
182 common getcwd sys_getcwd 182 common getcwd sys_getcwd
183 common capget sys_capget 183 common capget sys_capget
...@@ -242,10 +244,11 @@ ...@@ -242,10 +244,11 @@
188 common putpmsg sys_ni_syscall 188 common putpmsg sys_ni_syscall
189 nospu vfork sys_vfork 189 nospu vfork sys_vfork
190 common ugetrlimit sys_getrlimit compat_sys_getrlimit 190 common ugetrlimit sys_getrlimit compat_sys_getrlimit
191 common readahead sys_readahead compat_sys_ppc_readahead 191 32 readahead sys_ppc_readahead compat_sys_ppc_readahead
191 64 readahead sys_readahead
192 32 mmap2 sys_mmap2 compat_sys_mmap2 192 32 mmap2 sys_mmap2 compat_sys_mmap2
193 32 truncate64 sys_truncate64 compat_sys_ppc_truncate64 193 32 truncate64 sys_ppc_truncate64 compat_sys_ppc_truncate64
194 32 ftruncate64 sys_ftruncate64 compat_sys_ppc_ftruncate64 194 32 ftruncate64 sys_ppc_ftruncate64 compat_sys_ppc_ftruncate64
195 32 stat64 sys_stat64 195 32 stat64 sys_stat64
196 32 lstat64 sys_lstat64 196 32 lstat64 sys_lstat64
197 32 fstat64 sys_fstat64 197 32 fstat64 sys_fstat64
...@@ -288,7 +291,8 @@ ...@@ -288,7 +291,8 @@
230 common io_submit sys_io_submit compat_sys_io_submit 230 common io_submit sys_io_submit compat_sys_io_submit
231 common io_cancel sys_io_cancel 231 common io_cancel sys_io_cancel
232 nospu set_tid_address sys_set_tid_address 232 nospu set_tid_address sys_set_tid_address
233 common fadvise64 sys_fadvise64 compat_sys_ppc32_fadvise64 233 32 fadvise64 sys_ppc32_fadvise64 compat_sys_ppc32_fadvise64
233 64 fadvise64 sys_fadvise64
234 nospu exit_group sys_exit_group 234 nospu exit_group sys_exit_group
235 nospu lookup_dcookie sys_lookup_dcookie compat_sys_lookup_dcookie 235 nospu lookup_dcookie sys_lookup_dcookie compat_sys_lookup_dcookie
236 common epoll_create sys_epoll_create 236 common epoll_create sys_epoll_create
......
...@@ -649,7 +649,7 @@ static int record__pushfn(struct mmap *map, void *to, void *bf, size_t size) ...@@ -649,7 +649,7 @@ static int record__pushfn(struct mmap *map, void *to, void *bf, size_t size)
static volatile int signr = -1; static volatile int signr = -1;
static volatile int child_finished; static volatile int child_finished;
#ifdef HAVE_EVENTFD_SUPPORT #ifdef HAVE_EVENTFD_SUPPORT
static int done_fd = -1; static volatile int done_fd = -1;
#endif #endif
static void sig_handler(int sig) static void sig_handler(int sig)
...@@ -661,19 +661,24 @@ static void sig_handler(int sig) ...@@ -661,19 +661,24 @@ static void sig_handler(int sig)
done = 1; done = 1;
#ifdef HAVE_EVENTFD_SUPPORT #ifdef HAVE_EVENTFD_SUPPORT
{ if (done_fd >= 0) {
u64 tmp = 1; u64 tmp = 1;
/* int orig_errno = errno;
* It is possible for this signal handler to run after done is checked
* in the main loop, but before the perf counter fds are polled. If this /*
* happens, the poll() will continue to wait even though done is set, * It is possible for this signal handler to run after done is
* and will only break out if either another signal is received, or the * checked in the main loop, but before the perf counter fds are
* counters are ready for read. To ensure the poll() doesn't sleep when * polled. If this happens, the poll() will continue to wait
* done is set, use an eventfd (done_fd) to wake up the poll(). * even though done is set, and will only break out if either
*/ * another signal is received, or the counters are ready for
if (write(done_fd, &tmp, sizeof(tmp)) < 0) * read. To ensure the poll() doesn't sleep when done is set,
pr_err("failed to signal wakeup fd, error: %m\n"); * use an eventfd (done_fd) to wake up the poll().
} */
if (write(done_fd, &tmp, sizeof(tmp)) < 0)
pr_err("failed to signal wakeup fd, error: %m\n");
errno = orig_errno;
}
#endif // HAVE_EVENTFD_SUPPORT #endif // HAVE_EVENTFD_SUPPORT
} }
...@@ -2834,8 +2839,12 @@ static int __cmd_record(struct record *rec, int argc, const char **argv) ...@@ -2834,8 +2839,12 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
out_delete_session: out_delete_session:
#ifdef HAVE_EVENTFD_SUPPORT #ifdef HAVE_EVENTFD_SUPPORT
if (done_fd >= 0) if (done_fd >= 0) {
close(done_fd); fd = done_fd;
done_fd = -1;
close(fd);
}
#endif #endif
zstd_fini(&session->zstd_data); zstd_fini(&session->zstd_data);
perf_session__delete(session); perf_session__delete(session);
......
...@@ -143,7 +143,7 @@ for i in $SYNC_CHECK_FILES; do ...@@ -143,7 +143,7 @@ for i in $SYNC_CHECK_FILES; do
done done
# diff with extra ignore lines # diff with extra ignore lines
check arch/x86/lib/memcpy_64.S '-I "^EXPORT_SYMBOL" -I "^#include <asm/export.h>" -I"^SYM_FUNC_START\(_LOCAL\)*(memcpy_\(erms\|orig\))"' check arch/x86/lib/memcpy_64.S '-I "^EXPORT_SYMBOL" -I "^#include <asm/export.h>" -I"^SYM_FUNC_START\(_LOCAL\)*(memcpy_\(erms\|orig\))" -I"^#include <linux/cfi_types.h>"'
check arch/x86/lib/memset_64.S '-I "^EXPORT_SYMBOL" -I "^#include <asm/export.h>" -I"^SYM_FUNC_START\(_LOCAL\)*(memset_\(erms\|orig\))"' check arch/x86/lib/memset_64.S '-I "^EXPORT_SYMBOL" -I "^#include <asm/export.h>" -I"^SYM_FUNC_START\(_LOCAL\)*(memset_\(erms\|orig\))"'
check arch/x86/include/asm/amd-ibs.h '-I "^#include [<\"]\(asm/\)*msr-index.h"' check arch/x86/include/asm/amd-ibs.h '-I "^#include [<\"]\(asm/\)*msr-index.h"'
check arch/arm64/include/asm/cputype.h '-I "^#include [<\"]\(asm/\)*sysreg.h"' check arch/arm64/include/asm/cputype.h '-I "^#include [<\"]\(asm/\)*sysreg.h"'
......
...@@ -112,21 +112,21 @@ ...@@ -112,21 +112,21 @@
"MetricName": "indirect_branch" "MetricName": "indirect_branch"
}, },
{ {
"MetricExpr": "(armv8_pmuv3_0@event\\=0x1014@ + armv8_pmuv3_0@event\\=0x1018@) / BR_MIS_PRED", "MetricExpr": "(armv8_pmuv3_0@event\\=0x1013@ + armv8_pmuv3_0@event\\=0x1016@) / BR_MIS_PRED",
"PublicDescription": "Push branch L3 topdown metric", "PublicDescription": "Push branch L3 topdown metric",
"BriefDescription": "Push branch L3 topdown metric", "BriefDescription": "Push branch L3 topdown metric",
"MetricGroup": "TopDownL3", "MetricGroup": "TopDownL3",
"MetricName": "push_branch" "MetricName": "push_branch"
}, },
{ {
"MetricExpr": "armv8_pmuv3_0@event\\=0x100c@ / BR_MIS_PRED", "MetricExpr": "armv8_pmuv3_0@event\\=0x100d@ / BR_MIS_PRED",
"PublicDescription": "Pop branch L3 topdown metric", "PublicDescription": "Pop branch L3 topdown metric",
"BriefDescription": "Pop branch L3 topdown metric", "BriefDescription": "Pop branch L3 topdown metric",
"MetricGroup": "TopDownL3", "MetricGroup": "TopDownL3",
"MetricName": "pop_branch" "MetricName": "pop_branch"
}, },
{ {
"MetricExpr": "(BR_MIS_PRED - armv8_pmuv3_0@event\\=0x1010@ - armv8_pmuv3_0@event\\=0x1014@ - armv8_pmuv3_0@event\\=0x1018@ - armv8_pmuv3_0@event\\=0x100c@) / BR_MIS_PRED", "MetricExpr": "(BR_MIS_PRED - armv8_pmuv3_0@event\\=0x1010@ - armv8_pmuv3_0@event\\=0x1013@ - armv8_pmuv3_0@event\\=0x1016@ - armv8_pmuv3_0@event\\=0x100d@) / BR_MIS_PRED",
"PublicDescription": "Other branch L3 topdown metric", "PublicDescription": "Other branch L3 topdown metric",
"BriefDescription": "Other branch L3 topdown metric", "BriefDescription": "Other branch L3 topdown metric",
"MetricGroup": "TopDownL3", "MetricGroup": "TopDownL3",
......
...@@ -526,6 +526,12 @@ test_kernel_trace() ...@@ -526,6 +526,12 @@ test_kernel_trace()
test_virtual_lbr() test_virtual_lbr()
{ {
echo "--- Test virtual LBR ---" echo "--- Test virtual LBR ---"
# Check if python script is supported
libpython=$(perf version --build-options | grep python | grep -cv OFF)
if [ "${libpython}" != "1" ] ; then
echo "SKIP: python scripting is not supported"
return 2
fi
# Python script to determine the maximum size of branch stacks # Python script to determine the maximum size of branch stacks
cat << "_end_of_file_" > "${maxbrstack}" cat << "_end_of_file_" > "${maxbrstack}"
......
...@@ -66,6 +66,7 @@ size_t syscall_arg__scnprintf_statx_mask(char *bf, size_t size, struct syscall_a ...@@ -66,6 +66,7 @@ size_t syscall_arg__scnprintf_statx_mask(char *bf, size_t size, struct syscall_a
P_FLAG(BLOCKS); P_FLAG(BLOCKS);
P_FLAG(BTIME); P_FLAG(BTIME);
P_FLAG(MNT_ID); P_FLAG(MNT_ID);
P_FLAG(DIOALIGN);
#undef P_FLAG #undef P_FLAG
......
...@@ -2325,11 +2325,19 @@ struct sym_args { ...@@ -2325,11 +2325,19 @@ struct sym_args {
bool near; bool near;
}; };
static bool kern_sym_name_match(const char *kname, const char *name)
{
size_t n = strlen(name);
return !strcmp(kname, name) ||
(!strncmp(kname, name, n) && kname[n] == '\t');
}
static bool kern_sym_match(struct sym_args *args, const char *name, char type) static bool kern_sym_match(struct sym_args *args, const char *name, char type)
{ {
/* A function with the same name, and global or the n'th found or any */ /* A function with the same name, and global or the n'th found or any */
return kallsyms__is_function(type) && return kallsyms__is_function(type) &&
!strcmp(name, args->name) && kern_sym_name_match(name, args->name) &&
((args->global && isupper(type)) || ((args->global && isupper(type)) ||
(args->selected && ++(args->cnt) == args->idx) || (args->selected && ++(args->cnt) == args->idx) ||
(!args->global && !args->selected)); (!args->global && !args->selected));
......
...@@ -36,6 +36,11 @@ struct btf *btf__load_from_kernel_by_id(__u32 id) ...@@ -36,6 +36,11 @@ struct btf *btf__load_from_kernel_by_id(__u32 id)
#endif #endif
#ifndef HAVE_LIBBPF_BPF_PROG_LOAD #ifndef HAVE_LIBBPF_BPF_PROG_LOAD
LIBBPF_API int bpf_load_program(enum bpf_prog_type type,
const struct bpf_insn *insns, size_t insns_cnt,
const char *license, __u32 kern_version,
char *log_buf, size_t log_buf_sz);
int bpf_prog_load(enum bpf_prog_type prog_type, int bpf_prog_load(enum bpf_prog_type prog_type,
const char *prog_name __maybe_unused, const char *prog_name __maybe_unused,
const char *license, const char *license,
......
...@@ -36,6 +36,24 @@ ...@@ -36,6 +36,24 @@
#include <internal/xyarray.h> #include <internal/xyarray.h>
#ifndef HAVE_LIBBPF_BPF_PROGRAM__SET_INSNS
int bpf_program__set_insns(struct bpf_program *prog __maybe_unused,
struct bpf_insn *new_insns __maybe_unused, size_t new_insn_cnt __maybe_unused)
{
pr_err("%s: not support, update libbpf\n", __func__);
return -ENOTSUP;
}
int libbpf_register_prog_handler(const char *sec __maybe_unused,
enum bpf_prog_type prog_type __maybe_unused,
enum bpf_attach_type exp_attach_type __maybe_unused,
const struct libbpf_prog_handler_opts *opts __maybe_unused)
{
pr_err("%s: not support, update libbpf\n", __func__);
return -ENOTSUP;
}
#endif
/* temporarily disable libbpf deprecation warnings */ /* temporarily disable libbpf deprecation warnings */
#pragma GCC diagnostic ignored "-Wdeprecated-declarations" #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
......
...@@ -115,4 +115,17 @@ ...@@ -115,4 +115,17 @@
SYM_ALIAS(alias, name, SYM_T_FUNC, SYM_L_WEAK) SYM_ALIAS(alias, name, SYM_T_FUNC, SYM_L_WEAK)
#endif #endif
// In the kernel sources (include/linux/cfi_types.h), this has a different
// definition when CONFIG_CFI_CLANG is used, for tools/ just use the !clang
// definition:
#ifndef SYM_TYPED_START
#define SYM_TYPED_START(name, linkage, align...) \
SYM_START(name, linkage, align)
#endif
#ifndef SYM_TYPED_FUNC_START
#define SYM_TYPED_FUNC_START(name) \
SYM_TYPED_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)
#endif
#endif /* PERF_LINUX_LINKAGE_H_ */ #endif /* PERF_LINUX_LINKAGE_H_ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment