mirror of
https://github.com/torvalds/linux.git
synced 2024-11-01 04:53:36 +01:00
Compare commits
18 commits
c782fb39f3
...
c120d06a66
Author | SHA1 | Date | |
---|---|---|---|
|
c120d06a66 | ||
|
0fc810ae3a | ||
|
14b7d43c5c | ||
|
a5384c4267 | ||
|
55f1b540d8 | ||
|
93e4b86b3e | ||
|
21a3a3d015 | ||
|
08a7d25255 | ||
|
758f181589 | ||
|
06a130e42a | ||
|
d822ca29a4 | ||
|
5d35634ecc | ||
|
7fbff3c0e0 | ||
|
395d38419f | ||
|
ecabac70ff | ||
|
141d5af3c9 | ||
|
39c6a35620 | ||
|
ab8aaab874 |
20 changed files with 187 additions and 96 deletions
41
MAINTAINERS
41
MAINTAINERS
|
@ -322,7 +322,6 @@ F: tools/power/acpi/
|
|||
|
||||
ACPI FOR ARM64 (ACPI/arm64)
|
||||
M: Lorenzo Pieralisi <lpieralisi@kernel.org>
|
||||
M: Hanjun Guo <guohanjun@huawei.com>
|
||||
M: Sudeep Holla <sudeep.holla@arm.com>
|
||||
L: linux-acpi@vger.kernel.org
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
|
@ -3873,7 +3872,6 @@ F: Documentation/filesystems/befs.rst
|
|||
F: fs/befs/
|
||||
|
||||
BFQ I/O SCHEDULER
|
||||
M: Yu Kuai <yukuai3@huawei.com>
|
||||
L: linux-block@vger.kernel.org
|
||||
S: Odd Fixes
|
||||
F: Documentation/block/bfq-iosched.rst
|
||||
|
@ -4082,7 +4080,6 @@ X: arch/riscv/net/bpf_jit_comp64.c
|
|||
|
||||
BPF JIT for RISC-V (64-bit)
|
||||
M: Björn Töpel <bjorn@kernel.org>
|
||||
R: Pu Lehui <pulehui@huawei.com>
|
||||
R: Puranjay Mohan <puranjay@kernel.org>
|
||||
L: bpf@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -5697,7 +5694,6 @@ F: include/linux/compiler_attributes.h
|
|||
|
||||
COMPUTE EXPRESS LINK (CXL)
|
||||
M: Davidlohr Bueso <dave@stgolabs.net>
|
||||
M: Jonathan Cameron <jonathan.cameron@huawei.com>
|
||||
M: Dave Jiang <dave.jiang@intel.com>
|
||||
M: Alison Schofield <alison.schofield@intel.com>
|
||||
M: Vishal Verma <vishal.l.verma@intel.com>
|
||||
|
@ -5712,7 +5708,6 @@ F: include/uapi/linux/cxl_mem.h
|
|||
F: tools/testing/cxl/
|
||||
|
||||
COMPUTE EXPRESS LINK PMU (CPMU)
|
||||
M: Jonathan Cameron <jonathan.cameron@huawei.com>
|
||||
L: linux-cxl@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/admin-guide/perf/cxl.rst
|
||||
|
@ -8525,7 +8520,6 @@ F: include/uapi/linux/ext4.h
|
|||
|
||||
Extended Verification Module (EVM)
|
||||
M: Mimi Zohar <zohar@linux.ibm.com>
|
||||
M: Roberto Sassu <roberto.sassu@huawei.com>
|
||||
L: linux-integrity@vger.kernel.org
|
||||
S: Supported
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity.git
|
||||
|
@ -10190,21 +10184,17 @@ F: net/dsa/tag_hellcreek.c
|
|||
|
||||
HISILICON DMA DRIVER
|
||||
M: Zhou Wang <wangzhou1@hisilicon.com>
|
||||
M: Jie Hai <haijie1@huawei.com>
|
||||
L: dmaengine@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/dma/hisi_dma.c
|
||||
|
||||
HISILICON GPIO DRIVER
|
||||
M: Jay Fang <f.fangjian@huawei.com>
|
||||
L: linux-gpio@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/gpio/hisilicon,ascend910-gpio.yaml
|
||||
F: drivers/gpio/gpio-hisi.c
|
||||
|
||||
HISILICON HIGH PERFORMANCE RSA ENGINE DRIVER (HPRE)
|
||||
M: Zhiqi Song <songzhiqi1@huawei.com>
|
||||
M: Longfang Liu <liulongfang@huawei.com>
|
||||
L: linux-crypto@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/ABI/testing/debugfs-hisi-hpre
|
||||
|
@ -10213,7 +10203,6 @@ F: drivers/crypto/hisilicon/hpre/hpre_crypto.c
|
|||
F: drivers/crypto/hisilicon/hpre/hpre_main.c
|
||||
|
||||
HISILICON HNS3 PMU DRIVER
|
||||
M: Jijie Shao <shaojijie@huawei.com>
|
||||
S: Supported
|
||||
F: Documentation/admin-guide/perf/hns3-pmu.rst
|
||||
F: drivers/perf/hisilicon/hns3_pmu.c
|
||||
|
@ -10227,31 +10216,24 @@ F: Documentation/devicetree/bindings/i2c/hisilicon,ascend910-i2c.yaml
|
|||
F: drivers/i2c/busses/i2c-hisi.c
|
||||
|
||||
HISILICON KUNPENG SOC HCCS DRIVER
|
||||
M: Huisong Li <lihuisong@huawei.com>
|
||||
S: Maintained
|
||||
F: Documentation/ABI/testing/sysfs-devices-platform-kunpeng_hccs
|
||||
F: drivers/soc/hisilicon/kunpeng_hccs.c
|
||||
F: drivers/soc/hisilicon/kunpeng_hccs.h
|
||||
|
||||
HISILICON LPC BUS DRIVER
|
||||
M: Jay Fang <f.fangjian@huawei.com>
|
||||
S: Maintained
|
||||
W: http://www.hisilicon.com
|
||||
F: Documentation/devicetree/bindings/arm/hisilicon/low-pin-count.yaml
|
||||
F: drivers/bus/hisi_lpc.c
|
||||
|
||||
HISILICON NETWORK SUBSYSTEM 3 DRIVER (HNS3)
|
||||
M: Jian Shen <shenjian15@huawei.com>
|
||||
M: Salil Mehta <salil.mehta@huawei.com>
|
||||
M: Jijie Shao <shaojijie@huawei.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
W: http://www.hisilicon.com
|
||||
F: drivers/net/ethernet/hisilicon/hns3/
|
||||
|
||||
HISILICON NETWORK SUBSYSTEM DRIVER
|
||||
M: Jian Shen <shenjian15@huawei.com>
|
||||
M: Salil Mehta <salil.mehta@huawei.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
W: http://www.hisilicon.com
|
||||
|
@ -10260,7 +10242,6 @@ F: drivers/net/ethernet/hisilicon/
|
|||
|
||||
HISILICON PMU DRIVER
|
||||
M: Yicong Yang <yangyicong@hisilicon.com>
|
||||
M: Jonathan Cameron <jonathan.cameron@huawei.com>
|
||||
S: Supported
|
||||
W: http://www.hisilicon.com
|
||||
F: Documentation/admin-guide/perf/hisi-pcie-pmu.rst
|
||||
|
@ -10269,7 +10250,6 @@ F: drivers/perf/hisilicon
|
|||
|
||||
HISILICON PTT DRIVER
|
||||
M: Yicong Yang <yangyicong@hisilicon.com>
|
||||
M: Jonathan Cameron <jonathan.cameron@huawei.com>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/ABI/testing/sysfs-bus-event_source-devices-hisi_ptt
|
||||
|
@ -10280,7 +10260,6 @@ F: tools/perf/util/hisi-ptt*
|
|||
F: tools/perf/util/hisi-ptt-decoder/*
|
||||
|
||||
HISILICON QM DRIVER
|
||||
M: Weili Qian <qianweili@huawei.com>
|
||||
M: Zhou Wang <wangzhou1@hisilicon.com>
|
||||
L: linux-crypto@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -10291,7 +10270,6 @@ F: drivers/crypto/hisilicon/sgl.c
|
|||
F: include/linux/hisi_acc_qm.h
|
||||
|
||||
HISILICON ROCE DRIVER
|
||||
M: Chengchang Tang <tangchengchang@huawei.com>
|
||||
M: Junxian Huang <huangjunxian6@hisilicon.com>
|
||||
L: linux-rdma@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -10299,14 +10277,12 @@ F: Documentation/devicetree/bindings/infiniband/hisilicon-hns-roce.txt
|
|||
F: drivers/infiniband/hw/hns/
|
||||
|
||||
HISILICON SAS Controller
|
||||
M: Yihang Li <liyihang9@huawei.com>
|
||||
S: Supported
|
||||
W: http://www.hisilicon.com
|
||||
F: Documentation/devicetree/bindings/scsi/hisilicon-sas.txt
|
||||
F: drivers/scsi/hisi_sas/
|
||||
|
||||
HISILICON SECURITY ENGINE V2 DRIVER (SEC2)
|
||||
M: Longfang Liu <liulongfang@huawei.com>
|
||||
L: linux-crypto@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/ABI/testing/debugfs-hisi-sec
|
||||
|
@ -10316,7 +10292,6 @@ F: drivers/crypto/hisilicon/sec2/sec_crypto.h
|
|||
F: drivers/crypto/hisilicon/sec2/sec_main.c
|
||||
|
||||
HISILICON SPI Controller DRIVER FOR KUNPENG SOCS
|
||||
M: Jay Fang <f.fangjian@huawei.com>
|
||||
L: linux-spi@vger.kernel.org
|
||||
S: Maintained
|
||||
W: http://www.hisilicon.com
|
||||
|
@ -10337,18 +10312,15 @@ F: Documentation/devicetree/bindings/mfd/hisilicon,hi6421-spmi-pmic.yaml
|
|||
F: drivers/mfd/hi6421-spmi-pmic.c
|
||||
|
||||
HISILICON TRUE RANDOM NUMBER GENERATOR V2 SUPPORT
|
||||
M: Weili Qian <qianweili@huawei.com>
|
||||
S: Maintained
|
||||
F: drivers/crypto/hisilicon/trng/trng.c
|
||||
|
||||
HISILICON V3XX SPI NOR FLASH Controller Driver
|
||||
M: Jay Fang <f.fangjian@huawei.com>
|
||||
S: Maintained
|
||||
W: http://www.hisilicon.com
|
||||
F: drivers/spi/spi-hisi-sfc-v3xx.c
|
||||
|
||||
HISILICON ZIP Controller DRIVER
|
||||
M: Yang Shen <shenyang39@huawei.com>
|
||||
M: Zhou Wang <wangzhou1@hisilicon.com>
|
||||
L: linux-crypto@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -10505,7 +10477,6 @@ T: git git://linuxtv.org/media_tree.git
|
|||
F: drivers/media/platform/st/sti/hva
|
||||
|
||||
HWPOISON MEMORY FAILURE HANDLING
|
||||
M: Miaohe Lin <linmiaohe@huawei.com>
|
||||
R: Naoya Horiguchi <nao.horiguchi@gmail.com>
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
|
@ -11244,7 +11215,6 @@ F: drivers/crypto/inside-secure/
|
|||
|
||||
INTEGRITY MEASUREMENT ARCHITECTURE (IMA)
|
||||
M: Mimi Zohar <zohar@linux.ibm.com>
|
||||
M: Roberto Sassu <roberto.sassu@huawei.com>
|
||||
M: Dmitry Kasatkin <dmitry.kasatkin@gmail.com>
|
||||
R: Eric Snowberg <eric.snowberg@oracle.com>
|
||||
L: linux-integrity@vger.kernel.org
|
||||
|
@ -12448,7 +12418,6 @@ M: Marc Zyngier <maz@kernel.org>
|
|||
M: Oliver Upton <oliver.upton@linux.dev>
|
||||
R: Joey Gouly <joey.gouly@arm.com>
|
||||
R: Suzuki K Poulose <suzuki.poulose@arm.com>
|
||||
R: Zenghui Yu <yuzenghui@huawei.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
L: kvmarm@lists.linux.dev
|
||||
S: Maintained
|
||||
|
@ -20503,7 +20472,6 @@ F: drivers/iio/chemical/ens160.h
|
|||
|
||||
SCSI LIBSAS SUBSYSTEM
|
||||
R: John Garry <john.g.garry@oracle.com>
|
||||
R: Jason Yan <yanaijie@huawei.com>
|
||||
L: linux-scsi@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/scsi/libsas.rst
|
||||
|
@ -21309,7 +21277,6 @@ F: include/linux/property.h
|
|||
|
||||
SOFTWARE RAID (Multiple Disks) SUPPORT
|
||||
M: Song Liu <song@kernel.org>
|
||||
R: Yu Kuai <yukuai3@huawei.com>
|
||||
L: linux-raid@vger.kernel.org
|
||||
S: Supported
|
||||
Q: https://patchwork.kernel.org/project/linux-raid/list/
|
||||
|
@ -23555,7 +23522,6 @@ F: include/uapi/misc/uacce/
|
|||
|
||||
UBI FILE SYSTEM (UBIFS)
|
||||
M: Richard Weinberger <richard@nod.at>
|
||||
R: Zhihao Cheng <chengzhihao1@huawei.com>
|
||||
L: linux-mtd@lists.infradead.org
|
||||
S: Supported
|
||||
W: http://www.linux-mtd.infradead.org/doc/ubifs.html
|
||||
|
@ -23705,7 +23671,6 @@ F: drivers/ufs/host/ufs-renesas.c
|
|||
|
||||
UNSORTED BLOCK IMAGES (UBI)
|
||||
M: Richard Weinberger <richard@nod.at>
|
||||
R: Zhihao Cheng <chengzhihao1@huawei.com>
|
||||
L: linux-mtd@lists.infradead.org
|
||||
S: Supported
|
||||
W: http://www.linux-mtd.infradead.org/
|
||||
|
@ -23809,7 +23774,6 @@ S: Maintained
|
|||
F: drivers/usb/roles/intel-xhci-usb-role-switch.c
|
||||
|
||||
USB IP DRIVER FOR HISILICON KIRIN 960
|
||||
M: Yu Chen <chenyu56@huawei.com>
|
||||
M: Binghui Wang <wangbinghui@hisilicon.com>
|
||||
L: linux-usb@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -24189,8 +24153,6 @@ S: Orphan
|
|||
F: drivers/vfio/fsl-mc/
|
||||
|
||||
VFIO HISILICON PCI DRIVER
|
||||
M: Longfang Liu <liulongfang@huawei.com>
|
||||
M: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
|
||||
L: kvm@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/vfio/pci/hisilicon/
|
||||
|
@ -24219,7 +24181,6 @@ F: drivers/vfio/pci/nvgrace-gpu/
|
|||
VFIO PCI DEVICE SPECIFIC DRIVERS
|
||||
R: Jason Gunthorpe <jgg@nvidia.com>
|
||||
R: Yishai Hadas <yishaih@nvidia.com>
|
||||
R: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
|
||||
R: Kevin Tian <kevin.tian@intel.com>
|
||||
L: kvm@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -24401,7 +24362,6 @@ F: tools/virtio/
|
|||
F: tools/testing/selftests/drivers/net/virtio_net/
|
||||
|
||||
VIRTIO CRYPTO DRIVER
|
||||
M: Gonglei <arei.gonglei@huawei.com>
|
||||
L: virtualization@lists.linux.dev
|
||||
L: linux-crypto@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -25487,7 +25447,6 @@ F: drivers/input/misc/yealink.*
|
|||
|
||||
Z3FOLD COMPRESSED PAGE ALLOCATOR
|
||||
M: Vitaly Wool <vitaly.wool@konsulko.com>
|
||||
R: Miaohe Lin <linmiaohe@huawei.com>
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
F: mm/z3fold.c
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#else
|
||||
#define can_do_masked_user_access() 0
|
||||
#define masked_user_access_begin(src) NULL
|
||||
#define mask_user_address(src) (src)
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -159,19 +160,27 @@ _inline_copy_from_user(void *to, const void __user *from, unsigned long n)
|
|||
{
|
||||
unsigned long res = n;
|
||||
might_fault();
|
||||
if (!should_fail_usercopy() && likely(access_ok(from, n))) {
|
||||
if (should_fail_usercopy())
|
||||
goto fail;
|
||||
if (can_do_masked_user_access())
|
||||
from = mask_user_address(from);
|
||||
else {
|
||||
if (!access_ok(from, n))
|
||||
goto fail;
|
||||
/*
|
||||
* Ensure that bad access_ok() speculation will not
|
||||
* lead to nasty side effects *after* the copy is
|
||||
* finished:
|
||||
*/
|
||||
barrier_nospec();
|
||||
instrument_copy_from_user_before(to, from, n);
|
||||
res = raw_copy_from_user(to, from, n);
|
||||
instrument_copy_from_user_after(to, from, n, res);
|
||||
}
|
||||
if (unlikely(res))
|
||||
memset(to + (n - res), 0, res);
|
||||
instrument_copy_from_user_before(to, from, n);
|
||||
res = raw_copy_from_user(to, from, n);
|
||||
instrument_copy_from_user_after(to, from, n, res);
|
||||
if (likely(!res))
|
||||
return 0;
|
||||
fail:
|
||||
memset(to + (n - res), 0, res);
|
||||
return res;
|
||||
}
|
||||
extern __must_check unsigned long
|
||||
|
|
|
@ -94,6 +94,7 @@
|
|||
#define ARM_CPU_PART_NEOVERSE_V3 0xD84
|
||||
#define ARM_CPU_PART_CORTEX_X925 0xD85
|
||||
#define ARM_CPU_PART_CORTEX_A725 0xD87
|
||||
#define ARM_CPU_PART_NEOVERSE_N3 0xD8E
|
||||
|
||||
#define APM_CPU_PART_XGENE 0x000
|
||||
#define APM_CPU_VAR_POTENZA 0x00
|
||||
|
@ -176,6 +177,7 @@
|
|||
#define MIDR_NEOVERSE_V3 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V3)
|
||||
#define MIDR_CORTEX_X925 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X925)
|
||||
#define MIDR_CORTEX_A725 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A725)
|
||||
#define MIDR_NEOVERSE_N3 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_N3)
|
||||
#define MIDR_THUNDERX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX)
|
||||
#define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX)
|
||||
#define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX)
|
||||
|
|
|
@ -36,6 +36,20 @@
|
|||
#define EFER_FFXSR (1<<_EFER_FFXSR)
|
||||
#define EFER_AUTOIBRS (1<<_EFER_AUTOIBRS)
|
||||
|
||||
/*
|
||||
* Architectural memory types that are common to MTRRs, PAT, VMX MSRs, etc.
|
||||
* Most MSRs support/allow only a subset of memory types, but the values
|
||||
* themselves are common across all relevant MSRs.
|
||||
*/
|
||||
#define X86_MEMTYPE_UC 0ull /* Uncacheable, a.k.a. Strong Uncacheable */
|
||||
#define X86_MEMTYPE_WC 1ull /* Write Combining */
|
||||
/* RESERVED 2 */
|
||||
/* RESERVED 3 */
|
||||
#define X86_MEMTYPE_WT 4ull /* Write Through */
|
||||
#define X86_MEMTYPE_WP 5ull /* Write Protected */
|
||||
#define X86_MEMTYPE_WB 6ull /* Write Back */
|
||||
#define X86_MEMTYPE_UC_MINUS 7ull /* Weak Uncacheabled (PAT only) */
|
||||
|
||||
/* FRED MSRs */
|
||||
#define MSR_IA32_FRED_RSP0 0x1cc /* Level 0 stack pointer */
|
||||
#define MSR_IA32_FRED_RSP1 0x1cd /* Level 1 stack pointer */
|
||||
|
@ -365,6 +379,12 @@
|
|||
|
||||
#define MSR_IA32_CR_PAT 0x00000277
|
||||
|
||||
#define PAT_VALUE(p0, p1, p2, p3, p4, p5, p6, p7) \
|
||||
((X86_MEMTYPE_ ## p0) | (X86_MEMTYPE_ ## p1 << 8) | \
|
||||
(X86_MEMTYPE_ ## p2 << 16) | (X86_MEMTYPE_ ## p3 << 24) | \
|
||||
(X86_MEMTYPE_ ## p4 << 32) | (X86_MEMTYPE_ ## p5 << 40) | \
|
||||
(X86_MEMTYPE_ ## p6 << 48) | (X86_MEMTYPE_ ## p7 << 56))
|
||||
|
||||
#define MSR_IA32_DEBUGCTLMSR 0x000001d9
|
||||
#define MSR_IA32_LASTBRANCHFROMIP 0x000001db
|
||||
#define MSR_IA32_LASTBRANCHTOIP 0x000001dc
|
||||
|
@ -1159,15 +1179,6 @@
|
|||
#define MSR_IA32_VMX_VMFUNC 0x00000491
|
||||
#define MSR_IA32_VMX_PROCBASED_CTLS3 0x00000492
|
||||
|
||||
/* VMX_BASIC bits and bitmasks */
|
||||
#define VMX_BASIC_VMCS_SIZE_SHIFT 32
|
||||
#define VMX_BASIC_TRUE_CTLS (1ULL << 55)
|
||||
#define VMX_BASIC_64 0x0001000000000000LLU
|
||||
#define VMX_BASIC_MEM_TYPE_SHIFT 50
|
||||
#define VMX_BASIC_MEM_TYPE_MASK 0x003c000000000000LLU
|
||||
#define VMX_BASIC_MEM_TYPE_WB 6LLU
|
||||
#define VMX_BASIC_INOUT 0x0040000000000000LLU
|
||||
|
||||
/* Resctrl MSRs: */
|
||||
/* - Intel: */
|
||||
#define MSR_IA32_L3_QOS_CFG 0xc81
|
||||
|
@ -1185,11 +1196,6 @@
|
|||
#define MSR_IA32_SMBA_BW_BASE 0xc0000280
|
||||
#define MSR_IA32_EVT_CFG_BASE 0xc0000400
|
||||
|
||||
/* MSR_IA32_VMX_MISC bits */
|
||||
#define MSR_IA32_VMX_MISC_INTEL_PT (1ULL << 14)
|
||||
#define MSR_IA32_VMX_MISC_VMWRITE_SHADOW_RO_FIELDS (1ULL << 29)
|
||||
#define MSR_IA32_VMX_MISC_PREEMPTION_TIMER_SCALE 0x1F
|
||||
|
||||
/* AMD-V MSRs */
|
||||
#define MSR_VM_CR 0xc0010114
|
||||
#define MSR_VM_IGNNE 0xc0010115
|
||||
|
|
|
@ -439,6 +439,7 @@ struct kvm_sync_regs {
|
|||
#define KVM_X86_QUIRK_MISC_ENABLE_NO_MWAIT (1 << 4)
|
||||
#define KVM_X86_QUIRK_FIX_HYPERCALL_INSN (1 << 5)
|
||||
#define KVM_X86_QUIRK_MWAIT_NEVER_UD_FAULTS (1 << 6)
|
||||
#define KVM_X86_QUIRK_SLOT_ZAP_ALL (1 << 7)
|
||||
|
||||
#define KVM_STATE_NESTED_FORMAT_VMX 0
|
||||
#define KVM_STATE_NESTED_FORMAT_SVM 1
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
#ifndef __NR_getpgid
|
||||
#define __NR_getpgid 132
|
||||
#endif
|
||||
#ifndef __NR_capget
|
||||
#define __NR_capget 184
|
||||
#endif
|
||||
#ifndef __NR_gettid
|
||||
#define __NR_gettid 224
|
||||
#endif
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
#ifndef __NR_getpgid
|
||||
#define __NR_getpgid 121
|
||||
#endif
|
||||
#ifndef __NR_capget
|
||||
#define __NR_capget 125
|
||||
#endif
|
||||
#ifndef __NR_gettid
|
||||
#define __NR_gettid 186
|
||||
#endif
|
||||
|
|
|
@ -36,4 +36,19 @@
|
|||
#define GENMASK_ULL(h, l) \
|
||||
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
|
||||
|
||||
#if !defined(__ASSEMBLY__)
|
||||
/*
|
||||
* Missing asm support
|
||||
*
|
||||
* __GENMASK_U128() depends on _BIT128() which would not work
|
||||
* in the asm code, as it shifts an 'unsigned __init128' data
|
||||
* type instead of direct representation of 128 bit constants
|
||||
* such as long and unsigned long. The fundamental problem is
|
||||
* that a 128 bit constant will get silently truncated by the
|
||||
* gcc compiler.
|
||||
*/
|
||||
#define GENMASK_U128(h, l) \
|
||||
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_U128(h, l))
|
||||
#endif
|
||||
|
||||
#endif /* __LINUX_BITS_H */
|
||||
|
|
|
@ -9,16 +9,7 @@
|
|||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wpacked"
|
||||
#pragma GCC diagnostic ignored "-Wattributes"
|
||||
|
||||
#define __get_unaligned_t(type, ptr) ({ \
|
||||
const struct { type x; } __packed *__pptr = (typeof(__pptr))(ptr); \
|
||||
__pptr->x; \
|
||||
})
|
||||
|
||||
#define __put_unaligned_t(type, val, ptr) do { \
|
||||
struct { type x; } __packed *__pptr = (typeof(__pptr))(ptr); \
|
||||
__pptr->x = (val); \
|
||||
} while (0)
|
||||
#include <vdso/unaligned.h>
|
||||
|
||||
#define get_unaligned(ptr) __get_unaligned_t(typeof(*(ptr)), (ptr))
|
||||
#define put_unaligned(val, ptr) __put_unaligned_t(typeof(*(ptr)), (val), (ptr))
|
||||
|
|
|
@ -12,4 +12,7 @@
|
|||
(((~_ULL(0)) - (_ULL(1) << (l)) + 1) & \
|
||||
(~_ULL(0) >> (__BITS_PER_LONG_LONG - 1 - (h))))
|
||||
|
||||
#define __GENMASK_U128(h, l) \
|
||||
((_BIT128((h)) << 1) - (_BIT128(l)))
|
||||
|
||||
#endif /* _UAPI_LINUX_BITS_H */
|
||||
|
|
|
@ -28,6 +28,23 @@
|
|||
#define _BITUL(x) (_UL(1) << (x))
|
||||
#define _BITULL(x) (_ULL(1) << (x))
|
||||
|
||||
#if !defined(__ASSEMBLY__)
|
||||
/*
|
||||
* Missing asm support
|
||||
*
|
||||
* __BIT128() would not work in the asm code, as it shifts an
|
||||
* 'unsigned __init128' data type as direct representation of
|
||||
* 128 bit constants is not supported in the gcc compiler, as
|
||||
* they get silently truncated.
|
||||
*
|
||||
* TODO: Please revisit this implementation when gcc compiler
|
||||
* starts representing 128 bit constants directly like long
|
||||
* and unsigned long etc. Subsequently drop the comment for
|
||||
* GENMASK_U128() which would then start supporting asm code.
|
||||
*/
|
||||
#define _BIT128(x) ((unsigned __int128)(1) << (x))
|
||||
#endif
|
||||
|
||||
#define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
|
||||
#define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask))
|
||||
|
||||
|
|
15
tools/include/vdso/unaligned.h
Normal file
15
tools/include/vdso/unaligned.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef __VDSO_UNALIGNED_H
|
||||
#define __VDSO_UNALIGNED_H
|
||||
|
||||
#define __get_unaligned_t(type, ptr) ({ \
|
||||
const struct { type x; } __packed *__pptr = (typeof(__pptr))(ptr); \
|
||||
__pptr->x; \
|
||||
})
|
||||
|
||||
#define __put_unaligned_t(type, val, ptr) do { \
|
||||
struct { type x; } __packed *__pptr = (typeof(__pptr))(ptr); \
|
||||
__pptr->x = (val); \
|
||||
} while (0)
|
||||
|
||||
#endif /* __VDSO_UNALIGNED_H */
|
|
@ -704,8 +704,8 @@ ifeq ($(BUILD_BPF_SKEL),1)
|
|||
BUILD_BPF_SKEL := 0
|
||||
else
|
||||
CLANG_VERSION := $(shell $(CLANG) --version | head -1 | sed 's/.*clang version \([[:digit:]]\+.[[:digit:]]\+.[[:digit:]]\+\).*/\1/g')
|
||||
ifeq ($(call version-lt3,$(CLANG_VERSION),16.0.6),1)
|
||||
$(warning Warning: Disabled BPF skeletons as at least $(CLANG) version 16.0.6 is reported to be a working setup with the current of BPF based perf features)
|
||||
ifeq ($(call version-lt3,$(CLANG_VERSION),12.0.1),1)
|
||||
$(warning Warning: Disabled BPF skeletons as reliable BTF generation needs at least $(CLANG) version 12.0.1)
|
||||
BUILD_BPF_SKEL := 0
|
||||
endif
|
||||
endif
|
||||
|
|
|
@ -1399,7 +1399,7 @@ static const struct syscall_fmt syscall_fmts[] = {
|
|||
.arg = { [2] = { .scnprintf = SCA_WAITID_OPTIONS, /* options */ }, }, },
|
||||
{ .name = "waitid", .errpid = true,
|
||||
.arg = { [3] = { .scnprintf = SCA_WAITID_OPTIONS, /* options */ }, }, },
|
||||
{ .name = "write", .errpid = true,
|
||||
{ .name = "write",
|
||||
.arg = { [1] = { .scnprintf = SCA_BUF /* buf */, .from_user = true, }, }, },
|
||||
};
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ FILES=(
|
|||
"include/vdso/bits.h"
|
||||
"include/linux/const.h"
|
||||
"include/vdso/const.h"
|
||||
"include/vdso/unaligned.h"
|
||||
"include/linux/hash.h"
|
||||
"include/linux/list-sort.h"
|
||||
"include/uapi/linux/hw_breakpoint.h"
|
||||
|
|
|
@ -19,35 +19,74 @@
|
|||
TEST_RESULT=0
|
||||
|
||||
# skip if not supported
|
||||
BLACKFUNC=`head -n 1 /sys/kernel/debug/kprobes/blacklist 2> /dev/null | cut -f2`
|
||||
if [ -z "$BLACKFUNC" ]; then
|
||||
BLACKFUNC_LIST=`head -n 5 /sys/kernel/debug/kprobes/blacklist 2> /dev/null | cut -f2`
|
||||
if [ -z "$BLACKFUNC_LIST" ]; then
|
||||
print_overall_skipped
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# try to find vmlinux with DWARF debug info
|
||||
VMLINUX_FILE=$(perf probe -v random_probe |& grep "Using.*for symbols" | sed -r 's/^Using (.*) for symbols$/\1/')
|
||||
|
||||
# remove all previously added probes
|
||||
clear_all_probes
|
||||
|
||||
|
||||
### adding blacklisted function
|
||||
|
||||
# functions from blacklist should be skipped by perf probe
|
||||
! $CMD_PERF probe $BLACKFUNC > $LOGS_DIR/adding_blacklisted.log 2> $LOGS_DIR/adding_blacklisted.err
|
||||
PERF_EXIT_CODE=$?
|
||||
|
||||
REGEX_SCOPE_FAIL="Failed to find scope of probe point"
|
||||
REGEX_SKIP_MESSAGE=" is blacklisted function, skip it\."
|
||||
REGEX_NOT_FOUND_MESSAGE="Probe point \'$BLACKFUNC\' not found."
|
||||
REGEX_NOT_FOUND_MESSAGE="Probe point \'$RE_EVENT\' not found."
|
||||
REGEX_ERROR_MESSAGE="Error: Failed to add events."
|
||||
REGEX_INVALID_ARGUMENT="Failed to write event: Invalid argument"
|
||||
REGEX_SYMBOL_FAIL="Failed to find symbol at $RE_ADDRESS"
|
||||
REGEX_OUT_SECTION="$BLACKFUNC is out of \.\w+, skip it"
|
||||
../common/check_all_lines_matched.pl "$REGEX_SKIP_MESSAGE" "$REGEX_NOT_FOUND_MESSAGE" "$REGEX_ERROR_MESSAGE" "$REGEX_SCOPE_FAIL" "$REGEX_INVALID_ARGUMENT" "$REGEX_SYMBOL_FAIL" "$REGEX_OUT_SECTION" < $LOGS_DIR/adding_blacklisted.err
|
||||
CHECK_EXIT_CODE=$?
|
||||
REGEX_OUT_SECTION="$RE_EVENT is out of \.\w+, skip it"
|
||||
REGEX_MISSING_DECL_LINE="A function DIE doesn't have decl_line. Maybe broken DWARF?"
|
||||
|
||||
print_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "adding blacklisted function $BLACKFUNC"
|
||||
(( TEST_RESULT += $? ))
|
||||
BLACKFUNC=""
|
||||
SKIP_DWARF=0
|
||||
|
||||
for BLACKFUNC in $BLACKFUNC_LIST; do
|
||||
echo "Probing $BLACKFUNC"
|
||||
|
||||
# functions from blacklist should be skipped by perf probe
|
||||
! $CMD_PERF probe $BLACKFUNC > $LOGS_DIR/adding_blacklisted.log 2> $LOGS_DIR/adding_blacklisted.err
|
||||
PERF_EXIT_CODE=$?
|
||||
|
||||
# check for bad DWARF polluting the result
|
||||
../common/check_all_patterns_found.pl "$REGEX_MISSING_DECL_LINE" >/dev/null < $LOGS_DIR/adding_blacklisted.err
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
SKIP_DWARF=1
|
||||
echo "Result polluted by broken DWARF, trying another probe"
|
||||
|
||||
# confirm that the broken DWARF comes from assembler
|
||||
if [ -n "$VMLINUX_FILE" ]; then
|
||||
readelf -wi "$VMLINUX_FILE" |
|
||||
awk -v probe="$BLACKFUNC" '/DW_AT_language/ { comp_lang = $0 }
|
||||
$0 ~ probe { if (comp_lang) { print comp_lang }; exit }' |
|
||||
grep -q "MIPS assembler"
|
||||
|
||||
CHECK_EXIT_CODE=$?
|
||||
if [ $CHECK_EXIT_CODE -ne 0 ]; then
|
||||
SKIP_DWARF=0 # broken DWARF while available
|
||||
break
|
||||
fi
|
||||
fi
|
||||
else
|
||||
../common/check_all_lines_matched.pl "$REGEX_SKIP_MESSAGE" "$REGEX_NOT_FOUND_MESSAGE" "$REGEX_ERROR_MESSAGE" "$REGEX_SCOPE_FAIL" "$REGEX_INVALID_ARGUMENT" "$REGEX_SYMBOL_FAIL" "$REGEX_OUT_SECTION" < $LOGS_DIR/adding_blacklisted.err
|
||||
CHECK_EXIT_CODE=$?
|
||||
|
||||
SKIP_DWARF=0
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $SKIP_DWARF -eq 1 ]; then
|
||||
print_testcase_skipped "adding blacklisted function $BLACKFUNC"
|
||||
else
|
||||
print_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "adding blacklisted function $BLACKFUNC"
|
||||
(( TEST_RESULT += $? ))
|
||||
fi
|
||||
|
||||
### listing not-added probe
|
||||
|
||||
|
|
|
@ -288,6 +288,10 @@ int sys_enter_rename(struct syscall_enter_args *args)
|
|||
augmented_args->arg.size = PERF_ALIGN(oldpath_len + 1, sizeof(u64));
|
||||
len += augmented_args->arg.size;
|
||||
|
||||
/* Every read from userspace is limited to value size */
|
||||
if (augmented_args->arg.size > sizeof(augmented_args->arg.value))
|
||||
return 1; /* Failure: don't filter */
|
||||
|
||||
struct augmented_arg *arg2 = (void *)&augmented_args->arg.value + augmented_args->arg.size;
|
||||
|
||||
newpath_len = augmented_arg__read_str(arg2, newpath_arg, sizeof(augmented_args->arg.value));
|
||||
|
@ -315,6 +319,10 @@ int sys_enter_renameat2(struct syscall_enter_args *args)
|
|||
augmented_args->arg.size = PERF_ALIGN(oldpath_len + 1, sizeof(u64));
|
||||
len += augmented_args->arg.size;
|
||||
|
||||
/* Every read from userspace is limited to value size */
|
||||
if (augmented_args->arg.size > sizeof(augmented_args->arg.value))
|
||||
return 1; /* Failure: don't filter */
|
||||
|
||||
struct augmented_arg *arg2 = (void *)&augmented_args->arg.value + augmented_args->arg.size;
|
||||
|
||||
newpath_len = augmented_arg__read_str(arg2, newpath_arg, sizeof(augmented_args->arg.value));
|
||||
|
@ -423,8 +431,9 @@ static bool pid_filter__has(struct pids_filtered *pids, pid_t pid)
|
|||
static int augment_sys_enter(void *ctx, struct syscall_enter_args *args)
|
||||
{
|
||||
bool augmented, do_output = false;
|
||||
int zero = 0, size, aug_size, index, output = 0,
|
||||
int zero = 0, size, aug_size, index,
|
||||
value_size = sizeof(struct augmented_arg) - offsetof(struct augmented_arg, value);
|
||||
u64 output = 0; /* has to be u64, otherwise it won't pass the verifier */
|
||||
unsigned int nr, *beauty_map;
|
||||
struct beauty_payload_enter *payload;
|
||||
void *arg, *payload_offset;
|
||||
|
@ -477,6 +486,8 @@ static int augment_sys_enter(void *ctx, struct syscall_enter_args *args)
|
|||
augmented = true;
|
||||
} else if (size < 0 && size >= -6) { /* buffer */
|
||||
index = -(size + 1);
|
||||
barrier_var(index); // Prevent clang (noticed with v18) from removing the &= 7 trick.
|
||||
index &= 7; // Satisfy the bounds checking with the verifier in some kernels.
|
||||
aug_size = args->args[index];
|
||||
|
||||
if (aug_size > TRACE_AUG_MAX_BUF)
|
||||
|
@ -488,10 +499,17 @@ static int augment_sys_enter(void *ctx, struct syscall_enter_args *args)
|
|||
}
|
||||
}
|
||||
|
||||
/* Augmented data size is limited to sizeof(augmented_arg->unnamed union with value field) */
|
||||
if (aug_size > value_size)
|
||||
aug_size = value_size;
|
||||
|
||||
/* write data to payload */
|
||||
if (augmented) {
|
||||
int written = offsetof(struct augmented_arg, value) + aug_size;
|
||||
|
||||
if (written < 0 || written > sizeof(struct augmented_arg))
|
||||
return 1;
|
||||
|
||||
((struct augmented_arg *)payload_offset)->size = aug_size;
|
||||
output += written;
|
||||
payload_offset += written;
|
||||
|
@ -499,7 +517,7 @@ static int augment_sys_enter(void *ctx, struct syscall_enter_args *args)
|
|||
}
|
||||
}
|
||||
|
||||
if (!do_output)
|
||||
if (!do_output || (sizeof(struct syscall_enter_args) + output) > sizeof(struct beauty_payload_enter))
|
||||
return 1;
|
||||
|
||||
return augmented__beauty_output(ctx, payload, sizeof(struct syscall_enter_args) + output);
|
||||
|
|
|
@ -7,13 +7,9 @@
|
|||
#include "debug.h"
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <linux/capability.h>
|
||||
#include <sys/syscall.h>
|
||||
|
||||
#ifndef SYS_capget
|
||||
#define SYS_capget 90
|
||||
#endif
|
||||
#include <unistd.h>
|
||||
|
||||
#define MAX_LINUX_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3
|
||||
|
||||
|
@ -21,9 +17,9 @@ bool perf_cap__capable(int cap, bool *used_root)
|
|||
{
|
||||
struct __user_cap_header_struct header = {
|
||||
.version = _LINUX_CAPABILITY_VERSION_3,
|
||||
.pid = getpid(),
|
||||
.pid = 0,
|
||||
};
|
||||
struct __user_cap_data_struct data[MAX_LINUX_CAPABILITY_U32S];
|
||||
struct __user_cap_data_struct data[MAX_LINUX_CAPABILITY_U32S] = {};
|
||||
__u32 cap_val;
|
||||
|
||||
*used_root = false;
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "util/bpf-filter.h"
|
||||
#include "util/env.h"
|
||||
#include "util/kvm-stat.h"
|
||||
#include "util/stat.h"
|
||||
#include "util/kwork.h"
|
||||
#include "util/sample.h"
|
||||
#include "util/lock-contention.h"
|
||||
|
@ -1355,6 +1356,7 @@ PyMODINIT_FUNC PyInit_perf(void)
|
|||
|
||||
unsigned int scripting_max_stack = PERF_MAX_STACK_DEPTH;
|
||||
|
||||
#ifdef HAVE_KVM_STAT_SUPPORT
|
||||
bool kvm_entry_event(struct evsel *evsel __maybe_unused)
|
||||
{
|
||||
return false;
|
||||
|
@ -1384,6 +1386,7 @@ void exit_event_decode_key(struct perf_kvm_stat *kvm __maybe_unused,
|
|||
char *decode __maybe_unused)
|
||||
{
|
||||
}
|
||||
#endif // HAVE_KVM_STAT_SUPPORT
|
||||
|
||||
int find_scripts(char **scripts_array __maybe_unused, char **scripts_path_array __maybe_unused,
|
||||
int num __maybe_unused, int pathlen __maybe_unused)
|
||||
|
|
|
@ -46,6 +46,11 @@ static const char *const *syscalltbl_native = syscalltbl_mips_n64;
|
|||
#include <asm/syscalls.c>
|
||||
const int syscalltbl_native_max_id = SYSCALLTBL_LOONGARCH_MAX_ID;
|
||||
static const char *const *syscalltbl_native = syscalltbl_loongarch;
|
||||
#else
|
||||
const int syscalltbl_native_max_id = 0;
|
||||
static const char *const syscalltbl_native[] = {
|
||||
[0] = "unknown",
|
||||
};
|
||||
#endif
|
||||
|
||||
struct syscall {
|
||||
|
@ -182,6 +187,11 @@ int syscalltbl__id(struct syscalltbl *tbl, const char *name)
|
|||
return audit_name_to_syscall(name, tbl->audit_machine);
|
||||
}
|
||||
|
||||
int syscalltbl__id_at_idx(struct syscalltbl *tbl __maybe_unused, int idx)
|
||||
{
|
||||
return idx;
|
||||
}
|
||||
|
||||
int syscalltbl__strglobmatch_next(struct syscalltbl *tbl __maybe_unused,
|
||||
const char *syscall_glob __maybe_unused, int *idx __maybe_unused)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue