Merge tag 'perf-tools-for-v5.10-2020-11-03' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux
Pull perf tools fixes from Arnaldo Carvalho de Melo: "Only fixes and a sync of the headers so that the perf build is silent: - Fix visibility attribute in python module init code with newer gcc - Fix DRAM_BW_Use 0 issue for CLX/SKX in intel JSON vendor event files - Fix the build on new fedora by removing LTO compiler options when building perl support - Remove broken __no_tail_call attribute - Fix segfault when trying to trace events by cgroup - Fix crash with non-jited BPF progs - Increase buffer size in TUI browser, fixing format truncation - Fix printing of build-id for objects lacking one - Fix byte swapping for ino_generation field in MMAP2 perf.data records - Fix byte swapping for CGROUP perf.data records, for cross arch analysis of perf.data files - Fix the fast path of feature detection - Update kernel header copies" * tag 'perf-tools-for-v5.10-2020-11-03' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux: (23 commits) tools feature: Fixup fast path feature detection perf tools: Add missing swap for cgroup events perf tools: Add missing swap for ino_generation perf tools: Initialize output buffer in build_id__sprintf perf hists browser: Increase size of 'buf' in perf_evsel__hists_browse() tools include UAPI: Update linux/mount.h copy tools headers UAPI: Update tools's copy of linux/perf_event.h tools kvm headers: Update KVM headers from the kernel sources tools UAPI: Update copy of linux/mman.h from the kernel sources tools arch x86: Sync the msr-index.h copy with the kernel sources tools x86 headers: Update required-features.h header from the kernel tools x86 headers: Update cpufeatures.h headers copies tools headers UAPI: Update fscrypt.h copy tools headers UAPI: Sync drm/i915_drm.h with the kernel sources tools headers UAPI: Sync prctl.h with the kernel sources perf scripting python: Avoid declaring function pointers with a visibility attribute perf tools: Remove broken __no_tail_call attribute perf vendor events: Fix DRAM_BW_Use 0 issue for CLX/SKX perf trace: Fix segfault when trying to trace events by cgroup perf tools: Fix crash with non-jited bpf progs ...
This commit is contained in:
@@ -159,6 +159,21 @@ struct kvm_sync_regs {
|
|||||||
struct kvm_arch_memory_slot {
|
struct kvm_arch_memory_slot {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PMU filter structure. Describe a range of events with a particular
|
||||||
|
* action. To be used with KVM_ARM_VCPU_PMU_V3_FILTER.
|
||||||
|
*/
|
||||||
|
struct kvm_pmu_event_filter {
|
||||||
|
__u16 base_event;
|
||||||
|
__u16 nevents;
|
||||||
|
|
||||||
|
#define KVM_PMU_EVENT_ALLOW 0
|
||||||
|
#define KVM_PMU_EVENT_DENY 1
|
||||||
|
|
||||||
|
__u8 action;
|
||||||
|
__u8 pad[3];
|
||||||
|
};
|
||||||
|
|
||||||
/* for KVM_GET/SET_VCPU_EVENTS */
|
/* for KVM_GET/SET_VCPU_EVENTS */
|
||||||
struct kvm_vcpu_events {
|
struct kvm_vcpu_events {
|
||||||
struct {
|
struct {
|
||||||
@@ -242,6 +257,15 @@ struct kvm_vcpu_events {
|
|||||||
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_AVAIL 0
|
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_AVAIL 0
|
||||||
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_AVAIL 1
|
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_AVAIL 1
|
||||||
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_REQUIRED 2
|
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_REQUIRED 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Only two states can be presented by the host kernel:
|
||||||
|
* - NOT_REQUIRED: the guest doesn't need to do anything
|
||||||
|
* - NOT_AVAIL: the guest isn't mitigated (it can still use SSBS if available)
|
||||||
|
*
|
||||||
|
* All the other values are deprecated. The host still accepts all
|
||||||
|
* values (they are ABI), but will narrow them to the above two.
|
||||||
|
*/
|
||||||
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2 KVM_REG_ARM_FW_REG(2)
|
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2 KVM_REG_ARM_FW_REG(2)
|
||||||
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_NOT_AVAIL 0
|
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_NOT_AVAIL 0
|
||||||
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_UNKNOWN 1
|
#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_UNKNOWN 1
|
||||||
@@ -329,6 +353,7 @@ struct kvm_vcpu_events {
|
|||||||
#define KVM_ARM_VCPU_PMU_V3_CTRL 0
|
#define KVM_ARM_VCPU_PMU_V3_CTRL 0
|
||||||
#define KVM_ARM_VCPU_PMU_V3_IRQ 0
|
#define KVM_ARM_VCPU_PMU_V3_IRQ 0
|
||||||
#define KVM_ARM_VCPU_PMU_V3_INIT 1
|
#define KVM_ARM_VCPU_PMU_V3_INIT 1
|
||||||
|
#define KVM_ARM_VCPU_PMU_V3_FILTER 2
|
||||||
#define KVM_ARM_VCPU_TIMER_CTRL 1
|
#define KVM_ARM_VCPU_TIMER_CTRL 1
|
||||||
#define KVM_ARM_VCPU_TIMER_IRQ_VTIMER 0
|
#define KVM_ARM_VCPU_TIMER_IRQ_VTIMER 0
|
||||||
#define KVM_ARM_VCPU_TIMER_IRQ_PTIMER 1
|
#define KVM_ARM_VCPU_TIMER_IRQ_PTIMER 1
|
||||||
|
@@ -29,7 +29,7 @@
|
|||||||
{ 0x13, "SIGP conditional emergency signal" }, \
|
{ 0x13, "SIGP conditional emergency signal" }, \
|
||||||
{ 0x15, "SIGP sense running" }, \
|
{ 0x15, "SIGP sense running" }, \
|
||||||
{ 0x16, "SIGP set multithreading"}, \
|
{ 0x16, "SIGP set multithreading"}, \
|
||||||
{ 0x17, "SIGP store additional status ait address"}
|
{ 0x17, "SIGP store additional status at address"}
|
||||||
|
|
||||||
#define icpt_prog_codes \
|
#define icpt_prog_codes \
|
||||||
{ 0x0001, "Prog Operation" }, \
|
{ 0x0001, "Prog Operation" }, \
|
||||||
|
@@ -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_SME_COHERENT ( 3*32+17) /* "" AMD hardware-enforced cache coherency */
|
||||||
#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 */
|
||||||
@@ -236,6 +236,7 @@
|
|||||||
#define X86_FEATURE_EPT_AD ( 8*32+17) /* Intel Extended Page Table access-dirty bit */
|
#define X86_FEATURE_EPT_AD ( 8*32+17) /* Intel Extended Page Table access-dirty bit */
|
||||||
#define X86_FEATURE_VMCALL ( 8*32+18) /* "" Hypervisor supports the VMCALL instruction */
|
#define X86_FEATURE_VMCALL ( 8*32+18) /* "" Hypervisor supports the VMCALL instruction */
|
||||||
#define X86_FEATURE_VMW_VMMCALL ( 8*32+19) /* "" VMware prefers VMMCALL hypercall instruction */
|
#define X86_FEATURE_VMW_VMMCALL ( 8*32+19) /* "" VMware prefers VMMCALL hypercall instruction */
|
||||||
|
#define X86_FEATURE_SEV_ES ( 8*32+20) /* AMD Secure Encrypted Virtualization - Encrypted State */
|
||||||
|
|
||||||
/* Intel-defined CPU features, CPUID level 0x00000007:0 (EBX), word 9 */
|
/* Intel-defined CPU features, CPUID level 0x00000007:0 (EBX), word 9 */
|
||||||
#define X86_FEATURE_FSGSBASE ( 9*32+ 0) /* RDFSBASE, WRFSBASE, RDGSBASE, WRGSBASE instructions*/
|
#define X86_FEATURE_FSGSBASE ( 9*32+ 0) /* RDFSBASE, WRFSBASE, RDGSBASE, WRGSBASE instructions*/
|
||||||
@@ -288,6 +289,7 @@
|
|||||||
#define X86_FEATURE_FENCE_SWAPGS_USER (11*32+ 4) /* "" LFENCE in user entry SWAPGS path */
|
#define X86_FEATURE_FENCE_SWAPGS_USER (11*32+ 4) /* "" LFENCE in user entry SWAPGS path */
|
||||||
#define X86_FEATURE_FENCE_SWAPGS_KERNEL (11*32+ 5) /* "" LFENCE in kernel entry SWAPGS path */
|
#define X86_FEATURE_FENCE_SWAPGS_KERNEL (11*32+ 5) /* "" LFENCE in kernel entry SWAPGS path */
|
||||||
#define X86_FEATURE_SPLIT_LOCK_DETECT (11*32+ 6) /* #AC for split lock */
|
#define X86_FEATURE_SPLIT_LOCK_DETECT (11*32+ 6) /* #AC for split lock */
|
||||||
|
#define X86_FEATURE_PER_THREAD_MBA (11*32+ 7) /* "" Per-thread Memory Bandwidth Allocation */
|
||||||
|
|
||||||
/* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */
|
/* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */
|
||||||
#define X86_FEATURE_AVX512_BF16 (12*32+ 5) /* AVX512 BFLOAT16 instructions */
|
#define X86_FEATURE_AVX512_BF16 (12*32+ 5) /* AVX512 BFLOAT16 instructions */
|
||||||
@@ -353,6 +355,7 @@
|
|||||||
#define X86_FEATURE_CLDEMOTE (16*32+25) /* CLDEMOTE instruction */
|
#define X86_FEATURE_CLDEMOTE (16*32+25) /* CLDEMOTE instruction */
|
||||||
#define X86_FEATURE_MOVDIRI (16*32+27) /* MOVDIRI instruction */
|
#define X86_FEATURE_MOVDIRI (16*32+27) /* MOVDIRI instruction */
|
||||||
#define X86_FEATURE_MOVDIR64B (16*32+28) /* MOVDIR64B instruction */
|
#define X86_FEATURE_MOVDIR64B (16*32+28) /* MOVDIR64B instruction */
|
||||||
|
#define X86_FEATURE_ENQCMD (16*32+29) /* ENQCMD and ENQCMDS instructions */
|
||||||
|
|
||||||
/* AMD-defined CPU features, CPUID level 0x80000007 (EBX), word 17 */
|
/* AMD-defined CPU features, CPUID level 0x80000007 (EBX), word 17 */
|
||||||
#define X86_FEATURE_OVERFLOW_RECOV (17*32+ 0) /* MCA overflow recovery support */
|
#define X86_FEATURE_OVERFLOW_RECOV (17*32+ 0) /* MCA overflow recovery support */
|
||||||
@@ -368,6 +371,7 @@
|
|||||||
#define X86_FEATURE_MD_CLEAR (18*32+10) /* VERW clears CPU buffers */
|
#define X86_FEATURE_MD_CLEAR (18*32+10) /* VERW clears CPU buffers */
|
||||||
#define X86_FEATURE_TSX_FORCE_ABORT (18*32+13) /* "" TSX_FORCE_ABORT */
|
#define X86_FEATURE_TSX_FORCE_ABORT (18*32+13) /* "" TSX_FORCE_ABORT */
|
||||||
#define X86_FEATURE_SERIALIZE (18*32+14) /* SERIALIZE instruction */
|
#define X86_FEATURE_SERIALIZE (18*32+14) /* SERIALIZE instruction */
|
||||||
|
#define X86_FEATURE_TSXLDTRK (18*32+16) /* TSX Suspend Load Address Tracking */
|
||||||
#define X86_FEATURE_PCONFIG (18*32+18) /* Intel PCONFIG */
|
#define X86_FEATURE_PCONFIG (18*32+18) /* Intel PCONFIG */
|
||||||
#define X86_FEATURE_ARCH_LBR (18*32+19) /* Intel ARCH LBR */
|
#define X86_FEATURE_ARCH_LBR (18*32+19) /* Intel ARCH LBR */
|
||||||
#define X86_FEATURE_SPEC_CTRL (18*32+26) /* "" Speculation Control (IBRS + IBPB) */
|
#define X86_FEATURE_SPEC_CTRL (18*32+26) /* "" Speculation Control (IBRS + IBPB) */
|
||||||
|
@@ -56,6 +56,12 @@
|
|||||||
# define DISABLE_PTI (1 << (X86_FEATURE_PTI & 31))
|
# define DISABLE_PTI (1 << (X86_FEATURE_PTI & 31))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_IOMMU_SUPPORT
|
||||||
|
# define DISABLE_ENQCMD 0
|
||||||
|
#else
|
||||||
|
# define DISABLE_ENQCMD (1 << (X86_FEATURE_ENQCMD & 31))
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure to add features to the correct mask
|
* Make sure to add features to the correct mask
|
||||||
*/
|
*/
|
||||||
@@ -75,7 +81,8 @@
|
|||||||
#define DISABLED_MASK13 0
|
#define DISABLED_MASK13 0
|
||||||
#define DISABLED_MASK14 0
|
#define DISABLED_MASK14 0
|
||||||
#define DISABLED_MASK15 0
|
#define DISABLED_MASK15 0
|
||||||
#define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE|DISABLE_LA57|DISABLE_UMIP)
|
#define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE|DISABLE_LA57|DISABLE_UMIP| \
|
||||||
|
DISABLE_ENQCMD)
|
||||||
#define DISABLED_MASK17 0
|
#define DISABLED_MASK17 0
|
||||||
#define DISABLED_MASK18 0
|
#define DISABLED_MASK18 0
|
||||||
#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19)
|
#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19)
|
||||||
|
@@ -257,6 +257,9 @@
|
|||||||
#define MSR_IA32_LASTINTFROMIP 0x000001dd
|
#define MSR_IA32_LASTINTFROMIP 0x000001dd
|
||||||
#define MSR_IA32_LASTINTTOIP 0x000001de
|
#define MSR_IA32_LASTINTTOIP 0x000001de
|
||||||
|
|
||||||
|
#define MSR_IA32_PASID 0x00000d93
|
||||||
|
#define MSR_IA32_PASID_VALID BIT_ULL(31)
|
||||||
|
|
||||||
/* DEBUGCTLMSR bits (others vary by model): */
|
/* DEBUGCTLMSR bits (others vary by model): */
|
||||||
#define DEBUGCTLMSR_LBR (1UL << 0) /* last branch recording */
|
#define DEBUGCTLMSR_LBR (1UL << 0) /* last branch recording */
|
||||||
#define DEBUGCTLMSR_BTF_SHIFT 1
|
#define DEBUGCTLMSR_BTF_SHIFT 1
|
||||||
@@ -464,11 +467,15 @@
|
|||||||
#define MSR_AMD64_IBSOP_REG_MASK ((1UL<<MSR_AMD64_IBSOP_REG_COUNT)-1)
|
#define MSR_AMD64_IBSOP_REG_MASK ((1UL<<MSR_AMD64_IBSOP_REG_COUNT)-1)
|
||||||
#define MSR_AMD64_IBSCTL 0xc001103a
|
#define MSR_AMD64_IBSCTL 0xc001103a
|
||||||
#define MSR_AMD64_IBSBRTARGET 0xc001103b
|
#define MSR_AMD64_IBSBRTARGET 0xc001103b
|
||||||
|
#define MSR_AMD64_ICIBSEXTDCTL 0xc001103c
|
||||||
#define MSR_AMD64_IBSOPDATA4 0xc001103d
|
#define MSR_AMD64_IBSOPDATA4 0xc001103d
|
||||||
#define MSR_AMD64_IBS_REG_COUNT_MAX 8 /* includes MSR_AMD64_IBSBRTARGET */
|
#define MSR_AMD64_IBS_REG_COUNT_MAX 8 /* includes MSR_AMD64_IBSBRTARGET */
|
||||||
|
#define MSR_AMD64_SEV_ES_GHCB 0xc0010130
|
||||||
#define MSR_AMD64_SEV 0xc0010131
|
#define MSR_AMD64_SEV 0xc0010131
|
||||||
#define MSR_AMD64_SEV_ENABLED_BIT 0
|
#define MSR_AMD64_SEV_ENABLED_BIT 0
|
||||||
|
#define MSR_AMD64_SEV_ES_ENABLED_BIT 1
|
||||||
#define MSR_AMD64_SEV_ENABLED BIT_ULL(MSR_AMD64_SEV_ENABLED_BIT)
|
#define MSR_AMD64_SEV_ENABLED BIT_ULL(MSR_AMD64_SEV_ENABLED_BIT)
|
||||||
|
#define MSR_AMD64_SEV_ES_ENABLED BIT_ULL(MSR_AMD64_SEV_ES_ENABLED_BIT)
|
||||||
|
|
||||||
#define MSR_AMD64_VIRT_SPEC_CTRL 0xc001011f
|
#define MSR_AMD64_VIRT_SPEC_CTRL 0xc001011f
|
||||||
|
|
||||||
@@ -857,11 +864,14 @@
|
|||||||
#define MSR_CORE_PERF_FIXED_CTR0 0x00000309
|
#define MSR_CORE_PERF_FIXED_CTR0 0x00000309
|
||||||
#define MSR_CORE_PERF_FIXED_CTR1 0x0000030a
|
#define MSR_CORE_PERF_FIXED_CTR1 0x0000030a
|
||||||
#define MSR_CORE_PERF_FIXED_CTR2 0x0000030b
|
#define MSR_CORE_PERF_FIXED_CTR2 0x0000030b
|
||||||
|
#define MSR_CORE_PERF_FIXED_CTR3 0x0000030c
|
||||||
#define MSR_CORE_PERF_FIXED_CTR_CTRL 0x0000038d
|
#define MSR_CORE_PERF_FIXED_CTR_CTRL 0x0000038d
|
||||||
#define MSR_CORE_PERF_GLOBAL_STATUS 0x0000038e
|
#define MSR_CORE_PERF_GLOBAL_STATUS 0x0000038e
|
||||||
#define MSR_CORE_PERF_GLOBAL_CTRL 0x0000038f
|
#define MSR_CORE_PERF_GLOBAL_CTRL 0x0000038f
|
||||||
#define MSR_CORE_PERF_GLOBAL_OVF_CTRL 0x00000390
|
#define MSR_CORE_PERF_GLOBAL_OVF_CTRL 0x00000390
|
||||||
|
|
||||||
|
#define MSR_PERF_METRICS 0x00000329
|
||||||
|
|
||||||
/* PERF_GLOBAL_OVF_CTL bits */
|
/* PERF_GLOBAL_OVF_CTL bits */
|
||||||
#define MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI_BIT 55
|
#define MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI_BIT 55
|
||||||
#define MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI (1ULL << MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI_BIT)
|
#define MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI (1ULL << MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI_BIT)
|
||||||
|
@@ -54,7 +54,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
#ifdef CONFIG_PARAVIRT
|
#ifdef CONFIG_PARAVIRT_XXL
|
||||||
/* Paravirtualized systems may not have PSE or PGE available */
|
/* Paravirtualized systems may not have PSE or PGE available */
|
||||||
#define NEED_PSE 0
|
#define NEED_PSE 0
|
||||||
#define NEED_PGE 0
|
#define NEED_PGE 0
|
||||||
|
@@ -192,6 +192,26 @@ struct kvm_msr_list {
|
|||||||
__u32 indices[0];
|
__u32 indices[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Maximum size of any access bitmap in bytes */
|
||||||
|
#define KVM_MSR_FILTER_MAX_BITMAP_SIZE 0x600
|
||||||
|
|
||||||
|
/* for KVM_X86_SET_MSR_FILTER */
|
||||||
|
struct kvm_msr_filter_range {
|
||||||
|
#define KVM_MSR_FILTER_READ (1 << 0)
|
||||||
|
#define KVM_MSR_FILTER_WRITE (1 << 1)
|
||||||
|
__u32 flags;
|
||||||
|
__u32 nmsrs; /* number of msrs in bitmap */
|
||||||
|
__u32 base; /* MSR index the bitmap starts at */
|
||||||
|
__u8 *bitmap; /* a 1 bit allows the operations in flags, 0 denies */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define KVM_MSR_FILTER_MAX_RANGES 16
|
||||||
|
struct kvm_msr_filter {
|
||||||
|
#define KVM_MSR_FILTER_DEFAULT_ALLOW (0 << 0)
|
||||||
|
#define KVM_MSR_FILTER_DEFAULT_DENY (1 << 0)
|
||||||
|
__u32 flags;
|
||||||
|
struct kvm_msr_filter_range ranges[KVM_MSR_FILTER_MAX_RANGES];
|
||||||
|
};
|
||||||
|
|
||||||
struct kvm_cpuid_entry {
|
struct kvm_cpuid_entry {
|
||||||
__u32 function;
|
__u32 function;
|
||||||
|
@@ -29,6 +29,7 @@
|
|||||||
#define SVM_EXIT_WRITE_DR6 0x036
|
#define SVM_EXIT_WRITE_DR6 0x036
|
||||||
#define SVM_EXIT_WRITE_DR7 0x037
|
#define SVM_EXIT_WRITE_DR7 0x037
|
||||||
#define SVM_EXIT_EXCP_BASE 0x040
|
#define SVM_EXIT_EXCP_BASE 0x040
|
||||||
|
#define SVM_EXIT_LAST_EXCP 0x05f
|
||||||
#define SVM_EXIT_INTR 0x060
|
#define SVM_EXIT_INTR 0x060
|
||||||
#define SVM_EXIT_NMI 0x061
|
#define SVM_EXIT_NMI 0x061
|
||||||
#define SVM_EXIT_SMI 0x062
|
#define SVM_EXIT_SMI 0x062
|
||||||
@@ -76,10 +77,21 @@
|
|||||||
#define SVM_EXIT_MWAIT_COND 0x08c
|
#define SVM_EXIT_MWAIT_COND 0x08c
|
||||||
#define SVM_EXIT_XSETBV 0x08d
|
#define SVM_EXIT_XSETBV 0x08d
|
||||||
#define SVM_EXIT_RDPRU 0x08e
|
#define SVM_EXIT_RDPRU 0x08e
|
||||||
|
#define SVM_EXIT_INVPCID 0x0a2
|
||||||
#define SVM_EXIT_NPF 0x400
|
#define SVM_EXIT_NPF 0x400
|
||||||
#define SVM_EXIT_AVIC_INCOMPLETE_IPI 0x401
|
#define SVM_EXIT_AVIC_INCOMPLETE_IPI 0x401
|
||||||
#define SVM_EXIT_AVIC_UNACCELERATED_ACCESS 0x402
|
#define SVM_EXIT_AVIC_UNACCELERATED_ACCESS 0x402
|
||||||
|
|
||||||
|
/* SEV-ES software-defined VMGEXIT events */
|
||||||
|
#define SVM_VMGEXIT_MMIO_READ 0x80000001
|
||||||
|
#define SVM_VMGEXIT_MMIO_WRITE 0x80000002
|
||||||
|
#define SVM_VMGEXIT_NMI_COMPLETE 0x80000003
|
||||||
|
#define SVM_VMGEXIT_AP_HLT_LOOP 0x80000004
|
||||||
|
#define SVM_VMGEXIT_AP_JUMP_TABLE 0x80000005
|
||||||
|
#define SVM_VMGEXIT_SET_AP_JUMP_TABLE 0
|
||||||
|
#define SVM_VMGEXIT_GET_AP_JUMP_TABLE 1
|
||||||
|
#define SVM_VMGEXIT_UNSUPPORTED_EVENT 0x8000ffff
|
||||||
|
|
||||||
#define SVM_EXIT_ERR -1
|
#define SVM_EXIT_ERR -1
|
||||||
|
|
||||||
#define SVM_EXIT_REASONS \
|
#define SVM_EXIT_REASONS \
|
||||||
@@ -171,6 +183,7 @@
|
|||||||
{ SVM_EXIT_MONITOR, "monitor" }, \
|
{ SVM_EXIT_MONITOR, "monitor" }, \
|
||||||
{ SVM_EXIT_MWAIT, "mwait" }, \
|
{ SVM_EXIT_MWAIT, "mwait" }, \
|
||||||
{ SVM_EXIT_XSETBV, "xsetbv" }, \
|
{ SVM_EXIT_XSETBV, "xsetbv" }, \
|
||||||
|
{ SVM_EXIT_INVPCID, "invpcid" }, \
|
||||||
{ SVM_EXIT_NPF, "npf" }, \
|
{ SVM_EXIT_NPF, "npf" }, \
|
||||||
{ SVM_EXIT_AVIC_INCOMPLETE_IPI, "avic_incomplete_ipi" }, \
|
{ SVM_EXIT_AVIC_INCOMPLETE_IPI, "avic_incomplete_ipi" }, \
|
||||||
{ SVM_EXIT_AVIC_UNACCELERATED_ACCESS, "avic_unaccelerated_access" }, \
|
{ SVM_EXIT_AVIC_UNACCELERATED_ACCESS, "avic_unaccelerated_access" }, \
|
||||||
|
@@ -185,7 +185,6 @@ int main(int argc, char *argv[])
|
|||||||
main_test_libperl();
|
main_test_libperl();
|
||||||
main_test_hello();
|
main_test_hello();
|
||||||
main_test_libelf();
|
main_test_libelf();
|
||||||
main_test_libelf_mmap();
|
|
||||||
main_test_get_current_dir_name();
|
main_test_get_current_dir_name();
|
||||||
main_test_gettid();
|
main_test_gettid();
|
||||||
main_test_glibc();
|
main_test_glibc();
|
||||||
|
@@ -27,18 +27,6 @@
|
|||||||
#define __pure __attribute__((pure))
|
#define __pure __attribute__((pure))
|
||||||
#endif
|
#endif
|
||||||
#define noinline __attribute__((noinline))
|
#define noinline __attribute__((noinline))
|
||||||
#ifdef __has_attribute
|
|
||||||
#if __has_attribute(disable_tail_calls)
|
|
||||||
#define __no_tail_call __attribute__((disable_tail_calls))
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#ifndef __no_tail_call
|
|
||||||
#if GCC_VERSION > 40201
|
|
||||||
#define __no_tail_call __attribute__((optimize("no-optimize-sibling-calls")))
|
|
||||||
#else
|
|
||||||
#define __no_tail_call
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#ifndef __packed
|
#ifndef __packed
|
||||||
#define __packed __attribute__((packed))
|
#define __packed __attribute__((packed))
|
||||||
#endif
|
#endif
|
||||||
|
@@ -47,9 +47,6 @@
|
|||||||
#ifndef noinline
|
#ifndef noinline
|
||||||
#define noinline
|
#define noinline
|
||||||
#endif
|
#endif
|
||||||
#ifndef __no_tail_call
|
|
||||||
#define __no_tail_call
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Are two types/vars the same type (ignoring qualifiers)? */
|
/* Are two types/vars the same type (ignoring qualifiers)? */
|
||||||
#ifndef __same_type
|
#ifndef __same_type
|
||||||
|
@@ -857,9 +857,11 @@ __SYSCALL(__NR_openat2, sys_openat2)
|
|||||||
__SYSCALL(__NR_pidfd_getfd, sys_pidfd_getfd)
|
__SYSCALL(__NR_pidfd_getfd, sys_pidfd_getfd)
|
||||||
#define __NR_faccessat2 439
|
#define __NR_faccessat2 439
|
||||||
__SYSCALL(__NR_faccessat2, sys_faccessat2)
|
__SYSCALL(__NR_faccessat2, sys_faccessat2)
|
||||||
|
#define __NR_process_madvise 440
|
||||||
|
__SYSCALL(__NR_process_madvise, sys_process_madvise)
|
||||||
|
|
||||||
#undef __NR_syscalls
|
#undef __NR_syscalls
|
||||||
#define __NR_syscalls 440
|
#define __NR_syscalls 441
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 32 bit systems traditionally used different
|
* 32 bit systems traditionally used different
|
||||||
|
@@ -619,6 +619,12 @@ typedef struct drm_i915_irq_wait {
|
|||||||
*/
|
*/
|
||||||
#define I915_PARAM_PERF_REVISION 54
|
#define I915_PARAM_PERF_REVISION 54
|
||||||
|
|
||||||
|
/* Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying an array of
|
||||||
|
* timeline syncobj through drm_i915_gem_execbuffer_ext_timeline_fences. See
|
||||||
|
* I915_EXEC_USE_EXTENSIONS.
|
||||||
|
*/
|
||||||
|
#define I915_PARAM_HAS_EXEC_TIMELINE_FENCES 55
|
||||||
|
|
||||||
/* Must be kept compact -- no holes and well documented */
|
/* Must be kept compact -- no holes and well documented */
|
||||||
|
|
||||||
typedef struct drm_i915_getparam {
|
typedef struct drm_i915_getparam {
|
||||||
@@ -1046,6 +1052,38 @@ struct drm_i915_gem_exec_fence {
|
|||||||
__u32 flags;
|
__u32 flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See drm_i915_gem_execbuffer_ext_timeline_fences.
|
||||||
|
*/
|
||||||
|
#define DRM_I915_GEM_EXECBUFFER_EXT_TIMELINE_FENCES 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This structure describes an array of drm_syncobj and associated points for
|
||||||
|
* timeline variants of drm_syncobj. It is invalid to append this structure to
|
||||||
|
* the execbuf if I915_EXEC_FENCE_ARRAY is set.
|
||||||
|
*/
|
||||||
|
struct drm_i915_gem_execbuffer_ext_timeline_fences {
|
||||||
|
struct i915_user_extension base;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of element in the handles_ptr & value_ptr arrays.
|
||||||
|
*/
|
||||||
|
__u64 fence_count;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pointer to an array of struct drm_i915_gem_exec_fence of length
|
||||||
|
* fence_count.
|
||||||
|
*/
|
||||||
|
__u64 handles_ptr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pointer to an array of u64 values of length fence_count. Values
|
||||||
|
* must be 0 for a binary drm_syncobj. A Value of 0 for a timeline
|
||||||
|
* drm_syncobj is invalid as it turns a drm_syncobj into a binary one.
|
||||||
|
*/
|
||||||
|
__u64 values_ptr;
|
||||||
|
};
|
||||||
|
|
||||||
struct drm_i915_gem_execbuffer2 {
|
struct drm_i915_gem_execbuffer2 {
|
||||||
/**
|
/**
|
||||||
* List of gem_exec_object2 structs
|
* List of gem_exec_object2 structs
|
||||||
@@ -1062,8 +1100,14 @@ struct drm_i915_gem_execbuffer2 {
|
|||||||
__u32 num_cliprects;
|
__u32 num_cliprects;
|
||||||
/**
|
/**
|
||||||
* This is a struct drm_clip_rect *cliprects if I915_EXEC_FENCE_ARRAY
|
* This is a struct drm_clip_rect *cliprects if I915_EXEC_FENCE_ARRAY
|
||||||
* is not set. If I915_EXEC_FENCE_ARRAY is set, then this is a
|
* & I915_EXEC_USE_EXTENSIONS are not set.
|
||||||
* struct drm_i915_gem_exec_fence *fences.
|
*
|
||||||
|
* If I915_EXEC_FENCE_ARRAY is set, then this is a pointer to an array
|
||||||
|
* of struct drm_i915_gem_exec_fence and num_cliprects is the length
|
||||||
|
* of the array.
|
||||||
|
*
|
||||||
|
* If I915_EXEC_USE_EXTENSIONS is set, then this is a pointer to a
|
||||||
|
* single struct i915_user_extension and num_cliprects is 0.
|
||||||
*/
|
*/
|
||||||
__u64 cliprects_ptr;
|
__u64 cliprects_ptr;
|
||||||
#define I915_EXEC_RING_MASK (0x3f)
|
#define I915_EXEC_RING_MASK (0x3f)
|
||||||
@@ -1181,7 +1225,16 @@ struct drm_i915_gem_execbuffer2 {
|
|||||||
*/
|
*/
|
||||||
#define I915_EXEC_FENCE_SUBMIT (1 << 20)
|
#define I915_EXEC_FENCE_SUBMIT (1 << 20)
|
||||||
|
|
||||||
#define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SUBMIT << 1))
|
/*
|
||||||
|
* Setting I915_EXEC_USE_EXTENSIONS implies that
|
||||||
|
* drm_i915_gem_execbuffer2.cliprects_ptr is treated as a pointer to an linked
|
||||||
|
* list of i915_user_extension. Each i915_user_extension node is the base of a
|
||||||
|
* larger structure. The list of supported structures are listed in the
|
||||||
|
* drm_i915_gem_execbuffer_ext enum.
|
||||||
|
*/
|
||||||
|
#define I915_EXEC_USE_EXTENSIONS (1 << 21)
|
||||||
|
|
||||||
|
#define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_USE_EXTENSIONS << 1))
|
||||||
|
|
||||||
#define I915_EXEC_CONTEXT_ID_MASK (0xffffffff)
|
#define I915_EXEC_CONTEXT_ID_MASK (0xffffffff)
|
||||||
#define i915_execbuffer2_set_context_id(eb2, context) \
|
#define i915_execbuffer2_set_context_id(eb2, context) \
|
||||||
|
@@ -45,7 +45,6 @@ struct fscrypt_policy_v1 {
|
|||||||
__u8 flags;
|
__u8 flags;
|
||||||
__u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
|
__u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
|
||||||
};
|
};
|
||||||
#define fscrypt_policy fscrypt_policy_v1
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Process-subscribed "logon" key description prefix and payload format.
|
* Process-subscribed "logon" key description prefix and payload format.
|
||||||
@@ -156,9 +155,9 @@ struct fscrypt_get_key_status_arg {
|
|||||||
__u32 __out_reserved[13];
|
__u32 __out_reserved[13];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define FS_IOC_SET_ENCRYPTION_POLICY _IOR('f', 19, struct fscrypt_policy)
|
#define FS_IOC_SET_ENCRYPTION_POLICY _IOR('f', 19, struct fscrypt_policy_v1)
|
||||||
#define FS_IOC_GET_ENCRYPTION_PWSALT _IOW('f', 20, __u8[16])
|
#define FS_IOC_GET_ENCRYPTION_PWSALT _IOW('f', 20, __u8[16])
|
||||||
#define FS_IOC_GET_ENCRYPTION_POLICY _IOW('f', 21, struct fscrypt_policy)
|
#define FS_IOC_GET_ENCRYPTION_POLICY _IOW('f', 21, struct fscrypt_policy_v1)
|
||||||
#define FS_IOC_GET_ENCRYPTION_POLICY_EX _IOWR('f', 22, __u8[9]) /* size + version */
|
#define FS_IOC_GET_ENCRYPTION_POLICY_EX _IOWR('f', 22, __u8[9]) /* size + version */
|
||||||
#define FS_IOC_ADD_ENCRYPTION_KEY _IOWR('f', 23, struct fscrypt_add_key_arg)
|
#define FS_IOC_ADD_ENCRYPTION_KEY _IOWR('f', 23, struct fscrypt_add_key_arg)
|
||||||
#define FS_IOC_REMOVE_ENCRYPTION_KEY _IOWR('f', 24, struct fscrypt_remove_key_arg)
|
#define FS_IOC_REMOVE_ENCRYPTION_KEY _IOWR('f', 24, struct fscrypt_remove_key_arg)
|
||||||
@@ -170,6 +169,7 @@ struct fscrypt_get_key_status_arg {
|
|||||||
|
|
||||||
/* old names; don't add anything new here! */
|
/* old names; don't add anything new here! */
|
||||||
#ifndef __KERNEL__
|
#ifndef __KERNEL__
|
||||||
|
#define fscrypt_policy fscrypt_policy_v1
|
||||||
#define FS_KEY_DESCRIPTOR_SIZE FSCRYPT_KEY_DESCRIPTOR_SIZE
|
#define FS_KEY_DESCRIPTOR_SIZE FSCRYPT_KEY_DESCRIPTOR_SIZE
|
||||||
#define FS_POLICY_FLAGS_PAD_4 FSCRYPT_POLICY_FLAGS_PAD_4
|
#define FS_POLICY_FLAGS_PAD_4 FSCRYPT_POLICY_FLAGS_PAD_4
|
||||||
#define FS_POLICY_FLAGS_PAD_8 FSCRYPT_POLICY_FLAGS_PAD_8
|
#define FS_POLICY_FLAGS_PAD_8 FSCRYPT_POLICY_FLAGS_PAD_8
|
||||||
|
@@ -248,6 +248,8 @@ struct kvm_hyperv_exit {
|
|||||||
#define KVM_EXIT_IOAPIC_EOI 26
|
#define KVM_EXIT_IOAPIC_EOI 26
|
||||||
#define KVM_EXIT_HYPERV 27
|
#define KVM_EXIT_HYPERV 27
|
||||||
#define KVM_EXIT_ARM_NISV 28
|
#define KVM_EXIT_ARM_NISV 28
|
||||||
|
#define KVM_EXIT_X86_RDMSR 29
|
||||||
|
#define KVM_EXIT_X86_WRMSR 30
|
||||||
|
|
||||||
/* For KVM_EXIT_INTERNAL_ERROR */
|
/* For KVM_EXIT_INTERNAL_ERROR */
|
||||||
/* Emulate instruction failed. */
|
/* Emulate instruction failed. */
|
||||||
@@ -413,6 +415,17 @@ struct kvm_run {
|
|||||||
__u64 esr_iss;
|
__u64 esr_iss;
|
||||||
__u64 fault_ipa;
|
__u64 fault_ipa;
|
||||||
} arm_nisv;
|
} arm_nisv;
|
||||||
|
/* KVM_EXIT_X86_RDMSR / KVM_EXIT_X86_WRMSR */
|
||||||
|
struct {
|
||||||
|
__u8 error; /* user -> kernel */
|
||||||
|
__u8 pad[7];
|
||||||
|
#define KVM_MSR_EXIT_REASON_INVAL (1 << 0)
|
||||||
|
#define KVM_MSR_EXIT_REASON_UNKNOWN (1 << 1)
|
||||||
|
#define KVM_MSR_EXIT_REASON_FILTER (1 << 2)
|
||||||
|
__u32 reason; /* kernel -> user */
|
||||||
|
__u32 index; /* kernel -> user */
|
||||||
|
__u64 data; /* kernel <-> user */
|
||||||
|
} msr;
|
||||||
/* Fix the size of the union. */
|
/* Fix the size of the union. */
|
||||||
char padding[256];
|
char padding[256];
|
||||||
};
|
};
|
||||||
@@ -1037,6 +1050,9 @@ struct kvm_ppc_resize_hpt {
|
|||||||
#define KVM_CAP_SMALLER_MAXPHYADDR 185
|
#define KVM_CAP_SMALLER_MAXPHYADDR 185
|
||||||
#define KVM_CAP_S390_DIAG318 186
|
#define KVM_CAP_S390_DIAG318 186
|
||||||
#define KVM_CAP_STEAL_TIME 187
|
#define KVM_CAP_STEAL_TIME 187
|
||||||
|
#define KVM_CAP_X86_USER_SPACE_MSR 188
|
||||||
|
#define KVM_CAP_X86_MSR_FILTER 189
|
||||||
|
#define KVM_CAP_ENFORCE_PV_FEATURE_CPUID 190
|
||||||
|
|
||||||
#ifdef KVM_CAP_IRQ_ROUTING
|
#ifdef KVM_CAP_IRQ_ROUTING
|
||||||
|
|
||||||
@@ -1538,6 +1554,9 @@ struct kvm_pv_cmd {
|
|||||||
/* Available with KVM_CAP_S390_PROTECTED */
|
/* Available with KVM_CAP_S390_PROTECTED */
|
||||||
#define KVM_S390_PV_COMMAND _IOWR(KVMIO, 0xc5, struct kvm_pv_cmd)
|
#define KVM_S390_PV_COMMAND _IOWR(KVMIO, 0xc5, struct kvm_pv_cmd)
|
||||||
|
|
||||||
|
/* Available with KVM_CAP_X86_MSR_FILTER */
|
||||||
|
#define KVM_X86_SET_MSR_FILTER _IOW(KVMIO, 0xc6, struct kvm_msr_filter)
|
||||||
|
|
||||||
/* Secure Encrypted Virtualization command */
|
/* Secure Encrypted Virtualization command */
|
||||||
enum sev_cmd_id {
|
enum sev_cmd_id {
|
||||||
/* Guest initialization commands */
|
/* Guest initialization commands */
|
||||||
|
@@ -27,6 +27,7 @@
|
|||||||
#define MAP_HUGE_SHIFT HUGETLB_FLAG_ENCODE_SHIFT
|
#define MAP_HUGE_SHIFT HUGETLB_FLAG_ENCODE_SHIFT
|
||||||
#define MAP_HUGE_MASK HUGETLB_FLAG_ENCODE_MASK
|
#define MAP_HUGE_MASK HUGETLB_FLAG_ENCODE_MASK
|
||||||
|
|
||||||
|
#define MAP_HUGE_16KB HUGETLB_FLAG_ENCODE_16KB
|
||||||
#define MAP_HUGE_64KB HUGETLB_FLAG_ENCODE_64KB
|
#define MAP_HUGE_64KB HUGETLB_FLAG_ENCODE_64KB
|
||||||
#define MAP_HUGE_512KB HUGETLB_FLAG_ENCODE_512KB
|
#define MAP_HUGE_512KB HUGETLB_FLAG_ENCODE_512KB
|
||||||
#define MAP_HUGE_1MB HUGETLB_FLAG_ENCODE_1MB
|
#define MAP_HUGE_1MB HUGETLB_FLAG_ENCODE_1MB
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
#define MS_REMOUNT 32 /* Alter flags of a mounted FS */
|
#define MS_REMOUNT 32 /* Alter flags of a mounted FS */
|
||||||
#define MS_MANDLOCK 64 /* Allow mandatory locks on an FS */
|
#define MS_MANDLOCK 64 /* Allow mandatory locks on an FS */
|
||||||
#define MS_DIRSYNC 128 /* Directory modifications are synchronous */
|
#define MS_DIRSYNC 128 /* Directory modifications are synchronous */
|
||||||
|
#define MS_NOSYMFOLLOW 256 /* Do not follow symlinks */
|
||||||
#define MS_NOATIME 1024 /* Do not update access times. */
|
#define MS_NOATIME 1024 /* Do not update access times. */
|
||||||
#define MS_NODIRATIME 2048 /* Do not update directory access times */
|
#define MS_NODIRATIME 2048 /* Do not update directory access times */
|
||||||
#define MS_BIND 4096
|
#define MS_BIND 4096
|
||||||
|
@@ -1196,7 +1196,7 @@ union perf_mem_data_src {
|
|||||||
|
|
||||||
#define PERF_MEM_SNOOPX_FWD 0x01 /* forward */
|
#define PERF_MEM_SNOOPX_FWD 0x01 /* forward */
|
||||||
/* 1 free */
|
/* 1 free */
|
||||||
#define PERF_MEM_SNOOPX_SHIFT 38
|
#define PERF_MEM_SNOOPX_SHIFT 38
|
||||||
|
|
||||||
/* locked instruction */
|
/* locked instruction */
|
||||||
#define PERF_MEM_LOCK_NA 0x01 /* not available */
|
#define PERF_MEM_LOCK_NA 0x01 /* not available */
|
||||||
|
@@ -233,6 +233,15 @@ struct prctl_mm_map {
|
|||||||
#define PR_SET_TAGGED_ADDR_CTRL 55
|
#define PR_SET_TAGGED_ADDR_CTRL 55
|
||||||
#define PR_GET_TAGGED_ADDR_CTRL 56
|
#define PR_GET_TAGGED_ADDR_CTRL 56
|
||||||
# define PR_TAGGED_ADDR_ENABLE (1UL << 0)
|
# define PR_TAGGED_ADDR_ENABLE (1UL << 0)
|
||||||
|
/* MTE tag check fault modes */
|
||||||
|
# define PR_MTE_TCF_SHIFT 1
|
||||||
|
# define PR_MTE_TCF_NONE (0UL << PR_MTE_TCF_SHIFT)
|
||||||
|
# define PR_MTE_TCF_SYNC (1UL << PR_MTE_TCF_SHIFT)
|
||||||
|
# define PR_MTE_TCF_ASYNC (2UL << PR_MTE_TCF_SHIFT)
|
||||||
|
# define PR_MTE_TCF_MASK (3UL << PR_MTE_TCF_SHIFT)
|
||||||
|
/* MTE tag inclusion mask */
|
||||||
|
# define PR_MTE_TAG_SHIFT 3
|
||||||
|
# define PR_MTE_TAG_MASK (0xffffUL << PR_MTE_TAG_SHIFT)
|
||||||
|
|
||||||
/* Control reclaim behavior when allocating memory */
|
/* Control reclaim behavior when allocating memory */
|
||||||
#define PR_SET_IO_FLUSHER 57
|
#define PR_SET_IO_FLUSHER 57
|
||||||
|
@@ -146,4 +146,8 @@
|
|||||||
|
|
||||||
/* Set event fd for config interrupt*/
|
/* Set event fd for config interrupt*/
|
||||||
#define VHOST_VDPA_SET_CONFIG_CALL _IOW(VHOST_VIRTIO, 0x77, int)
|
#define VHOST_VDPA_SET_CONFIG_CALL _IOW(VHOST_VIRTIO, 0x77, int)
|
||||||
|
|
||||||
|
/* Get the valid iova range */
|
||||||
|
#define VHOST_VDPA_GET_IOVA_RANGE _IOR(VHOST_VIRTIO, 0x78, \
|
||||||
|
struct vhost_vdpa_iova_range)
|
||||||
#endif
|
#endif
|
||||||
|
@@ -749,6 +749,7 @@ else
|
|||||||
PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
|
PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
|
||||||
PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
|
PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
|
||||||
PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS))
|
PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS))
|
||||||
|
PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
|
||||||
PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
|
PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
|
||||||
FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
|
FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
|
||||||
|
|
||||||
|
@@ -361,12 +361,13 @@
|
|||||||
437 common openat2 sys_openat2
|
437 common openat2 sys_openat2
|
||||||
438 common pidfd_getfd sys_pidfd_getfd
|
438 common pidfd_getfd sys_pidfd_getfd
|
||||||
439 common faccessat2 sys_faccessat2
|
439 common faccessat2 sys_faccessat2
|
||||||
|
440 common process_madvise sys_process_madvise
|
||||||
|
|
||||||
#
|
#
|
||||||
# x32-specific system call numbers start at 512 to avoid cache impact
|
# Due to a historical design error, certain syscalls are numbered differently
|
||||||
# for native 64-bit operation. The __x32_compat_sys stubs are created
|
# in x32 as compared to native x86_64. These syscalls have numbers 512-547.
|
||||||
# on-the-fly for compat_sys_*() compatibility system calls if X86_X32
|
# Do not add new syscalls to this range. Numbers 548 and above are available
|
||||||
# is defined.
|
# for non-x32 use.
|
||||||
#
|
#
|
||||||
512 x32 rt_sigaction compat_sys_rt_sigaction
|
512 x32 rt_sigaction compat_sys_rt_sigaction
|
||||||
513 x32 rt_sigreturn compat_sys_x32_rt_sigreturn
|
513 x32 rt_sigreturn compat_sys_x32_rt_sigreturn
|
||||||
@@ -404,3 +405,5 @@
|
|||||||
545 x32 execveat compat_sys_execveat
|
545 x32 execveat compat_sys_execveat
|
||||||
546 x32 preadv2 compat_sys_preadv64v2
|
546 x32 preadv2 compat_sys_preadv64v2
|
||||||
547 x32 pwritev2 compat_sys_pwritev64v2
|
547 x32 pwritev2 compat_sys_pwritev64v2
|
||||||
|
# This is the end of the legacy x32 range. Numbers 548 and above are
|
||||||
|
# not special and are not to be used for x32-specific syscalls.
|
||||||
|
@@ -4639,9 +4639,9 @@ do_concat:
|
|||||||
err = 0;
|
err = 0;
|
||||||
|
|
||||||
if (lists[0]) {
|
if (lists[0]) {
|
||||||
struct option o = OPT_CALLBACK('e', "event", &trace->evlist, "event",
|
struct option o = {
|
||||||
"event selector. use 'perf list' to list available events",
|
.value = &trace->evlist,
|
||||||
parse_events_option);
|
};
|
||||||
err = parse_events_option(&o, lists[0], 0);
|
err = parse_events_option(&o, lists[0], 0);
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
@@ -4655,9 +4655,12 @@ static int trace__parse_cgroups(const struct option *opt, const char *str, int u
|
|||||||
{
|
{
|
||||||
struct trace *trace = opt->value;
|
struct trace *trace = opt->value;
|
||||||
|
|
||||||
if (!list_empty(&trace->evlist->core.entries))
|
if (!list_empty(&trace->evlist->core.entries)) {
|
||||||
return parse_cgroups(opt, str, unset);
|
struct option o = {
|
||||||
|
.value = &trace->evlist,
|
||||||
|
};
|
||||||
|
return parse_cgroups(&o, str, unset);
|
||||||
|
}
|
||||||
trace->cgroup = evlist__findnew_cgroup(trace->evlist, str);
|
trace->cgroup = evlist__findnew_cgroup(trace->evlist, str);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -329,7 +329,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"BriefDescription": "Average external Memory Bandwidth Use for reads and writes [GB / sec]",
|
"BriefDescription": "Average external Memory Bandwidth Use for reads and writes [GB / sec]",
|
||||||
"MetricExpr": "( 64 * ( uncore_imc@cas_count_read@ + uncore_imc@cas_count_write@ ) / 1000000000 ) / duration_time",
|
"MetricExpr": "( ( ( uncore_imc@cas_count_read@ + uncore_imc@cas_count_write@ ) * 1048576 ) / 1000000000 ) / duration_time",
|
||||||
"MetricGroup": "Memory_BW;SoC",
|
"MetricGroup": "Memory_BW;SoC",
|
||||||
"MetricName": "DRAM_BW_Use"
|
"MetricName": "DRAM_BW_Use"
|
||||||
},
|
},
|
||||||
|
@@ -323,7 +323,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"BriefDescription": "Average external Memory Bandwidth Use for reads and writes [GB / sec]",
|
"BriefDescription": "Average external Memory Bandwidth Use for reads and writes [GB / sec]",
|
||||||
"MetricExpr": "( 64 * ( uncore_imc@cas_count_read@ + uncore_imc@cas_count_write@ ) / 1000000000 ) / duration_time",
|
"MetricExpr": "( ( ( uncore_imc@cas_count_read@ + uncore_imc@cas_count_write@ ) * 1048576 ) / 1000000000 ) / duration_time",
|
||||||
"MetricGroup": "Memory_BW;SoC",
|
"MetricGroup": "Memory_BW;SoC",
|
||||||
"MetricName": "DRAM_BW_Use"
|
"MetricName": "DRAM_BW_Use"
|
||||||
},
|
},
|
||||||
|
@@ -95,7 +95,7 @@ static int unwind_entry(struct unwind_entry *entry, void *arg)
|
|||||||
return strcmp((const char *) symbol, funcs[idx]);
|
return strcmp((const char *) symbol, funcs[idx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
__no_tail_call noinline int test_dwarf_unwind__thread(struct thread *thread)
|
noinline int test_dwarf_unwind__thread(struct thread *thread)
|
||||||
{
|
{
|
||||||
struct perf_sample sample;
|
struct perf_sample sample;
|
||||||
unsigned long cnt = 0;
|
unsigned long cnt = 0;
|
||||||
@@ -126,7 +126,7 @@ __no_tail_call noinline int test_dwarf_unwind__thread(struct thread *thread)
|
|||||||
|
|
||||||
static int global_unwind_retval = -INT_MAX;
|
static int global_unwind_retval = -INT_MAX;
|
||||||
|
|
||||||
__no_tail_call noinline int test_dwarf_unwind__compare(void *p1, void *p2)
|
noinline int test_dwarf_unwind__compare(void *p1, void *p2)
|
||||||
{
|
{
|
||||||
/* Any possible value should be 'thread' */
|
/* Any possible value should be 'thread' */
|
||||||
struct thread *thread = *(struct thread **)p1;
|
struct thread *thread = *(struct thread **)p1;
|
||||||
@@ -145,7 +145,7 @@ __no_tail_call noinline int test_dwarf_unwind__compare(void *p1, void *p2)
|
|||||||
return p1 - p2;
|
return p1 - p2;
|
||||||
}
|
}
|
||||||
|
|
||||||
__no_tail_call noinline int test_dwarf_unwind__krava_3(struct thread *thread)
|
noinline int test_dwarf_unwind__krava_3(struct thread *thread)
|
||||||
{
|
{
|
||||||
struct thread *array[2] = {thread, thread};
|
struct thread *array[2] = {thread, thread};
|
||||||
void *fp = &bsearch;
|
void *fp = &bsearch;
|
||||||
@@ -164,12 +164,12 @@ __no_tail_call noinline int test_dwarf_unwind__krava_3(struct thread *thread)
|
|||||||
return global_unwind_retval;
|
return global_unwind_retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
__no_tail_call noinline int test_dwarf_unwind__krava_2(struct thread *thread)
|
noinline int test_dwarf_unwind__krava_2(struct thread *thread)
|
||||||
{
|
{
|
||||||
return test_dwarf_unwind__krava_3(thread);
|
return test_dwarf_unwind__krava_3(thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
__no_tail_call noinline int test_dwarf_unwind__krava_1(struct thread *thread)
|
noinline int test_dwarf_unwind__krava_1(struct thread *thread)
|
||||||
{
|
{
|
||||||
return test_dwarf_unwind__krava_2(thread);
|
return test_dwarf_unwind__krava_2(thread);
|
||||||
}
|
}
|
||||||
|
@@ -2963,7 +2963,7 @@ static int perf_evsel__hists_browse(struct evsel *evsel, int nr_events,
|
|||||||
struct popup_action actions[MAX_OPTIONS];
|
struct popup_action actions[MAX_OPTIONS];
|
||||||
int nr_options = 0;
|
int nr_options = 0;
|
||||||
int key = -1;
|
int key = -1;
|
||||||
char buf[64];
|
char buf[128];
|
||||||
int delay_secs = hbt ? hbt->refresh : 0;
|
int delay_secs = hbt ? hbt->refresh : 0;
|
||||||
|
|
||||||
#define HIST_BROWSER_HELP_COMMON \
|
#define HIST_BROWSER_HELP_COMMON \
|
||||||
|
@@ -102,6 +102,8 @@ int build_id__sprintf(const struct build_id *build_id, char *bf)
|
|||||||
const u8 *raw = build_id->data;
|
const u8 *raw = build_id->data;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
|
bf[0] = 0x0;
|
||||||
|
|
||||||
for (i = 0; i < build_id->size; ++i) {
|
for (i = 0; i < build_id->size; ++i) {
|
||||||
sprintf(bid, "%02x", *raw);
|
sprintf(bid, "%02x", *raw);
|
||||||
++raw;
|
++raw;
|
||||||
|
@@ -15,6 +15,9 @@
|
|||||||
/* make sure libbpf doesn't use kernel-only integer typedefs */
|
/* make sure libbpf doesn't use kernel-only integer typedefs */
|
||||||
#pragma GCC poison u8 u16 u32 u64 s8 s16 s32 s64
|
#pragma GCC poison u8 u16 u32 u64 s8 s16 s32 s64
|
||||||
|
|
||||||
|
/* prevent accidental re-addition of reallocarray() */
|
||||||
|
#pragma GCC poison reallocarray
|
||||||
|
|
||||||
/* start with 4 buckets */
|
/* start with 4 buckets */
|
||||||
#define HASHMAP_MIN_CAP_BITS 2
|
#define HASHMAP_MIN_CAP_BITS 2
|
||||||
|
|
||||||
|
@@ -25,6 +25,18 @@ static inline size_t hash_bits(size_t h, int bits)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* generic C-string hashing function */
|
||||||
|
static inline size_t str_hash(const char *s)
|
||||||
|
{
|
||||||
|
size_t h = 0;
|
||||||
|
|
||||||
|
while (*s) {
|
||||||
|
h = h * 31 + *s;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
typedef size_t (*hashmap_hash_fn)(const void *key, void *ctx);
|
typedef size_t (*hashmap_hash_fn)(const void *key, void *ctx);
|
||||||
typedef bool (*hashmap_equal_fn)(const void *key1, const void *key2, void *ctx);
|
typedef bool (*hashmap_equal_fn)(const void *key1, const void *key2, void *ctx);
|
||||||
|
|
||||||
|
@@ -786,11 +786,20 @@ static int machine__process_ksymbol_unregister(struct machine *machine,
|
|||||||
union perf_event *event,
|
union perf_event *event,
|
||||||
struct perf_sample *sample __maybe_unused)
|
struct perf_sample *sample __maybe_unused)
|
||||||
{
|
{
|
||||||
|
struct symbol *sym;
|
||||||
struct map *map;
|
struct map *map;
|
||||||
|
|
||||||
map = maps__find(&machine->kmaps, event->ksymbol.addr);
|
map = maps__find(&machine->kmaps, event->ksymbol.addr);
|
||||||
if (map)
|
if (!map)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (map != machine->vmlinux_map)
|
||||||
maps__remove(&machine->kmaps, map);
|
maps__remove(&machine->kmaps, map);
|
||||||
|
else {
|
||||||
|
sym = dso__find_symbol(map->dso, map->map_ip(map, map->start));
|
||||||
|
if (sym)
|
||||||
|
dso__delete_symbol(map->dso, sym);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -1592,7 +1592,6 @@ static void _free_command_line(wchar_t **command_line, int num)
|
|||||||
static int python_start_script(const char *script, int argc, const char **argv)
|
static int python_start_script(const char *script, int argc, const char **argv)
|
||||||
{
|
{
|
||||||
struct tables *tables = &tables_global;
|
struct tables *tables = &tables_global;
|
||||||
PyMODINIT_FUNC (*initfunc)(void);
|
|
||||||
#if PY_MAJOR_VERSION < 3
|
#if PY_MAJOR_VERSION < 3
|
||||||
const char **command_line;
|
const char **command_line;
|
||||||
#else
|
#else
|
||||||
@@ -1607,20 +1606,18 @@ static int python_start_script(const char *script, int argc, const char **argv)
|
|||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
#if PY_MAJOR_VERSION < 3
|
#if PY_MAJOR_VERSION < 3
|
||||||
initfunc = initperf_trace_context;
|
|
||||||
command_line = malloc((argc + 1) * sizeof(const char *));
|
command_line = malloc((argc + 1) * sizeof(const char *));
|
||||||
command_line[0] = script;
|
command_line[0] = script;
|
||||||
for (i = 1; i < argc + 1; i++)
|
for (i = 1; i < argc + 1; i++)
|
||||||
command_line[i] = argv[i - 1];
|
command_line[i] = argv[i - 1];
|
||||||
|
PyImport_AppendInittab(name, initperf_trace_context);
|
||||||
#else
|
#else
|
||||||
initfunc = PyInit_perf_trace_context;
|
|
||||||
command_line = malloc((argc + 1) * sizeof(wchar_t *));
|
command_line = malloc((argc + 1) * sizeof(wchar_t *));
|
||||||
command_line[0] = Py_DecodeLocale(script, NULL);
|
command_line[0] = Py_DecodeLocale(script, NULL);
|
||||||
for (i = 1; i < argc + 1; i++)
|
for (i = 1; i < argc + 1; i++)
|
||||||
command_line[i] = Py_DecodeLocale(argv[i - 1], NULL);
|
command_line[i] = Py_DecodeLocale(argv[i - 1], NULL);
|
||||||
|
PyImport_AppendInittab(name, PyInit_perf_trace_context);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PyImport_AppendInittab(name, initfunc);
|
|
||||||
Py_Initialize();
|
Py_Initialize();
|
||||||
|
|
||||||
#if PY_MAJOR_VERSION < 3
|
#if PY_MAJOR_VERSION < 3
|
||||||
|
@@ -595,6 +595,7 @@ static void perf_event__mmap2_swap(union perf_event *event,
|
|||||||
event->mmap2.maj = bswap_32(event->mmap2.maj);
|
event->mmap2.maj = bswap_32(event->mmap2.maj);
|
||||||
event->mmap2.min = bswap_32(event->mmap2.min);
|
event->mmap2.min = bswap_32(event->mmap2.min);
|
||||||
event->mmap2.ino = bswap_64(event->mmap2.ino);
|
event->mmap2.ino = bswap_64(event->mmap2.ino);
|
||||||
|
event->mmap2.ino_generation = bswap_64(event->mmap2.ino_generation);
|
||||||
|
|
||||||
if (sample_id_all) {
|
if (sample_id_all) {
|
||||||
void *data = &event->mmap2.filename;
|
void *data = &event->mmap2.filename;
|
||||||
@@ -710,6 +711,18 @@ static void perf_event__namespaces_swap(union perf_event *event,
|
|||||||
swap_sample_id_all(event, &event->namespaces.link_info[i]);
|
swap_sample_id_all(event, &event->namespaces.link_info[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void perf_event__cgroup_swap(union perf_event *event, bool sample_id_all)
|
||||||
|
{
|
||||||
|
event->cgroup.id = bswap_64(event->cgroup.id);
|
||||||
|
|
||||||
|
if (sample_id_all) {
|
||||||
|
void *data = &event->cgroup.path;
|
||||||
|
|
||||||
|
data += PERF_ALIGN(strlen(data) + 1, sizeof(u64));
|
||||||
|
swap_sample_id_all(event, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static u8 revbyte(u8 b)
|
static u8 revbyte(u8 b)
|
||||||
{
|
{
|
||||||
int rev = (b >> 4) | ((b & 0xf) << 4);
|
int rev = (b >> 4) | ((b & 0xf) << 4);
|
||||||
@@ -952,6 +965,7 @@ static perf_event__swap_op perf_event__swap_ops[] = {
|
|||||||
[PERF_RECORD_SWITCH] = perf_event__switch_swap,
|
[PERF_RECORD_SWITCH] = perf_event__switch_swap,
|
||||||
[PERF_RECORD_SWITCH_CPU_WIDE] = perf_event__switch_swap,
|
[PERF_RECORD_SWITCH_CPU_WIDE] = perf_event__switch_swap,
|
||||||
[PERF_RECORD_NAMESPACES] = perf_event__namespaces_swap,
|
[PERF_RECORD_NAMESPACES] = perf_event__namespaces_swap,
|
||||||
|
[PERF_RECORD_CGROUP] = perf_event__cgroup_swap,
|
||||||
[PERF_RECORD_TEXT_POKE] = perf_event__text_poke_swap,
|
[PERF_RECORD_TEXT_POKE] = perf_event__text_poke_swap,
|
||||||
[PERF_RECORD_HEADER_ATTR] = perf_event__hdr_attr_swap,
|
[PERF_RECORD_HEADER_ATTR] = perf_event__hdr_attr_swap,
|
||||||
[PERF_RECORD_HEADER_EVENT_TYPE] = perf_event__event_type_swap,
|
[PERF_RECORD_HEADER_EVENT_TYPE] = perf_event__event_type_swap,
|
||||||
|
@@ -515,6 +515,13 @@ void dso__insert_symbol(struct dso *dso, struct symbol *sym)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dso__delete_symbol(struct dso *dso, struct symbol *sym)
|
||||||
|
{
|
||||||
|
rb_erase_cached(&sym->rb_node, &dso->symbols);
|
||||||
|
symbol__delete(sym);
|
||||||
|
dso__reset_find_symbol_cache(dso);
|
||||||
|
}
|
||||||
|
|
||||||
struct symbol *dso__find_symbol(struct dso *dso, u64 addr)
|
struct symbol *dso__find_symbol(struct dso *dso, u64 addr)
|
||||||
{
|
{
|
||||||
if (dso->last_find_result.addr != addr || dso->last_find_result.symbol == NULL) {
|
if (dso->last_find_result.addr != addr || dso->last_find_result.symbol == NULL) {
|
||||||
|
@@ -131,6 +131,8 @@ int dso__load_kallsyms(struct dso *dso, const char *filename, struct map *map);
|
|||||||
|
|
||||||
void dso__insert_symbol(struct dso *dso,
|
void dso__insert_symbol(struct dso *dso,
|
||||||
struct symbol *sym);
|
struct symbol *sym);
|
||||||
|
void dso__delete_symbol(struct dso *dso,
|
||||||
|
struct symbol *sym);
|
||||||
|
|
||||||
struct symbol *dso__find_symbol(struct dso *dso, u64 addr);
|
struct symbol *dso__find_symbol(struct dso *dso, u64 addr);
|
||||||
struct symbol *dso__find_symbol_by_name(struct dso *dso, const char *name);
|
struct symbol *dso__find_symbol_by_name(struct dso *dso, const char *name);
|
||||||
|
Reference in New Issue
Block a user