Linux 6.12.94
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.12.94 kernel.
All users of the 6.12 kernel series must upgrade.
The updated 6.12.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.12.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/ABI/testing/sysfs-fs-erofs | 25 +- Documentation/arch/arm64/silicon-errata.rst | 48 +++ Makefile | 5 arch/arm/include/asm/io.h | 15 + arch/arm/kernel/entry-armv.S | 2 arch/arm/mach-socfpga/platsmp.c | 1 arch/arm/mm/alignment.c | 6 arch/arm/mm/fault.c | 100 ++++++-- arch/arm64/Kconfig | 50 ++++ arch/arm64/Makefile | 3 arch/arm64/include/asm/cputype.h | 6 arch/arm64/include/asm/tlbflush.h | 63 +++-- arch/arm64/kernel/cpu_errata.c | 34 ++ arch/arm64/kernel/sys_compat.c | 2 arch/arm64/kvm/hyp/nvhe/mm.c | 2 arch/arm64/kvm/hyp/nvhe/tlb.c | 8 arch/arm64/kvm/hyp/pgtable.c | 2 arch/arm64/kvm/hyp/vhe/tlb.c | 10 arch/x86/Makefile | 4 arch/x86/Makefile.um | 8 arch/x86/kvm/svm/sev.c | 27 +- arch/x86/kvm/vmx/vmx.c | 9 arch/x86/kvm/x86.c | 7 block/blk-zoned.c | 32 ++ drivers/accel/ivpu/ivpu_fw_log.c | 5 drivers/accel/ivpu/ivpu_ipc.c | 2 drivers/accel/ivpu/ivpu_ms.c | 7 drivers/base/bus.c | 11 drivers/block/zram/zram_drv.c | 2 drivers/char/ipmi/ipmi_msghandler.c | 2 drivers/char/ipmi/ipmi_ssif.c | 29 +- drivers/clk/qcom/dispcc-sc8280xp.c | 4 drivers/clk/qcom/dispcc-x1e80100.c | 2 drivers/clk/samsung/clk-gs101.c | 2 drivers/gpio/gpio-mvebu.c | 4 drivers/gpio/gpio-zynq.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 4 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v11.c | 49 +++- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c | 5 drivers/gpu/drm/amd/display/dc/basics/vector.c | 4 drivers/gpu/drm/amd/display/dc/bios/bios_parser.c | 15 - drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c | 81 ++++-- drivers/gpu/drm/amd/display/dc/bios/bios_parser_helper.h | 5 drivers/gpu/drm/amd/display/dc/dce/dce_transform.c | 10 drivers/gpu/drm/amd/display/dc/dce110/dce110_opp_csc_v.c | 10 drivers/gpu/drm/amd/display/modules/hdcp/hdcp_ddc.c | 3 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 32 +- drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 32 +- drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c | 3 drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 1 drivers/gpu/drm/i915/gem/i915_gem_phys.c | 19 + drivers/gpu/drm/imx/dcss/dcss-scaler.c | 3 drivers/gpu/drm/v3d/v3d_sched.c | 3 drivers/gpu/drm/vc4/vc4_validate_shaders.c | 13 - drivers/gpu/drm/virtio/virtgpu_drv.c | 5 drivers/gpu/drm/virtio/virtgpu_submit.c | 4 drivers/gpu/drm/xe/xe_guc_submit.c | 2 drivers/gpu/drm/xe/xe_range_fence.c | 2 drivers/i2c/busses/i2c-qcom-cci.c | 2 drivers/i2c/busses/i2c-stm32f7.c | 6 drivers/i2c/busses/i2c-tegra.c | 53 ++-- drivers/i2c/i2c-dev.c | 9 drivers/infiniband/core/Makefile | 2 drivers/infiniband/core/iter.c | 43 +++ drivers/infiniband/core/umem.c | 16 + drivers/infiniband/core/umem_dmabuf.c | 77 ++++-- drivers/infiniband/core/verbs.c | 38 --- drivers/infiniband/hw/bnxt_re/qplib_res.c | 2 drivers/infiniband/hw/cxgb4/mem.c | 2 drivers/infiniband/hw/efa/efa_verbs.c | 2 drivers/infiniband/hw/erdma/erdma_verbs.c | 2 drivers/infiniband/hw/hns/hns_roce_alloc.c | 2 drivers/infiniband/hw/hns/hns_roce_mr.c | 4 drivers/infiniband/hw/irdma/main.h | 2 drivers/infiniband/hw/irdma/verbs.c | 4 drivers/infiniband/hw/mana/mana_ib.h | 2 drivers/infiniband/hw/mlx4/mr.c | 5 drivers/infiniband/hw/mlx5/mem.c | 1 drivers/infiniband/hw/mlx5/mr.c | 4 drivers/infiniband/hw/mlx5/umr.c | 1 drivers/infiniband/hw/mthca/mthca_provider.c | 2 drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 2 drivers/infiniband/hw/qedr/verbs.c | 2 drivers/infiniband/hw/vmw_pvrdma/pvrdma.h | 2 drivers/infiniband/sw/rxe/rxe_verbs.c | 5 drivers/infiniband/ulp/isert/ib_isert.c | 6 drivers/infiniband/ulp/srp/ib_srp.c | 30 +- drivers/input/keyboard/atkbd.c | 15 + drivers/mailbox/mailbox.c | 15 - drivers/mailbox/tegra-hsp.c | 2 drivers/md/dm-cache-policy-smq.c | 12 drivers/misc/fastrpc.c | 107 +++++--- drivers/mmc/core/mmc.c | 4 drivers/mmc/host/dw_mmc-rockchip.c | 17 + drivers/mmc/host/litex_mmc.c | 20 + drivers/mmc/host/renesas_sdhi_internal_dmac.c | 1 drivers/mmc/host/sdhci.c | 1 drivers/net/bonding/bond_main.c | 4 drivers/net/ethernet/amd/pcnet32.c | 4 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 drivers/net/ethernet/freescale/fec_main.c | 3 drivers/net/ethernet/ibm/emac/core.c | 9 drivers/net/ethernet/marvell/mv643xx_eth.c | 2 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 75 +++--- drivers/net/ethernet/marvell/octeontx2/af/rvu.c | 2 drivers/net/ethernet/marvell/octeontx2/af/rvu.h | 1 drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c | 36 +- drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c | 2 drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 2 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 drivers/net/ethernet/mellanox/mlx4/cq.c | 9 drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 6 drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c | 10 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c | 13 - drivers/net/ethernet/mellanox/mlx5/core/irq_affinity.c | 5 drivers/net/ethernet/mellanox/mlx5/core/vport.c | 72 ++++- drivers/net/ethernet/microchip/lan743x_main.c | 32 ++ drivers/net/ethernet/microchip/lan743x_main.h | 1 drivers/net/ethernet/realtek/rtase/rtase_main.c | 7 drivers/net/hyperv/netvsc.c | 19 + drivers/net/phy/micrel.c | 15 - drivers/net/phy/phy_device.c | 6 drivers/net/tap.c | 2 drivers/net/usb/r8152.c | 7 drivers/net/vxlan/vxlan_vnifilter.c | 5 drivers/nvmem/core.c | 12 drivers/nvmem/layouts/onie-tlv.c | 3 drivers/pinctrl/pinctrl-mcp23s08_spi.c | 5 drivers/pmdomain/imx/gpc.c | 2 drivers/ptp/ptp_vclock.c | 14 - drivers/slimbus/qcom-ngd-ctrl.c | 122 ++++++---- drivers/soc/qcom/ice.c | 40 ++- drivers/spi/spi-cadence-quadspi.c | 5 drivers/tee/optee/supp.c | 107 ++++++-- drivers/tee/tee_shm.c | 2 drivers/thunderbolt/property.c | 6 drivers/thunderbolt/xdomain.c | 14 - drivers/usb/serial/io_ti.c | 11 drivers/usb/serial/kl5kusb105.c | 4 drivers/usb/serial/mct_u232.c | 21 - drivers/usb/serial/option.c | 3 fs/erofs/internal.h | 7 fs/erofs/super.c | 3 fs/erofs/sysfs.c | 19 + fs/erofs/zdata.c | 36 +- fs/fcntl.c | 8 fs/fs-writeback.c | 101 +++++--- fs/fuse/dev.c | 9 fs/iomap/buffered-io.c | 4 fs/qnx6/dir.c | 8 fs/smb/server/oplock.c | 15 - fs/smb/server/smb2pdu.c | 11 include/linux/backing-dev-defs.h | 4 include/linux/hugetlb.h | 8 include/linux/ieee80211.h | 18 - include/linux/kexec.h | 3 include/linux/mailbox_controller.h | 3 include/linux/mlx5/vport.h | 4 include/linux/mm.h | 8 include/linux/writeback.h | 2 include/net/act_api.h | 1 include/net/bluetooth/hci_core.h | 9 include/net/bluetooth/hci_sync.h | 4 include/net/bluetooth/l2cap.h | 1 include/net/ip.h | 8 include/net/ip_vs.h | 3 include/net/netfilter/nf_conntrack_core.h | 5 include/net/netfilter/nf_conntrack_helper.h | 1 include/net/secure_seq.h | 45 +++ include/net/sock.h | 1 include/net/tc_act/tc_pedit.h | 2 include/net/tcp.h | 6 include/rdma/ib_umem.h | 48 +-- include/rdma/ib_verbs.h | 48 --- include/rdma/iter.h | 88 +++++++ io_uring/io_uring.c | 2 io_uring/kbuf.c | 1 io_uring/net.c | 3 ipc/shm.c | 10 kernel/dma/debug.c | 2 kernel/kexec_file.c | 33 ++ kernel/pid.c | 8 kernel/sched/ext.c | 9 kernel/signal.c | 1 kernel/time/time.c | 2 kernel/time/timer_migration.c | 8 kernel/trace/trace_probe.c | 2 mm/backing-dev.c | 5 mm/damon/ops-common.c | 4 mm/huge_memory.c | 2 mm/hugetlb.c | 70 +++-- mm/memory-failure.c | 19 - net/6lowpan/iphc.c | 4 net/802/garp.c | 2 net/802/mrp.c | 9 net/bluetooth/bnep/core.c | 50 ++-- net/bluetooth/hci_conn.c | 31 +- net/bluetooth/hci_core.c | 16 + net/bluetooth/hci_sync.c | 25 +- net/bluetooth/hci_sysfs.c | 6 net/bluetooth/iso.c | 71 ++++- net/bluetooth/l2cap_core.c | 46 +++ net/bluetooth/mgmt.c | 17 - net/bluetooth/rfcomm/core.c | 67 ++++- net/bluetooth/rfcomm/sock.c | 26 +- net/bridge/netfilter/ebt_dnat.c | 4 net/bridge/netfilter/ebt_redirect.c | 16 - net/bridge/netfilter/ebt_snat.c | 3 net/core/filter.c | 15 - net/core/gro.c | 5 net/core/netdev-genl.c | 4 net/core/secure_seq.c | 80 ++---- net/core/skbuff.c | 6 net/core/sock.c | 13 - net/devlink/core.c | 2 net/hsr/hsr_framereg.c | 4 net/ieee802154/6lowpan/tx.c | 5 net/ipv4/inet_fragment.c | 3 net/ipv4/ip_fragment.c | 3 net/ipv4/ip_options.c | 4 net/ipv4/netfilter/arp_tables.c | 15 - net/ipv4/netfilter/ip_tables.c | 15 - net/ipv4/netfilter/nf_nat_h323.c | 2 net/ipv4/netfilter/nft_fib_ipv4.c | 2 net/ipv4/syncookies.c | 19 - net/ipv4/tcp.c | 44 +-- net/ipv4/tcp_fastopen.c | 2 net/ipv4/tcp_input.c | 22 + net/ipv4/tcp_ipv4.c | 84 +++--- net/ipv4/tcp_minisocks.c | 11 net/ipv4/tcp_output.c | 12 net/ipv4/tcp_timer.c | 4 net/ipv4/udp.c | 8 net/ipv4/xfrm4_input.c | 5 net/ipv6/addrconf.c | 6 net/ipv6/ip6_vti.c | 2 net/ipv6/mcast.c | 8 net/ipv6/netfilter/ip6_tables.c | 15 - net/ipv6/netfilter/ip6t_eui64.c | 7 net/ipv6/netfilter/nft_fib_ipv6.c | 2 net/ipv6/sit.c | 1 net/ipv6/syncookies.c | 11 net/ipv6/tcp_ipv6.c | 37 +-- net/ipv6/xfrm6_input.c | 5 net/l2tp/l2tp_ppp.c | 82 ++++-- net/mac80211/tx.c | 4 net/mptcp/options.c | 73 ++--- net/mptcp/pm.c | 15 - net/mptcp/pm_userspace.c | 13 - net/mptcp/protocol.c | 10 net/mptcp/protocol.h | 7 net/mptcp/sockopt.c | 8 net/netfilter/ipset/ip_set_bitmap_ipmac.c | 5 net/netfilter/ipset/ip_set_hash_ipmac.c | 9 net/netfilter/ipset/ip_set_hash_mac.c | 5 net/netfilter/ipvs/ip_vs_ctl.c | 13 - net/netfilter/ipvs/ip_vs_proto_sctp.c | 18 - net/netfilter/ipvs/ip_vs_proto_tcp.c | 21 - net/netfilter/ipvs/ip_vs_proto_udp.c | 20 - net/netfilter/ipvs/ip_vs_sched.c | 14 - net/netfilter/nf_conntrack_ecache.c | 2 net/netfilter/nf_conntrack_expect.c | 10 net/netfilter/nf_conntrack_helper.c | 19 + net/netfilter/nf_conntrack_irc.c | 4 net/netfilter/nf_conntrack_netlink.c | 28 +- net/netfilter/nf_log_syslog.c | 12 net/netfilter/nf_nat_core.c | 2 net/netfilter/nf_nat_sip.c | 1 net/netfilter/nf_synproxy_core.c | 24 + net/netfilter/nfnetlink_log.c | 23 + net/netfilter/nfnetlink_queue.c | 64 ++++- net/netfilter/nft_ct.c | 8 net/netfilter/nft_ct_fast.c | 2 net/netfilter/nft_exthdr.c | 3 net/netfilter/nft_fib.c | 6 net/netfilter/nft_tunnel.c | 2 net/netfilter/xt_NFQUEUE.c | 2 net/netfilter/xt_mac.c | 4 net/netlabel/netlabel_unlabeled.c | 30 -- net/openvswitch/datapath.c | 1 net/qrtr/af_qrtr.c | 4 net/rds/ib_cm.c | 1 net/rds/ib_send.c | 2 net/rds/info.c | 2 net/sched/act_api.c | 7 net/sched/act_pedit.c | 97 ++++--- net/sctp/diag.c | 17 - net/sctp/input.c | 8 net/sctp/sm_statefuns.c | 6 net/sctp/stream.c | 6 net/smc/af_smc.c | 17 - net/socket.c | 11 net/vmw_vsock/virtio_transport_common.c | 11 net/vmw_vsock/vmci_transport.c | 4 net/wireless/nl80211.c | 3 net/xfrm/espintcp.c | 4 net/xfrm/xfrm_input.c | 25 +- net/xfrm/xfrm_policy.c | 13 - scripts/Makefile.compiler | 2 scripts/generate_rust_target.rs | 8 security/integrity/ima/ima_kexec.c | 46 ++- sound/core/pcm_native.c | 7 sound/core/seq/seq_dummy.c | 15 - sound/core/timer.c | 17 - sound/soc/codecs/wm_adsp.c | 3 sound/soc/fsl/fsl_sai.c | 2 tools/testing/selftests/ftrace/test.d/dynevent/eprobes_syntax_errors.tc | 2 tools/testing/selftests/net/mptcp/mptcp_join.sh | 4 tools/testing/selftests/ptp/testptp.c | 62 ----- tools/verification/rv/src/in_kernel.c | 2 virt/kvm/kvm_main.c | 3 312 files changed, 3057 insertions(+), 1609 deletions(-)
Adrian Korwel (2):
USB: serial: io_ti: fix heap overflow in get_manuf_info()
USB: serial: io_ti: fix heap overflow in build_i2c_fw_hdr()
Adrian Moreno (1):
net: openvswitch: fix possible kfree_skb of ERR_PTR
Akhil R (1):
i2c: tegra: Fix NOIRQ suspend/resume
Aleksandr Nogikh (1):
signal: clear JOBCTL_PENDING_MASK for caller in zap_other_threads()
Alexander A. Klimov (1):
drm/vc4: fix krealloc() memory leak
Alice Ryhl (2):
rust: arm64: set uwtable llvm module flag for CONFIG_UNWIND_TABLES
rust: kasan/kbuild: fix rustc-option when cross-compiling
Amirreza Zarrabi (1):
tee: optee: prevent use-after-free when the client exits before the supplicant
Amit Matityahu (1):
timers/migration: Fix livelock in tmigr_handle_remote_up()
Anandu Krishnan E (1):
misc: fastrpc: fix use-after-free of fastrpc_user in workqueue context
Andre Heider (1):
nvmem: layouts: onie-tlv: fix hang on unknown types
Andrew Martin (1):
drm/amdkfd: Fix buffer overflow in SDMA queue checkpoint/restore on GFX11
Andrzej Kacprowski (3):
accel/ivpu: Add bounds checks for firmware log indices accel/ivpu: Add buffer overflow check in MS get_info_ioctl accel/ivpu: Fix signed integer truncation in IPC receive
Andy Roulin (2):
vxlan: vnifilter: send notification on VNI add
vxlan: vnifilter: fix spurious notification on VNI update
Anton Leontev (1):
hv_netvsc: use kmap_local_page in netvsc_copy_to_send_buf
Arpith Kalaginanavoor (1):
fs/qnx6: fix pointer arithmetic in directory iteration
Bartosz Golaszewski (4):
net: mv643xx: fix OF node refcount
nvmem: core: fix use-after-free bugs in error paths
pmdomain: imx: fix OF node refcount
slimbus: qcom-ngd-ctrl: fix OF node refcount
Bharath Reddy (1):
Bluetooth: fix memory leak in error path of hci_alloc_dev()
Bjorn Andersson (7):
slimbus: qcom-ngd-ctrl: Fix up platform_driver registration
slimbus: qcom-ngd-ctrl: Fix probe error path ordering
slimbus: qcom-ngd-ctrl: Register callbacks after creating the ngd
slimbus: qcom-ngd-ctrl: Initialize controller resources in controller
slimbus: qcom-ngd-ctrl: Correct PDR and SSR cleanup ownership
slimbus: qcom-ngd-ctrl: Balance pm_runtime enablement for NGD
slimbus: qcom-ngd-ctrl: Avoid ABBA on tx_lock/ctrl->lock
Breno Leitao (1):
rds: mark snapshot pages dirty in rds_info_getsockopt()
Brian Foster (1):
iomap: don't revert iov_iter on partially completed buffered writes
Chancel Liu (1):
ASoC: fsl_sai: Fix 32 slots TDM broken by integer shift UB in xMR write
Chenguang Zhao (1):
netlabel: validate unlabeled address and mask attribute lengths
Chih Kai Hsu (1):
r8152: handle the return value of usb_reset_device()
Christian A. Ehrhardt (1):
io_uring/wait: fix min_timeout behavior
Christian Brauner (1):
pidfd: refuse access to tasks that have started exiting harder
Christian König (1):
drm/amdgpu: restart the CS if some parts of the VM are still invalidated
Chunhai Guo (1):
erofs: add sysfs node to drop internal caches
Clément Léger (1):
io_uring/net: inherit IORING_CQE_F_BUF_MORE across bundle recv retries
Corey Minyard (2):
ipmi:ssif: Remove unnecessary indention
ipmi:ssif: NULL thread on error
Cryolitia PukNgae (1):
Input: atkbd - skip deactivate for HONOR BCC-N's internal keyboard
Cunlong Li (1):
zram: fix use-after-free in zram_bvec_write_partial()
Damien Le Moal (1):
block: fix handling of dead zone write plugs
David Carlier (1):
mm/hugetlb: restore reservation on error in hugetlb folio copy paths
David Thompson (1):
net: lan743x: permit VLAN-tagged packets up to configured MTU
Davide Ornaghi (1):
netfilter: nft_fib: fix stale stack leak via the OIFNAME register
Dawei Feng (1):
octeontx2-af: fix memory leak in rvu_setup_hw_resources()
Deepanshu Kartikey (1):
wifi: mac80211: limit injected antenna index in ieee80211_parse_tx_radiotap
Dmitry Osipenko (1):
drm/virtio: Fix driver removal with disabled KMS
Dongli Zhang (1):
KVM: VMX: Update SVI during runtime APICv activation
Dragos Tatulea (2):
net/mlx5: Fix slab-out-of-bounds in mlx5_query_nic_vport_mac_list net/mlx5e: xsk: Fix DMA and xdp_frame leak on XDP_TX xmit failure
Dudu Lu (1):
Bluetooth: bnep: fix incorrect length parsing in bnep_rx_frame() extension handling
Eric Dumazet (9):
ipv4: restrict IPOPT_SSRR and IPOPT_LSRR options
net_sched: act_pedit: use RCU in tcf_pedit_dump()
ieee802154: 6lowpan: only accept IPv6 packets in lowpan_xmit()
tcp: restrict SO_ATTACH_FILTER to priv users
ip6_vti: fix incorrect tunnel matching in vti6_tnl_lookup() vsock/virtio: fix potential unbounded skb queue
net: introduce EXPORT_IPV6_MOD() and EXPORT_IPV6_MOD_GPL()
tcp: use EXPORT_IPV6_MOD[_GPL]()
tcp: secure_seq: add back ports to TS offset
Fernando Fernandez Mancera (2):
netfilter: xt_NFQUEUE: prefer raw_smp_processor_id
netfilter: synproxy: add mutex to guard hook reference counting
Florian Westphal (3):
netfilter: conntrack_irc: fix possible out-of-bounds read
netfilter: revalidate bridge ports
netfilter: nft_exthdr: fix register tracking for F_PRESENT flag
Fushuai Wang (1):
net/mlx5: Use effective affinity mask for IRQ selection
Gabriele Monaco (1):
tools/rv: Fix cleanup after failed trace setup
Gao Xiang (2):
erofs: tidy up synchronous decompression
erofs: fix use-after-free on sbi->sync_decompress
Geetha sowjanya (1):
octeontx2-pf: Fix NDC sync operation errors
Georgiy Osokin (1):
tee: shm: fix shm leak in register_shm_helper()
Gil Portnoy (2):
ksmbd: fix NULL-deref of opinfo->conn in oplock/lease break notifiers
ksmbd: fix use-after-free of a deferred file_lock on double SMB2_CANCEL
Greg Kroah-Hartman (1):
Linux 6.12.94
Guangshuo Li (1):
dm cache policy smq: check allocation under invalidate lock
Guillermo Rodríguez (1):
i2c: stm32f7: fix timing computation ignoring i2c-analog-filter
HanQuan (1):
net: add pskb_may_pull() to skb_gro_receive_list()
Hans de Goede (1):
clk: qcom: x1e80100-dispcc: Stop disp_cc_mdss_mdp_clk_src from getting parked
Harry Wentland (6):
drm/amd/display: Reject gpio_bitshift >= 32 in bios_parser_get_gpio_pin_info() drm/amd/display: Bound VBIOS record-chain walk loops drm/amd/display: Clamp HDMI HDCP2 rx_id_list read to buffer size drm/amd/display: Clamp VBIOS HDMI retimer register count to array size drm/amd/display: Fix NULL deref and buffer over-read in SDP debugfs drm/amd/display: Use krealloc_array() in dal_vector_reserve()
Heiko Stuebner (1):
mmc: dw_mmc-rockchip: Add missing private data for very old controllers
HyeongJun An (1):
USB: serial: kl5kusb105: fix bulk-out buffer overflow
Hyunwoo Kim (1):
inet: frags: fix use-after-free caused by the fqdir_pre_exit() flush
Ido Schimmel (2):
ipv6: mcast: Fix use-after-free when processing MLD queries
ipv6: Fix a potential NPD in cleanup_prefix_route()
Inochi Amaoto (2):
mmc: litex_mmc: Use DIV_ROUND_UP for more accurate clock calculation
mmc: litex_mmc: Set mandatory idle clocks before CMD0
Jack Wu (1):
USB: serial: option: add usb-id for Dell Wireless DW5826e-m
Jacob Moroni (3):
RDMA/umem: Add ib_umem_dmabuf_get_pinned_and_lock helper RDMA/umem: Move umem dmabuf revoke logic into helper function RDMA/umem: Add helpers for umem dmabuf revoke lock
Jakub Kicinski (1):
netdev: fix double-free in netdev_nl_bind_rx_doit()
Jamal Hadi Salim (1):
net/sched: act_api: use RCU with deferred freeing for action lifecycle
Jan Kara (2):
writeback: Avoid contention on wb->list_lock when switching inodes
writeback: Fix use after free in inode_switch_wbs_work_fn()
Jann Horn (1):
fuse: reject fuse_notify() pagecache ops on directories
Jason Gunthorpe (2):
RDMA: During rereg_mr ensure that REREG_ACCESS is compatible RDMA/umem: Fix truncation for block sizes >= 4G
Jassi Brar (1):
mailbox: Fix NULL message support in mbox_send_message()
Jens Axboe (1):
io_uring/kbuf: don't truncate end buffer for bundles
Ji'an Zhou (1):
ALSA: PCM: Fix wait queue list corruption in snd_pcm_drain() on linked streams
Jianbo Liu (1):
xfrm: hold device only for the asynchronous decryption
Jiayuan Chen (1):
netfilter: nft_ct: bail out on template ct in get eval
Jisheng Zhang (1):
mmc: sdhci: add signal voltage switch in sdhci_resume_host
Johan Hovold (3):
USB: serial: mct_u232: fix memory corruption with small endpoint
spi: cadence-quadspi: fix unclocked access on unbind driver core: reject devices with unregistered buses
Johannes Berg (1):
wifi: remove zero-length arrays
Joonas Lahtinen (1):
drm/i915/gem: Fix phys BO pread/pwrite with offset
Judith Mendez (1):
pinctrl: mcp23s08: Initialize mcp->dev and mcp->addr before regmap init
Julian Anastasov (2):
ipvs: clear the svc scheduler ptr early on edit
ipvs: skip ipv6 extension headers for csum checks
Junrui Luo (1):
misc: fastrpc: fix DMA address corruption due to find_vma misuse
Justin Lai (2):
rtase: Avoid sleeping in get_stats64()
rtase: Reset TX subqueue when clearing TX ring
Kamal Dasu (1):
mmc: core: Fix host controller programming for fixed driver type
Karl Mehltretter (2):
ARM: 9474/1: io: avoid KASAN instrumentation of raw halfword I/O
ARM: 9475/1: entry: use byte load for KASAN VMAP stack shadow
Kuan-Wei Chiu (1):
clk: samsung: gs101: Fix missing USI7_USI DIV clock in peric0_clk_regs
Kuniyuki Iwashima (3):
bpf: Free reuseport cBPF prog after RCU grace period.
net: Annotate sk->sk_write_space() for UDP SOCKMAP.
hsr: Remove WARN_ONCE() in hsr_addr_is_self().
Kurt Kanzenbach (1):
ptp: vclock: Switch from RCU to SRCU
Kyle Meyer (1):
bnxt_en: Fix NULL pointer dereference
Kyle Zeng (4):
ALSA: seq: dummy: fix UMP event stack overread
ipv6: sit: reload inner IPv6 header after GSO offloads
net: guard timestamp cmsgs to real error queue skbs
netfilter: x_tables: avoid leaking percpu counter pointers
Lad Prabhakar (1):
mmc: renesas_sdhi: Add OF entry for RZ/G2H SoC
Lee Jones (1):
l2tp: pppol2tp: hold reference to session in pppol2tp_ioctl()
Leon Romanovsky (1):
RDMA: Move DMA block iterator logic into dedicated files
Leorize (1):
drm/amd/display: add missing CSC entries for BT.2020 for DCE IPs
Li RongQing (1):
dma-debug: fix physical address retrieval in debug_dma_sync_sg_for_device
Lorenzo Bianconi (2):
net: ethernet: mtk_eth_soc: Fix use-after-free in metadata dst teardown
net: mvpp2: Add metadata support for xdp mode
Lorenzo Stoakes (1):
mm/hugetlb: avoid false positive lockdep assertion
Luiz Augusto von Dentz (3):
Bluetooth: ISO: Fix not releasing hdev reference on iso_conn_big_sync
Bluetooth: ISO: Fix not using bc_sid as advertisement SID
Bluetooth: MGMT: Fix backward compatibility with userspace
Manivannan Sadhasivam (2):
soc: qcom: ice: Return -ENODEV if the ICE platform device is not found
soc: qcom: ice: Fix race between qcom_ice_probe() and of_qcom_ice_get()
Mark Bloch (1):
devlink: Release nested relation on devlink free
Mark Rutland (5):
arm64: tlb: Allow XZR argument to TLBI ops
arm64: tlb: Optimize ARM64_WORKAROUND_REPEAT_TLBI
arm64: cputype: Add C1-Ultra definitions
arm64: cputype: Add C1-Premium definitions
arm64: errata: Mitigate TLBI errata on various Arm CPUs
Masami Hiramatsu (Google) (1):
tracing/probes: Point the error offset correctly for eprobe argument error
Matthieu Baerts (NGI0) (2):
mptcp: sockopt: check timestamping ret value
mptcp: add-addr: always drop other suboptions
Maxime Chevallier (1):
net: phy: clean the sfp upstream if phy probing fails
Maíra Canal (1):
drm/v3d: Fix vaddr leak when indirect CSD has zeroed workgroups
Michael Bommarito (9):
sctp: fix uninit-value in __sctp_rcv_asconf_lookup()
Bluetooth: L2CAP: reject BR/EDR signaling packets over MTUsig RDMA/srp: bound SRP_RSP sense copy by the received length IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN
thunderbolt: Reject zero-length property entries in validator
thunderbolt: Bound root directory content to block size
thunderbolt: Clamp XDomain response data copy to allocation size
thunderbolt: Validate XDomain request packet size before type cast
thunderbolt: Limit XDomain response copy to actual frame size
Miguel Ojeda (1):
rust: x86: support Rust >= 1.98.0 target spec
Mingyu Wang (3):
i2c: dev: prevent integer overflow in I2C_TIMEOUT ioctl
net: qrtr: fix refcount saturation and potential UAF in qrtr_port_remove fs/fcntl: fix SOFTIRQ-unsafe lock order in fasync signaling
Muhammad Bilal (1):
drm/amdkfd: fix NULL dereference in get_queue_ids()
Mukesh Ojha (1):
misc: fastrpc: Fix NULL pointer dereference in rpmsg callback
Naveen Kumar Chaudhary (1):
time: Fix off-by-one in settimeofday() usec validation
Nicolò Coccia (1):
net/smc: fix sleep-inside-lock in __smc_setsockopt() causing local DoS
Nikolay Kuratov (1):
net/mlx5: Reorder completion before putting command entry in cmd_work_handler
Nithin Dabilpuram (1):
octeontx2-af: npc: Fix CPT channel mask in npc_install_flow
Oscar Maes (1):
pcnet32: stop holding device spin lock during napi_complete_done
Pablo Neira Ayuso (1):
netfilter: ctnetlink: ensure safe access to master conntrack
Paolo Abeni (4):
mptcp: fix retransmission loop when csum is enabled
mptcp: close TOCTOU race while computing rcv_wnd
mptcp: allow subflow rcv wnd to shrink
mptcp: fix missing wakeups in edge scenarios
Pengyu Luo (1):
clk: qcom: dispcc-sc8280xp: Don't park mdp_clk_src at registration time
Petr Machata (1):
Revert "selftest/ptp: update ptp selftest to exercise the gettimex options"
Priya Hosur (1):
drm/amd/pm: smu_v14_0_0: use SoftMin for gfxclk in set_soft_freq_limited_range
Qi Tang (1):
xfrm: hold dev ref until after transport_finish NF_HOOK
Raf Dickson (1):
vsock/vmci: fix sk_ack_backlog leak on failed handshake
Rajat Gupta (1):
net/sched: fix pedit partial COW leading to page cache corruption
Randy Dunlap (1):
RDMA/umem: fix kernel-doc warnings
Richard Fitzgerald (1):
ASoC: wm_adsp: Fix NULL dereference when removing firmware controls
Robert Marko (1):
net: phy: micrel: fix LAN8814 QSGMII soft reset
Rosen Penev (1):
net: ibm: emac: Fix use-after-free during device removal
Rui Qi (1):
ipmi: Fix rcu_read_unlock to srcu_read_unlock in handle_read_event_rsp
Ruoyu Wang (1):
gpio: zynq: fix runtime PM leak on remove
Russell King (Oracle) (4):
ARM: group is_permission_fault() with is_translation_fault()
ARM: allow __do_kernel_fault() to report execution of memory faults
ARM: fix hash_name() fault
ARM: fix branch predictor hardening
Sanghyun Park (1):
xfrm: policy: fix use-after-free on inexact bin in xfrm_policy_bysel_ctx()
Sean Christopherson (2):
KVM: Don't WARN if memory is dirtied without a vCPU when the VM is dying
KVM: SEV: Decouple the need to sync the GHCB SA from the need to free the SA
Sechang Lim (1):
udp: clear skb->dev before running a sockmap verdict
SeongJae Park (1):
mm/damon/ops-common: call folio_test_lru() after folio_get()
SeungJu Cheon (2):
Bluetooth: RFCOMM: validate skb length in MCC handlers
Bluetooth: ISO: Fix data-race on iso_pi fields in hci_get_route calls
Shanker Donthineni (2):
arm64: cputype: Add NVIDIA Olympus definitions
arm64: errata: Mitigate TLBI errata on NVIDIA Olympus CPU
Stefano Garzarella (2):
vsock/virtio: fix skb overhead accounting to preserve full buf_alloc vsock/virtio: fix skb overhead overflow on 32-bit builds
Steven Chen (2):
ima: kexec: skip IMA segment validation after kexec soft reboot
ima: kexec: move IMA log copy from kexec load to execute
Suman Ghosh (1):
octeontx2-af: Fix initialization of mcam's entry2target_pffunc field
Takashi Iwai (2):
ALSA: timer: Forcibly close timer instances at closing
ALSA: timer: Fix UAF at snd_timer_user_params()
Tangudu Tilak Tirumalesh (1):
drm/xe: Clear pending_disable before signaling suspend fence
Tao Cui (2):
selftests: mptcp: add test for extra_subflows underflow on userspace PM
mptcp: pm: fix extra_subflows underflow on userspace PM subflow creation
Tapio Reijonen (1):
net: fec: fix pinctrl default state restore order on resume
Tejun Heo (1):
sched_ext: Don't warn on NULL cgrp_moving_from in scx_cgroup_move_task()
Til Kaiser (4):
net: mvpp2: sync RX data at the hardware packet offset
net: mvpp2: limit XDP frame size to the RX buffer
net: mvpp2: refill RX buffers before XDP or skb use
net: mvpp2: build skb from XDP-adjusted data on XDP_PASS
Tristan Madani (1):
netfilter: nft_tunnel: fix use-after-free on object destroy
Vladimir Zapolskiy (1):
i2c: qcom-cci: Fix NULL pointer dereference in cci_remove()
Weiming Shi (3):
tap: free page on error paths in tap_get_user_xdp()
net/rds: fix NULL deref in rds_ib_send_cqe_handler() on masked atomic completion
netfilter: nf_conntrack: destroy stale expectfn expectations on unregister
Wentao Liang (2):
drm/xe: fix refcount leak in xe_range_fence_insert()
drm/virtio: fix dma_fence refcount leak on error in virtio_gpu_dma_fence_wait()
Will Deacon (1):
arm64: errata: Mitigate TLBI errata on Microsoft Azure Cobalt 100 CPU
Wupeng Ma (1):
mm/memory-failure: fix hugetlb_lock AA deadlock in get_huge_page_for_hwpoison
Wyatt Feng (2):
xfrm: espintcp: do not reuse an in-progress partial send
sctp: stream: fully roll back denied add-stream state
Xiang Mei (1):
netfilter: nf_log: validate MAC header was set before dumping it
Xin Long (1):
sctp: purge outqueue on stale COOKIE-ECHO handling
Yang Wang (2):
drm/amd/pm: fix smu13 power limit default/cap calculation drm/amd/pm: mark metrics.energy_accumulator is invalid for smu 14.0.2
Yao Sang (1):
net/mlx4: avoid GCC 10 __bad_copy_from() false positive
Yicong Hui (1):
drm/imx: Fix three kernel-doc warnings in dcss-scaler.c
Yilin Zhu (1):
ipc/shm: serialize orphan cleanup with shm_nattch updates
Yiming Qian (1):
netfilter: bridge: make ebt_snat ARP rewrite writable
Yin Tirui (1):
mm/huge_memory: update file PMD counter before folio_put()
Yizhou Zhao (3):
6lowpan: fix off-by-one in multicast context address compression
net: garp: fix unsigned integer underflow in garp_pdu_parse_attr net/802/mrp: fix vector attribute parsing in mrp_pdu_parse_vecattr
Yuho Choi (1):
ARM: socfpga: Fix OF node refcount leak in SMP setup
Yun Zhou (1):
gpio: mvebu: fix NULL pointer dereference in suspend/resume
Yuqi Xu (3):
Bluetooth: hci_sync: reject oversized Broadcast Announcement prepend
wifi: nl80211: reject oversized EMA RNR lists
net: rds: clear i_sends on setup unwind
Zeyu WANG (1):
Input: atkbd - add DMI quirk for Lenovo Yoga Air 14 (83QK)
Zhang Cen (3):
Bluetooth: RFCOMM: hold listener socket in rfcomm_connect_ind()
Bluetooth: MGMT: validate advertising TLV before type checks
Bluetooth: bnep: reject short frames before parsing
Zhao Zhang (1):
sctp: diag: reject stale associations in dump_one path
ZhaoJinming (1):
net: bonding: fix NULL pointer dereference in bond_do_ioctl()
Zhengchuan Liang (1):
netfilter: require Ethernet MAC header before using eth_hdr()
Zhenghang Xiao (1):
misc: fastrpc: fix use-after-free race in fastrpc_map_create
Greg Kroah-Hartman
maintainerDocumentation/ABI/testing/sysfs-fs-erofs +20 -5
@@ -10,9 +10,24 @@ Description: Shows all enabled kernel features. What: /sys/fs/erofs/<disk>/sync_decompress Date: November 2021 Contact: "Huang Jianan" <[email protected]> -Description: Control strategy of sync decompression: +Description: Control strategy of synchronous decompression. Synchronous + decompression tries to decompress in the reader thread for + synchronous reads and small asynchronous reads (<= 12 KiB): - - 0 (default, auto): enable for readpage, and enable for - readahead on atomic contexts only. - - 1 (force on): enable for readpage and readahead. - - 2 (force off): disable for all situations. + - 0 (auto, default): apply to synchronous reads only, but will + switch to 1 (force on) if any decompression + request is detected in atomic contexts; + - 1 (force on): apply to synchronous reads and small + asynchronous reads; + - 2 (force off): disable synchronous decompression completely. + +What: /sys/fs/erofs/<disk>/drop_caches +Date: November 2024 +Contact: "Guo Chunhai" <[email protected]> +Description: Writing to this will drop compression-related caches, + currently used to drop in-memory pclusters and cached + compressed folios: + + - 1 : invalidate cached compressed folios + - 2 : drop in-memory pclusters + - 3 : drop in-memory pclusters and cached compressed folios
Documentation/arch/arm64/silicon-errata.rst +48 -0
123 lines not on this page · raw message
Makefile +3 -2
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 12 -SUBLEVEL = 93 +SUBLEVEL = 94 EXTRAVERSION = NAME = Baby Opossum Posse
@@ -568,6 +568,7 @@ KBUILD_RUSTFLAGS := $(rust_common_flags) \ -Crelocation-model=static \ -Zfunction-sections=n \ -Wclippy::float_arithmetic +KBUILD_RUSTFLAGS_OPTION_CHKS := KBUILD_AFLAGS_KERNEL := KBUILD_CFLAGS_KERNEL :=
@@ -604,7 +605,7 @@ export KBUILD_USERCFLAGS KBUILD_USERLDFLAGS export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE -export KBUILD_RUSTFLAGS RUSTFLAGS_KERNEL RUSTFLAGS_MODULE +export KBUILD_RUSTFLAGS RUSTFLAGS_KERNEL RUSTFLAGS_MODULE KBUILD_RUSTFLAGS_OPTION_CHKS export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_RUSTFLAGS_MODULE KBUILD_LDFLAGS_MODULE export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL KBUILD_RUSTFLAGS_KERNEL
arch/arm/include/asm/io.h +13 -2
@@ -56,8 +56,19 @@ void __raw_readsl(const volatile void __iomem *addr, void *data, int longlen);* the bus. Rather than special-case the machine, just let the compiler * generate the access for CPUs prior to ARMv6. */ -#define __raw_readw (a) (__chk_io_ptr(a), *(volatile unsigned short __force *)(a)) -#define __raw_writew (v,a) ((void)(__chk_io_ptr(a), *(volatile unsigned short __force *)(a) = (v))) +#define __raw_writew __raw_writew +static __no_kasan_or_inline void __raw_writew(u16 val, volatile void __iomem *addr) +{ +__chk_io_ptr (addr); + *(volatile unsigned short __force *)addr = val; +} + +#define __raw_readw __raw_readw +static __no_kasan_or_inline u16 __raw_readw(const volatile void __iomem *addr) +{ +__chk_io_ptr (addr); +return *(const volatile unsigned short __force *)addr; +}#else /* * When running under a hypervisor, we want to avoid I/O accesses with
arch/arm/kernel/entry-armv.S +1 -1
@@ -567,7 +567,7 @@ ENTRY(__switch_to) @ are using KASAN mov_l r2, KASAN_SHADOW_OFFSET add r2, r2, ip, lsr #KASAN_SHADOW_SCALE_SHIFT - ldr r2, [r2] + ldrb r2, [r2] #endif #endif
arch/arm/mach-socfpga/platsmp.c +1 -0
@@ -78,6 +78,7 @@ static void __init socfpga_smp_prepare_cpus(unsigned int max_cpus) } socfpga_scu_base_addr =of_iomap (np,0 ); +of_node_put (np);if (!socfpga_scu_base_addr)return ;scu_enable (socfpga_scu_base_addr);
arch/arm/mm/alignment.c +5 -1
@@ -19,10 +19,11 @@#include <linux/init.h> #include <linux/sched/signal.h> #include <linux/uaccess.h> +#include <linux/unaligned.h> #include <asm/cp15.h> #include <asm/system_info.h> -#include <linux/unaligned.h> +#include <asm/system_misc.h> #include <asm/opcodes.h> #include "fault.h"
@@ -809,6 +810,9 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)int thumb2_32b =0 ;int fault; +if (addr >=TASK_SIZE &&user_mode (regs)) +harden_branch_predictor (); +if (interrupts_enabled (regs))local_irq_enable ();
arch/arm/mm/fault.c +75 -25
157 lines not on this page · raw message
arch/arm64/Kconfig +50 -0
56 lines not on this page · raw message
arch/arm64/Makefile +3 -0
@@ -66,6 +66,9 @@ else KBUILD_CFLAGS += -fasynchronous-unwind-tables KBUILD_AFLAGS += -fasynchronous-unwind-tables KBUILD_RUSTFLAGS += -Cforce-unwind-tables=y -Zuse-sync-unwind=n +# Work around rustc bug on compilers without +# https://github.com/rust-lang/rust/pull/156973. +KBUILD_RUSTFLAGS += $(if $(call rustc-min-version,109800),,-Zllvm_module_flag=uwtable:u32:2:max) endif ifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
arch/arm64/include/asm/cputype.h +6 -0
@@ -97,7 +97,9 @@#define ARM_CPU_PART_NEOVERSE_V3 0xD84#define ARM_CPU_PART_CORTEX_X925 0xD85#define ARM_CPU_PART_CORTEX_A725 0xD87 +#define ARM_CPU_PART_C1_ULTRA 0xD8C#define ARM_CPU_PART_NEOVERSE_N3 0xD8E +#define ARM_CPU_PART_C1_PREMIUM 0xD90#define APM_CPU_PART_XGENE 0x000#define APM_CPU_VAR_POTENZA 0x00
@@ -129,6 +131,7 @@#define NVIDIA_CPU_PART_DENVER 0x003#define NVIDIA_CPU_PART_CARMEL 0x004 +#define NVIDIA_CPU_PART_OLYMPUS 0x010#define FUJITSU_CPU_PART_A64FX 0x001
@@ -185,7 +188,9 @@#define MIDR_NEOVERSE_V3 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V3)#define MIDR_CORTEX_X925 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X925)#define MIDR_CORTEX_A725 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A725) +#define MIDR_C1_ULTRA MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_C1_ULTRA)#define MIDR_NEOVERSE_N3 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_N3) +#define MIDR_C1_PREMIUM MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_C1_PREMIUM)#define MIDR_THUNDERX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX)#define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX)#define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX)
@@ -209,6 +214,7 @@#define MIDR_QCOM_KRYO_4XX_SILVER MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_4XX_SILVER)#define MIDR_NVIDIA_DENVER MIDR_CPU_MODEL(ARM_CPU_IMP_NVIDIA, NVIDIA_CPU_PART_DENVER)#define MIDR_NVIDIA_CARMEL MIDR_CPU_MODEL(ARM_CPU_IMP_NVIDIA, NVIDIA_CPU_PART_CARMEL) +#define MIDR_NVIDIA_OLYMPUS MIDR_CPU_MODEL(ARM_CPU_IMP_NVIDIA, NVIDIA_CPU_PART_OLYMPUS)#define MIDR_FUJITSU_A64FX MIDR_CPU_MODEL(ARM_CPU_IMP_FUJITSU, FUJITSU_CPU_PART_A64FX)#define MIDR_HISI_TSV110 MIDR_CPU_MODEL(ARM_CPU_IMP_HISI, HISI_CPU_PART_TSV110)#define MIDR_HISI_HIP09 MIDR_CPU_MODEL(ARM_CPU_IMP_HISI, HISI_CPU_PART_HIP09)
arch/arm64/include/asm/tlbflush.h +37 -26
124 lines not on this page · raw message
arch/arm64/kernel/cpu_errata.c +32 -2
@@ -225,7 +225,37 @@ static const struct arm64_cpu_capabilities arm64_repeat_tlbi_list[] = { ERRATA_MIDR_RANGE(MIDR_CORTEX_A510, 0, 0, 1, 1), }, #endif - {}, +#ifdef CONFIG_ARM64_ERRATUM_4118414 + { + ERRATA_MIDR_RANGE_LIST(((const struct midr_range[]) { + MIDR_ALL_VERSIONS(MIDR_C1_PREMIUM), + MIDR_ALL_VERSIONS(MIDR_C1_ULTRA), + MIDR_ALL_VERSIONS(MIDR_CORTEX_A76), + MIDR_ALL_VERSIONS(MIDR_CORTEX_A76AE), + MIDR_ALL_VERSIONS(MIDR_CORTEX_A77), + MIDR_ALL_VERSIONS(MIDR_CORTEX_A78), + MIDR_ALL_VERSIONS(MIDR_CORTEX_A78AE), + MIDR_ALL_VERSIONS(MIDR_CORTEX_A78C), + MIDR_ALL_VERSIONS(MIDR_CORTEX_A710), + MIDR_ALL_VERSIONS(MIDR_CORTEX_X1), + MIDR_ALL_VERSIONS(MIDR_CORTEX_X1C), + MIDR_ALL_VERSIONS(MIDR_CORTEX_X2), + MIDR_ALL_VERSIONS(MIDR_CORTEX_X3), + MIDR_ALL_VERSIONS(MIDR_CORTEX_X4), + MIDR_ALL_VERSIONS(MIDR_CORTEX_X925), + MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N1), + MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2), + MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V1), + MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V2), + MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V3), + MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V3AE), + MIDR_ALL_VERSIONS(MIDR_NVIDIA_OLYMPUS), + MIDR_ALL_VERSIONS(MIDR_MICROSOFT_AZURE_COBALT_100), + {} + })), + }, +#endif + {} }; #endif
@@ -553,7 +583,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = {#endif #ifdef CONFIG_ARM64_WORKAROUND_REPEAT_TLBI { - .desc = "Qualcomm erratum 1009, or ARM erratum 1286807, 2441009", + .desc = "Broken broadcast TLBI completion", .capability = ARM64_WORKAROUND_REPEAT_TLBI, .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, .matches = cpucap_multi_entry_cap_matches,
arch/arm64/kernel/sys_compat.c +1 -1
@@ -37,7 +37,7 @@ __do_compat_cache_op(unsigned long start, unsigned long end)* We pick the reserved-ASID to minimise the impact. */ __tlbi (aside1is,__TLBI_VADDR (0 ,0 )); -dsb (ish); +__tlbi_sync_s1ish (); } ret =caches_clean_inval_user_pou (start, start + chunk);
arch/arm64/kvm/hyp/nvhe/mm.c +1 -1
@@ -261,7 +261,7 @@ static void fixmap_clear_slot(struct hyp_fixmap_slot *slot)*/ dsb (ishst);__tlbi_level (vale2is,__TLBI_VADDR (addr,0 ),KVM_PGTABLE_LAST_LEVEL ); -dsb (ish); +__tlbi_sync_s1ish_hyp ();isb (); }
arch/arm64/kvm/hyp/nvhe/tlb.c +4 -4
@@ -169,7 +169,7 @@ void __kvm_tlb_flush_vmid_ipa(struct kvm_s2_mmu *mmu,*/ dsb (ish);__tlbi (vmalle1is); -dsb (ish); +__tlbi_sync_s1ish_hyp ();isb ();exit_vmid_context (&cxt);
@@ -226,7 +226,7 @@ void __kvm_tlb_flush_vmid_range(struct kvm_s2_mmu *mmu,dsb (ish);__tlbi (vmalle1is); -dsb (ish); +__tlbi_sync_s1ish_hyp ();isb ();exit_vmid_context (&cxt);
@@ -240,7 +240,7 @@ void __kvm_tlb_flush_vmid(struct kvm_s2_mmu *mmu)enter_vmid_context (mmu, &cxt, false);__tlbi (vmalls12e1is); -dsb (ish); +__tlbi_sync_s1ish_hyp ();isb ();exit_vmid_context (&cxt);
@@ -266,5 +266,5 @@ void __kvm_flush_vm_context(void)/* Same remark as in enter_vmid_context() */ dsb (ish);__tlbi (alle1is); -dsb (ish); +__tlbi_sync_s1ish_hyp (); }
arch/arm64/kvm/hyp/pgtable.c +1 -1
@@ -497,7 +497,7 @@ static int hyp_unmap_walker(const struct kvm_pgtable_visit_ctx *ctx, *unmapped += granule; } -dsb (ish); +__tlbi_sync_s1ish_hyp ();isb (); mm_ops->put_page (ctx->ptep);
arch/arm64/kvm/hyp/vhe/tlb.c +5 -5
@@ -115,7 +115,7 @@ void __kvm_tlb_flush_vmid_ipa(struct kvm_s2_mmu *mmu,*/ dsb (ish);__tlbi (vmalle1is); -dsb (ish); +__tlbi_sync_s1ish_hyp ();isb ();exit_vmid_context (&cxt);
@@ -176,7 +176,7 @@ void __kvm_tlb_flush_vmid_range(struct kvm_s2_mmu *mmu,dsb (ish);__tlbi (vmalle1is); -dsb (ish); +__tlbi_sync_s1ish_hyp ();isb ();exit_vmid_context (&cxt);
@@ -192,7 +192,7 @@ void __kvm_tlb_flush_vmid(struct kvm_s2_mmu *mmu)enter_vmid_context (mmu, &cxt);__tlbi (vmalls12e1is); -dsb (ish); +__tlbi_sync_s1ish_hyp ();isb ();exit_vmid_context (&cxt);
@@ -217,7 +217,7 @@ void __kvm_flush_vm_context(void) {dsb (ishst);__tlbi (alle1is); -dsb (ish); +__tlbi_sync_s1ish_hyp (); }/*
@@ -358,7 +358,7 @@ int __kvm_tlbi_s1e2(struct kvm_s2_mmu *mmu, u64 va, u64 sys_encoding)default : ret = -EINVAL ; } -dsb (ish); +__tlbi_sync_s1ish_hyp ();isb ();if (mmu)
arch/x86/Makefile +4 -0
@@ -78,6 +78,10 @@ KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx KBUILD_RUSTFLAGS += --target=$(objtree)/scripts/target.json KBUILD_RUSTFLAGS += -Ctarget-feature=-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2 +# The target.json file is not available when invoking rustc-option, so use the +# built-in target when checking whether flags are supported instead. +KBUILD_RUSTFLAGS_OPTION_CHKS += --target=x86_64-unknown-none + # # CFLAGS for compiling floating point code inside the kernel. #
arch/x86/Makefile.um +8 -0
@@ -14,6 +14,14 @@ endif KBUILD_RUSTFLAGS += --target=$(objtree)/scripts/target.json +# The target.json file is not available when invoking rustc-option, so use the +# built-in target when checking whether flags are supported instead. +ifeq ($(CONFIG_X86_32),y) +KBUILD_RUSTFLAGS_OPTION_CHKS += --target=i686-unknown-linux-gnu +else +KBUILD_RUSTFLAGS_OPTION_CHKS += --target=x86_64-unknown-linux-gnu +endif + ifeq ($(CONFIG_X86_32),y) START := 0x8048000
arch/x86/kvm/svm/sev.c +14 -13
@@ -3451,20 +3451,17 @@ void sev_es_unmap_ghcb(struct vcpu_svm *svm)if (!svm->sev_es.ghcb)return ; -if (svm->sev_es.ghcb_sa_free) { -/* -* The scratch area lives outside the GHCB, so there is a -* buffer that, depending on the operation performed, may -* need to be synced, then freed. -*/ -if (svm->sev_es.ghcb_sa_sync) { -kvm_write_guest (svm->vcpu.kvm, - svm->sev_es.sw_scratch, - svm->sev_es.ghcb_sa, - svm->sev_es.ghcb_sa_len); - svm->sev_es.ghcb_sa_sync = false; - } +/* +* If the scratch area lives outside the GHCB, there's a buffer that, +* depending on the operation performed, may need to be synced. +*/ +if (svm->sev_es.ghcb_sa_sync) { +kvm_write_guest (svm->vcpu.kvm, svm->sev_es.sw_scratch, + svm->sev_es.ghcb_sa, svm->sev_es.ghcb_sa_len); + svm->sev_es.ghcb_sa_sync = false; + } +if (svm->sev_es.ghcb_sa_free) {kvfree (svm->sev_es.ghcb_sa); svm->sev_es.ghcb_sa =NULL ; svm->sev_es.ghcb_sa_free = false;
@@ -3525,6 +3522,8 @@ static int setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 min_len) goto e_scratch; } +WARN_ON_ONCE (svm->sev_es.ghcb_sa_sync || svm->sev_es.ghcb_sa_free); +if ((scratch_gpa_beg &PAGE_MASK ) == control->ghcb_gpa) {/* Scratch area begins within GHCB */ ghcb_scratch_beg = control->ghcb_gpa +
@@ -3546,6 +3545,8 @@ static int setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 min_len) scratch_va = (void *)svm->sev_es.ghcb; scratch_va += (scratch_gpa_beg - control->ghcb_gpa); + svm->sev_es.ghcb_sa_sync = false; + svm->sev_es.ghcb_sa_free = false; svm->sev_es.ghcb_sa_len = ghcb_scratch_end - scratch_gpa_beg; }else {/* GHCB v2 requires the scratch area to be within the GHCB. */
arch/x86/kvm/vmx/vmx.c +0 -9
@@ -6853,15 +6853,6 @@ void vmx_hwapic_isr_update(struct kvm_vcpu *vcpu, int max_isr)* VM-Exit, otherwise L1 with run with a stale SVI. */ if (is_guest_mode (vcpu)) { -/* -* KVM is supposed to forward intercepted L2 EOIs to L1 if VID -* is enabled in vmcs12; as above, the EOIs affect L2's vAPIC. -* Note, userspace can stuff state while L2 is active; assert -* that VID is disabled if and only if the vCPU is in KVM_RUN -* to avoid false positives if userspace is setting APIC state. -*/ -WARN_ON_ONCE (vcpu->wants_to_run && -nested_cpu_has_vid (get_vmcs12 (vcpu)));to_vmx (vcpu)->nested.update_vmcs01_hwapic_isr = true;return ; }
arch/x86/kvm/x86.c +7 -0
@@ -10629,9 +10629,16 @@ void __kvm_vcpu_update_apicv(struct kvm_vcpu *vcpu)* pending. At the same time, KVM_REQ_EVENT may not be set as APICv was * still active when the interrupt got accepted. Make sure * kvm_check_and_inject_events() is called to check for that. +* +* Update SVI when APICv gets enabled, otherwise SVI won't reflect the +* highest bit in vISR and the next accelerated EOI in the guest won't +* be virtualized correctly (the CPU uses SVI to determine which vISR +* vector to clear). */ if (!apic->apicv_active)kvm_make_request (KVM_REQ_EVENT , vcpu); +else +kvm_apic_update_hwapic_isr (vcpu); out:preempt_enable ();
block/blk-zoned.c +27 -5
@@ -517,6 +517,28 @@ static void disk_mark_zone_wplug_dead(struct blk_zone_wplug *zwplug) } } +static inline bool disk_check_zone_wplug_dead (struct blk_zone_wplug *zwplug) +{ +if (!(zwplug->flags &BLK_ZONE_WPLUG_DEAD )) +return false; + +/* +* If a new write is received right after a zone reset completes and +* while the disk_zone_wplugs_worker() thread has not yet released the +* reference on the zone write plug after processing the last write to +* the zone, then the new write BIO will see the zone write plug marked +* as dead. This case is however a false positive and a perfectly valid +* pattern. In such case, restore the zone write plug to a live one. +*/ +if (!zwplug->wp_offset &&bio_list_empty (&zwplug->bio_list)) { + zwplug->flags &= ~BLK_ZONE_WPLUG_DEAD ; +refcount_inc (&zwplug->ref); +return false; + } + +return true; +} +static void blk_zone_wplug_bio_work (struct work_struct *work);/*
@@ -1037,12 +1059,12 @@ static bool blk_zone_wplug_handle_write(struct bio *bio, unsigned int nr_segs) }/* -* If we got a zone write plug marked as dead, then the user is issuing -* writes to a full zone, or without synchronizing with zone reset or -* zone finish operations. In such case, fail the BIO to signal this -* invalid usage. +* Check if we got a zone write plug marked as dead. If yes, then the +* user is likely issuing writes to a full zone, or without +* synchronizing with zone reset or zone finish operations. In such +* case, fail the BIO to signal this invalid usage. */ -if (zwplug->flags &BLK_ZONE_WPLUG_DEAD ) { +if (disk_check_zone_wplug_dead (zwplug)) {spin_unlock_irqrestore (&zwplug->lock, flags);disk_put_zone_wplug (zwplug);bio_io_error (bio);
drivers/accel/ivpu/ivpu_fw_log.c +5 -0
@@ -98,6 +98,11 @@ static void fw_log_print_buffer(struct vpu_tracing_buffer_header *log, const chau32 log_start = only_new_msgs ?READ_ONCE (log->read_index) :0 ;u32 log_end =READ_ONCE (log->write_index); +if (log_start >= data_size) + log_start =0 ; +if (log_end > data_size) + log_end = data_size; +if (log->wrap_count == log->read_wrap_count) {if (log_end <= log_start) {drm_printf (p,"==== %s \"%s\" log empty ====\n" , prefix, log->name);
drivers/accel/ivpu/ivpu_ipc.c +1 -1
@@ -275,7 +275,7 @@ int ivpu_ipc_receive(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons,if (ipc_buf)memcpy (ipc_buf, rx_msg->ipc_hdr,sizeof (*ipc_buf));if (rx_msg->jsm_msg) { -u32 size =min_t (int, rx_msg->ipc_hdr->data_size,sizeof (*jsm_msg)); +u32 size =min (rx_msg->ipc_hdr->data_size,sizeof (*jsm_msg));if (rx_msg->jsm_msg->result !=VPU_JSM_STATUS_SUCCESS ) {ivpu_dbg (vdev,IPC ,"IPC resp result error: %d\n" , rx_msg->jsm_msg->result);
drivers/accel/ivpu/ivpu_ms.c +7 -0
@@ -282,6 +282,13 @@ int ivpu_ms_get_info_ioctl(struct drm_device *dev, void *data, struct drm_file *if (ret) goto unlock; +if (info_size >ivpu_bo_size (bo)) { +ivpu_warn_ratelimited (vdev,"MS info overflow: %#llx > %#zx\n" , + info_size,ivpu_bo_size (bo)); + ret = -EOVERFLOW ; + goto unlock; + } +if (args->buffer_size < info_size) { ret = -ENOSPC ; goto unlock;
drivers/base/bus.c +9 -2
@@ -503,10 +503,10 @@ static const struct attribute_group driver_override_dev_group = {*/ int bus_add_device (struct device *dev) { -struct subsys_private *sp =bus_to_subsys (dev->bus); +struct subsys_private *sp;int error; -if (!sp) { +if (!dev->bus) {/* * This is a normal operation for many devices that do not * have a bus assigned to them, just say that all went
@@ -515,6 +515,13 @@ int bus_add_device(struct device *dev)return 0 ; } + sp =bus_to_subsys (dev->bus); +if (!sp) { +pr_err ("%s: cannot add device '%s' to unregistered bus '%s'\n" , + __func__,dev_name (dev), dev->bus->name); +return -EINVAL ; + } +/* * Reference in sp is now incremented and will be dropped when * the device is removed from the bus
drivers/block/zram/zram_drv.c +1 -1
@@ -1661,7 +1661,7 @@ static int zram_bvec_write_partial(struct zram *zram, struct bio_vec *bvec,if (!page)return -ENOMEM ; - ret =zram_read_page (zram, page, index, bio); + ret =zram_read_page (zram, page, index,NULL );if (!ret) {memcpy_from_bvec (page_address (page) + offset, bvec); ret =zram_write_page (zram, page, index);
drivers/char/ipmi/ipmi_msghandler.c +1 -1
@@ -4395,7 +4395,7 @@ static int handle_read_event_rsp(struct ipmi_smi *intf, recv_msg =ipmi_alloc_recv_msg (user);if (IS_ERR (recv_msg)) { -rcu_read_unlock (); +srcu_read_unlock (&intf->users_srcu, index);list_for_each_entry_safe (recv_msg, recv_msg2, &msgs, link) {list_del (&recv_msg->link);
drivers/char/ipmi/ipmi_ssif.c +13 -16
@@ -1681,6 +1681,7 @@ static int ssif_probe(struct i2c_client *client)int len =0 ;int i;u8 slave_addr =0 ; +unsigned int thread_num;struct ssif_addr_info *addr_info =NULL ;mutex_lock (&ssif_infos_mutex);
@@ -1899,22 +1900,18 @@ static int ssif_probe(struct i2c_client *client) ssif_info->handlers.request_events = request_events; ssif_info->handlers.set_need_watch = ssif_set_need_watch; - { -unsigned int thread_num; - - thread_num = ((i2c_adapter_id (ssif_info->client->adapter) - <<8 ) | - ssif_info->client->addr); -init_completion (&ssif_info->wake_thread); - ssif_info->thread =kthread_run (ipmi_ssif_thread, ssif_info, -"kssif%4.4x" , thread_num); -if (IS_ERR (ssif_info->thread)) { - rv =PTR_ERR (ssif_info->thread); -dev_notice (&ssif_info->client->dev, -"Could not start kernel thread: error %d\n" , - rv); - goto out; - } + thread_num = ((i2c_adapter_id (ssif_info->client->adapter) <<8 ) | + ssif_info->client->addr); +init_completion (&ssif_info->wake_thread); + ssif_info->thread =kthread_run (ipmi_ssif_thread, ssif_info, +"kssif%4.4x" , thread_num); +if (IS_ERR (ssif_info->thread)) { + rv =PTR_ERR (ssif_info->thread); + ssif_info->thread =NULL ; +dev_notice (&ssif_info->client->dev, +"Could not start kernel thread: error %d\n" , + rv); + goto out; }dev_set_drvdata (&ssif_info->client->dev, ssif_info);
drivers/clk/qcom/dispcc-sc8280xp.c +2 -2
@@ -978,7 +978,7 @@ static struct clk_rcg2 disp0_cc_mdss_mdp_clk_src = { .name = "disp0_cc_mdss_mdp_clk_src", .parent_data = disp0_cc_parent_data_5, .num_parents = ARRAY_SIZE(disp0_cc_parent_data_5), - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_shared_no_init_park_ops, }, };
@@ -992,7 +992,7 @@ static struct clk_rcg2 disp1_cc_mdss_mdp_clk_src = { .name = "disp1_cc_mdss_mdp_clk_src", .parent_data = disp1_cc_parent_data_5, .num_parents = ARRAY_SIZE(disp1_cc_parent_data_5), - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_shared_no_init_park_ops, }, };
drivers/clk/qcom/dispcc-x1e80100.c +1 -1
@@ -580,7 +580,7 @@ static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = { .parent_data = disp_cc_parent_data_6, .num_parents = ARRAY_SIZE(disp_cc_parent_data_6), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_shared_no_init_park_ops, }, };
drivers/clk/samsung/clk-gs101.c +1 -1
@@ -3602,7 +3602,7 @@ static const unsigned long peric0_clk_regs[] __initconst = {CLK_CON_DIV_DIV_CLK_PERIC0_USI4_USI ,CLK_CON_DIV_DIV_CLK_PERIC0_USI5_USI ,CLK_CON_DIV_DIV_CLK_PERIC0_USI6_USI , -CLK_CON_DIV_DIV_CLK_PERIC0_USI6_USI , +CLK_CON_DIV_DIV_CLK_PERIC0_USI7_USI ,CLK_CON_DIV_DIV_CLK_PERIC0_USI8_USI ,CLK_CON_BUF_CLKBUF_PERIC0_IP , CLK_CON_GAT_CLK_BLK_PERIC0_UID_PERIC0_CMU_PERIC0_IPCLKPORT_PCLK,
drivers/gpio/gpio-mvebu.c +2 -2
@@ -1002,7 +1002,7 @@ static int mvebu_gpio_suspend(struct platform_device *pdev, pm_message_t state)BUG (); } -if (IS_REACHABLE (CONFIG_PWM )) +if (IS_REACHABLE (CONFIG_PWM ) && mvchip->mvpwm)mvebu_pwm_suspend (mvchip);return 0 ;
@@ -1054,7 +1054,7 @@ static int mvebu_gpio_resume(struct platform_device *pdev)BUG (); } -if (IS_REACHABLE (CONFIG_PWM )) +if (IS_REACHABLE (CONFIG_PWM ) && mvchip->mvpwm)mvebu_pwm_resume (mvchip);return 0 ;
drivers/gpio/gpio-zynq.c +1 -0
@@ -1015,6 +1015,7 @@ static void zynq_gpio_remove(struct platform_device *pdev)gpiochip_remove (&gpio->chip);device_set_wakeup_capable (&pdev->dev,0 );pm_runtime_disable (&pdev->dev); +pm_runtime_put_noidle (&pdev->dev); }static struct platform_driver zynq_gpio_driver = {
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +3 -1
@@ -1278,6 +1278,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, {struct amdgpu_fpriv *fpriv = p->filp->driver_priv;struct amdgpu_job *leader = p->gang_leader; +struct amdgpu_vm *vm = &fpriv->vm;struct amdgpu_bo_list_entry *e;struct drm_gem_object *gobj;unsigned long index;
@@ -1323,7 +1324,8 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, e->range); e->range =NULL ; } -if (r) { + +if (r || !list_empty (&vm->invalidated)) { r = -EAGAIN ;mutex_unlock (&p->adev->notifier_lock);return r;
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +1 -1
@@ -3195,7 +3195,7 @@ static void copy_context_work_handler (struct work_struct *work)static uint32_t *get_queue_ids (uint32_t num_queues,uint32_t *usr_queue_id_array) {if (!usr_queue_id_array) -return NULL ; +return num_queues ?ERR_PTR (-EINVAL ) :NULL ;if (num_queues >KFD_MAX_NUM_OF_QUEUES_PER_PROCESS )return ERR_PTR (-EINVAL );
drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v11.c +41 -8
71 lines not on this page · raw message
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c +5 -0
@@ -1314,8 +1314,13 @@ static ssize_t dp_sdp_message_debugfs_write(struct file *f, const char __user *bif (size ==0 )return 0 ; +if (!connector->base.state || !connector->base.state->crtc) +return -ENODEV ; + acrtc_state =to_dm_crtc_state (connector->base.state->crtc->state); + write_size =min_t (size_t, size,sizeof (data)); + r =copy_from_user (data, buf, write_size); write_size -= r;
drivers/gpu/drm/amd/display/dc/basics/vector.c +2 -2
@@ -288,8 +288,8 @@ bool dal_vector_reserve(struct vector *vector, uint32_t capacity)if (capacity <= vector->capacity)return true; - new_container =krealloc (vector->container, - capacity * vector->struct_size,GFP_KERNEL ); + new_container =krealloc_array (vector->container, + capacity, vector->struct_size,GFP_KERNEL );if (new_container) { vector->container = new_container;
drivers/gpu/drm/amd/display/dc/bios/bios_parser.c +10 -5
@@ -220,6 +220,7 @@ static enum bp_result bios_parser_get_i2c_info(struct dc_bios *dcb,ATOM_COMMON_RECORD_HEADER *header;ATOM_I2C_RECORD *record;struct bios_parser *bp =BP_FROM_DCB (dcb); +int i;if (!info)return BP_RESULT_BADINPUT ;
@@ -232,7 +233,7 @@ static enum bp_result bios_parser_get_i2c_info(struct dc_bios *dcb, offset =le16_to_cpu (object->usRecordOffset) + bp->object_info_tbl_offset; -for (;;) { +for (i =0 ; i <BIOS_MAX_NUM_RECORD ; i++) { header =GET_IMAGE (ATOM_COMMON_RECORD_HEADER , offset);if (!header)
@@ -291,11 +292,12 @@ static enum bp_result bios_parser_get_device_tag_record( {ATOM_COMMON_RECORD_HEADER *header;uint32_t offset; +int i; offset =le16_to_cpu (object->usRecordOffset) + bp->object_info_tbl_offset; -for (;;) { +for (i =0 ; i <BIOS_MAX_NUM_RECORD ; i++) { header =GET_IMAGE (ATOM_COMMON_RECORD_HEADER , offset);if (!header)
@@ -868,6 +870,7 @@ static ATOM_HPD_INT_RECORD *get_hpd_record(struct bios_parser *bp, {ATOM_COMMON_RECORD_HEADER *header;uint32_t offset; +int i;if (!object) {BREAK_TO_DEBUGGER ();/* Invalid object */
@@ -877,7 +880,7 @@ static ATOM_HPD_INT_RECORD *get_hpd_record(struct bios_parser *bp, offset =le16_to_cpu (object->usRecordOffset) + bp->object_info_tbl_offset; -for (;;) { +for (i =0 ; i <BIOS_MAX_NUM_RECORD ; i++) { header =GET_IMAGE (ATOM_COMMON_RECORD_HEADER , offset);if (!header)
@@ -1572,6 +1575,7 @@ static ATOM_ENCODER_CAP_RECORD_V2 *get_encoder_cap_record( {ATOM_COMMON_RECORD_HEADER *header;uint32_t offset; +int i;if (!object) {BREAK_TO_DEBUGGER ();/* Invalid object */
@@ -1581,7 +1585,7 @@ static ATOM_ENCODER_CAP_RECORD_V2 *get_encoder_cap_record( offset =le16_to_cpu (object->usRecordOffset) + bp->object_info_tbl_offset; -for (;;) { +for (i =0 ; i <BIOS_MAX_NUM_RECORD ; i++) { header =GET_IMAGE (ATOM_COMMON_RECORD_HEADER , offset);if (!header)
@@ -2671,6 +2675,7 @@ static enum bp_result update_slot_layout_info(struct dc_bios *dcb, unsigned int record_offset) {unsigned int j; +unsigned int n;struct bios_parser *bp;ATOM_BRACKET_LAYOUT_RECORD *record;ATOM_COMMON_RECORD_HEADER *record_header;
@@ -2680,7 +2685,7 @@ static enum bp_result update_slot_layout_info(struct dc_bios *dcb, record =NULL ; record_header =NULL ; -for (;;) { +for (n =0 ; n <BIOS_MAX_NUM_RECORD ; n++) { record_header =GET_IMAGE (ATOM_COMMON_RECORD_HEADER , record_offset);if (record_header ==NULL ) {
drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c +54 -27
291 lines not on this page · raw message
drivers/gpu/drm/amd/display/dc/bios/bios_parser_helper.h +5 -0
@@ -38,4 +38,9 @@ uint32_t bios_get_vga_enabled_displays(struct dc_bios *bios);#define GET_IMAGE (type, offset) ((type *) bios_get_image(&bp->base, offset, sizeof(type))) +/* Upper bound on the number of records in a VBIOS record chain. Prevents +* unbounded looping if the VBIOS image is malformed and lacks a terminator. +*/ +#define BIOS_MAX_NUM_RECORD 256 +#endif
drivers/gpu/drm/amd/display/dc/dce/dce_transform.c +9 -1
@@ -110,7 +110,15 @@ static const struct out_csc_color_matrix global_color_matrix[] = { { COLOR_SPACE_YCBCR601_LIMITED, { 0xE00, 0xF447, 0xFDB9, 0x1000, 0x991, 0x12C9, 0x3A6, 0x200, 0xFB47, 0xF6B9, 0xE00, 0x1000} }, { COLOR_SPACE_YCBCR709_LIMITED, { 0xE00, 0xF349, 0xFEB7, 0x1000, 0x6CE, 0x16E3, - 0x24F, 0x200, 0xFCCB, 0xF535, 0xE00, 0x1000} } + 0x24F, 0x200, 0xFCCB, 0xF535, 0xE00, 0x1000} }, +{ COLOR_SPACE_2020_RGB_FULLRANGE, + { 0x2000, 0, 0, 0, 0, 0x2000, 0, 0, 0, 0, 0x2000, 0} }, +{ COLOR_SPACE_2020_RGB_LIMITEDRANGE, + { 0x1B67, 0, 0, 0x201, 0, 0x1B67, 0, 0x201, 0, 0, 0x1B67, 0x201} }, +{ COLOR_SPACE_2020_YCBCR_LIMITED, { 0x1000, 0xF149, 0xFEB7, 0x1004, 0x0868, + 0x15B2, 0x01E6, 0x201, 0xFB88, 0xF478, 0x1000, 0x1004} }, +{ COLOR_SPACE_2020_YCBCR_FULL, { 0x1000, 0xF149, 0xFEB7, 0x1004, 0x0868, 0x15B2, + 0x01E6, 0x201, 0xFB88, 0xF478, 0x1000, 0x1004} } }; static bool setup_scaling_configuration(
drivers/gpu/drm/amd/display/dc/dce110/dce110_opp_csc_v.c +9 -1
@@ -88,7 +88,15 @@ static const struct out_csc_color_matrix global_color_matrix[] = { { COLOR_SPACE_YCBCR601_LIMITED, { 0xE00, 0xF447, 0xFDB9, 0x1000, 0x991, 0x12C9, 0x3A6, 0x200, 0xFB47, 0xF6B9, 0xE00, 0x1000} }, { COLOR_SPACE_YCBCR709_LIMITED, { 0xE00, 0xF349, 0xFEB7, 0x1000, 0x6CE, 0x16E3, - 0x24F, 0x200, 0xFCCB, 0xF535, 0xE00, 0x1000} } + 0x24F, 0x200, 0xFCCB, 0xF535, 0xE00, 0x1000} }, +{ COLOR_SPACE_2020_RGB_FULLRANGE, + { 0x2000, 0, 0, 0, 0, 0x2000, 0, 0, 0, 0, 0x2000, 0} }, +{ COLOR_SPACE_2020_RGB_LIMITEDRANGE, + { 0x1B67, 0, 0, 0x201, 0, 0x1B67, 0, 0x201, 0, 0, 0x1B67, 0x201} }, +{ COLOR_SPACE_2020_YCBCR_LIMITED, { 0x1000, 0xF149, 0xFEB7, 0x1004, 0x0868, + 0x15B2, 0x01E6, 0x201, 0xFB88, 0xF478, 0x1000, 0x1004} }, +{ COLOR_SPACE_2020_YCBCR_FULL, { 0x1000, 0xF149, 0xFEB7, 0x1004, 0x0868, 0x15B2, + 0x01E6, 0x201, 0xFB88, 0xF478, 0x1000, 0x1004} } }; enum csc_color_mode {
drivers/gpu/drm/amd/display/modules/hdcp/hdcp_ddc.c +2 -1
@@ -529,7 +529,8 @@ enum mod_hdcp_status mod_hdcp_read_rx_id_list(struct mod_hdcp *hdcp) }else { status =read (hdcp,MOD_HDCP_MESSAGE_ID_READ_REPEATER_AUTH_SEND_RECEIVERID_LIST , hdcp->auth.msg.hdcp2.rx_id_list, - hdcp->auth.msg.hdcp2.rx_id_list_size); +MIN (hdcp->auth.msg.hdcp2.rx_id_list_size, +sizeof (hdcp->auth.msg.hdcp2.rx_id_list))); }return status; }
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c +17 -15
@@ -2383,28 +2383,30 @@ static int smu_v13_0_0_enable_mgpu_fan_boost(struct smu_context *smu) }static int smu_v13_0_0_get_power_limit (struct smu_context *smu, -uint32_t *current_power_limit, -uint32_t *default_power_limit, -uint32_t *max_power_limit, -uint32_t *min_power_limit) +uint32_t *current_power_limit, +uint32_t *default_power_limit, +uint32_t *max_power_limit, +uint32_t *min_power_limit) {struct smu_table_context *table_context = &smu->smu_table;struct smu_13_0_0_powerplay_table *powerplay_table = (struct smu_13_0_0_powerplay_table *)table_context->power_play_table;PPTable_t *pptable = table_context->driver_pptable;SkuTable_t *skutable = &pptable->SkuTable; -uint32_t power_limit, od_percent_upper =0 , od_percent_lower =0 ; -uint32_t msg_limit = skutable->MsgLimits.Power[PPT_THROTTLER_PPT0 ][POWER_SOURCE_AC ]; - -if (smu_v13_0_get_current_power_limit (smu, &power_limit)) - power_limit = smu->adev->pm.ac_power ? +uint32_t pp_limit = smu->adev->pm.ac_power ? skutable->SocketPowerLimitAc[PPT_THROTTLER_PPT0 ] : skutable->SocketPowerLimitDc[PPT_THROTTLER_PPT0 ]; +uint32_t power_limit =0 , od_percent_upper =0 , od_percent_lower =0 ; +int ret; + +if (current_power_limit) { + ret =smu_v13_0_get_current_power_limit (smu, &power_limit); +if (ret) + *current_power_limit = pp_limit; + } -if (current_power_limit) - *current_power_limit = power_limit;if (default_power_limit) - *default_power_limit = power_limit; + *default_power_limit = pp_limit;if (powerplay_table) { if (smu->od_enabled &&
@@ -2418,15 +2420,15 @@ static int smu_v13_0_0_get_power_limit(struct smu_context *smu, }dev_dbg (smu->adev->dev,"od percent upper:%d, od percent lower:%d (default power: %d)\n" , - od_percent_upper, od_percent_lower, power_limit); + od_percent_upper, od_percent_lower, pp_limit);if (max_power_limit) { - *max_power_limit = msg_limit * (100 + od_percent_upper); + *max_power_limit = pp_limit * (100 + od_percent_upper); *max_power_limit /=100 ; }if (min_power_limit) { - *min_power_limit = power_limit * (100 - od_percent_lower); + *min_power_limit = pp_limit * (100 - od_percent_lower); *min_power_limit /=100 ; }
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c +18 -14
@@ -2344,28 +2344,32 @@ static int smu_v13_0_7_enable_mgpu_fan_boost(struct smu_context *smu) }static int smu_v13_0_7_get_power_limit (struct smu_context *smu, -uint32_t *current_power_limit, -uint32_t *default_power_limit, -uint32_t *max_power_limit, -uint32_t *min_power_limit) +uint32_t *current_power_limit, +uint32_t *default_power_limit, +uint32_t *max_power_limit, +uint32_t *min_power_limit) {struct smu_table_context *table_context = &smu->smu_table;struct smu_13_0_7_powerplay_table *powerplay_table = (struct smu_13_0_7_powerplay_table *)table_context->power_play_table;PPTable_t *pptable = table_context->driver_pptable;SkuTable_t *skutable = &pptable->SkuTable; -uint32_t power_limit, od_percent_upper =0 , od_percent_lower =0 ; -uint32_t msg_limit = skutable->MsgLimits.Power[PPT_THROTTLER_PPT0 ][POWER_SOURCE_AC ]; - -if (smu_v13_0_get_current_power_limit (smu, &power_limit)) - power_limit = smu->adev->pm.ac_power ? +uint32_t pp_limit = smu->adev->pm.ac_power ? skutable->SocketPowerLimitAc[PPT_THROTTLER_PPT0 ] : skutable->SocketPowerLimitDc[PPT_THROTTLER_PPT0 ]; +uint32_t power_limit =0 , od_percent_upper =0 , od_percent_lower =0 ; +int ret; + +if (current_power_limit) { + ret =smu_v13_0_get_current_power_limit (smu, &power_limit); +if (ret) + power_limit = pp_limit; -if (current_power_limit) *current_power_limit = power_limit; + } +if (default_power_limit) - *default_power_limit = power_limit; + *default_power_limit = pp_limit;if (powerplay_table) { if (smu->od_enabled &&
@@ -2379,15 +2383,15 @@ static int smu_v13_0_7_get_power_limit(struct smu_context *smu, }dev_dbg (smu->adev->dev,"od percent upper:%d, od percent lower:%d (default power: %d)\n" , - od_percent_upper, od_percent_lower, power_limit); + od_percent_upper, od_percent_lower, pp_limit);if (max_power_limit) { - *max_power_limit = msg_limit * (100 + od_percent_upper); + *max_power_limit = pp_limit * (100 + od_percent_upper); *max_power_limit /=100 ; }if (min_power_limit) { - *min_power_limit = power_limit * (100 - od_percent_lower); + *min_power_limit = pp_limit * (100 - od_percent_lower); *min_power_limit /=100 ; }
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c +2 -1
@@ -1219,7 +1219,8 @@ static int smu_v14_0_0_set_soft_freq_limited_range(struct smu_context *smu,switch (clk_type) {case SMU_GFXCLK :case SMU_SCLK : - msg_set_min = SMU_MSG_SetHardMinGfxClk; +/* SoftMin lets PMFW throttle gfxclk; HardMin would override SoftMax. */ + msg_set_min = SMU_MSG_SetSoftMinGfxclk; msg_set_max = SMU_MSG_SetSoftMaxGfxClk;break ;case SMU_FCLK :
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c +0 -1
@@ -2208,7 +2208,6 @@ static ssize_t smu_v14_0_2_get_gpu_metrics(struct smu_context *smu, metrics->Vcn1ActivityPercentage); gpu_metrics->average_socket_power = metrics->AverageSocketPower; - gpu_metrics->energy_accumulator = metrics->EnergyAccumulator;if (metrics->AverageGfxActivity <=SMU_14_0_2_BUSY_THRESHOLD ) gpu_metrics->average_gfxclk_frequency = metrics->AverageGfxclkFrequencyPostDs;
drivers/gpu/drm/i915/gem/i915_gem_phys.c +15 -4
@@ -18,6 +18,17 @@#include "i915_gem_tiling.h" #include "i915_scatterlist.h" +/* Abuse scatterlist to store pointer instead of struct page. */ +static inline void __set_phys_vaddr (struct scatterlist *sg,void *vaddr) +{ +sg_assign_page (sg, (struct page *)vaddr); +} + +static inline void *__get_phys_vaddr (struct scatterlist *sg) +{ +return (void *)sg_page (sg); +} +static int i915_gem_object_get_pages_phys (struct drm_i915_gem_object *obj) {struct address_space *mapping = obj->base.filp->f_mapping;
@@ -58,7 +69,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj) sg->offset =0 ; sg->length = obj->base.size; -sg_assign_page (sg, (struct page *)vaddr); +__set_phys_vaddr (sg, vaddr);sg_dma_address (sg) = dma;sg_dma_len (sg) = obj->base.size;
@@ -99,7 +110,7 @@ i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj, struct sg_table *pages) {dma_addr_t dma =sg_dma_address (pages->sgl); -void *vaddr =sg_page (pages->sgl); +void *vaddr =__get_phys_vaddr (pages->sgl);__i915_gem_object_release_shmem (obj, pages, false);
@@ -139,7 +150,7 @@ i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj,int i915_gem_object_pwrite_phys (struct drm_i915_gem_object *obj,const struct drm_i915_gem_pwrite *args) { -void *vaddr =sg_page (obj->mm.pages->sgl) + args->offset; +void *vaddr =__get_phys_vaddr (obj->mm.pages->sgl) + args->offset;char __user *user_data =u64_to_user_ptr (args->data_ptr);struct drm_i915_private *i915 =to_i915 (obj->base.dev);int err;
@@ -170,7 +181,7 @@ int i915_gem_object_pwrite_phys(struct drm_i915_gem_object *obj,int i915_gem_object_pread_phys (struct drm_i915_gem_object *obj,const struct drm_i915_gem_pread *args) { -void *vaddr =sg_page (obj->mm.pages->sgl) + args->offset; +void *vaddr =__get_phys_vaddr (obj->mm.pages->sgl) + args->offset;char __user *user_data =u64_to_user_ptr (args->data_ptr);int err;
drivers/gpu/drm/imx/dcss/dcss-scaler.c +3 -0
@@ -166,6 +166,7 @@ static int exp_approx_q(int x)* dcss_scaler_gaussian_filter() - Generate gaussian prototype filter. * @fc_q: fixed-point cutoff frequency normalized to range [0, 1] * @use_5_taps: indicates whether to use 5 taps or 7 taps +* @phase0_identity: whether to override phase 0 coefficients with identity filter * @coef: output filter coefficients */ static void dcss_scaler_gaussian_filter(int fc_q, bool use_5_taps,
@@ -262,7 +263,9 @@ static void dcss_scaler_nearest_neighbor_filter(bool use_5_taps,* @src_length: length of input * @dst_length: length of output * @use_5_taps: 0 for 7 taps per phase, 1 for 5 taps +* @phase0_identity: whether to override phase 0 coefficients with identity filter * @coef: output coefficients +* @nn_interpolation: whether to use nearest neighbor instead of gaussian filter */ static void dcss_scaler_filter_design(int src_length, int dst_length, bool use_5_taps, bool phase0_identity,
drivers/gpu/drm/v3d/v3d_sched.c +2 -1
@@ -409,7 +409,7 @@ v3d_rewrite_csd_job_wg_counts_from_indirect(struct v3d_cpu_job *job) wg_counts = (uint32_t *)(bo->vaddr + indirect_csd->offset);if (wg_counts[0 ] ==0 || wg_counts[1 ] ==0 || wg_counts[2 ] ==0 ) -return ; + goto unmap_bo; args->cfg[0 ] = wg_counts[0 ] <<V3D_CSD_CFG012_WG_COUNT_SHIFT ; args->cfg[1 ] = wg_counts[1 ] <<V3D_CSD_CFG012_WG_COUNT_SHIFT ;
@@ -434,6 +434,7 @@ v3d_rewrite_csd_job_wg_counts_from_indirect(struct v3d_cpu_job *job) } } +unmap_bo:v3d_put_bo_vaddr (indirect);v3d_put_bo_vaddr (bo); }
drivers/gpu/drm/vc4/vc4_validate_shaders.c +7 -6
@@ -288,15 +288,16 @@ static bool require_uniform_address_uniform(struct vc4_validated_shader_info *va {uint32_t o = validated_shader->num_uniform_addr_offsets;uint32_t num_uniforms = validated_shader->uniforms_size /4 ; +u32 *offsets; - validated_shader->uniform_addr_offsets = -krealloc (validated_shader->uniform_addr_offsets, - (o +1 ) * -sizeof (*validated_shader->uniform_addr_offsets), -GFP_KERNEL ); -if (!validated_shader->uniform_addr_offsets) + offsets =krealloc_array (validated_shader->uniform_addr_offsets, + o +1 , +sizeof (*validated_shader->uniform_addr_offsets), +GFP_KERNEL ); +if (!offsets)return false; + validated_shader->uniform_addr_offsets = offsets; validated_shader->uniform_addr_offsets[o] = num_uniforms; validated_shader->num_uniform_addr_offsets++;
drivers/gpu/drm/virtio/virtgpu_drv.c +4 -1
@@ -118,7 +118,10 @@ static void virtio_gpu_remove(struct virtio_device *vdev)struct drm_device *dev = vdev->priv;drm_dev_unplug (dev); -drm_atomic_helper_shutdown (dev); + +if (drm_core_check_feature (dev,DRIVER_ATOMIC )) +drm_atomic_helper_shutdown (dev); +virtio_gpu_deinit (dev);drm_dev_put (dev); }
drivers/gpu/drm/virtio/virtgpu_submit.c +3 -1
@@ -65,8 +65,10 @@ static int virtio_gpu_dma_fence_wait(struct virtio_gpu_submit *submit,dma_fence_unwrap_for_each (f, &itr, fence) { err =virtio_gpu_do_fence_wait (submit, f); -if (err) +if (err) { +dma_fence_put (itr.chain);return err; + } }return 0 ;
drivers/gpu/drm/xe/xe_guc_submit.c +1 -1
@@ -1907,8 +1907,8 @@ static void handle_sched_done(struct xe_guc *guc, struct xe_exec_queue *q,xe_gt_assert (guc_to_gt (guc),exec_queue_pending_disable (q));if (q->guc->suspend_pending) { -suspend_fence_signal (q);clear_exec_queue_pending_disable (q); +suspend_fence_signal (q); }else {if (exec_queue_banned (q) || check_timeout) {smp_wmb ();
drivers/gpu/drm/xe/xe_range_fence.c +2 -0
@@ -77,6 +77,8 @@ int xe_range_fence_insert(struct xe_range_fence_tree *tree, }else if (err ==0 ) {xe_range_fence_tree_insert (rfence, &tree->root);return 0 ; + }else { +dma_fence_put (fence); } free:
drivers/i2c/busses/i2c-qcom-cci.c +1 -1
@@ -683,8 +683,8 @@ static void cci_remove(struct platform_device *pdev)if (cci->master[i].cci) {i2c_del_adapter (&cci->master[i].adap);of_node_put (cci->master[i].adap.dev.of_node); +cci_halt (cci, i); } -cci_halt (cci, i); }disable_irq (cci->irq);
drivers/i2c/busses/i2c-stm32f7.c +3 -3
@@ -693,6 +693,9 @@ static int stm32f7_i2c_setup_timing(struct stm32f7_i2c_dev *i2c_dev,if (!of_property_read_bool (i2c_dev->dev->of_node,"i2c-digital-filter" )) i2c_dev->dnf_dt =STM32F7_I2C_DNF_DEFAULT ; + i2c_dev->analog_filter =of_property_read_bool (i2c_dev->dev->of_node, +"i2c-analog-filter" ); + do { ret = stm32f7_i2c_compute_timing(i2c_dev, setup, &i2c_dev->timing);
@@ -714,9 +717,6 @@ static int stm32f7_i2c_setup_timing(struct stm32f7_i2c_dev *i2c_dev,return ret; } - i2c_dev->analog_filter =of_property_read_bool (i2c_dev->dev->of_node, -"i2c-analog-filter" ); -dev_dbg (i2c_dev->dev,"I2C Speed(%i), Clk Source(%i)\n" , setup->speed_freq, setup->clock_src); dev_dbg(i2c_dev->dev, "I2C Rise(%i) and Fall(%i) Time\n",
drivers/i2c/busses/i2c-tegra.c +30 -23
83 lines not on this page · raw message
drivers/i2c/i2c-dev.c +5 -4
@@ -487,12 +487,13 @@ static long i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) client->adapter->retries = arg;break ;case I2C_TIMEOUT : -if (arg >INT_MAX ) +/* +* For historical reasons, user-space sets the timeout value in +* units of 10 ms. +*/ +if (arg >INT_MAX /10 )return -EINVAL ; -/* For historical reasons, user-space sets the timeout -* value in units of 10 ms. -*/ client->adapter->timeout =msecs_to_jiffies (arg *10 );break ;default :
drivers/infiniband/core/Makefile +1 -1
@@ -12,7 +12,7 @@ ib_core-y := packer.o ud_header.o verbs.o cq.o rw.o sysfs.o \ roce_gid_mgmt.o mr_pool.o addr.o sa_query.o \ multicast.o mad.o smi.o agent.o mad_rmpp.o \ nldev.o restrack.o counters.o ib_core_uverbs.o \ - trace.o lag.o + trace.o lag.o iter.o ib_core-$(CONFIG_SECURITY_INFINIBAND) += security.o ib_core-$(CONFIG_CGROUP_RDMA) += cgroup.o
drivers/infiniband/core/iter.c new file +43 -0
43 lines not on this page · raw message
drivers/infiniband/core/umem.c +16 -0
@@ -326,3 +326,19 @@ int ib_umem_copy_from(void *dst, struct ib_umem *umem, size_t offset,return 0 ; }EXPORT_SYMBOL (ib_umem_copy_from); + +/* +* Called during rereg mr if the driver is able to re-use a umem for +* IB_MR_REREG_ACCESS. +*/ +int ib_umem_check_rereg (struct ib_umem *umem,int flags,int new_access_flags) +{ +if (!umem) +return 0 ; + +if ((flags &IB_MR_REREG_ACCESS ) && !(flags &IB_MR_REREG_TRANS )) +if (ib_access_writable (new_access_flags) && !umem->writable) +return -EACCES ; +return 0 ; +} +EXPORT_SYMBOL (ib_umem_check_rereg);
drivers/infiniband/core/umem_dmabuf.c +59 -18
110 lines not on this page · raw message
drivers/infiniband/core/verbs.c +0 -38
@@ -3093,44 +3093,6 @@ int rdma_init_netdev(struct ib_device *device, u32 port_num, }EXPORT_SYMBOL (rdma_init_netdev); -void __rdma_block_iter_start (struct ib_block_iter *biter, -struct scatterlist *sglist,unsigned int nents, -unsigned long pgsz) -{ -memset (biter,0 ,sizeof (struct ib_block_iter )); - biter->__sg = sglist; - biter->__sg_nents = nents; - -/* Driver provides best block size to use */ - biter->__pg_bit =__fls (pgsz); -} -EXPORT_SYMBOL (__rdma_block_iter_start); - -bool __rdma_block_iter_next (struct ib_block_iter *biter) -{ -unsigned int block_offset; -unsigned int delta; - -if (!biter->__sg_nents || !biter->__sg) -return false; - - biter->__dma_addr =sg_dma_address (biter->__sg) + biter->__sg_advance; - block_offset = biter->__dma_addr & (BIT_ULL (biter->__pg_bit) -1 ); - delta =BIT_ULL (biter->__pg_bit) - block_offset; - -while (biter->__sg_nents && biter->__sg && -sg_dma_len (biter->__sg) - biter->__sg_advance <= delta) { - delta -=sg_dma_len (biter->__sg) - biter->__sg_advance; - biter->__sg_advance =0 ; - biter->__sg =sg_next (biter->__sg); - biter->__sg_nents--; - } - biter->__sg_advance += delta; - -return true; -} -EXPORT_SYMBOL (__rdma_block_iter_next); -/** * rdma_alloc_hw_stats_struct - Helper function to allocate dynamic struct * for the drivers.
drivers/infiniband/hw/bnxt_re/qplib_res.c +1 -1
@@ -46,7 +46,7 @@#include <linux/if_vlan.h> #include <linux/vmalloc.h> #include <rdma/ib_verbs.h> -#include <rdma/ib_umem.h> +#include <rdma/iter.h> #include "roce_hsi.h" #include "qplib_res.h"
drivers/infiniband/hw/cxgb4/mem.c +1 -1
@@ -32,9 +32,9 @@#include <linux/module.h> #include <linux/moduleparam.h> -#include <rdma/ib_umem.h> #include <linux/atomic.h> #include <rdma/ib_user_verbs.h> +#include <rdma/iter.h> #include "iw_cxgb4.h"
drivers/infiniband/hw/efa/efa_verbs.c +1 -1
@@ -9,9 +9,9 @@#include <linux/log2.h> #include <rdma/ib_addr.h> -#include <rdma/ib_umem.h> #include <rdma/ib_user_verbs.h> #include <rdma/ib_verbs.h> +#include <rdma/iter.h> #include <rdma/uverbs_ioctl.h> #define UVERBS_MODULE_NAME efa_ib#include <rdma/uverbs_named_ioctl.h>
drivers/infiniband/hw/erdma/erdma_verbs.c +1 -1
@@ -12,7 +12,7 @@#include <linux/vmalloc.h> #include <net/addrconf.h> #include <rdma/erdma-abi.h> -#include <rdma/ib_umem.h> +#include <rdma/iter.h> #include <rdma/uverbs_ioctl.h> #include "erdma.h"
drivers/infiniband/hw/hns/hns_roce_alloc.c +1 -1
@@ -32,7 +32,7 @@*/ #include <linux/vmalloc.h> -#include <rdma/ib_umem.h> +#include <rdma/iter.h> #include "hns_roce_device.h" void hns_roce_buf_free (struct hns_roce_dev *hr_dev,struct hns_roce_buf *buf)
drivers/infiniband/hw/hns/hns_roce_mr.c +4 -0
@@ -292,6 +292,10 @@ struct ib_mr *hns_roce_rereg_user_mr(struct ib_mr *ibmr, int flags, u64 start, goto err_out; } + ret =ib_umem_check_rereg (mr->pbl_mtr.umem, flags, mr_access_flags); +if (ret) + goto err_out; + mailbox =hns_roce_alloc_cmd_mailbox (hr_dev); ret =PTR_ERR_OR_ZERO (mailbox);if (ret)
drivers/infiniband/hw/irdma/main.h +1 -1
@@ -37,8 +37,8 @@#include <rdma/rdma_cm.h> #include <rdma/iw_cm.h> #include <rdma/ib_user_verbs.h> -#include <rdma/ib_umem.h> #include <rdma/ib_cache.h> +#include <rdma/iter.h> #include <rdma/uverbs_ioctl.h> #include "osdep.h" #include "defs.h"
drivers/infiniband/hw/irdma/verbs.c +4 -0
@@ -3245,6 +3245,10 @@ static struct ib_mr *irdma_rereg_user_mr(struct ib_mr *ib_mr, int flags,if (flags & ~(IB_MR_REREG_TRANS |IB_MR_REREG_PD |IB_MR_REREG_ACCESS ))return ERR_PTR (-EOPNOTSUPP ); + ret =ib_umem_check_rereg (iwmr->region, flags, new_access); +if (ret) +return ERR_PTR (ret); + ret =irdma_hwdereg_mr (ib_mr);if (ret)return ERR_PTR (ret);
drivers/infiniband/hw/mana/mana_ib.h +1 -1
@@ -8,7 +8,7 @@#include <rdma/ib_verbs.h> #include <rdma/ib_mad.h> -#include <rdma/ib_umem.h> +#include <rdma/iter.h> #include <rdma/mana-abi.h> #include <rdma/uverbs_ioctl.h>
drivers/infiniband/hw/mlx4/mr.c +5 -0
@@ -33,6 +33,7 @@#include <linux/slab.h> #include <rdma/ib_user_verbs.h> +#include <rdma/iter.h> #include "mlx4_ib.h"
@@ -466,6 +467,10 @@ struct ib_mr *mlx4_ib_rereg_user_mr(struct ib_mr *mr, int flags, u64 start,struct mlx4_mpt_entry **pmpt_entry = &mpt_entry;int err; + err =ib_umem_check_rereg (mmr->umem, flags, mr_access_flags); +if (err) +return ERR_PTR (err); +/* Since we synchronize this call and mlx4_ib_dereg_mr via uverbs, * we assume that the calls can't run concurrently. Otherwise, a * race exists.
drivers/infiniband/hw/mlx5/mem.c +1 -0
@@ -31,6 +31,7 @@*/ #include <rdma/ib_umem_odp.h> +#include <rdma/iter.h> #include "mlx5_ib.h" /*
drivers/infiniband/hw/mlx5/mr.c +4 -0
@@ -1829,6 +1829,10 @@ struct ib_mr *mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start,if (flags & ~(IB_MR_REREG_TRANS |IB_MR_REREG_PD |IB_MR_REREG_ACCESS ))return ERR_PTR (-EOPNOTSUPP ); + err =ib_umem_check_rereg (mr->umem, flags, new_access_flags); +if (err) +return ERR_PTR (err); +if (!(flags &IB_MR_REREG_ACCESS )) new_access_flags = mr->access_flags;if (!(flags &IB_MR_REREG_PD ))
drivers/infiniband/hw/mlx5/umr.c +1 -0
@@ -2,6 +2,7 @@/* Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. */ #include <rdma/ib_umem_odp.h> +#include <rdma/iter.h> #include "mlx5_ib.h" #include "umr.h" #include "wr.h"
drivers/infiniband/hw/mthca/mthca_provider.c +1 -1
@@ -35,8 +35,8 @@*/ #include <rdma/ib_smi.h> -#include <rdma/ib_umem.h> #include <rdma/ib_user_verbs.h> +#include <rdma/iter.h> #include <rdma/uverbs_ioctl.h> #include <linux/sched.h>
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +1 -1
@@ -45,9 +45,9 @@#include <rdma/ib_verbs.h> #include <rdma/ib_user_verbs.h> #include <rdma/iw_cm.h> -#include <rdma/ib_umem.h> #include <rdma/ib_addr.h> #include <rdma/ib_cache.h> +#include <rdma/iter.h> #include <rdma/uverbs_ioctl.h> #include "ocrdma.h"
drivers/infiniband/hw/qedr/verbs.c +1 -1
@@ -39,9 +39,9 @@#include <rdma/ib_verbs.h> #include <rdma/ib_user_verbs.h> #include <rdma/iw_cm.h> -#include <rdma/ib_umem.h> #include <rdma/ib_addr.h> #include <rdma/ib_cache.h> +#include <rdma/iter.h> #include <rdma/uverbs_ioctl.h> #include <linux/qed/common_hsi.h>
drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +1 -1
@@ -53,8 +53,8 @@#include <linux/pci.h> #include <linux/semaphore.h> #include <linux/workqueue.h> -#include <rdma/ib_umem.h> #include <rdma/ib_verbs.h> +#include <rdma/iter.h> #include <rdma/vmw_pvrdma-abi.h> #include "pvrdma_ring.h"
drivers/infiniband/sw/rxe/rxe_verbs.c +5 -0
@@ -1312,6 +1312,7 @@ static struct ib_mr *rxe_rereg_user_mr(struct ib_mr *ibmr, int flags,struct rxe_mr *mr =to_rmr (ibmr);struct rxe_pd *old_pd =to_rpd (ibmr->pd);struct rxe_pd *pd =to_rpd (ibpd); +int err;/* for now only support the two easy cases: * rereg_pd and rereg_access
@@ -1321,6 +1322,10 @@ static struct ib_mr *rxe_rereg_user_mr(struct ib_mr *ibmr, int flags,return ERR_PTR (-EOPNOTSUPP ); } + err =ib_umem_check_rereg (mr->umem, flags, access); +if (err) +return ERR_PTR (err); +if (flags &IB_MR_REREG_PD ) {rxe_put (old_pd);rxe_get (pd);
drivers/infiniband/ulp/isert/ib_isert.c +6 -0
@@ -1385,6 +1385,12 @@ isert_login_recv_done(struct ib_cq *cq, struct ib_wc *wc)ib_dma_sync_single_for_cpu (ib_dev, isert_conn->login_desc->dma_addr,ISER_RX_SIZE ,DMA_FROM_DEVICE ); +if (unlikely (wc->byte_len <ISER_HEADERS_LEN )) { +isert_dbg ("login request length %u is too short\n" , + wc->byte_len); +return ; + } + isert_conn->login_req_len = wc->byte_len -ISER_HEADERS_LEN ;if (isert_conn->conn) {
drivers/infiniband/ulp/srp/ib_srp.c +24 -6
@@ -1930,7 +1930,8 @@ static int srp_post_recv(struct srp_rdma_ch *ch, struct srp_iu *iu)return ib_post_recv (ch->qp, &wr,NULL ); } -static void srp_process_rsp (struct srp_rdma_ch *ch,struct srp_rsp *rsp) +static void srp_process_rsp (struct srp_rdma_ch *ch,struct srp_rsp *rsp, +u32 byte_len) {struct srp_target_port *target = ch->target;struct srp_request *req;
@@ -1971,10 +1972,27 @@ static void srp_process_rsp(struct srp_rdma_ch *ch, struct srp_rsp *rsp) scmnd->result = rsp->status;if (rsp->flags &SRP_RSP_FLAG_SNSVALID ) { -memcpy (scmnd->sense_buffer, rsp->data + -be32_to_cpu (rsp->resp_data_len), -min_t (int,be32_to_cpu (rsp->sense_data_len), -SCSI_SENSE_BUFFERSIZE )); +u32 resp_len =be32_to_cpu (rsp->resp_data_len); +u32 sense_len =be32_to_cpu (rsp->sense_data_len); + +/* +* The sense data starts resp_data_len bytes past the +* response data area; both lengths come from the +* target-controlled response. Copy the sense data +* only if it has not been truncated, that is, only if +* the full sense region fits within the bytes actually +* received. Otherwise the copy source would run past +* the receive buffer (sized to the target-chosen +* max_ti_iu_len), reading out of bounds. +*/ +if (sizeof (*rsp) + (u64 )resp_len + sense_len <= byte_len) +memcpy (scmnd->sense_buffer, + rsp->data + resp_len, +min (sense_len,SCSI_SENSE_BUFFERSIZE )); +else +shost_printk (KERN_ERR , target->scsi_host, +"dropping truncated sense data (resp_data_len %u sense_data_len %u, %u bytes received)\n" , + resp_len, sense_len, byte_len); }if (unlikely (rsp->flags &SRP_RSP_FLAG_DIUNDER ))
@@ -2084,7 +2102,7 @@ static void srp_recv_done(struct ib_cq *cq, struct ib_wc *wc)switch (opcode) {case SRP_RSP : -srp_process_rsp (ch, iu->buf); +srp_process_rsp (ch, iu->buf, wc->byte_len);break ;case SRP_CRED_REQ :
drivers/input/keyboard/atkbd.c +15 -0
@@ -1937,6 +1937,21 @@ static const struct dmi_system_id atkbd_dmi_quirk_table[] __initconst = { }, .callback = atkbd_deactivate_fixup, }, + { + /* Lenovo Yoga Air 14 (83QK) */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_NAME, "83QK"), + }, + .callback = atkbd_deactivate_fixup, + }, + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "HONOR"), + DMI_MATCH(DMI_PRODUCT_NAME, "BCC-N"), + }, + .callback = atkbd_deactivate_fixup, + }, { } };
drivers/mailbox/mailbox.c +8 -7
@@ -59,7 +59,7 @@ static void msg_submit(struct mbox_chan *chan)spin_lock_irqsave (&chan->lock, flags); -if (!chan->msg_count || chan->active_req) +if (!chan->msg_count || chan->active_req !=MBOX_NO_MSG ) goto exit; count = chan->msg_count;
@@ -97,13 +97,13 @@ static void tx_tick(struct mbox_chan *chan, int r)spin_lock_irqsave (&chan->lock, flags); mssg = chan->active_req; - chan->active_req =NULL ; + chan->active_req =MBOX_NO_MSG ;spin_unlock_irqrestore (&chan->lock, flags);/* Submit next message */ msg_submit (chan); -if (!mssg) +if (mssg ==MBOX_NO_MSG )return ;/* Notify the client */
@@ -125,7 +125,7 @@ static enum hrtimer_restart txdone_hrtimer(struct hrtimer *hrtimer)for (i =0 ; i < mbox->num_chans; i++) {struct mbox_chan *chan = &mbox->chans[i]; -if (chan->active_req && chan->cl) { +if (chan->active_req !=MBOX_NO_MSG && chan->cl) { txdone = chan->mbox->ops->last_tx_done (chan);if (txdone)tx_tick (chan,0 );
@@ -257,7 +257,7 @@ int mbox_send_message(struct mbox_chan *chan, void *mssg) {int t; -if (!chan || !chan->cl) +if (!chan || !chan->cl || mssg ==MBOX_NO_MSG )return -EINVAL ; t =add_to_rbuf (chan, mssg);
@@ -331,7 +331,7 @@ static int __mbox_bind_client(struct mbox_chan *chan, struct mbox_client *cl)spin_lock_irqsave (&chan->lock, flags); chan->msg_free =0 ; chan->msg_count =0 ; - chan->active_req =NULL ; + chan->active_req =MBOX_NO_MSG ; chan->cl = cl;init_completion (&chan->tx_complete);
@@ -492,7 +492,7 @@ void mbox_free_channel(struct mbox_chan *chan)/* The queued TX requests are simply aborted, no callbacks are made */ spin_lock_irqsave (&chan->lock, flags); chan->cl =NULL ; - chan->active_req =NULL ; + chan->active_req =MBOX_NO_MSG ;if (chan->txdone_method ==TXDONE_BY_ACK ) chan->txdone_method =TXDONE_BY_POLL ;
@@ -548,6 +548,7 @@ int mbox_controller_register(struct mbox_controller *mbox) chan->cl =NULL ; chan->mbox = mbox; + chan->active_req =MBOX_NO_MSG ; chan->txdone_method = txdone;spin_lock_init (&chan->lock); }
drivers/mailbox/tegra-hsp.c +1 -1
@@ -497,7 +497,7 @@ static int tegra_hsp_mailbox_flush(struct mbox_chan *chan,mbox_chan_txdone (chan,0 );/* Wait until channel is empty */ -if (chan->active_req !=NULL ) +if (chan->active_req !=MBOX_NO_MSG )continue ;return 0 ;
drivers/md/dm-cache-policy-smq.c +8 -4
@@ -1590,18 +1590,22 @@ static int smq_invalidate_mapping(struct dm_cache_policy *p, dm_cblock_t cblock)struct smq_policy *mq =to_smq_policy (p);struct entry *e =get_entry (&mq->cache_alloc,from_cblock (cblock));unsigned long flags; - -if (!e->allocated) -return -ENODATA ; +int r =0 ;spin_lock_irqsave (&mq->lock, flags); +if (!e->allocated) { + r = -ENODATA ; + goto out; + }// FIXME: what if this block has pending background work? del_queue (mq, e);h_remove (&mq->table, e);free_entry (&mq->cache_alloc, e); + +out:spin_unlock_irqrestore (&mq->lock, flags); -return 0 ; +return r; }static uint32_t smq_get_hint (struct dm_cache_policy *p,dm_cblock_t cblock)
drivers/misc/fastrpc.c +68 -39
215 lines not on this page · raw message
drivers/mmc/core/mmc.c +3 -1
@@ -1348,7 +1348,9 @@ static void mmc_select_driver_type(struct mmc_card *card) card->drive_strength = drive_strength; -if (drv_type) +if (fixed_drv_type >=0 && drive_strength) +mmc_set_driver_type (card->host, drive_strength); +else if (drv_type)mmc_set_driver_type (card->host, drv_type); }
drivers/mmc/host/dw_mmc-rockchip.c +17 -0
@@ -433,6 +433,22 @@ static int dw_mci_common_parse_dt(struct dw_mci *host)return 0 ; } +static int dw_mci_rk2928_parse_dt (struct dw_mci *host) +{ +struct dw_mci_rockchip_priv_data *priv; +int err; + + err =dw_mci_common_parse_dt (host); +if (err) +return err; + + priv = host->priv; + + priv->internal_phase = false; + +return 0 ; +} +static int dw_mci_rk3288_parse_dt (struct dw_mci *host) {struct dw_mci_rockchip_priv_data *priv;
@@ -506,6 +522,7 @@ static int dw_mci_rockchip_init(struct dw_mci *host)static const struct dw_mci_drv_data rk2928_drv_data = { .init = dw_mci_rockchip_init, + .parse_dt = dw_mci_rk2928_parse_dt, };static const struct dw_mci_drv_data rk3288_drv_data = {
drivers/mmc/host/litex_mmc.c +17 -3
@@ -16,6 +16,7 @@#include <linux/interrupt.h> #include <linux/iopoll.h> #include <linux/litex.h> +#include <linux/math.h> #include <linux/mod_devicetable.h> #include <linux/module.h> #include <linux/platform_device.h>
@@ -68,6 +69,9 @@#define SD_SLEEP_US 5#define SD_TIMEOUT_US 20000 +#define SD_INIT_DELAY_US 1000 +#define SD_INIT_CLK_HZ 400000 +#define SDIRQ_CARD_DETECT 1#define SDIRQ_SD_TO_MEM_DONE 2#define SDIRQ_MEM_TO_SD_DONE 4
@@ -436,11 +440,10 @@ static void litex_mmc_setclk(struct litex_mmc_host *host, unsigned int freq)struct device *dev =mmc_dev (host->mmc);u32 div; - div = freq ? host->ref_clk / freq :256U ; - div =roundup_pow_of_two (div); + div = freq ?DIV_ROUND_UP (host->ref_clk, freq) :256U ; div =clamp (div,2U ,256U );dev_dbg (dev,"sd_clk_freq=%d: set to %d via div=%d\n" , - freq, host->ref_clk / div, div); + freq, host->ref_clk / ((div +1 ) & ~1U ), div);litex_write16 (host->sdphy +LITEX_PHY_CLOCKERDIV , div); host->sd_clk = freq; }
@@ -449,6 +452,17 @@ static void litex_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) {struct litex_mmc_host *host =mmc_priv (mmc); +/* +* The SD specification requires at least 74 idle clocks before CMD0. +* These dummy cycles is generated by writing LITEX_PHY_INITIALIZE. +*/ +if (ios->chip_select ==MMC_CS_HIGH ) { +litex_mmc_setclk (host,SD_INIT_CLK_HZ ); +litex_write8 (host->sdphy +LITEX_PHY_INITIALIZE ,1 ); +fsleep (SD_INIT_DELAY_US ); +return ; + } +/* * NOTE: Ignore any ios->bus_width updates; they occur right after * the mmc core sends its own acmd6 bus-width change notification,
drivers/mmc/host/renesas_sdhi_internal_dmac.c +1 -0
@@ -278,6 +278,7 @@ static const struct renesas_sdhi_of_data_with_quirks of_rza2_compatible = {static const struct of_device_id renesas_sdhi_internal_dmac_of_match[] = { { .compatible ="renesas,sdhi-r7s9210" , .data = &of_rza2_compatible, }, { .compatible ="renesas,sdhi-mmc-r8a77470" , .data = &of_rcar_gen3_compatible, }, + { .compatible ="renesas,sdhi-r8a774e1" , .data = &of_r8a7795_compatible, }, { .compatible ="renesas,sdhi-r8a7795" , .data = &of_r8a7795_compatible, }, { .compatible ="renesas,sdhi-r8a77961" , .data = &of_r8a77961_compatible, }, { .compatible ="renesas,sdhi-r8a77965" , .data = &of_r8a77965_compatible, },
drivers/mmc/host/sdhci.c +1 -0
@@ -3782,6 +3782,7 @@ int sdhci_resume_host(struct sdhci_host *host) host->pwr =0 ; host->clock =0 ; host->reinit_uhs = true; + mmc->ops->start_signal_voltage_switch (mmc, &mmc->ios); mmc->ops->set_ios (mmc, &mmc->ios); }else {sdhci_init (host, (mmc->pm_flags &MMC_PM_KEEP_POWER ));
drivers/net/bonding/bond_main.c +2 -2
@@ -4673,11 +4673,11 @@ static int bond_do_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cmd slave_dev =__dev_get_by_name (net, ifr->ifr_slave); -slave_dbg (bond_dev, slave_dev,"slave_dev=%p:\n" , slave_dev); -if (!slave_dev)return -ENODEV ; +slave_dbg (bond_dev, slave_dev,"slave_dev=%p:\n" , slave_dev); +switch (cmd) {case SIOCBONDENSLAVE : res =bond_enslave (bond_dev, slave_dev,NULL );
drivers/net/ethernet/amd/pcnet32.c +3 -1
@@ -1403,8 +1403,10 @@ static int pcnet32_poll(struct napi_struct *napi, int budget)pcnet32_restart (dev,CSR0_START );netif_wake_queue (dev); } +spin_unlock_irqrestore (&lp->lock, flags);if (work_done < budget &&napi_complete_done (napi, work_done)) { +spin_lock_irqsave (&lp->lock, flags);/* clear interrupt masks */ val = lp->a->read_csr (ioaddr,CSR3 ); val &=0x00ff ;
@@ -1412,9 +1414,9 @@ static int pcnet32_poll(struct napi_struct *napi, int budget)/* Set interrupt enable. */ lp->a->write_csr (ioaddr,CSR0 ,CSR0_INTEN ); +spin_unlock_irqrestore (&lp->lock, flags); } -spin_unlock_irqrestore (&lp->lock, flags);return work_done; }
drivers/net/ethernet/broadcom/bnxt/bnxt.c +1 -1
@@ -5419,7 +5419,7 @@ static void bnxt_disable_int_sync(struct bnxt *bp) {int i; -if (!bp->irq_tbl) +if (!bp->irq_tbl || !bp->bnapi)return ;atomic_inc (&bp->intr_sem);
drivers/net/ethernet/freescale/fec_main.c +1 -2
@@ -4731,6 +4731,7 @@ static int fec_resume(struct device *dev)if (fep->rpm_active)pm_runtime_force_resume (dev); +pinctrl_pm_select_default_state (&fep->pdev->dev); ret =fec_enet_clk_enable (ndev, true);if (ret) {rtnl_unlock ();
@@ -4747,8 +4748,6 @@ static int fec_resume(struct device *dev) val &= ~(FEC_ECR_MAGICEN |FEC_ECR_SLEEP );writel (val, fep->hwp +FEC_ECNTRL ); fep->wol_flag &= ~FEC_WOL_FLAG_SLEEP_ON ; - }else { -pinctrl_pm_select_default_state (&fep->pdev->dev); }fec_restart (ndev);netif_tx_lock_bh (ndev);
drivers/net/ethernet/ibm/emac/core.c +8 -1
@@ -3147,7 +3147,7 @@ static int emac_probe(struct platform_device *ofdev)netif_carrier_off (ndev); - err =devm_register_netdev (&ofdev->dev, ndev); + err =register_netdev (ndev);if (err) {printk (KERN_ERR "%pOF: failed to register net device (%d)!\n" , np, err);
@@ -3200,6 +3200,13 @@ static void emac_remove(struct platform_device *ofdev)DBG (dev,"remove" NL ); +/* Unregister network device before tearing down hardware +* to prevent use-after-free during deferred cleanup. This ensures +* the network stack stops all operations before hardware resources +* are released. +*/ +unregister_netdev (dev->ndev); +cancel_work_sync (&dev->reset_work);if (emac_has_feature (dev,EMAC_FTR_HAS_TAH ))
drivers/net/ethernet/marvell/mv643xx_eth.c +1 -1
@@ -2784,7 +2784,7 @@ static int mv643xx_eth_shared_of_add_port(struct platform_device *pdev, goto put_err; } ppdev->dev.coherent_dma_mask =DMA_BIT_MASK (32 ); - ppdev->dev.of_node = pnp; + ppdev->dev.of_node =of_node_get (pnp); ret =platform_device_add_resources (ppdev, &res,1 );if (ret)
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +47 -28
21 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/af/rvu.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c +18 -18
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mediatek/mtk_eth_soc.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx4/cq.c +8 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c +8 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +3 -10
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/irq_affinity.c +4 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/vport.c +54 -18
72 lines not on this page · raw message
drivers/net/ethernet/microchip/lan743x_main.c +32 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/microchip/lan743x_main.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/realtek/rtase/rtase_main.c +5 -2
Lines of this file are not shown. View the raw message.
drivers/slimbus/qcom-ngd-ctrl.c +77 -45
122 lines not on this page · raw message
drivers/tee/optee/supp.c +74 -33
107 lines not on this page · raw message
fs/fs-writeback.c +65 -36
101 lines not on this page · raw message
include/net/netfilter/nf_conntrack_core.h +5 -0
Lines of this file are not shown. View the raw message.
include/net/netfilter/nf_conntrack_helper.h +1 -0
Lines of this file are not shown. View the raw message.
include/net/secure_seq.h +38 -7
45 lines not on this page · raw message
include/rdma/ib_umem.h +16 -32
48 lines not on this page · raw message
include/rdma/ib_verbs.h +0 -48
48 lines not on this page · raw message
include/rdma/iter.h new file +88 -0
88 lines not on this page · raw message
mm/hugetlb.c +39 -31
70 lines not on this page · raw message
net/bluetooth/bnep/core.c +36 -14
50 lines not on this page · raw message
net/bluetooth/iso.c +52 -19
71 lines not on this page · raw message
net/bluetooth/l2cap_core.c +46 -0
46 lines not on this page · raw message
net/bluetooth/rfcomm/core.c +49 -18
67 lines not on this page · raw message
net/core/secure_seq.c +29 -51
80 lines not on this page · raw message
net/ipv4/tcp.c +22 -22
44 lines not on this page · raw message
net/ipv4/tcp_ipv4.c +40 -44
84 lines not on this page · raw message
net/l2tp/l2tp_ppp.c +50 -32
82 lines not on this page · raw message
net/mptcp/options.c +32 -41
73 lines not on this page · raw message
net/netfilter/ipset/ip_set_bitmap_ipmac.c +3 -2
Lines of this file are not shown. View the raw message.
net/netfilter/ipset/ip_set_hash_ipmac.c +5 -4
Lines of this file are not shown. View the raw message.
net/netfilter/nfnetlink_queue.c +56 -8
64 lines not on this page · raw message
net/sched/act_pedit.c +51 -46
97 lines not on this page · raw message
net/vmw_vsock/virtio_transport_common.c +10 -1
Lines of this file are not shown. View the raw message.
security/integrity/ima/ima_kexec.c +32 -14
46 lines not on this page · raw message
tools/testing/selftests/ftrace/test.d/dynevent/eprobes_syntax_errors.tc +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_join.sh +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/ptp/testptp.c +5 -57
62 lines not on this page · 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.