Linux 6.12.103
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.12.103 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/dev-tools/kmemleak.rst | 1 Documentation/hwmon/ina2xx.rst | 67 Makefile | 2 arch/powerpc/boot/simpleboot.c | 2 arch/powerpc/boot/treeboot-akebono.c | 2 arch/powerpc/boot/treeboot-currituck.c | 2 arch/powerpc/platforms/ps3/mm.c | 1 arch/riscv/mm/init.c | 4 arch/s390/kvm/pci.c | 28 arch/s390/pci/pci_mmio.c | 1 arch/um/drivers/chan_user.c | 2 arch/um/drivers/ubd_kern.c | 1 arch/um/drivers/vector_kern.c | 3 arch/um/include/shared/os.h | 2 arch/um/os-Linux/process.c | 6 arch/um/os-Linux/sigio.c | 1 arch/um/os-Linux/signal.c | 3 arch/um/os-Linux/skas/process.c | 3 arch/x86/kvm/svm/avic.c | 8 drivers/accel/qaic/qaic_control.c | 2 drivers/ata/ahci.h | 17 drivers/ata/ahci_brcm.c | 3 drivers/ata/ahci_ceva.c | 24 drivers/ata/libahci.c | 1 drivers/ata/libahci_platform.c | 38 drivers/ata/libata-eh.c | 8 drivers/ata/libata-sata.c | 2 drivers/ata/sata_mv.c | 2 drivers/block/ublk_drv.c | 9 drivers/bluetooth/btintel.c | 3 drivers/bluetooth/btmtk.c | 50 drivers/bluetooth/btusb.c | 30 drivers/cpufreq/powernow-k8.c | 1 drivers/dma/idxd/cdev.c | 4 drivers/dma/sun6i-dma.c | 11 drivers/gpio/gpio-pca953x.c | 15 drivers/gpio/gpio-pch.c | 28 drivers/gpio/gpio-sloppy-logic-analyzer.c | 10 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 12 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 71 - drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 15 drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 11 drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | 30 drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 11 drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 22 drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 40 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 8 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c | 4 drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c | 4 drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c | 12 drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 6 drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | 6 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 10 drivers/gpu/drm/amd/amdkfd/kfd_events.c | 23 drivers/gpu/drm/amd/amdkfd/kfd_migrate.c | 3 drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_queue.c | 2 drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c | 20 drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c | 16 drivers/gpu/drm/armada/armada_fbdev.c | 12 drivers/gpu/drm/display/drm_dp_helper.c | 12 drivers/gpu/drm/drm_exec.c | 6 drivers/gpu/drm/drm_fb_helper.c | 41 drivers/gpu/drm/drm_fbdev_dma.c | 12 drivers/gpu/drm/drm_fbdev_shmem.c | 12 drivers/gpu/drm/drm_fbdev_ttm.c | 12 drivers/gpu/drm/drm_gpuvm.c | 3 drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 2 drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 9 drivers/gpu/drm/gma500/fbdev.c | 13 drivers/gpu/drm/i915/display/intel_fbdev.c | 9 drivers/gpu/drm/i915/display/intel_hdcp.c | 699 +++++----- drivers/gpu/drm/i915/display/intel_hdcp_gsc.c | 9 drivers/gpu/drm/i915/display/intel_hdcp_gsc.h | 5 drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h | 3 drivers/gpu/drm/i915/display/intel_vrr.c | 10 drivers/gpu/drm/imagination/pvr_job.c | 2 drivers/gpu/drm/imagination/pvr_queue.c | 5 drivers/gpu/drm/imagination/pvr_queue.h | 2 drivers/gpu/drm/lima/lima_gem.c | 2 drivers/gpu/drm/lima/lima_sched.c | 6 drivers/gpu/drm/lima/lima_sched.h | 3 drivers/gpu/drm/mediatek/mtk_crtc.c | 6 drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c | 7 drivers/gpu/drm/msm/msm_fbdev.c | 9 drivers/gpu/drm/msm/msm_gem_submit.c | 8 drivers/gpu/drm/nouveau/nouveau_sched.c | 3 drivers/gpu/drm/omapdrm/omap_fbdev.c | 9 drivers/gpu/drm/panfrost/panfrost_drv.c | 2 drivers/gpu/drm/panthor/panthor_drv.c | 3 drivers/gpu/drm/panthor/panthor_fw.c | 47 drivers/gpu/drm/panthor/panthor_mmu.c | 2 drivers/gpu/drm/panthor/panthor_sched.c | 5 drivers/gpu/drm/panthor/panthor_sched.h | 3 drivers/gpu/drm/radeon/radeon_fbdev.c | 13 drivers/gpu/drm/scheduler/sched_fence.c | 4 drivers/gpu/drm/scheduler/sched_main.c | 7 drivers/gpu/drm/tegra/fbdev.c | 18 drivers/gpu/drm/v3d/v3d_submit.c | 2 drivers/gpu/drm/vc4/vc4_irq.c | 2 drivers/gpu/drm/vc4/vc4_validate.c | 29 drivers/gpu/drm/vmwgfx/ttm_object.c | 7 drivers/gpu/drm/vmwgfx/vmwgfx_blit.c | 39 drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 20 drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 4 drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | 13 drivers/gpu/drm/vmwgfx/vmwgfx_vkms.c | 17 drivers/gpu/drm/xe/Makefile | 1 drivers/gpu/drm/xe/display/xe_hdcp_gsc.c | 7 drivers/gpu/drm/xe/xe_bo.c | 33 drivers/gpu/drm/xe/xe_bo.h | 10 drivers/gpu/drm/xe/xe_bo_types.h | 2 drivers/gpu/drm/xe/xe_dma_buf.c | 6 drivers/gpu/drm/xe/xe_exec.c | 22 drivers/gpu/drm/xe/xe_gt.c | 4 drivers/gpu/drm/xe/xe_gt_debugfs.c | 4 drivers/gpu/drm/xe/xe_gt_printk.h | 31 drivers/gpu/drm/xe/xe_hw_engine.c | 3 drivers/gpu/drm/xe/xe_hw_engine_types.h | 8 drivers/gpu/drm/xe/xe_oa.c | 7 drivers/gpu/drm/xe/xe_oa_types.h | 3 drivers/gpu/drm/xe/xe_pagefault.c | 65 drivers/gpu/drm/xe/xe_pagefault.h | 19 drivers/gpu/drm/xe/xe_pagefault_types.h | 136 + drivers/gpu/drm/xe/xe_pt.c | 3 drivers/gpu/drm/xe/xe_reg_sr.c | 53 drivers/gpu/drm/xe/xe_reg_whitelist.c | 147 +- drivers/gpu/drm/xe/xe_reg_whitelist.h | 4 drivers/gpu/drm/xe/xe_sched_job.c | 3 drivers/gpu/drm/xe/xe_vm.c | 3 drivers/hid/hid-logitech-dj.c | 28 drivers/hv/vmbus_drv.c | 13 drivers/hwmon/Kconfig | 5 drivers/hwmon/adt7470.c | 129 + drivers/hwmon/ina2xx.c | 251 +++ drivers/hwmon/lm90.c | 4 drivers/hwmon/ltc4282.c | 4 drivers/hwmon/nct6775-core.c | 20 drivers/hwmon/npcm750-pwm-fan.c | 11 drivers/hwmon/nzxt-smart2.c | 2 drivers/hwmon/pmbus/pmbus_core.c | 7 drivers/hwmon/sht3x.c | 9 drivers/i2c/busses/i2c-amd-mp2-plat.c | 4 drivers/i2c/busses/i2c-bcm-iproc.c | 11 drivers/i2c/busses/i2c-imx.c | 9 drivers/i2c/busses/i2c-jz4780.c | 5 drivers/iommu/iova.c | 6 drivers/media/i2c/imx219.c | 31 drivers/media/platform/chips-media/wave5/wave5-hw.c | 3 drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c | 5 drivers/media/platform/chips-media/wave5/wave5-vpuapi.h | 1 drivers/net/can/c_can/c_can_main.c | 8 drivers/net/can/ctucanfd/ctucanfd_base.c | 14 drivers/net/can/ctucanfd/ctucanfd_pci.c | 3 drivers/net/can/dev/skb.c | 2 drivers/net/can/softing/softing_fw.c | 46 drivers/net/can/usb/ems_usb.c | 43 drivers/net/can/usb/etas_es58x/es58x_core.c | 1 drivers/net/can/usb/gs_usb.c | 4 drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c | 1 drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c | 13 drivers/net/can/usb/peak_usb/pcan_usb_core.c | 1 drivers/net/can/usb/peak_usb/pcan_usb_fd.c | 40 drivers/net/can/usb/peak_usb/pcan_usb_pro.c | 20 drivers/net/dsa/mt7530-mdio.c | 11 drivers/net/dsa/mt7530.c | 58 drivers/net/ethernet/airoha/airoha_eth.c | 2 drivers/net/ethernet/intel/e1000/e1000_main.c | 2 drivers/net/ethernet/intel/ice/ice_ethtool.c | 10 drivers/net/ethernet/intel/ice/ice_main.c | 10 drivers/net/ethernet/intel/idpf/idpf_lib.c | 2 drivers/net/ethernet/intel/idpf/idpf_txrx.c | 5 drivers/net/ethernet/intel/idpf/idpf_txrx.h | 2 drivers/net/ethernet/intel/igbvf/netdev.c | 2 drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 2 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 58 drivers/net/ethernet/mediatek/mtk_eth_soc.h | 7 drivers/net/ethernet/nvidia/forcedeth.c | 4 drivers/net/ethernet/qlogic/qede/qede_main.c | 44 drivers/net/ethernet/realtek/rtase/rtase_main.c | 3 drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | 14 drivers/net/ethernet/wangxun/libwx/wx_lib.c | 2 drivers/net/netconsole.c | 3 drivers/net/phy/phylink.c | 29 drivers/net/veth.c | 4 drivers/net/vxlan/vxlan_core.c | 15 drivers/net/wireless/ath/ath6kl/txrx.c | 2 drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 16 drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 6 drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c | 4 drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 46 drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 6 drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 14 drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h | 1 drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 3 drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h | 2 drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c | 2 drivers/of/of_reserved_mem.c | 87 + drivers/phy/xilinx/phy-zynqmp.c | 130 + drivers/pinctrl/Kconfig | 2 drivers/pinctrl/devicetree.c | 4 drivers/pinctrl/pinctrl-amd.c | 3 drivers/pinctrl/qcom/pinctrl-msm.c | 8 drivers/pinctrl/qcom/pinctrl-sc8280xp.c | 21 drivers/power/supply/bq25890_charger.c | 2 drivers/power/supply/max17040_battery.c | 6 drivers/s390/block/dasd_eckd.c | 11 drivers/s390/block/dasd_ioctl.c | 2 drivers/s390/crypto/zcrypt_api.c | 2 drivers/s390/crypto/zcrypt_ccamisc.c | 6 drivers/s390/net/qeth_core_main.c | 3 drivers/s390/scsi/zfcp_aux.c | 1 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 10 drivers/scsi/libiscsi.c | 2 drivers/scsi/libiscsi_tcp.c | 8 drivers/scsi/libsas/sas_init.c | 37 drivers/scsi/scsi_debug.c | 8 drivers/spi/spi-cadence.c | 129 + drivers/spi/spi-qcom-qspi.c | 3 drivers/target/target_core_iblock.c | 6 drivers/target/target_core_transport.c | 12 drivers/thunderbolt/xdomain.c | 40 drivers/ufs/core/ufshcd.c | 6 drivers/usb/gadget/function/f_tcm.c | 192 ++ drivers/usb/gadget/function/tcm.h | 13 drivers/usb/typec/ucsi/ucsi.c | 90 - drivers/usb/typec/ucsi/ucsi.h | 1 fs/binfmt_misc.c | 8 fs/btrfs/super.c | 8 fs/btrfs/zoned.c | 6 fs/erofs/Kconfig | 14 fs/erofs/decompressor_lzma.c | 3 fs/proc/task_mmu.c | 33 fs/smb/client/cifssmb.c | 12 fs/smb/server/vfs_cache.c | 6 include/drm/drm_exec.h | 20 include/drm/drm_fb_helper.h | 12 include/drm/gpu_scheduler.h | 12 include/linux/alloc_tag.h | 3 include/linux/can/core.h | 1 include/linux/can/skb.h | 2 include/linux/dma/qcom_bam_dma.h | 21 include/linux/kmemleak.h | 4 include/linux/libata.h | 2 include/linux/mmc/sdio_ids.h | 2 include/linux/netfilter/nf_conntrack_sip.h | 2 include/linux/slab.h | 8 include/linux/thunderbolt.h | 3 include/linux/trace_events.h | 4 include/net/ip_vs.h | 45 include/net/neighbour.h | 8 include/net/netfilter/nf_conntrack_expect.h | 5 include/net/netfilter/nf_tables.h | 4 include/scsi/libsas.h | 1 include/trace/events/rxrpc.h | 14 include/uapi/linux/rkisp1-config.h | 6 kernel/audit.c | 11 kernel/auditfilter.c | 6 kernel/bpf/verifier.c | 1 kernel/sched/cpufreq_schedutil.c | 11 kernel/sched/deadline.c | 3 kernel/trace/trace.c | 44 kernel/trace/trace.h | 4 kernel/trace/trace_branch.c | 4 kernel/trace/trace_events.c | 6 kernel/trace/trace_events_filter.c | 3 kernel/trace/trace_functions_graph.c | 8 kernel/trace/trace_hwlat.c | 4 kernel/trace/trace_mmiotrace.c | 33 kernel/trace/trace_osnoise.c | 12 kernel/trace/trace_probe.c | 6 kernel/trace/trace_sched_wakeup.c | 8 lib/alloc_tag.c | 9 lib/assoc_array.c | 3 lib/rhashtable.c | 1 lib/test_fortify/Makefile | 1 lib/win_minmax.c | 1 mm/huge_memory.c | 16 mm/hugetlb.c | 12 mm/kmemleak.c | 44 mm/memcontrol-v1.h | 6 mm/migrate_device.c | 5 mm/mm_init.c | 15 mm/page_reporting.c | 6 mm/percpu-km.c | 2 mm/slab.h | 28 mm/slab_common.c | 13 mm/slub.c | 34 net/bluetooth/hci_conn.c | 14 net/bluetooth/hci_sync.c | 137 + net/bluetooth/hidp/core.c | 30 net/bluetooth/iso.c | 113 + net/bluetooth/l2cap_core.c | 5 net/bluetooth/mgmt.c | 84 - net/bridge/br_mrp.c | 2 net/bridge/br_multicast.c | 1 net/bridge/br_netfilter_hooks.c | 6 net/can/af_can.c | 14 net/can/bcm.c | 2 net/can/isotp.c | 333 +++- net/can/j1939/bus.c | 2 net/can/j1939/j1939-priv.h | 3 net/can/j1939/main.c | 8 net/can/j1939/socket.c | 1 net/can/j1939/transport.c | 6 net/can/raw.c | 7 net/core/lwt_bpf.c | 4 net/core/skbuff.c | 18 net/ipv4/route.c | 2 net/ipv4/udp_tunnel_nic.c | 32 net/ipv6/fib6_rules.c | 1 net/ipv6/ip6_output.c | 2 net/ipv6/ndisc.c | 2 net/mac80211/s1g.c | 4 net/mpls/af_mpls.c | 1 net/mptcp/pm.c | 9 net/mptcp/pm_netlink.c | 29 net/mptcp/pm_userspace.c | 89 - net/mptcp/protocol.h | 6 net/netfilter/ipset/ip_set_hash_gen.h | 2 net/netfilter/ipvs/ip_vs_app.c | 4 net/netfilter/ipvs/ip_vs_conn.c | 3 net/netfilter/ipvs/ip_vs_core.c | 180 +- net/netfilter/ipvs/ip_vs_proto_sctp.c | 19 net/netfilter/ipvs/ip_vs_proto_tcp.c | 48 net/netfilter/ipvs/ip_vs_proto_udp.c | 54 net/netfilter/ipvs/ip_vs_xmit.c | 42 net/netfilter/nf_conntrack_broadcast.c | 1 net/netfilter/nf_conntrack_core.c | 7 net/netfilter/nf_conntrack_expect.c | 1 net/netfilter/nf_conntrack_h323_main.c | 12 net/netfilter/nf_conntrack_helper.c | 5 net/netfilter/nf_conntrack_netlink.c | 18 net/netfilter/nf_conntrack_sip.c | 4 net/netfilter/nf_nat_sip.c | 2 net/netfilter/nf_tables_api.c | 34 net/netfilter/nft_payload.c | 12 net/netfilter/xt_hashlimit.c | 16 net/openvswitch/actions.c | 12 net/openvswitch/meter.c | 33 net/rds/ib.c | 4 net/rds/ib_cm.c | 4 net/rds/tcp.c | 14 net/rxrpc/ar-internal.h | 38 net/rxrpc/call_accept.c | 1 net/rxrpc/call_event.c | 19 net/rxrpc/call_object.c | 2 net/rxrpc/input.c | 12 net/rxrpc/output.c | 14 net/rxrpc/peer_object.c | 20 net/rxrpc/proc.c | 6 net/rxrpc/rtt.c | 103 - net/rxrpc/sendmsg.c | 2 net/sctp/associola.c | 3 net/sctp/sm_make_chunk.c | 17 net/smc/smc_core.c | 2 net/tipc/socket.c | 2 security/keys/keyring.c | 14 security/keys/trusted-keys/trusted_dcp.c | 15 sound/core/pcm_native.c | 7 sound/core/seq/seq_timer.c | 9 sound/core/timer.c | 2 sound/core/ump.c | 1 sound/pci/hda/patch_hdmi.c | 48 sound/pci/lx6464es/lx6464es.c | 5 sound/pci/lx6464es/lx_core.c | 5 sound/soc/codecs/max98090.c | 5 sound/soc/codecs/max98095.c | 5 sound/soc/codecs/tas2562.c | 30 sound/usb/6fire/chip.c | 4 sound/usb/endpoint.c | 14 sound/usb/midi.c | 2 sound/usb/midi2.c | 4 sound/usb/mixer_quirks.c | 2 tools/testing/kunit/kunit_kernel.py | 39 tools/testing/kunit/kunit_tool_test.py | 42 tools/testing/selftests/clone3/clone3_set_tid.c | 2 tools/testing/selftests/mm/mlock-random-test.c | 2 387 files changed, 4747 insertions(+), 2364 deletions(-)
Aaron Ma (1):
ice: wait for reset completion in ice_resume()
Abdun Nihaal (3):
gpio: sloppy-logic-analyzer: Fix memory leak in gpio_la_poll_probe()
cpufreq: powernow-k8: Fix possible memory leak in powernowk8_cpu_init()
can: kvaser_usb: kvaser_usb_hydra_get_busparams(): fix memory leak in kvaser_usb_hydra_get_busparams()
Alexander Kaplan (1):
drm/dp: Read the PCON max FRL bandwidth only for HDMI DFPs
Andrei Kuchynski (2):
usb: typec: ucsi: Fix race condition and ordering in port unregistration
usb: typec: ucsi: Correct teardown ordering in ucsi_init() error path
Asad Kamal (1):
drm/amdgpu/gfx: fix cleaner shader IB buffer overflow
Ashutosh Dixit (10):
drm/xe/rtp: Refactor OAG MMIO trigger register whitelisting drm/xe/rtp: Add RING_FORCE_TO_NONPRIV_DENY to OA whitelists drm/xe/rtp: Maintain OA whitelists separately drm/xe/rtp: Keep track of non-OA nonpriv slots drm/xe/rtp: Generalize whitelist_apply_to_hwe drm/xe/rtp: Save OA nonpriv registers to register save/restore lists drm/xe/rtp: Toggle 'deny' bit to (de-)whitelist OA regs drm/xe/rtp: (De-)whitelist OA registers for all hwe's for a gt drm/xe/oa: (De-)whitelist OA registers on OA stream open/release drm/xe/rtp: Ensure locking/ref counting for OA whitelists
Asim Viladi Oglu Manizada (1):
sctp: prevent peer transport count overflow
Aswin Karuvally (1):
s390/qeth: Check CAP_NET_ADMIN for private ioctls
Avi Weiss (4):
can: ctucanfd: use self-test mode for PRESUME_ACK
can: ctucanfd: unmap BAR0 using base address
can: ctucanfd: handle bus error interrupts
can: ctucanfd: mark error-active controller status valid
Bart Van Assche (1):
drm/fb-helper: Fix a locking bug in an error path
Baul Lee (4):
ALSA: ump: fix double free of out_cvts on rawmidi error
ALSA: usb-audio: fix use-after-free in ump_to_endpoint()
ALSA: usb-audio: fix stack info leak in RME Digiface status
ALSA: usb-audio: fix OOB write in snd_usbmidi_akai_output()
Benjamin Berg (2):
um: Set parent death signal for winch thread/process
um: Set parent death signal for userspace process
Benjamin Block (1):
scsi: zfcp: Fix memory leak during adapter release by destroying gid_pn_req
Benjamin Boortz (2):
pinctrl: microchip-sgpio: add missing select REGMAP_MMIO
pinctrl: bm1880: add missing select GENERIC_PINCONF
Benjamin Tissoires (1):
HID: logitech-dj: fix wrong detection of bad DJ_SHORT output report
Breno Leitao (2):
mm: memcg: initialize *locked in memcg1_oom_prepare() stub mm/kmemleak: fix checksum computation for per-cpu objects
Candice Li (1):
drm/amdgpu: restore UMD profile pstate after runtime resume
Catalin Marinas (1):
kmemleak: iommu/iova: fix transient kmemleak false positive
Cen Zhang (1):
usb: gadget: f_tcm: synchronize delayed set_alt with teardown
Cen Zhang (Microsoft) (1):
rhashtable: clear stale iter->p on table restart
Charles Vosburgh (1):
sctp: validate Adaptation Indication parameter length
Chengfeng Ye (1):
Bluetooth: hci_sync: Fix advertising data UAFs
Chenguang Zhao (4):
forcedeth: fix UAF of txrx_stats in nv_remove
net: ethernet: mtk_eth_soc: pass eth to mtk_handle_irq_rx in poll_controller
net: sxgbe: free TX rings on RX allocation failure
net: sxgbe: check descriptor ring allocation failures
Chris Gellermann (2):
selftests/mm: fix potential wild pointer access of getline due to missing init selftests/clone3: fix wild pointer access of getline due to missing init
Christian Brauner (2):
binfmt_misc: reject a flag character as the field delimiter
binfmt_misc: don't let an 'F' entry pin its own instance
Christian Marangi (1):
net: phylink: put link_gpio if phylink_create fails
Damien Le Moal (2):
ahci: Introduce ahci_ignore_port() helper
ata: libahci_platform: Do not set mask_port_map when not needed
Daniel Golle (2):
net: dsa: mt7530: check bus->read() errors in the MDIO regmap backend
net: dsa: mt7530: error out on failed reads in MT7531 PHY polling
Daniel Hodges (1):
wifi: ath6kl: fix use-after-free in aggr_reset_state()
David Corvaglia (1):
net: bridge: mrp: fix Option TLV length in MRP_Test frames
David Francis (1):
drm/amdkfd: Handle invalid event type in CRIU event restore
David Gow (1):
kunit: tool: Terminate kernel under test on SIGINT
David Howells (5):
rxrpc: Generate rtt_min
rxrpc: Adjust the rxrpc_rtt_rx tracepoint
rxrpc: Fix the calculation and use of RTO
rxrpc: Manage RTT per-call rather than per-peer
rxrpc: Fix irq-disabled in local_bh_enable()
David Lee (1):
netfilter: ipset: do not update comments from kernel-side hash adds
Dawei Feng (3):
smb: client: fix buffer leaks in SMB1 read and write
e1000: fix memory leak in e1000_probe()
ice: fix memory leak in ice_lbtest_prepare_rings()
Denis V. Lunev (1):
qede: sync udp_tunnel ports outside qede_lock in the recovery path
Eric Dumazet (6):
net: do not send ICMP/NDISC Redirects when peer allocation fails
net: udp_tunnel: fix memory leak in udp_tunnel_nic_unregister()
vxlan: re-fetch eth header after route_shortcircuit()
vxlan: unclone skb head before modifying eth header in route_shortcircuit()
vxlan: use neigh_ha_snapshot() in route_shortcircuit()
vxlan: use pskb_network_may_pull() in route_shortcircuit()
Fabrice Derepas (1):
KEYS: trusted: dcp: fix key_len validation and calc_blob_len() return type
Fan Wu (1):
wifi: brcmfmac: drain bus_reset work on device removal
Farhan Ali (3):
KVM: s390: pci: Reject adapter interrupt forwarding if already enabled
KVM: s390: pci: Fix NULL dereference on AIBV allocation failure
KVM: s390: pci: Validate AIBV and AISB before pinning guest pages
Frank Wunderlich (2):
net: ethernet: mtk_eth_soc: support named IRQs
net: ethernet: mtk_eth_soc: add consts for irq index
Gabriele Monaco (1):
sched/deadline: Use revised wakeup rule only for running dl_server
Gang Ba (1):
drm/amdkfd: Fix missing authorization check in KFD_IOC_DBG_TRAP_DISABLE
Geliang Tang (4):
mptcp: pm: avoid code duplication to lookup endp
mptcp: add mptcp_userspace_pm_lookup_addr helper
mptcp: pm: use addr entry for get_local_id
mptcp: pm: userspace: fix use-after-free in get_local_id
Gokul Sivakumar (1):
wifi: brcmfmac: fix 43752 SDIO FWVID incorrectly labelled as Cypress (CYW)
Greg Kroah-Hartman (3):
Bluetooth: btusb: Fix short read errors in btusb_qca_send_vendor_req()
Bluetooth: btmtk: Fix short read errors in btmtk_usb_uhw_reg_read() Linux 6.12.103
Gregory Price (1):
mm/vmstat: fold stranded per-cpu node stats when a node comes online
Guangshuo Li (2):
scsi: ufs: core: Cancel RTC work in active-active suspend
can: etas_es58x: es58x_read_bulk_callback(): fix RX buffer leak on URB resubmit failure
Guenter Roeck (10):
hwmon: (nct6775-core) Fix number of temperature registers for NCT6116
hwmon: (ina2xx) Add support for has_alerts configuration flag
hwmon: (ina2xx) Add support for INA260
hwmon: (ina2xx) Fix various overflow issues
hwmon: (ltc4282) Fix reading the minimum alarm voltage
hwmon: (sht3x) Fix unaligned accesses
hwmon: (lm90) Only report alarms if driver is ready
hwmon: (nzxt-smart2) DMA-align output buffer
hwmon: (nct6775-core) Prevent access to unsupported weight registers
hwmon: (pmbus) Fix return value from pmbus_update_byte_data()
H. Nikolaus Schaller (1):
i2c: jz4780: Cache host clock rate at probe to prevent CCF prepare_lock deadlock
Haidar Lee (2):
ASoC: tas2562: fix DVC coefficient write order
ASoC: tas2562: fix broken entries in the volume lookup table
Harald Freudenberger (1):
s390/zcrypt: Fix wrong domain value verification with EP11 CPRBs
Harkirat Gill (1):
drm/amdgpu: cap GTT size to physical RAM on APUs
Harry Yoo (Oracle) (2):
lib/alloc_tag: introduce mem_alloc_profiling_permanently_disabled() mm/slab: prevent unbounded recursion in free path with new kmalloc type
Holger Dengler (2):
s390/zcrypt: Validate length for CCA AES cipher key requests s390/zcrypt: Validate length for CCA ECC private key requests
Hongling Zeng (1):
dmaengine: sun6i-dma: Fix reclaim descriptors while terminating DMA
Hongyan Xu (1):
hwmon: (npcm750-pwm-fan): stop fan timer on device detach
HyeongJun An (3):
scsi: libiscsi: Fix stale-data leak into the SCSI sense buffer
scsi: libiscsi_tcp: Bound SCSI Response data segment to the connection buffer
HID: logitech-dj: Fix maxfield check in DJ short report validation
Ian Ray (2):
hwmon: (ina2xx) Make it easier to add more devices
hwmon: (ina2xx) Add support for INA234
Ibrahim Hashimov (1):
scsi: scsi_debug: Fix REPORT ZONES alloc_len underflow OOB write
Ilia Gavrilov (1):
rds: Fix inet6_addr_lst NULL dereference when IPv6 is disabled
Ilya Maximets (3):
net: openvswitch: fix potential UAF on meter attach failure
net: openvswitch: fix skb leak on flow key update failure during recirculation
net: openvswitch: fix skb leak on flow key update failure during ct
Jackson Lee (1):
media: chips-media: wave5: Support CBP profile
Jai Luthra (1):
media: i2c: imx219: Rename VTS to FRM_LENGTH
Jakub Kicinski (1):
netconsole: avoid OOB reads, msg is not nul-terminated
James Gao (1):
can: peak_usb: add bounds check for USB channel index
Jan Höppner (1):
s390/dasd: Fix potential NULL pointer dereference
Jani Nikula (3):
drm/i915/vrr: require valid min/max vfreq for VRR drm/i915/hdcp: require monotonically increasing seq_num_v drm/i915/hdcp: check streams[] bounds before overflow
Jiale Yao (1):
Bluetooth: L2CAP: fix UAF in l2cap_le_connect_rsp
Jianing Li (1):
power: supply: max17040: handle missing status supplier
Jiawen Wu (1):
net: libwx: fix FDIR ATR queue mismatch for software VLAN packets
Jiri Slaby (SUSE) (1):
drm/amd/display: use proper context for logging
Johannes Thumshirn (1):
btrfs: zoned: fix deadlock between metadata writeback and transaction commit
Jonas Gorski (1):
i2c: iproc: reset bus after timeout if START_BUSY is stuck
Jonas Rebmann (1):
hwmon: (ina2xx) Shift INA234 shunt and current registers
Jose Maria Casanova Crespo (1):
drm/vc4: Supply the overflow slot size in BPOS, not the whole bin BO size
Joshua Hay (1):
idpf: adjust TxQ ring count minimum
Josua Mayer (1):
ata: libahci_platform: support non-consecutive port numbers
Julian Anastasov (3):
ipvs: fix the checksum validations
ipvs: fix places with wrong packet offsets
ipvs: do not mangle ICMP replies for non-first fragments
Jun Guo (2):
spi: spi-cadence: supports transmission with bits_per_word of 16 and 32
spi: spi-cadence: enable SPI_CONTROLLER_MUST_TX
Junjie Cao (1):
gpio: pch: use raw_spinlock_t for the register lock
Kai Vehmanen (1):
ALSA: hda: codecs: hdmi: disable keep-alive before audio format change
Karl Mehltretter (2):
riscv: mm: Fix out-of-bounds page-table walk during memory hot-remove
pinctrl: devicetree: don't free uninitialized dev_name on error path
Kefeng Wang (1):
mm: migrate_device: fix pte_pfn/pte_dirty called on non-present PTE
Kiryl Shutsemau (Meta) (4):
fs/proc/task_mmu: fix PAGEMAP_SCAN written state for PMD holes mm/hugetlb: fix swap entry corruption when clearing uffd-wp at fork() fs/proc/task_mmu: fix PAGEMAP_SCAN written state for unpopulated ptes mm/huge_memory: unlock i_mmap_rwsem before releasing after-split folios
Konrad Dybcio (1):
pinctrl: qcom: sc8280xp: Add missing wakeup entries for GPIO143/151
Lee Jones (2):
HID: logitech-dj: Standardise hid_report_enum variable nomenclature
HID: logitech-dj: Prevent REPORT_ID_DJ_SHORT related user initiated OOB write
Leon Romanovsky (1):
scsi: target: Clear cmd_cnt when initial counter enrollment fails
LiangCheng Wang (1):
wifi: brcmfmac: set F2 blocksize to 256 for BCM43752
Liem (2):
i2c: imx: Fix slave registration race and error handling
i2c: imx: Cancel hrtimer before clearing slave pointer
Link Lin (1):
mm/page_reporting: use system_freezable_wq to fix UAF during suspend
Lorenzo Bianconi (1):
netfilter: br_netfilter: Reallocate headroom if necessary in neigh_hh_bridge()
Lucas De Marchi (1):
drm/xe: Apply whitelist to engine save-restore
Lucas Martins Alves (1):
can: c_can: c_can_chip_config(): keep controller in init mode until bittiming is configured
Luiz Angelo Daros de Luca (8):
hwmon: (adt7470) Fix fans stuck in manual mode on I2C errors
hwmon: (adt7470) Fix cache updated before hardware write on I2C error
hwmon: (adt7470) Fix busy-loop and I2C flooding in update thread
hwmon: (adt7470) Fix temperature alarm logic in hwmon_temp_read()
hwmon: (adt7470) Fix swapped PWM3 and PWM4 auto mode masks
hwmon: (adt7470) Use cached PWM frequency value
hwmon: (adt7470) Fix divide-by-zero TOCTOU crash in fan speed read
hwmon: (adt7470) Fix PWM auto temp state array and bounds check
Luxiao Xu (1):
audit: fix potential use-after-free in audit_del_rule()
Maoyi Xie (1):
can: peak_usb: peak_usb_start(): fix double free of transfer buffer on URB submit error
Marc Kleine-Budde (1):
can: gs_usb: gs_usb_receive_bulk_callback(): resubmit URB on skb allocation failure
Mario Limonciello (1):
pinctrl-amd: Don't clear S4 wake bits at probe
Masami Hiramatsu (Google) (4):
tracing/mmiotrace: Reset dropped_count in mmio_reset_data() tracing/mmiotrace: Add NULL check for mmio_trace_array in logging functions
tracing: Check return value of __register_event() in trace_module_add_events() tracing/filters: Fix false positive match in regex_match_full()
Matt Fleming (1):
veth: convert frag_list skbs before running XDP
Matt Vollrath (2):
ata: libata-eh: Increase STANDBY IMMEDIATE timeout
igbvf: Fix leak in TX DMA error cleanup
Matthew Brost (2):
drm/xe: Wait on external BO kernel fences in exec IOCTL drm/xe: Stub out new pagefault layer
Maíra Canal (1):
drm/vc4: Zero the tile state data array before each BIN job
Md Sadre Alam (1):
dmaengine: qcom: bam_dma: Fix command element mask field for BAM v1.6.0+
Michael Bommarito (6):
thunderbolt: Prevent XDomain delayed work use-after-free on disconnect
keys: fix out-of-bounds read in keyring_get_key_chunk()
keys: make keyring key-chunk byte order agree with keyring_diff_objects()
assoc_array: trim the final shortcut word using the current chunk end
erofs: cap LZMA stream pool size
um: vector: fix use-after-free in vector_mmsg_rx()
Michal Wajdeczko (1):
drm/xe: Introduce xe_gt_dbg_printer()
Mike Looijmans (1):
phy-zynqmp: Postpone getting clock rate until actually needed
Ming Lei (1):
ublk: reset kernel-owned dev_info fields in ublk_ctrl_add_dev()
Minhong He (1):
can: isotp: check register_netdevice_notifier() error in module init
Muhammad Bilal (1):
accel/qaic: use sizeof(*trans_hdr) for transaction length check
Myeonghun Pak (2):
i2c: amd-mp2: Unregister callback on adapter add failure drm/mediatek: ovl_adaptor: balance component registrations
Namjae Jeon (2):
ksmbd: return success for deferred final close
ksmbd: fix use-after-free in __close_file_table_ids()
Nathan Chancellor (1):
fortify: Disable -Wstringop-overread in tests
Nava kishore Manne (3):
phy: zynqmp: fix L0_TM_DISABLE_SCRAMBLE_ENCODER mask
phy: zynqmp: use read-modify-write for SERDES scrambler bypass
phy: zynqmp: keep SERDES scrambler and 8b/10b enabled for USB
Niklas Cassel (2):
ata: libata-sata: fix ata_scsi_lpm_supported() iteration
ata: ahci: Make ahci_ignore_port() handle empty mask_port_map
Niklas Schnelle (1):
s390/pci: Fix s390_pci_mmio_write syscall error return without MIO
Niklas Söderlund (1):
media: uapi: rkisp: Correct name version enum
Nitin Gote (1):
drm/xe: Hold a dma-buf reference for imported BOs
Norbert Szetei (3):
ALSA: pcm: wake linked drain waiters on unlink
ALSA: seq: Fix division by zero in initialize_timer()
ALSA: timer: Clear SNDRV_TIMER_IFLG_DEAD once the close completes
Oleksij Rempel (1):
can: j1939: transport: j1939_session_fresh_new(): initialize receive buffer
Oliver Hartkopp (2):
can: use skb hash instead of private variable in headroom
can: isotp: fix timer drain order, wakeup handling and tx_gen ordering
Oreoluwa Babatunde (1):
of: reserved_mem: Add code to dynamically allocate reserved_mem array
Osama Abdelkader (2):
drm/panthor: reject firmware sections with oversized data drm/panthor: validate firmware interface structure sizes
Pablo Neira Ayuso (3):
netfilter: nf_conntrack_expect: restore helper propagation via expectation
netfilter: nf_tables: make nft_object rhltable per table
netfilter: xt_hashlimit: validate hashtable supports XT_HASHLIMIT_RATE_MATCH
Pauli Virtanen (9):
Bluetooth: ISO: clear iso_data always when detaching conn from hcon
Bluetooth: ISO: fix timeout vs sync_timeout typo in check_bcast_qos
Bluetooth: ISO: validate sockaddr_iso first in iso_sock_rebind_bis()
Bluetooth: ISO: fix leaking sk after socket release
Bluetooth: ISO: avoid deadlocks in iso_sock_timeout
Bluetooth: hci_sync: make hci_cmd_sync_run_once return -EEXIST if exists
Bluetooth: hci_conn: hold conn reference in abort_conn_sync()
Bluetooth: hci_sync: fix hci_conn_del() use in hci_le_create_conn_sync
Bluetooth: ISO: fix CONNECTED -> CLOSED transition on shutdown/release
Pengpeng Hou (5):
can: ems_usb: validate CPC message lengths
can: kvaser_usb_leaf: kvaser_usb_leaf_wait_cmd(): validate received command extents
can: softing: fw_parse(): validate firmware record spans
can: peak_usb: validate uCAN receive record lengths
can: ctucanfd: add missing MODULE_DEVICE_TABLE()
Pierre-Eric Pelloux-Prayer (2):
drm/sched: Store the drm client_id in drm_sched_fence drm/amdgpu: give each kernel job a unique id
Qu Wenruo (1):
btrfs: fix leaking BTRFS_FS_STATE_REMOUNTING flag
Radhey Shyam Pandey (3):
ata: ahci_ceva: fix error paths in ceva_ahci_platform_enable_resources()
phy: zynqmp: fix clock error handling in xpsgtr_phy_init()
phy: zynqmp: fix runtime PM leak on probe allocation failure
Raushan Patel (1):
tracing/probes: Reject $arg0 in meta argument expansion
Ray Wu (1):
drm/amd/display: Increase HDMI AV mute wait from 2 to 3 frames
Rosen Penev (1):
ata: sata_mv: accept 1 or 2 resources in platform probe
Ruoyu Wang (1):
drm/mediatek: Check CRTC state before freeing
Sakari Ailus (1):
media: imx219: Fix maximum frame length in lines
Sang-Heon Jeon (1):
of: reserved_mem: prevent OOB when too many dynamic regions are defined
Sangho Lee (2):
Bluetooth: HIDP: reject frames without a transaction header
Bluetooth: HIDP: validate numbered report payloads
Sean Christopherson (1):
KVM: SVM: Update x2APIC MSR intercepts if AVIC is inhibited while L2 is active
Sebastian Andrzej Siewior (1):
Drivers: hv: vmbus: Replace lockdep_hardirq_threaded() with lockdep annotation
Sergey Senozhatsky (1):
usb: typec: ucsi: split connector lock classes
Shuvam Pandey (1):
kunit: tool: skip stty when stdin is not a tty
Sneh Mankad (1):
pinctrl: qcom: Unconditionally mark gpio as wakeup enable
Sonali Pradhan (2):
ALSA: usb-audio: Fix DMA buffer out-of-bounds write when fill_max is set
ALSA: usb-audio: Clamp frame size in implicit-feedback mode
Srikanth Boyapally (1):
spi: spi-cadence: Move TX FIFO full busy-wait into FIFO
Stefan Haberland (1):
s390/dasd: Fix undersized format-check buffer
Steven Rostedt (1):
tracing/mmiotrace: Remove reference to unused per CPU data pointer
Suman Ghosh (1):
octeontx2-pf: Set correct sequence for carrier off and tx queue stop
Suraj Kandpal (2):
drm/i915/hdcp: Move to using intel_display in intel_hdcp drm/i915/hdcp: Skip inactive MST connectors when building stream list
Takashi Iwai (1):
ALSA: 6fire: Fix UAF at error handling during probe
TanZheng (1):
scsi: target: iblock: Fix wrong PR ops NULL check for PREEMPT/RELEASE
Tetsuo Handa (1):
can: j1939: use netdevice_tracker for j1939_{priv,session,ecu} tracking
Thomas Hellström (2):
drm/exec: Remove the index parameter from drm_exec_for_each_locked_obj[_reverse] drm/xe: Rename ___xe_bo_create_locked()
Thomas Zimmermann (3):
drm/fb-helper: Allocate and release fb_info in single place drm/tegra: fbdev: Remove offset into framebuffer memory drm/tegra: fbdev: Do not assign to struct drm_fb_helper.info
Thorsten Blum (4):
powerpc/boot: Fix simpleboot CPU node lookup check powerpc/boot: Fix treeboot-currituck CPU node lookup check powerpc/boot: Fix treeboot-akebono CPU node lookup check powerpc/ps3: Fix map failure path in dma_ioc0_map_pages()
Timur Kristóf (1):
drm/amdgpu: Respect placement requirements in amdgpu_gtt_mgr functions
Tiwei Bie (5):
um: Add os_set_pdeathsig helper function
um: Use os_set_pdeathsig helper in winch thread/process
um: Set parent-death signal for ubd io thread/process
um: Set parent-death signal for write_sigio thread/process
um: Preserve errno within signal handler
Tristan Madani (1):
bpf: Reset register bounds before narrowing retval range in check_mem_access()
Tvrtko Ursulin (1):
drm/amdgpu: Fix context pstate override handling
Uday Khare (2):
ASoC: max98095: fix missing IS_ERR() before PTR_ERR() on mclk lookup
ASoC: max98090: fix missing IS_ERR() before PTR_ERR() on mclk lookup
Vijaya Krishna Nivarthi (1):
spi: qcom-qspi: Correct max DMA length to avoid 64K boundary failure
Ville Syrjälä (1):
drm/i915/vrr: Check HAS_VRR() first in intel_vrr_is_capable()
Vincent Jardin (1):
hwmon: (pmbus/core) notify on the hwmon device, not the i2c client
Vladimir Marioukhine (1):
drm/amdkfd: fix QID bit leak in pqm_create_queue()
Wandun Chen (1):
of: reserved_mem: avoid post-init UAF when alloc_reserved_mem_array() fails
Wayen.Yan (1):
net: airoha: Fix register index for Tx-fwd counter configuration
Wenliang Yan (1):
hwmon: (ina226) Add support for SY24655
William Palacek (2):
drm/amdkfd: fix uint32_t overflow in EOP ring buffer size alignment drm/amdkfd: hold event_mutex while checkpointing CRIU events
Xiang Mei (2):
netfilter: nf_conntrack_sip: widen NAT rewrite delta to s32 in sip_help_tcp()
rds: tcp: hold the RCU lock across ipv6_chk_addr() in rds_tcp_laddr_check()
Xiang Mei (Microsoft) (1):
netfilter: nft_payload: fix mask build for partial field offload
Xiangfeng Cai (1):
mm/hugetlb: fix list corruption in allocate_file_region_entries()
Xingui Yang (1):
scsi: libsas: Fix HA resume deadlock and hisi_sas disk-wake race
Xu Rao (2):
ALSA: lx6464es: fix period byte count for 16-bit streams
power: supply: bq25890: fix the -10 C NTC lookup entry
Xuanqiang Luo (2):
bpf: lwt: Fix dst reference leak on reroute failure net/smc: fix socket use-after-free during link group termination
Yehyeong Lee (1):
net: mpls: initialize rtm_tos in mpls_getroute()
Yuho Choi (2):
dmaengine: idxd: fix fdev setup failure cleanup in idxd_cdev_open()
idpf: Fix mailbox IRQ name leak on request failure
Yun Lu (1):
rtase: fix double free of multi-frag skb on DMA map failure
Yuxiang Yang (1):
sctp: reject stale cookies with mismatched verification tags
Zack Rusin (8):
drm/vmwgfx: fix guest_memory_dirty bitfield clobbered as size drm/vmwgfx: reject DX_BIND_QUERY without a DX context drm/vmwgfx: drop dma_buf reference on foreign-fd prime import drm/vmwgfx: validate DRAW_PRIMITIVES header size before division drm/vmwgfx: bound DMA command body size against suffix pointer drm/vmwgfx: avoid destroy_workqueue(NULL) on vkms init failure drm/vmwgfx: use check_add_overflow for shader size+offset bound drm/vmwgfx: validate external BO copy bounds for both stride paths
Zhan Xusheng (1):
audit: fix potential integer overflow in audit_log_n_string()
Zhao Li (2):
wifi: mac80211: validate individual TWT params before driver setup
wifi: mwifiex: use the subframe length when parsing A-MSDU TDLS frames
Zheng Yejian (1):
tracing: Remove TRACE_EVENT_FL_FILTERED logic
Zhiling Zou (3):
ipvs: do not propagate one-packet flag to synced conns
net: bridge: stop fast-leave after deleting a port group
net: ipv6: clear suppressed fib6 rule result
Zhongqiu Han (1):
cpufreq: schedutil: Publish util hooks only after all sg_cpu are initialized
Zi Yan (1):
mm/percpu-km: fix bitmap overflow and accounting in pcpu_create_chunk()
Zihan Xi (3):
Bluetooth: mgmt: fix pending command UAF in EIR updates
Bluetooth: mgmt: fix UAF in pair command cancellation
tipc: avoid use-after-free in poll trace queue dumps
Zijun Hu (1):
Bluetooth: btintel: Validate length before parsing diagnostics TLV
Zongyao Bai (1):
drm/xe/pt: Reset current_op in xe_pt_update_ops_init()
bui duc phuc (1):
gpio: pca953x: fix cache_only and IRQ state on restore_context() failure
Greg Kroah-Hartman
maintainerDocumentation/dev-tools/kmemleak.rst +1 -0
@@ -161,6 +161,7 @@ See the include/linux/kmemleak.h header for the functions prototype. - ``kmemleak_free_percpu`` - notify of a percpu memory block freeing - ``kmemleak_update_trace`` - update object allocation stack trace - ``kmemleak_not_leak`` - mark an object as not a leak +- ``kmemleak_transient_leak`` - mark an object as a transient leak - ``kmemleak_ignore`` - do not scan or report an object as leak - ``kmemleak_scan_area`` - add scan areas inside a memory block - ``kmemleak_no_scan`` - do not scan a memory block
Documentation/hwmon/ina2xx.rst +61 -6
99 lines not on this page · raw message
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 12 -SUBLEVEL = 102 +SUBLEVEL = 103 EXTRAVERSION = NAME = Baby Opossum Posse
arch/powerpc/boot/simpleboot.c +1 -1
@@ -68,7 +68,7 @@ void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,/* finally, setup the timebase */ node =fdt_node_offset_by_prop_value (_dtb_start,-1 ,"device_type" ,"cpu" ,sizeof ("cpu" )); -if (!node) +if (node <0 )fatal ("Cannot find cpu node\n" ); timebase =fdt_getprop (_dtb_start, node,"timebase-frequency" , &size);if (timebase && (size ==4 ))
arch/powerpc/boot/treeboot-akebono.c +1 -1
@@ -146,7 +146,7 @@ void platform_init(char *userdata) node =fdt_node_offset_by_prop_value (_dtb_start,-1 ,"device_type" ,"cpu" ,sizeof ("cpu" )); -if (!node) +if (node <0 )fatal ("Cannot find cpu node\n" ); timebase =fdt_getprop (_dtb_start, node,"timebase-frequency" , &size);if (timebase && (size ==4 ))
arch/powerpc/boot/treeboot-currituck.c +1 -1
@@ -102,7 +102,7 @@ void platform_init(void) node =fdt_node_offset_by_prop_value (_dtb_start,-1 ,"device_type" ,"cpu" ,sizeof ("cpu" )); -if (!node) +if (node <0 )fatal ("Cannot find cpu node\n" ); timebase =fdt_getprop (_dtb_start, node,"timebase-frequency" , &size);if (timebase && (size ==4 ))
arch/powerpc/platforms/ps3/mm.c +1 -0
@@ -615,6 +615,7 @@ static int dma_ioc0_map_pages(struct ps3_dma_region *r, unsigned long phys_addr, fail_map:for (iopage--;0 <= iopage; iopage--) { + offset = (1 << r->page_size) * iopage; lv1_put_iopte(0, c->bus_addr + offset, c->lpar_addr + offset,
arch/riscv/mm/init.c +2 -2
@@ -1726,7 +1726,7 @@ static void __meminit remove_pud_mapping(pud_t *pud_base, unsigned long addr, unfor (; addr < end; addr = next) { next =pud_addr_end (addr, end); - pudp = pud_base +pud_index (addr); + pudp = pgtable_l4_enabled ? pud_base +pud_index (addr) : pud_base; pud =pudp_get (pudp);if (!pud_present (pud))continue ;
@@ -1757,7 +1757,7 @@ static void __meminit remove_p4d_mapping(p4d_t *p4d_base, unsigned long addr, unfor (; addr < end; addr = next) { next =p4d_addr_end (addr, end); - p4dp = p4d_base +p4d_index (addr); + p4dp = pgtable_l5_enabled ? p4d_base +p4d_index (addr) : p4d_base; p4d =p4dp_get (p4dp);if (!p4d_present (p4d))continue ;
arch/s390/kvm/pci.c +27 -1
@@ -225,7 +225,7 @@ static int kvm_s390_pci_aif_enable(struct zpci_dev *zdev, struct zpci_fib *fib, bool assist) {struct page *pages[1 ], *aibv_page, *aisb_page =NULL ; -unsigned int msi_vecs, idx; +unsigned int msi_vecs, idx, size;struct zpci_gaite *gaite;unsigned long hva, bit;struct kvm *kvm;
@@ -239,6 +239,10 @@ static int kvm_s390_pci_aif_enable(struct zpci_dev *zdev, struct zpci_fib *fib,if (zdev->gisa ==0 )return -EINVAL ; +/* AIF already enabled for the device */ +if (zdev->kzdev->fib.fmt0.aibv !=0 ) +return -EINVAL ; + kvm = zdev->kzdev->kvm; msi_vecs = min_t(unsigned int, fib->fmt0.noi, zdev->max_msi);
@@ -248,6 +252,14 @@ static int kvm_s390_pci_aif_enable(struct zpci_dev *zdev, struct zpci_fib *fib,return gisc;/* Replace AIBV address */ + size =BITS_TO_LONGS (msi_vecs + fib->fmt0.aibvo) *sizeof (unsigned long ); + npages =DIV_ROUND_UP ((fib->fmt0.aibv & ~PAGE_MASK ) + size,PAGE_SIZE ); +/* AIBV cannot span more than 1 page */ +if (npages >1 ) { + rc = -EINVAL ; + goto out; + } + idx =srcu_read_lock (&kvm->srcu); hva =gfn_to_hva (kvm,gpa_to_gfn ((gpa_t )fib->fmt0.aibv)); npages =pin_user_pages_fast (hva,1 ,FOLL_WRITE |FOLL_LONGTERM , pages);
@@ -263,6 +275,12 @@ static int kvm_s390_pci_aif_enable(struct zpci_dev *zdev, struct zpci_fib *fib,/* Pin the guest AISB if one was specified */ if (fib->fmt0.sum ==1 ) { +/* AISB must be dword aligned */ +if (fib->fmt0.aisb &0x7 ) { + rc = -EINVAL ; + goto unpin1; + } + idx =srcu_read_lock (&kvm->srcu); hva =gfn_to_hva (kvm,gpa_to_gfn ((gpa_t )fib->fmt0.aisb)); npages = pin_user_pages_fast(hva, 1, FOLL_WRITE | FOLL_LONGTERM,
@@ -291,6 +309,11 @@ static int kvm_s390_pci_aif_enable(struct zpci_dev *zdev, struct zpci_fib *fib,AIRQ_IV_GUESTVEC , phys_to_virt(fib->fmt0.aibv)); +if (!zdev->aibv) { + rc = -ENOMEM ; + goto free_aisb; + } +spin_lock_irq (&aift->gait_lock); gaite = aift->gait + zdev->aisb;
@@ -327,6 +350,9 @@ static int kvm_s390_pci_aif_enable(struct zpci_dev *zdev, struct zpci_fib *fib, rc =kvm_zpci_set_airq (zdev);return rc; +free_aisb: +airq_iv_free_bit (aift->sbv, zdev->aisb); + zdev->aisb =0 ; unlock:mutex_unlock (&aift->aift_lock); unpin2:
arch/s390/pci/pci_mmio.c +1 -0
@@ -178,6 +178,7 @@ SYSCALL_DEFINE3(s390_pci_mmio_write, unsigned long, mmio_addr, goto out_unlock_mmap; } + ret = -EFAULT ; io_addr = (void __iomem *)((args.pfn <<PAGE_SHIFT ) | (mmio_addr & ~PAGE_MASK ));
arch/um/drivers/chan_user.c +2 -0
@@ -161,6 +161,8 @@ static __noreturn int winch_thread(void *arg)int count;char c =1 ; +os_set_pdeathsig (); + pty_fd = data->pty_fd; pipe_fd = data->pipe_fd; count =write (pipe_fd, &c,sizeof (c));
arch/um/drivers/ubd_kern.c +1 -0
@@ -1501,6 +1501,7 @@ int io_thread(void *arg) {int n, count, written, res; +os_set_pdeathsig ();os_fix_helper_signals ();while (1 ){
arch/um/drivers/vector_kern.c +3 -0
@@ -999,6 +999,9 @@ static int vector_mmsg_rx(struct vector_private *vp, int budget)*/ dev_kfree_skb_irq (skb); vp->estats.rx_encaps_errors++; + (*skbuff_vector) =NULL ; + mmsg_vector++; + skbuff_vector++;continue ; }if (header_check >0 ) {
arch/um/include/shared/os.h +2 -0
@@ -219,6 +219,8 @@ extern int os_unmap_memory(void *addr, int len);extern int os_drop_memory (void *addr,int length);extern int can_drop_memory (void ); +void os_set_pdeathsig (void ); +/* execvp.c */ extern int execvp_noalloc (char *buf,const char *file,char *const argv[]);/* helper.c */
arch/um/os-Linux/process.c +6 -0
@@ -12,6 +12,7 @@#include <fcntl.h> #include <sys/mman.h> #include <sys/ptrace.h> +#include <sys/prctl.h> #include <sys/wait.h> #include <asm/unistd.h> #include <init.h>
@@ -234,3 +235,8 @@ void init_new_thread_signals(void)set_handler (SIGIO );signal (SIGWINCH ,SIG_IGN ); } + +void os_set_pdeathsig (void ) +{ +prctl (PR_SET_PDEATHSIG ,SIGKILL ); +}
arch/um/os-Linux/sigio.c +1 -0
@@ -55,6 +55,7 @@ static int write_sigio_thread(void *unused)int i, n, respond_fd;char c; +os_set_pdeathsig ();os_fix_helper_signals (); fds = ¤t_poll;while (1 ) {
arch/um/os-Linux/signal.c +3 -0
@@ -190,6 +190,7 @@ static void hard_handler(int sig, siginfo_t *si, void *p) {ucontext_t *uc = p;mcontext_t *mc = &uc->uc_mcontext; +int save_errno = errno;unsigned long pending =1UL << sig; do {
@@ -227,6 +228,8 @@ static void hard_handler(int sig, siginfo_t *si, void *p)if (!nested) pending =from_irq_stack (nested); }while (pending); + + errno = save_errno; }void set_handler (int sig)
arch/um/os-Linux/skas/process.c +3 -0
@@ -214,6 +214,9 @@ static int userspace_tramp(void *stack) (unsigned long ) stub_segv_handler - (unsigned long ) __syscall_stub_start; +/* Make sure this process dies if the kernel dies */ +os_set_pdeathsig (); +ptrace (PTRACE_TRACEME ,0 ,0 ,0 );signal (SIGTERM ,SIG_DFL );
arch/x86/kvm/svm/avic.c +0 -8
@@ -167,14 +167,6 @@ static void avic_deactivate_vmcb(struct vcpu_svm *svm)if (!sev_es_guest (svm->vcpu.kvm))svm_set_intercept (svm,INTERCEPT_CR8_WRITE ); -/* -* If running nested and the guest uses its own MSR bitmap, there -* is no need to update L0's msr bitmap -*/ -if (is_guest_mode (&svm->vcpu) && -vmcb12_is_intercept (&svm->nested.ctl,INTERCEPT_MSR_PROT )) -return ; -/* Enabling MSR intercept for x2APIC registers */ svm_set_x2apic_msr_interception (svm, true); }
drivers/accel/qaic/qaic_control.c +1 -1
@@ -782,7 +782,7 @@ static int encode_message(struct qaic_device *qdev, struct manage_msg *user_msg,break ; } trans_hdr = (struct qaic_manage_trans_hdr *)(user_msg->data + user_len); -if (trans_hdr->len <sizeof (trans_hdr) || +if (trans_hdr->len <sizeof (*trans_hdr) ||size_add (user_len, trans_hdr->len) > user_msg->len) { ret = -EINVAL ;break ;
drivers/ata/ahci.h +16 -1
@@ -329,7 +329,7 @@ struct ahci_port_priv {struct ahci_host_priv {/* Input fields */ unsigned int flags;/* AHCI_HFLAG_* */ -u32 mask_port_map;/* mask out particular bits */ +u32 mask_port_map;/* Mask of valid ports */ void __iomem * mmio;/* bus-independent mem map */ u32 cap;/* cap to use */
@@ -380,6 +380,21 @@ struct ahci_host_priv { int port); }; +/* +* Return true if a port should be ignored because it is excluded from +* the host port map. +*/ +static inline bool ahci_ignore_port (struct ahci_host_priv *hpriv, +unsigned int portid) +{ +if (portid >= hpriv->nports) +return true; +/* mask_port_map not set means that all ports are available */ +if (!hpriv->mask_port_map) +return false; +return !(hpriv->mask_port_map & (1 << portid)); +} +extern int ahci_ignore_sss;extern const struct attribute_group *ahci_shost_groups[];
drivers/ata/ahci_brcm.c +3 -0
@@ -288,6 +288,9 @@ static unsigned int brcm_ahci_read_id(struct ata_device *dev,/* Re-initialize and calibrate the PHY */ for (i =0 ; i < hpriv->nports; i++) { +if (ahci_ignore_port (hpriv, i)) +continue ; + rc =phy_init (hpriv->phys[i]);if (rc) goto disable_phys;
drivers/ata/ahci_ceva.c +20 -4
@@ -206,15 +206,21 @@ static int ceva_ahci_platform_enable_resources(struct ahci_host_priv *hpriv) goto disable_clks;for (i =0 ; i < hpriv->nports; i++) { +if (ahci_ignore_port (hpriv, i)) +continue ; + rc =phy_init (hpriv->phys[i]);if (rc) - goto disable_rsts; + goto exit_phys; }/* De-assert the controller reset */ ahci_platform_deassert_rsts (hpriv);for (i =0 ; i < hpriv->nports; i++) { +if (ahci_ignore_port (hpriv, i)) +continue ; + rc =phy_power_on (hpriv->phys[i]);if (rc) {phy_exit (hpriv->phys[i]);
@@ -224,14 +230,24 @@ static int ceva_ahci_platform_enable_resources(struct ahci_host_priv *hpriv)return 0 ; -disable_rsts: -ahci_platform_deassert_rsts (hpriv); - disable_phys:while (--i >=0 ) { +if (ahci_ignore_port (hpriv, i)) +continue ; +phy_power_off (hpriv->phys[i]);phy_exit (hpriv->phys[i]); } +ahci_platform_assert_rsts (hpriv); + goto disable_clks; + +exit_phys: +while (--i >=0 ) { +if (ahci_ignore_port (hpriv, i)) +continue ; + +phy_exit (hpriv->phys[i]); + } disable_clks:ahci_platform_disable_clks (hpriv);
drivers/ata/libahci.c +1 -0
@@ -542,6 +542,7 @@ void ahci_save_initial_config(struct device *dev, struct ahci_host_priv *hpriv) hpriv->saved_port_map = port_map; } +/* mask_port_map not set means that all ports are available */ if (hpriv->mask_port_map) { dev_warn(dev, "masking port_map 0x%lx -> 0x%lx\n", port_map,
drivers/ata/libahci_platform.c +32 -6
@@ -49,6 +49,9 @@ int ahci_platform_enable_phys(struct ahci_host_priv *hpriv)int rc, i;for (i =0 ; i < hpriv->nports; i++) { +if (ahci_ignore_port (hpriv, i)) +continue ; + rc =phy_init (hpriv->phys[i]);if (rc) goto disable_phys;
@@ -70,6 +73,9 @@ int ahci_platform_enable_phys(struct ahci_host_priv *hpriv) disable_phys:while (--i >=0 ) { +if (ahci_ignore_port (hpriv, i)) +continue ; +phy_power_off (hpriv->phys[i]);phy_exit (hpriv->phys[i]); }
@@ -88,6 +94,9 @@ void ahci_platform_disable_phys(struct ahci_host_priv *hpriv)int i;for (i =0 ; i < hpriv->nports; i++) { +if (ahci_ignore_port (hpriv, i)) +continue ; +phy_power_off (hpriv->phys[i]);phy_exit (hpriv->phys[i]); }
@@ -432,6 +441,20 @@ static int ahci_platform_get_firmware(struct ahci_host_priv *hpriv,return 0 ; } +static u32 ahci_platform_find_max_port_id (struct device *dev) +{ +u32 max_port =0 ; + +for_each_child_of_node_scoped (dev->of_node, child) { +u32 port; + +if (!of_property_read_u32 (child,"reg" , &port)) + max_port =max (max_port, port); + } + +return max_port; +} +/** * ahci_platform_get_resources - Get platform resources * @pdev: platform device to get resources for
@@ -458,6 +481,7 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev,struct device *dev = &pdev->dev;struct ahci_host_priv *hpriv;u32 mask_port_map =0 ; +u32 max_port;if (!devres_open_group (dev,NULL ,GFP_KERNEL ))return ERR_PTR (-ENOMEM );
@@ -549,15 +573,17 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev, goto err_out; } +/* find maximum port id for allocating structures */ + max_port =ahci_platform_find_max_port_id (dev);/* -* If no sub-node was found, we still need to set nports to -* one in order to be able to use the +* Set nports according to maximum port id. Clamp at +* AHCI_MAX_PORTS, warning message for invalid port id +* is generated later. +* When DT has no sub-nodes max_port is 0, nports is 1, +* in order to be able to use the * ahci_platform_[en|dis]able_[phys|regulators] functions. */ -if (child_nodes) - hpriv->nports = child_nodes; -else - hpriv->nports =1 ; + hpriv->nports =min (AHCI_MAX_PORTS , max_port +1 ); hpriv->phys =devm_kcalloc (dev, hpriv->nports,sizeof (*hpriv->phys),GFP_KERNEL );if (!hpriv->phys) {
drivers/ata/libata-eh.c +8 -0
@@ -106,6 +106,12 @@ static const unsigned int ata_eh_flush_timeouts[] = { UINT_MAX, }; +static const unsigned int ata_eh_standby_timeouts[] = { +15000 ,/* Some drives may be slow to standby */ +/* but don't hold up a suspend too long waiting for them */ +UINT_MAX , +}; +static const unsigned int ata_eh_other_timeouts[] = {5000 ,/* same rationale as identify timeout */ 10000 ,/* ditto */
@@ -147,6 +153,8 @@ ata_eh_cmd_timeout_table[ATA_EH_CMD_TIMEOUT_TABLE_SIZE] = { .timeouts = ata_eh_other_timeouts, }, { .commands = CMDS(ATA_CMD_FLUSH, ATA_CMD_FLUSH_EXT), .timeouts = ata_eh_flush_timeouts }, + { .commands = CMDS(ATA_CMD_STANDBYNOW1), + .timeouts = ata_eh_standby_timeouts }, { .commands = CMDS(ATA_CMD_VERIFY), .timeouts = ata_eh_reset_timeouts }, };
drivers/ata/libata-sata.c +1 -1
@@ -913,7 +913,7 @@ static bool ata_scsi_lpm_supported(struct ata_port *ap)return false;ata_for_each_link (link, ap,EDGE ) { -ata_for_each_dev (dev, &ap->link,ENABLED ) { +ata_for_each_dev (dev, link,ENABLED ) {if (dev->quirks &ATA_QUIRK_NOLPM )return false; }
drivers/ata/sata_mv.c +1 -1
@@ -4026,7 +4026,7 @@ static int mv_platform_probe(struct platform_device *pdev)/* * Simple resource validation .. */ -if (unlikely (pdev->num_resources !=1 )) { +if (unlikely (pdev->num_resources !=1 && pdev->num_resources !=2 )) {dev_err (&pdev->dev,"invalid number of resources\n" );return -EINVAL ; }
drivers/block/ublk_drv.c +9 -0
@@ -2558,6 +2558,15 @@ static int ublk_ctrl_add_dev(struct io_uring_cmd *cmd)/* update device id */ ub->dev_info.dev_id = ub->ub_number; +/* +* ->state and ->ublksrv_pid are owned by the driver and only read back +* by userspace, but they come from the copied-in dev_info, so reset +* them. Otherwise a device added with ->state != DEAD looks live while +* ->ub_disk is still NULL. +*/ + ub->dev_info.state =UBLK_S_DEV_DEAD ; + ub->dev_info.ublksrv_pid =-1 ; +/* * 64bit flags will be copied back to userspace as feature * negotiation result, so have to clear flags which driver
drivers/bluetooth/btintel.c +3 -0
@@ -3335,6 +3335,9 @@ int btintel_diagnostics(struct hci_dev *hdev, struct sk_buff *skb) {struct intel_tlv *tlv = (void *)&skb->data[5 ]; +if (skb->len <5 +sizeof (*tlv) +sizeof (tlv->val[0 ])) + goto recv_frame; +/* The first event is always an event type TLV */ if (tlv->type !=INTEL_TLV_TYPE_ID ) goto recv_frame;
drivers/bluetooth/btmtk.c +22 -28
127 lines not on this page · raw message
drivers/bluetooth/btusb.c +9 -21
@@ -3304,28 +3304,16 @@ static u16 qca_extract_board_id(const struct qca_version *ver)static int btusb_qca_send_vendor_req (struct usb_device *udev,u8 request,void *data,u16 size) { -int pipe, err; -u8 *buf; - - buf =kmalloc (size,GFP_KERNEL ); -if (!buf) -return -ENOMEM ; +int err;/* Found some of USB hosts have IOT issues with ours so that we should * not wait until HCI layer is ready. */ - pipe =usb_rcvctrlpipe (udev,0 ); - err =usb_control_msg (udev, pipe, request,USB_TYPE_VENDOR |USB_DIR_IN , -0 ,0 , buf, size,USB_CTRL_GET_TIMEOUT ); -if (err <0 ) { + err =usb_control_msg_recv (udev,0 , request,USB_TYPE_VENDOR |USB_DIR_IN , +0 ,0 , data, size,USB_CTRL_GET_TIMEOUT , +GFP_KERNEL ); +if (err)dev_err (&udev->dev,"Failed to access otp area (%d)" , err); - goto done; - } - -memcpy (data, buf, size); - -done: -kfree (buf);return err; }
@@ -3519,7 +3507,7 @@ static bool btusb_qca_need_patch(struct usb_device *udev)struct qca_version ver;if (btusb_qca_send_vendor_req (udev,QCA_GET_TARGET_VERSION , &ver, -sizeof (ver)) <0 ) +sizeof (ver)))return false;/* only low ROM versions need patches */ return !(le32_to_cpu (ver.rom_version) & ~0xffffU );
@@ -3537,7 +3525,7 @@ static int btusb_setup_qca(struct hci_dev *hdev) err =btusb_qca_send_vendor_req (udev,QCA_GET_TARGET_VERSION , &ver,sizeof (ver)); -if (err <0 ) +if (err)return err; ver_rom =le32_to_cpu (ver.rom_version);
@@ -3560,7 +3548,7 @@ static int btusb_setup_qca(struct hci_dev *hdev) err =btusb_qca_send_vendor_req (udev,QCA_CHECK_STATUS , &status,sizeof (status)); -if (err <0 ) +if (err)return err;if (!(status &QCA_PATCH_UPDATED )) {
@@ -3571,7 +3559,7 @@ static int btusb_setup_qca(struct hci_dev *hdev) err =btusb_qca_send_vendor_req (udev,QCA_GET_TARGET_VERSION , &ver,sizeof (ver)); -if (err <0 ) +if (err)return err; btdata->qca_dump.fw_version =le32_to_cpu (ver.patch_version);
drivers/cpufreq/powernow-k8.c +1 -0
@@ -1083,6 +1083,7 @@ static int powernowk8_cpu_init(struct cpufreq_policy *pol) err_out_exit_acpi:powernow_k8_cpu_exit_acpi (data); +kfree (data->powernow_table); err_out:kfree (data);
drivers/dma/idxd/cdev.c +3 -1
@@ -293,6 +293,7 @@ static int idxd_cdev_open(struct inode *inode, struct file *filp) fdev->parent =cdev_dev (idxd_cdev); fdev->bus = &dsa_bus_type; fdev->type = &idxd_cdev_file_type; +idxd_wq_get (wq); rc =dev_set_name (fdev,"file%d" , ctx->id);if (rc <0 ) {
@@ -306,13 +307,14 @@ static int idxd_cdev_open(struct inode *inode, struct file *filp) goto failed_dev_add; } -idxd_wq_get (wq);mutex_unlock (&wq->wq_lock);return 0 ; failed_dev_add: failed_dev_name: +mutex_unlock (&wq->wq_lock);put_device (fdev); +return rc; failed_ida: failed_set_pasid:if (device_user_pasid_enabled (idxd))
drivers/dma/sun6i-dma.c +4 -7
@@ -934,16 +934,13 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan)spin_lock_irqsave (&vchan->vc.lock, flags); -if (vchan->cyclic) { - vchan->cyclic = false; -if (pchan && pchan->desc) { -struct virt_dma_desc *vd = &pchan->desc->vd; -struct virt_dma_chan *vc = &vchan->vc; +if (pchan && pchan->desc && pchan->desc != pchan->done) { +struct virt_dma_desc *vd = &pchan->desc->vd; -list_add_tail (&vd->node, &vc->desc_completed); - } +vchan_terminate_vdesc (vd); } + vchan->cyclic = false;vchan_get_all_descriptors (&vchan->vc, &head);if (pchan) {
drivers/gpio/gpio-pca953x.c +13 -2
@@ -1256,9 +1256,20 @@ static int pca953x_restore_context(struct pca953x_chip *chip)regcache_mark_dirty (chip->regmap); ret =pca953x_regcache_sync (chip);if (ret) -return ret; + goto err; + + ret =regcache_sync (chip->regmap); +if (ret) + goto err; + +return 0 ; -return regcache_sync (chip->regmap); +err: +if (chip->client->irq >0 ) +disable_irq (chip->client->irq); +regcache_cache_only (chip->regmap, true); + +return ret; }static void pca953x_save_context (struct pca953x_chip *chip)
drivers/gpio/gpio-pch.c +14 -14
@@ -96,7 +96,7 @@ struct pch_gpio {struct pch_gpio_reg_data pch_gpio_reg;int irq_base;enum pch_type_t ioh; -spinlock_t spinlock; +raw_spinlock_t spinlock; };static void pch_gpio_set (struct gpio_chip *gpio,unsigned int nr,int val)
@@ -105,7 +105,7 @@ static void pch_gpio_set(struct gpio_chip *gpio, unsigned int nr, int val)struct pch_gpio *chip =gpiochip_get_data (gpio);unsigned long flags; -spin_lock_irqsave (&chip->spinlock, flags); +raw_spin_lock_irqsave (&chip->spinlock, flags); reg_val =ioread32 (&chip->reg->po);if (val) reg_val |=BIT (nr);
@@ -113,7 +113,7 @@ static void pch_gpio_set(struct gpio_chip *gpio, unsigned int nr, int val) reg_val &= ~BIT (nr);iowrite32 (reg_val, &chip->reg->po); -spin_unlock_irqrestore (&chip->spinlock, flags); +raw_spin_unlock_irqrestore (&chip->spinlock, flags); }static int pch_gpio_get (struct gpio_chip *gpio,unsigned int nr)
@@ -131,7 +131,7 @@ static int pch_gpio_direction_output(struct gpio_chip *gpio, unsigned int nr,u32 reg_val;unsigned long flags; -spin_lock_irqsave (&chip->spinlock, flags); +raw_spin_lock_irqsave (&chip->spinlock, flags); reg_val =ioread32 (&chip->reg->po);if (val)
@@ -145,7 +145,7 @@ static int pch_gpio_direction_output(struct gpio_chip *gpio, unsigned int nr, pm |=BIT (nr);iowrite32 (pm, &chip->reg->pm); -spin_unlock_irqrestore (&chip->spinlock, flags); +raw_spin_unlock_irqrestore (&chip->spinlock, flags);return 0 ; }
@@ -156,12 +156,12 @@ static int pch_gpio_direction_input(struct gpio_chip *gpio, unsigned int nr)u32 pm;unsigned long flags; -spin_lock_irqsave (&chip->spinlock, flags); +raw_spin_lock_irqsave (&chip->spinlock, flags); pm =ioread32 (&chip->reg->pm); pm &=BIT (gpio_pins[chip->ioh]) -1 ; pm &= ~BIT (nr);iowrite32 (pm, &chip->reg->pm); -spin_unlock_irqrestore (&chip->spinlock, flags); +raw_spin_unlock_irqrestore (&chip->spinlock, flags);return 0 ; }
@@ -263,7 +263,7 @@ static int pch_irq_type(struct irq_data *d, unsigned int type)return 0 ; } -spin_lock_irqsave (&chip->spinlock, flags); +raw_spin_lock_irqsave (&chip->spinlock, flags);/* Set interrupt mode */ im =ioread32 (im_reg) & ~(PCH_IM_MASK << (im_pos *4 ));
@@ -275,7 +275,7 @@ static int pch_irq_type(struct irq_data *d, unsigned int type)else if (type &IRQ_TYPE_EDGE_BOTH )irq_set_handler_locked (d, handle_edge_irq); -spin_unlock_irqrestore (&chip->spinlock, flags); +raw_spin_unlock_irqrestore (&chip->spinlock, flags);return 0 ; }
@@ -372,7 +372,7 @@ static int pch_gpio_probe(struct pci_dev *pdev, chip->ioh = id->driver_data; chip->reg = chip->base;pci_set_drvdata (pdev, chip); -spin_lock_init (&chip->spinlock); +raw_spin_lock_init (&chip->spinlock);pch_gpio_setup (chip); ret =devm_gpiochip_add_data (dev, &chip->gpio, chip);
@@ -405,9 +405,9 @@ static int __maybe_unused pch_gpio_suspend(struct device *dev)struct pch_gpio *chip =dev_get_drvdata (dev);unsigned long flags; -spin_lock_irqsave (&chip->spinlock, flags); +raw_spin_lock_irqsave (&chip->spinlock, flags);pch_gpio_save_reg_conf (chip); -spin_unlock_irqrestore (&chip->spinlock, flags); +raw_spin_unlock_irqrestore (&chip->spinlock, flags);return 0 ; }
@@ -417,11 +417,11 @@ static int __maybe_unused pch_gpio_resume(struct device *dev)struct pch_gpio *chip =dev_get_drvdata (dev);unsigned long flags; -spin_lock_irqsave (&chip->spinlock, flags); +raw_spin_lock_irqsave (&chip->spinlock, flags);iowrite32 (0x01 , &chip->reg->reset);iowrite32 (0x00 , &chip->reg->reset);pch_gpio_restore_reg_conf (chip); -spin_unlock_irqrestore (&chip->spinlock, flags); +raw_spin_unlock_irqrestore (&chip->spinlock, flags);return 0 ; }
drivers/gpio/gpio-sloppy-logic-analyzer.c +10 -0
@@ -161,6 +161,13 @@ static int fops_buf_size_get(void *data, u64 *val)return 0 ; } +static void fops_buf_release (void *data) +{ +struct gpio_la_poll_priv *priv = data; + +vfree (priv->blob.data); +} +static int fops_buf_size_set (void *data,u64 val) {struct gpio_la_poll_priv *priv = data;
@@ -239,6 +246,9 @@ static int gpio_la_poll_probe(struct platform_device *pdev)return ret;fops_buf_size_set (priv,GPIO_LA_DEFAULT_BUF_SIZE ); + ret =devm_add_action_or_reset (dev, fops_buf_release, priv); +if (ret) +return ret; priv->descs =devm_gpiod_get_array (dev,"probe" ,GPIOD_IN );if (IS_ERR (priv->descs))
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +1 -1
@@ -681,7 +681,7 @@ int amdgpu_amdkfd_submit_ib(struct amdgpu_device *adev, goto err; } - ret =amdgpu_job_alloc (adev,NULL ,NULL ,NULL ,1 , &job); + ret =amdgpu_job_alloc (adev,NULL ,NULL ,NULL ,1 , &job,0 );if (ret) goto err;
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +5 -7
@@ -297,7 +297,8 @@ static int amdgpu_cs_pass1(struct amdgpu_cs_parser *p,for (i =0 ; i < p->gang_size; ++i) { ret =amdgpu_job_alloc (p->adev, vm, p->entities[i], vm, - num_ibs[i], &p->jobs[i]); + num_ibs[i], &p->jobs[i], + p->filp->client_id);if (ret) goto free_all_kdata; p->jobs[i]->enforce_isolation = p->adev->enforce_isolation[fpriv->xcp_id];
@@ -847,7 +848,6 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,struct amdgpu_vm *vm = &fpriv->vm;struct amdgpu_bo_list_entry *e;struct drm_gem_object *obj; -unsigned long index;unsigned int i;int r;
@@ -968,7 +968,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, goto out_free_user_pages; } -drm_exec_for_each_locked_object (&p->exec, index, obj) { +drm_exec_for_each_locked_object (&p->exec, obj) { r =amdgpu_cs_bo_validate (p,gem_to_amdgpu_bo (obj));if (unlikely (r)) goto out_free_user_pages;
@@ -1206,7 +1206,6 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p)struct drm_gpu_scheduler *sched;struct drm_gem_object *obj;struct dma_fence *fence; -unsigned long index;unsigned int i;int r;
@@ -1217,7 +1216,7 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p)return r; } -drm_exec_for_each_locked_object (&p->exec, index, obj) { +drm_exec_for_each_locked_object (&p->exec, obj) {struct amdgpu_bo *bo =gem_to_amdgpu_bo (obj);struct dma_resv *resv = bo->tbo.base.resv;
@@ -1285,7 +1284,6 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,struct amdgpu_vm *vm = &fpriv->vm;struct amdgpu_bo_list_entry *e;struct drm_gem_object *gobj; -unsigned long index;unsigned int i;uint64_t seq;int r;
@@ -1336,7 +1334,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, } p->fence =dma_fence_get (&leader->base.s_fence->finished); -drm_exec_for_each_locked_object (&p->exec, index, gobj) { +drm_exec_for_each_locked_object (&p->exec, gobj) {ttm_bo_move_to_lru_tail_unlocked (&gem_to_amdgpu_bo (gobj)->tbo);
drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c +42 -29
110 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +15 -0
@@ -2824,6 +2824,19 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev)return 0 ; } +static void amdgpu_restore_umd_profile_pstate_after_runpm (struct amdgpu_device *adev) +{ +enum amd_dpm_forced_level level; +uint32_t profile_mode_mask =AMD_DPM_FORCED_LEVEL_PROFILE_STANDARD | +AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK | +AMD_DPM_FORCED_LEVEL_PROFILE_MIN_MCLK | +AMD_DPM_FORCED_LEVEL_PROFILE_PEAK ; + + level =amdgpu_dpm_get_performance_level (adev); +if (level & profile_mode_mask) +amdgpu_asic_update_umd_stable_pstate (adev, true); +} +static int amdgpu_pmops_runtime_resume (struct device *dev) {struct pci_dev *pdev =to_pci_dev (dev);
@@ -2868,6 +2881,8 @@ static int amdgpu_pmops_runtime_resume(struct device *dev)if (adev->pm.rpm_mode ==AMDGPU_RUNPM_PX ) drm_dev->switch_power_state =DRM_SWITCH_POWER_ON ; + +amdgpu_restore_umd_profile_pstate_after_runpm (adev); adev->in_runpm = false;return 0 ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +6 -5
@@ -1426,12 +1426,13 @@ static int amdgpu_gfx_run_cleaner_shader_job(struct amdgpu_ring *ring)struct amdgpu_device *adev = ring->adev;struct drm_gpu_scheduler *sched = &ring->sched;struct drm_sched_entity entity; +unsigned int ib_size_dw =16 ;static atomic_t counter;struct dma_fence *f;struct amdgpu_job *job;struct amdgpu_ib *ib;void *owner; -int i, r; +int r;/* Initialize the scheduler entity */ r = drm_sched_entity_init(&entity, DRM_SCHED_PRIORITY_NORMAL,
@@ -1449,16 +1450,16 @@ static int amdgpu_gfx_run_cleaner_shader_job(struct amdgpu_ring *ring) owner = (void *)(unsigned long )atomic_inc_return (&counter); r =amdgpu_job_alloc_with_ib (ring->adev, &entity, owner, -64 ,0 , &job); + ib_size_dw *sizeof (uint32_t ),0 , &job, +AMDGPU_KERNEL_JOB_ID_CLEANER_SHADER );if (r) goto err; job->enforce_isolation = true; ib = &job->ibs[0 ]; -for (i =0 ; i <= ring->funcs->align_mask; ++i) - ib->ptr[i] = ring->funcs->nop; - ib->length_dw = ring->funcs->align_mask +1 ; +memset32 (ib->ptr, ring->funcs->nop, ib_size_dw); + ib->length_dw = ib_size_dw; f =amdgpu_job_submit (job);
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c +1 -1
@@ -664,7 +664,7 @@ void amdgpu_gmc_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid, r =amdgpu_job_alloc_with_ib (ring->adev, &adev->mman.high_pr,AMDGPU_FENCE_OWNER_UNDEFINED ,16 *4 ,AMDGPU_IB_POOL_IMMEDIATE , - &job); + &job,AMDGPU_KERNEL_JOB_ID_FLUSH_GPU_TLB );if (r) goto error_alloc;
drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c +28 -2
@@ -217,7 +217,20 @@ static bool amdgpu_gtt_mgr_intersects(struct ttm_resource_manager *man, const struct ttm_place *place, size_t size) { -return !place->lpfn ||amdgpu_gtt_mgr_has_gart_addr (res); +const struct drm_mm_node *const node = &to_ttm_range_mgr_node (res)->mm_nodes[0 ]; +const u32 num_pages =PFN_UP (size); + +if (!place->lpfn) +return true; + +if (!amdgpu_gtt_mgr_has_gart_addr (res)) +return false; + +if (place->fpfn >= (node->start + num_pages) || + (place->lpfn && place->lpfn <= node->start)) +return false; + +return true; }/**
@@ -235,7 +248,20 @@ static bool amdgpu_gtt_mgr_compatible(struct ttm_resource_manager *man, const struct ttm_place *place, size_t size) { -return !place->lpfn ||amdgpu_gtt_mgr_has_gart_addr (res); +const struct drm_mm_node *const node = &to_ttm_range_mgr_node (res)->mm_nodes[0 ]; +const u32 num_pages =PFN_UP (size); + +if (!place->lpfn) +return true; + +if (!amdgpu_gtt_mgr_has_gart_addr (res)) +return false; + +if (node->start < place->fpfn || + (place->lpfn && (node->start + num_pages) > place->lpfn)) +return false; + +return true; }/**
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +7 -4
@@ -187,7 +187,8 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)int amdgpu_job_alloc (struct amdgpu_device *adev,struct amdgpu_vm *vm,struct drm_sched_entity *entity,void *owner, -unsigned int num_ibs,struct amdgpu_job **job) +unsigned int num_ibs,struct amdgpu_job **job, +u64 drm_client_id) {if (num_ibs ==0 )return -EINVAL ;
@@ -210,17 +211,19 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, struct amdgpu_vm *vm,if (!entity)return 0 ; -return drm_sched_job_init (&(*job)->base, entity,1 , owner); +return drm_sched_job_init (&(*job)->base, entity,1 , owner, + drm_client_id); }int amdgpu_job_alloc_with_ib (struct amdgpu_device *adev,struct drm_sched_entity *entity,void *owner,size_t size,enum amdgpu_ib_pool_type pool_type, -struct amdgpu_job **job) +struct amdgpu_job **job,u64 k_job_id) {int r; - r =amdgpu_job_alloc (adev,NULL , entity, owner,1 , job); + r =amdgpu_job_alloc (adev,NULL , entity, owner,1 , job, + k_job_id);if (r)return r;
drivers/gpu/drm/amd/amdgpu/amdgpu_job.h +20 -2
@@ -44,6 +44,22 @@struct amdgpu_fence ;enum amdgpu_ib_pool_type ; +/* Internal kernel job ids. (decreasing values, starting from U64_MAX). */ +#define AMDGPU_KERNEL_JOB_ID_VM_UPDATE (18446744073709551615ULL) +#define AMDGPU_KERNEL_JOB_ID_VM_UPDATE_PDES (18446744073709551614ULL) +#define AMDGPU_KERNEL_JOB_ID_VM_UPDATE_RANGE (18446744073709551613ULL) +#define AMDGPU_KERNEL_JOB_ID_VM_PT_CLEAR (18446744073709551612ULL) +#define AMDGPU_KERNEL_JOB_ID_TTM_MAP_BUFFER (18446744073709551611ULL) +#define AMDGPU_KERNEL_JOB_ID_TTM_ACCESS_MEMORY_SDMA (18446744073709551610ULL) +#define AMDGPU_KERNEL_JOB_ID_TTM_COPY_BUFFER (18446744073709551609ULL) +#define AMDGPU_KERNEL_JOB_ID_CLEAR_ON_RELEASE (18446744073709551608ULL) +#define AMDGPU_KERNEL_JOB_ID_MOVE_BLIT (18446744073709551607ULL) +#define AMDGPU_KERNEL_JOB_ID_TTM_CLEAR_BUFFER (18446744073709551606ULL) +#define AMDGPU_KERNEL_JOB_ID_CLEANER_SHADER (18446744073709551605ULL) +#define AMDGPU_KERNEL_JOB_ID_FLUSH_GPU_TLB (18446744073709551604ULL) +#define AMDGPU_KERNEL_JOB_ID_KFD_GART_MAP (18446744073709551603ULL) +#define AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST (18446744073709551602ULL) +struct amdgpu_job {struct drm_sched_job base;struct amdgpu_vm *vm;
@@ -90,11 +106,13 @@ static inline struct amdgpu_ring *amdgpu_job_ring(struct amdgpu_job *job)int amdgpu_job_alloc (struct amdgpu_device *adev,struct amdgpu_vm *vm,struct drm_sched_entity *entity,void *owner, -unsigned int num_ibs,struct amdgpu_job **job); +unsigned int num_ibs,struct amdgpu_job **job, +u64 drm_client_id);int amdgpu_job_alloc_with_ib (struct amdgpu_device *adev,struct drm_sched_entity *entity,void *owner,size_t size,enum amdgpu_ib_pool_type pool_type, -struct amdgpu_job **job); +struct amdgpu_job **job, +u64 k_job_id);void amdgpu_job_set_resources (struct amdgpu_job *job,struct amdgpu_bo *gds,struct amdgpu_bo *gws,struct amdgpu_bo *oa);void amdgpu_job_free_resources (struct amdgpu_job *job);
drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c +2 -1
@@ -192,7 +192,8 @@ static int amdgpu_jpeg_dec_set_reg(struct amdgpu_ring *ring, uint32_t handle,int i, r; r =amdgpu_job_alloc_with_ib (ring->adev,NULL ,NULL , ib_size_dw *4 , -AMDGPU_IB_POOL_DIRECT , &job); +AMDGPU_IB_POOL_DIRECT , &job, +AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST );if (r)return r;
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +2 -1
@@ -1269,7 +1269,8 @@ void amdgpu_bo_release_notify(struct ttm_buffer_object *bo)if (r) goto out; - r =amdgpu_fill_buffer (abo,0 , &bo->base._resv, &fence, true); + r =amdgpu_fill_buffer (abo,0 , &bo->base._resv, &fence, true, +AMDGPU_KERNEL_JOB_ID_CLEAR_ON_RELEASE );if (WARN_ON (r)) goto out;
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +29 -11
@@ -229,7 +229,8 @@ static int amdgpu_ttm_map_buffer(struct ttm_buffer_object *bo, r =amdgpu_job_alloc_with_ib (adev, &adev->mman.high_pr,AMDGPU_FENCE_OWNER_UNDEFINED , num_dw *4 + num_bytes, -AMDGPU_IB_POOL_DELAYED , &job); +AMDGPU_IB_POOL_DELAYED , &job, +AMDGPU_KERNEL_JOB_ID_TTM_MAP_BUFFER );if (r)return r;
@@ -408,7 +409,7 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,struct dma_fence *wipe_fence =NULL ; r =amdgpu_fill_buffer (abo,0 ,NULL , &wipe_fence, - false); + false,AMDGPU_KERNEL_JOB_ID_MOVE_BLIT );if (r) { goto error; }else if (wipe_fence) {
@@ -1530,7 +1531,8 @@ static int amdgpu_ttm_access_memory_sdma(struct ttm_buffer_object *bo, r =amdgpu_job_alloc_with_ib (adev, &adev->mman.high_pr,AMDGPU_FENCE_OWNER_UNDEFINED , num_dw *4 ,AMDGPU_IB_POOL_DELAYED , - &job); + &job, +AMDGPU_KERNEL_JOB_ID_TTM_ACCESS_MEMORY_SDMA );if (r) goto out;
@@ -1996,6 +1998,18 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)else gtt_size = (uint64_t )amdgpu_gtt_size <<20 ; +/* Cap GTT so that it does not exceed total physical RAM. */ +if (adev->flags &AMD_IS_APU ) { +u64 phys_ram = (u64 )totalram_pages () <<PAGE_SHIFT ; + +if (gtt_size > phys_ram) { + gtt_size = phys_ram; +dev_info (adev->dev, +"Capping GTT to %uM to not exceed available system memory\n" , + (unsigned int )(gtt_size / (1024 *1024 ))); + } + } +/* Initialize GTT memory pool */ r =amdgpu_gtt_mgr_init (adev, gtt_size);if (r) {
@@ -2163,7 +2177,7 @@ static int amdgpu_ttm_prepare_job(struct amdgpu_device *adev,struct dma_resv *resv, bool vm_needs_flush, struct amdgpu_job **job, - bool delayed) + bool delayed, u64 k_job_id) { enum amdgpu_ib_pool_type pool = direct_submit ? AMDGPU_IB_POOL_DIRECT :
@@ -2173,7 +2187,7 @@ static int amdgpu_ttm_prepare_job(struct amdgpu_device *adev, &adev->mman.high_pr; r =amdgpu_job_alloc_with_ib (adev, entity,AMDGPU_FENCE_OWNER_UNDEFINED , - num_dw *4 , pool, job); + num_dw *4 , pool, job, k_job_id);if (r)return r;
@@ -2212,7 +2226,8 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring, uint64_t src_offset, num_loops =DIV_ROUND_UP (byte_count, max_bytes); num_dw =ALIGN (num_loops * adev->mman.buffer_funcs->copy_num_dw,8 ); r =amdgpu_ttm_prepare_job (adev, direct_submit, num_dw, - resv, vm_needs_flush, &job, false); + resv, vm_needs_flush, &job, false, +AMDGPU_KERNEL_JOB_ID_TTM_COPY_BUFFER );if (r)return r;
@@ -2247,7 +2262,8 @@ static int amdgpu_ttm_fill_mem(struct amdgpu_ring *ring, uint32_t src_data, uint64_t dst_addr, uint32_t byte_count, struct dma_resv *resv, struct dma_fence **fence, - bool vm_needs_flush, bool delayed) + bool vm_needs_flush, bool delayed, + u64 k_job_id) { struct amdgpu_device *adev = ring->adev;unsigned int num_loops, num_dw;
@@ -2260,7 +2276,7 @@ static int amdgpu_ttm_fill_mem(struct amdgpu_ring *ring, uint32_t src_data, num_loops =DIV_ROUND_UP_ULL (byte_count, max_bytes); num_dw =ALIGN (num_loops * adev->mman.buffer_funcs->fill_num_dw,8 ); r =amdgpu_ttm_prepare_job (adev, false, num_dw, resv, vm_needs_flush, - &job, delayed); + &job, delayed, k_job_id);if (r)return r;
@@ -2330,7 +2346,8 @@ int amdgpu_ttm_clear_buffer(struct amdgpu_bo *bo, goto err; r =amdgpu_ttm_fill_mem (ring,0 , addr, size, resv, - &next, true, true); + &next, true, true, +AMDGPU_KERNEL_JOB_ID_TTM_CLEAR_BUFFER );if (r) goto err;
@@ -2349,7 +2366,8 @@ int amdgpu_fill_buffer(struct amdgpu_bo *bo,uint32_t src_data, struct dma_resv *resv, struct dma_fence **f, - bool delayed) + bool delayed, + u64 k_job_id) { struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);struct amdgpu_ring *ring = adev->mman.buffer_funcs_ring;
@@ -2378,7 +2396,7 @@ int amdgpu_fill_buffer(struct amdgpu_bo *bo, goto error; r =amdgpu_ttm_fill_mem (ring, src_data, to, cur_size, resv, - &next, true, delayed); + &next, true, delayed, k_job_id);if (r) goto error;
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h +2 -1
@@ -180,7 +180,8 @@ int amdgpu_fill_buffer(struct amdgpu_bo *bo,uint32_t src_data, struct dma_resv *resv, struct dma_fence **fence, - bool delayed); + bool delayed, + u64 k_job_id);int amdgpu_ttm_alloc_gart (struct ttm_buffer_object *bo);void amdgpu_ttm_recover_gart (struct ttm_buffer_object *tbo);
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +2 -1
@@ -1164,7 +1164,8 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo, r =amdgpu_job_alloc_with_ib (ring->adev, &adev->uvd.entity,AMDGPU_FENCE_OWNER_UNDEFINED ,64 , direct ?AMDGPU_IB_POOL_DIRECT : -AMDGPU_IB_POOL_DELAYED , &job); +AMDGPU_IB_POOL_DELAYED , &job, +AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST );if (r)return r;
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +3 -2
@@ -449,7 +449,7 @@ static int amdgpu_vce_get_create_msg(struct amdgpu_ring *ring, uint32_t handle, r =amdgpu_job_alloc_with_ib (ring->adev, &ring->adev->vce.entity,AMDGPU_FENCE_OWNER_UNDEFINED , ib_size_dw *4 ,AMDGPU_IB_POOL_DIRECT , - &job); + &job,AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST );if (r)return r;
@@ -540,7 +540,8 @@ static int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,AMDGPU_FENCE_OWNER_UNDEFINED , ib_size_dw *4 , direct ?AMDGPU_IB_POOL_DIRECT : - AMDGPU_IB_POOL_DELAYED, &job); +AMDGPU_IB_POOL_DELAYED , &job, + AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST);if (r)return r;
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +4 -4
@@ -553,7 +553,7 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, r =amdgpu_job_alloc_with_ib (ring->adev,NULL ,NULL ,64 ,AMDGPU_IB_POOL_DIRECT , - &job); + &job,AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST );if (r) goto err;
@@ -733,7 +733,7 @@ static int amdgpu_vcn_dec_sw_send_msg(struct amdgpu_ring *ring, r =amdgpu_job_alloc_with_ib (ring->adev,NULL ,NULL , ib_size_dw *4 ,AMDGPU_IB_POOL_DIRECT , - &job); + &job,AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST );if (r) goto err;
@@ -863,7 +863,7 @@ static int amdgpu_vcn_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t hand r =amdgpu_job_alloc_with_ib (ring->adev,NULL ,NULL , ib_size_dw *4 ,AMDGPU_IB_POOL_DIRECT , - &job); + &job,AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST );if (r)return r;
@@ -930,7 +930,7 @@ static int amdgpu_vcn_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t han r =amdgpu_job_alloc_with_ib (ring->adev,NULL ,NULL , ib_size_dw *4 ,AMDGPU_IB_POOL_DIRECT , - &job); + &job,AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST );if (r)return r;
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +4 -2
@@ -838,7 +838,8 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev, params.vm = vm; params.immediate = immediate; - r = vm->update_funcs->prepare (¶ms,NULL ); + r = vm->update_funcs->prepare (¶ms,NULL , +AMDGPU_KERNEL_JOB_ID_VM_UPDATE_PDES );if (r) goto error;
@@ -1007,7 +1008,8 @@ int amdgpu_vm_update_range(struct amdgpu_device *adev, struct amdgpu_vm *vm,dma_fence_put (tmp); } - r = vm->update_funcs->prepare (¶ms, sync); + r = vm->update_funcs->prepare (¶ms, sync, +AMDGPU_KERNEL_JOB_ID_VM_UPDATE_RANGE );if (r) goto error_free;
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +1 -1
@@ -305,7 +305,7 @@ struct amdgpu_vm_update_params {struct amdgpu_vm_update_funcs {int (*map_table)(struct amdgpu_bo_vm *bo);int (*prepare)(struct amdgpu_vm_update_params *p, -struct amdgpu_sync *sync); +struct amdgpu_sync *sync,u64 k_job_id);int (*update)(struct amdgpu_vm_update_params *p,struct amdgpu_bo_vm *bo,uint64_t pe,uint64_t addr,unsigned count,uint32_t incr,uint64_t flags);
drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c +3 -1
@@ -42,12 +42,14 @@ static int amdgpu_vm_cpu_map_table(struct amdgpu_bo_vm *table)* * @p: see amdgpu_vm_update_params definition * @sync: sync obj with fences to wait on +* @k_job_id: the id for tracing/debug purposes * * Returns: * Negativ errno, 0 for success. */ static int amdgpu_vm_cpu_prepare (struct amdgpu_vm_update_params *p, -struct amdgpu_sync *sync) +struct amdgpu_sync *sync, +u64 k_job_id) {if (!sync)return 0 ;
drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c +3 -1
@@ -26,6 +26,7 @@#include "amdgpu.h" #include "amdgpu_trace.h" #include "amdgpu_vm.h" +#include "amdgpu_job.h" /* * amdgpu_vm_pt_cursor - state for for_each_amdgpu_vm_pt
@@ -395,7 +396,8 @@ int amdgpu_vm_pt_clear(struct amdgpu_device *adev, struct amdgpu_vm *vm, params.vm = vm; params.immediate = immediate; - r = vm->update_funcs->prepare (¶ms,NULL ); + r = vm->update_funcs->prepare (¶ms,NULL , +AMDGPU_KERNEL_JOB_ID_VM_PT_CLEAR );if (r) goto exit;
drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c +7 -5
@@ -40,7 +40,7 @@ static int amdgpu_vm_sdma_map_table(struct amdgpu_bo_vm *table)/* Allocate a new job for @count PTE updates */ static int amdgpu_vm_sdma_alloc_job (struct amdgpu_vm_update_params *p, -unsigned int count) +unsigned int count,u64 k_job_id) {enum amdgpu_ib_pool_type pool = p->immediate ?AMDGPU_IB_POOL_IMMEDIATE :AMDGPU_IB_POOL_DELAYED ;
@@ -56,7 +56,7 @@ static int amdgpu_vm_sdma_alloc_job(struct amdgpu_vm_update_params *p, ndw =min (ndw,AMDGPU_VM_SDMA_MAX_NUM_DW ); r =amdgpu_job_alloc_with_ib (p->adev, entity,AMDGPU_FENCE_OWNER_VM , - ndw *4 , pool, &p->job); + ndw *4 , pool, &p->job, k_job_id);if (r)return r;
@@ -69,16 +69,17 @@ static int amdgpu_vm_sdma_alloc_job(struct amdgpu_vm_update_params *p,* * @p: see amdgpu_vm_update_params definition * @sync: amdgpu_sync object with fences to wait for +* @k_job_id: identifier of the job, for tracing purpose * * Returns: * Negativ errno, 0 for success. */ static int amdgpu_vm_sdma_prepare (struct amdgpu_vm_update_params *p, -struct amdgpu_sync *sync) +struct amdgpu_sync *sync,u64 k_job_id) {int r; - r =amdgpu_vm_sdma_alloc_job (p,0 ); + r =amdgpu_vm_sdma_alloc_job (p,0 , k_job_id);if (r)return r;
@@ -249,7 +250,8 @@ static int amdgpu_vm_sdma_update(struct amdgpu_vm_update_params *p,if (r)return r; - r =amdgpu_vm_sdma_alloc_job (p, count); + r =amdgpu_vm_sdma_alloc_job (p, count, +AMDGPU_KERNEL_JOB_ID_VM_UPDATE );if (r)return r; }
drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c +4 -2
@@ -217,7 +217,8 @@ static int uvd_v6_0_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t handleint i, r; r =amdgpu_job_alloc_with_ib (ring->adev,NULL ,NULL , ib_size_dw *4 , -AMDGPU_IB_POOL_DIRECT , &job); +AMDGPU_IB_POOL_DIRECT , &job, +AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST );if (r)return r;
@@ -281,7 +282,8 @@ static int uvd_v6_0_enc_get_destroy_msg(struct amdgpu_ring *ring,int i, r; r =amdgpu_job_alloc_with_ib (ring->adev,NULL ,NULL , ib_size_dw *4 , -AMDGPU_IB_POOL_DIRECT , &job); +AMDGPU_IB_POOL_DIRECT , &job, +AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST );if (r)return r;
drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c +4 -2
@@ -225,7 +225,8 @@ static int uvd_v7_0_enc_get_create_msg(struct amdgpu_ring *ring, u32 handle,int i, r; r =amdgpu_job_alloc_with_ib (ring->adev,NULL ,NULL , ib_size_dw *4 , -AMDGPU_IB_POOL_DIRECT , &job); +AMDGPU_IB_POOL_DIRECT , &job, +AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST );if (r)return r;
@@ -288,7 +289,8 @@ static int uvd_v7_0_enc_get_destroy_msg(struct amdgpu_ring *ring, u32 handle,int i, r; r =amdgpu_job_alloc_with_ib (ring->adev,NULL ,NULL , ib_size_dw *4 , -AMDGPU_IB_POOL_DIRECT , &job); +AMDGPU_IB_POOL_DIRECT , &job, +AMDGPU_KERNEL_JOB_ID_VCN_RING_TEST );if (r)return r;
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +7 -3
@@ -2978,10 +2978,14 @@ static int kfd_ioctl_set_debug_trap(struct file *filep, struct kfd_process *p, v goto out; } -/* Check if target is still PTRACED. */ +/* +* Verify debugger has permission to debug target process. +* For cross-process debugging, require active ptrace relationship. +* This applies to ALL operations to prevent unauthorized interference. +*/ rcu_read_lock (); -if (target != p && args->op !=KFD_IOC_DBG_TRAP_DISABLE - &&ptrace_parent (target->lead_thread) != current) { +if (target != p &&ptrace_parent (target->lead_thread) != current + && target->debugger_process != p) {pr_err ("PID %i is not PTRACED and cannot be debugged\n" , args->pid); r = -EPERM ; }
drivers/gpu/drm/amd/amdkfd/kfd_events.c +20 -3
@@ -521,6 +521,9 @@ int kfd_criu_restore_event(struct file *devkfd, ret =create_other_event (p, ev, &ev_priv->event_id);break ; +default : + ret = -EINVAL ; +break ; }mutex_unlock (&p->event_mutex);
@@ -542,15 +545,27 @@ int kfd_criu_checkpoint_events(struct kfd_process *p,int ret =0 ;struct kfd_event *ev;uint32_t ev_id; +uint32_t num_events; -uint32_t num_events =kfd_get_num_events (p); +/* Serialize the count and the walk below against concurrent event +* create/destroy. Those paths take only p->event_mutex, not the +* p->mutex held by the CRIU checkpoint caller, so without this the +* event_idr can grow between kfd_get_num_events() and the loop and the +* walk writes past the ev_privs allocation. +*/ +mutex_lock (&p->event_mutex); -if (!num_events) + num_events =kfd_get_num_events (p); +if (!num_events) { +mutex_unlock (&p->event_mutex);return 0 ; + } ev_privs =kvzalloc (num_events *sizeof (*ev_privs),GFP_KERNEL ); -if (!ev_privs) +if (!ev_privs) { +mutex_unlock (&p->event_mutex);return -ENOMEM ; + }idr_for_each_entry (&p->event_idr, ev, ev_id) {
@@ -591,6 +606,8 @@ int kfd_criu_checkpoint_events(struct kfd_process *p, i++; } +mutex_unlock (&p->event_mutex); + ret =copy_to_user (user_priv_data + *priv_data_offset, ev_privs, num_events *sizeof (*ev_privs));if (ret) {
drivers/gpu/drm/amd/amdkfd/kfd_migrate.c +2 -1
@@ -68,7 +68,8 @@ svm_migrate_gart_map(struct amdgpu_ring *ring, uint64_t npages,AMDGPU_FENCE_OWNER_UNDEFINED , num_dw *4 + num_bytes,AMDGPU_IB_POOL_DELAYED , - &job); + &job, + AMDGPU_KERNEL_JOB_ID_KFD_GART_MAP);if (r)return r;
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +1 -1
@@ -376,7 +376,7 @@ int pqm_create_queue(struct process_queue_manager *pqm, false);if (retval) {dev_err (dev->adev->dev,"failed to allocate process context bo\n" ); -return retval; + goto err_allocate_pqn; }memset (pdd->proc_ctx_cpu_ptr,0 ,AMDGPU_MES_PROC_CTX_SIZE ); }
drivers/gpu/drm/amd/amdkfd/kfd_queue.c +1 -1
@@ -285,7 +285,7 @@ int kfd_queue_acquire_buffers(struct kfd_process_device *pdd, struct queue_prope } err =kfd_queue_buffer_get (vm, (void *)properties->eop_ring_buffer_address, &properties->eop_buf_bo, -ALIGN (properties->eop_ring_buffer_size,PAGE_SIZE )); +ALIGN ((u64 )properties->eop_ring_buffer_size,PAGE_SIZE ));if (err) goto out_err_unreserve; }
drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c +9 -11
@@ -45,9 +45,7 @@ clk_src->base.ctx#define DC_LOGGER \ - calc_pll_cs->ctx->logger -#define DC_LOGGER_INIT () \ - struct calc_pll_clock_source *calc_pll_cs = &clk_src->calc_pll + CTX->logger#undef FN#define FN (reg_name, field_name) \
@@ -291,6 +289,7 @@ static bool calc_pll_dividers_in_range( }static uint32_t calculate_pixel_clock_pll_dividers ( +struct dce110_clk_src *clk_src,struct calc_pll_clock_source *calc_pll_cs,struct pll_settings *pll_settings) {
@@ -479,7 +478,7 @@ static uint32_t dce110_get_pix_clk_dividers_helper ( {uint32_t field =0 ;uint32_t pll_calc_error =MAX_PLL_CALC_ERROR ; -DC_LOGGER_INIT (); +/* Check if reference clock is external (not pcie/xtalin) * HW Dce80 spec: * 00 - PCIE_REFCLK, 01 - XTALIN, 02 - GENERICA, 03 - GENERICB
@@ -522,12 +521,14 @@ static uint32_t dce110_get_pix_clk_dividers_helper (/*Calculate Dividers by HDMI object, no SS case or SS case */ pll_calc_error =calculate_pixel_clock_pll_dividers ( + clk_src, &clk_src->calc_pll_hdmi, pll_settings); else/*Calculate Dividers by default object, no SS case or SS case */ pll_calc_error =calculate_pixel_clock_pll_dividers ( + clk_src, &clk_src->calc_pll, pll_settings);
@@ -572,7 +573,6 @@ static uint32_t dce110_get_pix_clk_dividers( {struct dce110_clk_src *clk_src =TO_DCE110_CLK_SRC (cs);uint32_t pll_calc_error =MAX_PLL_CALC_ERROR ; -DC_LOGGER_INIT ();if (pix_clk_params ==NULL || pll_settings ==NULL || pix_clk_params->requested_pix_clk_100hz ==0 ) {
@@ -604,7 +604,6 @@ static uint32_t dce112_get_pix_clk_dividers( struct pll_settings *pll_settings) {struct dce110_clk_src *clk_src =TO_DCE110_CLK_SRC (cs); -DC_LOGGER_INIT ();if (pix_clk_params ==NULL || pll_settings ==NULL || pix_clk_params->requested_pix_clk_100hz ==0 ) {
@@ -1366,8 +1365,6 @@ static uint32_t dcn3_get_pix_clk_dividers(unsigned long long actual_pix_clk_100Hz = pix_clk_params ? pix_clk_params->requested_pix_clk_100hz :0 ;struct dce110_clk_src *clk_src =TO_DCE110_CLK_SRC (cs); -DC_LOGGER_INIT (); -if (pix_clk_params ==NULL || pll_settings ==NULL || pix_clk_params->requested_pix_clk_100hz ==0 ) { DC_LOG_ERROR(
@@ -1437,7 +1434,6 @@ static const struct clock_source_funcs dce110_clk_src_funcs = { .get_pixel_clk_frequency_100hz = get_pixel_clk_frequency_100hz }; - static void get_ss_info_from_atombios( struct dce110_clk_src *clk_src, enum as_signal_type as_signal,
@@ -1450,7 +1446,7 @@ static void get_ss_info_from_atombios(struct spread_spectrum_info *ss_info_cur;struct spread_spectrum_data *ss_data_cur;uint32_t i; -DC_LOGGER_INIT (); +if (ss_entries_num ==NULL ) {DC_LOG_SYNC ("Invalid entry !!!\n" );
@@ -1585,6 +1581,7 @@ static void ss_info_from_atombios_create( }static bool calc_pll_max_vco_construct ( +struct dce110_clk_src *clk_src,struct calc_pll_clock_source *calc_pll_cs,struct calc_pll_clock_source_init_data *init_data) {
@@ -1736,6 +1733,7 @@ bool dce110_clk_src_construct(ss_info_from_atombios_create (clk_src);if (!calc_pll_max_vco_construct ( + clk_src, &clk_src->calc_pll, &calc_pll_cs_init_data)) {ASSERT_CRITICAL (false);
@@ -1750,7 +1748,7 @@ bool dce110_clk_src_construct(if (!calc_pll_max_vco_construct ( - &clk_src->calc_pll_hdmi, &calc_pll_cs_init_data_hdmi)) { + clk_src, &clk_src->calc_pll_hdmi, &calc_pll_cs_init_data_hdmi)) {ASSERT_CRITICAL (false); goto unexpected_failure; }
drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c +11 -5
@@ -821,13 +821,19 @@ void dcn30_set_avmute(struct pipe_ctx *pipe_ctx, bool enable) pipe_ctx->stream_res.stream_enc, enable); -/* Wait for two frame to make sure AV mute is sent out */ +/* Wait for three frames to make sure AV mute is sent out. +* Some HDMI sinks need additional GCP packets to properly +* process the mute state, especially after link re-establishment +* with HDMI 2.0 scrambling enabled. +*/ if (enable && pipe_ctx->stream_res.tg->funcs->is_tg_enabled (pipe_ctx->stream_res.tg)) { +int i; + pipe_ctx->stream_res.tg->funcs->wait_for_state (pipe_ctx->stream_res.tg,CRTC_STATE_VACTIVE ); - pipe_ctx->stream_res.tg->funcs->wait_for_state (pipe_ctx->stream_res.tg,CRTC_STATE_VBLANK ); - pipe_ctx->stream_res.tg->funcs->wait_for_state (pipe_ctx->stream_res.tg,CRTC_STATE_VACTIVE ); - pipe_ctx->stream_res.tg->funcs->wait_for_state (pipe_ctx->stream_res.tg,CRTC_STATE_VBLANK ); - pipe_ctx->stream_res.tg->funcs->wait_for_state (pipe_ctx->stream_res.tg,CRTC_STATE_VACTIVE ); +for (i =0 ; i <3 ; i++) { + pipe_ctx->stream_res.tg->funcs->wait_for_state (pipe_ctx->stream_res.tg,CRTC_STATE_VBLANK ); + pipe_ctx->stream_res.tg->funcs->wait_for_state (pipe_ctx->stream_res.tg,CRTC_STATE_VACTIVE ); + } } } }
drivers/gpu/drm/armada/armada_fbdev.c +1 -11
@@ -43,10 +43,10 @@ static int armada_fbdev_create(struct drm_fb_helper *fbh, struct drm_fb_helper_surface_size *sizes) {struct drm_device *dev = fbh->dev; +struct fb_info *info = fbh->info;struct drm_mode_fb_cmd2 mode;struct armada_framebuffer *dfb;struct armada_gem_object *obj; -struct fb_info *info;int size, ret;void *ptr;
@@ -87,12 +87,6 @@ static int armada_fbdev_create(struct drm_fb_helper *fbh,if (IS_ERR (dfb))return PTR_ERR (dfb); - info =drm_fb_helper_alloc_info (fbh); -if (IS_ERR (info)) { - ret =PTR_ERR (info); - goto err_fballoc; - } - info->fbops = &armada_fb_ops; info->fix.smem_start = obj->phys_addr; info->fix.smem_len = obj->obj.size;
@@ -107,10 +101,6 @@ static int armada_fbdev_create(struct drm_fb_helper *fbh, (unsigned long long)obj->phys_addr);return 0 ; - - err_fballoc: - dfb->fb.funcs->destroy (&dfb->fb); -return ret; } static int armada_fb_probe(struct drm_fb_helper *fbh,
drivers/gpu/drm/display/drm_dp_helper.c +12 -0
@@ -3145,6 +3145,18 @@ int drm_dp_get_pcon_max_frl_bw(const u8 dpcd[DP_RECEIVER_CAP_SIZE],int bw;u8 buf; +if (!drm_dp_is_branch (dpcd)) +return 0 ; + +if (dpcd[DP_DPCD_REV ] <0x11 ) +return 0 ; + +if ((dpcd[DP_DOWNSTREAMPORT_PRESENT ] &DP_DETAILED_CAP_INFO_AVAILABLE ) ==0 ) +return 0 ; + +if ((port_cap[0 ] &DP_DS_PORT_TYPE_MASK ) !=DP_DS_PORT_TYPE_HDMI ) +return 0 ; + buf = port_cap[2 ]; bw = buf &DP_PCON_MAX_FRL_BW ;
drivers/gpu/drm/drm_exec.c +2 -4
@@ -22,7 +22,6 @@* * struct drm_gem_object *obj; * struct drm_exec exec; -* unsigned long index; * int ret; * * drm_exec_init(&exec, DRM_EXEC_INTERRUPTIBLE_WAIT);
@@ -38,7 +37,7 @@* goto error; * } * -* drm_exec_for_each_locked_object(&exec, index, obj) { +* drm_exec_for_each_locked_object(&exec, obj) { * dma_resv_add_fence(obj->resv, fence, DMA_RESV_USAGE_READ); * ... * }
@@ -54,9 +53,8 @@static void drm_exec_unlock_all (struct drm_exec *exec) {struct drm_gem_object *obj; -unsigned long index; -drm_exec_for_each_locked_object_reverse (exec, index, obj) { +drm_exec_for_each_locked_object_reverse (exec, obj) {dma_resv_unlock (obj->resv);drm_gem_object_put (obj); }
drivers/gpu/drm/drm_fb_helper.c +14 -27
83 lines not on this page · raw message
drivers/gpu/drm/drm_fbdev_dma.c +2 -10
@@ -280,9 +280,9 @@ int drm_fbdev_dma_driver_fbdev_probe(struct drm_fb_helper *fb_helper, {struct drm_client_dev *client = &fb_helper->client;struct drm_device *dev = fb_helper->dev; +struct fb_info *info = fb_helper->info;struct drm_client_buffer *buffer;struct drm_framebuffer *fb; -struct fb_info *info;u32 format;struct iosys_map map;int ret;
@@ -312,12 +312,6 @@ int drm_fbdev_dma_driver_fbdev_probe(struct drm_fb_helper *fb_helper, fb_helper->buffer = buffer; fb_helper->fb = fb; - info =drm_fb_helper_alloc_info (fb_helper); -if (IS_ERR (info)) { - ret =PTR_ERR (info); - goto err_drm_client_buffer_vunmap; - } -drm_fb_helper_fill_info (info, fb_helper, sizes);if (fb->funcs->dirty)
@@ -325,12 +319,10 @@ int drm_fbdev_dma_driver_fbdev_probe(struct drm_fb_helper *fb_helper,else ret =drm_fbdev_dma_driver_fbdev_probe_tail (fb_helper, sizes);if (ret) - goto err_drm_fb_helper_release_info; + goto err_drm_client_buffer_vunmap;return 0 ; -err_drm_fb_helper_release_info: -drm_fb_helper_release_info (fb_helper); err_drm_client_buffer_vunmap: fb_helper->fb =NULL ; fb_helper->buffer =NULL ;
drivers/gpu/drm/drm_fbdev_shmem.c +2 -10
@@ -110,10 +110,10 @@ static int drm_fbdev_shmem_helper_fb_probe(struct drm_fb_helper *fb_helper, {struct drm_client_dev *client = &fb_helper->client;struct drm_device *dev = fb_helper->dev; +struct fb_info *info = fb_helper->info;struct drm_client_buffer *buffer;struct drm_gem_shmem_object *shmem;struct drm_framebuffer *fb; -struct fb_info *info;u32 format;struct iosys_map map;int ret;
@@ -142,12 +142,6 @@ static int drm_fbdev_shmem_helper_fb_probe(struct drm_fb_helper *fb_helper, fb_helper->buffer = buffer; fb_helper->fb = fb; - info =drm_fb_helper_alloc_info (fb_helper); -if (IS_ERR (info)) { - ret =PTR_ERR (info); - goto err_drm_client_buffer_vunmap; - } -drm_fb_helper_fill_info (info, fb_helper, sizes); info->fbops = &drm_fbdev_shmem_fb_ops;
@@ -168,12 +162,10 @@ static int drm_fbdev_shmem_helper_fb_probe(struct drm_fb_helper *fb_helper, info->fbdefio = &fb_helper->fbdefio; ret =fb_deferred_io_init (info);if (ret) - goto err_drm_fb_helper_release_info; + goto err_drm_client_buffer_vunmap;return 0 ; -err_drm_fb_helper_release_info: -drm_fb_helper_release_info (fb_helper); err_drm_client_buffer_vunmap: fb_helper->fb =NULL ; fb_helper->buffer =NULL ;
drivers/gpu/drm/drm_fbdev_ttm.c +2 -10
@@ -185,8 +185,8 @@ int drm_fbdev_ttm_driver_fbdev_probe(struct drm_fb_helper *fb_helper, {struct drm_client_dev *client = &fb_helper->client;struct drm_device *dev = fb_helper->dev; +struct fb_info *info = fb_helper->info;struct drm_client_buffer *buffer; -struct fb_info *info;size_t screen_size;void *screen_buffer;u32 format;
@@ -214,12 +214,6 @@ int drm_fbdev_ttm_driver_fbdev_probe(struct drm_fb_helper *fb_helper, goto err_drm_client_framebuffer_delete; } - info =drm_fb_helper_alloc_info (fb_helper); -if (IS_ERR (info)) { - ret =PTR_ERR (info); - goto err_vfree; - } -drm_fb_helper_fill_info (info, fb_helper, sizes); info->fbops = &drm_fbdev_ttm_fb_ops;
@@ -236,12 +230,10 @@ int drm_fbdev_ttm_driver_fbdev_probe(struct drm_fb_helper *fb_helper, info->fbdefio = &fb_helper->fbdefio; ret =fb_deferred_io_init (info);if (ret) - goto err_drm_fb_helper_release_info; + goto err_vfree;return 0 ; -err_drm_fb_helper_release_info: -drm_fb_helper_release_info (fb_helper); err_vfree:vfree (screen_buffer); err_drm_client_framebuffer_delete:
drivers/gpu/drm/drm_gpuvm.c +1 -2
@@ -1451,9 +1451,8 @@ drm_gpuvm_resv_add_fence(struct drm_gpuvm *gpuvm, enum dma_resv_usage extobj_usage) {struct drm_gem_object *obj; -unsigned long index; -drm_exec_for_each_locked_object (exec, index, obj) { +drm_exec_for_each_locked_object (exec, obj) {dma_resv_assert_held (obj->resv); dma_resv_add_fence(obj->resv, fence, drm_gpuvm_is_extobj(gpuvm, obj) ?
drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c +1 -1
@@ -535,7 +535,7 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data, ret =drm_sched_job_init (&submit->sched_job, &ctx->sched_entity[args->pipe], -1 , submit->ctx); +1 , submit->ctx, file->client_id);if (ret) goto err_submit_put;
drivers/gpu/drm/exynos/exynos_drm_fbdev.c +1 -8
@@ -60,18 +60,11 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,struct drm_fb_helper_surface_size *sizes, struct exynos_drm_gem *exynos_gem) { - struct fb_info *fbi; + struct fb_info *fbi = helper->info;struct drm_framebuffer *fb = helper->fb;unsigned int size = fb->width * fb->height * fb->format->cpp[0 ];unsigned long offset; - fbi =drm_fb_helper_alloc_info (helper); -if (IS_ERR (fbi)) { -DRM_DEV_ERROR (to_dma_dev (helper->dev), -"failed to allocate fb info.\n" ); -return PTR_ERR (fbi); - } - fbi->fbops = &exynos_drm_fb_ops;drm_fb_helper_fill_info (fbi, helper, sizes);
drivers/gpu/drm/gma500/fbdev.c +1 -12
@@ -110,7 +110,7 @@ static int psb_fbdev_fb_probe(struct drm_fb_helper *fb_helper,struct drm_device *dev = fb_helper->dev;struct drm_psb_private *dev_priv =to_drm_psb_private (dev);struct pci_dev *pdev =to_pci_dev (dev->dev); -struct fb_info *info; +struct fb_info *info = fb_helper->info;struct drm_framebuffer *fb;struct drm_mode_fb_cmd2 mode_cmd = { };int size;
@@ -165,12 +165,6 @@ static int psb_fbdev_fb_probe(struct drm_fb_helper *fb_helper, fb_helper->fb = fb; - info =drm_fb_helper_alloc_info (fb_helper); -if (IS_ERR (info)) { - ret =PTR_ERR (info); - goto err_drm_framebuffer_unregister_private; - } - info->fbops = &psb_fbdev_fb_ops;/* Accessed stolen memory directly */
@@ -194,11 +188,6 @@ static int psb_fbdev_fb_probe(struct drm_fb_helper *fb_helper,return 0 ; -err_drm_framebuffer_unregister_private: -drm_framebuffer_unregister_private (fb); - fb->obj[0 ] =NULL ; -drm_framebuffer_cleanup (fb); -kfree (fb); err_drm_gem_object_put:drm_gem_object_put (obj);return ret;
drivers/gpu/drm/i915/display/intel_fbdev.c +1 -8
@@ -183,7 +183,7 @@ static int intelfb_create(struct drm_fb_helper *helper, .type = I915_GTT_VIEW_NORMAL, };intel_wakeref_t wakeref; -struct fb_info *info; +struct fb_info *info = helper->info;struct i915_vma *vma;unsigned long flags =0 ;bool prealloc = false;
@@ -236,13 +236,6 @@ static int intelfb_create(struct drm_fb_helper *helper, goto out_unlock; } - info =drm_fb_helper_alloc_info (helper); -if (IS_ERR (info)) { -drm_err (&dev_priv->drm,"Failed to allocate fb_info (%pe)\n" , info); - ret =PTR_ERR (info); - goto out_unpin; - } - ifbdev->helper.fb = &fb->base; info->fbops = &intelfb_ops;
drivers/gpu/drm/i915/display/intel_hdcp.c +359 -340
801 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_hdcp_gsc.c +5 -4
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/i915/display/intel_hdcp_gsc.h +3 -2
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h +2 -1
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/i915/display/intel_vrr.c +8 -2
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/imagination/pvr_queue.c +3 -2
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/imagination/pvr_queue.h +1 -1
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c +6 -1
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/nouveau/nouveau_sched.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/panfrost/panfrost_drv.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/panthor/panthor_fw.c +33 -14
47 lines not on this page · raw message
drivers/gpu/drm/panthor/panthor_sched.c +3 -2
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/panthor/panthor_sched.h +2 -1
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/scheduler/sched_fence.c +3 -1
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c +18 -2
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/xe/display/xe_hdcp_gsc.c +4 -3
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/xe/xe_hw_engine_types.h +8 -0
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/xe/xe_pagefault.c new file +65 -0
65 lines not on this page · raw message
drivers/gpu/drm/xe/xe_pagefault.h new file +19 -0
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/xe/xe_pagefault_types.h new file +136 -0
136 lines not on this page · raw message
drivers/gpu/drm/xe/xe_reg_sr.c +0 -53
53 lines not on this page · raw message
drivers/gpu/drm/xe/xe_reg_whitelist.c +130 -17
147 lines not on this page · raw message
drivers/hwmon/adt7470.c +92 -37
129 lines not on this page · raw message
drivers/hwmon/ina2xx.c +214 -37
251 lines not on this page · raw message
drivers/media/platform/chips-media/wave5/wave5-hw.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c +4 -1
Lines of this file are not shown. View the raw message.
drivers/media/platform/chips-media/wave5/wave5-vpuapi.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/can/ctucanfd/ctucanfd_base.c +9 -5
Lines of this file are not shown. View the raw message.
drivers/net/can/ctucanfd/ctucanfd_pci.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/can/softing/softing_fw.c +32 -14
46 lines not on this page · raw message
drivers/net/can/usb/ems_usb.c +43 -0
43 lines not on this page · raw message
drivers/net/can/usb/etas_es58x/es58x_core.c +0 -1
Lines of this file are not shown. View the raw message.
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c +11 -2
Lines of this file are not shown. View the raw message.
drivers/net/can/usb/peak_usb/pcan_usb_core.c +0 -1
Lines of this file are not shown. View the raw message.
drivers/net/can/usb/peak_usb/pcan_usb_fd.c +39 -1
Lines of this file are not shown. View the raw message.
drivers/net/can/usb/peak_usb/pcan_usb_pro.c +16 -4
Lines of this file are not shown. View the raw message.
drivers/net/dsa/mt7530.c +20 -38
58 lines not on this page · raw message
drivers/net/ethernet/airoha/airoha_eth.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/e1000/e1000_main.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_ethtool.c +5 -5
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_main.c +10 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/idpf/idpf_lib.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/idpf/idpf_txrx.c +1 -4
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/idpf/idpf_txrx.h +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/igbvf/netdev.c +0 -2
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 +41 -17
58 lines not on this page · raw message
drivers/net/ethernet/mediatek/mtk_eth_soc.h +6 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/nvidia/forcedeth.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qlogic/qede/qede_main.c +22 -22
44 lines not on this page · raw message
drivers/net/ethernet/realtek/rtase/rtase_main.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c +8 -6
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/wangxun/libwx/wx_lib.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +15 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h +6 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +42 -4
46 lines not on this page · raw message
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +6 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +10 -4
Lines of this file are not shown. View the raw message.
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/of/of_reserved_mem.c +80 -7
87 lines not on this page · raw message
drivers/phy/xilinx/phy-zynqmp.c +81 -49
130 lines not on this page · raw message
drivers/pinctrl/qcom/pinctrl-sc8280xp.c +11 -10
Lines of this file are not shown. View the raw message.
drivers/power/supply/max17040_battery.c +5 -1
Lines of this file are not shown. View the raw message.
drivers/spi/spi-cadence.c +108 -21
129 lines not on this page · raw message
drivers/target/target_core_transport.c +10 -2
Lines of this file are not shown. View the raw message.
drivers/usb/gadget/function/f_tcm.c +164 -28
192 lines not on this page · raw message
drivers/usb/typec/ucsi/ucsi.c +47 -43
90 lines not on this page · raw message
include/linux/netfilter/nf_conntrack_sip.h +1 -1
Lines of this file are not shown. View the raw message.
include/net/ip_vs.h +37 -8
45 lines not on this page · raw message
include/net/netfilter/nf_conntrack_expect.h +4 -1
Lines of this file are not shown. View the raw message.
kernel/trace/trace.c +9 -35
44 lines not on this page · raw message
mm/kmemleak.c +42 -2
44 lines not on this page · raw message
net/bluetooth/hci_sync.c +101 -36
137 lines not on this page · raw message
net/bluetooth/iso.c +71 -42
113 lines not on this page · raw message
net/bluetooth/mgmt.c +64 -20
84 lines not on this page · raw message
net/can/isotp.c +239 -94
333 lines not on this page · raw message
net/mptcp/pm_userspace.c +44 -45
89 lines not on this page · raw message
net/netfilter/ipvs/ip_vs_core.c +87 -93
180 lines not on this page · raw message
net/netfilter/ipvs/ip_vs_proto_tcp.c +10 -38
48 lines not on this page · raw message
net/netfilter/ipvs/ip_vs_proto_udp.c +13 -41
54 lines not on this page · raw message
net/netfilter/ipvs/ip_vs_xmit.c +30 -12
42 lines not on this page · raw message
net/rxrpc/rtt.c +58 -45
103 lines not on this page · raw message
security/keys/trusted-keys/trusted_dcp.c +11 -4
Lines of this file are not shown. View the raw message.
sound/pci/hda/patch_hdmi.c +42 -6
48 lines not on this page · raw message
tools/testing/kunit/kunit_tool_test.py +42 -0
42 lines not on this page · raw message
tools/testing/selftests/clone3/clone3_set_tid.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/mm/mlock-random-test.c +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.