Linux 6.1.135
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.135 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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
------------
MAINTAINERS | 1 Makefile | 5 arch/arm64/boot/dts/mediatek/mt8173.dtsi | 6 arch/arm64/include/asm/cputype.h | 4 arch/arm64/include/asm/fpsimd.h | 4 arch/arm64/include/asm/kvm_host.h | 19 arch/arm64/include/asm/kvm_hyp.h | 1 arch/arm64/include/asm/processor.h | 7 arch/arm64/include/asm/spectre.h | 1 arch/arm64/kernel/fpsimd.c | 69 ++- arch/arm64/kernel/process.c | 2 arch/arm64/kernel/proton-pack.c | 218 +++++----- arch/arm64/kernel/ptrace.c | 3 arch/arm64/kernel/signal.c | 7 arch/arm64/kvm/arm.c | 7 arch/arm64/kvm/fpsimd.c | 92 +--- arch/arm64/kvm/hyp/entry.S | 5 arch/arm64/kvm/hyp/include/hyp/switch.h | 106 +++- arch/arm64/kvm/hyp/nvhe/hyp-main.c | 8 arch/arm64/kvm/hyp/nvhe/pkvm.c | 17 arch/arm64/kvm/hyp/nvhe/switch.c | 91 ++-- arch/arm64/kvm/hyp/vhe/switch.c | 12 arch/arm64/kvm/reset.c | 3 arch/arm64/mm/mmu.c | 3 arch/loongarch/kernel/acpi.c | 12 arch/loongarch/net/bpf_jit.c | 2 arch/loongarch/net/bpf_jit.h | 5 arch/mips/dec/prom/init.c | 2 arch/mips/include/asm/ds1287.h | 2 arch/mips/kernel/cevt-ds1287.c | 1 arch/powerpc/kernel/rtas.c | 4 arch/riscv/include/asm/kgdb.h | 9 arch/riscv/include/asm/syscall.h | 7 arch/riscv/kernel/kgdb.c | 6 arch/riscv/kernel/setup.c | 36 + arch/sparc/mm/tlb.c | 5 arch/x86/events/intel/ds.c | 8 arch/x86/events/intel/uncore_snbep.c | 107 ---- arch/x86/kernel/cpu/amd.c | 2 arch/x86/kernel/cpu/intel.c | 20 arch/x86/kernel/e820.c | 17 arch/x86/kvm/x86.c | 4 arch/x86/platform/pvh/head.S | 7 block/blk-cgroup.c | 24 - block/blk-cgroup.h | 1 block/blk-iocost.c | 7 certs/Makefile | 2 certs/extract-cert.c | 138 +++--- drivers/acpi/platform_profile.c | 20 drivers/ata/ahci.c | 2 drivers/ata/libata-eh.c | 11 drivers/ata/pata_pxa.c | 6 drivers/ata/sata_sx4.c | 13 drivers/base/devres.c | 7 drivers/block/loop.c | 7 drivers/bluetooth/btqca.c | 13 drivers/bluetooth/btrtl.c | 2 drivers/bluetooth/hci_ldisc.c | 19 drivers/bluetooth/hci_uart.h | 1 drivers/bus/mhi/host/main.c | 16 drivers/char/tpm/tpm_tis_core.c | 20 drivers/char/tpm/tpm_tis_core.h | 1 drivers/clk/qcom/gdsc.c | 61 +- drivers/clocksource/timer-stm32-lp.c | 4 drivers/cpufreq/cpufreq.c | 8 drivers/crypto/caam/qi.c | 6 drivers/crypto/ccp/sp-pci.c | 15 drivers/gpio/gpio-tegra186.c | 27 - drivers/gpio/gpio-zynq.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 10 drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 44 +- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 10 drivers/gpu/drm/amd/amdkfd/kfd_process.c | 17 drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 22 - drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.c | 2 drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 5 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_thermal.c | 4 drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_thermal.c | 4 drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_thermal.c | 2 drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c | 3 drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 2 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 2 drivers/gpu/drm/drm_atomic_helper.c | 2 drivers/gpu/drm/drm_panel.c | 5 drivers/gpu/drm/drm_panel_orientation_quirks.c | 46 ++ drivers/gpu/drm/i915/gvt/opregion.c | 7 drivers/gpu/drm/mediatek/mtk_dpi.c | 23 - drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 72 +-- drivers/gpu/drm/nouveau/nouveau_bo.c | 3 drivers/gpu/drm/nouveau/nouveau_gem.c | 3 drivers/gpu/drm/sti/Makefile | 2 drivers/gpu/drm/tiny/repaper.c | 4 drivers/hid/usbhid/hid-pidff.c | 60 +- drivers/hsi/clients/ssi_protocol.c | 1 drivers/i2c/busses/i2c-cros-ec-tunnel.c | 3 drivers/i3c/master.c | 3 drivers/i3c/master/svc-i3c-master.c | 2 drivers/infiniband/core/cma.c | 4 drivers/infiniband/core/umem_odp.c | 6 drivers/infiniband/hw/hns/hns_roce_main.c | 2 drivers/infiniband/hw/usnic/usnic_ib_main.c | 14 drivers/iommu/mtk_iommu.c | 26 - drivers/md/dm-ebs-target.c | 7 drivers/md/dm-integrity.c | 3 drivers/md/dm-verity-target.c | 8 drivers/md/md-bitmap.c | 5 drivers/md/md.c | 50 +- drivers/md/raid10.c | 1 drivers/media/common/siano/smsdvb-main.c | 2 drivers/media/i2c/adv748x/adv748x.h | 2 drivers/media/i2c/ccs/ccs-core.c | 6 drivers/media/i2c/ov7251.c | 4 drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c | 3 drivers/media/platform/qcom/venus/hfi_parser.c | 100 +++- drivers/media/platform/qcom/venus/hfi_venus.c | 18 drivers/media/platform/st/stm32/dma2d/dma2d.c | 3 drivers/media/rc/streamzap.c | 68 +-- drivers/media/test-drivers/vim2m.c | 6 drivers/media/v4l2-core/v4l2-dv-timings.c | 4 drivers/mfd/ene-kb3930.c | 2 drivers/misc/pci_endpoint_test.c | 6 drivers/mmc/host/dw_mmc.c | 94 ++++ drivers/mmc/host/dw_mmc.h | 27 + drivers/mtd/inftlcore.c | 9 drivers/mtd/mtdpstore.c | 12 drivers/mtd/nand/raw/brcmnand/brcmnand.c | 2 drivers/mtd/nand/raw/r852.c | 3 drivers/net/dsa/b53/b53_common.c | 10 drivers/net/dsa/mv88e6xxx/chip.c | 30 + drivers/net/dsa/mv88e6xxx/devlink.c | 3 drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c | 1 drivers/net/ethernet/google/gve/gve_ethtool.c | 4 drivers/net/ethernet/intel/igc/igc_defines.h | 1 drivers/net/ethernet/intel/igc/igc_main.c | 1 drivers/net/ethernet/intel/igc/igc_ptp.c | 93 ++-- drivers/net/ppp/ppp_synctty.c | 5 drivers/net/wireless/atmel/at76c50x-usb.c | 2 drivers/net/wireless/mediatek/mt76/eeprom.c | 4 drivers/net/wireless/mediatek/mt76/mt76x2/usb.c | 1 drivers/net/wireless/ti/wl1251/tx.c | 4 drivers/ntb/ntb_transport.c | 2 drivers/nvme/target/fc.c | 14 drivers/nvme/target/fcloop.c | 2 drivers/of/irq.c | 80 ++- drivers/pci/controller/pcie-brcmstb.c | 13 drivers/pci/controller/vmd.c | 12 drivers/pci/pci.c | 4 drivers/pci/probe.c | 5 drivers/perf/arm_pmu.c | 8 drivers/pinctrl/qcom/pinctrl-msm.c | 12 drivers/platform/x86/asus-laptop.c | 9 drivers/ptp/ptp_ocp.c | 1 drivers/pwm/pwm-fsl-ftm.c | 6 drivers/pwm/pwm-mediatek.c | 8 drivers/pwm/pwm-rcar.c | 24 - drivers/scsi/hisi_sas/hisi_sas_v2_hw.c | 9 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 14 drivers/scsi/megaraid/megaraid_sas_base.c | 9 drivers/scsi/megaraid/megaraid_sas_fusion.c | 5 drivers/scsi/scsi_transport_iscsi.c | 7 drivers/scsi/st.c | 2 drivers/soc/samsung/exynos-chipid.c | 2 drivers/spi/spi-cadence-quadspi.c | 6 drivers/thermal/rockchip_thermal.c | 1 drivers/ufs/host/ufs-exynos.c | 6 drivers/vdpa/mlx5/core/mr.c | 7 drivers/video/fbdev/omap2/omapfb/dss/dispc.c | 6 drivers/xen/swiotlb-xen.c | 2 drivers/xen/xenfs/xensyms.c | 4 fs/Kconfig | 1 fs/btrfs/disk-io.c | 12 fs/btrfs/inode.c | 6 fs/btrfs/super.c | 3 fs/btrfs/zoned.c | 6 fs/ext4/inode.c | 68 ++- fs/ext4/namei.c | 2 fs/ext4/super.c | 17 fs/ext4/xattr.c | 11 fs/f2fs/inode.c | 4 fs/f2fs/node.c | 9 fs/file.c | 26 - fs/fuse/virtio_fs.c | 3 fs/hfs/bnode.c | 6 fs/hfsplus/bnode.c | 6 fs/isofs/export.c | 2 fs/jbd2/journal.c | 1 fs/jfs/jfs_dmap.c | 10 fs/jfs/jfs_imap.c | 4 fs/namespace.c | 3 fs/nfs/Kconfig | 2 fs/nfs/internal.h | 22 - fs/nfs/nfs4session.h | 4 fs/nfsd/Kconfig | 1 fs/nfsd/nfs4state.c | 2 fs/nfsd/nfsfh.h | 7 fs/smb/client/cifs_dfs_ref.c | 34 + fs/smb/client/cifsproto.h | 23 + fs/smb/client/connect.c | 2 fs/smb/client/dir.c | 21 fs/smb/client/file.c | 28 + fs/smb/client/fs_context.c | 5 fs/smb/client/smb2misc.c | 9 fs/smb/server/oplock.c | 2 fs/smb/server/smb2pdu.c | 6 fs/smb/server/transport_ipc.c | 7 fs/smb/server/vfs.c | 3 include/linux/backing-dev.h | 1 include/linux/bpf.h | 1 include/linux/nfs.h | 13 include/linux/rtnetlink.h | 22 + include/linux/tpm.h | 1 include/net/sctp/structs.h | 3 include/uapi/linux/kfd_ioctl.h | 2 include/uapi/linux/landlock.h | 2 include/xen/interface/xen-mca.h | 2 io_uring/kbuf.c | 2 io_uring/net.c | 2 kernel/bpf/core.c | 19 kernel/bpf/syscall.c | 17 kernel/locking/lockdep.c | 3 kernel/sched/cpufreq_schedutil.c | 18 kernel/trace/ftrace.c | 1 kernel/trace/trace_events.c | 4 kernel/trace/trace_events_filter.c | 4 lib/sg_split.c | 2 lib/string.c | 13 mm/filemap.c | 1 mm/gup.c | 6 mm/memory-failure.c | 11 mm/memory.c | 4 mm/rmap.c | 2 mm/vmscan.c | 2 net/8021q/vlan_dev.c | 31 - net/bluetooth/hci_event.c | 5 net/bluetooth/l2cap_core.c | 3 net/bridge/br_vlan.c | 4 net/core/filter.c | 80 ++- net/core/page_pool.c | 8 net/dsa/tag_8021q.c | 2 net/ethtool/netlink.c | 8 net/ipv6/route.c | 8 net/mac80211/iface.c | 3 net/mac80211/mesh_hwmp.c | 14 net/mctp/af_mctp.c | 3 net/mptcp/sockopt.c | 28 + net/mptcp/subflow.c | 19 net/netfilter/nft_set_pipapo_avx2.c | 3 net/openvswitch/flow_netlink.c | 3 net/sched/cls_api.c | 74 ++- net/sched/sch_codel.c | 5 net/sched/sch_fq_codel.c | 6 net/sched/sch_sfq.c | 66 ++- net/sctp/socket.c | 22 - net/sctp/transport.c | 2 net/tipc/link.c | 1 net/tls/tls_main.c | 6 scripts/sign-file.c | 132 +++--- scripts/ssl-common.h | 32 + security/landlock/errata.h | 87 +++ security/landlock/setup.c | 30 + security/landlock/setup.h | 3 security/landlock/syscalls.c | 22 - sound/pci/hda/hda_intel.c | 44 +- sound/pci/hda/patch_realtek.c | 1 sound/soc/amd/yc/acp6x-mach.c | 7 sound/soc/codecs/lpass-wsa-macro.c | 117 +++-- sound/soc/fsl/fsl_audmix.c | 16 sound/soc/qcom/qdsp6/q6apm-dai.c | 9 sound/soc/qcom/qdsp6/q6asm-dai.c | 19 sound/usb/midi.c | 80 +++ tools/power/cpupower/bench/parse.c | 4 tools/testing/ktest/ktest.pl | 8 tools/testing/radix-tree/linux.c | 4 tools/testing/selftests/futex/functional/futex_wait_wouldblock.c | 2 tools/testing/selftests/landlock/base_test.c | 46 ++ tools/testing/selftests/net/mptcp/mptcp_connect.c | 7 279 files changed, 2897 insertions(+), 1409 deletions(-)
Abdun Nihaal (3):
wifi: at76c50x: fix use after free access in at76_disconnect
wifi: wl1251: fix memory leak in wl1251_tx_work
cxgb4: fix memory leak in cxgb4_init_ethtool_filters() error pathAbhinav Kumar (1):
drm: allow encoder mode_set even when connectors change for crtc
Akhil P Oommen (1):
drm/msm/a6xx: Fix stale rpmh votes from GPU
Alex Williamson (2):
Revert "PCI: Avoid reset when disabled via sysfs"
mm: Fix is_zero_page() usage in try_grab_page()
Alexandra Diupina (1):
cifs: avoid NULL pointer dereference in dbg call
Alexandre Torgue (1):
clocksource/drivers/stm32-lptimer: Use wakeup capable instead of init wakeup
Alexey Klimov (1):
ASoC: qdsp6: q6asm-dai: fix q6asm_dai_compr_set_params error path
Andreas Gruenbacher (1):
writeback: fix false warning in inode_to_wb()
Andrew Wyatt (5):
drm: panel-orientation-quirks: Add support for AYANEO 2S
drm: panel-orientation-quirks: Add quirks for AYA NEO Flip DS and KB
drm: panel-orientation-quirks: Add quirk for AYA NEO Slide
drm: panel-orientation-quirks: Add new quirk for GPD Win 2
drm: panel-orientation-quirks: Add quirk for OneXPlayer Mini (Intel)
Andrii Nakryiko (1):
bpf: avoid holding freeze_mutex during mmap operation
AngeloGioacchino Del Regno (2):
drm/mediatek: mtk_dpi: Move the input_2p_en bit to platform data drm/mediatek: mtk_dpi: Explicitly manage TVD clock in power on/off
Ard Biesheuvel (1):
x86/pvh: Call C code via the kernel virtual mapping
Arnaud Lecomte (1):
net: ppp: Add bound checking for skb data on ppp_sync_txmung
Arnd Bergmann (1):
media: mediatek: vcodec: mark vdec_vp9_slice_map_counts_eob_coef noinline
Arseniy Krasnov (2):
Bluetooth: hci_uart: fix race during initialization
Bluetooth: hci_uart: Fix another race during initialization
Artem Sadovnikov (1):
ext4: fix off-by-one error in do_split
Ayush Jain (1):
ktest: Fix Test Failures Due to Missing LOG_FILE Directories
Baoquan He (1):
mm/gup: fix wrongly calculated returned value in fault_in_safe_writeable()
Bhupesh (1):
ext4: ignore xattrs past end
Björn Töpel (1):
riscv: Properly export reserved regions in /proc/iomem
Boqun Feng (1):
locking/lockdep: Decrease nr_unused_locks if lock unused in zap_class()
Boris Burkov (1):
btrfs: fix qgroup reserve leaks in cow_file_range
Bryan O'Donoghue (2):
clk: qcom: gdsc: Release pm subdomains in reverse add order
clk: qcom: gdsc: Capture pm_genpd_add_subdomain result code
Chandrakanth Patil (1):
scsi: megaraid_sas: Block zero-length ATA VPD inquiry
Chao Yu (2):
f2fs: don't retry IO for corrupted data scenario
f2fs: fix to avoid out-of-bounds access in f2fs_truncate_inode_blocks()
Chen-Yu Tsai (1):
arm64: dts: mediatek: mt8173: Fix disp-pwm compatible string
ChenXiaoSong (1):
smb/server: fix potential null-ptr-deref of lease_ctx_info in smb2_open()
Chengchang Tang (1):
RDMA/hns: Fix wrong maximum DMA segment size
Chenyuan Yang (2):
soc: samsung: exynos-chipid: Add NULL pointer check in exynos_chipid_probe()
mfd: ene-kb3930: Fix a potential NULL pointer dereference
Chris Bainbridge (1):
drm/nouveau: prime: fix ttm_bo_delayed_delete oops
Christian König (1):
drm/amdgpu: grab an additional reference on the gang fence v2
Christopher S M Hall (4):
igc: fix PTM cycle trigger logic
igc: move ktime snapshot into PTM retry loop
igc: handle the IGC_PTP_ENABLED flag correctly
igc: cleanup PTP module if probe fails
Chunjie Zhu (1):
smb3 client: fix open hardlink on deferred close file error
Cong Wang (1):
codel: remove sch->q.qlen check before qdisc_tree_reduce_backlog()
Dan Carpenter (1):
Bluetooth: btrtl: Prevent potential NULL dereference
Daniel Kral (1):
ahci: add PCI ID for Marvell 88SE9215 SATA Controller
Daniel Wagner (1):
nvmet-fcloop: swap list_add_tail arguments
Dapeng Mi (1):
perf/x86/intel: Allow to update user space GPRs from PEBS records
David Hildenbrand (1):
mm/rmap: reject hugetlb folios in folio_make_device_exclusive()
David Yat Sin (1):
drm/amdkfd: clamp queue size to minimum
Denis Arefev (8):
asus-laptop: Fix an uninitialized variable
ksmbd: Prevent integer overflow in calculation of deadtime drm/amd/pm: Prevent division by zero drm/amd/pm/powerplay: Prevent division by zero drm/amd/pm/smu11: Prevent division by zero drm/amd/pm/powerplay/hwmgr/smu7_thermal: Prevent division by zero drm/amd/pm/swsmu/smu13/smu_v13_0: Prevent division by zero drm/amd/pm/powerplay/hwmgr/vega20_thermal: Prevent division by zero
Dmitry Baryshkov (1):
Bluetooth: qca: simplify WCN399x NVM loading
Douglas Anderson (6):
arm64: cputype: Add QCOM_CPU_PART_KRYO_3XX_GOLD
arm64: cputype: Add MIDR_CORTEX_A76AE
arm64: errata: Add QCOM_KRYO_4XX_GOLD to the spectre_bhb_k24_list
arm64: errata: Assume that unknown CPUs _are_ vulnerable to Spectre BHB
arm64: errata: Add KRYO 2XX/3XX/4XX silver cores to Spectre BHB safe list
arm64: errata: Add newer ARM cores to the spectre_bhb_loop_affected() lists
Edward Adam Davis (3):
jfs: Prevent copying of nlink with value 0 from disk inode
jfs: add sanity check for agwidth in dbMount
isofs: Prevent the use of too small fid
Edward Liaw (1):
selftests/futex: futex_waitv wouldblock test should fail
Eric Biggers (1):
nfs: add missing selections of CONFIG_CRC32
Fedor Pchelkin (1):
ntb: use 64-bit arithmetic for the MSI doorbell mask
Filipe Manana (1):
btrfs: fix non-empty delayed iputs list on unmount due to compressed write workers
Florian Westphal (1):
nft_set_pipapo: fix incorrect avx2 match of 5th field octet
Frédéric Danis (1):
Bluetooth: l2cap: Check encryption key size on incoming connection
Fuad Tabba (1):
KVM: arm64: Calculate cptr_el2 traps on activating traps
Gabriele Paoloni (1):
tracing: fix return value in __ftrace_event_enable_disable for TRACE_REG_UNREGISTER
Gang Yan (1):
mptcp: fix NULL pointer in can_accept_new_subflow
Gavrilov Ilia (1):
wifi: mac80211: fix integer overflow in hwmp_route_info_get()
Geliang Tang (1):
selftests: mptcp: close fd_in before returning in main_loop
Greg Kroah-Hartman (3):
Revert "Xen/swiotlb: mark xen_swiotlb_fixup() __init" Revert "LoongArch: BPF: Fix off-by-one error in build_prologue()" Linux 6.1.135
Guixin Liu (1):
gpio: tegra186: fix resource handling in ACPI probe path
Haisu Wang (1):
btrfs: fix the length of reserved qgroup to free
Haoxiang Li (1):
wifi: mt76: Add check for devm_kstrdup()
Henry Martin (1):
ata: pata_pxa: Fix potential NULL pointer dereference in pxa_ata_probe()
Herbert Xu (1):
crypto: caam/qi - Fix drv_ctx refcount bug
Hersen Wu (1):
drm/amd/display: Stop amdgpu_dm initialize when link nums greater than max_links
Icenowy Zheng (1):
wifi: mt76: mt76x2u: add TP-Link TL-WDN6200 ID to device table
Ido Schimmel (1):
ipv6: Align behavior across nexthops during path selection
Ilya Maximets (1):
net: openvswitch: fix nested key length validation in the set() action
Jakub Kicinski (1):
net: tls: explicitly disallow disconnect
Jamal Hadi Salim (1):
rtnl: add helper to check if rtnl group has listeners
Jan Beulich (1):
xenfs/xensyms: respect hypervisor's "next" indication
Jan Kara (1):
jbd2: remove wrong sb->s_sequence check
Jan Stancek (3):
sign-file,extract-cert: move common SSL helper functions to a header sign-file,extract-cert: avoid using deprecated ERR_get_error_line() sign-file,extract-cert: use pkcs11 provider for OPENSSL MAJOR >= 3
Jani Nikula (1):
drm/i915/gvt: fix unterminated-string-initialization warning
Jann Horn (1):
ext4: don't treat fhandle lookup of ea_inode as FS corruption
Jason Xing (1):
page_pool: avoid infinite loop to schedule delayed worker
Jeff Hugo (1):
bus: mhi: host: Fix race between unprepare and queue_buf
Jeff Layton (1):
nfs: move nfs_fhandle_hash to common include file
Jens Axboe (1):
io_uring/kbuf: reject zero sized provided buffers
Jiasheng Jiang (3):
media: platform: stm32: Add check for clk_enable()
mtd: Add check for devm_kcalloc()
mtd: Replace kcalloc() with devm_kcalloc()
Johannes Berg (1):
Revert "wifi: mac80211: Update skb's control block key in ieee80211_tx_dequeue()"
Johannes Kimmel (1):
btrfs: correctly escape subvol in btrfs_show_options()
Johannes Thumshirn (2):
btrfs: zoned: fix zone activation with missing devices
btrfs: zoned: fix zone finishing with missing devices
Jonas Gorski (2):
net: b53: enable BPDU reception for management port
net: bridge: switchdev: do not notify new brentries as changed
Jonathan McDowell (2):
tpm, tpm_tis: Workaround failed command reception on Infineon devices tpm, tpm_tis: Fix timeout handling when waiting for TPM status
Josh Poimboeuf (1):
pwm: mediatek: Prevent divide-by-zero in pwm_mediatek_config()
Joshua Washington (1):
gve: handle overflow when reporting TX consumed descriptors
Kai Mäkisara (1):
scsi: st: Fix array overflow in st_setup()
Kaixin Wang (1):
HSI: ssi_protocol: Fix use after free vulnerability in ssi_protocol Driver Due to Race Condition
Kamal Dasu (1):
mtd: rawnand: brcmnand: fix PM resume warning
Kan Liang (3):
perf/x86/intel/uncore: Fix the scale of IIO free running counters on SNR perf/x86/intel/uncore: Fix the scale of IIO free running counters on ICX perf/x86/intel/uncore: Fix the scale of IIO free running counters on SPR
Karina Yankevich (1):
media: v4l2-dv-timings: prevent possible overflow in v4l2_detect_gtf()
Kaustabh Chakraborty (1):
mmc: dw_mmc: add a quirk for accessing 64-bit FIFOs in two halves
Kees Cook (1):
xen/mcelog: Add __nonstring annotations for unterminated strings
Kirill A. Shutemov (1):
mm: fix apply_to_existing_page_range()
Krzysztof Kozlowski (1):
gpio: zynq: Fix wakeup source leaks on device unbind
Kunihiko Hayashi (3):
misc: pci_endpoint_test: Avoid issue of interrupts remaining after request_irq error
misc: pci_endpoint_test: Fix displaying 'irq_type' after 'request_irq' error
misc: pci_endpoint_test: Fix 'irq_type' to convey the correct type
Leonid Arapov (1):
fbdev: omapfb: Add 'plane' value check
Li Lingfeng (1):
nfsd: decrease sc_count directly if fail to queue dl_recall
Li Nan (1):
blk-iocost: do not WARN if iocg was already offlined
Louis-Alexis Eyraud (1):
iommu/mediatek: Fix NULL pointer deference in mtk_iommu_device_group
Luca Ceresoli (1):
drm/bridge: panel: forbid initializing a panel with unknown connector type
Lucas De Marchi (1):
drivers: base: devres: Allow to release group on device release
Luiz Augusto von Dentz (1):
Bluetooth: hci_event: Fix sending MGMT_EV_DEVICE_FOUND for invalid address
Ma Ke (1):
PCI: Fix reference leak in pci_alloc_child_bus()
Maksim Davydov (1):
x86/split_lock: Fix the delayed detection logic
Manjunatha Venkatesh (1):
i3c: Add NULL pointer check in i3c_master_queue_ibi()
Marek Behún (1):
net: dsa: mv88e6xxx: workaround RGMII transmit delay erratum for 6320 family
Mario Limonciello (1):
drm/amd: Handle being compiled without SI or CIK support better
Mark Brown (4):
KVM: arm64: Discard any SVE state when entering KVM guests arm64/fpsimd: Track the saved FPSIMD state type separately to TIF_SVE arm64/fpsimd: Have KVM explicitly say which FP registers to save arm64/fpsimd: Stop using TIF_SVE to manage register saving in KVM
Mark Rutland (8):
perf: arm_pmu: Don't disable counter in armpmu_add()
KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state
KVM: arm64: Remove host FPSIMD saving for non-protected KVM
KVM: arm64: Remove VHE host restore of CPACR_EL1.ZEN
KVM: arm64: Remove VHE host restore of CPACR_EL1.SMEN
KVM: arm64: Refactor exit handlers
KVM: arm64: Mark some header functions as inline
KVM: arm64: Eagerly switch ZCR_EL{1,2}
Mateusz Guzik (1):
fs: consistently deref the files table with rcu_dereference_raw()
Mathieu Desnoyers (1):
mm: add missing release barrier on PGDAT_RECLAIM_LOCKED unlock
Matt Johnston (1):
net: mctp: Set SOCK_RCU_FREE
Matthew Auld (1):
drm/amdgpu/dma_buf: fix page_link check
Matthew Majewski (1):
media: vim2m: print device name after registering device
Matthew Wilcox (Oracle) (1):
test suite: use %zu to print size_t
Matthieu Baerts (NGI0) (3):
mptcp: sockopt: fix getting IPV6_V6ONLY
mptcp: only inc MPJoinAckHMacFailure for HMAC failures
mptcp: sockopt: fix getting freebind & transparent
Max Grobecker (1):
x86/cpu: Don't clear X86_FEATURE_LAHF_LM flag in init_amd_k8() on AMD when running in a virtual machine
Maxim Mikityanskiy (2):
ALSA: hda: intel: Fix Optimus when GPU has no sound
ALSA: hda: intel: Add Lenovo IdeaPad Z570 to probe denylist
Maxime Chevallier (1):
net: ethtool: Don't call .cleanup_data when prepare_data fails
Miaoqian Lin (1):
scsi: iscsi: Fix missing scsi_host_put() in error path
Mickaël Salaün (1):
landlock: Add the errata interface
Mikulas Patocka (3):
dm-ebs: fix prefetch-vs-suspend race
dm-integrity: set ti->error on memory allocation failure
dm-verity: fix prefetch-vs-suspend race
Miquel Raynal (1):
spi: cadence-qspi: Fix probe on AM62A LP SK
Murad Masimov (1):
media: streamzap: prevent processing IR data on URB failure
Myrrh Periwinkle (1):
x86/e820: Fix handling of subpage regions when calculating nosave ranges in e820__register_nosave_regions()
Namjae Jeon (1):
ksmbd: fix the warning from __kernel_write_iter
Nathan Chancellor (3):
ACPI: platform-profile: Fix CFI violation when accessing sysfs files
riscv: Avoid fortify warning in syscall_get_arguments()
kbuild: Add '-fno-builtin-wcslen'
Nathan Lynch (1):
powerpc/rtas: Prevent Spectre v1 gadget construction in sys_rtas()
Nikita Zhandarovich (1):
drm/repaper: fix integer overflows in repeat functions
Niklas Cassel (1):
ata: libata-eh: Do not use ATAPI DMA for a device limited to PIO mode
Niklas Söderlund (1):
media: i2c: adv748x: Fix test pattern selection mask
Octavian Purdila (2):
net_sched: sch_sfq: use a temporary work area for validating configuration
net_sched: sch_sfq: move the limit validation
Ojaswin Mujoo (1):
ext4: protect ext4_release_dquot against freezing
Paulo Alcantara (1):
cifs: use origin fullpath for automounts
Pavel Begunkov (1):
io_uring/net: fix accept multishot handling
Pedro Tammela (1):
net/sched: cls_api: conditional notification of events
Peter Collingbourne (1):
string: Add load_unaligned_zeropad() code path to sized_strscpy()
Peter Griffin (1):
scsi: ufs: exynos: Ensure consistent phy reference counts
Philip Yang (2):
drm/amdkfd: Fix mode1 reset crash issue drm/amdkfd: Fix pqm_destroy_queue race with GPU reset
Rafael J. Wysocki (2):
cpufreq/sched: Fix the usage of CPUFREQ_NEED_UPDATE_LIMITS
cpufreq: Reference count policy in cpufreq_update_limits()
Rand Deeb (2):
fs/jfs: cast inactags to s64 to prevent potential overflow fs/jfs: Prevent integer overflow in AG size calculation
Remi Pommarel (2):
wifi: mac80211: Update skb's control block key in ieee80211_tx_dequeue()
wifi: mac80211: Purge vif txq in ieee80211_do_stop()
Ricard Wanderlof (1):
ALSA: usb-audio: Fix CME quirk for UF series keyboards
Ricardo Cañuelo Navarro (1):
sctp: detect and prevent references to a freed transport in sendmsg
Rolf Eike Beer (1):
drm/sti: remove duplicate object names
Roman Smirnov (1):
cifs: fix integer overflow in match_server()
Ryan Roberts (1):
sparc/mm: disable preemption in lazy mmu mode
Ryo Takakura (1):
PCI: vmd: Make vmd_dev::cfg_lock a raw_spinlock_t type
Sagi Maimon (1):
ptp: ocp: fix start time alignment in ptp_ocp_signal_set
Sakari Ailus (4):
media: i2c: ccs: Set the device's runtime PM status correctly in remove
media: i2c: ccs: Set the device's runtime PM status correctly in probe
media: i2c: ov7251: Set enable GPIO low in probe
media: i2c: ov7251: Introduce 1 ms delay between regulators and en GPIO
Sean Christopherson (1):
KVM: x86: Acquire SRCU in KVM_GET_MP_STATE to protect guest memory accesses
Sean Heelan (1):
ksmbd: Fix dangling pointer in krb_authenticate
Sharath Srinivasan (1):
RDMA/cma: Fix workqueue crash in cma_netevent_work_handler
Shay Drory (1):
RDMA/core: Silence oversized kvmalloc() warning
Shengjiu Wang (1):
ASoC: fsl_audmix: register card device depends on 'dais' property
Shuai Xue (1):
mm/hwpoison: do not send SIGBUS to processes with recovered clean pages
Si-Wei Liu (1):
vdpa/mlx5: Fix oversized null mkey longer than 32bit
Srinivas Kandagatla (4):
ASoC: qdsp6: q6apm-dai: set 10 ms period and buffer alignment.
ASoC: qdsp6: q6apm-dai: fix capture pipeline overruns.
ASoC: codecs:lpass-wsa-macro: Fix vi feedback rate
ASoC: codecs:lpass-wsa-macro: Fix logic of enabling vi channels
Stanimir Varbanov (1):
PCI: brcmstb: Fix missing of_node_put() in brcm_pcie_probe()
Stanislav Fomichev (1):
net: vlan: don't propagate flags on open
Stanley Chu (1):
i3c: master: svc: Use readsb helper for reading MDB
Stephan Gerhold (1):
pinctrl: qcom: Clear latched interrupt status when changing IRQ type
Steve French (1):
smb311 client: fix missing tcon check when mounting with linux/posix extensions
Steven Rostedt (1):
tracing: Fix filter string testing
T Pratham (1):
lib: scatterlist: fix sg_split_phys to preserve original scatterlist offsets
Takashi Iwai (1):
ALSA: hda/realtek: Fix built-in mic on another ASUS VivoBook model
Taniya Das (1):
clk: qcom: gdsc: Set retain_ff before moving to HW CTRL
Thadeu Lima de Souza Cascardo (1):
i2c: cros-ec-tunnel: defer probe if parent EC is not present
Thomas Weißschuh (2):
loop: properly send KOBJ_CHANGED uevent for disk device
loop: LOOP_SET_FD: send uevents for partitions
Toke Høiland-Jørgensen (1):
tc: Ensure we have enough buffer space when sending filter netlink notifications
Tom Lendacky (1):
crypto: ccp - Fix check for the primary ASP device
Tomasz Pakuła (3):
HID: pidff: Convert infinite length from Linux API to PID standard
HID: pidff: Do not send effect envelope if it's empty
HID: pidff: Fix null pointer dereference in pidff_find_fields
Trevor Woerner (1):
thermal/drivers/rockchip: Add missing rk3328 mapping entry
Trond Myklebust (1):
umount: Allow superblock owners to force umount
Tung Nguyen (1):
tipc: fix memory leak in tipc_link_xmit
Uwe Kleine-König (2):
pwm: rcar: Improve register calculation
pwm: fsl-ftm: Handle clk_get_rate() returning 0
Vasiliy Kovalev (1):
hfs/hfsplus: fix slab-out-of-bounds in hfs_bnode_read_key
Victor Nogueira (1):
rtnl: add helper to check if a notification is needed
Vikash Garodia (4):
media: venus: hfi: add a check to handle OOB in sfr region
media: venus: hfi: add check to handle incorrect queue size
media: venus: hfi_parser: add check to avoid out of bound access
media: venus: hfi_parser: refactor hfi packet parsing logic
Vishal Moola (Oracle) (1):
mm: fix filemap_get_folios_contig returning batches of identical folios
Vladimir Oltean (3):
net: dsa: mv88e6xxx: avoid unregistering devlink regions which were never registered
net: dsa: mv88e6xxx: fix -ENOENT when deleting VLANs and MST is unsupported
net: dsa: avoid refcount warnings when ds->ops->tag_8021q_vlan_del() fails
WangYuli (6):
riscv: KGDB: Do not inline arch_kgdb_breakpoint()
riscv: KGDB: Remove ".option norvc/.option rvc" for kgdb_compiled_break
nvmet-fc: Remove unused functions
MIPS: dec: Declare which_prom() as static
MIPS: cevt-ds1287: Add missing ds1287.h include
MIPS: ds1287: Match ds1287_set_base_clock() function types
Wentao Liang (4):
ata: sata_sx4: Add error handling in pdc20621_i2c_read() drm/amdgpu: handle amdgpu_cgs_create_device() errors in amd_powerplay_create()
mtd: inftlcore: Add error check for inftl_read_oob()
mtd: rawnand: Add status chack in r852_ready()
Will Deacon (1):
KVM: arm64: Tear down vGIC on failed vCPU creation
Willem de Bruijn (1):
bpf: support SKF_NET_OFF and SKF_LL_OFF on skb frags
Xiangsheng Hou (1):
virtiofs: add filesystem context source name check
Xingui Yang (1):
scsi: hisi_sas: Enable force phy when SATA disk directly connected
Xu Kuohai (1):
bpf: Prevent tail call between progs attached to different hooks
Yu Kuai (4):
md/raid10: fix missing discard IO accounting
blk-cgroup: support to track if policy is online
md: factor out a helper from mddev_put()
md: fix mddev uaf while iterating all_mddevs list
Yuan Can (1):
media: siano: Fix error handling in smsdvb_module_init()
Yue Haibing (1):
RDMA/usnic: Fix passing zero to PTR_ERR in usnic_ib_pci_probe()
Yuli Wang (1):
LoongArch: Eliminate superfluous get_numa_distances_cnt()
Zheng Qixing (1):
md/md-bitmap: fix stats collection for external bitmaps
Zhenhua Huang (1):
arm64: mm: Correct the update of max_pfn
Zhikai Zhai (1):
drm/amd/display: Update Cursor request mode to the beginning prefetch always
Zhongqiu Han (2):
pm: cpupower: bench: Prevent NULL dereference on malloc failure
jfs: Fix uninit-value access of imap allocated in the diMount() function
Zijun Hu (5):
of/irq: Fix device node refcount leakage in API of_irq_parse_one() of/irq: Fix device node refcount leakage in API of_irq_parse_raw() of/irq: Fix device node refcount leakages in of_irq_count() of/irq: Fix device node refcount leakage in API irq_of_parse_and_map() of/irq: Fix device node refcount leakages in of_irq_init()
keenplify (1):
ASoC: amd: Add DMI quirk for ACP6X mic support
zhoumin (1):
ftrace: Add cond_resched() to ftrace_graph_set_hash()
Greg Kroah-Hartman
maintainerMAINTAINERS +1 -0
@@ -4833,6 +4833,7 @@ S: Maintained F: Documentation/admin-guide/module-signing.rst F: certs/ F: scripts/sign-file.c +F: scripts/ssl-common.h F: tools/certs/ CFAG12864B LCD DRIVER
Makefile +4 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 134 +SUBLEVEL = 135 EXTRAVERSION = NAME = Curry Ramen
@@ -1075,6 +1075,9 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types) # Require designated initializers for all marked structures KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init) +# Ensure compilers do not transform certain loops into calls to wcslen() +KBUILD_CFLAGS += -fno-builtin-wcslen + # change __FILE__ to the relative path from the srctree KBUILD_CPPFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
arch/arm64/boot/dts/mediatek/mt8173.dtsi +2 -4
@@ -1247,8 +1247,7 @@ dpi0_out: endpoint { }; pwm0: pwm@1401e000 { - compatible = "mediatek,mt8173-disp-pwm", - "mediatek,mt6595-disp-pwm"; + compatible = "mediatek,mt8173-disp-pwm"; reg = <0 0x1401e000 0 0x1000>; #pwm-cells = <2>; clocks = <&mmsys CLK_MM_DISP_PWM026M>,
@@ -1258,8 +1257,7 @@ pwm0: pwm@1401e000 { }; pwm1: pwm@1401f000 { - compatible = "mediatek,mt8173-disp-pwm", - "mediatek,mt6595-disp-pwm"; + compatible = "mediatek,mt8173-disp-pwm"; reg = <0 0x1401f000 0 0x1000>; #pwm-cells = <2>; clocks = <&mmsys CLK_MM_DISP_PWM126M>,
arch/arm64/include/asm/cputype.h +4 -0
@@ -75,6 +75,7 @@#define ARM_CPU_PART_CORTEX_A76 0xD0B#define ARM_CPU_PART_NEOVERSE_N1 0xD0C#define ARM_CPU_PART_CORTEX_A77 0xD0D +#define ARM_CPU_PART_CORTEX_A76AE 0xD0E#define ARM_CPU_PART_NEOVERSE_V1 0xD40#define ARM_CPU_PART_CORTEX_A78 0xD41#define ARM_CPU_PART_CORTEX_A78AE 0xD42
@@ -119,6 +120,7 @@#define QCOM_CPU_PART_KRYO 0x200#define QCOM_CPU_PART_KRYO_2XX_GOLD 0x800#define QCOM_CPU_PART_KRYO_2XX_SILVER 0x801 +#define QCOM_CPU_PART_KRYO_3XX_GOLD 0x802#define QCOM_CPU_PART_KRYO_3XX_SILVER 0x803#define QCOM_CPU_PART_KRYO_4XX_GOLD 0x804#define QCOM_CPU_PART_KRYO_4XX_SILVER 0x805
@@ -151,6 +153,7 @@#define MIDR_CORTEX_A76 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A76)#define MIDR_NEOVERSE_N1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_N1)#define MIDR_CORTEX_A77 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A77) +#define MIDR_CORTEX_A76AE MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A76AE)#define MIDR_NEOVERSE_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V1)#define MIDR_CORTEX_A78 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78)#define MIDR_CORTEX_A78AE MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78AE)
@@ -188,6 +191,7 @@#define MIDR_QCOM_KRYO MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO)#define MIDR_QCOM_KRYO_2XX_GOLD MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_2XX_GOLD)#define MIDR_QCOM_KRYO_2XX_SILVER MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_2XX_SILVER) +#define MIDR_QCOM_KRYO_3XX_GOLD MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_3XX_GOLD)#define MIDR_QCOM_KRYO_3XX_SILVER MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_3XX_SILVER)#define MIDR_QCOM_KRYO_4XX_GOLD MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_4XX_GOLD)#define MIDR_QCOM_KRYO_4XX_SILVER MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_4XX_SILVER)
arch/arm64/include/asm/fpsimd.h +3 -1
@@ -56,11 +56,13 @@ extern void fpsimd_signal_preserve_current_state(void);extern void fpsimd_preserve_current_state (void );extern void fpsimd_restore_current_state (void );extern void fpsimd_update_current_state (struct user_fpsimd_state const *state); +extern void fpsimd_kvm_prepare (void );extern void fpsimd_bind_state_to_cpu (struct user_fpsimd_state *state,void *sve_state,unsigned int sve_vl,void *za_state,unsigned int sme_vl, -u64 *svcr); +u64 *svcr,enum fp_type *type, +enum fp_type to_save);extern void fpsimd_flush_task_state (struct task_struct *target);extern void fpsimd_save_and_flush_cpu_state (void );
arch/arm64/include/asm/kvm_host.h +12 -7
@@ -67,6 +67,7 @@ enum kvm_mode kvm_get_mode(void);DECLARE_STATIC_KEY_FALSE (userspace_irqchip_in_use);extern unsigned int kvm_sve_max_vl; +extern unsigned int kvm_host_sve_max_vl;int kvm_arm_init_sve (void ); u32 __attribute_const__ kvm_target_cpu(void);
@@ -309,8 +310,18 @@ struct vcpu_reset_state {struct kvm_vcpu_arch {struct kvm_cpu_context ctxt; -/* Guest floating point state */ +/* +* Guest floating point state +* +* The architecture has two main floating point extensions, +* the original FPSIMD and SVE. These have overlapping +* register views, with the FPSIMD V registers occupying the +* low 128 bits of the SVE Z registers. When the core +* floating point code saves the register state of a task it +* records which view it saved in fp_type. +*/ void *sve_state; +enum fp_type fp_type;unsigned int sve_max_vl;u64 svcr;
@@ -320,7 +331,6 @@ struct kvm_vcpu_arch {/* Values of trap registers for the guest. */ u64 hcr_el2;u64 mdcr_el2; -u64 cptr_el2;/* Values of trap registers for the host before guest entry. */ u64 mdcr_el2_host;
@@ -370,7 +380,6 @@ struct kvm_vcpu_arch {struct kvm_guest_debug_arch vcpu_debug_state;struct kvm_guest_debug_arch external_debug_state; -struct user_fpsimd_state *host_fpsimd_state;/* hyp VA */ struct task_struct *parent_task;struct {
@@ -547,10 +556,6 @@ struct kvm_vcpu_arch {/* Save TRBE context if active */ #define DEBUG_STATE_SAVE_TRBE __vcpu_single_flag(iflags, BIT(6)) -/* SVE enabled for host EL0 */ -#define HOST_SVE_ENABLED __vcpu_single_flag(sflags, BIT(0)) -/* SME enabled for EL0 */ -#define HOST_SME_ENABLED __vcpu_single_flag(sflags, BIT(1))/* Physical CPU not in supported_cpus */ #define ON_UNSUPPORTED_CPU __vcpu_single_flag(sflags, BIT(2))/* WFIT instruction trapped */
arch/arm64/include/asm/kvm_hyp.h +1 -0
@@ -122,5 +122,6 @@ extern u64 kvm_nvhe_sym(id_aa64isar2_el1_sys_val);extern u64 kvm_nvhe_sym (id_aa64mmfr0_el1_sys_val );extern u64 kvm_nvhe_sym (id_aa64mmfr1_el1_sys_val );extern u64 kvm_nvhe_sym (id_aa64mmfr2_el1_sys_val ); +extern unsigned int kvm_nvhe_sym (kvm_host_sve_max_vl );#endif /* __ARM64_KVM_HYP_H__ */
arch/arm64/include/asm/processor.h +7 -0
@@ -122,6 +122,12 @@ enum vec_type { ARM64_VEC_MAX, }; +enum fp_type { +FP_STATE_CURRENT ,/* Save based on current task state. */ +FP_STATE_FPSIMD , +FP_STATE_SVE , +}; +struct cpu_context {unsigned long x19;unsigned long x20;
@@ -152,6 +158,7 @@ struct thread_struct {struct user_fpsimd_state fpsimd_state; } uw; +enum fp_type fp_type;/* registers FPSIMD or SVE? */ unsigned int fpsimd_cpu;void *sve_state;/* SVE registers, if any */ void *za_state;/* ZA register, if any */
arch/arm64/include/asm/spectre.h +0 -1
@@ -96,7 +96,6 @@ enum mitigation_state arm64_get_meltdown_state(void);enum mitigation_state arm64_get_spectre_bhb_state (void );bool is_spectre_bhb_affected (const struct arm64_cpu_capabilities *entry,int scope); -u8 spectre_bhb_loop_affected (int scope);void spectre_bhb_enable_mitigation (const struct arm64_cpu_capabilities *__unused);#endif /* __ASSEMBLY__ */ #endif /* __ASM_SPECTRE_H */
arch/arm64/kernel/fpsimd.c +51 -18
160 lines not on this page · raw message
arch/arm64/kernel/process.c +2 -0
@@ -331,6 +331,8 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)clear_tsk_thread_flag (dst,TIF_SME ); } + dst->thread.fp_type =FP_STATE_FPSIMD ; +/* clear any pending asynchronous tag fault raised by the parent */ clear_tsk_thread_flag (dst,TIF_MTE_ASYNC_FAULT );
arch/arm64/kernel/proton-pack.c +118 -100
281 lines not on this page · raw message
arch/arm64/kernel/ptrace.c +3 -0
@@ -917,6 +917,7 @@ static int sve_set_common(struct task_struct *target,clear_tsk_thread_flag (target,TIF_SVE );if (type ==ARM64_VEC_SME )fpsimd_force_sync_to_sve (target); + target->thread.fp_type =FP_STATE_FPSIMD ; goto out; }
@@ -939,6 +940,7 @@ static int sve_set_common(struct task_struct *target,if (!target->thread.sve_state) { ret = -ENOMEM ;clear_tsk_thread_flag (target,TIF_SVE ); + target->thread.fp_type =FP_STATE_FPSIMD ; goto out; }
@@ -952,6 +954,7 @@ static int sve_set_common(struct task_struct *target,fpsimd_sync_to_sve (target);if (type ==ARM64_VEC_SVE )set_tsk_thread_flag (target,TIF_SVE ); + target->thread.fp_type =FP_STATE_SVE ;BUILD_BUG_ON (SVE_PT_SVE_OFFSET !=sizeof (header)); start =SVE_PT_SVE_OFFSET ;
arch/arm64/kernel/signal.c +6 -1
@@ -207,6 +207,7 @@ static int restore_fpsimd_context(struct fpsimd_context __user *ctx)__get_user_error (fpsimd.fpcr, &ctx->fpcr, err);clear_thread_flag (TIF_SVE ); + current->thread.fp_type =FP_STATE_FPSIMD ;/* load the hardware registers from the fpsimd_state structure */ if (!err)
@@ -297,6 +298,7 @@ static int restore_sve_fpsimd_context(struct user_ctxs *user)if (sve.head.size <=sizeof (*user->sve)) {clear_thread_flag (TIF_SVE ); current->thread.svcr &= ~SVCR_SM_MASK ; + current->thread.fp_type =FP_STATE_FPSIMD ; goto fpsimd_only; }
@@ -332,6 +334,7 @@ static int restore_sve_fpsimd_context(struct user_ctxs *user) current->thread.svcr |=SVCR_SM_MASK ; elseset_thread_flag (TIF_SVE ); + current->thread.fp_type =FP_STATE_SVE ; fpsimd_only:/* copy the FP and status/control registers */
@@ -937,9 +940,11 @@ static void setup_return(struct pt_regs *regs, struct k_sigaction *ka,* FPSIMD register state - flush the saved FPSIMD * register state in case it gets loaded. */ -if (current->thread.svcr &SVCR_SM_MASK ) +if (current->thread.svcr &SVCR_SM_MASK ) {memset (¤t->thread.uw.fpsimd_state,0 ,sizeof (current->thread.uw.fpsimd_state)); + current->thread.fp_type =FP_STATE_FPSIMD ; + } current->thread.svcr &= ~(SVCR_ZA_MASK |SVCR_SM_MASK );
arch/arm64/kvm/arm.c +5 -2
@@ -371,7 +371,11 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)if (err)return err; -return kvm_share_hyp (vcpu, vcpu +1 ); + err =kvm_share_hyp (vcpu, vcpu +1 ); +if (err) +kvm_vgic_vcpu_destroy (vcpu); + +return err; }void kvm_arch_vcpu_postcreate (struct kvm_vcpu *vcpu)
@@ -1230,7 +1234,6 @@ static int kvm_arch_vcpu_ioctl_vcpu_init(struct kvm_vcpu *vcpu, }vcpu_reset_hcr (vcpu); - vcpu->arch.cptr_el2 =CPTR_EL2_DEFAULT ;/* * Handle the "start in power-off" case.
arch/arm64/kvm/fpsimd.c +26 -66
137 lines not on this page · raw message
arch/arm64/kvm/hyp/entry.S +5 -0
@@ -44,6 +44,11 @@ alternative_if ARM64_HAS_RAS_EXTN alternative_else_nop_endif mrs x1, isr_el1 cbz x1, 1f + + // Ensure that __guest_enter() always provides a context + // synchronization event so that callers don't need ISBs for anything + // that would usually be synchonized by the ERET. + isb mov x0, #ARM_EXCEPTION_IRQ ret
arch/arm64/kvm/hyp/include/hyp/switch.h +69 -37
175 lines not on this page · raw message
arch/arm64/kvm/hyp/nvhe/hyp-main.c +3 -5
@@ -5,6 +5,7 @@*/ #include <hyp/adjust_pc.h> +#include <hyp/switch.h> #include <asm/pgtable-types.h> #include <asm/kvm_asm.h>
@@ -25,7 +26,9 @@ static void handle___kvm_vcpu_run(struct kvm_cpu_context *host_ctxt) { DECLARE_REG(struct kvm_vcpu *, vcpu, host_ctxt, 1); +fpsimd_lazy_switch_to_guest (kern_hyp_va (vcpu));cpu_reg (host_ctxt,1 ) =__kvm_vcpu_run (kern_hyp_va (vcpu)); +fpsimd_lazy_switch_to_host (kern_hyp_va (vcpu)); }static void handle___kvm_adjust_pc (struct kvm_cpu_context *host_ctxt)
@@ -285,11 +288,6 @@ void handle_trap(struct kvm_cpu_context *host_ctxt)case ESR_ELx_EC_SMC64:handle_host_smc (host_ctxt);break ; -case ESR_ELx_EC_SVE: -sysreg_clear_set (cptr_el2,CPTR_EL2_TZ ,0 ); -isb (); -sve_cond_update_zcr_vq (ZCR_ELx_LEN_MASK,SYS_ZCR_EL2 ); -break ;case ESR_ELx_EC_IABT_LOW:case ESR_ELx_EC_DABT_LOW:handle_host_mem_abort (host_ctxt);
arch/arm64/kvm/hyp/nvhe/pkvm.c +2 -15
@@ -9,6 +9,8 @@#include <nvhe/fixed_config.h> #include <nvhe/trap_handler.h> +unsigned int kvm_host_sve_max_vl; +/* * Set trap register values based on features in ID_AA64PFR0. */
@@ -17,7 +19,6 @@ static void pvm_init_traps_aa64pfr0(struct kvm_vcpu *vcpu)const u64 feature_ids =pvm_read_id_reg (vcpu,SYS_ID_AA64PFR0_EL1 );u64 hcr_set =HCR_RW ;u64 hcr_clear =0 ; -u64 cptr_set =0 ;/* Protected KVM does not support AArch32 guests. */ BUILD_BUG_ON(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_EL0),
@@ -44,16 +45,10 @@ static void pvm_init_traps_aa64pfr0(struct kvm_vcpu *vcpu)/* Trap AMU */ if (!FIELD_GET (ARM64_FEATURE_MASK (ID_AA64PFR0_EL1_AMU ), feature_ids)) { hcr_clear |=HCR_AMVOFFEN ; - cptr_set |=CPTR_EL2_TAM ; } -/* Trap SVE */ -if (!FIELD_GET (ARM64_FEATURE_MASK (ID_AA64PFR0_EL1_SVE ), feature_ids)) - cptr_set |=CPTR_EL2_TZ ; - vcpu->arch.hcr_el2 |= hcr_set; vcpu->arch.hcr_el2 &= ~hcr_clear; - vcpu->arch.cptr_el2 |= cptr_set; }/*
@@ -83,7 +78,6 @@ static void pvm_init_traps_aa64dfr0(struct kvm_vcpu *vcpu)const u64 feature_ids =pvm_read_id_reg (vcpu,SYS_ID_AA64DFR0_EL1 );u64 mdcr_set =0 ;u64 mdcr_clear =0 ; -u64 cptr_set =0 ;/* Trap/constrain PMU */ if (!FIELD_GET (ARM64_FEATURE_MASK (ID_AA64DFR0_EL1_PMUVer), feature_ids)) {
@@ -110,13 +104,8 @@ static void pvm_init_traps_aa64dfr0(struct kvm_vcpu *vcpu)if (!FIELD_GET (ARM64_FEATURE_MASK (ID_AA64DFR0_EL1_TraceFilt), feature_ids)) mdcr_set |=MDCR_EL2_TTRF ; -/* Trap Trace */ -if (!FIELD_GET (ARM64_FEATURE_MASK (ID_AA64DFR0_EL1_TraceVer), feature_ids)) - cptr_set |=CPTR_EL2_TTA ; - vcpu->arch.mdcr_el2 |= mdcr_set; vcpu->arch.mdcr_el2 &= ~mdcr_clear; - vcpu->arch.cptr_el2 |= cptr_set; }/*
@@ -167,8 +156,6 @@ static void pvm_init_trap_regs(struct kvm_vcpu *vcpu)/* Clear res0 and set res1 bits to trap potential new features. */ vcpu->arch.hcr_el2 &= ~(HCR_RES0 ); vcpu->arch.mdcr_el2 &= ~(MDCR_EL2_RES0 ); - vcpu->arch.cptr_el2 |=CPTR_NVHE_EL2_RES1 ; - vcpu->arch.cptr_el2 &= ~(CPTR_NVHE_EL2_RES0 ); }/*
arch/arm64/kvm/hyp/nvhe/switch.c +59 -32
129 lines not on this page · raw message
arch/arm64/kvm/hyp/vhe/switch.c +7 -5
@@ -114,13 +114,11 @@ static const exit_handler_fn hyp_exit_handlers[] = { [ESR_ELx_EC_PAC] = kvm_hyp_handle_ptrauth, }; -static const exit_handler_fn *kvm_get_exit_handler_array (struct kvm_vcpu *vcpu) +static inline bool fixup_guest_exit (struct kvm_vcpu *vcpu,u64 *exit_code) { -return hyp_exit_handlers; -} +synchronize_vcpu_pstate (vcpu, exit_code); -static void early_exit_filter (struct kvm_vcpu *vcpu,u64 *exit_code) -{ +return __fixup_guest_exit (vcpu, exit_code, hyp_exit_handlers); }/* Switch to the guest for VHE systems running in EL2 */
@@ -136,6 +134,8 @@ static int __kvm_vcpu_run_vhe(struct kvm_vcpu *vcpu)sysreg_save_host_state_vhe (host_ctxt); +fpsimd_lazy_switch_to_guest (vcpu); +/* * ARM erratum 1165522 requires us to configure both stage 1 and * stage 2 translation for the guest context before we clear
@@ -166,6 +166,8 @@ static int __kvm_vcpu_run_vhe(struct kvm_vcpu *vcpu)__deactivate_traps (vcpu); +fpsimd_lazy_switch_to_host (vcpu); +sysreg_restore_host_state_vhe (host_ctxt);if (vcpu->arch.fp_state ==FP_STATE_GUEST_OWNED )
arch/arm64/kvm/reset.c +3 -0
@@ -42,11 +42,14 @@ static u32 kvm_ipa_limit; PSR_AA32_I_BIT | PSR_AA32_F_BIT)unsigned int kvm_sve_max_vl; +unsigned int kvm_host_sve_max_vl;int kvm_arm_init_sve (void ) {if (system_supports_sve ()) { kvm_sve_max_vl =sve_max_virtualisable_vl (); + kvm_host_sve_max_vl =sve_max_vl (); +kvm_nvhe_sym (kvm_host_sve_max_vl) = kvm_host_sve_max_vl;/* * The get_sve_reg()/set_sve_reg() ioctl interface will need
arch/arm64/mm/mmu.c +2 -1
@@ -1578,7 +1578,8 @@ int arch_add_memory(int nid, u64 start, u64 size,__remove_pgd_mapping (swapper_pg_dir,__phys_to_virt (start), size); else { - max_pfn =PFN_UP (start + size); +/* Address of hotplugged memory can be smaller */ + max_pfn =max (max_pfn,PFN_UP (start + size)); max_low_pfn = max_pfn; }
arch/loongarch/kernel/acpi.c +0 -12
@@ -173,18 +173,6 @@ static __init int setup_node(int pxm)return acpi_map_pxm_to_node (pxm); } -/* -* Callback for SLIT parsing. pxm_to_node() returns NUMA_NO_NODE for -* I/O localities since SRAT does not list them. I/O localities are -* not supported at this point. -*/ -unsigned int numa_distance_cnt; - -static inline unsigned int get_numa_distances_cnt (struct acpi_table_slit *slit) -{ -return slit->locality_count; -} -void __init numa_set_distance (int from,int to,int distance) {if ((u8 )distance != distance || (from == to && distance !=LOCAL_DISTANCE )) {
arch/loongarch/net/bpf_jit.c +0 -2
@@ -142,8 +142,6 @@ static void build_prologue(struct jit_ctx *ctx)*/ if (seen_tail_call (ctx) &&seen_call (ctx))move_reg (ctx,TCC_SAVED ,REG_TCC ); -else -emit_insn (ctx, nop); ctx->stack_size = stack_adjust; }
arch/loongarch/net/bpf_jit.h +0 -5
@@ -25,11 +25,6 @@ struct jit_data {struct jit_ctx ctx; }; -static inline void emit_nop (union loongarch_instruction *insn) -{ - insn->word =INSN_NOP ; -} -#define emit_insn (ctx, func, ...) \ do { \ if (ctx->image != NULL) { \
arch/mips/dec/prom/init.c +1 -1
@@ -42,7 +42,7 @@ int (*__pmax_close)(int);* Detect which PROM the DECSTATION has, and set the callback vectors * appropriately. */ -void __init which_prom (s32 magic,s32 *prom_vec) +static void __init which_prom (s32 magic,s32 *prom_vec) {/* * No sign of the REX PROM's magic number means we assume a non-REX
arch/mips/include/asm/ds1287.h +1 -1
@@ -8,7 +8,7 @@#define __ASM_DS1287_Hextern int ds1287_timer_state (void ); -extern void ds1287_set_base_clock (unsigned int clock); +extern int ds1287_set_base_clock (unsigned int hz);extern int ds1287_clockevent_init (int irq);#endif
arch/mips/kernel/cevt-ds1287.c +1 -0
@@ -10,6 +10,7 @@#include <linux/mc146818rtc.h> #include <linux/irq.h> +#include <asm/ds1287.h> #include <asm/time.h> int ds1287_timer_state (void )
arch/powerpc/kernel/rtas.c +4 -0
@@ -25,6 +25,7 @@#include <linux/reboot.h> #include <linux/security.h> #include <linux/syscalls.h> +#include <linux/nospec.h> #include <linux/of.h> #include <linux/of_fdt.h>
@@ -1178,6 +1179,9 @@ SYSCALL_DEFINE1(rtas, struct rtas_args __user *, uargs) || nargs + nret > ARRAY_SIZE(args.args))return -EINVAL ; + nargs =array_index_nospec (nargs,ARRAY_SIZE (args.args)); + nret =array_index_nospec (nret,ARRAY_SIZE (args.args) - nargs); +/* Copy in args. */ if (copy_from_user (args.args, uargs->args, nargs *sizeof (rtas_arg_t)) !=0 )
arch/riscv/include/asm/kgdb.h +1 -8
@@ -19,16 +19,9 @@#ifndef __ASSEMBLY__ +void arch_kgdb_breakpoint (void );extern unsigned long kgdb_compiled_break; -static inline void arch_kgdb_breakpoint (void ) -{ - asm(".global kgdb_compiled_break\n" -".option norvc\n" -"kgdb_compiled_break: ebreak\n" -".option rvc\n" ); -} -#endif /* !__ASSEMBLY__ */ #define DBG_REG_ZERO "zero"
arch/riscv/include/asm/syscall.h +5 -2
@@ -61,8 +61,11 @@ static inline void syscall_get_arguments(struct task_struct *task, unsigned long *args) { args[0 ] = regs->orig_a0; - args++; -memcpy (args, ®s->a1,5 *sizeof (args[0 ])); + args[1 ] = regs->a1; + args[2 ] = regs->a2; + args[3 ] = regs->a3; + args[4 ] = regs->a4; + args[5 ] = regs->a5; }static inline int syscall_get_arch (struct task_struct *task)
arch/riscv/kernel/kgdb.c +6 -0
@@ -273,6 +273,12 @@ void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc) regs->epc = pc; } +noinline void arch_kgdb_breakpoint(void) +{ + asm(".global kgdb_compiled_break\n" +"kgdb_compiled_break: ebreak\n" ); +} +void kgdb_arch_handle_qxfer_pkt (char *remcom_in_buffer,char *remcom_out_buffer) {
arch/riscv/kernel/setup.c +35 -1
@@ -76,6 +76,9 @@ static struct resource bss_res = { .name = "Kernel bss", };static struct resource elfcorehdr_res = { .name ="ELF Core hdr" , };#endif +static int num_standard_resources; +static struct resource *standard_resources; +static int __init add_resource (struct resource *parent,struct resource *res) {
@@ -149,7 +152,7 @@ static void __init init_resources(void)struct resource *res =NULL ;struct resource *mem_res =NULL ;size_t mem_res_sz =0 ; -int num_resources =0 , res_idx =0 ; +int num_resources =0 , res_idx =0 , non_resv_res =0 ;int ret =0 ;/* + 1 as memblock_alloc() might increase memblock.reserved.cnt */
@@ -213,6 +216,7 @@ static void __init init_resources(void)/* Add /memory regions to the resource tree */ for_each_mem_region (region) { res = &mem_res[res_idx--]; + non_resv_res++;if (unlikely (memblock_is_nomap (region))) { res->name ="Reserved" ;
@@ -230,6 +234,9 @@ static void __init init_resources(void) goto error; } + num_standard_resources = non_resv_res; + standard_resources = &mem_res[res_idx +1 ]; +/* Clean-up any unused pre-allocated resources */ if (res_idx >=0 )memblock_free (mem_res, (res_idx +1 ) *sizeof (*mem_res));
@@ -241,6 +248,33 @@ static void __init init_resources(void)memblock_free (mem_res, mem_res_sz); } +static int __init reserve_memblock_reserved_regions (void ) +{ +u64 i, j; + +for (i =0 ; i < num_standard_resources; i++) { +struct resource *mem = &standard_resources[i]; +phys_addr_t r_start, r_end, mem_size =resource_size (mem); + +if (!memblock_is_region_reserved (mem->start, mem_size)) +continue ; + +for_each_reserved_mem_range (j, &r_start, &r_end) { +resource_size_t start, end; + + start =max (PFN_PHYS (PFN_DOWN (r_start)), mem->start); + end =min (PFN_PHYS (PFN_UP (r_end)) -1 , mem->end); + +if (start > mem->end || end < mem->start) +continue ; + +reserve_region_with_split (mem, start, end,"Reserved" ); + } + } + +return 0 ; +} +arch_initcall (reserve_memblock_reserved_regions);static void __init parse_dtb (void ) {
arch/sparc/mm/tlb.c +4 -1
@@ -52,8 +52,10 @@ void flush_tlb_pending(void)void arch_enter_lazy_mmu_mode (void ) { -struct tlb_batch *tb =this_cpu_ptr (&tlb_batch); +struct tlb_batch *tb; +preempt_disable (); + tb =this_cpu_ptr (&tlb_batch); tb->active =1 ; }
@@ -64,6 +66,7 @@ void arch_leave_lazy_mmu_mode(void)if (tb->tlb_nr)flush_tlb_pending (); tb->active =0 ; +preempt_enable (); } static void tlb_batch_add_one(struct mm_struct *mm, unsigned long vaddr,
arch/x86/events/intel/ds.c +5 -3
@@ -1149,8 +1149,10 @@ static u64 pebs_update_adaptive_cfg(struct perf_event *event)* + precise_ip < 2 for the non event IP * + For RTM TSX weight we need GPRs for the abort code. */ - gprs = (sample_type &PERF_SAMPLE_REGS_INTR ) && - (attr->sample_regs_intr &PEBS_GP_REGS ); + gprs = ((sample_type &PERF_SAMPLE_REGS_INTR ) && + (attr->sample_regs_intr &PEBS_GP_REGS )) || + ((sample_type &PERF_SAMPLE_REGS_USER ) && + (attr->sample_regs_user &PEBS_GP_REGS )); tsx_weight = (sample_type & PERF_SAMPLE_WEIGHT_TYPE) && ((attr->config & INTEL_ARCH_EVENT_MASK) ==
@@ -1792,7 +1794,7 @@ static void setup_pebs_adaptive_sample_data(struct perf_event *event, regs->flags &= ~PERF_EFLAGS_EXACT ; } -if (sample_type &PERF_SAMPLE_REGS_INTR ) +if (sample_type & (PERF_SAMPLE_REGS_INTR |PERF_SAMPLE_REGS_USER ))adaptive_pebs_save_regs (regs, gprs); }
arch/x86/events/intel/uncore_snbep.c +10 -97
151 lines not on this page · raw message
arch/x86/kernel/cpu/amd.c +1 -1
@@ -787,7 +787,7 @@ static void init_amd_k8(struct cpuinfo_x86 *c)* (model = 0x14) and later actually support it. * (AMD Erratum #110, docId: 25759). */ -if (c->x86_model <0x14 &&cpu_has (c,X86_FEATURE_LAHF_LM )) { +if (c->x86_model <0x14 &&cpu_has (c,X86_FEATURE_LAHF_LM ) && !cpu_has (c,X86_FEATURE_HYPERVISOR )) {clear_cpu_cap (c,X86_FEATURE_LAHF_LM );if (!rdmsrl_amd_safe (0xc001100d , &value)) { value &= ~BIT_64 (32 );
arch/x86/kernel/cpu/intel.c +16 -4
@@ -1204,7 +1204,13 @@ static void __split_lock_reenable(struct work_struct *work) {sld_update_msr (true); } -static DECLARE_DELAYED_WORK(sl_reenable, __split_lock_reenable); +/* +* In order for each CPU to schedule its delayed work independently of the +* others, delayed work struct must be per-CPU. This is not required when +* sysctl_sld_mitigate is enabled because of the semaphore that limits +* the number of simultaneously scheduled delayed works to 1. +*/ +static DEFINE_PER_CPU(struct delayed_work, sl_reenable);/* * If a CPU goes offline with pending delayed work to re-enable split lock
@@ -1225,7 +1231,7 @@ static int splitlock_cpu_offline(unsigned int cpu)static void split_lock_warn (unsigned long ip) { -struct delayed_work *work; +struct delayed_work *work =NULL ;int cpu;if (!current->reported_split_lock)
@@ -1247,11 +1253,17 @@ static void split_lock_warn(unsigned long ip)if (down_interruptible (&buslock_sem) == -EINTR )return ; work = &sl_reenable_unlock; - }else { - work = &sl_reenable; } cpu =get_cpu (); + +if (!work) { + work =this_cpu_ptr (&sl_reenable); +/* Deferred initialization of per-CPU struct */ +if (!work->work.func) +INIT_DELAYED_WORK (work, __split_lock_reenable); + } +schedule_delayed_work_on (cpu, work,2 );/* Disable split lock detection on this CPU to make progress */
arch/x86/kernel/e820.c +8 -9
@@ -753,22 +753,21 @@ void __init e820__memory_setup_extended(u64 phys_addr, u32 data_len)void __init e820__register_nosave_regions (unsigned long limit_pfn) {int i; -unsigned long pfn =0 ; +u64 last_addr =0 ;for (i =0 ; i < e820_table->nr_entries; i++) {struct e820_entry *entry = &e820_table->entries[i]; -if (pfn <PFN_UP (entry->addr)) -register_nosave_region (pfn,PFN_UP (entry->addr)); - - pfn =PFN_DOWN (entry->addr + entry->size); -if (entry->type !=E820_TYPE_RAM && entry->type !=E820_TYPE_RESERVED_KERN ) -register_nosave_region (PFN_UP (entry->addr), pfn); +continue ; -if (pfn >= limit_pfn) -break ; +if (last_addr < entry->addr) +register_nosave_region (PFN_DOWN (last_addr),PFN_UP (entry->addr)); + + last_addr = entry->addr + entry->size; } + +register_nosave_region (PFN_DOWN (last_addr), limit_pfn); }#ifdef CONFIG_ACPI
arch/x86/kvm/x86.c +4 -0
@@ -11460,6 +11460,8 @@ int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,if (kvm_mpx_supported ())kvm_load_guest_fpu (vcpu); +kvm_vcpu_srcu_read_lock (vcpu); + r =kvm_apic_accept_events (vcpu);if (r <0 ) goto out;
@@ -11473,6 +11475,8 @@ int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, mp_state->mp_state = vcpu->arch.mp_state; out: +kvm_vcpu_srcu_read_unlock (vcpu); +if (kvm_mpx_supported ())kvm_put_guest_fpu (vcpu);vcpu_put (vcpu);
arch/x86/platform/pvh/head.S +6 -1
@@ -100,7 +100,12 @@ SYM_CODE_START_LOCAL(pvh_start_xen) xor %edx, %edx wrmsr - call xen_prepare_pvh + /* Call xen_prepare_pvh() via the kernel virtual mapping */ + leaq xen_prepare_pvh(%rip), %rax + subq phys_base(%rip), %rax + addq $__START_KERNEL_map, %rax + ANNOTATE_RETPOLINE_SAFE + call *%rax /* startup_64 expects boot_params in %rsi. */ mov $_pa(pvh_bootparams), %rsi
block/blk-cgroup.c +17 -7
@@ -255,6 +255,7 @@ static struct blkcg_gq *blkg_alloc(struct blkcg *blkcg, struct gendisk *disk, blkg->pd[i] = pd; pd->blkg = blkg; pd->plid = i; + pd->online = false; }return blkg;
@@ -326,8 +327,11 @@ static struct blkcg_gq *blkg_create(struct blkcg *blkcg, struct gendisk *disk,for (i =0 ; i <BLKCG_MAX_POLS ; i++) {struct blkcg_policy *pol = blkcg_policy[i]; -if (blkg->pd[i] && pol->pd_online_fn) - pol->pd_online_fn (blkg->pd[i]); +if (blkg->pd[i]) { +if (pol->pd_online_fn) + pol->pd_online_fn (blkg->pd[i]); + blkg->pd[i]->online = true; + } } } blkg->online = true;
@@ -432,8 +436,11 @@ static void blkg_destroy(struct blkcg_gq *blkg)for (i =0 ; i <BLKCG_MAX_POLS ; i++) {struct blkcg_policy *pol = blkcg_policy[i]; -if (blkg->pd[i] && pol->pd_offline_fn) - pol->pd_offline_fn (blkg->pd[i]); +if (blkg->pd[i] && blkg->pd[i]->online) { +if (pol->pd_offline_fn) + pol->pd_offline_fn (blkg->pd[i]); + blkg->pd[i]->online = false; + } } blkg->online = false;
@@ -1422,6 +1429,7 @@ int blkcg_activate_policy(struct request_queue *q, blkg->pd[pol->plid] = pd; pd->blkg = blkg; pd->plid = pol->plid; + pd->online = false; }/* all allocated, init in the same order */
@@ -1429,9 +1437,11 @@ int blkcg_activate_policy(struct request_queue *q,list_for_each_entry_reverse (blkg, &q->blkg_list, q_node) pol->pd_init_fn (blkg->pd[pol->plid]); -if (pol->pd_online_fn) -list_for_each_entry_reverse (blkg, &q->blkg_list, q_node) +list_for_each_entry_reverse (blkg, &q->blkg_list, q_node) { +if (pol->pd_online_fn) pol->pd_online_fn (blkg->pd[pol->plid]); + blkg->pd[pol->plid]->online = true; + }__set_bit (pol->plid, q->blkcg_pols); ret =0 ;
@@ -1493,7 +1503,7 @@ void blkcg_deactivate_policy(struct request_queue *q,spin_lock (&blkcg->lock);if (blkg->pd[pol->plid]) { -if (pol->pd_offline_fn) +if (blkg->pd[pol->plid]->online && pol->pd_offline_fn) pol->pd_offline_fn (blkg->pd[pol->plid]); pol->pd_free_fn (blkg->pd[pol->plid]); blkg->pd[pol->plid] =NULL ;
block/blk-cgroup.h +1 -0
@@ -125,6 +125,7 @@ struct blkg_policy_data {/* the blkg and policy id this per-policy data belongs to */ struct blkcg_gq *blkg;int plid; +bool online; };/*
block/blk-iocost.c +5 -2
@@ -1430,8 +1430,11 @@ static void iocg_pay_debt(struct ioc_gq *iocg, u64 abs_vpay,lockdep_assert_held (&iocg->ioc->lock);lockdep_assert_held (&iocg->waitq.lock); -/* make sure that nobody messed with @iocg */ -WARN_ON_ONCE (list_empty (&iocg->active_list)); +/* +* make sure that nobody messed with @iocg. Check iocg->pd.online +* to avoid warn when removing blkcg or disk. +*/ +WARN_ON_ONCE (list_empty (&iocg->active_list) && iocg->pd.online);WARN_ON_ONCE (iocg->inuse >1 ); iocg->abs_vdebt -=min (abs_vpay, iocg->abs_vdebt);
certs/Makefile +1 -1
@@ -84,5 +84,5 @@ targets += x509_revocation_list hostprogs := extract-cert -HOSTCFLAGS_extract-cert.o = $(shell $(HOSTPKG_CONFIG) --cflags libcrypto 2> /dev/null) +HOSTCFLAGS_extract-cert.o = $(shell $(HOSTPKG_CONFIG) --cflags libcrypto 2> /dev/null) -I$(srctree)/scripts HOSTLDLIBS_extract-cert = $(shell $(HOSTPKG_CONFIG) --libs libcrypto 2> /dev/null || echo -lcrypto)
certs/extract-cert.c +74 -64
163 lines not on this page · raw message
drivers/acpi/platform_profile.c +10 -10
@@ -22,8 +22,8 @@ static const char * const profile_names[] = { };static_assert (ARRAY_SIZE (profile_names) ==PLATFORM_PROFILE_LAST ); -static ssize_t platform_profile_choices_show (struct device *dev, -struct device_attribute *attr, +static ssize_t platform_profile_choices_show (struct kobject *kobj, +struct kobj_attribute *attr,char *buf) {int len =0 ;
@@ -49,8 +49,8 @@ static ssize_t platform_profile_choices_show(struct device *dev,return len; } -static ssize_t platform_profile_show (struct device *dev, -struct device_attribute *attr, +static ssize_t platform_profile_show (struct kobject *kobj, +struct kobj_attribute *attr,char *buf) {enum platform_profile_option profile =PLATFORM_PROFILE_BALANCED ;
@@ -77,8 +77,8 @@ static ssize_t platform_profile_show(struct device *dev,return sysfs_emit (buf,"%s\n" , profile_names[profile]); } -static ssize_t platform_profile_store (struct device *dev, -struct device_attribute *attr, +static ssize_t platform_profile_store (struct kobject *kobj, +struct kobj_attribute *attr,const char *buf,size_t count) {int err, i;
@@ -115,12 +115,12 @@ static ssize_t platform_profile_store(struct device *dev,return count; } -static DEVICE_ATTR_RO (platform_profile_choices); -static DEVICE_ATTR_RW (platform_profile); +static struct kobj_attribute attr_platform_profile_choices =__ATTR_RO (platform_profile_choices); +static struct kobj_attribute attr_platform_profile =__ATTR_RW (platform_profile);static struct attribute *platform_profile_attrs[] = { - &dev_attr_platform_profile_choices.attr, - &dev_attr_platform_profile.attr, + &attr_platform_profile_choices.attr, + &attr_platform_profile.attr,NULL };
drivers/ata/ahci.c +2 -0
@@ -592,6 +592,8 @@ static const struct pci_device_id ahci_pci_tbl[] = { .driver_data = board_ahci_yes_fbs }, { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a3), .driver_data = board_ahci_yes_fbs }, + { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9215), + .driver_data = board_ahci_yes_fbs }, { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9230), .driver_data = board_ahci_yes_fbs }, { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9235),
drivers/ata/libata-eh.c +9 -2
@@ -1510,8 +1510,15 @@ unsigned int atapi_eh_request_sense(struct ata_device *dev, tf.flags |=ATA_TFLAG_ISADDR |ATA_TFLAG_DEVICE ; tf.command =ATA_CMD_PACKET ; -/* is it pointless to prefer PIO for "safety reasons"? */ -if (ap->flags &ATA_FLAG_PIO_DMA ) { +/* +* Do not use DMA if the connected device only supports PIO, even if the +* port prefers PIO commands via DMA. +* +* Ideally, we should call atapi_check_dma() to check if it is safe for +* the LLD to use DMA for REQUEST_SENSE, but we don't have a qc. +* Since we can't check the command, perhaps we should only use pio? +*/ +if ((ap->flags &ATA_FLAG_PIO_DMA ) && !(dev->flags &ATA_DFLAG_PIO )) { tf.protocol =ATAPI_PROT_DMA ; tf.feature |=ATAPI_PKT_DMA ; }else {
drivers/ata/pata_pxa.c +6 -0
@@ -223,10 +223,16 @@ static int pxa_ata_probe(struct platform_device *pdev) ap->ioaddr.cmd_addr =devm_ioremap (&pdev->dev, cmd_res->start,resource_size (cmd_res)); +if (!ap->ioaddr.cmd_addr) +return -ENOMEM ; ap->ioaddr.ctl_addr =devm_ioremap (&pdev->dev, ctl_res->start,resource_size (ctl_res)); +if (!ap->ioaddr.ctl_addr) +return -ENOMEM ; ap->ioaddr.bmdma_addr =devm_ioremap (&pdev->dev, dma_res->start,resource_size (dma_res)); +if (!ap->ioaddr.bmdma_addr) +return -ENOMEM ;/* * Adjust register offsets
drivers/ata/sata_sx4.c +10 -3
@@ -1118,9 +1118,14 @@ static int pdc20621_prog_dimm0(struct ata_host *host) mmio +=PDC_CHIP0_OFS ;for (i =0 ; i <ARRAY_SIZE (pdc_i2c_read_data); i++) -pdc20621_i2c_read (host,PDC_DIMM0_SPD_DEV_ADDRESS , - pdc_i2c_read_data[i].reg, - &spd0[pdc_i2c_read_data[i].ofs]); +if (!pdc20621_i2c_read (host,PDC_DIMM0_SPD_DEV_ADDRESS , + pdc_i2c_read_data[i].reg, + &spd0[pdc_i2c_read_data[i].ofs])) { +dev_err (host->dev, +"Failed in i2c read at index %d: device=%#x, reg=%#x\n" , + i,PDC_DIMM0_SPD_DEV_ADDRESS , pdc_i2c_read_data[i].reg); +return -EIO ; + } data |= (spd0[4 ] -8 ) | ((spd0[21 ] !=0 ) <<3 ) | ((spd0[3 ]-11 ) <<4 ); data |= ((spd0[17] / 4) << 6) | ((spd0[5] / 2) << 7) |
@@ -1285,6 +1290,8 @@ static unsigned int pdc20621_dimm_init(struct ata_host *host)/* Programming DIMM0 Module Control Register (index_CID0:80h) */ size =pdc20621_prog_dimm0 (host); +if (size <0 ) +return size;dev_dbg (host->dev,"Local DIMM Size = %dMB\n" , size);/* Programming DIMM Module Global Control Register (index_CID0:88h) */
drivers/base/devres.c +7 -0
@@ -684,6 +684,13 @@ int devres_release_group(struct device *dev, void *id)spin_unlock_irqrestore (&dev->devres_lock, flags);release_nodes (dev, &todo); + }else if (list_empty (&dev->devres_head)) { +/* +* dev is probably dying via devres_release_all(): groups +* have already been removed and are on the process of +* being released - don't touch and don't warn. +*/ +spin_unlock_irqrestore (&dev->devres_lock, flags); }else {WARN_ON (1 );spin_unlock_irqrestore (&dev->devres_lock, flags);
drivers/block/loop.c +4 -3
@@ -624,19 +624,20 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,* dependency. */ fput (old_file); +dev_set_uevent_suppress (disk_to_dev (lo->lo_disk),0 );if (partscan)loop_reread_partitions (lo); error =0 ; done: -/* enable and uncork uevent now that we are done */ -dev_set_uevent_suppress (disk_to_dev (lo->lo_disk),0 ); +kobject_uevent (&disk_to_dev (lo->lo_disk)->kobj,KOBJ_CHANGE );return error; out_err:loop_global_unlock (lo, is_loop); out_putf:fput (file); +dev_set_uevent_suppress (disk_to_dev (lo->lo_disk),0 ); goto done; }
@@ -1104,8 +1105,8 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,if (partscan)clear_bit (GD_SUPPRESS_PART_SCAN , &lo->lo_disk->state); -/* enable and uncork uevent now that we are done */ dev_set_uevent_suppress (disk_to_dev (lo->lo_disk),0 ); +kobject_uevent (&disk_to_dev (lo->lo_disk)->kobj,KOBJ_CHANGE );loop_global_unlock (lo, is_loop);if (partscan)
drivers/bluetooth/btqca.c +6 -7
@@ -807,6 +807,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, const char *firmware_name) {struct qca_fw_config config = {}; +const char *variant ="" ;int err;u8 rom_ver =0 ;u32 soc_ver;
@@ -901,13 +902,11 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,case QCA_WCN3990 :case QCA_WCN3991 :case QCA_WCN3998 : -if (le32_to_cpu (ver.soc_id) ==QCA_WCN3991_SOC_ID ) { -snprintf (config.fwname,sizeof (config.fwname), -"qca/crnv%02xu.bin" , rom_ver); - }else { -snprintf (config.fwname,sizeof (config.fwname), -"qca/crnv%02x.bin" , rom_ver); - } +if (le32_to_cpu (ver.soc_id) ==QCA_WCN3991_SOC_ID ) + variant ="u" ; + +snprintf (config.fwname,sizeof (config.fwname), +"qca/crnv%02x%s.bin" , rom_ver, variant);break ;case QCA_WCN3988 : snprintf(config.fwname, sizeof(config.fwname),
drivers/bluetooth/btrtl.c +2 -0
@@ -817,6 +817,8 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,rtl_dev_err (hdev,"mandatory config file %s not found" , btrtl_dev->ic_info->cfg_name); ret = btrtl_dev->cfg_len; +if (!ret) + ret = -EINVAL ; goto err_free; } }
drivers/bluetooth/hci_ldisc.c +14 -5
@@ -102,7 +102,8 @@ static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu)if (!skb) {percpu_down_read (&hu->proto_lock); -if (test_bit (HCI_UART_PROTO_READY , &hu->flags)) +if (test_bit (HCI_UART_PROTO_READY , &hu->flags) || +test_bit (HCI_UART_PROTO_INIT , &hu->flags)) skb = hu->proto->dequeue (hu);percpu_up_read (&hu->proto_lock);
@@ -124,7 +125,8 @@ int hci_uart_tx_wakeup(struct hci_uart *hu)if (!percpu_down_read_trylock (&hu->proto_lock))return 0 ; -if (!test_bit (HCI_UART_PROTO_READY , &hu->flags)) +if (!test_bit (HCI_UART_PROTO_READY , &hu->flags) && + !test_bit (HCI_UART_PROTO_INIT , &hu->flags)) goto no_schedule;set_bit (HCI_UART_TX_WAKEUP , &hu->tx_state);
@@ -278,7 +280,8 @@ static int hci_uart_send_frame(struct hci_dev *hdev, struct sk_buff *skb)percpu_down_read (&hu->proto_lock); -if (!test_bit (HCI_UART_PROTO_READY , &hu->flags)) { +if (!test_bit (HCI_UART_PROTO_READY , &hu->flags) && + !test_bit (HCI_UART_PROTO_INIT , &hu->flags)) {percpu_up_read (&hu->proto_lock);return -EUNATCH ; }
@@ -582,7 +585,8 @@ static void hci_uart_tty_wakeup(struct tty_struct *tty)if (tty != hu->tty)return ; -if (test_bit (HCI_UART_PROTO_READY , &hu->flags)) +if (test_bit (HCI_UART_PROTO_READY , &hu->flags) || +test_bit (HCI_UART_PROTO_INIT , &hu->flags))hci_uart_tx_wakeup (hu); }
@@ -608,7 +612,8 @@ static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data,percpu_down_read (&hu->proto_lock); -if (!test_bit (HCI_UART_PROTO_READY , &hu->flags)) { +if (!test_bit (HCI_UART_PROTO_READY , &hu->flags) && + !test_bit (HCI_UART_PROTO_INIT , &hu->flags)) {percpu_up_read (&hu->proto_lock);return ; }
@@ -709,12 +714,16 @@ static int hci_uart_set_proto(struct hci_uart *hu, int id) hu->proto = p; +set_bit (HCI_UART_PROTO_INIT , &hu->flags); + err =hci_uart_register_dev (hu);if (err) {return err; }set_bit (HCI_UART_PROTO_READY , &hu->flags); +clear_bit (HCI_UART_PROTO_INIT , &hu->flags); +return 0 ; }
drivers/bluetooth/hci_uart.h +1 -0
@@ -90,6 +90,7 @@ struct hci_uart {#define HCI_UART_REGISTERED 1#define HCI_UART_PROTO_READY 2#define HCI_UART_NO_SUSPEND_NOTIFIER 3 +#define HCI_UART_PROTO_INIT 4/* TX states */ #define HCI_UART_SENDING 1
drivers/bus/mhi/host/main.c +10 -6
@@ -1201,11 +1201,16 @@ int mhi_gen_tre(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan,struct mhi_ring_element *mhi_tre;struct mhi_buf_info *buf_info;int eot, eob, chain, bei; -int ret; +int ret =0 ;/* Protect accesses for reading and incrementing WP */ write_lock_bh (&mhi_chan->lock); +if (mhi_chan->ch_state !=MHI_CH_STATE_ENABLED ) { + ret = -ENODEV ; + goto out; + } + buf_ring = &mhi_chan->buf_ring; tre_ring = &mhi_chan->tre_ring;
@@ -1223,10 +1228,8 @@ int mhi_gen_tre(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan,if (!info->pre_mapped) { ret = mhi_cntrl->map_single (mhi_cntrl, buf_info); -if (ret) { -write_unlock_bh (&mhi_chan->lock); -return ret; - } +if (ret) + goto out; } eob = !!(flags &MHI_EOB );
@@ -1243,9 +1246,10 @@ int mhi_gen_tre(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan,mhi_add_ring_element (mhi_cntrl, tre_ring);mhi_add_ring_element (mhi_cntrl, buf_ring); +out:write_unlock_bh (&mhi_chan->lock); -return 0 ; +return ret; } int mhi_queue_buf(struct mhi_device *mhi_dev, enum dma_data_direction dir,
drivers/char/tpm/tpm_tis_core.c +15 -5
@@ -104,11 +104,10 @@ static int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask,return 0 ;/* process status changes without irq support */ do { +usleep_range (priv->timeout_min, priv->timeout_max); status = chip->ops->status (chip);if ((status & mask) == mask)return 0 ; -usleep_range (priv->timeout_min, - priv->timeout_max); }while (time_before (jiffies, stop));return -ETIME ; }
@@ -433,7 +432,10 @@ static int tpm_tis_send_data(struct tpm_chip *chip, const u8 *buf, size_t len)if (wait_for_tpm_stat (chip,TPM_STS_VALID , chip->timeout_c, &priv->int_queue, false) <0 ) { - rc = -ETIME ; +if (test_bit (TPM_TIS_STATUS_VALID_RETRY , &priv->flags)) + rc = -EAGAIN ; +else + rc = -ETIME ; goto out_err; } status =tpm_tis_status (chip);
@@ -450,7 +452,10 @@ static int tpm_tis_send_data(struct tpm_chip *chip, const u8 *buf, size_t len)if (wait_for_tpm_stat (chip,TPM_STS_VALID , chip->timeout_c, &priv->int_queue, false) <0 ) { - rc = -ETIME ; +if (test_bit (TPM_TIS_STATUS_VALID_RETRY , &priv->flags)) + rc = -EAGAIN ; +else + rc = -ETIME ; goto out_err; } status =tpm_tis_status (chip);
@@ -505,9 +510,11 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len)if (rc >=0 )/* Data transfer done successfully */ break ; -else if (rc != -EIO ) +else if (rc != -EAGAIN && rc != -EIO )/* Data transfer failed, not recoverable */ return rc; + +usleep_range (priv->timeout_min, priv->timeout_max); } rc =tpm_tis_verify_crc (priv, len, buf);
@@ -1044,6 +1051,9 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq, priv->timeout_max =TIS_TIMEOUT_MAX_ATML ; } +if (priv->manufacturer_id ==TPM_VID_IFX ) +set_bit (TPM_TIS_STATUS_VALID_RETRY , &priv->flags); +if (is_bsw ()) { priv->ilb_base_addr =ioremap (INTEL_LEGACY_BLK_BASE_ADDR ,ILB_REMAP_SIZE );
drivers/char/tpm/tpm_tis_core.h +1 -0
@@ -88,6 +88,7 @@ enum tpm_tis_flags {TPM_TIS_INVALID_STATUS =1 ,TPM_TIS_DEFAULT_CANCELLATION =2 ,TPM_TIS_IRQ_TESTED =3 , + TPM_TIS_STATUS_VALID_RETRY = 4, }; struct tpm_tis_data {
drivers/clk/qcom/gdsc.c +38 -23
108 lines not on this page · raw message
drivers/clocksource/timer-stm32-lp.c +1 -3
@@ -168,9 +168,7 @@ static int stm32_clkevent_lp_probe(struct platform_device *pdev) }if (of_property_read_bool (pdev->dev.parent->of_node,"wakeup-source" )) { - ret =device_init_wakeup (&pdev->dev, true); -if (ret) - goto out_clk_disable; +device_set_wakeup_capable (&pdev->dev, true); ret =dev_pm_set_wake_irq (&pdev->dev, irq);if (ret)
drivers/cpufreq/cpufreq.c +8 -0
@@ -2673,10 +2673,18 @@ EXPORT_SYMBOL(cpufreq_update_policy);*/ void cpufreq_update_limits (unsigned int cpu) { +struct cpufreq_policy *policy; + + policy =cpufreq_cpu_get (cpu); +if (!policy) +return ; +if (cpufreq_driver->update_limits) cpufreq_driver->update_limits (cpu);else cpufreq_update_policy (cpu); + +cpufreq_cpu_put (policy); }EXPORT_SYMBOL_GPL (cpufreq_update_limits);
drivers/crypto/caam/qi.c +3 -3
@@ -115,12 +115,12 @@ int caam_qi_enqueue(struct device *qidev, struct caam_drv_req *req)qm_fd_addr_set64 (&fd, addr); do { + refcount_inc(&req->drv_ctx->refcnt); ret = qman_enqueue(req->drv_ctx->req_fq, &fd); - if (likely(!ret)) { - refcount_inc(&req->drv_ctx->refcnt); + if (likely(!ret)) return 0; - } + refcount_dec(&req->drv_ctx->refcnt); if (ret != -EBUSY) break; num_retries++;
drivers/crypto/ccp/sp-pci.c +9 -6
@@ -179,14 +179,17 @@ static bool sp_pci_is_master(struct sp_device *sp) pdev_new =to_pci_dev (dev_new); pdev_cur =to_pci_dev (dev_cur); -if (pdev_new->bus->number < pdev_cur->bus->number) -return true; +if (pci_domain_nr (pdev_new->bus) !=pci_domain_nr (pdev_cur->bus)) +return pci_domain_nr (pdev_new->bus) <pci_domain_nr (pdev_cur->bus); -if (PCI_SLOT (pdev_new->devfn) <PCI_SLOT (pdev_cur->devfn)) -return true; +if (pdev_new->bus->number != pdev_cur->bus->number) +return pdev_new->bus->number < pdev_cur->bus->number; -if (PCI_FUNC (pdev_new->devfn) <PCI_FUNC (pdev_cur->devfn)) -return true; +if (PCI_SLOT (pdev_new->devfn) !=PCI_SLOT (pdev_cur->devfn)) +return PCI_SLOT (pdev_new->devfn) <PCI_SLOT (pdev_cur->devfn); + +if (PCI_FUNC (pdev_new->devfn) !=PCI_FUNC (pdev_cur->devfn)) +return PCI_FUNC (pdev_new->devfn) <PCI_FUNC (pdev_cur->devfn);return false; }
drivers/gpio/gpio-tegra186.c +14 -13
@@ -753,6 +753,7 @@ static int tegra186_gpio_probe(struct platform_device *pdev)struct gpio_irq_chip *irq;struct tegra_gpio *gpio;struct device_node *np; +struct resource *res;char **names;int err;
@@ -772,19 +773,19 @@ static int tegra186_gpio_probe(struct platform_device *pdev) gpio->num_banks++;/* get register apertures */ - gpio->secure =devm_platform_ioremap_resource_byname (pdev,"security" ); -if (IS_ERR (gpio->secure)) { - gpio->secure =devm_platform_ioremap_resource (pdev,0 ); -if (IS_ERR (gpio->secure)) -return PTR_ERR (gpio->secure); - } - - gpio->base =devm_platform_ioremap_resource_byname (pdev,"gpio" ); -if (IS_ERR (gpio->base)) { - gpio->base =devm_platform_ioremap_resource (pdev,1 ); -if (IS_ERR (gpio->base)) -return PTR_ERR (gpio->base); - } + res =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"security" ); +if (!res) + res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + gpio->secure =devm_ioremap_resource (&pdev->dev, res); +if (IS_ERR (gpio->secure)) +return PTR_ERR (gpio->secure); + + res =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"gpio" ); +if (!res) + res =platform_get_resource (pdev,IORESOURCE_MEM ,1 ); + gpio->base =devm_ioremap_resource (&pdev->dev, res); +if (IS_ERR (gpio->base)) +return PTR_ERR (gpio->base); err =platform_irq_count (pdev);if (err <0 )
drivers/gpio/gpio-zynq.c +1 -0
@@ -1012,6 +1012,7 @@ static int zynq_gpio_remove(struct platform_device *pdev) ret =pm_runtime_get_sync (&pdev->dev);if (ret <0 )dev_warn (&pdev->dev,"pm_runtime_get_sync() Failed\n" ); +device_init_wakeup (&pdev->dev,0 );gpiochip_remove (&gpio->chip);clk_disable_unprepare (gpio->clk);device_set_wakeup_capable (&pdev->dev,0 );
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +9 -1
@@ -6186,6 +6186,7 @@ struct dma_fence *amdgpu_device_switch_gang(struct amdgpu_device *adev, {struct dma_fence *old =NULL ; +dma_fence_get (gang); do { dma_fence_put(old); rcu_read_lock();
@@ -6195,12 +6196,19 @@ struct dma_fence *amdgpu_device_switch_gang(struct amdgpu_device *adev,if (old == gang)break ; -if (!dma_fence_is_signaled (old)) +if (!dma_fence_is_signaled (old)) { +dma_fence_put (gang);return old; + } }while (cmpxchg ((struct dma_fence __force **)&adev->gang_submit, old, gang) != old); +/* +* Drop it once for the exchanged reference in adev and once for the +* thread local reference acquired in amdgpu_device_get_gang(). +*/ +dma_fence_put (old);dma_fence_put (old);return NULL ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c +1 -1
@@ -210,7 +210,7 @@ static void amdgpu_dma_buf_unmap(struct dma_buf_attachment *attach, struct sg_table *sgt, enum dma_data_direction dir) { -if (sgt->sgl->page_link) { + if (sg_page(sgt->sgl)) {dma_unmap_sgtable (attach->dev, sgt, dir,0 );sg_free_table (sgt);kfree (sgt);
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +24 -20
84 lines not on this page · raw message
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +10 -0
@@ -208,6 +208,11 @@ static int set_queue_properties_from_user(struct queue_properties *q_properties,return -EINVAL ; } +if (args->ring_size <KFD_MIN_QUEUE_RING_SIZE ) { + args->ring_size =KFD_MIN_QUEUE_RING_SIZE ; +pr_debug ("Size lower. clamped to KFD_MIN_QUEUE_RING_SIZE" ); + } +if (!access_ok ((const void __user *) args->read_pointer_address,sizeof (uint32_t ))) {pr_err ("Can't access read pointer\n" );
@@ -464,6 +469,11 @@ static int kfd_ioctl_update_queue(struct file *filp, struct kfd_process *p,return -EINVAL ; } +if (args->ring_size <KFD_MIN_QUEUE_RING_SIZE ) { + args->ring_size =KFD_MIN_QUEUE_RING_SIZE ; +pr_debug ("Size lower. clamped to KFD_MIN_QUEUE_RING_SIZE" ); + } + properties.queue_address = args->ring_base_address; properties.queue_size = args->ring_size; properties.queue_percent = args->queue_percentage;
drivers/gpu/drm/amd/amdkfd/kfd_process.c +17 -0
@@ -36,6 +36,7 @@#include <linux/pm_runtime.h> #include "amdgpu_amdkfd.h" #include "amdgpu.h" +#include "amdgpu_reset.h" struct mm_struct ;
@@ -1114,6 +1115,17 @@ static void kfd_process_remove_sysfs(struct kfd_process *p) p->kobj =NULL ; } +/* +* If any GPU is ongoing reset, wait for reset complete. +*/ +static void kfd_process_wait_gpu_reset_complete (struct kfd_process *p) +{ +int i; + +for (i =0 ; i < p->n_pdds; i++) +flush_workqueue (p->pdds[i]->dev->adev->reset_domain->wq); +} +/* No process locking is needed in this function, because the process * is not findable any more. We must assume that no other thread is * using it any more, otherwise we couldn't safely free the process
@@ -1127,6 +1139,11 @@ static void kfd_process_wq_release(struct work_struct *work)kfd_process_dequeue_from_all_devices (p);pqm_uninit (&p->pqm); +/* +* If GPU in reset, user queues may still running, wait for reset complete. +*/ +kfd_process_wait_gpu_reset_complete (p); +/* Signal the eviction fence after user mode queues are * destroyed. This allows any BOs to be freed without * triggering pointless evictions or waiting for fences.
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +1 -1
@@ -429,7 +429,7 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid)pr_err ("Pasid 0x%x destroy queue %d failed, ret %d\n" , pqm->process->pasid, pqn->q->properties.queue_id, retval); -if (retval != -ETIME ) +if (retval != -ETIME && retval != -EIO ) goto err_destroy_queue; }
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +7 -7
@@ -4499,17 +4499,17 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev) } } +if (link_cnt > (MAX_PIPES *2 )) { +DRM_ERROR ( +"KMS: Cannot support more than %d display indexes\n" , +MAX_PIPES *2 ); + goto fail; + } +/* loops over all connectors on the board */ for (i =0 ; i < link_cnt; i++) {struct dc_link *link =NULL ; -if (i >AMDGPU_DM_MAX_DISPLAY_INDEX ) { -DRM_ERROR ( -"KMS: Cannot support more than %d display indexes\n" , -AMDGPU_DM_MAX_DISPLAY_INDEX ); -continue ; - } - aconnector =kzalloc (sizeof (*aconnector),GFP_KERNEL );if (!aconnector) goto fail;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +9 -13
@@ -1947,20 +1947,11 @@ static void delay_cursor_until_vupdate(struct dc *dc, struct pipe_ctx *pipe_ctx) dc->hwss.get_position (&pipe_ctx,1 , &position); vpos = position.vertical_count; -/* Avoid wraparound calculation issues */ - vupdate_start += stream->timing.v_total; - vupdate_end += stream->timing.v_total; - vpos += stream->timing.v_total; -if (vpos <= vupdate_start) {/* VPOS is in VACTIVE or back porch. */ lines_to_vupdate = vupdate_start - vpos; - }else if (vpos > vupdate_end) { -/* VPOS is in the front porch. */ -return ; }else { -/* VPOS is in VUPDATE. */ - lines_to_vupdate =0 ; + lines_to_vupdate = stream->timing.v_total - vpos + vupdate_start; }/* Calculate time until VUPDATE in microseconds. */
@@ -1968,13 +1959,18 @@ static void delay_cursor_until_vupdate(struct dc *dc, struct pipe_ctx *pipe_ctx) stream->timing.h_total *10000u / stream->timing.pix_clk_100hz; us_to_vupdate = lines_to_vupdate * us_per_line; +/* Stall out until the cursor update completes. */ +if (vupdate_end < vupdate_start) + vupdate_end += stream->timing.v_total; + +/* Position is in the range of vupdate start and end*/ +if (lines_to_vupdate > stream->timing.v_total - vupdate_end + vupdate_start) + us_to_vupdate =0 ; +/* 70 us is a conservative estimate of cursor update time*/ if (us_to_vupdate >70 )return ; -/* Stall out until the cursor update completes. */ -if (vupdate_end < vupdate_start) - vupdate_end += stream->timing.v_total; us_vupdate = (vupdate_end - vupdate_start +1 ) * us_per_line;udelay (us_to_vupdate + us_vupdate); }
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.c +1 -1
@@ -44,7 +44,7 @@ void hubp31_set_unbounded_requesting(struct hubp *hubp, bool enable)struct dcn20_hubp *hubp2 =TO_DCN20_HUBP (hubp);REG_UPDATE (DCHUBP_CNTL ,HUBP_UNBOUNDED_REQ_MODE , enable); -REG_UPDATE (CURSOR_CONTROL ,CURSOR_REQ_MODE , enable); +REG_UPDATE (CURSOR_CONTROL ,CURSOR_REQ_MODE ,1 ); }void hubp31_soft_reset (struct hubp *hubp,bool reset)
drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c +5 -0
@@ -51,6 +51,11 @@ static int amd_powerplay_create(struct amdgpu_device *adev) hwmgr->adev = adev; hwmgr->not_vf = !amdgpu_sriov_vf (adev); hwmgr->device =amdgpu_cgs_create_device (adev); +if (!hwmgr->device) { +kfree (hwmgr); +return -ENOMEM ; + } +mutex_init (&hwmgr->msg_lock); hwmgr->chip_family = adev->family; hwmgr->chip_id = adev->asic_type;
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_thermal.c +2 -2
@@ -267,10 +267,10 @@ int smu7_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed)if (hwmgr->thermal_controller.fanInfo.bNoFan || (hwmgr->thermal_controller.fanInfo. ucTachometerPulsesPerRevolution ==0 ) || - speed ==0 || + (!speed || speed >UINT_MAX /8 ) || (speed < hwmgr->thermal_controller.fanInfo.ulMinRPM) || (speed > hwmgr->thermal_controller.fanInfo.ulMaxRPM)) -return 0 ; +return -EINVAL ;if (PP_CAP (PHM_PlatformCaps_MicrocodeFanControl))smu7_fan_ctrl_stop_smc_fan_control (hwmgr);
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_thermal.c +2 -2
@@ -307,10 +307,10 @@ int vega10_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed)int result =0 ;if (hwmgr->thermal_controller.fanInfo.bNoFan || - speed ==0 || + (!speed || speed >UINT_MAX /8 ) || (speed < hwmgr->thermal_controller.fanInfo.ulMinRPM) || (speed > hwmgr->thermal_controller.fanInfo.ulMaxRPM)) -return -1 ; +return -EINVAL ;if (PP_CAP (PHM_PlatformCaps_MicrocodeFanControl)) result =vega10_fan_ctrl_stop_smc_fan_control (hwmgr);
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_thermal.c +1 -1
@@ -191,7 +191,7 @@ int vega20_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed)uint32_t tach_period, crystal_clock_freq;int result =0 ; -if (!speed) +if (!speed || speed >UINT_MAX /8 )return -EINVAL ;if (PP_CAP (PHM_PlatformCaps_MicrocodeFanControl)) {
drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c +3 -0
@@ -1273,6 +1273,9 @@ static int arcturus_set_fan_speed_rpm(struct smu_context *smu,uint32_t crystal_clock_freq =2500 ;uint32_t tach_period; +if (!speed || speed >UINT_MAX /8 ) +return -EINVAL ; + tach_period =60 * crystal_clock_freq *10000 / (8 * speed); WREG32_SOC15(THM, 0, mmCG_TACH_CTRL_ARCT, REG_SET_FIELD(RREG32_SOC15(THM, 0, mmCG_TACH_CTRL_ARCT),
drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c +1 -1
@@ -1228,7 +1228,7 @@ int smu_v11_0_set_fan_speed_rpm(struct smu_context *smu,uint32_t crystal_clock_freq =2500 ;uint32_t tach_period; -if (speed ==0 ) +if (!speed || speed >UINT_MAX /8 )return -EINVAL ;/* * To prevent from possible overheat, some ASICs may have requirement
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c +1 -1
@@ -1265,7 +1265,7 @@ int smu_v13_0_set_fan_speed_rpm(struct smu_context *smu,uint32_t tach_period;int ret; -if (!speed) +if (!speed || speed >UINT_MAX /8 )return -EINVAL ; ret =smu_v13_0_auto_fan_control (smu,0 );
drivers/gpu/drm/drm_atomic_helper.c +1 -1
@@ -1389,7 +1389,7 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state) mode = &new_crtc_state->mode; adjusted_mode = &new_crtc_state->adjusted_mode; -if (!new_crtc_state->mode_changed) +if (!new_crtc_state->mode_changed && !new_crtc_state->connectors_changed)continue ; drm_dbg_atomic(dev, "modeset on [ENCODER:%d:%s]\n",
drivers/gpu/drm/drm_panel.c +4 -1
@@ -49,7 +49,7 @@ static LIST_HEAD(panel_list);* @dev: parent device of the panel * @funcs: panel operations * @connector_type: the connector type (DRM_MODE_CONNECTOR_*) corresponding to -* the panel interface +* the panel interface (must NOT be DRM_MODE_CONNECTOR_Unknown) * * Initialize the panel structure for subsequent registration with * drm_panel_add().
@@ -57,6 +57,9 @@ static LIST_HEAD(panel_list);void drm_panel_init (struct drm_panel *panel,struct device *dev,const struct drm_panel_funcs *funcs,int connector_type) { +if (connector_type == DRM_MODE_CONNECTOR_Unknown) +DRM_WARN ("%s: %s: a valid connector type is required!\n" , __func__,dev_name (dev)); +INIT_LIST_HEAD (&panel->list); panel->dev = dev; panel->funcs = funcs;
drivers/gpu/drm/drm_panel_orientation_quirks.c +44 -2
58 lines not on this page · raw message
drivers/gpu/drm/msm/adreno/a6xx_gmu.c +39 -33
72 lines not on this page · raw message
drivers/hid/usbhid/hid-pidff.c +41 -19
60 lines not on this page · raw message
drivers/i2c/busses/i2c-cros-ec-tunnel.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/infiniband/hw/hns/hns_roce_main.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/infiniband/hw/usnic/usnic_ib_main.c +7 -7
Lines of this file are not shown. View the raw message.
drivers/md/md.c +30 -20
50 lines not on this page · raw message
drivers/media/common/siano/smsdvb-main.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/media/platform/qcom/venus/hfi_parser.c +74 -26
100 lines not on this page · raw message
drivers/media/platform/qcom/venus/hfi_venus.c +16 -2
Lines of this file are not shown. View the raw message.
drivers/media/platform/st/stm32/dma2d/dma2d.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/media/rc/streamzap.c +38 -30
68 lines not on this page · raw message
drivers/media/v4l2-core/v4l2-dv-timings.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/mmc/host/dw_mmc.c +92 -2
94 lines not on this page · raw message
drivers/mtd/nand/raw/brcmnand/brcmnand.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/google/gve/gve_ethtool.c +3 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/igc/igc_defines.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/igc/igc_main.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/igc/igc_ptp.c +56 -37
93 lines not on this page · raw message
drivers/net/wireless/atmel/at76c50x-usb.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/eeprom.c +4 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt76x2/usb.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/of/irq.c +46 -34
80 lines not on this page · raw message
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +12 -2
Lines of this file are not shown. View the raw message.
drivers/scsi/megaraid/megaraid_sas_base.c +7 -2
Lines of this file are not shown. View the raw message.
drivers/scsi/megaraid/megaraid_sas_fusion.c +4 -1
Lines of this file are not shown. View the raw message.
drivers/video/fbdev/omap2/omapfb/dss/dispc.c +5 -1
Lines of this file are not shown. View the raw message.
fs/ext4/inode.c +48 -20
68 lines not on this page · raw message
net/core/filter.c +44 -36
80 lines not on this page · raw message
net/sched/cls_api.c +55 -19
74 lines not on this page · raw message
net/sched/sch_sfq.c +50 -16
66 lines not on this page · raw message
scripts/sign-file.c +68 -64
132 lines not on this page · raw message
security/landlock/errata.h new file +87 -0
87 lines not on this page · raw message
sound/pci/hda/hda_intel.c +43 -1
44 lines not on this page · raw message
sound/soc/codecs/lpass-wsa-macro.c +84 -33
117 lines not on this page · raw message
sound/usb/midi.c +74 -6
80 lines not on this page · raw message
tools/testing/selftests/futex/functional/futex_wait_wouldblock.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/landlock/base_test.c +45 -1
46 lines not on this page · raw message
tools/testing/selftests/net/mptcp/mptcp_connect.c +5 -2
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.