Linux 7.2.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 7.2.11 kernel.
All users of the 7.2 kernel series must upgrade.
The updated 7.2.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-7.2.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
------------
Documentation/networking/strparser.rst | 2 Makefile | 2 arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi | 19 arch/arm64/include/asm/el2_setup.h | 5 arch/arm64/kernel/Makefile | 3 arch/riscv/Kconfig | 5 arch/riscv/Kconfig.errata | 1 arch/riscv/include/asm/futex.h | 2 arch/riscv/include/asm/scs.h | 17 arch/riscv/include/asm/vector.h | 8 arch/riscv/include/uapi/asm/vendor/mips.h | 4 arch/riscv/kernel/entry.S | 2 arch/riscv/kernel/patch.c | 2 arch/riscv/kernel/ptrace.c | 8 arch/riscv/lib/strnlen.S | 20 arch/riscv/mm/extable.c | 4 arch/um/drivers/vector_transports.c | 1 arch/x86/include/asm/cpufeatures.h | 3 arch/x86/include/asm/tlb.h | 6 arch/x86/kernel/cpu/amd.c | 4 drivers/android/binder/node.rs | 20 drivers/android/binder/node/wrapper.rs | 34 + drivers/ata/libata-scsi.c | 13 drivers/block/zloop.c | 31 - drivers/bluetooth/btintel_pcie.c | 17 drivers/clk/qcom/gcc-eliza.c | 6 drivers/clk/qcom/gcc-kaanapali.c | 6 drivers/clk/qcom/gpucc-glymur.c | 2 drivers/clk/qcom/gpucc-kaanapali.c | 2 drivers/edac/amd64_edac.c | 4 drivers/gpio/gpio-exar.c | 2 drivers/gpio/gpio-mpsse.c | 24 drivers/gpio/gpio-xilinx.c | 9 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 8 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 77 +-- drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 17 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 13 drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 9 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 32 + drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 7 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 26 - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 20 drivers/gpu/drm/aspeed/aspeed_gfx_drv.c | 5 drivers/gpu/drm/bridge/th1520-dw-hdmi.c | 8 drivers/gpu/drm/display/drm_dp_helper.c | 4 drivers/gpu/drm/drm_bridge.c | 8 drivers/gpu/drm/drm_fb_helper.c | 6 drivers/gpu/drm/gud/gud_pipe.c | 1 drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 2 drivers/gpu/drm/i915/gt/intel_rps.c | 3 drivers/gpu/drm/imagination/pvr_mmu.c | 25 drivers/gpu/drm/imagination/pvr_vm.c | 8 drivers/gpu/drm/panthor/panthor_sched.c | 3 drivers/gpu/drm/vc4/vc4_bo.c | 5 drivers/gpu/drm/vc4/vc4_drv.c | 5 drivers/gpu/drm/vc4/vc4_drv.h | 2 drivers/gpu/drm/vc4/vc4_gem.c | 8 drivers/gpu/drm/vc4/vc4_irq.c | 24 drivers/gpu/drm/vc4/vc4_v3d.c | 65 +- drivers/gpu/drm/vc4/vc4_validate.c | 2 drivers/gpu/drm/vmwgfx/vmwgfx_cursor_plane.c | 26 - drivers/gpu/drm/xe/display/xe_fb_pin.c | 6 drivers/gpu/drm/xe/xe_bo.c | 139 ++++- drivers/gpu/drm/xe/xe_bo.h | 2 drivers/gpu/drm/xe/xe_i2c.c | 5 drivers/gpu/drm/xe/xe_lrc.c | 38 - drivers/gpu/drm/xe/xe_mmio.c | 5 drivers/gpu/drm/xe/xe_sysctrl_mailbox.c | 16 drivers/hid/hid-steam.c | 246 ++++----- drivers/input/joystick/xpad.c | 4 drivers/input/misc/ati_remote2.c | 12 drivers/iommu/dma-iommu.c | 4 drivers/md/dm-crypt.c | 7 drivers/md/dm-integrity.c | 4 drivers/md/dm-ioctl.c | 14 drivers/md/dm-snap.c | 14 drivers/memstick/core/memstick.c | 8 drivers/memstick/host/rtsx_usb_ms.c | 31 - drivers/mmc/host/cavium-octeon.c | 5 drivers/mmc/host/cavium-thunderx.c | 5 drivers/mmc/host/mtk-sd.c | 1 drivers/mmc/host/sdhci-sprd.c | 4 drivers/net/amt.c | 48 - drivers/net/bareudp.c | 3 drivers/net/bonding/bond_main.c | 8 drivers/net/can/dev/skb.c | 4 drivers/net/can/usb/f81604.c | 2 drivers/net/can/vxcan.c | 3 drivers/net/dsa/microchip/ksz_common.h | 2 drivers/net/ethernet/airoha/airoha_eth.c | 32 + drivers/net/ethernet/airoha/airoha_eth.h | 2 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 189 ++++--- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c | 11 drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c | 4 drivers/net/ethernet/google/gve/gve_main.c | 8 drivers/net/ethernet/google/gve/gve_rx_dqo.c | 13 drivers/net/ethernet/ibm/ibmveth.c | 22 drivers/net/ethernet/intel/e1000e/netdev.c | 7 drivers/net/ethernet/intel/iavf/iavf.h | 11 drivers/net/ethernet/intel/iavf/iavf_main.c | 85 ++- drivers/net/ethernet/intel/iavf/iavf_virtchnl.c | 99 +++ drivers/net/ethernet/intel/ice/devlink/port.c | 2 drivers/net/ethernet/intel/ice/ice_eswitch.c | 2 drivers/net/ethernet/intel/ice/ice_txrx.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en/xsk/rx.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 13 drivers/net/ethernet/mellanox/mlx5/core/esw/adj_vport.c | 20 drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c | 79 ++- drivers/net/ethernet/mellanox/mlx5/core/vport.c | 24 drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 2 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c | 10 drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c | 9 drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c | 28 - drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c | 1 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 15 drivers/net/ethernet/xilinx/xilinx_axienet.h | 7 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 51 +- drivers/net/pfcp.c | 7 drivers/net/team/team_core.c | 16 drivers/net/team/team_mode_broadcast.c | 2 drivers/net/tun.c | 23 drivers/net/usb/ax88179_178a.c | 6 drivers/net/veth.c | 1 drivers/net/virtio_net.c | 2 drivers/net/wireguard/noise.c | 7 drivers/net/wireguard/queueing.h | 2 drivers/net/wireless/ath/ath12k/core.c | 33 - drivers/net/wireless/ath/ath12k/core.h | 3 drivers/net/wireless/ath/ath12k/hif.h | 9 drivers/net/wireless/ath/ath12k/pci.c | 8 drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 27 - drivers/net/wireless/marvell/libertas/tx.c | 7 drivers/net/wireless/mediatek/mt76/mt76.h | 10 drivers/net/wireless/mediatek/mt76/mt7603/init.c | 1 drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h | 1 drivers/net/wireless/mediatek/mt76/mt7915/init.c | 6 drivers/net/wireless/mediatek/mt76/mt7915/main.c | 2 drivers/net/wireless/mediatek/mt76/mt7925/mac.c | 3 drivers/net/wireless/mediatek/mt76/mt7925/main.c | 12 drivers/net/wireless/mediatek/mt76/mt792x_acpi_sar.c | 128 +++-- drivers/net/wireless/mediatek/mt76/mt792x_acpi_sar.h | 2 drivers/net/wireless/mediatek/mt76/mt7996/init.c | 3 drivers/net/wireless/mediatek/mt76/mt7996/main.c | 10 drivers/net/wireless/mediatek/mt76/mt7996/mcu.h | 3 drivers/net/wireless/mediatek/mt76/tx.c | 89 +++ drivers/net/xen-netfront.c | 4 drivers/nvme/target/core.c | 2 drivers/nvme/target/pr.c | 4 drivers/pmdomain/imx/imx8m-blk-ctrl.c | 15 drivers/pmdomain/rockchip/pm-domains.c | 20 drivers/power/sequencing/pwrseq-pcie-m2.c | 2 drivers/ptp/ptp_ocp.c | 2 drivers/regulator/ltc3676.c | 15 drivers/regulator/of_regulator.c | 24 drivers/regulator/tps6594-regulator.c | 6 drivers/scsi/ch.c | 29 - drivers/scsi/qedi/qedi_main.c | 3 drivers/spi/spi-nxp-fspi.c | 22 drivers/spi/spi-sg2044-nor.c | 56 +- drivers/tee/optee/ffa_abi.c | 38 + drivers/tee/optee/optee_msg.h | 4 drivers/tee/optee/smc_abi.c | 17 drivers/tee/tee_shm.c | 4 drivers/ufs/core/ufs-mcq.c | 30 - drivers/ufs/core/ufshcd.c | 53 +- drivers/ufs/host/ufs-mediatek.c | 18 fs/btrfs/inode.c | 7 fs/btrfs/ioctl.c | 31 - fs/btrfs/scrub.c | 4 fs/btrfs/xattr.c | 15 fs/dcache.c | 4 fs/fcntl.c | 3 fs/fs_context.c | 4 fs/inode.c | 23 fs/mount.h | 6 fs/namei.c | 29 + fs/namespace.c | 254 +++++++--- fs/nullfs.c | 4 fs/pnode.c | 108 +++- fs/verity/fsverity_private.h | 15 fs/verity/open.c | 13 fs/xfs/libxfs/xfs_exchmaps.c | 103 ---- fs/xfs/libxfs/xfs_log_format.h | 4 fs/xfs/xfs_bmap_util.c | 15 fs/xfs/xfs_exchrange.c | 51 +- include/linux/can/core.h | 3 include/linux/can/skb.h | 4 include/linux/io_uring_types.h | 2 include/linux/mount.h | 2 include/linux/nsproxy.h | 1 include/linux/nvme.h | 4 include/linux/sched/ext.h | 1 include/linux/virtio_net.h | 60 -- include/net/amt.h | 4 include/net/bluetooth/rfcomm.h | 1 include/net/can.h | 2 include/net/cfg80211.h | 1 include/net/ip.h | 7 include/net/mac80211.h | 14 include/net/strparser.h | 10 io_uring/io_uring.c | 13 io_uring/kbuf.c | 6 io_uring/memmap.c | 45 + io_uring/memmap.h | 2 io_uring/net.c | 4 io_uring/register.c | 21 io_uring/zcrx.c | 2 kernel/cgroup/cpuset.c | 40 + kernel/dma/swiotlb.c | 6 kernel/fork.c | 3 kernel/nsproxy.c | 2 kernel/sched/ext/ext.c | 25 kernel/sched/ext/internal.h | 5 kernel/sched/sched.h | 1 kernel/workqueue.c | 2 lib/dim/dim.c | 10 mm/mremap.c | 70 ++ mm/pgtable-generic.c | 20 mm/vma.c | 21 mm/vma.h | 7 net/bluetooth/hci_core.c | 4 net/bluetooth/hci_sock.c | 2 net/bluetooth/hci_sync.c | 10 net/bluetooth/iso.c | 52 +- net/bluetooth/mgmt.c | 2 net/bluetooth/rfcomm/core.c | 134 +++-- net/bluetooth/rfcomm/sock.c | 5 net/bluetooth/rfcomm/tty.c | 2 net/bluetooth/sco.c | 87 ++- net/bridge/br_multicast.c | 23 net/bridge/netfilter/nf_conntrack_bridge.c | 10 net/can/af_can.c | 47 + net/can/gw.c | 3 net/can/isotp.c | 16 net/can/raw.c | 10 net/core/dev.c | 11 net/core/flow_dissector.c | 11 net/core/skbuff.c | 6 net/devlink/core.c | 10 net/ipv4/cipso_ipv4.c | 8 net/ipv4/fib_semantics.c | 3 net/ipv4/fib_trie.c | 2 net/ipv4/ip_output.c | 10 net/ipv4/route.c | 5 net/ipv4/tcp.c | 2 net/ipv4/udp.c | 11 net/ipv6/ip6_gre.c | 7 net/ipv6/route.c | 4 net/ipv6/udp.c | 13 net/mac80211/debugfs.c | 13 net/mac80211/ieee80211_i.h | 2 net/mac80211/main.c | 1 net/mac80211/sta_info.c | 17 net/mac80211/sta_info.h | 3 net/mac80211/status.c | 5 net/mac80211/tx.c | 70 +- net/netfilter/nfnetlink_queue.c | 7 net/netfilter/xt_CHECKSUM.c | 6 net/openvswitch/actions.c | 7 net/openvswitch/datapath.c | 8 net/packet/af_packet.c | 28 - net/sched/cls_route.c | 6 net/sched/em_text.c | 3 net/sctp/socket.c | 6 net/smc/af_smc.c | 7 net/strparser/strparser.c | 6 net/tipc/node.c | 10 net/tipc/topsrv.c | 80 ++- net/vmw_vsock/af_vsock.c | 2 net/vmw_vsock/virtio_transport_common.c | 4 net/xfrm/xfrm_output.c | 16 security/keys/key.c | 6 security/keys/persistent.c | 55 +- security/selinux/avc.c | 5 security/selinux/hooks.c | 9 sound/hda/codecs/side-codecs/tas2781_hda.c | 18 sound/pci/ctxfi/ctdaio.c | 6 sound/soc/amd/yc/acp6x-mach.c | 7 sound/soc/codecs/adau1372.c | 18 sound/soc/samsung/i2s.c | 8 sound/soc/sdw_utils/soc_sdw_utils.c | 35 + tools/testing/selftests/mm/hugetlb-mmap.c | 4 tools/testing/vma/tests/vma.c | 4 285 files changed, 3402 insertions(+), 1600 deletions(-)
Aaron Ma (1):
wifi: mt76: mt7925: restore the legacy BSS after MLO teardown
Abhishek Ojha (1):
regulator: ltc3676: don't read the write-only HRST and CLIRQ registers
Adrian Betschart (1):
drm/amd/display: Don't replace a sink mode that shares the native totals
Ahmed Abdelhaleem Ahmed (1):
scsi: ch: Do not keep references to data transfer element devices
Alan Previn (1):
drm/xe/mmio: Fix xe_mmio_wait32() to honor delay/sleep maximums
Aldo Ariel Panzardo (1):
Bluetooth: SCO: serialise sco_conn lifetime against sco_recv_scodata()
Alex Deucher (1):
drm/amdgpu: make Mac FB workaround generic
Alexey Charkov (2):
power: sequencing: pcie-m2: Fix leaking array from of_regulator_bulk_get_all()
regulator: of: fill in supply names in of_regulator_bulk_get_all()
Ali Ahmet Memis (1):
io_uring/memmap: account the pages a compound region really uses
Alice Ryhl (1):
rust_binder: reschedule node refcount update on thread exit
Alvin Šipraga (2):
ASoC: adau1372: allow sleepy powerdown GPIOs
ASoC: adau1372: fix invalid default state of output ASRC and DAC muxes
Aurelien Jarno (1):
riscv: vector: Fix output operands in context save
Ben Cressey (2):
dm-crypt: reject the lmk IV mode with AEAD ciphers
dm-integrity: fix buffer overflow in inline mode with large tag size
Bihaan Sen (1):
Input: xpad - add support for 8BitDo Pro 2 Wired Controller for Xbox
Borislav Petkov (AMD) (1):
x86/CPU/AMD: Fix AMD TLBI Erratum #1718
Bryan Fraschetti (1):
ice: Restore Ordered MMIO Writes for Tx Doorbells
Carlos Llamas (1):
selftests/mm: cleanup -Wformat issues in hugetlb-mmap
Chen Pei (1):
riscv: ptrace: reject CFI regset access when extensions are absent
Chengfeng Ye (6):
tipc: hold a reference to nodes found by link name net/smc: protect clcsock lifetime in smc_getname
Bluetooth: hci_sock: Serialize dead-device detachment
Bluetooth: hci_sync: Fix command skb lifetime during scan setup
Bluetooth: ISO: Reject concurrent BIS listener setup
Bluetooth: ISO: Serialize concurrent connect calls
Christian Brauner (29):
mount: keep a copied mount unbindable
fs: don't silently unmount busy mounts
namespace: reset the old parent's ->overmount in mnt_change_mountpoint()
statmount: read the parent of an unmounted mount under mount_lock
namespace: don't inherit MNT_UMOUNT in clone_mnt()
namespace: don't copy an unmounted mount tree
fs: refuse fspick() on internal superblocks
namespace: check the target before walking it in do_mount_setattr()
namespace: queue a mount only once for mount notifications
namespace: check a submount for references right before unmounting it
namespace: check a recursive bind mount for mount namespace loops
namespace: keep covered mounts covered in OPEN_TREE_NAMESPACE
namespace: look at the topmost mount for a mount namespace file
namespace: don't reconfigure internal superblocks via remount and umount
namespace: remove the fsnotify marks of a mount namespace in process context
namespace: check the mounts before reading their parents in pivot_root()
dcache: don't put a mountpoint on a dentry that's being removed
unshare: don't drop active namespace references that were never taken
namespace: don't let a pseudo dentry become the root of a mount
namespace: unhash a dentry before detaching the mounts on it
namei: don't reveal overmounted entries in refwalk
fcntl: refuse F_SET_RW_HINT on an immutable inode
namespace: refuse an automount below a mount that is in no namespace
nullfs: don't update the access time
namespace: never expire a locked mount
namespace: handle mount locking for automounts correctly
namespace: keep the lock on a mount that a propagated copy is moved beneath
mount: refuse MOVE_MOUNT_SET_GROUP on an unbindable mount
fs: don't let a migrating task hide its reference from do_umount()
Christian Göttsche (1):
selinux: fix data race on AVC latest_notif
Cristian Ciocaltea (2):
drm/bridge: Fix unlocked list_del in drm_bridge_add() drm/bridge: Fix unlocked list access in drm_bridge_attach()
Cristian Papa (1):
wifi: mt76: mt7603: initialize global station WCID
Daehyeon Ko (9):
ipv4: stop PMTU walk when nexthop group shrinks
ipv4: stop exception dump when nexthop group shrinks
ipv4: stop route notification sizing when nexthop group shrinks
ipv4: do not warn on route notification size race
ipv6: do not warn on route notification size race
cipso: adjust cached option offsets when removing CIPSO vsock/virtio: account only unread bytes in read_skb()
tcp: reject net_iov in zerocopy receive mapping hints
ip6_gre: remove obsolete ERSPAN PMTU update
Daniel Machon (1):
net: sparx5: free the matchall entry on destroy
Darrick J. Wong (1):
xfs: fix exchange-range-to-eof file size exchange
Denis V. Lunev (1):
openvswitch: fix soft lockup in the netlink flow dump
Devin Wittmayer (2):
wifi: mt76: mt7925: don't put the band auto marker in TGID
wifi: mt76: mt792x: pick the SAR table layout from the table itself
Eric Biggers (1):
fsverity: RCU-delay the freeing of struct fsverity_info
Eric Dumazet (4):
bnxt_en: fix DMA mapping length for padded small packets
flow_dissector: avoid u16 truncation of skb->len when computing thoff
net: always dissect GSO packets in __virtio_net_hdr_to_skb()
flow_dissector: avoid u16 truncation of hlen in bpf_flow_dissect()
Eugene Gvozdetsky (1):
io_uring/register: don't exempt disabled rings from task restrictions
Fan Wu (3):
gpio: mpsse: fix race when arming the IRQ poll worker drm/vc4: drain the hangcheck timer and works on V3D unbind drm/xe/i2c: cancel the client work on remove
Felix Fietkau (7):
wifi: mt76: mt7996: program a link again if the driver holds it
wifi: mt76: mt7996: take over connection monitoring
wifi: mac80211: add AQL support for multicast packets
wifi: mac80211: add ieee80211_txq_aql_pending()
wifi: mt76: add PS buffering support for HW-managed TIM drivers
wifi: mt76: account non-AQL frames per peer rather than per link
wifi: mt76: use ALTX queue for packets to disassociated stations
Felix Gu (2):
drm/bridge: th1520-dw-hdmi: Fix error check on dw_hdmi_probe() return value drm/bridge: th1520-dw-hdmi: Fix remove() callback
Fernando Fernandez Mancera (1):
net: openvswitch: validate transport header presence in set_ipv6_addr
Filipe Manana (2):
btrfs: fix xattr replace when multiple xattrs are packed in the same item
btrfs: fix lost error return value in btrfs_listxattr()
Fredrik Nyberg (1):
net: usb: ax88179_178a: fix rx frame length for non-last packets
Fuad Tabba (1):
arm64/boot: Don't set PMUv3p9 FGT2 bits without PMUv3
Georgiy Osokin (1):
tee: shm: reject zero-sized allocations in tee_dyn_shm_alloc_helper()
Greg Kroah-Hartman (1):
Linux 7.2.11
Guangshuo Li (3):
mmc: cavium-octeon: destroy slot platform devices on remove
mmc: cavium-thunderx: destroy slot platform devices on remove
mmc: sdhci-sprd: disable runtime PM on remove
Guixin Liu (1):
nvmet: return Invalid Field for invalid NSIDs feature 82h
Gyeyoung Baek (2):
drm/imagination: Size page table preallocation by device address drm/imagination: Fix reference and vm_bo handling in remap()
Haibo Chen (1):
spi: spi-nxp-fspi: exit stop mode before waiting for DLL lock
Haishuang Yan (3):
devlink: fix devlink_rel reference leak when notify work is pending
pfcp: make sure the SEID is linear before reading it
bareudp: set the inner protocol to the protocol of the packet
Han Gao (2):
spi: sg2044-nor: Return transfer errors
spi: sg2044-nor: Honor SPI clock limits
Haojie Li (1):
drm/amdkfd: fix dma_buf reference leak in get_dmabuf_info
Haotian Zhang (1):
Input: ati_remote2 - fix type confusion in device attribute handlers
Harin Lee (1):
ALSA: ctxfi: Fix memory leakage when clearing DAO input mappers
Hengyu Liang (2):
ata: libata-scsi: do not lose CHECK CONDITION for failed ATAPI commands
io_uring: do not charge the SQ/CQ rings to RLIMIT_MEMLOCK
Hui Peng (1):
sctp: copy zeroed stats to user in sctp_getsockopt_pr_streamstatus() when !streamoute
Iaroslav Voitovych (1):
Bluetooth: MGMT: Fix status of pending commands flushed on power off
Ido Schimmel (3):
ipv6: Fix redirect exception creation for UDP/RAW sockets
ipv4: udp: Create exceptions before socket matching
ipv6: udp: Create exceptions before socket matching
Ilia Gavrilov (1):
vsock: Fix memory leak in vmci_transport_recv_dgram_cb()
Jakub Kicinski (3):
bonding: fix the program leak when XDP is replaced
net: make dev_xdp_sb_prog_count() see programs attached through a link Revert "net: stmmac: propagate PTP addend and system time programming errors"
Jamal Hadi Salim (1):
net/sched: em_text: reject unterminated algo before autoload
Jason A. Donenfeld (1):
wireguard: noise: reject response consumption after intermediate initiation
Jens Axboe (1):
io_uring/kbuf: don't charge provided buffer rings to RLIMIT_MEMLOCK
Jerome Tollet (2):
net/mlx5e: Prevent stale XSK buffer release on refill retry net/mlx5e: Prevent stale XSK buffer release on MPWQE refill retry
Jesse Zhang (2):
drm/amdgpu/userq: only accept doorbell BOs as queue doorbell drm/amdgpu/userq: return the memdup_user() error for the user MQD
Ji-Ze Hong (Peter Hong) (1):
usb: f81604: fix struct f81604_int_data size mismatch
Johannes Berg (1):
Revert "wifi: libertas: reject short monitor TX frames"
Jose Ignacio Tornos Martinez (1):
iavf: send MAC change request synchronously
Josef Bacik (2):
xen/netfront: don't leak the skb when xennet_fill_frags() fails
net: skbuff: don't leave stale bytes in skb_copy_and_csum_bits()
Joshua Washington (3):
gve: fix napi_disable deadlock when attempting to disable XSK pools
gve: fix XSK buffer leak when rings are stopped
gve: fix XSK buffer leak on error descriptor
Junjie Cao (1):
wifi: mt76: mt792x: treat 0xff ACPI SAR entries as no limit
Justin Chen (1):
net: bcmgenet: if UMAC was suspended in SW_RESET, restore it to SW_RESET
Karl Bonde Torp (1):
nvme: fix swapped ZRASF zone state values for full and read only
Karl Mehltretter (3):
arm64: irq: exclude the softirq stack switch from KCOV
keys: finalize persistent keyring timeout after link attempt
riscv: fix load_unaligned_zeropad() fixup for RV32
Krzysztof Furman (1):
Input: xpad - add support for Corsair Novablade Pro
Krzysztof Karas (2):
drm/i915/gem: Prevent overstepping exec array boundary drm/i915/gt: Unmask interrupts only when ACTIVE is true
Kuba Piecuch (2):
sched_ext: Generate qseq from a per-task counter
sched_ext: Call ops.dequeue() when a task arrives on a remote local DSQ
Leo Li (2):
drm/amd/display: Fix direct scanout alpha on some DRM_FORMATs drm/amd/display: disable self-refresh on tearing flips
Leo Yu-Chi Liang (1):
riscv: fix NR_CPUS range leaking 64-bit default onto 32-bit builds
Leto Liu (刘涛) (1):
net: airoha: Add retry mechanism to airoha_qdma_set_trtcm_param()
Li RongQing (1):
net/mlx5e: Order ICOSQ cc update after CQ doorbell
Lorenzo Bianconi (1):
net: stmmac: propagate PTP addend and system time programming errors
Lorenzo Stoakes (ARM) (2):
mm/mremap: fix locked_vm leak by splitting VMA for MREMAP_DONTUNMAP mm/mremap: fix locked_vm leak from MREMAP_DONTUNMAP self-merge
Lu Huang (1):
wifi: mt76: mt7996: fix uninitialized buf read in mt7996_variant_fem_init()
Luca Weiss (2):
clk: qcom: gcc-eliza: Fix always-enabling PCIE_RSCC clocks
clk: qcom: gcc-kaanapali: Fix always-enabling PCIE_RSCC clocks
Ma Xinmeng (1):
dm-snap: reject the transient exception store for snapshot-merge
Mahantesh Salimath (1):
tee: optee: ffa: support shared memory offsets on large-page kernels
Mallesh Koujalagi (1):
drm/xe/sysctrl: Fix mailbox header handling
Marek Szyprowski (2):
swiotlb: fix default_swiotlb_limit() for non-growable default pool
ASoC: samsung: i2s: enable op_clk in probe to balance runtime PM
Matthew Wilcox (Oracle) (1):
fs: Free any excess xarray nodes in clear_inode()
Maxim Skokov (1):
Bluetooth: RFCOMM: free the skb when the DLC has no owner
Maíra Canal (4):
drm/vc4: Free the BO cache size list on teardown drm/vc4: Use kvmalloc_objs() for the BO cache size list drm/vc4: Disable the V3D interrupt across runtime suspend drm/vc4: Fix binner slot allocation failing on an idle GPU
Michael Chan (2):
bnxt_en: Add bnxt_clear_bars() helper
bnxt_en: Fix driver init in kdump kernel
Michael Garland (1):
ASoC: amd: yc: Add DMI quirk for Acer Aspire Go 15 (AG15-21P)
Michael S. Tsirkin (1):
ipv4: validate checksum_start before completing checksum
Michele Dionisio (1):
wifi: brcmfmac: fix P2P device removal race in brcmf_detach()
Mikhail Gavrilov (3):
mm: don't schedule deferred kernel page table freeing while booting
Bluetooth: RFCOMM: connect the session socket without rfcomm_mutex drm/amdgpu: copy debugfs register data outside the GRBM/SRBM locks
Mikulas Patocka (1):
dm: fix reading free memory in do_resume
Ming Qian (1):
pmdomain: imx8m-blk-ctrl: Serialize power on/off across sibling domains
Mingming Cao (2):
ibmveth: h_free logical LAN on open-fail after register
ibmveth: fix TX LTB and filter unwind on open-fail
Mohamed Yassine Jebabli (1):
ALSA: hda/tas2781: Accept V1 calibration data without CRC
Myeonghun Pak (1):
drm/aspeed: Balance the display clock enable on teardown
Naomi Chu (1):
scsi: ufs: core: Hold a clock reference across the probe
Natasha Klaus (1):
io_uring/net: populate CONNECT filter fields for 24-byte sockaddr_in6
Nguyen Ngoc Thang (2):
memstick: rtsx_usb_ms: complete requests after eject instead of dropping them drm/fb-helper: defer setup when fbdev_probe() fails, not just on -EAGAIN
Nicolas Cavallari (1):
wifi: mt76: mt7915: disable rx napi when removing device
Norbert Szetei (1):
xfs: stop exchanging reflink flags when exchanging mappings
Oleg Keri (1):
drm/dp: don't mark the AUX backlight enabled when enabling failed
Oliver Hartkopp (1):
can: fix unique skb identifier regression under RPS
Omar Ramadan (1):
amt: send the relay's General Query directly from the receive path
Or Har-Toov (2):
net/mlx5: Lag, split aggregate speed into oper and max helpers Revert "net/mlx5: E-Switch, preserve max tx speed on vport state modification"
Osama Abdelkader (1):
drm/panthor: validate userspace queue count against initialized firmware slot count
Ovidiu Panait (2):
net: stmmac: Do not advertise S-VLAN stripping when it is disabled
net: stmmac: Disable S-Tag processing on dwmac4
Palla Raghunath (2):
dm ioctl: don't let data_start run past the buffer
Bluetooth: RFCOMM: Fix NULL tty_dev dereference in rfcomm_dev_shutdown
Pavan Chebbi (1):
bnxt_en: Re-write the BARs following any type of PCIe errors
Pavankumar Kondeti (1):
workqueue: Fix NULL current_pwq deref in chained work check
Peng Fan (1):
iommu/dma: skip swiotlb bounce for DMA_ATTR_MMIO in iommu_dma_map_phys
Pengpeng Hou (1):
scsi: ufs: mediatek: Handle mPHY power-on failures
Petr Machata (1):
mlxsw: spectrum_flower: Fix port range register leak in tmplt_create()
Quchaosheng (1):
net/packet: guard the ll header push in packet_rcv_spkt()
Quentin Freimanis (1):
net: sparx5: start the TOD counters on non-PTP lan969x variants
Raj Ojha (1):
memstick: core: wait for request completion before freeing card
Ramses de Norre (1):
wireguard: queueing: preserve tstamp_type when encapsulating packet
Ravindra (1):
Bluetooth: btintel_pcie: fix TX descriptor bounds check
Richard Fitzgerald (1):
ASoC: sdw_utils: Switch CS35L56/57/62/63 to use OT25 DAI
Ridham Khurana (2):
gpio: xilinx: fix runtime PM leak on request error path
regulator: tps6594-regulator: Fix n_linear_ranges for TPS65224 BUCK2-4
Runyu Xiao (2):
scsi: qedi: Initialize callback state before registration
Bluetooth: btintel_pcie: use managed IRQ teardown
Sabrina Dubroca (1):
strparser: make sure __strp_recv isn't running before tearing down the parser
Sai Teja Aluvala (1):
Bluetooth: btintel_pcie: Add shared HW reset for clean start
Sajal Gupta (1):
drm/gud: don't keep a connector without a CRTC as connector_state
Saleel Kudchadker (1):
drm/amdkfd: align SDMA doorbell base for shader doorbell writes
Sang-Hoon Choi (3):
gpio: exar: initialize the ID before registering its cleanup cxgb4/ch_ktls: disable softirqs around tid_list erases
nvmet: use the local P2P device on metadata allocation failure
Sebastien Royen (1):
net: dsa: microchip: fix KSZ8765 fiber detection
Shao Mingyin (1):
riscv: lib: Fix ZBB strnlen wrap-around regression on huge counts
Shao-Fu Chen (1):
optee: register TEE devices only once fully initialized
Shashank Mohan Jain (1):
lib/dim: fix 32-bit overflow in dim_calc_stats() rates
Shawn Lin (3):
pmdomain: rockchip: don't ignore clock lookup errors on attach
pmdomain: rockchip: fix clock leak on domain probe failure
pmdomain: rockchip: propagate subdomain add errors
Shin'ichiro Kawasaki (1):
zloop: zero out only the unread tail of short reads
Stanley Jhu (2):
scsi: ufs: core: Avoid unsafe MMIO reads in ufshcd_mcq_compl_all_cqes_lock()
scsi: ufs: core: Decouple CQ sweep from request iterator in MCQ
Stefan Binding (1):
ASoC: sdw_utils: Add codec info for CS35L62
Stephen Smalley (1):
selinux: preserve NATIVE_LABELS on already-initialized sb in set_mnt_opts
Suraj Gupta (1):
net: xilinx: axienet: Free outstanding DMA buffers on dmaengine stop
Taniya Das (2):
clk: qcom: gpucc-glymur: Mark the GPU CX GDSC as votable
clk: qcom: gpucc-kaanapali: Mark the GPU CX GDSC as votable
Tao Gong (1):
wifi: mt76: mt7996: fix struct mt7996_mcu_wed_rro_ba_delete_event layout
Thomas Hellström (2):
drm/xe: Fix shrinker accounting double-subtraction on nested external pins drm/xe: Fix stale pinned_link entry when fb-pin performs the final unpin
Tianyi Gao (1):
veth: fix peer NETDEV_XDP_ACT_NDO_XMIT after GRO is toggled while down
Tony Nguyen (1):
e1000e: add system to disable K1 list
Tristan Madani (1):
ice: fix metadata_dst refcount handling on representor teardown
Troy Mitchell (1):
riscv: vector: Fix data pointer constraints in context save/restore
Tvrtko Ursulin (1):
drm/xe: Do not emit Wa_16010904313 twice
Vadim Fedorenko (1):
ptp: ocp: fix PCIe delay estimation calculation
Vicki Pfau (4):
HID: steam: Fully unregister controller when hidraw is opened
HID: steam: Rearrange teardown sequence
HID: steam: Refactor registration
HID: steam: Clean up locking
Victor Nogueira (1):
net/sched: cls_route: reject change with no routing attribute
Vincent Jardin (3):
arm64: dts: lx2160a: fix incorrect pinmux
arm64: dts: lx2160a: fix IIC1 pinmux submask rejected by pinctrl-single
arm64: dts: lx2160a: fix the iic5 spi3 pinmux offset and value
Vishal Badole (1):
EDAC/amd64: Mask UMC chip select to the four implemented selects
Vitaly Prosyak (1):
drm/amdgpu: serialize vblank counter reads against GPU reset
Waiman Long (3):
cgroup/cpuset: Handle cpu hotplug race in guarantee_active_cpus() cgroup/cpuset: Don't access cpuset_cgrp_subsys.root in is_in_v2_mode() cgroup/cpuset: Call is_in_v2_mode() after acquiring cpuset_mutex in cpuset_handle_hotplug()
Wei-Jie Hung (1):
riscv: patch: fix handling of bpf-jit execmem addresses
Weiming Shi (2):
net: team: stop reusing skb after queue override
net: team: free skb when broadcast has no txable port
Wentao Liang (2):
btrfs: scrub: fix local_root reference leak in scrub_print_warning_inode() drm/vc4: Fix firmware reference leak in vc4_drm_bind()
Willem de Bruijn (1):
net/packet: call packet_parse_headers after virtio_net_hdr_to_skb
Xuanqiang Luo (1):
ice: fix use-after-free in dynamic port cleanup
Yang Xiuwei (4):
btrfs: always return -EIOCBQUEUED after btrfs_uring_read_extent_endio
btrfs: free iov when btrfs_uring_read_extent() fails
btrfs: unlock inode and extent in caller when io_uring read extent fails
btrfs: don't stash io_uring encoded data across -EAGAIN
Yibo Tan (1):
mmc: mtk-sd: Cancel request timeout work on remove
Yingying Tang (1):
Revert "wifi: ath12k: add panic handler"
Yuqi Xu (1):
tipc: destroy topsrv workqueues before closing connections
Zack Rusin (1):
drm/vmwgfx: validate pitch coming from userspace
Zixuan Chai (1):
net: bridge: avoid recursive multicast port cleanup
Ziyi Guo (2):
riscv: entry: gate shadow call stack reload on sstatus.SPP, not tp
riscv: futex: untag the user pointer before the atomic access
Zongmin Zhou (3):
riscv: errata: select RISCV_ALTERNATIVE_EARLY for THEAD GHOSTWRITE
riscv: hwprobe: use _BITULL() rather than BIT() in MIPS vendor uapi header
riscv: ptrace: Zero-initialize regset buffers before copyin
zjamg (1):
can: dev: init_can_skb(): restore skb header initialization
성병찬 (1):
KEYS: Fix add_key() race with keyring restriction
Greg Kroah-Hartman
maintainerDocumentation/networking/strparser.rst +1 -1
@@ -77,7 +77,7 @@ Functions strp_done is called to release any resources held by the stream parser instance. This must be called after the stream processor - has been stopped. + has been stopped. The socket lock must not be held. ::
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 7 PATCHLEVEL = 2 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi +13 -6
@@ -1783,7 +1783,7 @@ esdhc0_clksync_pins: iic5-sdhc-clk-pins { }; dspi2_miso_mosi_pins: iic5-spi3-pins { - pinctrl-single,bits = <0x3 (0x2 << 9) (0x7 << 9)>; + pinctrl-single,bits = <0x0 (0x3 << 9) (0x7 << 9)>; }; i2c5_pins: iic6-i2c-pins {
@@ -1803,7 +1803,7 @@ fspi_data74_pins: xspi1-data74-pins { }; gpio1_31_28_pins: xspi1-data74-gpio-pins { - pinctrl-single,bits = <0x0 0x1 (0x7 << 15)>; + pinctrl-single,bits = <0x0 (0x1 << 15) (0x7 << 15)>; }; fspi_data30_pins: xspi1-data30-pins {
@@ -1811,7 +1811,7 @@ fspi_data30_pins: xspi1-data30-pins { }; gpio1_27_24_pins: xspi1-data30-gpio-pins { - pinctrl-single,bits = <0x0 0x1 (0x7 << 18)>; + pinctrl-single,bits = <0x0 (0x1 << 18) (0x7 << 18)>; }; fspi_dqs_sck_cs10_pins: xspi1-base-pins {
@@ -1819,7 +1819,7 @@ fspi_dqs_sck_cs10_pins: xspi1-base-pins { }; gpio1_23_20_pins: xspi1-base-gpio-pins { - pinctrl-single,bits = <0x0 0x1 (0x7 << 21)>; + pinctrl-single,bits = <0x0 (0x1 << 21) (0x7 << 21)>; }; esdhc0_cmd_data30_clk_vsel_pins: sdhc1-base-sdhc-vsel-pins {
@@ -1868,12 +1868,19 @@ i2c6_i2c7_pins: iic8-iic7-i2c-pins { }; /* RCWSR14 */ + /* + * IIC1_PMUX is a single bit at RCWSR14[10], but bit-per-mux + * uses the mask for the field to clear before applying the + * value. + * So bits 11 and 12, which are reserved, are written as 0 + * on every mux switch, it is harmless. + */ i2c0_pins: iic1-i2c-pins { - pinctrl-single,bits = <0x8 0x0 (0x1 << 10)>; + pinctrl-single,bits = <0x8 0x0 (0x7 << 10)>; }; gpio0_3_2_pins: iic1-gpio-pins { - pinctrl-single,bits = <0x8 (0x1 << 10) (0x1 << 10)>; + pinctrl-single,bits = <0x8 (0x1 << 10) (0x7 << 10)>; }; };
arch/arm64/include/asm/el2_setup.h +3 -2
@@ -421,8 +421,9 @@mov x2, xzr mrs x1, id_aa64dfr0_el1 ubfx x1, x1, #ID_AA64DFR0_EL1_PMUVer_SHIFT, #4 - cmp x1, #ID_AA64DFR0_EL1_PMUVer_V3P9 - b.lt .Lskip_pmuv3p9_\@ + cmp x1, #ID_AA64DFR0_EL1_PMUVer_IMP_DEF + ccmp x1, #ID_AA64DFR0_EL1_PMUVer_V3P9, #8, ne + b.lt .Lskip_pmuv3p9_\@ // Skip if < PMUv3p9 or IMP_DEF orr x0, x0, #HDFGRTR2_EL2_nPMICNTR_EL0 orr x0, x0, #HDFGRTR2_EL2_nPMICFILTR_EL0
arch/arm64/kernel/Makefile +3 -0
@@ -25,6 +25,9 @@ KASAN_SANITIZE_stacktrace.o := n KCOV_INSTRUMENT_entry-common.o := n KCOV_INSTRUMENT_idle.o := n +# Softirq stack switching can run outside interrupt context. +KCOV_INSTRUMENT_irq.o := n + # Object file lists. obj-y := debug-monitors.o entry.o irq.o fpsimd.o \ entry-common.o process.o ptrace.o \
arch/riscv/Kconfig +3 -2
@@ -450,9 +450,10 @@ config SMP config NR_CPUS int "Maximum number of CPUs (2-512)" depends on SMP - range 2 512 if !RISCV_SBI_V01 - range 2 32 if RISCV_SBI_V01 && 32BIT + range 2 512 if !RISCV_SBI_V01 && 64BIT + range 2 128 if !RISCV_SBI_V01 && 32BIT range 2 64 if RISCV_SBI_V01 && 64BIT + range 2 32 if RISCV_SBI_V01 && 32BIT default "32" if 32BIT default "64" if RISCV_SBI_V01 && 64BIT default "256" if !RISCV_SBI_V01 && 64BIT
arch/riscv/Kconfig.errata +1 -0
@@ -146,6 +146,7 @@ config ERRATA_THEAD_PMU config ERRATA_THEAD_GHOSTWRITE bool "Apply T-Head Ghostwrite errata" depends on ERRATA_THEAD && RISCV_ISA_XTHEADVECTOR + select RISCV_ALTERNATIVE_EARLY default y help The T-Head C9xx cores have a vulnerability in the xtheadvector
arch/riscv/include/asm/futex.h +2 -0
@@ -40,6 +40,7 @@ arch_futex_atomic_op_inuser(int op, int oparg, int *oval, u32 __user *uaddr)if (!access_ok (uaddr,sizeof (u32)))return -EFAULT ; + uaddr =untagged_addr (uaddr);switch (op) {case FUTEX_OP_SET :
@@ -82,6 +83,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,if (!access_ok (uaddr,sizeof (u32)))return -EFAULT ; + uaddr =untagged_addr (uaddr);__enable_user_access (); __asm__ __volatile__ (
arch/riscv/include/asm/scs.h +13 -4
@@ -4,6 +4,7 @@#ifdef __ASSEMBLER__#include <asm/asm-offsets.h> +#include <asm/csr.h> #ifdef CONFIG_SHADOW_CALL_STACK
@@ -22,9 +23,17 @@ REG_L gp, TASK_TI_SCS_SP(tp) .endm -/* Load task_scs_sp(current) to gp, but only if tp has changed. */ -.macro scs_load_current_if_task_changed prev - beq \prev, tp, _skip_scs +/* + * Load task_scs_sp(current) to gp, but only when the trap came from U-mode. + * The source privilege level is taken from the saved sstatus.SPP bit (written + * by hardware on trap entry), not by comparing tp. tp is a user-writable + * register, so gating the shadow call stack reload on it let a user task that + * set tp == ¤t skip the reload and run the kernel with an attacker + * controlled gp (the shadow call stack pointer). + */ +.macro scs_load_current_if_from_user status, tmp + andi \tmp, \status, SR_SPP + bnez \tmp, _skip_scs scs_load_current _skip_scs: .endm
@@ -42,7 +51,7 @@ .endm .macro scs_load_current .endm -.macro scs_load_current_if_task_changed prev +.macro scs_load_current_if_from_user status, tmp .endm .macro scs_save_current .endm
arch/riscv/include/asm/vector.h +4 -4
@@ -132,8 +132,8 @@ static __always_inline void __vstate_csr_save(struct __riscv_v_ext_state *dest) "csrr %0, " __stringify(CSR_VSTART) "\n\t" "csrr %1, " __stringify(CSR_VTYPE) "\n\t" "csrr %2, " __stringify(CSR_VL) "\n\t" - : "=r" (dest->vstart), "=r" (dest->vtype), "=r" (dest->vl), - "=r" (dest->vcsr) : :); + : "=r" (dest->vstart), "=r" (dest->vtype), "=r" (dest->vl) + : :);if (has_xtheadvector ()) {unsigned long status;
@@ -225,7 +225,7 @@ static inline void __riscv_v_vstate_save(struct __riscv_v_ext_state *save_to,"add %1, %1, %0\n\t" "vse8.v v24, (%1)\n\t" ".option pop\n\t" - : "=&r" (vl) : "r" (datap) : "memory"); + : "=&r" (vl), "+r" (datap) : : "memory"); } riscv_v_disable(); }
@@ -261,7 +261,7 @@ static inline void __riscv_v_vstate_restore(struct __riscv_v_ext_state *restore_"add %1, %1, %0\n\t" "vle8.v v24, (%1)\n\t" ".option pop\n\t" - : "=&r" (vl) : "r" (datap) : "memory"); + : "=&r" (vl), "+r" (datap) : : "memory"); } __vstate_csr_restore(restore_from);riscv_v_disable ();
arch/riscv/include/uapi/asm/vendor/mips.h +3 -1
@@ -1,3 +1,5 @@/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -#define RISCV_HWPROBE_VENDOR_EXT_XMIPSEXECTL BIT(0) +#include <linux/const.h> + +#define RISCV_HWPROBE_VENDOR_EXT_XMIPSEXECTL _BITULL(0)
arch/riscv/kernel/entry.S +1 -1
@@ -208,7 +208,7 @@ SYM_CODE_START(handle_exception) load_global_pointer /* Load the kernel shadow call stack pointer if coming from userspace */ - scs_load_current_if_task_changed s5 + scs_load_current_if_from_user s1, s5 #ifdef CONFIG_RISCV_ISA_V_PREEMPTIVE move a0, sp
arch/riscv/kernel/patch.c +1 -1
@@ -46,7 +46,7 @@ static __always_inline void *patch_map(void *addr, const unsigned int fixmap)if (core_kernel_text (uintaddr) ||is_kernel_exittext (uintaddr)) { phys =__pa_symbol (addr); - }else if (IS_ENABLED (CONFIG_STRICT_MODULE_RWX )) { + }else if (IS_ENABLED (CONFIG_EXECMEM )) {struct page *page =vmalloc_to_page (addr);BUG_ON (!page);
arch/riscv/kernel/ptrace.c +8 -0
@@ -230,6 +230,7 @@ static int riscv_vr_set(struct task_struct *target,return -ENODATA ;/* Copy rest of the vstate except datap */ +memset (&ptrace_vstate,0 ,sizeof (ptrace_vstate)); ret =user_regset_copyin (&pos, &count, &kbuf, &ubuf, &ptrace_vstate,0 ,sizeof (struct __riscv_v_regset_state ));if (unlikely (ret))
@@ -299,6 +300,9 @@ static int riscv_cfi_get(struct task_struct *target,struct user_cfi_state user_cfi;struct pt_regs *regs; +if (!is_user_lpad_enabled () && !is_user_shstk_enabled ()) +return -EINVAL ; +memset (&user_cfi,0 ,sizeof (user_cfi)); regs =task_pt_regs (target);
@@ -337,8 +341,12 @@ static int riscv_cfi_set(struct task_struct *target,struct user_cfi_state user_cfi;struct pt_regs *regs; +if (!is_user_lpad_enabled () && !is_user_shstk_enabled ()) +return -EINVAL ; + regs =task_pt_regs (target); +memset (&user_cfi,0 ,sizeof (user_cfi)); ret =user_regset_copyin (&pos, &count, &kbuf, &ubuf, &user_cfi,0 ,-1 );if (ret)return ret;
arch/riscv/lib/strnlen.S +18 -2
@@ -87,9 +87,25 @@ strnlen_zbb: * Aligned boundary. Use the address of the last valid byte * (s + count - 1) to avoid loading a word past the count * boundary in the loop below. count == 0 is handled above. + * + * Saturate the boundary when s + count would wrap around (very + * large counts, e.g. SIZE_MAX passed by FORTIFY strcat/strlcat + * with a destination whose size is unknown at compile time). + * Without this, the wrapped boundary lands before s and the + * pre-loop guard below always exits, returning a truncated + * length. + * + * Clamping the increment to ~s (== SIZE_MAX - s) keeps the + * computation branchless and wrap-free: + * + * s + min(count - 1, ~s) == saturating_add(s, count - 1) + * + * Saturating makes the scan equivalent to strlen(). */ - add t4, a0, a1 - addi t4, t4, -1 + addi t4, a1, -1 /* count - 1 */ + not t1, a0 /* SIZE_MAX - s */ + minu t4, t4, t1 /* clamp, so s + t4 can never wrap */ + add t4, a0, t4 /* saturated s + count - 1 */ andi t4, t4, -SZREG /* Get the first word. */
arch/riscv/mm/extable.c +2 -2
@@ -68,8 +68,8 @@ ex_handler_load_unaligned_zeropad(const struct exception_table_entry *ex, addr =regs_get_gpr (regs, reg_addr *sizeof (unsigned long )); - offset = addr &0x7UL ; - addr &= ~0x7UL ; + offset = addr & (sizeof (data) -1 ); + addr &= ~(sizeof (data) -1 ); data = *(unsigned long *)addr >> (offset *8 );
arch/um/drivers/vector_transports.c +1 -0
@@ -209,6 +209,7 @@ static int raw_verify_header(if ((vheader->flags &VIRTIO_NET_HDR_F_DATA_VALID ) >0 )return 1 ; +skb_set_network_header (skb,ETH_HLEN );virtio_net_hdr_to_skb (skb, vheader,virtio_legacy_is_little_endian ());return 0 ; }
arch/x86/include/asm/cpufeatures.h +3 -0
@@ -465,6 +465,8 @@#define X86_FEATURE_NO_NESTED_DATA_BP (20*32+ 0)/* No Nested Data Breakpoints */ #define X86_FEATURE_WRMSR_XX_BASE_NS (20*32+ 1)/* WRMSR to {FS,GS,KERNEL_GS}_BASE is non-serializing */ #define X86_FEATURE_LFENCE_RDTSC (20*32+ 2)/* LFENCE always serializing / synchronizes RDTSC */ + +#define X86_FEATURE_TLBSYNC_SFW_NO (20*32+ 4)/* TLBI Erratum #1718 fixed in microcode */ #define X86_FEATURE_VERW_CLEAR (20*32+ 5)/* The memory form of VERW mitigates TSA */ #define X86_FEATURE_NULL_SEL_CLR_BASE (20*32+ 6)/* Null Selector Clears Base */
@@ -575,4 +577,5 @@#define X86_BUG_TSA X86_BUG( 1*32+ 9)/* "tsa" CPU is affected by Transient Scheduler Attacks */ #define X86_BUG_VMSCAPE X86_BUG( 1*32+10)/* "vmscape" CPU is affected by VMSCAPE attacks from guests */ #define X86_BUG_SEAMRET_INVD_VMCS X86_BUG( 1*32+11)/* "seamret_invd_vmcs" SEAMRET from P-SEAMLDR clears the current VMCS */ +#define X86_BUG_TLBI X86_BUG( 1*32+12)/* "tlbi" AMD TLBI Erratum #1718 */ #endif /* _ASM_X86_CPUFEATURES_H */
arch/x86/include/asm/tlb.h +6 -0
@@ -110,6 +110,12 @@ static inline void __tlbsync(void)/* TLBSYNC: supported in binutils >= 0.36. */ asmvolatile (".byte 0x0f, 0x01, 0xff" :::"memory" ); + +if (!static_cpu_has_bug (X86_BUG_TLBI )) +return ; + +/* TLBSYNC: supported in binutils >= 0.36. */ + asm volatile(".byte 0x0f, 0x01, 0xff" ::: "memory"); }#else /* Some compilers (I'm looking at you clang!) simply can't do DCE */
arch/x86/kernel/cpu/amd.c +4 -0
@@ -1047,6 +1047,10 @@ static void init_amd_zen5(struct cpuinfo_x86 *c)msr_clear_bit (MSR_AMD64_CPUID_FN_7 ,18 );pr_emerg_once ("RDSEED32 is broken. Disabling the corresponding CPUID bit.\n" ); } + +if (cpu_has (c,X86_FEATURE_INVLPGB ) && + !cpu_has (c,X86_FEATURE_TLBSYNC_SFW_NO )) +set_cpu_bug (c,X86_BUG_TLBI ); }static void init_amd (struct cpuinfo_x86 *c)
drivers/android/binder/node.rs +17 -3
@@ -49,9 +49,9 @@/// about to drop the weak reference, then the strong increment could be processed after the /// other thread has already exited, which would be too late. /// -/// Note that trying to create a `ListArc` to the node can succeed even if `has_normal_push` is +/// Note that trying to create a `ListArc` to the node can succeed even if `has_pushed_node` is /// set. This is because another thread might just have popped the node from a todo list, but not -/// yet called `do_work`. However, if `has_normal_push` is false, then creating a `ListArc` should +/// yet called `do_work`. However, if `has_pushed_node` is false, then creating a `ListArc` should /// always succeed. /// /// Like the other fields in `NodeInner`, the delivery state is protected by the process lock.
@@ -733,7 +733,21 @@ fn do_work( self.do_work_locked (writer, owner_inner) } -fn cancel (self:DArc <Self >) {} +fn cancel (self:DArc <Self >) { +let _drop_outside_lock; +let mut owner_inner = self.owner.inner.lock (); + +// We only do something on BINDER_THREAD_EXIT, not process exit. +if owner_inner.is_dead { +return ; + } + +// If BINDER_THREAD_EXIT is invoked on a thread with a pending node refcount update, we +// should move ourselves to ensure the refcount update is still delivered. +if let Some (node) =ListArc ::try_from_arc_borrow (self.as_arc_borrow ()) { + _drop_outside_lock = owner_inner.push_work (node); + } + }fn should_sync_wakeup (&self) ->bool {false
drivers/android/binder/node/wrapper.rs +33 -1
@@ -57,7 +57,39 @@ fn do_work( node.do_work_locked (writer, owner_inner) } -fn cancel (self:DArc <Self >) {} +fn cancel (self:DArc <Self >) { +let _drop_outside_lock; +let node = &self.node; +let mut owner_inner = node.owner.inner.lock (); + +// We only do something on BINDER_THREAD_EXIT, not process exit. +if owner_inner.is_dead { +return ; + } + +// We transfer the responsibility of the node refcount update to the scheduled Node because +// NodeWrapper has no way to re-create the ListArc. +let inner = node.inner.access_mut (&mut owner_inner); + +let ds = &mut inner.delivery_state; +assert! (ds.has_pushed_wrapper); +assert! (ds.has_strong_zero2one); + ds.has_pushed_wrapper =false ; + +// We are changing the state to one where the Node is the strong zero2one update instead of +// the wrapper. + ds.has_weak_zero2one =false ; + +if !ds.has_pushed_node { +if let Some (node2) =ListArc ::try_from_arc_borrow (node.as_arc_borrow ()) { + ds.has_pushed_node =true ; + _drop_outside_lock = owner_inner.push_work (node2); + }else { +// This can't actually happen. + ds.has_strong_zero2one =false ; + } + } + }fn should_sync_wakeup (&self) ->bool {false
drivers/ata/libata-scsi.c +9 -4
@@ -3026,10 +3026,15 @@ static void atapi_qc_complete(struct ata_queued_cmd *qc)if (qc->cdb[0 ] ==ALLOW_MEDIUM_REMOVAL && qc->dev->sdev) qc->dev->sdev->locked =0 ; -if (cmd->result) -ata_scsi_qc_done (qc, false,0 ); -else -ata_scsi_qc_done (qc, true,SAM_STAT_CHECK_CONDITION ); +/* +* Report CHECK CONDITION unless the command was terminated +* with a host byte set. Only set the status byte, so that the +* SCSI midlayer internal byte, which scsi_check_sense() may +* have set from the sense data, is preserved. +*/ +if (get_host_byte (cmd) ==DID_OK ) +set_status_byte (cmd,SAM_STAT_CHECK_CONDITION ); +ata_scsi_qc_done (qc, false,0 ); goto schedule_deferred; }
drivers/block/zloop.c +24 -7
@@ -799,6 +799,27 @@ static void zloop_cmd_workfn(struct work_struct *work) current->flags = orig_flags; } +static void zloop_fill_zero_rq (struct request *rq,unsigned int zero_from) +{ +struct req_iterator iter; +struct bio_vec bv; +unsigned int pos =0 ; +unsigned int end, off; + +rq_for_each_segment (bv, rq, iter) { + end = pos + bv.bv_len; +if (end > zero_from) { +if (pos < zero_from) + off = zero_from - pos; +else + off =0 ; +memzero_page (bv.bv_page, bv.bv_offset + off, + bv.bv_len - off); + } + pos = end; + } +} +static void zloop_complete_rq (struct request *rq) {struct zloop_cmd *cmd =blk_mq_rq_to_pdu (rq);
@@ -813,13 +834,9 @@ static void zloop_complete_rq(struct request *rq)pr_err ("Zone %u: failed read sector %llu, %llu sectors\n" , zone_no, cmd->sector, cmd->nr_sectors); -if (cmd->ret >=0 && cmd->ret !=blk_rq_bytes (rq)) { -/* short read */ -struct bio *bio; - -__rq_for_each_bio (bio, rq) -zero_fill_bio (bio); - } +/* Short read. Zero out the unread tail beyond cmd->ret. */ +if (cmd->ret >=0 && cmd->ret !=blk_rq_bytes (rq)) +zloop_fill_zero_rq (rq, cmd->ret);break ;case REQ_OP_WRITE :case REQ_OP_ZONE_APPEND :
drivers/bluetooth/btintel_pcie.c +14 -3
@@ -401,7 +401,7 @@ static int btintel_pcie_send_sync(struct btintel_pcie_data *data, tfd_index = data->ia.tr_hia[BTINTEL_PCIE_TXQ_NUM ]; -if (tfd_index > txq->count) +if (tfd_index >= txq->count)return -ERANGE ;if (skb->len >BTINTEL_PCIE_BUFFER_SIZE -BTINTEL_PCIE_HCI_TYPE_LEN ) {
@@ -1715,7 +1715,7 @@ static irqreturn_t btintel_pcie_irq_msix_handler(int irq, void *dev_id)static int btintel_pcie_setup_irq (struct btintel_pcie_data *data) {int err; -int num_irqs, i; +int num_irqs, i, j;for (i =0 ; i <BTINTEL_PCIE_MSIX_VEC_MAX ; i++) data->msix_entries[i].entry = i;
@@ -1744,6 +1744,10 @@ static int btintel_pcie_setup_irq(struct btintel_pcie_data *data)KBUILD_MODNAME , msix_entry);if (err) { +for (j =0 ; j < i; j++) +devm_free_irq (&data->pdev->dev, + data->msix_entries[j].vector, + &data->msix_entries[j]);pci_free_irq_vectors (data->pdev); data->alloc_vecs =0 ;return err;
@@ -1815,6 +1819,13 @@ static int btintel_pcie_config_pcie(struct pci_dev *pdev,if (IS_ERR (data->base_addr))return PTR_ERR (data->base_addr); +/* Do shared hardware reset to ensure a clean start before +* configuring interrupts. +*/ + err =btintel_pcie_reset_bt (data); +if (err) +return err; + err =btintel_pcie_setup_irq (data);if (err)return err;
@@ -3003,7 +3014,7 @@ static void btintel_pcie_remove(struct pci_dev *pdev)struct msix_entry *msix_entry; msix_entry = &data->msix_entries[i]; -free_irq (msix_entry->vector, msix_entry); +devm_free_irq (&pdev->dev, msix_entry->vector, msix_entry); }pci_free_irq_vectors (pdev);
drivers/clk/qcom/gcc-eliza.c +4 -2
@@ -3010,8 +3010,6 @@ static const u32 gcc_eliza_critical_cbcrs[] = {0x26034 ,/* GCC_CAMERA_XO_CLK */ 0x27004 ,/* GCC_DISP_AHB_CLK */ 0x71004 ,/* GCC_GPU_CFG_AHB_CLK */ -0x52010 ,/* GCC_PCIE_RSCC_CFG_AHB_CLK */ -0x52010 ,/* GCC_PCIE_RSCC_XO_CLK */ 0x32004 ,/* GCC_VIDEO_AHB_CLK */ 0x32038, /* GCC_VIDEO_XO_CLK */ };
@@ -3045,6 +3043,10 @@ static const struct regmap_config gcc_eliza_regmap_config = {static void clk_eliza_regs_configure (struct device *dev,struct regmap *regmap) { +/* Keep clocks always enabled */ +regmap_update_bits (regmap,0x52010 ,BIT (20 ),BIT (20 ));/* GCC_PCIE_RSCC_CFG_AHB_CLK */ +regmap_update_bits (regmap,0x52010 ,BIT (21 ),BIT (21 ));/* GCC_PCIE_RSCC_XO_CLK */ +/* FORCE_MEM_CORE_ON for ufs phy ice core and gcc ufs phy axi clocks */ qcom_branch_set_force_mem_core (regmap, gcc_ufs_phy_ice_core_clk, true);qcom_branch_set_force_mem_core (regmap, gcc_ufs_phy_axi_clk, true);
drivers/clk/qcom/gcc-kaanapali.c +4 -2
@@ -3464,8 +3464,6 @@ static const u32 gcc_kaanapali_critical_cbcrs[] = {0x9f004 ,/* GCC_EVA_AHB_CLK */ 0x9f024 ,/* GCC_EVA_XO_CLK */ 0x71004 ,/* GCC_GPU_CFG_AHB_CLK */ -0x52010 ,/* GCC_PCIE_RSCC_CFG_AHB_CLK */ -0x52010 ,/* GCC_PCIE_RSCC_XO_CLK */ 0x32004 ,/* GCC_VIDEO_AHB_CLK */ 0x32040, /* GCC_VIDEO_XO_CLK */ };
@@ -3480,6 +3478,10 @@ static const struct regmap_config gcc_kaanapali_regmap_config = {static void clk_kaanapali_regs_configure (struct device *dev,struct regmap *regmap) { +/* Keep clocks always enabled */ +regmap_update_bits (regmap,0x52010 ,BIT (20 ),BIT (20 ));/* GCC_PCIE_RSCC_CFG_AHB_CLK */ +regmap_update_bits (regmap,0x52010 ,BIT (21 ),BIT (21 ));/* GCC_PCIE_RSCC_XO_CLK */ +/* FORCE_MEM_CORE_ON for ufs phy ice core clocks */ qcom_branch_set_force_mem_core (regmap, gcc_ufs_phy_ice_core_clk, true); }
drivers/clk/qcom/gpucc-glymur.c +1 -1
@@ -510,7 +510,7 @@ static struct gdsc gpu_cc_cx_gdsc = { .name = "gpu_cc_cx_gdsc", }, .pwrsts = PWRSTS_OFF_ON, - .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, + .flags = RETAIN_FF_ENABLE | VOTABLE, }; static struct clk_regmap *gpu_cc_glymur_clocks[] = {
drivers/clk/qcom/gpucc-kaanapali.c +1 -1
@@ -380,7 +380,7 @@ static struct gdsc gpu_cc_cx_gdsc = { .name = "gpu_cc_cx_gdsc", }, .pwrsts = PWRSTS_OFF_ON, - .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, + .flags = RETAIN_FF_ENABLE | VOTABLE, }; static struct clk_regmap *gpu_cc_kaanapali_clocks[] = {
drivers/edac/amd64_edac.c +2 -2
@@ -2796,13 +2796,13 @@ static inline void decode_bus_error(int node_id, struct mce *m)* the instance_id. For example, instance_id=0xYXXXXX where Y is the channel * number. * -* For DRAM ECC errors, the Chip Select number is given in bits [2:0] of +* For DRAM ECC errors, the Chip Select number is given in bits [1:0] of * the MCA_SYND[ErrorInformation] field. */ static void umc_get_err_info (struct mce *m,struct err_info *err) { err->channel = (m->ipid &GENMASK (31 ,0 )) >>20 ; - err->csrow = m->synd &0x7 ; + err->csrow = m->synd &0x3 ; }static void decode_umc_error (int node_id,struct mce *m)
drivers/gpio/gpio-exar.c +1 -1
@@ -199,6 +199,7 @@ static int gpio_exar_probe(struct platform_device *pdev) index =ida_alloc (&ida_index,GFP_KERNEL );if (index <0 )return index; + exar_gpio->index = index; ret =devm_add_action_or_reset (dev, exar_devm_ida_free, exar_gpio);if (ret)
@@ -214,7 +215,6 @@ static int gpio_exar_probe(struct platform_device *pdev) exar_gpio->gpio_chip.set = exar_set_value; exar_gpio->gpio_chip.base =-1 ; exar_gpio->gpio_chip.ngpio = ngpios; - exar_gpio->index = index; exar_gpio->first_pin = first_pin; ret =devm_gpiochip_add_data (dev, &exar_gpio->gpio_chip, exar_gpio);
drivers/gpio/gpio-mpsse.c +22 -2
@@ -10,6 +10,7 @@#include <linux/cleanup.h> #include <linux/gpio/driver.h> #include <linux/mutex.h> +#include <linux/rcupdate.h> #include <linux/spinlock.h> #include <linux/usb.h>
@@ -24,6 +25,7 @@ struct mpsse_priv {raw_spinlock_t irq_spin;/* protects worker list */ atomic_t irq_type[16 ];/* pin -> edge detection type */ atomic_t irq_enabled; +atomic_t dying;/* no new workers after disconnect */ int id;u8 gpio_outputs[2 ];/* Output states for GPIOs [L, H] */
@@ -46,6 +48,7 @@ struct mpsse_worker {atomic_t cancelled;struct list_head list;/* linked list */ struct list_head destroy;/* teardown linked list */ +struct rcu_head rcu;/* deferred free for dying path */ };struct bulk_desc {
@@ -525,10 +528,24 @@ static void gpio_mpsse_irq_enable(struct irq_data *irqd) worker->priv = priv;INIT_LIST_HEAD (&worker->list);INIT_WORK (&worker->work, gpio_mpsse_poll); -schedule_work (&worker->work); - scoped_guard(raw_spinlock_irqsave, &priv->irq_spin) + scoped_guard(raw_spinlock_irqsave, &priv->irq_spin) { +if (atomic_read (&priv->dying)) { +/* +* Cannot kfree() here: this callback +* runs with the IRQ descriptor's raw +* spinlock held and kfree() may sleep +* on PREEMPT_RT. The worker is not +* yet published, so the deferred free +* is unobservable. +*/ +kfree_rcu (worker, rcu); +return ; + } +list_add (&worker->list, &priv->workers); +schedule_work (&worker->work); + } } }
@@ -704,6 +721,9 @@ static void gpio_mpsse_disconnect(struct usb_interface *intf) {struct mpsse_priv *priv =usb_get_intfdata (intf); + scoped_guard(raw_spinlock_irqsave, &priv->irq_spin) +atomic_set (&priv->dying,1 ); +/* * Lock prevents double-free of worker from here and the teardown * step at the beginning of gpio_mpsse_poll
drivers/gpio/gpio-xilinx.c +1 -8
@@ -271,14 +271,7 @@ static void xgpio_save_regs(struct xgpio_instance *chip)static int xgpio_request (struct gpio_chip *chip,unsigned int offset) { -int ret; - - ret =pm_runtime_get_sync (chip->parent); -/* -* If the device is already active pm_runtime_get() will return 1 on -* success, but gpio_request still needs to return 0. -*/ -return ret <0 ? ret :0 ; +return pm_runtime_resume_and_get (chip->parent); }static void xgpio_free (struct gpio_chip *chip,unsigned int offset)
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +6 -2
@@ -597,14 +597,18 @@ int amdgpu_amdkfd_get_dmabuf_info(struct amdgpu_device *adev, int dma_buf_fd,/* first get metadata_size by buffer = NULL */ r =amdgpu_bo_get_metadata (bo,NULL ,0 , metadata_size,NULL ); +if (r) + goto out_put;/* user buf_size is bigger than bo metadata_size * allocate a buf at kernel space and copy */ if (*metadata_size <= buffer_size) { *metadata_buffer =kzalloc (*metadata_size,GFP_KERNEL ); -if (!*metadata_buffer) -return -ENOMEM ; +if (!*metadata_buffer) { + r = -ENOMEM ; + goto out_put; + } r =amdgpu_bo_get_metadata (bo, *metadata_buffer, *metadata_size,NULL , &metadata_flags);
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c +46 -31
127 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c +7 -10
@@ -1089,20 +1089,17 @@ void amdgpu_gmc_init_vga_resv_regions(struct amdgpu_device *adev)case CHIP_RENOIR : adev->mman.keep_stolen_vga_memory = true;break ; -case CHIP_POLARIS10 : -case CHIP_POLARIS11 : -case CHIP_POLARIS12 : -/* MacBookPros with switchable graphics put VRAM at 0 when -* the iGPU is enabled which results in cursor issues if -* the cursor ends up at 0. Reserve vram at 0 in that case. -*/ -if (adev->gmc.vram_start ==0 ) - adev->mman.keep_stolen_vga_memory = true; -break ;default : adev->mman.keep_stolen_vga_memory = false;break ; } +/* MacBookPros with switchable graphics put VRAM at 0 when +* the iGPU is enabled which results in cursor issues if +* the cursor ends up at 0. Reserve vram at 0 in that case. +*/ +if ((adev->pdev->subsystem_vendor ==PCI_VENDOR_ID_APPLE ) && + (adev->gmc.vram_start ==0 )) + adev->mman.keep_stolen_vga_memory = true;if (amdgpu_sriov_vf (adev) || !amdgpu_device_has_display_hardware (adev)) {
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +5 -0
@@ -30,6 +30,7 @@#include <drm/amdgpu_drm.h> #include <drm/drm_drv.h> #include <drm/drm_fb_helper.h> +#include <drm/drm_vblank.h> #include "amdgpu_uvd.h" #include "amdgpu_vce.h" #include "atom.h"
@@ -1631,6 +1632,9 @@ u32 amdgpu_get_vblank_counter_kms(struct drm_crtc *crtc)DRM_ERROR ("Invalid crtc %u\n" , pipe);return -EINVAL ; } +if (!down_read_trylock (&adev->reset_domain->sem)) +return drm_crtc_vblank_count (crtc); +/* The hw increments its frame counter at start of vsync, not at start * of vblank, as is required by DRM core vblank counter handling.
@@ -1676,6 +1680,7 @@ u32 amdgpu_get_vblank_counter_kms(struct drm_crtc *crtc)DRM_DEBUG_VBL ("NULL mode info! Returned count may be wrong.\n" ); } +up_read (&adev->reset_domain->sem);return count; }
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c +12 -1
@@ -439,6 +439,7 @@ amdgpu_userq_get_doorbell_index(struct amdgpu_userq_mgr *uq_mgr,u64 doorbell_index;struct drm_gem_object *gobj;struct amdgpu_userq_obj *db_obj = db_info->db_obj; +struct amdgpu_bo *abo;int r, db_size; gobj =drm_gem_object_lookup (filp, db_info->doorbell_handle);
@@ -447,7 +448,17 @@ amdgpu_userq_get_doorbell_index(struct amdgpu_userq_mgr *uq_mgr,return -EINVAL ; } - db_obj->obj =amdgpu_bo_ref (gem_to_amdgpu_bo (gobj)); +/* +* Pinning a regular BO into the doorbell domain would discard its +* contents, possibly those of a buffer shared by another client. +*/ + abo =gem_to_amdgpu_bo (gobj); +if (!(abo->preferred_domains &AMDGPU_GEM_DOMAIN_DOORBELL )) { +drm_gem_object_put (gobj); +return -EINVAL ; + } + + db_obj->obj =amdgpu_bo_ref (abo);drm_gem_object_put (gobj); r =amdgpu_bo_reserve (db_obj->obj, true);
drivers/gpu/drm/amd/amdgpu/mes_userqueue.c +3 -6
@@ -304,8 +304,7 @@ static int mes_userq_mqd_create(struct amdgpu_usermode_queue *queue, compute_mqd =memdup_user (u64_to_user_ptr (mqd_user->mqd), mqd_user->mqd_size);if (IS_ERR (compute_mqd)) { -DRM_ERROR ("Failed to read user MQD\n" ); - r = -ENOMEM ; + r =PTR_ERR (compute_mqd); goto free_mqd; }
@@ -349,8 +348,7 @@ static int mes_userq_mqd_create(struct amdgpu_usermode_queue *queue, mqd_gfx_v11 =memdup_user (u64_to_user_ptr (mqd_user->mqd), mqd_user->mqd_size);if (IS_ERR (mqd_gfx_v11)) { -DRM_ERROR ("Failed to read user MQD\n" ); - r = -ENOMEM ; + r =PTR_ERR (mqd_gfx_v11); goto free_mqd; }
@@ -394,8 +392,7 @@ static int mes_userq_mqd_create(struct amdgpu_usermode_queue *queue, mqd_sdma_v11 =memdup_user (u64_to_user_ptr (mqd_user->mqd), mqd_user->mqd_size);if (IS_ERR (mqd_sdma_v11)) { -DRM_ERROR ("Failed to read sdma user MQD\n" ); - r = -ENOMEM ; + r =PTR_ERR (mqd_sdma_v11); goto free_mqd; }
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +26 -6
@@ -599,12 +599,32 @@ static int allocate_doorbell(struct qcm_process_device *qpd,* we need the physical sdma engine id in order to get the * correct doorbell offset. */ -uint32_t valid_id = idx_offset[qpd->dqm->dev->node_id * -get_num_all_sdma_engines (qpd->dqm) + - q->properties.sdma_engine_id] - + (q->properties.sdma_queue_id &1 ) - *KFD_QUEUE_DOORBELL_MIRROR_OFFSET - + (q->properties.sdma_queue_id >>1 ); +u32 engine_base = idx_offset[dev->node_id * +get_num_all_sdma_engines (qpd->dqm) + + q->properties.sdma_engine_id]; +u32 valid_id; + +/* +* With the aqua_vanjaram doorbell layout, a shader doorbell +* write whose 32-byte block starts in the previous engine's +* range rings that engine instead. Engine ranges are 10 +* indices apart (sdma_doorbell_range = 20 dwords, halved for +* 8-byte doorbells, in aqua_vanjaram_doorbell_index_init()), +* which puts odd engines 2 indices into a shared block. +* Aligning costs at most 2 indices, and 8 queues per engine use +* only 4 of the 10, so the aligned base stays in range. The +* 512-index mirror offset keeps the alignment. +*/ +if (KFD_GC_VERSION (dev) ==IP_VERSION (9 ,4 ,3 ) || +KFD_GC_VERSION (dev) ==IP_VERSION (9 ,4 ,4 ) || +KFD_GC_VERSION (dev) ==IP_VERSION (9 ,5 ,0 )) + engine_base =ALIGN (engine_base, +KFD_SDMA_SHADER_DOORBELL_GRANULARITY ); + + valid_id = engine_base + + (q->properties.sdma_queue_id &1 ) * +KFD_QUEUE_DOORBELL_MIRROR_OFFSET + + (q->properties.sdma_queue_id >>1 );if (restore_id && *restore_id != valid_id)return -EINVAL ;
drivers/gpu/drm/amd/amdkfd/kfd_priv.h +7 -0
@@ -132,6 +132,13 @@*/ #define KFD_QUEUE_DOORBELL_MIRROR_OFFSET 512 +/* +* On GC 9.4.3, 9.4.4 and 9.5.0, doorbell writes issued from shaders are +* routed to an SDMA engine at 32-byte granularity, i.e. 4 indices with the +* 8-byte SDMA doorbells used on SOC15. +*/ +#define KFD_SDMA_SHADER_DOORBELL_GRANULARITY 4 +/** * enum kfd_ioctl_flags - KFD ioctl flags * Various flags that can be set in &amdkfd_ioctl_desc.flags to control how
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +25 -1
@@ -7260,10 +7260,15 @@ decide_crtc_timing_for_drm_display_mode(struct drm_display_mode *drm_mode, const struct drm_display_mode *native_mode, bool scale_enabled) { + /* Inserted modes copy the native sync; a sink mode with equal totals may not */ if (scale_enabled || ( native_mode->clock == drm_mode->clock && native_mode->htotal == drm_mode->htotal && - native_mode->vtotal == drm_mode->vtotal)) { + native_mode->vtotal == drm_mode->vtotal && + native_mode->hsync_start == drm_mode->hsync_start && + native_mode->hsync_end == drm_mode->hsync_end && + native_mode->vsync_start == drm_mode->vsync_start && + native_mode->vsync_end == drm_mode->vsync_end)) { if (native_mode->crtc_clock) copy_crtc_timing_for_drm_display_mode(native_mode, drm_mode); } else {
@@ -10397,6 +10402,13 @@ static void amdgpu_dm_enable_self_refresh(struct amdgpu_display_manager *dm,struct amdgpu_dm_connector *aconn = (struct amdgpu_dm_connector *)acrtc_state->stream->dm_stream_context; +if (!acrtc_state->base.async_flip) { +amdgpu_dm_psr_set_event (dm, acrtc_state->stream, false, + psr_event_immediate_flip, false); +amdgpu_dm_replay_set_event (dm, acrtc_state->stream, false, + replay_event_immediate_flip, false); + } +/* Decrement skip count when SR is enabled and we're doing fast updates. */ if (acrtc_state->update_type ==UPDATE_TYPE_FAST && (psr->psr_feature_enabled || pr->replay_feature_enabled)) {
@@ -10810,6 +10822,18 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_commit *state,spin_unlock_irqrestore (&pcrtc->dev->event_lock, flags); }mutex_lock (&dm->dc_lock); +/* +* Tearing (immediate) flips cannot work with panel self-refresh +* features. The event is cleared by +* amdgpu_dm_enable_self_refresh() once async flips stop. +*/ +if (immediate_flip) { +dc_exit_ips_for_hw_access (dm->dc); +amdgpu_dm_psr_set_event (dm, acrtc_state->stream, true, + psr_event_immediate_flip, true); +amdgpu_dm_replay_set_event (dm, acrtc_state->stream, true, + replay_event_immediate_flip, true); + } update_planes_and_stream_adapter(dm->dc, acrtc_state->update_type, planes_count,
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c +1 -19
@@ -110,25 +110,7 @@ void amdgpu_dm_plane_fill_blending_from_plane_state(const struct drm_plane_stateif (plane_state->pixel_blend_mode ==DRM_MODE_BLEND_PREMULTI || plane_state->pixel_blend_mode ==DRM_MODE_BLEND_COVERAGE ) { -static const uint32_t alpha_formats[] = { -DRM_FORMAT_ARGB8888 , -DRM_FORMAT_RGBA8888 , -DRM_FORMAT_ABGR8888 , -DRM_FORMAT_ARGB2101010 , -DRM_FORMAT_ABGR2101010 , -DRM_FORMAT_ARGB16161616 , -DRM_FORMAT_ABGR16161616 , -DRM_FORMAT_ARGB16161616F , - }; -uint32_t format = plane_state->fb->format->format; -unsigned int i; - -for (i =0 ; i <ARRAY_SIZE (alpha_formats); ++i) { -if (format == alpha_formats[i]) { - *per_pixel_alpha = true; -break ; - } - } + *per_pixel_alpha = plane_state->fb->format->has_alpha;if (*per_pixel_alpha && plane_state->pixel_blend_mode ==DRM_MODE_BLEND_COVERAGE ) *pre_multiplied_alpha = false;
drivers/gpu/drm/aspeed/aspeed_gfx_drv.c +2 -3
@@ -189,13 +189,12 @@ static int aspeed_gfx_load(struct drm_device *drm) }reset_control_deassert (priv->rst); - priv->clk =devm_clk_get (drm->dev,NULL ); + priv->clk =devm_clk_get_enabled (drm->dev,NULL );if (IS_ERR (priv->clk)) {dev_err (&pdev->dev, -"missing or invalid clk device tree entry" ); +"failed to get and enable clock\n" );return PTR_ERR (priv->clk); } -clk_prepare_enable (priv->clk);/* Sanitize control registers */ writel (0 , priv->base +CRT_CTRL1 );
drivers/gpu/drm/bridge/th1520-dw-hdmi.c +4 -4
@@ -135,8 +135,8 @@ static int th1520_dw_hdmi_probe(struct platform_device *pdev) plat_data->priv_data = hdmi; hdmi->dw_hdmi =dw_hdmi_probe (pdev, plat_data); -if (IS_ERR (hdmi)) -return PTR_ERR (hdmi); +if (IS_ERR (hdmi->dw_hdmi)) +return PTR_ERR (hdmi->dw_hdmi);platform_set_drvdata (pdev, hdmi);
@@ -145,9 +145,9 @@ static int th1520_dw_hdmi_probe(struct platform_device *pdev)static void th1520_dw_hdmi_remove (struct platform_device *pdev) { -struct dw_hdmi *hdmi =platform_get_drvdata (pdev); +struct th1520_hdmi *hdmi =platform_get_drvdata (pdev); -dw_hdmi_remove (hdmi); +dw_hdmi_remove (hdmi->dw_hdmi); }static const struct of_device_id th1520_dw_hdmi_of_table[] = {
drivers/gpu/drm/display/drm_dp_helper.c +3 -1
@@ -4634,7 +4634,9 @@ static int dp_aux_backlight_update_status(struct backlight_device *bd)if (!backlight_is_blank (bd)) {if (!bl->enabled) { -drm_edp_backlight_enable (bl->aux, &bl->info, brightness); + ret =drm_edp_backlight_enable (bl->aux, &bl->info, brightness); +if (ret) +return ret; bl->enabled = true;return 0 ; }
drivers/gpu/drm/drm_bridge.c +6 -2
@@ -414,8 +414,10 @@ void drm_bridge_add(struct drm_bridge *bridge)* in bridge_lingering_list. Remove it or bridge_lingering_list will be * corrupted when adding this bridge to bridge_list below. */ +mutex_lock (&bridge_lock);if (!list_empty (&bridge->list))list_del_init (&bridge->list); +mutex_unlock (&bridge_lock);mutex_init (&bridge->hpd_mutex);
@@ -556,8 +558,10 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,if (!bridge->container)DRM_WARN ("DRM bridge corrupted or not allocated by devm_drm_bridge_alloc()\n" ); -if (list_empty (&bridge->list)) -DRM_WARN ("Missing drm_bridge_add() before attach\n" ); + scoped_guard(mutex, &bridge_lock) { +if (list_empty (&bridge->list)) +DRM_WARN ("Missing drm_bridge_add() before attach\n" ); + }drm_bridge_get (bridge);
drivers/gpu/drm/drm_fb_helper.c +3 -3
@@ -1724,10 +1724,10 @@ __drm_fb_helper_initial_config_and_unlock(struct drm_fb_helper *fb_helper) ret =drm_fb_helper_single_fb_probe (fb_helper);if (ret <0 ) { -if (ret == -EAGAIN ) { - fb_helper->deferred_setup = true; +/* modesets are probed but fb_helper->fb isn't; defer restore too */ + fb_helper->deferred_setup = true; +if (ret == -EAGAIN ) ret =0 ; - }mutex_unlock (&fb_helper->lock); goto err_drm_fb_helper_release_info;
drivers/gpu/drm/gud/gud_pipe.c +1 -0
@@ -507,6 +507,7 @@ int gud_plane_atomic_check(struct drm_plane *plane,for_each_new_connector_in_state (state, connector, connector_state, i) {if (connector_state->crtc)break ; + connector_state =NULL ; }/*
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c +1 -1
@@ -1766,6 +1766,7 @@ static int eb_reinit_userptr(struct i915_execbuffer *eb) static noinline int eb_relocate_parse_slow(struct i915_execbuffer *eb) { +const unsigned int count = eb->buffer_count;bool have_copy = false;struct eb_vma *ev;int err =0 ;
@@ -1868,7 +1869,6 @@ static noinline int eb_relocate_parse_slow(struct i915_execbuffer *eb) out:if (have_copy) { -const unsigned int count = eb->buffer_count;unsigned int i;for (i =0 ; i < count; i++) {
drivers/gpu/drm/i915/gt/intel_rps.c +2 -1
@@ -1904,7 +1904,8 @@ static void rps_work(struct work_struct *work) out:spin_lock_irq (gt->irq_lock); -gen6_gt_pm_unmask_irq (gt, rps->pm_events); +if (intel_rps_is_active (rps)) +gen6_gt_pm_unmask_irq (gt, rps->pm_events);spin_unlock_irq (gt->irq_lock); }
drivers/gpu/drm/imagination/pvr_mmu.c +12 -13
@@ -2337,7 +2337,7 @@ void pvr_mmu_op_context_destroy(struct pvr_mmu_op_context *op_ctx)* @ctx: MMU context associated with owning VM context. * @sgt: Scatter gather table containing pages pinned for use by this context. * @device_addr: Virtual device address at the start of the requested mapping. -* @sgt_offset: Start offset of the requested device-virtual memory mapping. +* @sgt_offset: Offset into @sgt of the start of the requested mapping. * @size: Size in bytes of the requested device-virtual memory mapping. For an * unmapping, this should be zero so that no page tables are allocated. *
@@ -2350,7 +2350,6 @@ struct pvr_mmu_op_context * pvr_mmu_op_context_create(struct pvr_mmu_context *ctx, struct sg_table *sgt, u64 device_addr, u64 sgt_offset, u64 size) { - u64 start_addr = device_addr + sgt_offset; int err;struct pvr_mmu_op_context *op_ctx =kzalloc_obj (*op_ctx);
@@ -2365,18 +2364,18 @@ pvr_mmu_op_context_create(struct pvr_mmu_context *ctx, struct sg_table *sgt,if (size) {/* -* The number of page table objects we need to prealloc is -* indicated by the mapping size, start address and the sizes -* of the areas mapped per PT or PD. The range calculation is -* identical to that for the index into a table for a device -* address, so we reuse those functions here. +* The page tables needed are set by the device-virtual range +* being mapped: one level 1 table per 1GiB region and one +* level 0 table per 2MiB region the range touches. Tables that +* already exist are not consumed, so this is an upper bound. */ -const u32 l1_start_idx =pvr_page_table_l2_idx (start_addr); -const u32 l1_end_idx =pvr_page_table_l2_idx (start_addr + size); -const u32 l1_count = l1_end_idx - l1_start_idx +1 ; -const u32 l0_start_idx =pvr_page_table_l1_idx (start_addr); -const u32 l0_end_idx =pvr_page_table_l1_idx (start_addr + size); -const u32 l0_count = l0_end_idx - l0_start_idx +1 ; +const u64 last_addr = device_addr + size -1 ; +const u64 l1_count = + (last_addr >>ROGUE_MMUCTRL_VADDR_PC_INDEX_SHIFT ) - + (device_addr >>ROGUE_MMUCTRL_VADDR_PC_INDEX_SHIFT ) +1 ; +const u64 l0_count = + (last_addr >>ROGUE_MMUCTRL_VADDR_PD_INDEX_SHIFT ) - + (device_addr >>ROGUE_MMUCTRL_VADDR_PD_INDEX_SHIFT ) +1 ;/* * Alloc and push page table entries until we have enough of
drivers/gpu/drm/imagination/pvr_vm.c +4 -4
@@ -418,6 +418,8 @@ pvr_vm_gpuva_unmap(struct drm_gpuva_op *op, void *op_ctx)static int pvr_vm_gpuva_remap (struct drm_gpuva_op *op,void *op_ctx) { +/* The split parts belong to the object of the mapping being split. */ +struct drm_gpuvm_bo *vm_bo = op->remap.unmap->va->vm_bo;struct pvr_vm_bind_op *ctx = op_ctx;u64 va_start =0 , va_range =0 ;int err;
@@ -433,14 +435,12 @@ pvr_vm_gpuva_remap(struct drm_gpuva_op *op, void *op_ctx)drm_gpuva_remap (&ctx->prev_va->base, &ctx->next_va->base, &op->remap);if (op->remap.prev) { -pvr_gem_object_get (gem_to_pvr_gem (ctx->prev_va->base.gem.obj)); -drm_gpuva_link (&ctx->prev_va->base, ctx->gpuvm_bo); +drm_gpuva_link (&ctx->prev_va->base, vm_bo); ctx->prev_va =NULL ; }if (op->remap.next) { -pvr_gem_object_get (gem_to_pvr_gem (ctx->next_va->base.gem.obj)); -drm_gpuva_link (&ctx->next_va->base, ctx->gpuvm_bo); +drm_gpuva_link (&ctx->next_va->base, vm_bo); ctx->next_va =NULL ; }
drivers/gpu/drm/panthor/panthor_sched.c +3 -0
@@ -3675,6 +3675,9 @@ int panthor_group_create(struct panthor_file *pfile, hweight64(group_args->tiler_core_mask) < group_args->max_tiler_cores)return -EINVAL ; +if (group_args->queues.count > sched->cs_slot_count) +return -EINVAL ; + group =kzalloc_obj (*group);if (!group)return -ENOMEM ;
drivers/gpu/drm/vc4/vc4_bo.c +3 -2
@@ -204,7 +204,7 @@ static struct list_head *vc4_get_cache_list_for_size(struct drm_device *dev,struct list_head *new_list;uint32_t i; - new_list = kmalloc_objs(struct list_head, new_size); + new_list = kvmalloc_objs(struct list_head, new_size);if (!new_list)return NULL ;
@@ -224,7 +224,7 @@ static struct list_head *vc4_get_cache_list_for_size(struct drm_device *dev,for (i = vc4->bo_cache.size_list_size; i < new_size; i++)INIT_LIST_HEAD (&new_list[i]); -kfree (vc4->bo_cache.size_list); +kvfree (vc4->bo_cache.size_list); vc4->bo_cache.size_list = new_list; vc4->bo_cache.size_list_size = new_size; }
@@ -1052,6 +1052,7 @@ static void vc4_bo_cache_destroy(struct drm_device *dev, void *unused)cancel_work_sync (&vc4->bo_cache.time_work);vc4_bo_cache_purge (dev); +kvfree (vc4->bo_cache.size_list);for (i =0 ; i < vc4->num_labels; i++) {if (vc4->bo_labels[i].num_allocated) {
drivers/gpu/drm/vc4/vc4_drv.c +4 -1
@@ -360,8 +360,11 @@ static int vc4_drm_bind(struct device *dev) } ret =aperture_remove_all_conflicting_devices (driver->name); -if (ret) +if (ret) { +if (firmware) +rpi_firmware_put (firmware); goto err; + }if (firmware) { ret = rpi_firmware_property(firmware,
drivers/gpu/drm/vc4/vc4_drv.h +1 -1
@@ -1051,7 +1051,7 @@ void vc4_plane_async_set_fb(struct drm_plane *plane,/* vc4_v3d.c */ extern struct platform_driver vc4_v3d_driver;extern const struct of_device_id vc4_v3d_dt_match[]; -int vc4_v3d_get_bin_slot (struct vc4_dev *vc4); +int vc4_v3d_get_bin_slot (struct vc4_dev *vc4,long timeout);int vc4_v3d_bin_bo_get (struct vc4_dev *vc4,bool *used);void vc4_v3d_bin_bo_put (struct vc4_dev *vc4);int vc4_v3d_pm_get (struct vc4_dev *vc4);
drivers/gpu/drm/vc4/vc4_gem.c +7 -1
@@ -877,11 +877,17 @@ vc4_complete_exec(struct drm_device *dev, struct vc4_exec_info *exec)drm_gem_object_put (&bo->base.base); } -/* Free up the allocation of any bin slots we used. */ +/* Free up the allocation of any bin slots we used. Jobs that ran to +* completion had their slots released in vc4_irq_finish_render_job(). +* Only jobs that never completed still have slots to be released here. +*/ spin_lock_irqsave (&vc4->job_lock, irqflags); vc4->bin_alloc_used &= ~exec->bin_slots;spin_unlock_irqrestore (&vc4->job_lock, irqflags); +/* Let anyone waiting on the binner pool retry. */ +wake_up_all (&vc4->job_wait_queue); +/* Release the reference on the binner BO if needed. */ if (exec->bin_bo_used)vc4_v3d_bin_bo_put (vc4);
drivers/gpu/drm/vc4/vc4_irq.c +8 -16
@@ -74,7 +74,7 @@ vc4_overflow_mem_work(struct work_struct *work) bo = vc4->bin_bo; - bin_bo_slot =vc4_v3d_get_bin_slot (vc4); + bin_bo_slot =vc4_v3d_get_bin_slot (vc4,msecs_to_jiffies (500 ));if (bin_bo_slot <0 ) {drm_err (&vc4->base,"Couldn't allocate binner overflow mem\n" ); goto complete;
@@ -165,6 +165,10 @@ vc4_irq_finish_render_job(struct drm_device *dev)trace_vc4_rcl_end_irq (dev, exec->seqno); vc4->finished_seqno++; + + vc4->bin_alloc_used &= ~exec->bin_slots; + exec->bin_slots =0 ; +list_move_tail (&exec->head, &vc4->job_done_list); nextbin =vc4_first_bin_job (vc4);
@@ -276,7 +280,7 @@ vc4_irq_disable(struct drm_device *dev)V3D_WRITE (V3D_INTCTL ,V3D_DRIVER_IRQS );/* Finish any interrupt handler still in flight. */ -synchronize_irq (vc4->irq); +disable_irq (vc4->irq);cancel_work_sync (&vc4->overflow_mem_work); }
@@ -284,7 +288,6 @@ vc4_irq_disable(struct drm_device *dev)int vc4_irq_install (struct drm_device *dev,int irq) {struct vc4_dev *vc4 =to_vc4_dev (dev); -int ret;if (WARN_ON_ONCE (vc4->gen >VC4_GEN_4 ))return -ENODEV ;
@@ -298,19 +301,8 @@ int vc4_irq_install(struct drm_device *dev, int irq)init_waitqueue_head (&vc4->job_wait_queue);INIT_WORK (&vc4->overflow_mem_work, vc4_overflow_mem_work); -/* Clear any pending interrupts someone might have left around -* for us. -*/ -V3D_WRITE (V3D_INTCTL ,V3D_DRIVER_IRQS ); - - ret =devm_request_irq (dev->dev, irq, vc4_irq,0 , -dev_name (dev->dev), dev); -if (ret) -return ret; - -vc4_irq_enable (dev); - -return 0 ; +return devm_request_irq (dev->dev, irq, vc4_irq,IRQF_NO_AUTOEN , +dev_name (dev->dev), dev); }void vc4_irq_uninstall (struct drm_device *dev)
drivers/gpu/drm/vc4/vc4_v3d.c +35 -30
119 lines not on this page · raw message
drivers/gpu/drm/vc4/vc4_validate.c +1 -1
@@ -402,7 +402,7 @@ validate_tile_binning_config(VALIDATE_ARGS)return -EINVAL ; } - bin_slot =vc4_v3d_get_bin_slot (vc4); + bin_slot =vc4_v3d_get_bin_slot (vc4,MAX_SCHEDULE_TIMEOUT );if (bin_slot <0 ) {if (bin_slot != -EINTR && bin_slot != -ERESTARTSYS ) { drm_err(dev, "Failed to allocate binner memory: %d\n",
drivers/gpu/drm/vmwgfx/vmwgfx_cursor_plane.c +21 -5
@@ -324,6 +324,7 @@ void vmw_kms_cursor_snoop(struct vmw_surface *srf,unsigned long kmap_num;SVGA3dCopyBox *box;u32 box_count; +u64 src_extent;void *virtual;bool is_iomem;struct vmw_dma_cmd {
@@ -335,6 +336,8 @@ void vmw_kms_cursor_snoop(struct vmw_surface *srf,vmw_surface_get_desc (VMW_CURSOR_SNOOP_FORMAT );const u32 image_pitch =VMW_CURSOR_SNOOP_WIDTH * desc->pitchBytesPerBlock; +BUILD_BUG_ON (sizeof (*srf->snooper.image) != desc->pitchBytesPerBlock); + cmd = container_of(header, struct vmw_dma_cmd, header);/* No snooper installed, nothing to copy */
@@ -372,8 +375,19 @@ void vmw_kms_cursor_snoop(struct vmw_surface *srf,return ; } +if (box->w ==0 || box->h ==0 ) +return ; + + src_extent = (u64)(box->h -1 ) * cmd->dma.guest.pitch + + (u64 )box->w * desc->pitchBytesPerBlock; +if (src_extent > bo->base.size) { +DRM_ERROR ("Cursor snoop source of %llu bytes exceeds the %zu byte buffer\n" , + src_extent, bo->base.size); +return ; + } + kmap_offset = cmd->dma.guest.ptr.offset >>PAGE_SHIFT ; - kmap_num = (VMW_CURSOR_SNOOP_HEIGHT * image_pitch) >>PAGE_SHIFT ; + kmap_num =PFN_UP (src_extent); ret =ttm_bo_reserve (bo, true, false,NULL );if (unlikely (ret !=0 )) {
@@ -387,14 +401,16 @@ void vmw_kms_cursor_snoop(struct vmw_surface *srf, virtual =ttm_kmap_obj_virtual (&map, &is_iomem); -if (box->w ==VMW_CURSOR_SNOOP_WIDTH && cmd->dma.guest.pitch == image_pitch) { +if (box->w ==VMW_CURSOR_SNOOP_WIDTH && + box->h ==VMW_CURSOR_SNOOP_HEIGHT && + cmd->dma.guest.pitch == image_pitch) {memcpy (srf->snooper.image, virtual,VMW_CURSOR_SNOOP_HEIGHT * image_pitch); }else { -/* Image is unsigned pointer. */ +/* The destination stride is in pixels. */ for (i =0 ; i < box->h; i++) -memcpy (srf->snooper.image + i * image_pitch, - virtual + i * cmd->dma.guest.pitch, +memcpy (srf->snooper.image + i *VMW_CURSOR_SNOOP_WIDTH , + virtual + (size_t )i * cmd->dma.guest.pitch, box->w * desc->pitchBytesPerBlock); } srf->snooper.id++;
drivers/gpu/drm/xe/display/xe_fb_pin.c +3 -3
@@ -356,7 +356,7 @@ static struct i915_vma *__xe_pin_fb_vma(struct drm_gem_object *obj, bool is_dpt,drm_exec_retry_on_contention (&exec);xe_validation_retry_on_oom (&ctx, &ret);if (!ret) -ttm_bo_pin (&bo->ttm); +xe_bo_pin_account (bo); }if (ret) goto err;
@@ -373,7 +373,7 @@ static struct i915_vma *__xe_pin_fb_vma(struct drm_gem_object *obj, bool is_dpt, err_unpin:ttm_bo_reserve (&bo->ttm, false, false,NULL ); -ttm_bo_unpin (&bo->ttm); +xe_bo_unpin_account (bo);ttm_bo_unreserve (&bo->ttm); err:kfree (vma);
@@ -393,7 +393,7 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)xe_ggtt_node_remove (vma->node, false);ttm_bo_reserve (&vma->bo->ttm, false, false,NULL ); -ttm_bo_unpin (&vma->bo->ttm); +xe_bo_unpin_account (vma->bo);ttm_bo_unreserve (&vma->bo->ttm);kfree (vma); }
drivers/gpu/drm/xe/xe_bo.c +105 -34
212 lines not on this page · raw message
drivers/gpu/drm/xe/xe_bo.h +2 -0
@@ -228,6 +228,8 @@ int xe_bo_pin_external(struct xe_bo *bo, bool in_place, struct drm_exec *exec);int xe_bo_pin (struct xe_bo *bo,struct drm_exec *exec);void xe_bo_unpin_external (struct xe_bo *bo);void xe_bo_unpin (struct xe_bo *bo); +void xe_bo_pin_account (struct xe_bo *bo); +void xe_bo_unpin_account (struct xe_bo *bo);int xe_bo_validate (struct xe_bo *bo,struct xe_vm *vm,bool allow_res_evict,struct drm_exec *exec);
drivers/gpu/drm/xe/xe_i2c.c +4 -1
@@ -330,12 +330,15 @@ static void xe_i2c_remove(void *data)xe_i2c_irq_reset (xe);xe_amc_exit (i2c); +/* Stop the notifier from arming the client work before teardown. */ +bus_unregister_notifier (&i2c_bus_type, &i2c->bus_notifier); +cancel_work_sync (&i2c->work); +for (i =0 ; i <XE_I2C_MAX_CLIENTS ; i++) {i2c_unregister_device (i2c->client[i]); i2c->client[i] =NULL ; } -bus_unregister_notifier (&i2c_bus_type, &i2c->bus_notifier);xe_i2c_unregister_adapter (i2c); xe->i2c =NULL ; }
drivers/gpu/drm/xe/xe_lrc.c +25 -13
@@ -1099,8 +1099,7 @@ static void xe_lrc_finish(struct xe_lrc *lrc)#define CONTEXT_ACTIVE XE_LRC_CTX_TIMESTAMP_ACTIVEstatic ssize_t setup_utilization_wa (struct xe_lrc *lrc,struct xe_hw_engine *hwe, -u32 *batch, -size_t max_len) +u32 *batch,size_t max_len,bool indirect) {u32 *cmd = batch;
@@ -1131,19 +1130,25 @@ static ssize_t setup_utilization_wa(struct xe_lrc *lrc, }static ssize_t setup_timestamp_wa (struct xe_lrc *lrc,struct xe_hw_engine *hwe, -u32 *batch,size_t max_len) +u32 *batch,size_t max_len,bool indirect) {const u32 ts_addr =__xe_lrc_ctx_timestamp_ggtt_addr (lrc);u32 *cmd = batch; -if (!XE_GT_WA (lrc->gt,16010904313 ) || - !(hwe->class ==XE_ENGINE_CLASS_RENDER || - hwe->class ==XE_ENGINE_CLASS_COMPUTE || - hwe->class ==XE_ENGINE_CLASS_COPY || +if (!XE_GT_WA (lrc->gt,16010904313 )) +return 0 ; + +if (!indirect && + !(hwe->class ==XE_ENGINE_CLASS_COPY || hwe->class ==XE_ENGINE_CLASS_VIDEO_DECODE || hwe->class ==XE_ENGINE_CLASS_VIDEO_ENHANCE ))return 0 ; +if (indirect && + !(hwe->class ==XE_ENGINE_CLASS_RENDER || + hwe->class ==XE_ENGINE_CLASS_COMPUTE )) +return 0 ; +if (xe_gt_WARN_ON (lrc->gt, max_len <12 ))return -ENOSPC ;
@@ -1169,7 +1174,8 @@ static ssize_t setup_timestamp_wa(struct xe_lrc *lrc, struct xe_hw_engine *hwe,static ssize_t setup_configfs_post_ctx_restore_bb (struct xe_lrc *lrc,struct xe_hw_engine *hwe, -u32 *batch,size_t max_len) +u32 *batch,size_t max_len, +bool indirect) {struct xe_device *xe =gt_to_xe (lrc->gt);const u32 *user_batch;
@@ -1198,7 +1204,8 @@ static ssize_t setup_configfs_post_ctx_restore_bb(struct xe_lrc *lrc,static ssize_t setup_configfs_mid_ctx_restore_bb (struct xe_lrc *lrc,struct xe_hw_engine *hwe, -u32 *batch,size_t max_len) +u32 *batch,size_t max_len, +bool indirect) {struct xe_device *xe =gt_to_xe (lrc->gt);const u32 *user_batch;
@@ -1227,7 +1234,8 @@ static ssize_t setup_configfs_mid_ctx_restore_bb(struct xe_lrc *lrc,static ssize_t setup_invalidate_state_cache_wa (struct xe_lrc *lrc,struct xe_hw_engine *hwe, -u32 *batch,size_t max_len) +u32 *batch,size_t max_len, +bool indirect) {u32 *cmd = batch;
@@ -1247,7 +1255,8 @@ static ssize_t setup_invalidate_state_cache_wa(struct xe_lrc *lrc,static ssize_t setup_invalidate_auxccs_wa (struct xe_lrc *lrc,struct xe_hw_engine *hwe, -u32 *batch,size_t max_len) +u32 *batch,size_t max_len, +bool indirect) {struct xe_gt *gt = lrc->gt; u32 *(*emit)(struct xe_gt *gt, u32 *cmd) =
@@ -1264,7 +1273,7 @@ static ssize_t setup_invalidate_auxccs_wa(struct xe_lrc *lrc,struct bo_setup {ssize_t (*setup)(struct xe_lrc *lrc,struct xe_hw_engine *hwe, -u32 *batch,size_t max_size); +u32 *batch,size_t max_size,bool indirect); };struct bo_setup_state {
@@ -1273,6 +1282,7 @@ struct bo_setup_state {struct xe_hw_engine *hwe;size_t max_size;size_t reserve_dw; +bool indirect;unsigned int offset;const struct bo_setup *funcs;unsigned int num_funcs;
@@ -1298,7 +1308,8 @@ static int setup_bo(struct bo_setup_state *state)for (size_t i =0 ; i < state->num_funcs; i++) {ssize_t len = state->funcs[i].setup (state->lrc, state->hwe, - state->ptr, remain); + state->ptr, remain, + state->indirect); remain -= len;
@@ -1404,6 +1415,7 @@ setup_indirect_ctx(struct xe_lrc *lrc, struct xe_hw_engine *hwe)struct bo_setup_state state = { .lrc = lrc, .hwe = hwe, + .indirect = true, .max_size = (63 *64 )/* max 63 cachelines */ , .buffer =NULL , .offset =__xe_lrc_indirect_ctx_offset (lrc),
drivers/gpu/drm/xe/xe_mmio.c +3 -2
@@ -288,6 +288,7 @@ u64 xe_mmio_read64_2x32(struct xe_mmio *mmio, struct xe_reg reg)return (u64 )udw <<32 | ldw; } +#define __XE_MMIO_WAIT_MAX_BACKOFF_100MS (100 * USEC_PER_MSEC)static int __xe_mmio_wait32 (struct xe_mmio *mmio,struct xe_reg reg,u32 mask,u32 val,u32 timeout_us,u32 *out_val,bool atomic,bool expect_match) {
@@ -318,10 +319,10 @@ static int __xe_mmio_wait32(struct xe_mmio *mmio, struct xe_reg reg, u32 mask, u wait =ktime_us_delta (end, cur);if (atomic) -udelay (wait); +udelay (min_t (s64, wait, (MAX_UDELAY_MS *1000 )));else usleep_range (wait, wait <<1 ); - wait <<=1 ; + wait =min_t (s64, wait <<1 , __XE_MMIO_WAIT_MAX_BACKOFF_100MS); }if (ret !=0 ) {
drivers/gpu/drm/xe/xe_sysctrl_mailbox.c +8 -8
@@ -19,20 +19,20 @@#include "xe_sysctrl_mailbox_types.h" struct xe_sysctrl_mailbox_msg_hdr { -__le32 data; -} __packed; +u32 data; +};#define XE_SYSCTRL_HDR_GROUP_ID (hdr) \ - FIELD_GET(SYSCTRL_HDR_GROUP_ID_MASK, le32_to_cpu((hdr)->data)) + FIELD_GET(SYSCTRL_HDR_GROUP_ID_MASK, (hdr)->data)#define XE_SYSCTRL_HDR_COMMAND (hdr) \ - FIELD_GET(SYSCTRL_HDR_COMMAND_MASK, le32_to_cpu((hdr)->data)) + FIELD_GET(SYSCTRL_HDR_COMMAND_MASK, (hdr)->data)#define XE_SYSCTRL_HDR_IS_RESPONSE (hdr) \ - FIELD_GET(SYSCTRL_HDR_IS_RESPONSE, le32_to_cpu((hdr)->data)) + FIELD_GET(SYSCTRL_HDR_IS_RESPONSE, (hdr)->data)#define XE_SYSCTRL_HDR_RESULT (hdr) \ - FIELD_GET(SYSCTRL_HDR_RESULT_MASK, le32_to_cpu((hdr)->data)) + FIELD_GET(SYSCTRL_HDR_RESULT_MASK, (hdr)->data)static bool sysctrl_wait_bit_clear (struct xe_sysctrl *sc,u32 bit_mask,unsigned int timeout_ms)
@@ -126,8 +126,8 @@ static int sysctrl_prepare_command(struct xe_device *xe,return -ENOMEM ; hdr = (struct xe_sysctrl_mailbox_msg_hdr *)buffer; - hdr->data =cpu_to_le32 (FIELD_PREP (SYSCTRL_HDR_GROUP_ID_MASK , group_id) | -FIELD_PREP (SYSCTRL_HDR_COMMAND_MASK , command)); + hdr->data =FIELD_PREP (SYSCTRL_HDR_GROUP_ID_MASK , group_id) | +FIELD_PREP (SYSCTRL_HDR_COMMAND_MASK , command);if (data_in && data_in_len)memcpy (buffer +sizeof (*hdr), data_in, data_in_len);
drivers/hid/hid-steam.c +115 -131
516 lines not on this page · raw message
drivers/input/joystick/xpad.c +4 -0
@@ -302,6 +302,8 @@ static const struct xpad_device { { 0x17ef, 0x6182, "Lenovo Legion Controller for Windows", 0, XTYPE_XBOX360 }, { 0x1949, 0x041a, "Amazon Game Controller", 0, XTYPE_XBOX360 }, { 0x1a86, 0xe310, "Legion Go S", 0, XTYPE_XBOX360 }, + { 0x1b1c, 0x2b1f, "Corsair Novablade Pro (Wired)", 0, XTYPE_XBOX360 }, + { 0x1b1c, 0x2b2b, "Corsair Novablade Pro (2.4 GHz Receiver)", 0, XTYPE_XBOX360 }, { 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 }, { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, { 0x1bad, 0x0130, "Ion Drum Rocker", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
@@ -379,6 +381,7 @@ static const struct xpad_device { { 0x2993, 0x2001, "TECNO Pocket Go", 0, XTYPE_XBOX360 }, { 0x2dc8, 0x2000, "8BitDo Pro 2 Wired Controller fox Xbox", 0, XTYPE_XBOXONE }, { 0x2dc8, 0x200f, "8BitDo Ultimate 3-mode Controller for Xbox", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, + { 0x2dc8, 0x201e, "8BitDo Pro 2 Wired Controller for Xbox", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, { 0x2dc8, 0x3106, "8BitDo Ultimate Wireless / Pro 2 Wired Controller", 0, XTYPE_XBOX360 }, { 0x2dc8, 0x3109, "8BitDo Ultimate Wireless Bluetooth", 0, XTYPE_XBOX360 }, { 0x2dc8, 0x310a, "8BitDo Ultimate 2C Wireless Controller", 0, XTYPE_XBOX360 },
@@ -545,6 +548,7 @@ static const struct usb_device_id xpad_table[] = {XPAD_XBOX360_VENDOR (0x17ef ),/* Lenovo */ XPAD_XBOX360_VENDOR (0x1949 ),/* Amazon controllers */ XPAD_XBOX360_VENDOR (0x1a86 ),/* Nanjing Qinheng Microelectronics (WCH) */ +XPAD_XBOX360_VENDOR (0x1b1c ),/* Corsair controllers */ XPAD_XBOX360_VENDOR (0x1bad ),/* Harmonix Rock Band guitar and drums */ XPAD_XBOX360_VENDOR (0x1ee9 ),/* ZOTAC Technology Limited */ XPAD_XBOX360_VENDOR(0x20bc), /* BETOP wireless dongles */
drivers/input/misc/ati_remote2.c +4 -8
@@ -672,8 +672,7 @@ static ssize_t ati_remote2_show_channel_mask(struct device *dev,struct device_attribute *attr, char *buf) { - struct usb_device *udev = to_usb_device(dev); -struct usb_interface *intf =usb_ifnum_to_if (udev,0 ); + struct usb_interface *intf = to_usb_interface(dev);struct ati_remote2 *ar2 =usb_get_intfdata (intf);return sprintf (buf,"0x%04x\n" , ar2->channel_mask);
@@ -683,8 +682,7 @@ static ssize_t ati_remote2_store_channel_mask(struct device *dev,struct device_attribute *attr, const char *buf, size_t count) { - struct usb_device *udev = to_usb_device(dev); -struct usb_interface *intf =usb_ifnum_to_if (udev,0 ); + struct usb_interface *intf = to_usb_interface(dev);struct ati_remote2 *ar2 =usb_get_intfdata (intf);unsigned int mask;int r;
@@ -720,8 +718,7 @@ static ssize_t ati_remote2_show_mode_mask(struct device *dev,struct device_attribute *attr, char *buf) { - struct usb_device *udev = to_usb_device(dev); -struct usb_interface *intf =usb_ifnum_to_if (udev,0 ); + struct usb_interface *intf = to_usb_interface(dev);struct ati_remote2 *ar2 =usb_get_intfdata (intf);return sprintf (buf,"0x%02x\n" , ar2->mode_mask);
@@ -731,8 +728,7 @@ static ssize_t ati_remote2_store_mode_mask(struct device *dev,struct device_attribute *attr, const char *buf, size_t count) { - struct usb_device *udev = to_usb_device(dev); -struct usb_interface *intf =usb_ifnum_to_if (udev,0 ); + struct usb_interface *intf = to_usb_interface(dev);struct ati_remote2 *ar2 =usb_get_intfdata (intf);unsigned int mask;int err;
drivers/iommu/dma-iommu.c +2 -2
@@ -1228,9 +1228,9 @@ dma_addr_t iommu_dma_map_phys(struct device *dev, phys_addr_t phys, size_t size,* If both the physical buffer start address and size are page aligned, * we don't need to use a bounce page. */ -if (dev_use_swiotlb (dev, size, dir) && +if (!(attrs &DMA_ATTR_MMIO ) &&dev_use_swiotlb (dev, size, dir) &&iova_unaligned (iovad, phys, size)) { -if (attrs & (DMA_ATTR_MMIO |DMA_ATTR_REQUIRE_COHERENT )) +if (attrs &DMA_ATTR_REQUIRE_COHERENT )return DMA_MAPPING_ERROR ; phys =iommu_dma_map_swiotlb (dev, phys, size, dir, attrs);
drivers/md/dm-crypt.c +6 -1
@@ -2895,8 +2895,13 @@ static int crypt_ctr_cipher_new(struct dm_target *ti, char *cipher_in, char *key } } -if (*ivmode && !strcmp (*ivmode,"lmk" )) +if (*ivmode && !strcmp (*ivmode,"lmk" )) { +if (crypt_integrity_aead (cc)) { + ti->error ="AEAD transforms not supported for LMK" ; +return -EINVAL ; + } cc->tfms_count =64 ; + }if (*ivmode && !strcmp (*ivmode,"essiv" )) {if (!*ivopts) {
drivers/md/dm-integrity.c +2 -2
@@ -2721,7 +2721,7 @@ static void dm_integrity_inline_recheck(struct work_struct *w) outgoing_data = dio->integrity_payload +PAGE_SIZE ;while (dio->bio_details.bi_iter.bi_size) { -char digest[HASH_MAX_DIGESTSIZE ]; +char digest[MAX_T (size_t,HASH_MAX_DIGESTSIZE ,MAX_TAG_SIZE )];int r;struct bio_integrity_payload *bip;struct bio_vec bv;
@@ -2788,7 +2788,7 @@ static inline bool dm_integrity_check(struct dm_integrity_c *ic, struct dm_integunsigned pos =0 ;while (dio->bio_details.bi_iter.bi_size) { -char digest[HASH_MAX_DIGESTSIZE ]; +char digest[MAX_T (size_t,HASH_MAX_DIGESTSIZE ,MAX_TAG_SIZE )];struct bio_vec bv =bio_iter_iovec (bio, dio->bio_details.bi_iter);char *mem =integrity_kmap (ic, bv.bv_page);integrity_sector_checksum (ic, &dio->ahash_req, dio->bio_details.bi_iter.bi_sector, mem, bv.bv_offset, digest);
drivers/md/dm-ioctl.c +11 -3
@@ -658,10 +658,16 @@ static void *get_result_buffer(struct dm_ioctl *param, size_t param_size, { param->data_start =align_ptr (param +1 ) - (void *) param; -if (param->data_start < param_size) +if (param->data_start < param_size) { *len = param_size - param->data_start; -else + }else { +/* +* The buffer can be as small as offsetof(*param, data), which +* is less than sizeof(*param), so don't run off the end of it. +*/ *len =0 ; + param->data_start = param_size; + }return ((void *) param) + param->data_start; }
@@ -1289,6 +1295,7 @@ static int do_resume(struct dm_ioctl *param)/* Do we need to load a new map ? */ if (new_map) {sector_t old_size, new_size; +blk_mode_t new_map_mode;dm_ima_context_table_op (md, ima_context,DM_IMA_TABLE_SAVE );/* Suspend if it isn't already suspended */
@@ -1321,6 +1328,7 @@ static int do_resume(struct dm_ioctl *param) } } + new_map_mode =dm_table_get_mode (new_map); old_size =dm_get_size (md); old_map =dm_swap_table (md, new_map);if (IS_ERR (old_map)) {
@@ -1336,7 +1344,7 @@ static int do_resume(struct dm_ioctl *param)if (old_size && new_size && old_size != new_size) need_resize_uevent = true; -if (dm_table_get_mode (new_map) &BLK_OPEN_WRITE ) +if (new_map_mode &BLK_OPEN_WRITE )set_disk_ro (dm_disk (md),0 );else set_disk_ro (dm_disk (md),1 );
drivers/md/dm-snap.c +14 -0
@@ -1294,6 +1294,20 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv) goto bad_store; } +/* +* snapshot-merge requires the optional prepare_merge/commit_merge +* callbacks; the transient exception store does not implement them. +* The handover path checks this in __validate_exception_handover(), +* but a directly constructed snapshot-merge never goes through it. +*/ +if (dm_target_is_snapshot_merge (ti) && + (!s->store->type->prepare_merge || + !s->store->type->commit_merge)) { + ti->error ="Snapshot exception store does not support snapshot-merge." ; + r = -EINVAL ; + goto bad_hash_tables; + } + argv += args_used; argc -= args_used;
drivers/memstick/core/memstick.c +2 -6
@@ -370,9 +370,7 @@ int memstick_set_rw_addr(struct memstick_dev *card) { card->next_request = h_memstick_set_rw_addr;memstick_new_req (card->host); -if (!wait_for_completion_timeout (&card->mrq_complete, -msecs_to_jiffies (500 ))) - card->current_mrq.error = -ETIMEDOUT ; +wait_for_completion (&card->mrq_complete);return card->current_mrq.error; }
@@ -405,9 +403,7 @@ static struct memstick_dev *memstick_alloc_card(struct memstick_host *host) card->next_request = h_memstick_read_dev_id;memstick_new_req (host); -if (!wait_for_completion_timeout (&card->mrq_complete, -msecs_to_jiffies (500 ))) - card->current_mrq.error = -ETIMEDOUT ; +wait_for_completion (&card->mrq_complete);if (card->current_mrq.error) goto err_out;
drivers/memstick/host/rtsx_usb_ms.c +11 -20
@@ -27,7 +27,6 @@ struct rtsx_usb_ms {struct memstick_host *msh;struct memstick_request *req; -struct mutex host_mutex;struct work_struct handle_req;struct delayed_work poll_card;
@@ -514,6 +513,13 @@ static void rtsx_usb_ms_handle_req(struct work_struct *work)struct memstick_host *msh = host->msh;int rc; +/* Fail requests after eject so their waiters are released. */ +if (host->eject) { +while (!memstick_next_req (msh, &host->req)) + host->req->error = -ENOMEDIUM ; +return ; + } +if (!host->req) {pm_runtime_get_sync (ms_dev (host)); do {
@@ -547,8 +553,7 @@ static void rtsx_usb_ms_request(struct memstick_host *msh)dev_dbg (ms_dev (host),"--> %s\n" , __func__); -if (!host->eject) -schedule_work (&host->handle_req); +schedule_work (&host->handle_req); } static int rtsx_usb_ms_set_param(struct memstick_host *msh,
@@ -781,7 +786,6 @@ static int rtsx_usb_ms_drv_probe(struct platform_device *pdev) host->power_mode =MEMSTICK_POWER_OFF ;platform_set_drvdata (pdev, host); -mutex_init (&host->host_mutex);INIT_WORK (&host->handle_req, rtsx_usb_ms_handle_req);INIT_DELAYED_WORK (&host->poll_card, rtsx_usb_ms_poll_card);
@@ -812,27 +816,12 @@ static void rtsx_usb_ms_drv_remove(struct platform_device *pdev) {struct rtsx_usb_ms *host =platform_get_drvdata (pdev);struct memstick_host *msh = host->msh; -int err; host->eject = true; msh->removing = true; -cancel_work_sync (&host->handle_req); +flush_work (&host->handle_req);cancel_delayed_work_sync (&host->poll_card); -mutex_lock (&host->host_mutex); -if (host->req) { -dev_dbg (ms_dev (host), -"%s: Controller removed during transfer\n" , -dev_name (&msh->dev)); - host->req->error = -ENOMEDIUM ; -do { - err =memstick_next_req (msh, &host->req); -if (!err) - host->req->error = -ENOMEDIUM ; - }while (!err); - } -mutex_unlock (&host->host_mutex); -/* Balance possible unbalanced usage count * e.g. unconditional module removal */
@@ -841,6 +830,8 @@ static void rtsx_usb_ms_drv_remove(struct platform_device *pdev)pm_runtime_disable (ms_dev (host));memstick_remove_host (msh); +/* No card, no new requests; wait for the last failed one to finish. */ +cancel_work_sync (&host->handle_req);dev_dbg (ms_dev (host),": Realtek USB Memstick controller has been removed\n" );memstick_free_host (msh);
drivers/mmc/host/cavium-octeon.c +4 -1
@@ -301,9 +301,12 @@ static void octeon_mmc_remove(struct platform_device *pdev)u64 dma_cfg;int i; -for (i =0 ; i <CAVIUM_MAX_MMC ; i++) +for (i =0 ; i <CAVIUM_MAX_MMC ; i++) {if (host->slot[i])cvm_mmc_of_slot_remove (host->slot[i]); +if (host->slot_pdev[i]) +of_platform_device_destroy (&host->slot_pdev[i]->dev,NULL ); + } dma_cfg =readq (host->dma_base +MIO_EMM_DMA_CFG (host)); dma_cfg &= ~MIO_EMM_DMA_CFG_EN ;
drivers/mmc/host/cavium-thunderx.c +4 -1
@@ -173,9 +173,12 @@ static void thunder_mmc_remove(struct pci_dev *pdev)u64 dma_cfg;int i; -for (i =0 ; i <CAVIUM_MAX_MMC ; i++) +for (i =0 ; i <CAVIUM_MAX_MMC ; i++) {if (host->slot[i])cvm_mmc_of_slot_remove (host->slot[i]); +if (host->slot_pdev[i]) +of_platform_device_destroy (&host->slot_pdev[i]->dev,NULL ); + } dma_cfg =readq (host->dma_base +MIO_EMM_DMA_CFG (host)); dma_cfg &= ~MIO_EMM_DMA_CFG_EN ;
drivers/mmc/host/mtk-sd.c +1 -0
@@ -3216,6 +3216,7 @@ static void msdc_drv_remove(struct platform_device *pdev)platform_set_drvdata (pdev,NULL );mmc_remove_host (mmc); +cancel_delayed_work_sync (&host->req_timeout);msdc_deinit_hw (host);msdc_gate_clock (host);
drivers/mmc/host/sdhci-sprd.c +4 -0
@@ -890,6 +890,10 @@ static void sdhci_sprd_remove(struct platform_device *pdev)struct sdhci_host *host =platform_get_drvdata (pdev);struct sdhci_sprd_host *sprd_host =TO_SPRD_HOST (host); +pm_runtime_get_sync (&pdev->dev); +pm_runtime_disable (&pdev->dev); +pm_runtime_put_noidle (&pdev->dev); +sdhci_remove_host (host,0 );clk_disable_unprepare (sprd_host->clk_sdio);
drivers/net/amt.c +15 -33
96 lines not on this page · raw message
drivers/net/bareudp.c +2 -1
@@ -355,7 +355,7 @@ static int bareudp_xmit_skb(struct sk_buff *skb, struct net_device *dev,if (err) goto free_dst; -skb_set_inner_protocol (skb, bareudp->ethertype); +skb_set_inner_protocol (skb, skb->protocol); udp_tunnel_xmit_skb(rt, sk, skb, saddr, info->key.u.ipv4.dst, tos, ttl, df, sport, bareudp->port, !net_eq(bareudp->net, dev_net(bareudp->dev)),
@@ -423,6 +423,7 @@ static int bareudp6_xmit_skb(struct sk_buff *skb, struct net_device *dev,if (err) goto free_dst; +skb_set_inner_protocol (skb, skb->protocol); daddr = info->key.u.ipv6.dst; udp_tunnel6_xmit_skb(dst, sk, skb, dev, &saddr, &daddr, prio, ttl,
drivers/net/bonding/bond_main.c +4 -4
@@ -5738,12 +5738,12 @@ static int bond_xdp_set(struct net_device *dev, struct bpf_prog *prog,bpf_prog_inc (prog); } -if (prog) { +if (prog && !old_prog)static_branch_inc (&bpf_master_redirect_enabled_key); - }else if (old_prog) { -bpf_prog_put (old_prog); +else if (!prog && old_prog)static_branch_dec (&bpf_master_redirect_enabled_key); - } +if (old_prog) +bpf_prog_put (old_prog);return 0 ;
drivers/net/can/dev/skb.c +4 -0
@@ -210,6 +210,10 @@ static void init_can_skb(struct sk_buff *skb) { skb->pkt_type =PACKET_BROADCAST ; skb->ip_summed =CHECKSUM_UNNECESSARY ; + +skb_reset_mac_header (skb); +skb_reset_network_header (skb); +skb_reset_transport_header (skb); }struct sk_buff *alloc_can_skb (struct net_device *dev,struct can_frame **cf)
drivers/net/can/usb/f81604.c +1 -1
@@ -169,7 +169,7 @@ struct f81604_int_data {u8 rxerr;u8 txerr;u8 val; -} __packed__aligned(4) ; +} __packed;struct f81604_sff {__be16 id;
drivers/net/can/vxcan.c +3 -0
@@ -78,6 +78,9 @@ static netdev_tx_t vxcan_xmit(struct sk_buff *oskb, struct net_device *dev)/* reset CAN GW hop counter */ csx->can_gw_hops =0 ; +/* start with new CAN skb UID in the other namespace */ + csx->can_skb_uid =0 ; + skb->pkt_type =PACKET_BROADCAST ; skb->dev = peer; skb->ip_summed =CHECKSUM_UNNECESSARY ;
drivers/net/dsa/microchip/ksz_common.h +1 -1
@@ -778,7 +778,7 @@ static inline bool ksz_is_sgmii_port(struct ksz_device *dev, int port)#define KSZ88_FAMILY_ID 0x88#define KSZ8895_FAMILY_ID 0x95 -#define KSZ8_PORT_STATUS_0 0x08 +#define KSZ8_PORT_STATUS_0 0x18#define KSZ8_PORT_FIBER_MODE BIT(7)#define SW_CHIP_ID_M GENMASK(7, 4)
drivers/net/ethernet/airoha/airoha_eth.c +26 -6
@@ -2716,14 +2716,34 @@ static int airoha_qdma_set_trtcm_param(struct airoha_qdma *qdma, int channel,FIELD_PREP (TRTCM_METER_GROUP_MASK , group) |FIELD_PREP (TRTCM_PARAM_INDEX_MASK , idx) |FIELD_PREP (TRTCM_PARAM_RATE_TYPE_MASK , mode); +int i; -airoha_qdma_wr (qdma,REG_TRTCM_DATA_LOW (addr), val); -airoha_qdma_wr (qdma,REG_TRTCM_CFG_PARAM (addr), config); +/* +* HW might be in the middle of bucket handling and might +* require an additional try to actually apply the new TRTCM +* config. +*/ +for (i =0 ; i <TRTCM_CONFIG_RETRY_MAX ; i++) { +u32 data =0 ; -return read_poll_timeout (airoha_qdma_rr, val, - val &TRTCM_PARAM_RW_DONE_MASK , -USEC_PER_MSEC ,10 *USEC_PER_MSEC , true, - qdma,REG_TRTCM_CFG_PARAM (addr)); +airoha_qdma_wr (qdma,REG_TRTCM_DATA_LOW (addr), val); +airoha_qdma_wr (qdma,REG_TRTCM_CFG_PARAM (addr), config); + +if (read_poll_timeout (airoha_qdma_rr, data, + data &TRTCM_PARAM_RW_DONE_MASK , +USEC_PER_MSEC ,10 *USEC_PER_MSEC , + true, qdma,REG_TRTCM_CFG_PARAM (addr))) +continue ; + +if (airoha_qdma_get_trtcm_param (qdma, channel, addr, param, + mode, &data,NULL )) +continue ; + +if (data == val) +return 0 ; + } + +return -EBUSY ; } static int airoha_qdma_set_trtcm_config(struct airoha_qdma *qdma, int channel,
drivers/net/ethernet/airoha/airoha_eth.h +2 -0
@@ -171,6 +171,8 @@ enum trtcm_param {#define TRTCM_TOKEN_RATE_MASK GENMASK(23, 6)#define TRTCM_TOKEN_RATE_FRACTION_MASK GENMASK(5, 0) +#define TRTCM_CONFIG_RETRY_MAX 2 +enum airoha_dma_map_type {AIROHA_DMA_UNMAPPED ,AIROHA_DMA_MAP_SINGLE ,
drivers/net/ethernet/broadcom/bnxt/bnxt.c +120 -69
55 lines not on this page · raw message
drivers/net/ethernet/broadcom/bnxt/bnxt.h +0 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c +11 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/google/gve/gve_main.c +4 -4
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/google/gve/gve_rx_dqo.c +12 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/e1000e/netdev.c +7 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/iavf/iavf_main.c +67 -18
85 lines not on this page · raw message
drivers/net/ethernet/intel/iavf/iavf_virtchnl.c +89 -10
99 lines not on this page · raw message
drivers/net/ethernet/intel/ice/devlink/port.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_eswitch.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_txrx.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/rx.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +9 -4
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/esw/adj_vport.c +0 -20
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c +57 -22
79 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/vport.c +0 -24
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/spectrum.h +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c +8 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c +7 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c +16 -12
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +13 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/xilinx/xilinx_axienet.h +5 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/xilinx/xilinx_axienet_main.c +42 -9
51 lines not on this page · raw message
drivers/net/wireless/ath/ath12k/core.c +1 -32
Lines of this file are not shown. View the raw message.
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +25 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/marvell/libertas/tx.c +0 -7
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt76.h +10 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7603/init.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7915/init.c +6 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7915/main.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7925/mac.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7925/main.c +12 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt792x_acpi_sar.c +85 -43
128 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt792x_acpi_sar.h +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7996/init.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7996/main.c +9 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7996/mcu.h +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/tx.c +80 -9
89 lines not on this page · raw message
drivers/pmdomain/rockchip/pm-domains.c +17 -3
Lines of this file are not shown. View the raw message.
drivers/power/sequencing/pwrseq-pcie-m2.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/spi/spi-sg2044-nor.c +48 -8
56 lines not on this page · raw message
drivers/ufs/core/ufshcd.c +26 -27
53 lines not on this page · raw message
fs/namespace.c +191 -63
254 lines not on this page · raw message
fs/pnode.c +90 -18
108 lines not on this page · raw message
fs/xfs/libxfs/xfs_exchmaps.c +14 -89
103 lines not on this page · raw message
fs/xfs/xfs_exchrange.c +37 -14
51 lines not on this page · raw message
include/linux/virtio_net.h +25 -35
60 lines not on this page · raw message
io_uring/memmap.c +34 -11
45 lines not on this page · raw message
mm/mremap.c +52 -18
70 lines not on this page · raw message
net/bluetooth/iso.c +42 -10
52 lines not on this page · raw message
net/bluetooth/rfcomm/core.c +95 -39
134 lines not on this page · raw message
net/bluetooth/sco.c +65 -22
87 lines not on this page · raw message
net/bridge/netfilter/nf_conntrack_bridge.c +7 -3
Lines of this file are not shown. View the raw message.
net/can/af_can.c +36 -11
47 lines not on this page · raw message
net/mac80211/tx.c +46 -24
70 lines not on this page · raw message
net/tipc/topsrv.c +65 -15
80 lines not on this page · raw message
net/vmw_vsock/virtio_transport_common.c +3 -1
Lines of this file are not shown. View the raw message.
security/keys/persistent.c +32 -23
55 lines not on this page · raw message
sound/hda/codecs/side-codecs/tas2781_hda.c +15 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/mm/hugetlb-mmap.c +2 -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.