Linux 6.11.10
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.11.10 kernel.
All users of the 6.11 kernel series must upgrade.
The updated 6.11.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.11.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/Kconfig | 3 arch/arm/kernel/head.S | 8 arch/arm/kernel/traps.c | 3 arch/arm/mm/mmu.c | 34 +- arch/arm64/Kconfig | 3 arch/arm64/include/asm/mman.h | 10 arch/loongarch/Kconfig | 3 arch/loongarch/include/asm/kasan.h | 13 - arch/loongarch/kernel/paravirt.c | 15 + arch/loongarch/kernel/smp.c | 2 arch/loongarch/mm/kasan_init.c | 46 +++ arch/mips/Kconfig | 3 arch/parisc/include/asm/mman.h | 5 arch/powerpc/Kconfig | 4 arch/riscv/Kconfig | 3 arch/s390/Kconfig | 3 arch/sh/Kconfig | 3 arch/x86/Kconfig | 3 arch/x86/Makefile | 5 arch/x86/entry/entry.S | 16 + arch/x86/include/asm/asm-prototypes.h | 3 arch/x86/kernel/cpu/amd.c | 11 arch/x86/kernel/cpu/common.c | 2 arch/x86/kernel/vmlinux.lds.S | 3 arch/x86/kvm/lapic.c | 29 +- arch/x86/kvm/vmx/nested.c | 30 ++ arch/x86/kvm/vmx/vmx.c | 6 arch/x86/mm/ioremap.c | 6 drivers/bluetooth/btintel.c | 5 drivers/char/tpm/tpm2-sessions.c | 7 drivers/firmware/arm_scmi/perf.c | 44 ++- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 3 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 13 - drivers/gpu/drm/amd/amdgpu/mes_v12_0.c | 2 drivers/gpu/drm/amd/amdgpu/nbio_v7_7.c | 6 drivers/gpu/drm/amd/amdgpu/nv.c | 12 - drivers/gpu/drm/amd/amdgpu/soc15.c | 4 drivers/gpu/drm/amd/amdgpu/soc21.c | 12 - drivers/gpu/drm/amd/amdgpu/soc24.c | 2 drivers/gpu/drm/amd/amdgpu/vi.c | 8 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 117 +++++----- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 17 - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq_params.h | 2 drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c | 6 drivers/gpu/drm/amd/display/dc/core/dc_state.c | 3 drivers/gpu/drm/amd/display/dc/dml2/dml21/src/dml2_pmo/dml2_pmo_dcn4_fams2.c | 11 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 49 +--- drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 4 drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c | 5 drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 5 drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 5 drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c | 4 drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c | 4 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 20 - drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 5 drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c | 5 drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 9 drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c | 8 drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h | 2 drivers/gpu/drm/bridge/tc358768.c | 21 + drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.c | 50 ++-- drivers/gpu/drm/i915/i915_drv.h | 8 drivers/gpu/drm/i915/intel_device_info.c | 24 +- drivers/gpu/drm/i915/intel_device_info.h | 4 drivers/gpu/drm/nouveau/nvkm/engine/disp/r535.c | 59 ++--- drivers/gpu/drm/nouveau/nvkm/falcon/fw.c | 11 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c | 6 drivers/gpu/drm/panthor/panthor_mmu.c | 2 drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 8 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 2 drivers/gpu/drm/xe/xe_bo.c | 43 +-- drivers/gpu/drm/xe/xe_bo_evict.c | 20 + drivers/gpu/drm/xe/xe_oa.c | 2 drivers/infiniband/core/addr.c | 2 drivers/mailbox/qcom-cpucp-mbox.c | 2 drivers/media/dvb-core/dvbdev.c | 15 - drivers/mmc/host/dw_mmc.c | 4 drivers/mmc/host/sunxi-mmc.c | 6 drivers/net/bonding/bond_main.c | 16 + drivers/net/bonding/bond_options.c | 82 ++++++- drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c | 8 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c | 4 drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 15 + drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c | 32 ++ drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c | 25 +- drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c | 4 drivers/net/ethernet/ti/icssg/icssg_prueth.c | 13 - drivers/net/ethernet/ti/icssg/icssg_prueth.h | 12 + drivers/net/ethernet/vertexcom/mse102x.c | 4 drivers/net/phy/phylink.c | 14 - drivers/perf/riscv_pmu_sbi.c | 4 drivers/pmdomain/arm/scmi_perf_domain.c | 3 drivers/pmdomain/core.c | 49 ++-- drivers/pmdomain/imx/imx93-blk-ctrl.c | 4 drivers/vdpa/mlx5/core/mr.c | 8 drivers/vdpa/solidrun/snet_main.c | 14 - drivers/vdpa/virtio_pci/vp_vdpa.c | 10 fs/btrfs/delayed-ref.c | 2 fs/nilfs2/btnode.c | 2 fs/nilfs2/gcinode.c | 4 fs/nilfs2/mdt.c | 1 fs/nilfs2/page.c | 2 fs/ocfs2/resize.c | 2 fs/ocfs2/super.c | 13 - fs/proc/task_mmu.c | 4 include/drm/intel/i915_pciids.h | 19 + include/linux/mman.h | 7 include/linux/pm_domain.h | 6 include/linux/sched/task_stack.h | 2 include/linux/sockptr.h | 4 include/net/bond_options.h | 2 kernel/Kconfig.kexec | 2 lib/buildid.c | 2 mm/mmap.c | 2 mm/mremap.c | 2 mm/nommu.c | 4 mm/page_alloc.c | 18 + mm/shmem.c | 5 mm/swap.c | 14 - net/bluetooth/hci_core.c | 2 net/dccp/ipv6.c | 2 net/ipv6/tcp_ipv6.c | 4 net/mptcp/pm_netlink.c | 3 net/mptcp/pm_userspace.c | 15 + net/mptcp/protocol.c | 16 - net/netlink/af_netlink.c | 31 -- net/netlink/af_netlink.h | 2 net/sched/cls_u32.c | 18 + net/sctp/ipv6.c | 19 + net/vmw_vsock/af_vsock.c | 3 net/vmw_vsock/virtio_transport_common.c | 9 samples/pktgen/pktgen_sample01_simple.sh | 2 security/integrity/evm/evm_main.c | 3 security/integrity/ima/ima_template_lib.c | 14 - sound/pci/hda/patch_realtek.c | 13 - tools/mm/page-types.c | 2 tools/testing/selftests/kvm/Makefile | 8 tools/testing/selftests/mm/hugetlb_dio.c | 7 tools/testing/selftests/tc-testing/tc-tests/filters/u32.json | 24 ++ 143 files changed, 1076 insertions(+), 533 deletions(-)
Akash Goel (1):
drm/panthor: Fix handling of partial GPU mapping of BOs
Alex Deucher (2):
Revert "drm/amd/pm: correct the workload setting" Revert "drm/amd/display: parse umc_info or vram_info based on ASIC"
Alexandre Ferrieux (2):
net: sched: cls_u32: Fix u32's systematic failure to free IDR entries for hnodes.
net: sched: u32: Add test case for systematic hnode IDR leaks
Alexandre Ghiti (1):
drivers: perf: Fix wrong put_cpu() placement
Andre Przywara (1):
mmc: sunxi-mmc: Fix A100 compatible description
Andrew Morton (1):
mm: revert "mm: shmem: fix data-race in shmem_getattr()"
Andy Yan (1):
drm/rockchip: vop: Fix a dereferenced before check warning
Ard Biesheuvel (1):
x86/stackprotector: Work around strict Clang TLS symbol requirements
Ashutosh Dixit (1):
drm/xe/oa: Fix "Missing outer runtime PM protection" warning
Aurelien Jarno (1):
Revert "mmc: dw_mmc: Fix IDMAC operation with pages bigger than 4K"
Baoquan He (1):
x86/mm: Fix a kdump kernel failure on SME system when CONFIG_IMA_KEXEC=y
Bibo Mao (1):
LoongArch: Fix AP booting issue in VM mode
Carolina Jubran (1):
net/mlx5e: Disable loopback self-test on multi-PF netdev
Chen Ridong (1):
drm/vmwgfx: avoid null_ptr_deref in vmw_framebuffer_surface_create_handle
Christian König (2):
drm/amdgpu: fix check in gmc_v9_0_get_vm_pte() drm/amdgpu: enable GTT fallback handling for dGPUs only
Cristian Marussi (1):
firmware: arm_scmi: Skip opp duplicates
Dan Carpenter (1):
fs/proc/task_mmu: prevent integer overflow in pagemap_scan_get_args()
Daniele Ceraolo Spurio (1):
drm/i915/gsc: ARL-H and ARL-U need a newer GSC FW.
Dave Airlie (3):
nouveau: fw: sync dma after setup is called.
nouveau: handle EBUSY and EAGAIN for GSP aux errors. nouveau/dp: handle retries for AUX CH transfers with GSP.
Dave Vasilevsky (1):
crash, powerpc: default to CRASH_DUMP=n on PPC_BOOK3S_32
David Rosca (1):
drm/amdgpu: Fix video caps for H264 and HEVC encode maximum size
Dillon Varone (1):
drm/amd/display: Require minimum VBlank size for stutter optimization
Dmitry Antipov (2):
ocfs2: uncache inode which has failed entering the group
ocfs2: fix UBSAN warning in ocfs2_verify_volume()
Donet Tom (1):
selftests: hugetlb_dio: fixup check for initial conditions to skip in the start
Dragos Tatulea (1):
net/mlx5e: kTLS, Fix incorrect page refcounting
Eric Dumazet (1):
sctp: fix possible UAF in sctp_v6_available()
Francesco Dolcini (1):
drm/bridge: tc358768: Fix DSI command tx
Geliang Tang (2):
mptcp: update local address flags when setting it
mptcp: hold pm lock when deleting entry
Greg Kroah-Hartman (1):
Linux 6.11.10
Hajime Tazaki (1):
nommu: pass NULL argument to vma_iter_prealloc()
Hamish Claxton (1):
drm/amd/display: Fix failure to read vram info due to static BP_RESULT
Hangbin Liu (1):
bonding: add ns target multicast address to slave device
Harith G (1):
ARM: 9419/1: mm: Fix kernel memory mapping for xip kernels
Huacai Chen (3):
LoongArch: Fix early_numa_add_cpu() usage for FDT systems
LoongArch: Disable KASAN if PGDIR_SIZE is too large for cpu_vabits
LoongArch: Make KASAN work with 5-level page-tables
Jack Xiao (1):
drm/amdgpu/mes12: correct kiq unmap latency
Jakub Kicinski (1):
netlink: terminate outstanding dump on socket close
Jann Horn (1):
mm/mremap: fix address wraparound in move_page_tables()
Jarkko Sakkinen (1):
tpm: Disable TPM on tpm2_create_primary() failure
Jinjiang Tu (1):
mm: fix NULL pointer dereference in alloc_pages_bulk_noprof
Jiri Olsa (1):
lib/buildid: Fix build ID parsing logic
Josef Bacik (1):
btrfs: fix incorrect comparison for delayed refs
Kailang Yang (2):
ALSA: hda/realtek - Fixed Clevo platform headset Mic issue
ALSA: hda/realtek - update set GPIO3 to default for Thinkpad with ALC1318
Kanglong Wang (1):
LoongArch: Add WriteCombine shadow mapping in KASAN
Kiran K (1):
Bluetooth: btintel: Direct exception event to bluetooth stack
Leo Li (1):
drm/amd/display: Run idle optimizations at end of vblank handler
Leon Romanovsky (1):
Revert "RDMA/core: Fix ENODEV error for iWARP test over vlan"
Lorenzo Stoakes (1):
mm: refactor arch_calc_vm_flag_bits() and arm64 MTE handling
Luiz Augusto von Dentz (1):
Bluetooth: hci_core: Fix calling mgmt_device_connected
Maksym Glubokiy (1):
ALSA: hda/realtek: fix mute/micmute LEDs for a HP EliteBook 645 G10
Mario Limonciello (1):
x86/CPU/AMD: Clear virtualized VMLOAD/VMSAVE on Zen4 client
Mark Bloch (1):
net/mlx5: fs, lock FTE when checking if active
Mateusz Guzik (1):
evm: stop avoidably reading i_writecount in evm_file_release
Matthew Auld (2):
drm/xe: handle flat ccs during hibernation on igpu drm/xe: improve hibernation on igpu
Matthew Brost (1):
drm/xe: Restore system memory GGTT mappings
Matthieu Baerts (NGI0) (1):
mptcp: pm: use _rcu variant under rcu_read_lock
Mauro Carvalho Chehab (1):
media: dvbdev: fix the logic when DVB_DYNAMIC_MINORS is not set
Meghana Malladi (1):
net: ti: icssg-prueth: Fix 1 PPS sync
Michal Luczaj (4):
virtio/vsock: Fix accept_queue memory leak
vsock: Fix sk_error_queue memory leak virtio/vsock: Improve MSG_ZEROCOPY error handling
net: Make copy_safe_from_sockptr() match documentation
Moshe Shemesh (1):
net/mlx5e: CT: Fix null-ptr-deref in add rule err flow
Motiejus JakÅ`tys (1):
tools/mm: fix compile error
Nícolas F. R. A. Prado (1):
net: stmmac: dwmac-mediatek: Fix inverted handling of mediatek,mac-wol
Paolo Abeni (2):
mptcp: error out earlier on disconnect
mptcp: cope racing subflow creation in mptcp_rcv_space_adjust
Parav Pandit (1):
net/mlx5: Fix msix vectors to respect platform limit
Peng Fan (1):
pmdomain: imx93-blk-ctrl: correct remove path
Philipp Stanner (1):
vdpa: solidrun: Fix UB bug with devres
Qun-Wei Lin (1):
sched/task_stack: fix object_is_on_stack() for KASAN tagged pointers
Rodrigo Siqueira (1):
drm/amd/display: Adjust VSDB parser for replay feature
Roman Gushchin (1):
mm: page_alloc: move mlocked flag clearance into free_pages_prepare()
Russell King (Oracle) (2):
net: phylink: ensure PHY momentary link-fails are handled
ARM: fix cacheflush with PAN
Ryan Seto (1):
drm/amd/display: Handle dml allocation failure to avoid crash
Ryusuke Konishi (2):
nilfs2: fix null-ptr-deref in block_touch_buffer tracepoint
nilfs2: fix null-ptr-deref in block_dirty_buffer tracepoint
Samasth Norway Ananda (1):
ima: fix buffer overrun in ima_eventdigest_init_common
Sean Christopherson (4):
KVM: selftests: Disable strict aliasing
KVM: nVMX: Treat vpid01 as current if L2 is active, but with VPID disabled
KVM: x86: Unconditionally set irr_pending when updating APICv state
KVM: VMX: Bury Intel PT virtualization (guest/host mode) behind CONFIG_BROKEN
Si-Wei Liu (1):
vdpa/mlx5: Fix PA offset with unaligned starting iotlb map
Sibi Sankar (4):
mailbox: qcom-cpucp: Mark the irq with IRQF_NO_SUSPEND flag
firmware: arm_scmi: Report duplicate opps as firmware bugs
pmdomain: arm: Use FLAG_DEV_NAME_FW to ensure unique names
pmdomain: core: Add GENPD_FLAG_DEV_NAME_FW flag
Stefan Wahren (1):
net: vertexcom: mse102x: Fix tx_bytes calculation
Tim Huang (1):
drm/amd/pm: print pp_dpm_mclk in ascending order on SMU v14.0.0
Tom Chung (2):
drm/amd/display: Change some variable name of psr drm/amd/display: Fix Panel Replay not update screen correctly
Vijendar Mukunda (1):
drm/amd: Fix initialization mistake for NBIO 7.7.0
Vitalii Mordan (1):
stmmac: dwmac-intel-plat: fix call balance of tx_clk handling routines
Wang Liang (1):
net: fix data-races around sk->sk_forward_alloc
Wei Fang (1):
samples: pktgen: correct dev to DEV
William Tu (1):
net/mlx5e: clear xdp features on non-uplink representors
Xiaoguang Wang (1):
vp_vdpa: fix id_table array not null terminated error
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 11 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm/Kconfig +3 -0
@@ -1597,6 +1597,9 @@ config ATAGS_PROC config ARCH_SUPPORTS_CRASH_DUMP def_bool y +config ARCH_DEFAULT_CRASH_DUMP + def_bool y + config AUTO_ZRELADDR bool "Auto calculation of the decompressed kernel image address" if !ARCH_MULTIPLATFORM default !(ARCH_FOOTBRIDGE || ARCH_RPC || ARCH_SA1100)
arch/arm/kernel/head.S +6 -2
@@ -252,11 +252,15 @@ __create_page_tables: */ add r0, r4, #KERNEL_OFFSET >> (SECTION_SHIFT - PMD_ENTRY_ORDER) ldr r6, =(_end - 1) + + /* For XIP, kernel_sec_start/kernel_sec_end are currently in RO memory */ +#ifndef CONFIG_XIP_KERNEL adr_l r5, kernel_sec_start @ _pa(kernel_sec_start) #if defined CONFIG_CPU_ENDIAN_BE8 || defined CONFIG_CPU_ENDIAN_BE32 str r8, [r5, #4] @ Save physical start of kernel (BE) #else str r8, [r5] @ Save physical start of kernel (LE) +#endif #endif orr r3, r8, r7 @ Add the MMU flags add r6, r4, r6, lsr #(SECTION_SHIFT - PMD_ENTRY_ORDER)
@@ -264,6 +268,7 @@ __create_page_tables: add r3, r3, #1 << SECTION_SHIFT cmp r0, r6 bls 1b +#ifndef CONFIG_XIP_KERNEL eor r3, r3, r7 @ Remove the MMU flags adr_l r5, kernel_sec_end @ _pa(kernel_sec_end) #if defined CONFIG_CPU_ENDIAN_BE8 || defined CONFIG_CPU_ENDIAN_BE32
@@ -271,8 +276,7 @@ __create_page_tables: #else str r3, [r5] @ Save physical end of kernel (LE) #endif - -#ifdef CONFIG_XIP_KERNEL +#else /* * Map the kernel image separately as it is not located in RAM. */
arch/arm/kernel/traps.c +3 -0
@@ -570,6 +570,7 @@ static int bad_syscall(int n, struct pt_regs *regs)static inline int __do_cache_op (unsigned long start,unsigned long end) { +unsigned int ua_flags;int ret; do {
@@ -578,7 +579,9 @@ __do_cache_op(unsigned long start, unsigned long end)if (fatal_signal_pending (current))return 0 ; + ua_flags =uaccess_save_and_enable (); ret =flush_icache_user_range (start, start + chunk); +uaccess_restore (ua_flags);if (ret)return ret;
arch/arm/mm/mmu.c +21 -13
@@ -1402,18 +1402,6 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)create_mapping (&map); } -/* -* Map the kernel if it is XIP. -* It is always first in the modulearea. -*/ -#ifdef CONFIG_XIP_KERNEL - map.pfn =__phys_to_pfn (CONFIG_XIP_PHYS_ADDR &SECTION_MASK ); - map.virtual =MODULES_VADDR ; - map.length = ((unsigned long )_exiprom - map.virtual + ~SECTION_MASK ) &SECTION_MASK ; - map.type =MT_ROM ; -create_mapping (&map); -#endif -/* * Map the cache flushing regions. */
@@ -1603,12 +1591,27 @@ static void __init map_kernel(void)* This will only persist until we turn on proper memory management later on * and we remap the whole kernel with page granularity. */ +#ifdef CONFIG_XIP_KERNEL +phys_addr_t kernel_nx_start = kernel_sec_start; +#else phys_addr_t kernel_x_start = kernel_sec_start;phys_addr_t kernel_x_end =round_up (__pa (__init_end),SECTION_SIZE );phys_addr_t kernel_nx_start = kernel_x_end; +#endif phys_addr_t kernel_nx_end = kernel_sec_end;struct map_desc map; +/* +* Map the kernel if it is XIP. +* It is always first in the modulearea. +*/ +#ifdef CONFIG_XIP_KERNEL + map.pfn =__phys_to_pfn (CONFIG_XIP_PHYS_ADDR &SECTION_MASK ); + map.virtual =MODULES_VADDR ; + map.length = ((unsigned long )_exiprom - map.virtual + ~SECTION_MASK ) &SECTION_MASK ; + map.type =MT_ROM ; +create_mapping (&map); +#else map.pfn =__phys_to_pfn (kernel_x_start); map.virtual =__phys_to_virt (kernel_x_start); map.length = kernel_x_end - kernel_x_start;
@@ -1618,7 +1621,7 @@ static void __init map_kernel(void)/* If the nx part is small it may end up covered by the tail of the RWX section */ if (kernel_x_end == kernel_nx_end)return ; - +#endif map.pfn =__phys_to_pfn (kernel_nx_start); map.virtual =__phys_to_virt (kernel_nx_start); map.length = kernel_nx_end - kernel_nx_start;
@@ -1762,6 +1765,11 @@ void __init paging_init(const struct machine_desc *mdesc) {void *zero_page; +#ifdef CONFIG_XIP_KERNEL +/* Store the kernel RW RAM region start/end in these variables */ + kernel_sec_start =CONFIG_PHYS_OFFSET &SECTION_MASK ; + kernel_sec_end =round_up (__pa (_end),SECTION_SIZE ); +#endif pr_debug ("physical kernel sections: 0x%08llx-0x%08llx\n" , kernel_sec_start, kernel_sec_end);
arch/arm64/Kconfig +3 -0
@@ -1559,6 +1559,9 @@ config ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG config ARCH_SUPPORTS_CRASH_DUMP def_bool y +config ARCH_DEFAULT_CRASH_DUMP + def_bool y + config ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION def_bool CRASH_RESERVE
arch/arm64/include/asm/mman.h +7 -3
@@ -3,6 +3,8 @@#define __ASM_MMAN_H__#include <linux/compiler.h> +#include <linux/fs.h> +#include <linux/shmem_fs.h> #include <linux/types.h> #include <uapi/asm/mman.h>
@@ -21,19 +23,21 @@ static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot, }#define arch_calc_vm_prot_bits (prot, pkey) arch_calc_vm_prot_bits(prot, pkey) -static inline unsigned long arch_calc_vm_flag_bits (unsigned long flags) +static inline unsigned long arch_calc_vm_flag_bits (struct file *file, +unsigned long flags) {/* * Only allow MTE on anonymous mappings as these are guaranteed to be * backed by tags-capable memory. The vm_flags may be overridden by a * filesystem supporting MTE (RAM-based). */ -if (system_supports_mte () && (flags &MAP_ANONYMOUS )) +if (system_supports_mte () && + ((flags &MAP_ANONYMOUS ) ||shmem_file (file)))return VM_MTE_ALLOWED ;return 0 ; } -#define arch_calc_vm_flag_bits (flags) arch_calc_vm_flag_bits(flags) +#define arch_calc_vm_flag_bits (file, flags) arch_calc_vm_flag_bits(file, flags)static inline bool arch_validate_prot (unsigned long prot,unsigned long addr__always_unused )
arch/loongarch/Kconfig +3 -0
@@ -599,6 +599,9 @@ config ARCH_SUPPORTS_KEXEC config ARCH_SUPPORTS_CRASH_DUMP def_bool y +config ARCH_DEFAULT_CRASH_DUMP + def_bool y + config ARCH_SELECTS_CRASH_DUMP def_bool y depends on CRASH_DUMP
arch/loongarch/include/asm/kasan.h +11 -2
@@ -25,6 +25,7 @@/* 64-bit segment value. */ #define XKPRANGE_UC_SEG (0x8000)#define XKPRANGE_CC_SEG (0x9000) +#define XKPRANGE_WC_SEG (0xa000)#define XKVRANGE_VC_SEG (0xffff)/* Cached */
@@ -41,20 +42,28 @@#define XKPRANGE_UC_SHADOW_SIZE (XKPRANGE_UC_SIZE >> KASAN_SHADOW_SCALE_SHIFT)#define XKPRANGE_UC_SHADOW_END (XKPRANGE_UC_KASAN_OFFSET + XKPRANGE_UC_SHADOW_SIZE) +/* WriteCombine */ +#define XKPRANGE_WC_START WRITECOMBINE_BASE +#define XKPRANGE_WC_SIZE XRANGE_SIZE +#define XKPRANGE_WC_KASAN_OFFSET XKPRANGE_UC_SHADOW_END +#define XKPRANGE_WC_SHADOW_SIZE (XKPRANGE_WC_SIZE >> KASAN_SHADOW_SCALE_SHIFT) +#define XKPRANGE_WC_SHADOW_END (XKPRANGE_WC_KASAN_OFFSET + XKPRANGE_WC_SHADOW_SIZE) +/* VMALLOC (Cached or UnCached) */ #define XKVRANGE_VC_START MODULES_VADDR#define XKVRANGE_VC_SIZE round_up(KFENCE_AREA_END - MODULES_VADDR + 1, PGDIR_SIZE) -#define XKVRANGE_VC_KASAN_OFFSET XKPRANGE_UC_SHADOW_END +#define XKVRANGE_VC_KASAN_OFFSET XKPRANGE_WC_SHADOW_END#define XKVRANGE_VC_SHADOW_SIZE (XKVRANGE_VC_SIZE >> KASAN_SHADOW_SCALE_SHIFT)#define XKVRANGE_VC_SHADOW_END (XKVRANGE_VC_KASAN_OFFSET + XKVRANGE_VC_SHADOW_SIZE)/* KAsan shadow memory start right after vmalloc. */ #define KASAN_SHADOW_START round_up(KFENCE_AREA_END, PGDIR_SIZE)#define KASAN_SHADOW_SIZE (XKVRANGE_VC_SHADOW_END - XKPRANGE_CC_KASAN_OFFSET) -#define KASAN_SHADOW_END round_up(KASAN_SHADOW_START + KASAN_SHADOW_SIZE, PGDIR_SIZE) +#define KASAN_SHADOW_END (round_up(KASAN_SHADOW_START + KASAN_SHADOW_SIZE, PGDIR_SIZE) - 1)#define XKPRANGE_CC_SHADOW_OFFSET (KASAN_SHADOW_START + XKPRANGE_CC_KASAN_OFFSET)#define XKPRANGE_UC_SHADOW_OFFSET (KASAN_SHADOW_START + XKPRANGE_UC_KASAN_OFFSET) +#define XKPRANGE_WC_SHADOW_OFFSET (KASAN_SHADOW_START + XKPRANGE_WC_KASAN_OFFSET)#define XKVRANGE_VC_SHADOW_OFFSET (KASAN_SHADOW_START + XKVRANGE_VC_KASAN_OFFSET)extern bool kasan_early_stage;
arch/loongarch/kernel/paravirt.c +15 -0
@@ -50,11 +50,18 @@ static u64 paravt_steal_clock(int cpu) }#ifdef CONFIG_SMP +static struct smp_ops native_ops; +static void pv_send_ipi_single (int cpu,unsigned int action) {int min, old;irq_cpustat_t *info = &per_cpu (irq_stat, cpu); +if (unlikely (action ==ACTION_BOOT_CPU )) { + native_ops.send_ipi_single (cpu, action); +return ; + } + old =atomic_fetch_or (BIT (action), &info->message);if (old)return ;
@@ -74,6 +81,11 @@ static void pv_send_ipi_mask(const struct cpumask *mask, unsigned int action)if (cpumask_empty (mask))return ; +if (unlikely (action ==ACTION_BOOT_CPU )) { + native_ops.send_ipi_mask (mask, action); +return ; + } + action =BIT (action);for_each_cpu (i, mask) { info = &per_cpu (irq_stat, i);
@@ -141,6 +153,8 @@ static void pv_init_ipi(void) {int r, swi; +/* Init native ipi irq for ACTION_BOOT_CPU */ + native_ops.init_ipi (); swi =get_percpu_irq (INT_SWI0 );if (swi <0 )panic ("SWI0 IRQ mapping failed\n" );
@@ -179,6 +193,7 @@ int __init pv_ipi_init(void)return 0 ;#ifdef CONFIG_SMP + native_ops = mp_ops; mp_ops.init_ipi = pv_init_ipi; mp_ops.send_ipi_single = pv_send_ipi_single; mp_ops.send_ipi_mask = pv_send_ipi_mask;
arch/loongarch/kernel/smp.c +1 -1
@@ -296,7 +296,7 @@ static void __init fdt_smp_setup(void) __cpu_number_map[cpuid] = cpu; __cpu_logical_map[cpu] = cpuid; -early_numa_add_cpu (cpu,0 ); +early_numa_add_cpu (cpuid,0 );set_cpuid_to_node (cpuid,0 ); }
arch/loongarch/mm/kasan_init.c +41 -5
104 lines not on this page · raw message
arch/mips/Kconfig +3 -0
@@ -2881,6 +2881,9 @@ config ARCH_SUPPORTS_KEXEC config ARCH_SUPPORTS_CRASH_DUMP def_bool y +config ARCH_DEFAULT_CRASH_DUMP + def_bool y + config PHYSICAL_START hex "Physical address where the kernel is loaded" default "0xffffffff84000000"
arch/parisc/include/asm/mman.h +3 -2
@@ -2,6 +2,7 @@#ifndef __ASM_MMAN_H__#define __ASM_MMAN_H__ +#include <linux/fs.h> #include <uapi/asm/mman.h> /* PARISC cannot allow mdwe as it needs writable stacks */
@@ -11,7 +12,7 @@ static inline bool arch_memory_deny_write_exec_supported(void) }#define arch_memory_deny_write_exec_supported arch_memory_deny_write_exec_supported -static inline unsigned long arch_calc_vm_flag_bits (unsigned long flags) +static inline unsigned long arch_calc_vm_flag_bits (struct file *file,unsigned long flags) {/* * The stack on parisc grows upwards, so if userspace requests memory
@@ -23,6 +24,6 @@ static inline unsigned long arch_calc_vm_flag_bits(unsigned long flags) return 0; } -#define arch_calc_vm_flag_bits (flags) arch_calc_vm_flag_bits(flags) +#define arch_calc_vm_flag_bits (file, flags) arch_calc_vm_flag_bits(file, flags)#endif /* __ASM_MMAN_H__ */
arch/powerpc/Kconfig +4 -0
@@ -682,6 +682,10 @@ config RELOCATABLE_TEST config ARCH_SUPPORTS_CRASH_DUMP def_bool PPC64 || PPC_BOOK3S_32 || PPC_85xx || (44x && !SMP) +config ARCH_DEFAULT_CRASH_DUMP + bool + default y if !PPC_BOOK3S_32 + config ARCH_SELECTS_CRASH_DUMP def_bool y depends on CRASH_DUMP
arch/riscv/Kconfig +3 -0
@@ -884,6 +884,9 @@ config ARCH_SUPPORTS_KEXEC_PURGATORY config ARCH_SUPPORTS_CRASH_DUMP def_bool y +config ARCH_DEFAULT_CRASH_DUMP + def_bool y + config ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION def_bool CRASH_RESERVE
arch/s390/Kconfig +3 -0
@@ -275,6 +275,9 @@ config ARCH_SUPPORTS_CRASH_DUMP This option also enables s390 zfcpdump. See also <file:Documentation/arch/s390/zfcpdump.rst> +config ARCH_DEFAULT_CRASH_DUMP + def_bool y + menu "Processor type and features" config HAVE_MARCH_Z10_FEATURES
arch/sh/Kconfig +3 -0
@@ -549,6 +549,9 @@ config ARCH_SUPPORTS_KEXEC config ARCH_SUPPORTS_CRASH_DUMP def_bool BROKEN_ON_SMP +config ARCH_DEFAULT_CRASH_DUMP + def_bool y + config ARCH_SUPPORTS_KEXEC_JUMP def_bool y
arch/x86/Kconfig +3 -0
@@ -2087,6 +2087,9 @@ config ARCH_SUPPORTS_KEXEC_JUMP config ARCH_SUPPORTS_CRASH_DUMP def_bool X86_64 || (X86_32 && HIGHMEM) +config ARCH_DEFAULT_CRASH_DUMP + def_bool y + config ARCH_SUPPORTS_CRASH_HOTPLUG def_bool y
arch/x86/Makefile +3 -2
@@ -138,9 +138,10 @@ ifeq ($(CONFIG_X86_32),y) ifeq ($(CONFIG_STACKPROTECTOR),y) ifeq ($(CONFIG_SMP),y) - KBUILD_CFLAGS += -mstack-protector-guard-reg=fs -mstack-protector-guard-symbol=__stack_chk_guard + KBUILD_CFLAGS += -mstack-protector-guard-reg=fs \ + -mstack-protector-guard-symbol=__ref_stack_chk_guard else - KBUILD_CFLAGS += -mstack-protector-guard=global + KBUILD_CFLAGS += -mstack-protector-guard=global endif endif else
arch/x86/entry/entry.S +16 -0
@@ -51,3 +51,19 @@ EXPORT_SYMBOL_GPL(mds_verw_sel); .popsection THUNK warn_thunk_thunk, __warn_thunk + +#ifndef CONFIG_X86_64 +/* + * Clang's implementation of TLS stack cookies requires the variable in + * question to be a TLS variable. If the variable happens to be defined as an + * ordinary variable with external linkage in the same compilation unit (which + * amounts to the whole of vmlinux with LTO enabled), Clang will drop the + * segment register prefix from the references, resulting in broken code. Work + * around this by avoiding the symbol used in -mstack-protector-guard-symbol= + * entirely in the C code, and use an alias emitted by the linker script + * instead. + */ +#ifdef CONFIG_STACKPROTECTOR +EXPORT_SYMBOL(__ref_stack_chk_guard); +#endif +#endif
arch/x86/include/asm/asm-prototypes.h +3 -0
@@ -20,3 +20,6 @@extern void cmpxchg8b_emu (void );#endif +#if defined(__GENKSYMS__) && defined(CONFIG_STACKPROTECTOR ) +extern unsigned long __ref_stack_chk_guard; +#endif
arch/x86/kernel/cpu/amd.c +11 -0
@@ -924,6 +924,17 @@ static void init_amd_zen4(struct cpuinfo_x86 *c) {if (!cpu_has (c,X86_FEATURE_HYPERVISOR ))msr_set_bit (MSR_ZEN4_BP_CFG ,MSR_ZEN4_BP_CFG_SHARED_BTB_FIX_BIT ); + +/* +* These Zen4 SoCs advertise support for virtualized VMLOAD/VMSAVE +* in some BIOS versions but they can lead to random host reboots. +*/ +switch (c->x86_model) { + case 0x18 ... 0x1f: + case 0x60 ... 0x7f: +clear_cpu_cap (c,X86_FEATURE_V_VMSAVE_VMLOAD ); +break ; + } }static void init_amd_zen5 (struct cpuinfo_x86 *c)
arch/x86/kernel/cpu/common.c +2 -0
@@ -2084,8 +2084,10 @@ void syscall_init(void)#ifdef CONFIG_STACKPROTECTOR DEFINE_PER_CPU(unsigned long, __stack_chk_guard); +#ifndef CONFIG_SMP EXPORT_PER_CPU_SYMBOL (__stack_chk_guard);#endif +#endif #endif /* CONFIG_X86_64 */
arch/x86/kernel/vmlinux.lds.S +3 -0
@@ -492,6 +492,9 @@ SECTIONS . = ASSERT((_end - LOAD_OFFSET <= KERNEL_IMAGE_SIZE), "kernel image bigger than KERNEL_IMAGE_SIZE"); +/* needed for Clang - see arch/x86/entry/entry.S */ +PROVIDE(__ref_stack_chk_guard = __stack_chk_guard); + #ifdef CONFIG_X86_64 /* * Per-cpu symbols which need to be offset from __per_cpu_load
arch/x86/kvm/lapic.c +18 -11
@@ -2629,19 +2629,26 @@ void kvm_apic_update_apicv(struct kvm_vcpu *vcpu) {struct kvm_lapic *apic = vcpu->arch.apic; -if (apic->apicv_active) { -/* irr_pending is always true when apicv is activated. */ - apic->irr_pending = true; +/* +* When APICv is enabled, KVM must always search the IRR for a pending +* IRQ, as other vCPUs and devices can set IRR bits even if the vCPU +* isn't running. If APICv is disabled, KVM _should_ search the IRR +* for a pending IRQ. But KVM currently doesn't ensure *all* hardware, +* e.g. CPUs and IOMMUs, has seen the change in state, i.e. searching +* the IRR at this time could race with IRQ delivery from hardware that +* still sees APICv as being enabled. +* +* FIXME: Ensure other vCPUs and devices observe the change in APICv +* state prior to updating KVM's metadata caches, so that KVM +* can safely search the IRR and set irr_pending accordingly. +*/ + apic->irr_pending = true; + +if (apic->apicv_active) apic->isr_count =1 ; - }else { -/* -* Don't clear irr_pending, searching the IRR can race with -* updates from the CPU as APICv is still active from hardware's -* perspective. The flag will be cleared as appropriate when -* KVM injects the interrupt. -*/ +else apic->isr_count =count_vectors (apic->regs +APIC_ISR ); - } + apic->highest_isr_cache =-1 ; }
arch/x86/kvm/vmx/nested.c +25 -5
@@ -1197,11 +1197,14 @@ static void nested_vmx_transition_tlb_flush(struct kvm_vcpu *vcpu,kvm_hv_nested_transtion_tlb_flush (vcpu, enable_ept);/* -* If vmcs12 doesn't use VPID, L1 expects linear and combined mappings -* for *all* contexts to be flushed on VM-Enter/VM-Exit, i.e. it's a -* full TLB flush from the guest's perspective. This is required even -* if VPID is disabled in the host as KVM may need to synchronize the -* MMU in response to the guest TLB flush. +* If VPID is disabled, then guest TLB accesses use VPID=0, i.e. the +* same VPID as the host, and so architecturally, linear and combined +* mappings for VPID=0 must be flushed at VM-Enter and VM-Exit. KVM +* emulates L2 sharing L1's VPID=0 by using vpid01 while running L2, +* and so KVM must also emulate TLB flush of VPID=0, i.e. vpid01. This +* is required if VPID is disabled in KVM, as a TLB flush (there are no +* VPIDs) still occurs from L1's perspective, and KVM may need to +* synchronize the MMU in response to the guest TLB flush. * * Note, using TLB_FLUSH_GUEST is correct even if nested EPT is in use. * EPT is a special snowflake, as guest-physical mappings aren't
@@ -2291,6 +2294,17 @@ static void prepare_vmcs02_early_rare(struct vcpu_vmx *vmx,vmcs_write64 (VMCS_LINK_POINTER ,INVALID_GPA ); +/* +* If VPID is disabled, then guest TLB accesses use VPID=0, i.e. the +* same VPID as the host. Emulate this behavior by using vpid01 for L2 +* if VPID is disabled in vmcs12. Note, if VPID is disabled, VM-Enter +* and VM-Exit are architecturally required to flush VPID=0, but *only* +* VPID=0. I.e. using vpid02 would be ok (so long as KVM emulates the +* required flushes), but doing so would cause KVM to over-flush. E.g. +* if L1 runs L2 X with VPID12=1, then runs L2 Y with VPID12 disabled, +* and then runs L2 X again, then KVM can and should retain TLB entries +* for VPID12=1. +*/ if (enable_vpid) {if (nested_cpu_has_vpid (vmcs12) && vmx->nested.vpid02)vmcs_write16 (VIRTUAL_PROCESSOR_ID , vmx->nested.vpid02);
@@ -5890,6 +5904,12 @@ static int handle_invvpid(struct kvm_vcpu *vcpu)return nested_vmx_fail (vcpu,VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID ); +/* +* Always flush the effective vpid02, i.e. never flush the current VPID +* and never explicitly flush vpid01. INVVPID targets a VPID, not a +* VMCS, and so whether or not the current vmcs12 has VPID enabled is +* irrelevant (and there may not be a loaded vmcs12). +*/ vpid02 =nested_get_vpid02 (vcpu);switch (type) {case VMX_VPID_EXTENT_INDIVIDUAL_ADDR :
arch/x86/kvm/vmx/vmx.c +4 -2
@@ -217,9 +217,11 @@ module_param(ple_window_shrink, uint, 0444);static unsigned int ple_window_max =KVM_VMX_DEFAULT_PLE_WINDOW_MAX ;module_param (ple_window_max, uint,0444 ); -/* Default is SYSTEM mode, 1 for host-guest mode */ +/* Default is SYSTEM mode, 1 for host-guest mode (which is BROKEN) */ int __read_mostly pt_mode =PT_MODE_SYSTEM ; +#ifdef CONFIG_BROKEN module_param (pt_mode, int,S_IRUGO ); +#endif struct x86_pmu_lbr __ro_after_init vmx_lbr_caps;
@@ -3220,7 +3222,7 @@ void vmx_flush_tlb_all(struct kvm_vcpu *vcpu)static inline int vmx_get_current_vpid (struct kvm_vcpu *vcpu) { -if (is_guest_mode (vcpu)) +if (is_guest_mode (vcpu) &&nested_cpu_has_vpid (get_vmcs12 (vcpu)))return nested_get_vpid02 (vcpu);return to_vmx (vcpu)->vpid; }
arch/x86/mm/ioremap.c +4 -2
@@ -655,7 +655,8 @@ static bool memremap_is_setup_data(resource_size_t phys_addr, paddr_next = data->next; len = data->len; -if ((phys_addr > paddr) && (phys_addr < (paddr + len))) { +if ((phys_addr > paddr) && + (phys_addr < (paddr +sizeof (struct setup_data ) + len))) {memunmap (data);return true; }
@@ -717,7 +718,8 @@ static bool __init early_memremap_is_setup_data(resource_size_t phys_addr, paddr_next = data->next; len = data->len; -if ((phys_addr > paddr) && (phys_addr < (paddr + len))) { +if ((phys_addr > paddr) && + (phys_addr < (paddr +sizeof (struct setup_data ) + len))) {early_memunmap (data,sizeof (*data));return true; }
drivers/bluetooth/btintel.c +2 -3
@@ -3288,13 +3288,12 @@ static int btintel_diagnostics(struct hci_dev *hdev, struct sk_buff *skb)case INTEL_TLV_TEST_EXCEPTION :/* Generate devcoredump from exception */ if (!hci_devcd_init (hdev, skb->len)) { -hci_devcd_append (hdev, skb); +hci_devcd_append (hdev,skb_clone (skb,GFP_ATOMIC ));hci_devcd_complete (hdev); }else {bt_dev_err (hdev,"Failed to generate devcoredump" ); -kfree_skb (skb); } -return 0 ; +break ;default :bt_dev_err (hdev,"Invalid exception type %02X" , tlv->val[0 ]); }
drivers/char/tpm/tpm2-sessions.c +5 -2
@@ -948,10 +948,13 @@ static int tpm2_load_null(struct tpm_chip *chip, u32 *null_key)/* Deduce from the name change TPM interference: */ dev_err (&chip->dev,"null key integrity check failed\n" );tpm2_flush_context (chip, tmp_null_key); - chip->flags |=TPM_CHIP_FLAG_DISABLE ; err: -return rc ? -ENODEV :0 ; +if (rc) { + chip->flags |=TPM_CHIP_FLAG_DISABLE ; + rc = -ENODEV ; + } +return rc; }/**
drivers/firmware/arm_scmi/perf.c +32 -12
89 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +2 -1
@@ -180,7 +180,8 @@ void amdgpu_bo_placement_from_domain(struct amdgpu_bo *abo, u32 domain)* When GTT is just an alternative to VRAM make sure that we * only use it as fallback and still try to fill up VRAM first. */ -if (domain & abo->preferred_domains &AMDGPU_GEM_DOMAIN_VRAM ) +if (domain & abo->preferred_domains &AMDGPU_GEM_DOMAIN_VRAM && + !(adev->flags &AMD_IS_APU )) places[c].flags |=TTM_PL_FLAG_FALLBACK ; c++; }
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +8 -5
@@ -1124,8 +1124,10 @@ static void gmc_v9_0_get_coherence_flags(struct amdgpu_device *adev, uint64_t *flags) {struct amdgpu_device *bo_adev =amdgpu_ttm_adev (bo->tbo.bdev); -bool is_vram = bo->tbo.resource->mem_type ==TTM_PL_VRAM ; -bool coherent = bo->flags & (AMDGPU_GEM_CREATE_COHERENT |AMDGPU_GEM_CREATE_EXT_COHERENT ); +bool is_vram = bo->tbo.resource && + bo->tbo.resource->mem_type ==TTM_PL_VRAM ; +bool coherent = bo->flags & (AMDGPU_GEM_CREATE_COHERENT | +AMDGPU_GEM_CREATE_EXT_COHERENT );bool ext_coherent = bo->flags &AMDGPU_GEM_CREATE_EXT_COHERENT ;bool uncached = bo->flags &AMDGPU_GEM_CREATE_UNCACHED ;struct amdgpu_vm *vm = mapping->bo_va->base.vm;
@@ -1133,6 +1135,8 @@ static void gmc_v9_0_get_coherence_flags(struct amdgpu_device *adev,bool snoop = false;bool is_local; +dma_resv_assert_held (bo->tbo.base.resv); +switch (amdgpu_ip_version (adev,GC_HWIP ,0 )) {case IP_VERSION (9 ,4 ,1 ):case IP_VERSION (9 ,4 ,2 ):
@@ -1251,9 +1255,8 @@ static void gmc_v9_0_get_vm_pte(struct amdgpu_device *adev, *flags &= ~AMDGPU_PTE_VALID ; } -if (bo && bo->tbo.resource) -gmc_v9_0_get_coherence_flags (adev, mapping->bo_va->base.bo, - mapping, flags); +if ((*flags &AMDGPU_PTE_VALID ) && bo) +gmc_v9_0_get_coherence_flags (adev, bo, mapping, flags); } static void gmc_v9_0_override_vm_pte_flags(struct amdgpu_device *adev,
drivers/gpu/drm/amd/amdgpu/mes_v12_0.c +1 -1
@@ -524,7 +524,7 @@ static int mes_v12_0_set_hw_resources_1(struct amdgpu_mes *mes, int pipe) mes_set_hw_res_1_pkt.header.type =MES_API_TYPE_SCHEDULER ; mes_set_hw_res_1_pkt.header.opcode =MES_SCH_API_SET_HW_RSRC_1 ; mes_set_hw_res_1_pkt.header.dwsize =API_FRAME_SIZE_IN_DWORDS ; - mes_set_hw_res_1_pkt.mes_kiq_unmap_timeout =100 ; + mes_set_hw_res_1_pkt.mes_kiq_unmap_timeout =0xa ; return mes_v12_0_submit_pkt_and_poll_completion(mes, pipe, &mes_set_hw_res_1_pkt, sizeof(mes_set_hw_res_1_pkt),
drivers/gpu/drm/amd/amdgpu/nbio_v7_7.c +6 -0
@@ -247,6 +247,12 @@ static void nbio_v7_7_init_registers(struct amdgpu_device *adev)if (def != data)WREG32_SOC15 (NBIO ,0 , regBIF0_PCIE_MST_CTRL_3, data); +switch (adev->ip_versions[NBIO_HWIP ][0 ]) { +case IP_VERSION (7 ,7 ,0 ): + data =RREG32_SOC15 (NBIO ,0 , regRCC_DEV0_EPF5_STRAP4) & ~BIT (23 ); +WREG32_SOC15 (NBIO ,0 , regRCC_DEV0_EPF5_STRAP4, data); +break ; + } } static void nbio_v7_7_update_medium_grain_clock_gating(struct amdgpu_device *adev,
drivers/gpu/drm/amd/amdgpu/nv.c +6 -6
@@ -67,8 +67,8 @@ static const struct amd_ip_funcs nv_common_ip_funcs;/* Navi */ static const struct amdgpu_video_codec_info nv_video_codecs_encode_array[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,2304 ,0 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,4096 ,2304 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,4096 ,4096 ,0 )}, };static const struct amdgpu_video_codecs nv_video_codecs_encode = {
@@ -94,8 +94,8 @@ static const struct amdgpu_video_codecs nv_video_codecs_decode = {/* Sienna Cichlid */ static const struct amdgpu_video_codec_info sc_video_codecs_encode_array[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,2160 ,0 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,7680 ,4352 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,8192 ,4352 ,0 )}, };static const struct amdgpu_video_codecs sc_video_codecs_encode = {
@@ -136,8 +136,8 @@ static const struct amdgpu_video_codecs sc_video_codecs_decode_vcn1 = {/* SRIOV Sienna Cichlid, not const since data is controlled by host */ static struct amdgpu_video_codec_info sriov_sc_video_codecs_encode_array[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,2160 ,0 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,7680 ,4352 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,8192 ,4352 ,0 )}, };static struct amdgpu_video_codec_info sriov_sc_video_codecs_decode_array_vcn0[] = {
drivers/gpu/drm/amd/amdgpu/soc15.c +2 -2
@@ -90,8 +90,8 @@ static const struct amd_ip_funcs soc15_common_ip_funcs;/* Vega, Raven, Arcturus */ static const struct amdgpu_video_codec_info vega_video_codecs_encode_array[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,2304 ,0 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,4096 ,2304 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,4096 ,4096 ,0 )}, }; static const struct amdgpu_video_codecs vega_video_codecs_encode =
drivers/gpu/drm/amd/amdgpu/soc21.c +6 -6
@@ -49,13 +49,13 @@ static const struct amd_ip_funcs soc21_common_ip_funcs;/* SOC21 */ static const struct amdgpu_video_codec_info vcn_4_0_0_video_codecs_encode_array_vcn0[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,2304 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,0 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,8192 ,4352 ,0 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1 ,8192 ,4352 ,0 )}, };static const struct amdgpu_video_codec_info vcn_4_0_0_video_codecs_encode_array_vcn1[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,2304 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,0 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,8192 ,4352 ,0 )}, };
@@ -96,14 +96,14 @@ static const struct amdgpu_video_codecs vcn_4_0_0_video_codecs_decode_vcn1 = {/* SRIOV SOC21, not const since data is controlled by host */ static struct amdgpu_video_codec_info sriov_vcn_4_0_0_video_codecs_encode_array_vcn0[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,2304 ,0 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,4096 ,2304 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,8192 ,4352 ,0 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1 ,8192 ,4352 ,0 )}, };static struct amdgpu_video_codec_info sriov_vcn_4_0_0_video_codecs_encode_array_vcn1[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,2304 ,0 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,4096 ,2304 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,8192 ,4352 ,0 )}, };static struct amdgpu_video_codecs sriov_vcn_4_0_0_video_codecs_encode_vcn0 = {
drivers/gpu/drm/amd/amdgpu/soc24.c +1 -1
@@ -48,7 +48,7 @@static const struct amd_ip_funcs soc24_common_ip_funcs;static const struct amdgpu_video_codec_info vcn_5_0_0_video_codecs_encode_array_vcn0[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,2304 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,0 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,8192 ,4352 ,0 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1 ,8192 ,4352 ,0 )}, };
drivers/gpu/drm/amd/amdgpu/vi.c +4 -4
@@ -136,15 +136,15 @@ static const struct amdgpu_video_codec_info polaris_video_codecs_encode_array[] { .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, .max_width = 4096, - .max_height = 2304, - .max_pixels_per_frame = 4096 * 2304, + .max_height = 4096, + .max_pixels_per_frame = 4096 * 4096, .max_level = 0, }, { .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, .max_width = 4096, - .max_height = 2304, - .max_pixels_per_frame = 4096 * 2304, + .max_height = 4096, + .max_pixels_per_frame = 4096 * 4096, .max_level = 0, }, };
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +60 -57
153 lines not on this page · raw message
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +1 -1
@@ -727,7 +727,7 @@ struct amdgpu_dm_connector {/* Cached display modes */ struct drm_display_mode freesync_vid_base; -int psr_skip_count; +int sr_skip_count;bool disallow_edp_enter_psr;/* Record progress status of mst*/
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c +11 -6
@@ -251,9 +251,10 @@ static void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work)else if (dm->active_vblank_irq_count) dm->active_vblank_irq_count--; -dc_allow_idle_optimizations (dm->dc, dm->active_vblank_irq_count ==0 ); - -DRM_DEBUG_KMS ("Allow idle optimizations (MALL): %d\n" , dm->active_vblank_irq_count ==0 ); +if (dm->active_vblank_irq_count >0 ) { +DRM_DEBUG_KMS ("Allow idle optimizations (MALL): false\n" ); +dc_allow_idle_optimizations (dm->dc, false); + }/* * Control PSR based on vblank requirements from OS
@@ -265,11 +266,15 @@ static void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work)* where the SU region is the full hactive*vactive region. See * fill_dc_dirty_rects(). */ -if (vblank_work->stream && vblank_work->stream->link) { +if (vblank_work->stream && vblank_work->stream->link && vblank_work->acrtc) {amdgpu_dm_crtc_set_panel_sr_feature ( vblank_work, vblank_work->enable, - vblank_work->acrtc->dm_irq_params.allow_psr_entry || - vblank_work->stream->link->replay_settings.replay_feature_enabled); + vblank_work->acrtc->dm_irq_params.allow_sr_entry); + } + +if (dm->active_vblank_irq_count ==0 ) { +DRM_DEBUG_KMS ("Allow idle optimizations (MALL): true\n" ); +dc_allow_idle_optimizations (dm->dc, true); }mutex_unlock (&dm->dc_lock);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq_params.h +1 -1
@@ -33,7 +33,7 @@ struct dm_irq_params {struct mod_vrr_params vrr_params;struct dc_stream_state *stream;int active_planes; -bool allow_psr_entry; +bool allow_sr_entry;struct mod_freesync_config freesync_config;#ifdef CONFIG_DEBUG_FS
drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c +2 -4
@@ -3122,14 +3122,12 @@ static enum bp_result bios_parser_get_vram_info( struct dc_vram_info *info) {struct bios_parser *bp =BP_FROM_DCB (dcb); -static enum bp_result result =BP_RESULT_BADBIOSTABLE ; +enum bp_result result =BP_RESULT_BADBIOSTABLE ;struct atom_common_table_header *header;struct atom_data_revision revision;// vram info moved to umc_info for DCN4x -if (dcb->ctx->dce_version >=DCN_VERSION_4_01 && - dcb->ctx->dce_version <DCN_VERSION_MAX && - info &&DATA_TABLES (umc_info)) { +if (info &&DATA_TABLES (umc_info)) { header = GET_IMAGE(struct atom_common_table_header,DATA_TABLES (umc_info));
drivers/gpu/drm/amd/display/dc/core/dc_state.c +3 -0
@@ -265,6 +265,9 @@ struct dc_state *dc_state_create_copy(struct dc_state *src_state)dc_state_copy_internal (new_state, src_state);#ifdef CONFIG_DRM_AMD_DC_FP + new_state->bw_ctx.dml2 =NULL ; + new_state->bw_ctx.dml2_dc_power_source =NULL ; +if (src_state->bw_ctx.dml2 && !dml2_create_copy (&new_state->bw_ctx.dml2, src_state->bw_ctx.dml2)) {dc_state_release (new_state);
drivers/gpu/drm/amd/display/dc/dml2/dml21/src/dml2_pmo/dml2_pmo_dcn4_fams2.c +9 -2
@@ -30,6 +30,7 @@#include "dml2_pmo_dcn4_fams2.h" static const double MIN_VACTIVE_MARGIN_PCT =0.25 ;// We need more than non-zero margin because DET buffer granularity can alter vactive latency hiding +static const double MIN_BLANK_STUTTER_FACTOR =3.0 ;static const enum dml2_pmo_pstate_strategy base_strategy_list_1_display[][PMO_DCN4_MAX_DISPLAYS ] = {// VActive Preferred
@@ -2004,6 +2005,7 @@ bool pmo_dcn4_fams2_init_for_stutter(struct dml2_pmo_init_for_stutter_in_out *instruct dml2_pmo_instance *pmo = in_out->instance;bool stutter_period_meets_z8_eco = true;bool z8_stutter_optimization_too_expensive = false; +bool stutter_optimization_too_expensive = false;double line_time_us, vblank_nom_time_us;unsigned int i;
@@ -2025,10 +2027,15 @@ bool pmo_dcn4_fams2_init_for_stutter(struct dml2_pmo_init_for_stutter_in_out *in line_time_us = (double )in_out->base_display_config->display_config.stream_descriptors[i].timing.h_total / (in_out->base_display_config->display_config.stream_descriptors[i].timing.pixel_clock_khz *1000 ) *1000000 ; vblank_nom_time_us = line_time_us * in_out->base_display_config->display_config.stream_descriptors[i].timing.vblank_nom; -if (vblank_nom_time_us < pmo->soc_bb->power_management_parameters.z8_stutter_exit_latency_us) { +if (vblank_nom_time_us < pmo->soc_bb->power_management_parameters.z8_stutter_exit_latency_us *MIN_BLANK_STUTTER_FACTOR ) { z8_stutter_optimization_too_expensive = true;break ; } + +if (vblank_nom_time_us < pmo->soc_bb->power_management_parameters.stutter_enter_plus_exit_latency_us *MIN_BLANK_STUTTER_FACTOR ) { + stutter_optimization_too_expensive = true; +break ; + } } pmo->scratch.pmo_dcn4.num_stutter_candidates =0 ;
@@ -2044,7 +2051,7 @@ bool pmo_dcn4_fams2_init_for_stutter(struct dml2_pmo_init_for_stutter_in_out *in pmo->scratch.pmo_dcn4.z8_vblank_optimizable = false; } -if (pmo->soc_bb->power_management_parameters.stutter_enter_plus_exit_latency_us >0 ) { +if (!stutter_optimization_too_expensive && pmo->soc_bb->power_management_parameters.stutter_enter_plus_exit_latency_us >0 ) { pmo->scratch.pmo_dcn4.optimal_vblank_reserved_time_for_stutter_us[pmo->scratch.pmo_dcn4.num_stutter_candidates] = (unsigned int )pmo->soc_bb->power_management_parameters.stutter_enter_plus_exit_latency_us; pmo->scratch.pmo_dcn4.num_stutter_candidates++; }
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +14 -35
90 lines not on this page · raw message
drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h +1 -3
@@ -240,7 +240,6 @@ struct smu_user_dpm_profile {/* user clock state information */ uint32_t clk_mask[SMU_CLK_COUNT ];uint32_t clk_dependency; -uint32_t user_workload_mask; };#define SMU_TABLE_INIT (tables, table_id, s, a, d) \
@@ -558,8 +557,7 @@ struct smu_context {bool disable_uclk_switch;uint32_t workload_mask; -uint32_t driver_workload_mask; -uint32_t workload_priority[WORKLOAD_POLICY_MAX ]; +uint32_t workload_prority[WORKLOAD_POLICY_MAX ];uint32_t workload_setting[WORKLOAD_POLICY_MAX ];uint32_t power_profile_mode;uint32_t default_power_profile_mode;
drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c +3 -2
@@ -1455,6 +1455,7 @@ static int arcturus_set_power_profile_mode(struct smu_context *smu,return -EINVAL ; } +if ((profile_mode ==PP_SMC_POWER_PROFILE_CUSTOM ) && (smu->smc_fw_version >=0x360d00 )) {if (size !=10 )
@@ -1522,14 +1523,14 @@ static int arcturus_set_power_profile_mode(struct smu_context *smu, ret =smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_SetWorkloadMask, - smu->workload_mask, +1 << workload_type,NULL );if (ret) {dev_err (smu->adev->dev,"Fail to set workload type %d\n" , workload_type);return ret; } -smu_cmn_assign_power_profile (smu); + smu->power_profile_mode = profile_mode;return 0 ; }
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c +1 -4
@@ -2081,13 +2081,10 @@ static int navi10_set_power_profile_mode(struct smu_context *smu, long *input, u smu->power_profile_mode);if (workload_type <0 )return -EINVAL ; - ret =smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_SetWorkloadMask, - smu->workload_mask,NULL ); +1 << workload_type,NULL );if (ret)dev_err (smu->adev->dev,"[%s] Failed to set work load mask!" , __func__); -else -smu_cmn_assign_power_profile (smu);return ret; }
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +1 -4
@@ -1786,13 +1786,10 @@ static int sienna_cichlid_set_power_profile_mode(struct smu_context *smu, long * smu->power_profile_mode);if (workload_type <0 )return -EINVAL ; - ret =smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_SetWorkloadMask, - smu->workload_mask,NULL ); +1 << workload_type,NULL );if (ret)dev_err (smu->adev->dev,"[%s] Failed to set work load mask!" , __func__); -else -smu_cmn_assign_power_profile (smu);return ret; }
drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c +2 -2
@@ -1079,7 +1079,7 @@ static int vangogh_set_power_profile_mode(struct smu_context *smu, long *input, } ret =smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_ActiveProcessNotify, - smu->workload_mask, +1 << workload_type,NULL );if (ret) { dev_err_once(smu->adev->dev, "Fail to set workload type %d\n",
@@ -1087,7 +1087,7 @@ static int vangogh_set_power_profile_mode(struct smu_context *smu, long *input,return ret; } -smu_cmn_assign_power_profile (smu); + smu->power_profile_mode = profile_mode;return 0 ; }
drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c +2 -2
@@ -890,14 +890,14 @@ static int renoir_set_power_profile_mode(struct smu_context *smu, long *input, u } ret =smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_ActiveProcessNotify, - smu->workload_mask, +1 << workload_type,NULL );if (ret) {dev_err_once (smu->adev->dev,"Fail to set workload type %d\n" , workload_type);return ret; } -smu_cmn_assign_power_profile (smu); + smu->power_profile_mode = profile_mode;return 0 ; }
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c +5 -15
@@ -2485,7 +2485,7 @@ static int smu_v13_0_0_set_power_profile_mode(struct smu_context *smu,DpmActivityMonitorCoeffInt_t *activity_monitor = &(activity_monitor_external.DpmActivityMonitorCoeffInt);int workload_type, ret =0 ; -u32 workload_mask; +u32 workload_mask, selected_workload_mask; smu->power_profile_mode = input[size];
@@ -2552,7 +2552,7 @@ static int smu_v13_0_0_set_power_profile_mode(struct smu_context *smu,if (workload_type <0 )return -EINVAL ; - workload_mask =1 << workload_type; + selected_workload_mask = workload_mask =1 << workload_type;/* Add optimizations for SMU13.0.0/10. Reuse the power saving profile */ if ((amdgpu_ip_version(smu->adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 0) &&
@@ -2567,22 +2567,12 @@ static int smu_v13_0_0_set_power_profile_mode(struct smu_context *smu, workload_mask |=1 << workload_type; } - smu->workload_mask |= workload_mask; ret =smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_SetWorkloadMask, - smu->workload_mask, + workload_mask,NULL ); -if (!ret) { -smu_cmn_assign_power_profile (smu); -if (smu->power_profile_mode ==PP_SMC_POWER_PROFILE_POWERSAVING ) { - workload_type =smu_cmn_to_asic_specific_index (smu, -CMN2ASIC_MAPPING_WORKLOAD , -PP_SMC_POWER_PROFILE_FULLSCREEN3D ); - smu->power_profile_mode = smu->workload_mask & (1 << workload_type) - ?PP_SMC_POWER_PROFILE_FULLSCREEN3D - :PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT ; - } - } +if (!ret) + smu->workload_mask = selected_workload_mask;return ret; }
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c +2 -3
@@ -2499,14 +2499,13 @@ static int smu_v13_0_7_set_power_profile_mode(struct smu_context *smu, long *inp smu->power_profile_mode);if (workload_type <0 )return -EINVAL ; - ret =smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_SetWorkloadMask, - smu->workload_mask,NULL ); +1 << workload_type,NULL );if (ret)dev_err (smu->adev->dev,"[%s] Failed to set work load mask!" , __func__);else -smu_cmn_assign_power_profile (smu); + smu->workload_mask = (1 << workload_type);return ret; }
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c +3 -2
@@ -1132,7 +1132,7 @@ static int smu_v14_0_common_get_dpm_level_count(struct smu_context *smu,static int smu_v14_0_0_print_clk_levels (struct smu_context *smu,enum smu_clk_type clk_type,char *buf) { -int i, size =0 , ret =0 ; +int i, idx, ret =0 , size =0 ;uint32_t cur_value =0 , value =0 , count =0 ;uint32_t min, max;
@@ -1168,7 +1168,8 @@ static int smu_v14_0_0_print_clk_levels(struct smu_context *smu,break ;for (i =0 ; i < count; i++) { - ret =smu_v14_0_common_get_dpm_freq_by_index (smu, clk_type, i, &value); + idx = (clk_type ==SMU_MCLK ) ? (count - i -1 ) : i; + ret =smu_v14_0_common_get_dpm_freq_by_index (smu, clk_type, idx, &value);if (ret)break ;
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c +5 -4
@@ -1508,11 +1508,12 @@ static int smu_v14_0_2_set_power_profile_mode(struct smu_context *smu,if (workload_type <0 )return -EINVAL ; - ret =smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_SetWorkloadMask, - smu->workload_mask,NULL ); - + ret =smu_cmn_send_smc_msg_with_param (smu, + SMU_MSG_SetWorkloadMask, +1 << workload_type, +NULL );if (!ret) -smu_cmn_assign_power_profile (smu); + smu->workload_mask =1 << workload_type;return ret; }
drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c +0 -8
@@ -1138,14 +1138,6 @@ int smu_cmn_set_mp1_state(struct smu_context *smu,return ret; } -void smu_cmn_assign_power_profile (struct smu_context *smu) -{ -uint32_t index; - index =fls (smu->workload_mask); - index = index >0 && index <=WORKLOAD_POLICY_MAX ? index -1 :0 ; - smu->power_profile_mode = smu->workload_setting[index]; -} -bool smu_cmn_is_audio_func_enabled (struct amdgpu_device *adev) {struct pci_dev *p =NULL ;
drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h +0 -2
@@ -130,8 +130,6 @@ void smu_cmn_init_soft_gpu_metrics(void *table, uint8_t frev, uint8_t crev);int smu_cmn_set_mp1_state (struct smu_context *smu,enum pp_mp1_state mp1_state); -void smu_cmn_assign_power_profile (struct smu_context *smu); -/* * Helper function to make sysfs_emit_at() happy. Align buf to * the current page boundary and record the offset.
drivers/gpu/drm/bridge/tc358768.c +19 -2
@@ -125,6 +125,9 @@#define TC358768_DSI_CONFW_MODE_CLR (6 << 29)#define TC358768_DSI_CONFW_ADDR_DSI_CONTROL (0x3 << 24) +/* TC358768_DSICMD_TX (0x0600) register */ +#define TC358768_DSI_CMDTX_DC_START BIT(0) +static const char *const tc358768_supplies[] = {"vddc" ,"vddmipi" ,"vddio" };
@@ -229,6 +232,21 @@ static void tc358768_update_bits(struct tc358768_priv *priv, u32 reg, u32 mask,tc358768_write (priv, reg, tmp); } +static void tc358768_dsicmd_tx (struct tc358768_priv *priv) +{ +u32 val; + +/* start transfer */ +tc358768_write (priv,TC358768_DSICMD_TX ,TC358768_DSI_CMDTX_DC_START ); +if (priv->error) +return ; + +/* wait transfer completion */ + priv->error =regmap_read_poll_timeout (priv->regmap,TC358768_DSICMD_TX , val, + (val &TC358768_DSI_CMDTX_DC_START ) ==0 , +100 ,100000 ); +} +static int tc358768_sw_reset (struct tc358768_priv *priv) {/* Assert Reset */
@@ -516,8 +534,7 @@ static ssize_t tc358768_dsi_host_transfer(struct mipi_dsi_host *host, } } -/* start transfer */ -tc358768_write (priv,TC358768_DSICMD_TX ,1 ); +tc358768_dsicmd_tx (priv); ret =tc358768_clear_error (priv);if (ret)
drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.c +32 -18
71 lines not on this page · raw message
drivers/gpu/drm/i915/i915_drv.h +6 -2
@@ -546,8 +546,12 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,#define IS_LUNARLAKE (i915) (0 && i915)#define IS_BATTLEMAGE (i915) (0 && i915) -#define IS_ARROWLAKE (i915) \ - IS_SUBPLATFORM(i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_ARL) +#define IS_ARROWLAKE_H (i915) \ + IS_SUBPLATFORM(i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_ARL_H) +#define IS_ARROWLAKE_U (i915) \ + IS_SUBPLATFORM(i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_ARL_U) +#define IS_ARROWLAKE_S (i915) \ + IS_SUBPLATFORM(i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_ARL_S)#define IS_DG2_G10 (i915) \ IS_SUBPLATFORM(i915, INTEL_DG2, INTEL_SUBPLATFORM_G10)#define IS_DG2_G11 (i915) \
drivers/gpu/drm/i915/intel_device_info.c +19 -5
@@ -202,8 +202,16 @@ static const u16 subplatform_g12_ids[] = { INTEL_DG2_G12_IDS(ID), }; -static const u16 subplatform_arl_ids[] = { -INTEL_ARL_IDS (ID ), +static const u16 subplatform_arl_h_ids[] = { +INTEL_ARL_H_IDS (ID ), +}; + +static const u16 subplatform_arl_u_ids[] = { +INTEL_ARL_U_IDS (ID ), +}; + +static const u16 subplatform_arl_s_ids[] = { +INTEL_ARL_S_IDS (ID ), };static bool find_devid (u16 id,const u16 *p,unsigned int num)
@@ -263,9 +271,15 @@ static void intel_device_info_subplatform_init(struct drm_i915_private *i915) }else if (find_devid (devid, subplatform_g12_ids,ARRAY_SIZE (subplatform_g12_ids))) { mask =BIT (INTEL_SUBPLATFORM_G12 ); - }else if (find_devid (devid, subplatform_arl_ids, -ARRAY_SIZE (subplatform_arl_ids))) { - mask =BIT (INTEL_SUBPLATFORM_ARL ); + }else if (find_devid (devid, subplatform_arl_h_ids, +ARRAY_SIZE (subplatform_arl_h_ids))) { + mask =BIT (INTEL_SUBPLATFORM_ARL_H ); + }else if (find_devid (devid, subplatform_arl_u_ids, +ARRAY_SIZE (subplatform_arl_u_ids))) { + mask =BIT (INTEL_SUBPLATFORM_ARL_U ); + }else if (find_devid (devid, subplatform_arl_s_ids, +ARRAY_SIZE (subplatform_arl_s_ids))) { + mask =BIT (INTEL_SUBPLATFORM_ARL_S ); }GEM_BUG_ON (mask & ~INTEL_SUBPLATFORM_MASK );
drivers/gpu/drm/i915/intel_device_info.h +3 -1
@@ -128,7 +128,9 @@ enum intel_platform {#define INTEL_SUBPLATFORM_RPLU 2/* MTL */ -#define INTEL_SUBPLATFORM_ARL 0 +#define INTEL_SUBPLATFORM_ARL_H 0 +#define INTEL_SUBPLATFORM_ARL_U 1 +#define INTEL_SUBPLATFORM_ARL_S 2enum intel_ppgtt_type {INTEL_PPGTT_NONE =I915_GEM_PPGTT_NONE ,
drivers/gpu/drm/nouveau/nvkm/engine/disp/r535.c +35 -24
75 lines not on this page · raw message
drivers/gpu/drm/nouveau/nvkm/falcon/fw.c +6 -5
@@ -89,11 +89,6 @@ nvkm_falcon_fw_boot(struct nvkm_falcon_fw *fw, struct nvkm_subdev *user,nvkm_falcon_fw_dtor_sigs (fw); } -/* after last write to the img, sync dma mappings */ -dma_sync_single_for_device (fw->fw.device->dev, - fw->fw.phys, -sg_dma_len (&fw->fw.mem.sgl), -DMA_TO_DEVICE );FLCNFW_DBG (fw,"resetting" ); fw->func->reset (fw);
@@ -105,6 +100,12 @@ nvkm_falcon_fw_boot(struct nvkm_falcon_fw *fw, struct nvkm_subdev *user, goto done; } +/* after last write to the img, sync dma mappings */ +dma_sync_single_for_device (fw->fw.device->dev, + fw->fw.phys, +sg_dma_len (&fw->fw.mem.sgl), +DMA_TO_DEVICE ); + ret = fw->func->load (fw);if (ret) goto done;
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c +3 -3
@@ -78,7 +78,7 @@ r535_rpc_status_to_errno(uint32_t rpc_status)switch (rpc_status) {case 0x55 :/* NV_ERR_NOT_READY */ case 0x66 :/* NV_ERR_TIMEOUT_RETRY */ -return -EAGAIN ; +return -EBUSY ;case 0x51 :/* NV_ERR_NO_MEMORY */ return -ENOMEM ;default :
@@ -601,7 +601,7 @@ r535_gsp_rpc_rm_alloc_push(struct nvkm_gsp_object *object, void *argv, u32 repc)if (rpc->status) { ret =ERR_PTR (r535_rpc_status_to_errno (rpc->status)); -if (PTR_ERR (ret) != -EAGAIN ) +if (PTR_ERR (ret) != -EAGAIN &&PTR_ERR (ret) != -EBUSY )nvkm_error (&gsp->subdev,"RM_ALLOC: 0x%x\n" , rpc->status); }else { ret = repc ? rpc->params :NULL ;
@@ -660,7 +660,7 @@ r535_gsp_rpc_rm_ctrl_push(struct nvkm_gsp_object *object, void **argv, u32 repc)if (rpc->status) { ret =r535_rpc_status_to_errno (rpc->status); -if (ret != -EAGAIN ) +if (ret != -EAGAIN && ret != -EBUSY )nvkm_error (&gsp->subdev,"cli:0x%08x obj:0x%08x ctrl cmd:0x%08x failed: 0x%08x\n" , object->client->object.handle, object->handle, rpc->cmd, rpc->status); }
drivers/gpu/drm/panthor/panthor_mmu.c +2 -0
@@ -990,6 +990,8 @@ panthor_vm_map_pages(struct panthor_vm *vm, u64 iova, int prot,if (!size)break ; + + offset =0 ; }return panthor_vm_flush_range (vm, start_iova, iova - start_iova);
drivers/gpu/drm/rockchip/rockchip_drm_vop.c +4 -4
@@ -1093,10 +1093,10 @@ static int vop_plane_atomic_async_check(struct drm_plane *plane,if (!plane->state->fb)return -EINVAL ; -if (state) - crtc_state =drm_atomic_get_existing_crtc_state (state, - new_plane_state->crtc); -else /* Special case for asynchronous cursor updates. */ + crtc_state =drm_atomic_get_existing_crtc_state (state, new_plane_state->crtc); + +/* Special case for asynchronous cursor updates. */ +if (!crtc_state) crtc_state = plane->crtc->state; return drm_atomic_helper_check_plane_state(plane->state, crtc_state,
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +2 -0
@@ -1265,6 +1265,8 @@ static int vmw_framebuffer_surface_create_handle(struct drm_framebuffer *fb,struct vmw_framebuffer_surface *vfbs =vmw_framebuffer_to_vfbs (fb);struct vmw_bo *bo =vmw_user_object_buffer (&vfbs->uo); +if (WARN_ON (!bo)) +return -EINVAL ;return drm_gem_handle_create (file_priv, &bo->tbo.base, handle); }
drivers/gpu/drm/xe/xe_bo.c +23 -20
96 lines not on this page · raw message
drivers/gpu/drm/xe/xe_bo_evict.c +12 -8
@@ -34,14 +34,22 @@ int xe_bo_evict_all(struct xe_device *xe)u8 id;int ret; -if (!IS_DGFX (xe)) -return 0 ; -/* User memory */ -for (mem_type =XE_PL_VRAM0 ; mem_type <=XE_PL_VRAM1 ; ++mem_type) { +for (mem_type =XE_PL_TT ; mem_type <=XE_PL_VRAM1 ; ++mem_type) {struct ttm_resource_manager *man =ttm_manager_type (bdev, mem_type); +/* +* On igpu platforms with flat CCS we need to ensure we save and restore any CCS +* state since this state lives inside graphics stolen memory which doesn't survive +* hibernation. +* +* This can be further improved by only evicting objects that we know have actually +* used a compression enabled PAT index. +*/ +if (mem_type ==XE_PL_TT && (IS_DGFX (xe) || !xe_device_has_flat_ccs (xe))) +continue ; +if (man) { ret =ttm_resource_manager_evict_all (bdev, man);if (ret)
@@ -125,9 +133,6 @@ int xe_bo_restore_kernel(struct xe_device *xe)struct xe_bo *bo;int ret; -if (!IS_DGFX (xe)) -return 0 ; -spin_lock (&xe->pinned.lock);for (;;) { bo = list_first_entry_or_null(&xe->pinned.evicted,
@@ -159,7 +164,6 @@ int xe_bo_restore_kernel(struct xe_device *xe)* should setup the iosys map. */ xe_assert (xe, !iosys_map_is_null (&bo->vmap)); -xe_assert (xe,xe_bo_is_vram (bo));xe_bo_put (bo);
drivers/gpu/drm/xe/xe_oa.c +2 -0
@@ -1206,9 +1206,11 @@ static int xe_oa_release(struct inode *inode, struct file *file)struct xe_oa_stream *stream = file->private_data;struct xe_gt *gt = stream->gt; +xe_pm_runtime_get (gt_to_xe (gt));mutex_lock (>->oa.gt_lock);xe_oa_destroy_locked (stream);mutex_unlock (>->oa.gt_lock); +xe_pm_runtime_put (gt_to_xe (gt));/* Release the reference the OA stream kept on the driver */ drm_dev_put (>_to_xe (gt)->drm);
drivers/infiniband/core/addr.c +0 -2
@@ -269,8 +269,6 @@ rdma_find_ndev_for_src_ip_rcu(struct net *net, const struct sockaddr *src_in)break ;#endif } -if (!ret && dev &&is_vlan_dev (dev)) - dev =vlan_dev_real_dev (dev);return ret ?ERR_PTR (ret) : dev; }
drivers/mailbox/qcom-cpucp-mbox.c +1 -1
@@ -138,7 +138,7 @@ static int qcom_cpucp_mbox_probe(struct platform_device *pdev)return irq; ret =devm_request_irq (dev, irq, qcom_cpucp_mbox_irq_fn, -IRQF_TRIGGER_HIGH ,"apss_cpucp_mbox" , cpucp); +IRQF_TRIGGER_HIGH |IRQF_NO_SUSPEND ,"apss_cpucp_mbox" , cpucp);if (ret <0 )return dev_err_probe (dev, ret,"Failed to register irq: %d\n" , irq);
drivers/media/dvb-core/dvbdev.c +4 -11
@@ -530,6 +530,9 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,for (minor =0 ; minor <MAX_DVB_MINORS ; minor++)if (!dvb_minors[minor])break ; +#else + minor =nums2minor (adap->num, type, id); +#endif if (minor >=MAX_DVB_MINORS ) {if (new_node) {list_del (&new_node->list_head);
@@ -543,17 +546,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,mutex_unlock (&dvbdev_register_lock);return -EINVAL ; } -#else - minor =nums2minor (adap->num, type, id); -if (minor >=MAX_DVB_MINORS ) { -dvb_media_device_free (dvbdev); -list_del (&dvbdev->list_head); -kfree (dvbdev); - *pdvbdev =NULL ; -mutex_unlock (&dvbdev_register_lock); -return ret; - } -#endif + dvbdev->minor = minor; dvb_minors[minor] =dvb_device_get (dvbdev);up_write (&minor_rwsem);
drivers/mmc/host/dw_mmc.c +2 -2
@@ -2957,8 +2957,8 @@ static int dw_mci_init_slot(struct dw_mci *host)if (host->use_dma ==TRANS_MODE_IDMAC ) { mmc->max_segs = host->ring_size; mmc->max_blk_size =65535 ; - mmc->max_req_size =DW_MCI_DESC_DATA_LENGTH * host->ring_size; - mmc->max_seg_size = mmc->max_req_size; + mmc->max_seg_size =0x1000 ; + mmc->max_req_size = mmc->max_seg_size * host->ring_size; mmc->max_blk_count = mmc->max_req_size /512 ; }else if (host->use_dma ==TRANS_MODE_EDMAC ) { mmc->max_segs =64 ;
drivers/mmc/host/sunxi-mmc.c +3 -3
@@ -1191,10 +1191,9 @@ static const struct sunxi_mmc_cfg sun50i_a64_emmc_cfg = { .needs_new_timings = true, }; -static const struct sunxi_mmc_cfg sun50i_a100_cfg = { +static const struct sunxi_mmc_cfg sun50i_h616_cfg = { .idma_des_size_bits =16 , .idma_des_shift =2 , - .clk_delays =NULL , .can_calibrate = true, .mask_data0 = true, .needs_new_timings = true,
@@ -1217,8 +1216,9 @@ static const struct of_device_id sunxi_mmc_of_match[] = { { .compatible = "allwinner,sun20i-d1-mmc", .data = &sun20i_d1_cfg }, { .compatible = "allwinner,sun50i-a64-mmc", .data = &sun50i_a64_cfg }, { .compatible = "allwinner,sun50i-a64-emmc", .data = &sun50i_a64_emmc_cfg }, - { .compatible = "allwinner,sun50i-a100-mmc", .data = &sun50i_a100_cfg }, + { .compatible = "allwinner,sun50i-a100-mmc", .data = &sun20i_d1_cfg }, { .compatible = "allwinner,sun50i-a100-emmc", .data = &sun50i_a100_emmc_cfg }, + { .compatible = "allwinner,sun50i-h616-mmc", .data = &sun50i_h616_cfg }, {/* sentinel */ } };MODULE_DEVICE_TABLE (of, sunxi_mmc_of_match);
drivers/net/bonding/bond_main.c +15 -1
@@ -934,6 +934,8 @@ static void bond_hw_addr_swap(struct bonding *bond, struct slave *new_active,if (bond->dev->flags &IFF_UP )bond_hw_addr_flush (bond->dev, old_active->dev); + +bond_slave_ns_maddrs_add (bond, old_active); }if (new_active) {
@@ -950,6 +952,8 @@ static void bond_hw_addr_swap(struct bonding *bond, struct slave *new_active,dev_mc_sync (new_active->dev, bond->dev);netif_addr_unlock_bh (bond->dev); } + +bond_slave_ns_maddrs_del (bond, new_active); } }
@@ -2267,6 +2271,11 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,bond_compute_features (bond);bond_set_carrier (bond); +/* Needs to be called before bond_select_active_slave(), which will +* remove the maddrs if the slave is selected as active slave. +*/ +bond_slave_ns_maddrs_add (bond, new_slave); +if (bond_uses_primary (bond)) {block_netpoll_tx ();bond_select_active_slave (bond);
@@ -2276,7 +2285,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,if (bond_mode_can_use_xmit_hash (bond))bond_update_slave_arr (bond,NULL ); -if (!slave_dev->netdev_ops->ndo_bpf || !slave_dev->netdev_ops->ndo_xdp_xmit) {if (bond->xdp_prog) {
@@ -2474,6 +2482,12 @@ static int __bond_release_one(struct net_device *bond_dev,if (oldcurrent == slave)bond_change_active_slave (bond,NULL ); +/* Must be called after bond_change_active_slave () as the slave +* might change from an active slave to a backup slave. Then it is +* necessary to clear the maddrs on the backup slave. +*/ +bond_slave_ns_maddrs_del (bond, slave); +if (bond_is_lb (bond)) {/* Must be called only after the slave has been * detached from the list and the curr_active_slave
drivers/net/bonding/bond_options.c +81 -1
116 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c +1 -1
@@ -866,7 +866,7 @@ mlx5_tc_ct_entry_add_rule(struct mlx5_tc_ct_priv *ct_priv,return 0 ; err_rule: -mlx5_tc_ct_entry_destroy_mod_hdr (ct_priv, zone_rule->attr, zone_rule->mh); +mlx5_tc_ct_entry_destroy_mod_hdr (ct_priv, attr, zone_rule->mh);mlx5_put_label_mapping (ct_priv, attr->ct_attr.ct_labels_id); err_mod_hdr:kfree (attr);
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c +4 -4
@@ -660,7 +660,7 @@ tx_sync_info_get(struct mlx5e_ktls_offload_context_tx *priv_tx,while (remaining >0 ) {skb_frag_t *frag = &record->frags[i]; -get_page (skb_frag_page (frag)); +page_ref_inc (skb_frag_page (frag)); remaining -=skb_frag_size (frag); info->frags[i++] = *frag; }
@@ -763,7 +763,7 @@ void mlx5e_ktls_tx_handle_resync_dump_comp(struct mlx5e_txqsq *sq, stats = sq->stats;mlx5e_tx_dma_unmap (sq->pdev, dma); -put_page (wi->resync_dump_frag_page); +page_ref_dec (wi->resync_dump_frag_page); stats->tls_dump_packets++; stats->tls_dump_bytes += wi->num_bytes; }
@@ -816,12 +816,12 @@ mlx5e_ktls_tx_handle_ooo(struct mlx5e_ktls_offload_context_tx *priv_tx, err_out:for (; i < info.nr_frags; i++) -/* The put_page() here undoes the page ref obtained in tx_sync_info_get(). +/* The page_ref_dec() here undoes the page ref obtained in tx_sync_info_get(). * Page refs obtained for the DUMP WQEs above (by page_ref_add) will be * released only upon their completions (or in mlx5e_free_txqsq_descs, * if channel closes). */ -put_page (skb_frag_page (&info.frags[i])); +page_ref_dec (skb_frag_page (&info.frags[i]));return MLX5E_KTLS_SYNC_FAIL ; }
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +2 -1
@@ -4266,7 +4266,8 @@ void mlx5e_set_xdp_feature(struct net_device *netdev)struct mlx5e_params *params = &priv->channels.params;xdp_features_t val; -if (params->packet_merge.type !=MLX5E_PACKET_MERGE_NONE ) { +if (!netdev->netdev_ops->ndo_bpf || + params->packet_merge.type !=MLX5E_PACKET_MERGE_NONE ) {xdp_clear_features_flag (netdev);return ; }
drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c +4 -0
@@ -36,6 +36,7 @@#include "en.h" #include "en/port.h" #include "eswitch.h" +#include "lib/mlx5.h" static int mlx5e_test_health_info (struct mlx5e_priv *priv) {
@@ -247,6 +248,9 @@ static int mlx5e_cond_loopback(struct mlx5e_priv *priv)if (is_mdev_switchdev_mode (priv->mdev))return -EOPNOTSUPP ; +if (mlx5_get_sd (priv->mdev)) +return -EOPNOTSUPP ; +return 0 ; }
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +12 -3
@@ -1946,13 +1946,22 @@ lookup_fte_locked(struct mlx5_flow_group *g, fte_tmp =NULL ; goto out; } + +nested_down_write_ref_node (&fte_tmp->node,FS_LOCK_CHILD ); +if (!fte_tmp->node.active) { +up_write_ref_node (&fte_tmp->node, false); + +if (take_write) +up_write_ref_node (&g->node, false); +else +up_read_ref_node (&g->node); +tree_put_node (&fte_tmp->node, false); - fte_tmp =NULL ; - goto out; + +return NULL ; } -nested_down_write_ref_node (&fte_tmp->node,FS_LOCK_CHILD ); out:if (take_write)up_write_ref_node (&g->node, false);
drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c +27 -5
@@ -593,9 +593,11 @@ static void irq_pool_free(struct mlx5_irq_pool *pool)kvfree (pool); } -static int irq_pools_init (struct mlx5_core_dev *dev,int sf_vec,int pcif_vec) +static int irq_pools_init (struct mlx5_core_dev *dev,int sf_vec,int pcif_vec, +bool dynamic_vec) {struct mlx5_irq_table *table = dev->priv.irq_table; +int sf_vec_available = sf_vec;int num_sf_ctrl;int err;
@@ -616,6 +618,13 @@ static int irq_pools_init(struct mlx5_core_dev *dev, int sf_vec, int pcif_vec) num_sf_ctrl =DIV_ROUND_UP (mlx5_sf_max_functions (dev),MLX5_SFS_PER_CTRL_IRQ ); num_sf_ctrl =min_t (int,MLX5_IRQ_CTRL_SF_MAX , num_sf_ctrl); +if (!dynamic_vec && (num_sf_ctrl +1 ) > sf_vec_available) { +mlx5_core_dbg (dev, +"Not enough IRQs for SFs control and completion pool, required=%d avail=%d\n" , + num_sf_ctrl +1 , sf_vec_available); +return 0 ; + } + table->sf_ctrl_pool = irq_pool_alloc(dev, pcif_vec, num_sf_ctrl, "mlx5_sf_ctrl", MLX5_EQ_SHARE_IRQ_MIN_CTRL,
@@ -624,9 +633,11 @@ static int irq_pools_init(struct mlx5_core_dev *dev, int sf_vec, int pcif_vec) err =PTR_ERR (table->sf_ctrl_pool); goto err_pf; } -/* init sf_comp_pool */ + sf_vec_available -= num_sf_ctrl; + +/* init sf_comp_pool, remaining vectors are for the SF completions */ table->sf_comp_pool =irq_pool_alloc (dev, pcif_vec + num_sf_ctrl, - sf_vec - num_sf_ctrl,"mlx5_sf_comp" , + sf_vec_available,"mlx5_sf_comp" ,MLX5_EQ_SHARE_IRQ_MIN_COMP ,MLX5_EQ_SHARE_IRQ_MAX_COMP );if (IS_ERR (table->sf_comp_pool)) {
@@ -715,6 +726,7 @@ int mlx5_irq_table_get_num_comp(struct mlx5_irq_table *table)int mlx5_irq_table_create (struct mlx5_core_dev *dev) {int num_eqs =mlx5_max_eq_cap_get (dev); +bool dynamic_vec;int total_vec;int pcif_vec;int req_vec;
@@ -724,21 +736,31 @@ int mlx5_irq_table_create(struct mlx5_core_dev *dev)if (mlx5_core_is_sf (dev))return 0 ; +/* PCI PF vectors usage is limited by online cpus, device EQs and +* PCI MSI-X capability. +*/ pcif_vec =MLX5_CAP_GEN (dev, num_ports) *num_online_cpus () +1 ; pcif_vec =min_t (int, pcif_vec, num_eqs); + pcif_vec =min_t (int, pcif_vec,pci_msix_vec_count (dev->pdev)); total_vec = pcif_vec;if (mlx5_sf_max_functions (dev)) total_vec +=MLX5_MAX_MSIX_PER_SF *mlx5_sf_max_functions (dev); total_vec =min_t (int, total_vec,pci_msix_vec_count (dev->pdev)); - pcif_vec =min_t (int, pcif_vec,pci_msix_vec_count (dev->pdev)); req_vec =pci_msix_can_alloc_dyn (dev->pdev) ?1 : total_vec; n =pci_alloc_irq_vectors (dev->pdev,1 , req_vec,PCI_IRQ_MSIX );if (n <0 )return n; - err =irq_pools_init (dev, total_vec - pcif_vec, pcif_vec); +/* Further limit vectors of the pools based on platform for non dynamic case */ + dynamic_vec =pci_msix_can_alloc_dyn (dev->pdev); +if (!dynamic_vec) { + pcif_vec =min_t (int, n, pcif_vec); + total_vec =min_t (int, n, total_vec); + } + + err =irq_pools_init (dev, total_vec - pcif_vec, pcif_vec, dynamic_vec);if (err)pci_free_irq_vectors (dev->pdev);
drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c +17 -8
@@ -108,7 +108,12 @@ static int intel_eth_plat_probe(struct platform_device *pdev)if (IS_ERR (dwmac->tx_clk))return PTR_ERR (dwmac->tx_clk); -clk_prepare_enable (dwmac->tx_clk); + ret =clk_prepare_enable (dwmac->tx_clk); +if (ret) { +dev_err (&pdev->dev, +"Failed to enable tx_clk\n" ); +return ret; + }/* Check and configure TX clock rate */ rate =clk_get_rate (dwmac->tx_clk);
@@ -119,7 +124,7 @@ static int intel_eth_plat_probe(struct platform_device *pdev)if (ret) {dev_err (&pdev->dev,"Failed to set tx_clk\n" ); -return ret; + goto err_tx_clk_disable; } } }
@@ -133,7 +138,7 @@ static int intel_eth_plat_probe(struct platform_device *pdev)if (ret) {dev_err (&pdev->dev,"Failed to set clk_ptp_ref\n" ); -return ret; + goto err_tx_clk_disable; } } }
@@ -149,12 +154,15 @@ static int intel_eth_plat_probe(struct platform_device *pdev) } ret =stmmac_dvr_probe (&pdev->dev, plat_dat, &stmmac_res); -if (ret) { -clk_disable_unprepare (dwmac->tx_clk); -return ret; - } +if (ret) + goto err_tx_clk_disable;return 0 ; + +err_tx_clk_disable: +if (dwmac->data->tx_clk_en) +clk_disable_unprepare (dwmac->tx_clk); +return ret; }static void intel_eth_plat_remove (struct platform_device *pdev)
@@ -162,7 +170,8 @@ static void intel_eth_plat_remove(struct platform_device *pdev)struct intel_dwmac *dwmac =get_stmmac_bsp_priv (&pdev->dev);stmmac_pltfr_remove (pdev); -clk_disable_unprepare (dwmac->tx_clk); +if (dwmac->data->tx_clk_en) +clk_disable_unprepare (dwmac->tx_clk); }static struct platform_driver intel_eth_plat_driver = {
drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c +2 -2
@@ -589,9 +589,9 @@ static int mediatek_dwmac_common_data(struct platform_device *pdev, plat->mac_interface = priv_plat->phy_mode;if (priv_plat->mac_wol) - plat->flags |=STMMAC_FLAG_USE_PHY_WOL ; -else plat->flags &= ~STMMAC_FLAG_USE_PHY_WOL ; +else + plat->flags |=STMMAC_FLAG_USE_PHY_WOL ; plat->riwt_off =1 ; plat->maxmtu =ETH_DATA_LEN ; plat->host_dma_width = priv_plat->variant->dma_bit_mask;
drivers/net/ethernet/ti/icssg/icssg_prueth.c +11 -2
@@ -15,6 +15,7 @@#include <linux/genalloc.h> #include <linux/if_vlan.h> #include <linux/interrupt.h> +#include <linux/io-64-nonatomic-hi-lo.h> #include <linux/kernel.h> #include <linux/mfd/syscon.h> #include <linux/module.h>
@@ -389,6 +390,8 @@ static int prueth_perout_enable(void *clockops_data,struct prueth_emac *emac = clockops_data;u32 reduction_factor =0 , offset =0 ;struct timespec64 ts; +u64 current_cycle; +u64 start_offset;u64 ns_period;if (!on)
@@ -427,8 +430,14 @@ static int prueth_perout_enable(void *clockops_data,writel (reduction_factor, emac->prueth->shram.va +TIMESYNC_FW_WC_SYNCOUT_REDUCTION_FACTOR_OFFSET ); -writel (0 , emac->prueth->shram.va + -TIMESYNC_FW_WC_SYNCOUT_START_TIME_CYCLECOUNT_OFFSET ); + current_cycle =icssg_read_time (emac->prueth->shram.va + +TIMESYNC_FW_WC_CYCLECOUNT_OFFSET ); + +/* Rounding of current_cycle count to next second */ + start_offset =roundup (current_cycle,MSEC_PER_SEC ); + +hi_lo_writeq (start_offset, emac->prueth->shram.va + +TIMESYNC_FW_WC_SYNCOUT_START_TIME_CYCLECOUNT_OFFSET );return 0 ; }
drivers/net/ethernet/ti/icssg/icssg_prueth.h +12 -0
@@ -316,6 +316,18 @@ static inline int prueth_emac_slice(struct prueth_emac *emac)extern const struct ethtool_ops icssg_ethtool_ops;extern const struct dev_pm_ops prueth_dev_pm_ops; +static inline u64 icssg_read_time (const void __iomem *addr) +{ +u32 low, high; + +do { + high =readl (addr +4 ); + low =readl (addr); + }while (high !=readl (addr +4 )); + +return low + ((u64 )high <<32 ); +} +/* Classifier helpers */ void icssg_class_set_mac_addr (struct regmap *miig_rt,int slice,u8 *mac);void icssg_class_set_host_mac_addr (struct regmap *miig_rt,const u8 *mac);
drivers/net/ethernet/vertexcom/mse102x.c +3 -1
@@ -437,13 +437,15 @@ static void mse102x_tx_work(struct work_struct *work) mse = &mses->mse102x;while ((txb =skb_dequeue (&mse->txq))) { + unsigned int len = max_t(unsigned int, txb->len, ETH_ZLEN); +mutex_lock (&mses->lock); ret =mse102x_tx_pkt_spi (mse, txb, work_timeout);mutex_unlock (&mses->lock);if (ret) { mse->ndev->stats.tx_dropped++; }else { - mse->ndev->stats.tx_bytes += txb->len; + mse->ndev->stats.tx_bytes += len; mse->ndev->stats.tx_packets++; }
drivers/net/phy/phylink.c +8 -6
@@ -78,7 +78,7 @@ struct phylink {unsigned int pcs_neg_mode;unsigned int pcs_state; -bool mac_link_dropped; +bool link_failed;bool using_mac_select_pcs;struct sfp_bus *sfp_bus;
@@ -1475,9 +1475,9 @@ static void phylink_resolve(struct work_struct *w) cur_link_state = pl->old_link_state;if (pl->phylink_disable_state) { - pl->mac_link_dropped = false; + pl->link_failed = false; link_state.link = false; - }else if (pl->mac_link_dropped) { + }else if (pl->link_failed) { link_state.link = false; retrigger = true; }else {
@@ -1572,7 +1572,7 @@ static void phylink_resolve(struct work_struct *w)phylink_link_up (pl, link_state); }if (!link_state.link && retrigger) { - pl->mac_link_dropped = false; + pl->link_failed = false;queue_work (system_power_efficient_wq, &pl->resolve); }mutex_unlock (&pl->state_mutex);
@@ -1793,6 +1793,8 @@ static void phylink_phy_change(struct phy_device *phydev, bool up) pl->phy_state.pause |=MLO_PAUSE_RX ; pl->phy_state.interface = phydev->interface; pl->phy_state.link = up; +if (!up) + pl->link_failed = true;mutex_unlock (&pl->state_mutex);phylink_run_resolve (pl);
@@ -2116,7 +2118,7 @@ EXPORT_SYMBOL_GPL(phylink_disconnect_phy);static void phylink_link_changed (struct phylink *pl,bool up,const char *what) {if (!up) - pl->mac_link_dropped = true; + pl->link_failed = true;phylink_run_resolve (pl);phylink_dbg (pl,"%s link %s\n" , what, up ?"up" :"down" ); }
@@ -2750,7 +2752,7 @@ int phylink_ethtool_set_pauseparam(struct phylink *pl,* link will cycle. */ if (manual_changed) { - pl->mac_link_dropped = true; + pl->link_failed = true;phylink_run_resolve (pl); }
drivers/perf/riscv_pmu_sbi.c +2 -2
@@ -1380,8 +1380,9 @@ static int pmu_sbi_device_probe(struct platform_device *pdev) goto out_unregister; cpu =get_cpu (); - ret =pmu_sbi_snapshot_setup (pmu, cpu); +put_cpu (); +if (ret) {/* Snapshot is an optional feature. Continue if not available */ pmu_sbi_snapshot_free (pmu);
@@ -1395,7 +1396,6 @@ static int pmu_sbi_device_probe(struct platform_device *pdev)*/ static_branch_enable (&sbi_pmu_snapshot_available); } -put_cpu (); }register_sysctl ("kernel" , sbi_pmu_sysctl_table);
drivers/pmdomain/arm/scmi_perf_domain.c +2 -1
@@ -125,7 +125,8 @@ static int scmi_perf_domain_probe(struct scmi_device *sdev) scmi_pd->ph = ph; scmi_pd->genpd.name = scmi_pd->info->name; scmi_pd->genpd.flags =GENPD_FLAG_ALWAYS_ON | -GENPD_FLAG_OPP_TABLE_FW ; +GENPD_FLAG_OPP_TABLE_FW | +GENPD_FLAG_DEV_NAME_FW ; scmi_pd->genpd.set_performance_state = scmi_pd_set_perf_state; scmi_pd->genpd.attach_dev = scmi_pd_attach_dev; scmi_pd->genpd.detach_dev = scmi_pd_detach_dev;
drivers/pmdomain/core.c +34 -15
162 lines not on this page · raw message
drivers/pmdomain/imx/imx93-blk-ctrl.c +3 -1
@@ -313,7 +313,9 @@ static void imx93_blk_ctrl_remove(struct platform_device *pdev)of_genpd_del_provider (pdev->dev.of_node); -for (i =0 ; bc->onecell_data.num_domains; i++) { +pm_runtime_disable (&pdev->dev); + +for (i =0 ; i < bc->onecell_data.num_domains; i++) {struct imx93_blk_ctrl_domain *domain = &bc->domains[i];pm_genpd_remove (&domain->genpd);
drivers/vdpa/mlx5/core/mr.c +5 -3
@@ -232,7 +232,7 @@ static int map_direct_mr(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_direct_mrstruct page *pg;unsigned int nsg;int sglen; -u64 pa; +u64 pa, offset;u64 paend;struct scatterlist *sg;struct device *dma = mvdev->vdev.dma_dev;
@@ -255,8 +255,10 @@ static int map_direct_mr(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_direct_mr sg = mr->sg_head.sgl;for (map =vhost_iotlb_itree_first (iotlb, mr->start, mr->end -1 ); map; map =vhost_iotlb_itree_next (map, mr->start, mr->end -1 )) { - paend = map->addr +maplen (map, mr); -for (pa = map->addr; pa < paend; pa += sglen) { + offset = mr->start > map->start ? mr->start - map->start :0 ; + pa = map->addr + offset; + paend = map->addr + offset +maplen (map, mr); +for (; pa < paend; pa += sglen) { pg =pfn_to_page (__phys_to_pfn (pa));if (!sg) { mlx5_vdpa_warn(mvdev, "sg null. start 0x%llx, end 0x%llx\n",
drivers/vdpa/solidrun/snet_main.c +10 -4
@@ -555,7 +555,7 @@ static const struct vdpa_config_ops snet_config_ops = {static int psnet_open_pf_bar (struct pci_dev *pdev,struct psnet *psnet) { -char name[50 ]; +char *name;int ret, i, mask =0 ;/* We don't know which BAR will be used to communicate.. * We will map every bar with len > 0.
@@ -573,7 +573,10 @@ static int psnet_open_pf_bar(struct pci_dev *pdev, struct psnet *psnet)return -ENODEV ; } -snprintf (name,sizeof (name),"psnet[%s]-bars" ,pci_name (pdev)); + name =devm_kasprintf (&pdev->dev,GFP_KERNEL ,"psnet[%s]-bars" ,pci_name (pdev)); +if (!name) +return -ENOMEM ; + ret =pcim_iomap_regions (pdev, mask, name);if (ret) {SNET_ERR (pdev,"Failed to request and map PCI BARs\n" );
@@ -590,10 +593,13 @@ static int psnet_open_pf_bar(struct pci_dev *pdev, struct psnet *psnet)static int snet_open_vf_bar (struct pci_dev *pdev,struct snet *snet) { -char name[50 ]; +char *name;int ret; -snprintf (name,sizeof (name),"snet[%s]-bar" ,pci_name (pdev)); + name =devm_kasprintf (&pdev->dev,GFP_KERNEL ,"snet[%s]-bars" ,pci_name (pdev)); +if (!name) +return -ENOMEM ; +/* Request and map BAR */ ret =pcim_iomap_regions (pdev,BIT (snet->psnet->cfg.vf_bar), name);if (ret) {
drivers/vdpa/virtio_pci/vp_vdpa.c +7 -3
@@ -612,7 +612,11 @@ static int vp_vdpa_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto mdev_err; } - mdev_id =kzalloc (sizeof (struct virtio_device_id ),GFP_KERNEL ); +/* +* id_table should be a null terminated array, so allocate one additional +* entry here, see vdpa_mgmtdev_get_classes(). +*/ + mdev_id =kcalloc (2 ,sizeof (struct virtio_device_id ),GFP_KERNEL );if (!mdev_id) { err = -ENOMEM ; goto mdev_id_err;
@@ -632,8 +636,8 @@ static int vp_vdpa_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto probe_err; } - mdev_id->device = mdev->id.device; - mdev_id->vendor = mdev->id.vendor; + mdev_id[0 ].device = mdev->id.device; + mdev_id[0 ].vendor = mdev->id.vendor; mgtdev->id_table = mdev_id; mgtdev->max_supported_vqs =vp_modern_get_num_queues (mdev); mgtdev->supported_features =vp_modern_get_features (mdev);
fs/btrfs/delayed-ref.c +1 -1
@@ -298,7 +298,7 @@ static int comp_refs(struct btrfs_delayed_ref_node *ref1,if (ref1->ref_root < ref2->ref_root)return -1 ;if (ref1->ref_root > ref2->ref_root) -return -1 ; +return 1 ;if (ref1->type ==BTRFS_EXTENT_DATA_REF_KEY ) ret =comp_data_refs (ref1, ref2); }
fs/nilfs2/btnode.c +0 -2
@@ -68,7 +68,6 @@ nilfs_btnode_create_block(struct address_space *btnc, __u64 blocknr) goto failed; }memset (bh->b_data,0 ,i_blocksize (inode)); - bh->b_bdev = inode->i_sb->s_bdev; bh->b_blocknr = blocknr;set_buffer_mapped (bh);set_buffer_uptodate (bh);
@@ -133,7 +132,6 @@ int nilfs_btnode_submit_block(struct address_space *btnc, __u64 blocknr, goto found; }set_buffer_mapped (bh); - bh->b_bdev = inode->i_sb->s_bdev; bh->b_blocknr = pblocknr;/* set block address for read */ bh->b_end_io = end_buffer_read_sync;get_bh (bh);
fs/nilfs2/gcinode.c +1 -3
@@ -83,10 +83,8 @@ int nilfs_gccache_submit_read_data(struct inode *inode, sector_t blkoff, goto out; } -if (!buffer_mapped (bh)) { - bh->b_bdev = inode->i_sb->s_bdev; +if (!buffer_mapped (bh))set_buffer_mapped (bh); - } bh->b_blocknr = pbn; bh->b_end_io = end_buffer_read_sync;get_bh (bh);
fs/nilfs2/mdt.c +0 -1
@@ -89,7 +89,6 @@ static int nilfs_mdt_create_block(struct inode *inode, unsigned long block,if (buffer_uptodate (bh)) goto failed_bh; - bh->b_bdev = sb->s_bdev; err =nilfs_mdt_insert_new_block (inode, block, bh, init_block);if (likely (!err)) {get_bh (bh);
fs/nilfs2/page.c +1 -1
@@ -39,7 +39,6 @@ static struct buffer_head *__nilfs_get_folio_block(struct folio *folio, first_block = (unsigned long )index << (PAGE_SHIFT - blkbits); bh =get_nth_bh (bh, block - first_block); -touch_buffer (bh);wait_on_buffer (bh);return bh; }
@@ -64,6 +63,7 @@ struct buffer_head *nilfs_grab_buffer(struct inode *inode,folio_put (folio);return NULL ; } + bh->b_bdev = inode->i_sb->s_bdev;return bh; }
fs/ocfs2/resize.c +2 -0
@@ -574,6 +574,8 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input)ocfs2_commit_trans (osb, handle); out_free_group_bh: +if (ret <0 ) +ocfs2_remove_from_cache (INODE_CACHE (inode), group_bh);brelse (group_bh); out_unlock:
fs/ocfs2/super.c +9 -4
@@ -2321,6 +2321,7 @@ static int ocfs2_verify_volume(struct ocfs2_dinode *di, struct ocfs2_blockcheck_stats *stats) {int status = -EAGAIN ; +u32 blksz_bits;if (memcmp (di->i_signature,OCFS2_SUPER_BLOCK_SIGNATURE ,strlen (OCFS2_SUPER_BLOCK_SIGNATURE )) ==0 ) {
@@ -2335,11 +2336,15 @@ static int ocfs2_verify_volume(struct ocfs2_dinode *di, goto out; } status = -EINVAL ; -if ((1 <<le32_to_cpu (di->id2.i_super.s_blocksize_bits)) != blksz) { +/* Acceptable block sizes are 512 bytes, 1K, 2K and 4K. */ + blksz_bits =le32_to_cpu (di->id2.i_super.s_blocksize_bits); +if (blksz_bits <9 || blksz_bits >12 ) {mlog (ML_ERROR ,"found superblock with incorrect block " -"size: found %u, should be %u\n" , -1 <<le32_to_cpu (di->id2.i_super.s_blocksize_bits), - blksz); +"size bits: found %u, should be 9, 10, 11, or 12\n" , + blksz_bits); + }else if ((1 <<le32_to_cpu (blksz_bits)) != blksz) { +mlog (ML_ERROR ,"found superblock with incorrect block " +"size: found %u, should be %u\n" ,1 << blksz_bits, blksz); }else if (le16_to_cpu (di->id2.i_super.s_major_rev_level) !=OCFS2_MAJOR_REV_LEVEL || le16_to_cpu(di->id2.i_super.s_minor_rev_level) !=
fs/proc/task_mmu.c +3 -1
@@ -2672,8 +2672,10 @@ static int pagemap_scan_get_args(struct pm_scan_arg *arg,return -EFAULT ;if (!arg->vec && arg->vec_len)return -EINVAL ; +if (UINT_MAX ==SIZE_MAX && arg->vec_len >SIZE_MAX ) +return -EINVAL ;if (arg->vec && !access_ok ((void __user *)(long )arg->vec, - arg->vec_len *sizeof (struct page_region ))) +size_mul (arg->vec_len,sizeof (struct page_region ))))return -EFAULT ;/* Fixup default values */
include/drm/intel/i915_pciids.h +15 -4
@@ -771,13 +771,24 @@ INTEL_ATS_M150_IDS(MACRO__, ## __VA_ARGS__), \ INTEL_ATS_M75_IDS(MACRO__, ## __VA_ARGS__) -/* MTL */ -#define INTEL_ARL_IDS (MACRO__ , ...) \ - MACRO__(0x7D41, ## __VA_ARGS__), \ +/* ARL */ +#define INTEL_ARL_H_IDS (MACRO__ , ...) \ MACRO__(0x7D51, ## __VA_ARGS__), \ - MACRO__(0x7D67, ## __VA_ARGS__), \ MACRO__(0x7DD1, ## __VA_ARGS__) +#define INTEL_ARL_U_IDS (MACRO__ , ...) \ + MACRO__(0x7D41, ## __VA_ARGS__) \ + +#define INTEL_ARL_S_IDS (MACRO__ , ...) \ + MACRO__(0x7D67, ## __VA_ARGS__), \ + MACRO__(0xB640, ## __VA_ARGS__) + +#define INTEL_ARL_IDS (MACRO__ , ...) \ + INTEL_ARL_H_IDS(MACRO__, ## __VA_ARGS__), \ + INTEL_ARL_U_IDS(MACRO__, ## __VA_ARGS__), \ + INTEL_ARL_S_IDS(MACRO__, ## __VA_ARGS__) + +/* MTL */ #define INTEL_MTL_IDS (MACRO__ , ...) \ INTEL_ARL_IDS(MACRO__, ## __VA_ARGS__), \ MACRO__(0x7D40, ## __VA_ARGS__), \
include/linux/mman.h +4 -3
@@ -2,6 +2,7 @@#ifndef _LINUX_MMAN_H#define _LINUX_MMAN_H +#include <linux/fs.h> #include <linux/mm.h> #include <linux/percpu_counter.h>
@@ -94,7 +95,7 @@ static inline void vm_unacct_memory(long pages)#endif #ifndef arch_calc_vm_flag_bits -#define arch_calc_vm_flag_bits (flags) 0 +#define arch_calc_vm_flag_bits (file, flags) 0#endif #ifndef arch_validate_prot
@@ -151,13 +152,13 @@ calc_vm_prot_bits(unsigned long prot, unsigned long pkey)* Combine the mmap "flags" argument into "vm_flags" used internally. */ static inline unsigned long -calc_vm_flag_bits (unsigned long flags) +calc_vm_flag_bits (struct file *file,unsigned long flags) {return _calc_vm_trans (flags,MAP_GROWSDOWN ,VM_GROWSDOWN ) |_calc_vm_trans (flags,MAP_LOCKED ,VM_LOCKED ) |_calc_vm_trans (flags,MAP_SYNC ,VM_SYNC ) |_calc_vm_trans (flags,MAP_STACK ,VM_NOHUGEPAGE ) | -arch_calc_vm_flag_bits (flags); +arch_calc_vm_flag_bits (file, flags); }unsigned long vm_commit_limit (void );
include/linux/pm_domain.h +6 -0
@@ -92,6 +92,10 @@ struct dev_pm_domain_list {* GENPD_FLAG_OPP_TABLE_FW: The genpd provider supports performance states, * but its corresponding OPP tables are not * described in DT, but are given directly by FW. +* +* GENPD_FLAG_DEV_NAME_FW: Instructs genpd to generate an unique device name +* using ida. It is used by genpd providers which +* get their genpd-names directly from FW. */ #define GENPD_FLAG_PM_CLK (1U << 0)#define GENPD_FLAG_IRQ_SAFE (1U << 1)
@@ -101,6 +105,7 @@ struct dev_pm_domain_list {#define GENPD_FLAG_RPM_ALWAYS_ON (1U << 5)#define GENPD_FLAG_MIN_RESIDENCY (1U << 6)#define GENPD_FLAG_OPP_TABLE_FW (1U << 7) +#define GENPD_FLAG_DEV_NAME_FW (1U << 8)enum gpd_status {GENPD_STATE_ON =0 ,/* PM domain is on */
@@ -163,6 +168,7 @@ struct generic_pm_domain {atomic_t sd_count;/* Number of subdomains with power "on" */ enum gpd_status status;/* Current state of the domain */ unsigned int device_count;/* Number of devices */ +unsigned int device_id;/* unique device id */ unsigned int suspended_count;/* System suspend device counter */ unsigned int prepared_count;/* Suspend counter of prepared devices */ unsigned int performance_state;/* Aggregated max performance state */
include/linux/sched/task_stack.h +2 -0
@@ -9,6 +9,7 @@#include <linux/sched.h>
Lines of this file are not shown. View the raw message.
net/vmw_vsock/virtio_transport_common.c +9 -0
Lines of this file are not shown. View the raw message.
samples/pktgen/pktgen_sample01_simple.sh +1 -1
Lines of this file are not shown. View the raw message.
security/integrity/ima/ima_template_lib.c +10 -4
Lines of this file are not shown. View the raw message.
tools/testing/selftests/mm/hugetlb_dio.c +7 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/tc-testing/tc-tests/filters/u32.json +24 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.