Linux 6.18.20
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.18.20 kernel.
All users of the 6.18 kernel series must upgrade.
The updated 6.18.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.18.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/netlink/specs/net_shaper.yaml | 12 Makefile | 2 arch/arm64/boot/dts/renesas/r9a09g057.dtsi | 37 - arch/arm64/boot/dts/renesas/r9a09g077.dtsi | 4 arch/arm64/boot/dts/renesas/r9a09g087.dtsi | 4 arch/arm64/boot/dts/renesas/rzg3s-smarc-som.dtsi | 2 arch/arm64/boot/dts/renesas/rzt2h-n2h-evk-common.dtsi | 1 arch/arm64/boot/dts/renesas/rzv2-evk-cn15-sd.dtso | 1 arch/arm64/kernel/rsi.c | 3 arch/loongarch/include/asm/uaccess.h | 14 arch/loongarch/kernel/inst.c | 21 arch/parisc/kernel/cache.c | 4 arch/x86/events/core.c | 3 arch/x86/events/intel/core.c | 31 - arch/x86/kernel/apic/x2apic_uv_x.c | 18 drivers/acpi/acpi_processor.c | 15 drivers/acpi/acpica/acpredef.h | 2 drivers/ata/libata-core.c | 3 drivers/ata/libata-scsi.c | 2 drivers/base/power/runtime.c | 1 drivers/block/ublk_drv.c | 12 drivers/bluetooth/btqca.c | 2 drivers/cache/ax45mp_cache.c | 4 drivers/cache/starfive_starlink_cache.c | 4 drivers/char/ipmi/ipmi_msghandler.c | 142 +++- drivers/crypto/atmel-sha204a.c | 5 drivers/crypto/ccp/sev-dev.c | 4 drivers/crypto/padlock-sha.c | 7 drivers/firewire/net.c | 5 drivers/firmware/arm_ffa/driver.c | 8 drivers/firmware/arm_scmi/notify.c | 4 drivers/firmware/arm_scpi.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 4 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 21 drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c | 9 drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.c | 3 drivers/gpu/drm/amd/amdgpu/mmhub_v3_0.c | 3 drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_1.c | 3 drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_2.c | 3 drivers/gpu/drm/amd/amdgpu/mmhub_v4_1_0.c | 3 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 drivers/gpu/drm/amd/display/dc/clk_mgr/clk_mgr.c | 8 drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c | 3 drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 4 drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 2 drivers/gpu/drm/drm_file.c | 5 drivers/gpu/drm/drm_mode_config.c | 9 drivers/gpu/drm/i915/display/intel_display.c | 2 drivers/gpu/drm/i915/display/intel_display_power_well.c | 2 drivers/gpu/drm/i915/display/intel_display_types.h | 1 drivers/gpu/drm/i915/display/intel_dmc.c | 3 drivers/gpu/drm/i915/display/intel_psr.c | 16 drivers/gpu/drm/i915/display/intel_vdsc.c | 23 drivers/gpu/drm/i915/display/intel_vdsc.h | 3 drivers/gpu/drm/i915/display/intel_vdsc_regs.h | 12 drivers/gpu/drm/i915/display/intel_vrr.c | 17 drivers/gpu/drm/i915/gt/intel_engine_cs.c | 3 drivers/gpu/drm/imagination/pvr_device.c | 17 drivers/gpu/drm/imagination/pvr_power.c | 22 drivers/gpu/drm/radeon/si_dpm.c | 4 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 3 drivers/gpu/drm/xe/xe_ggtt.c | 10 drivers/gpu/drm/xe/xe_ggtt_types.h | 5 drivers/gpu/drm/xe/xe_guc_ct.c | 1 drivers/gpu/drm/xe/xe_oa.c | 7 drivers/gpu/drm/xe/xe_sync.c | 6 drivers/gpu/drm/xe/xe_vm_madvise.c | 3 drivers/hid/bpf/hid_bpf_dispatch.c | 2 drivers/hwmon/max6639.c | 10 drivers/hwmon/pmbus/ina233.c | 2 drivers/hwmon/pmbus/isl68137.c | 7 drivers/hwmon/pmbus/mp2869.c | 35 - drivers/hwmon/pmbus/mp2975.c | 2 drivers/i2c/busses/i2c-cp2615.c | 3 drivers/i2c/busses/i2c-fsi.c | 1 drivers/i2c/busses/i2c-pxa.c | 17 drivers/iommu/intel/dmar.c | 3 drivers/iommu/intel/svm.c | 12 drivers/iommu/iommu-sva.c | 12 drivers/irqchip/irq-riscv-rpmi-sysmsi.c | 1 drivers/mmc/host/sdhci-pci-gli.c | 9 drivers/mmc/host/sdhci.c | 9 drivers/mtd/nand/raw/brcmnand/brcmnand.c | 6 drivers/mtd/nand/raw/cadence-nand-controller.c | 2 drivers/mtd/nand/raw/nand_base.c | 14 drivers/mtd/nand/raw/pl35x-nand-controller.c | 3 drivers/mtd/parsers/redboot.c | 6 drivers/net/bonding/bond_debugfs.c | 16 drivers/net/bonding/bond_main.c | 8 drivers/net/dsa/bcm_sf2.c | 8 drivers/net/ethernet/airoha/airoha_eth.c | 1 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 drivers/net/ethernet/broadcom/bnxt/bnxt.h | 2 drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c | 2 drivers/net/ethernet/cadence/macb_main.c | 161 ++++- drivers/net/ethernet/cadence/macb_ptp.c | 4 drivers/net/ethernet/intel/iavf/iavf_main.c | 9 drivers/net/ethernet/intel/igc/igc.h | 2 drivers/net/ethernet/intel/igc/igc_main.c | 14 drivers/net/ethernet/intel/igc/igc_ptp.c | 33 + drivers/net/ethernet/intel/libie/fwlog.c | 49 + drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h | 1 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_offload.c | 50 - drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c | 23 drivers/net/ethernet/microsoft/mana/hw_channel.c | 6 drivers/net/netconsole.c | 2 drivers/net/netdevsim/netdev.c | 5 drivers/net/usb/aqc111.c | 12 drivers/net/usb/cdc_ncm.c | 10 drivers/net/wireless/ath/ath9k/channel.c | 6 drivers/net/wireless/mediatek/mt76/scan.c | 4 drivers/net/wireless/ti/wlcore/tx.c | 2 drivers/net/wireless/virtual/mac80211_hwsim.c | 1 drivers/nfc/nxp-nci/i2c.c | 4 drivers/nvdimm/bus.c | 5 drivers/pmdomain/bcm/bcm2835-power.c | 12 drivers/soc/fsl/qbman/qman.c | 24 drivers/soc/fsl/qe/qmc.c | 4 drivers/soc/microchip/mpfs-sys-controller.c | 13 drivers/soc/rockchip/grf.c | 1 drivers/spi/spi-amlogic-spifc-a4.c | 46 - drivers/spi/spi-amlogic-spisg.c | 12 drivers/spi/spi.c | 25 drivers/tee/tee_shm.c | 27 drivers/tty/serial/8250/8250.h | 25 drivers/tty/serial/8250/8250_dma.c | 15 drivers/tty/serial/8250/8250_dw.c | 296 +++++++--- drivers/tty/serial/8250/8250_pci.c | 17 drivers/tty/serial/8250/8250_port.c | 75 +- drivers/tty/serial/serial_core.c | 5 drivers/tty/serial/uartlite.c | 1 drivers/tty/vt/vt.c | 8 drivers/usb/serial/f81232.c | 77 +- drivers/xen/privcmd.c | 73 ++ fs/binfmt_elf_fdpic.c | 6 fs/btrfs/tree-checker.c | 2 fs/btrfs/tree-log.c | 6 fs/nfsd/export.c | 63 +- fs/nfsd/export.h | 7 fs/nfsd/nfs4xdr.c | 9 fs/nfsd/nfsctl.c | 22 fs/nfsd/state.h | 17 fs/nsfs.c | 13 fs/smb/client/cifsfs.c | 7 fs/smb/client/cifsproto.h | 1 fs/smb/client/connect.c | 4 fs/smb/client/file.c | 11 fs/smb/client/misc.c | 42 + fs/smb/client/trace.h | 2 fs/smb/server/auth.c | 22 fs/smb/server/smb2pdu.c | 17 fs/tests/exec_kunit.c | 3 include/linux/auxvec.h | 2 include/linux/console_struct.h | 1 include/linux/etherdevice.h | 3 include/linux/if_ether.h | 3 include/linux/io_uring_types.h | 3 include/linux/netdevice.h | 6 include/linux/ns_common.h | 2 include/linux/security.h | 1 include/linux/serial_8250.h | 1 include/net/mac80211.h | 4 include/net/netfilter/nf_tables.h | 2 include/net/sch_generic.h | 33 + include/net/udp_tunnel.h | 2 io_uring/kbuf.c | 14 io_uring/poll.c | 9 kernel/crash_dump_dm_crypt.c | 4 kernel/nscommon.c | 6 kernel/sched/ext.c | 132 +++- kernel/sched/idle.c | 30 - kernel/trace/ring_buffer.c | 2 kernel/trace/trace.c | 36 - kernel/trace/trace_functions_graph.c | 15 lib/bootconfig.c | 3 mm/huge_memory.c | 12 mm/rmap.c | 21 net/batman-adv/bat_iv_ogm.c | 3 net/bluetooth/hci_conn.c | 4 net/bluetooth/hci_sync.c | 2 net/bluetooth/hidp/core.c | 16 net/bluetooth/l2cap_core.c | 51 + net/bluetooth/mgmt.c | 7 net/bluetooth/smp.c | 2 net/bridge/br_cfm.c | 4 net/ethernet/eth.c | 9 net/ipv4/icmp.c | 4 net/ipv4/ip_gre.c | 3 net/mac80211/cfg.c | 12 net/mac80211/chan.c | 6 net/mac80211/debugfs.c | 14 net/mac80211/mesh.c | 3 net/mac80211/sta_info.c | 7 net/mac80211/tx.c | 4 net/mac802154/iface.c | 4 net/mpls/af_mpls.c | 1 net/mptcp/pm_kernel.c | 2 net/netfilter/nf_bpf_link.c | 2 net/netfilter/nf_conntrack_h323_asn1.c | 4 net/netfilter/nf_conntrack_netlink.c | 26 net/netfilter/nf_conntrack_sip.c | 6 net/netfilter/nf_tables_api.c | 5 net/netfilter/nfnetlink_osf.c | 13 net/netfilter/nft_ct.c | 4 net/netfilter/nft_dynset.c | 10 net/netfilter/xt_CT.c | 4 net/netfilter/xt_time.c | 4 net/phonet/af_phonet.c | 5 net/rose/af_rose.c | 5 net/sched/sch_generic.c | 27 net/sched/sch_ingress.c | 14 net/sched/sch_teql.c | 7 net/shaper/shaper.c | 158 +++-- net/shaper/shaper_nl_gen.c | 12 net/shaper/shaper_nl_gen.h | 5 net/smc/af_smc.c | 23 net/smc/smc.h | 5 net/smc/smc_close.c | 2 net/sunrpc/cache.c | 26 net/wireless/pmsr.c | 1 security/security.c | 1 tools/bootconfig/main.c | 7 tools/testing/selftests/hid/progs/hid_bpf_helpers.h | 12 224 files changed, 2173 insertions(+), 958 deletions(-)
AlanSong-oc (1):
crypto: padlock-sha - Disable for Zhaoxin processor
Alessio Belle (2):
drm/imagination: Fix deadlock in soft reset sequence drm/imagination: Synchronize interrupts before suspending the GPU
Alex Deucher (9):
drm/amdgpu/gmc9.0: add bounds checking for cid drm/amdgpu/mmhub2.0: add bounds checking for cid drm/amdgpu/mmhub2.3: add bounds checking for cid drm/amdgpu/mmhub3.0.1: add bounds checking for cid drm/amdgpu/mmhub3.0.2: add bounds checking for cid drm/amdgpu/mmhub3.0: add bounds checking for cid drm/amdgpu/mmhub4.1.0: add bounds checking for cid drm/radeon: apply state adjust rules to some additional HAINAN vairants drm/amdgpu: apply state adjust rules to some additional HAINAN vairants
Anas Iqbal (1):
net: dsa: bcm_sf2: fix missing clk_disable_unprepare() in error paths
Andrei Vagin (1):
binfmt_elf_fdpic: fix AUXV size calculation for ELF_HWCAP3 and ELF_HWCAP4
Andy Nguyen (1):
drm/amd: fix dcn 2.01 check
Ashutosh Dixit (1):
drm/xe/oa: Allow reading after disabling OA stream
Bart Van Assche (1):
PM: runtime: Fix a race condition related to device removal
Benjamin Tissoires (2):
selftests/hid: fix compilation when bpf_wq and hid_device are not exported
HID: bpf: prevent buffer overflow in hid_hw_request
Breno Leitao (2):
netconsole: fix sysdata_release_enabled_show checking wrong flag perf/x86: Move event pointer setup earlier in x86_pmu_enable()
Chen Ni (2):
mtd: rawnand: cadence: Fix error check for dma_alloc_coherent() in cadence_nand_init()
soc: fsl: cpm1: qmc: Fix error check for devm_ioremap_resource() in qmc_qe_init_resources()
Chris Down (1):
mm/huge_memory: fix use of NULL folio in move_pages_huge_pmd()
Christian Brauner (1):
nsfs: tighten permission checks for ns iteration ioctls
Christian Eggers (3):
Bluetooth: LE L2CAP: Disconnect if received packet's SDU exceeds IMTU
Bluetooth: LE L2CAP: Disconnect if sum of payload sizes exceed SDU
Bluetooth: SMP: make SM/PER/KDU/BI-04-C happy
Christophe JAILLET (1):
i2c: fsi: Fix a potential leak in fsi_i2c_probe()
Chuck Lever (2):
NFSD: Defer sub-object cleanup in export put callbacks
NFSD: Hold net reference for the lifetime of /proc/fs/nfs/exports fd
Claudiu Beznea (1):
arm64: dts: renesas: rzg3s-smarc-som: Set bypass for Versa3 PLL2
Corey Minyard (2):
ipmi: Consolidate the run to completion checking for xmit msgs lock ipmi:msghandler: Handle error returns from the SMI sender
Cosmin Ratiu (1):
net/mlx5: qos: Restrict RTNL area to avoid a lock cycle
Cristian Marussi (1):
firmware: arm_scmi: Fix NULL dereference on notify error path
Damien Le Moal (2):
ata: libata-core: disable LPM on ADATA SU680 SSD
ata: libata-scsi: report correct sense field pointer in ata_scsiop_maint_in()
Daniel Borkmann (1):
clsact: Fix use-after-free in init/destroy rollback asymmetry
Dapeng Mi (1):
perf/x86/intel: Add missing branch counters constraint apply
Dev Jain (1):
mm/rmap: fix incorrect pte restoration for lazyfree folios
Dipayaan Roy (1):
net: mana: fix use-after-free in mana_hwc_destroy_channel() by reordering teardown
Dmitry Baryshkov (1):
Bluetooth: qca: fix ROM version reading on WCN3998 chips
Eric Dumazet (1):
bonding: prevent potential infinite loop in bond_header_parse()
Fabrizio Castro (1):
arm64: dts: renesas: r9a09g057: Remove wdt{0,2,3} nodesFedor Pchelkin (2):
net: macb: fix use-after-free access to PTP clock
net: macb: fix uninitialized rx_fs_lock
Felix Fietkau (2):
mac80211: fix crash in ieee80211_chan_bw_change for AP_VLAN stations
wifi: mac80211: always free skb on ieee80211_tx_prepare_skb() failure
Felix Gu (6):
cache: starfive: fix device node leak in starlink_cache_init()
cache: ax45mp: Fix device node reference leak in ax45mp_cache_init()
firmware: arm_scpi: Fix device_node reference leak in probe path irqchip/riscv-rpmi-sysmsi: Fix mailbox channel leak in rpmi_sysmsi_probe()
spi: amlogic: spifc-a4: Remove redundant clock cleanup
spi: amlogic-spisg: Fix memory leak in aml_spisg_probe()
Filipe Manana (1):
btrfs: log new dentries when logging parent dir of a conflicting inode
Finn Thain (1):
mtd: Avoid boot crash in RedBoot partition table parser
Florian Westphal (1):
netfilter: bpf: defer hook memory release until rcu readers are done
Gabor Juhos (1):
i2c: pxa: defer reset on Armada 3700 when recovery is used
Greg Kroah-Hartman (1):
Linux 6.18.20
Guanghui Feng (1):
iommu/vt-d: Fix intel iommu iotlb sync hardlockup and retry
Guenter Roeck (3):
crypto: ccp - Fix leaking the same page twice
wifi: wlcore: Return -ENOMEM instead of -EAGAIN if there is not enough headroom
hwmon: (max6639) Fix pulses-per-revolution implementation
Helge Deller (1):
parisc: Flush correct cache in cacheflush() syscall
Hyunwoo Kim (4):
bridge: cfm: Fix race condition in peer_mep deletion
netfilter: ctnetlink: fix use-after-free in ctnetlink_dump_exp_ct()
ksmbd: fix use-after-free of share_conf in compound request
ksmbd: fix use-after-free in durable v2 replay of active file handles
Ian Forbes (1):
drm/vmwgfx: Don't overwrite KMS surface dirty tracker
Ian Ray (1):
NFC: nxp-nci: allow GPIOs to sleep
Ilpo Järvinen (7):
serial: 8250: Protect LCR write in shutdown
serial: 8250_dw: Avoid unnecessary LCR writes
serial: 8250: Add serial8250_handle_irq_locked()
serial: 8250_dw: Rework dw8250_handle_irq() locking and IIR handling
serial: 8250_dw: Rework IIR_NO_INT handling to stop interrupt storm
serial: 8250: Add late synchronize_irq() to shutdown to handle DW UART BUSY
serial: 8250_dw: Ensure BUSY is deasserted
Imre Deak (1):
drm/i915/dmc: Fix an unlikely NULL pointer deference at probe
Ira Weiny (1):
nvdimm/bus: Fix potential use after free in asynchronous initialization
Jakub Kicinski (2):
net: shaper: protect late read accesses to the hierarchy
net: shaper: protect from late creation of hierarchy
Jamal Hadi Salim (1):
net/sched: teql: Fix double-free in teql_master_xmit
Jeff Layton (2):
nfsd: fix heap overflow in NFSv4.0 LOCK replay cache
sunrpc: fix cache_request leak in cache_release
Jenny Guanni Qu (3):
netfilter: nf_conntrack_h323: fix OOB read in decode_int() CONS case
netfilter: xt_time: use unsigned int for monthday bit shift
netfilter: nf_conntrack_h323: check for zero length in DecodeQ931()
Jens Axboe (3):
io_uring/poll: fix multishot recv missing EOF on wakeup race io_uring/kbuf: fix missing BUF_MORE for incremental buffers at EOF io_uring/kbuf: propagate BUF_MORE through early buffer commit path
Jesse.Zhang (1):
drm/amdgpu: Limit BO list entry count to prevent resource exhaustion
Ji-Ze Hong (Peter Hong) (1):
USB: serial: f81232: fix incomplete serial port generation
Jianbo Liu (2):
net/mlx5e: Prevent concurrent access to IPSec ASO context net/mlx5e: Fix race condition during IPSec ESN update
Jiayuan Chen (3):
serial: core: fix infinite loop in handle_tx() for PORT_UNKNOWN net/rose: fix NULL pointer dereference in rose_transmit_link on reconnect net/smc: fix NULL dereference and UAF in smc_tcp_syn_recv_sock()
Johan Hovold (3):
spi: fix use-after-free on controller registration failure
spi: fix statistics allocation
i2c: cp2615: fix serial string NULL-deref at probe
Johannes Berg (1):
wifi: mac80211: remove keys after disabling beaconing
Jonas Karlman (1):
drm/bridge: dw-hdmi-qp: fix multi-channel audio output
Josh Law (2):
lib/bootconfig: check xbc_init_node() return in override path tools/bootconfig: fix fd leak in load_xbc_file() on fstat failure
Jouni Högander (4):
drm/i915/dsc: Add Selective Update register definitions drm/i915/dsc: Add helper for writing DSC Selective Update ET parameters drm/i915/psr: Write DSC parameters on Selective Update in ET mode drm/i915/psr: Compute PSR entry_setup_frames into intel_crtc_state
Juergen Gross (2):
xen/privcmd: restrict usage in unprivileged domU xen/privcmd: add boot control for restricted usage in domU
Junrui Luo (1):
bnxt_en: fix OOB access in DBG_BUF_PRODUCER async event handler
Justin Chen (1):
net: bcmgenet: increase WoL poll timeout
Kamal Dasu (2):
mtd: rawnand: serialize lock/unlock against other NAND operations
mtd: rawnand: brcmnand: skip DMA during panic write
Kees Cook (1):
fs/tests: exec: Remove bad test vector
Kevin Hao (3):
net: macb: Introduce gem_init_rx_ring()
net: macb: Reinitialize tx/rx queue pointer registers and rx ring during resume
net: macb: Shuffle the tx ring before enabling tx
Kohei Enju (1):
igc: fix missing update of skb->tail in igc_xmit_frame()
Kuniyuki Iwashima (1):
wifi: mac80211: Fix static_branch_dec() underflow for aql_disable.
Kyle Meyer (1):
x86/platform/uv: Handle deconfigured sockets
Lad Prabhakar (4):
arm64: dts: renesas: rzt2h-n2h-evk: Add ramp delay for SD0 card regulator
arm64: dts: renesas: rzv2-evk-cn15-sd: Add ramp delay for SD0 regulator
arm64: dts: renesas: r9a09g077: Fix CPG register region sizes
arm64: dts: renesas: r9a09g087: Fix CPG register region sizes
Li Xiasong (1):
MPTCP: fix lock class name family in pm_nl_create_listen_socket
Lizhi Hou (1):
iommu/sva: Fix crash in iommu_sva_unbind_device()
Lorenzo Bianconi (1):
net: airoha: Remove airoha_dev_stop() in airoha_remove()
Lu Baolu (1):
iommu/vt-d: Only handle IOPF for SVA when PRI is supported
Luiz Augusto von Dentz (3):
Bluetooth: L2CAP: Fix accepting multiple L2CAP_ECRED_CONN_REQ
Bluetooth: ISO: Fix defer tests being unstable
Bluetooth: HIDP: Fix possible UAF
Lukas Johannes Möller (3):
Bluetooth: L2CAP: Fix type confusion in l2cap_ecred_reconf_rsp()
Bluetooth: L2CAP: Validate L2CAP_INFO_RSP payload length before access
netfilter: nf_conntrack_sip: fix Content-Length u32 truncation in sip_help_tcp()
Luke Wang (1):
mmc: sdhci: fix timing selection for 1-bit bus width
Maarten Lankhorst (1):
drm: Fix use-after-free on framebuffers and property blobs when calling drm_dev_unplug
Maciej Andrzejewski ICEYE (1):
serial: uartlite: fix PM runtime usage count underflow on probe
Martin Roukala (né Peres) (1):
serial: 8250_pci: add support for the AX99100
Masami Hiramatsu (Google) (1):
ring-buffer: Fix to update per-subbuf entries of persistent ring buffer
Matthew Brost (1):
drm/xe: Open-code GGTT MMIO access protection
Matthew Schwartz (1):
mmc: sdhci-pci-gli: fix GL9750 DMA write corruption
Matthew Wilcox (1):
tee: shm: Remove refcounting of kernel pages
Maíra Canal (1):
pmdomain: bcm: bcm2835-power: Increase ASB control timeout
Mehul Rao (1):
ublk: fix NULL pointer dereference in ublk_ctrl_set_size()
Michael Grzeschik (1):
Bluetooth: hci_sync: Fix hci_le_create_conn_sync
Michal Swiatkowski (1):
libie: prevent memleak in fwlog code
Muhammad Hammad Ijaz (1):
net: mvpp2: guard flow control update with global_tx_fc in buffer switching
Namjae Jeon (2):
ksmbd: unset conn->binding on failed binding request
ksmbd: use volume UUID in FS_OBJECT_ID_INFORMATION
Nicolas Cavallari (1):
wifi: mac80211: use jiffies_delta_to_msecs() for sta_info inactive times
Nicolas Pitre (1):
vt: save/restore unicode screen buffer for alternate screen
Nikola Z. Ivanov (1):
net: usb: aqc111: Do not perform PM inside suspend callback
Olivier Sobrie (1):
mtd: rawnand: pl353: make sure optimal timings are applied
Ovidiu Panait (1):
arm64: dts: renesas: r9a09g057: Add RTC node
Pablo Neira Ayuso (4):
nf_tables: nft_dynset: fix possible stateful expression memleak in error path
netfilter: nft_ct: drop pending enqueued packets on removal
netfilter: xt_CT: drop pending enqueued packets on template removal
netfilter: nf_tables: release flowtable after rcu grace period on error
Paulo Alcantara (1):
smb: client: fix krb5 mount with username option
Peddolla Harshavardhan Reddy (1):
wifi: cfg80211: cancel pmsr_free_wk in cfg80211_pmsr_wdev_down
Peng Zhang (1):
serial: 8250: always disable IRQ during THRE test
Petr Oros (1):
iavf: fix VLAN filter lost on add/delete race
Rafael J. Wysocki (2):
sched: idle: Consolidate the handling of two special cases
ACPI: processor: Fix previous acpi_processor_errata_piix4() fix
Rahul Bukte (1):
drm/i915/gt: Check set_default_submission() before deferencing
Raul E Rangel (1):
serial: 8250: Fix TX deadlock when using DMA
Richard Genoud (1):
soc: fsl: qbman: fix race condition in qman_destroy_fq
Sabrina Dubroca (1):
mpls: add missing unregister_netdevice_notifier to mpls_init
Saket Dumbre (1):
ACPICA: Update the format of Arg3 of _DSM
Sanman Pradhan (4):
hwmon: (pmbus/ina233) Add error check for pmbus_read_word_data() return value
hwmon: (pmbus/mp2975) Add error check for pmbus_read_word_data() return value
hwmon: (pmbus/mp2869) Check pmbus_read_byte_data() before using its return value
hwmon: (pmbus/isl68137) Fix unchecked return value and use sysfs_emit()
Shaurya Rane (1):
Bluetooth: L2CAP: Fix use-after-free in l2cap_unregister_user
Shawn Lin (1):
soc: rockchip: grf: Add missing of_node_put() when returning
Shengming Hu (1):
fgraph: Fix thresh_return nosleeptime double-adjust
Shuicheng Lin (1):
drm/xe/sync: Fix user fence leak on alloc failure
Shyam Prasad N (1):
cifs: open files should not hold ref on superblock
Srinivasan Shanmugam (1):
drm/amd/display: Fix DisplayID not-found handling in parse_edid_displayid_vrr()
Steven Rostedt (2):
tracing: Fix failure to read user space from system call trace events
tracing: Fix trace_marker copy link list updates
Suzuki K Poulose (1):
arm64: realm: Fix PTE_NS_SHARED for 52bit PA support
Tejun Heo (3):
sched_ext: Fix starvation of scx_enable() under fair-class saturation
sched_ext: Simplify breather mechanism with scx_aborting flag
sched_ext: Disable preemption between scx_claim_exit() and kicking helper work
Thorsten Blum (3):
crash_dump: don't log dm-crypt key bytes in read_key_from_user_keying
crypto: atmel-sha204a - Fix OOM ->tfm_count leak
ksmbd: Don't log keys in SMB3 signing and encryption key generation
Théo Lebrun (1):
net: macb: sort #includes
Tiezhu Yang (3):
LoongArch: Give more information if kmem access failed
LoongArch: No need to flush icache if text copy failed
LoongArch: Check return values for set_memory_{rw,rox}
Tobi Gaertner (2):
net: usb: cdc_ncm: add ndpoffset to NDP16 nframes bounds check
net: usb: cdc_ncm: add ndpoffset to NDP32 nframes bounds check
Varun Gupta (1):
drm/xe: Fix memory leak in xe_vm_madvise_ioctl
Ville Syrjälä (2):
drm/i915/vrr: Move HAS_VRR() check into intel_vrr_set_transcoder_timings() drm/i915/vrr: Configure VRR timings after enabling TRANS_DDI_FUNC_CTL
Wang Tao (1):
Bluetooth: MGMT: Fix list corruption and UAF in command complete handlers
Wei Yang (1):
mm/huge_memory: fix early failure try_to_migrate() when split huge pmd for shared THP
Weiming Shi (2):
nfnetlink_osf: validate individual option lengths in fingerprints
icmp: fix NULL pointer dereference in icmp_tag_validation()
Wesley Atwell (1):
netdevsim: drop PSP ext ref on forward failure
Xi Ruoyao (1):
drm/amd/display: Wrap dcn32_override_min_req_memclk() in DC_FP_{START, END}Xiang Mei (3):
wifi: mac80211: fix NULL deref in mesh_matches_local()
udp_tunnel: fix NULL deref caused by udp_sock_create6 when CONFIG_IPV6=n
net: bonding: fix NULL deref in bond_debug_rlb_hash_show
Yang Yang (1):
batman-adv: avoid OGM aggregation when skb tailroom is insufficient
Yeoreum Yun (1):
firmware: arm_ffa: Remove vm_id argument in ffa_rxtx_unmap()
Zdenek Bouska (1):
igc: fix page fault in XDP TX timestamps handling
Zhanjun Dong (1):
drm/xe/guc: Ensure CT state transitions via STOP before DISABLED
ZhengYuan Huang (1):
btrfs: tree-checker: fix misleading root drop_level error message
Zi Yan (1):
mm/huge_memory: fix a folio_split() race condition with folio_try_get()
Zilin Guan (1):
soc: microchip: mpfs: Fix memory leak in mpfs_sys_controller_probe()
Greg Kroah-Hartman
maintainerDocumentation/netlink/specs/net_shaper.yaml +6 -6
@@ -247,8 +247,8 @@ operations: flags: [admin-perm] do: - pre: net-shaper-nl-pre-doit - post: net-shaper-nl-post-doit + pre: net-shaper-nl-pre-doit-write + post: net-shaper-nl-post-doit-write request: attributes: - ifindex
@@ -278,8 +278,8 @@ operations: flags: [admin-perm] do: - pre: net-shaper-nl-pre-doit - post: net-shaper-nl-post-doit + pre: net-shaper-nl-pre-doit-write + post: net-shaper-nl-post-doit-write request: attributes: *ns-binding
@@ -309,8 +309,8 @@ operations: flags: [admin-perm] do: - pre: net-shaper-nl-pre-doit - post: net-shaper-nl-post-doit + pre: net-shaper-nl-pre-doit-write + post: net-shaper-nl-post-doit-write request: attributes: - ifindex
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 18 -SUBLEVEL = 19 +SUBLEVEL = 20 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm64/boot/dts/renesas/r9a09g057.dtsi +11 -26
@@ -546,16 +546,6 @@ ostm7: timer@12c03000 { status = "disabled"; }; - wdt0: watchdog@11c00400 { - compatible = "renesas,r9a09g057-wdt"; - reg = <0 0x11c00400 0 0x400>; - clocks = <&cpg CPG_MOD 0x4b>, <&cpg CPG_MOD 0x4c>; - clock-names = "pclk", "oscclk"; - resets = <&cpg 0x75>; - power-domains = <&cpg>; - status = "disabled"; - }; - wdt1: watchdog@14400000 { compatible = "renesas,r9a09g057-wdt"; reg = <0 0x14400000 0 0x400>;
@@ -566,23 +556,18 @@ wdt1: watchdog@14400000 { status = "disabled"; }; - wdt2: watchdog@13000000 { - compatible = "renesas,r9a09g057-wdt"; - reg = <0 0x13000000 0 0x400>; - clocks = <&cpg CPG_MOD 0x4f>, <&cpg CPG_MOD 0x50>; - clock-names = "pclk", "oscclk"; - resets = <&cpg 0x77>; - power-domains = <&cpg>; - status = "disabled"; - }; - - wdt3: watchdog@13000400 { - compatible = "renesas,r9a09g057-wdt"; - reg = <0 0x13000400 0 0x400>; - clocks = <&cpg CPG_MOD 0x51>, <&cpg CPG_MOD 0x52>; - clock-names = "pclk", "oscclk"; - resets = <&cpg 0x78>; + rtc: rtc@11c00800 { + compatible = "renesas,r9a09g057-rtca3", "renesas,rz-rtca3"; + reg = <0 0x11c00800 0 0x400>; + interrupts = <GIC_SPI 524 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 525 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 526 IRQ_TYPE_EDGE_RISING>; + interrupt-names = "alarm", "period", "carry"; + clocks = <&cpg CPG_MOD 0x53>, <&rtxin_clk>; + clock-names = "bus", "counter"; power-domains = <&cpg>; + resets = <&cpg 0x79>, <&cpg 0x7a>; + reset-names = "rtc", "rtest"; status = "disabled"; };
arch/arm64/boot/dts/renesas/r9a09g077.dtsi +2 -2
@@ -267,8 +267,8 @@ i2c2: i2c@81008000 { cpg: clock-controller@80280000 { compatible = "renesas,r9a09g077-cpg-mssr"; - reg = <0 0x80280000 0 0x1000>, - <0 0x81280000 0 0x9000>; + reg = <0 0x80280000 0 0x10000>, + <0 0x81280000 0 0x10000>; clocks = <&extal_clk>; clock-names = "extal"; #clock-cells = <2>;
arch/arm64/boot/dts/renesas/r9a09g087.dtsi +2 -2
@@ -267,8 +267,8 @@ i2c2: i2c@81008000 { cpg: clock-controller@80280000 { compatible = "renesas,r9a09g087-cpg-mssr"; - reg = <0 0x80280000 0 0x1000>, - <0 0x81280000 0 0x9000>; + reg = <0 0x80280000 0 0x10000>, + <0 0x81280000 0 0x10000>; clocks = <&extal_clk>; clock-names = "extal"; #clock-cells = <2>;
arch/arm64/boot/dts/renesas/rzg3s-smarc-som.dtsi +1 -1
@@ -166,7 +166,7 @@ versa3: clock-generator@68 { <100000000>; renesas,settings = [ 80 00 11 19 4c 42 dc 2f 06 7d 20 1a 5f 1e f2 27 - 00 40 00 00 00 00 00 00 06 0c 19 02 3f f0 90 86 + 00 40 00 00 00 00 00 00 06 0c 19 02 3b f0 90 86 a0 80 30 30 9c ]; };
arch/arm64/boot/dts/renesas/rzt2h-n2h-evk-common.dtsi +1 -0
@@ -49,6 +49,7 @@ vqmmc_sdhi0: regulator-vqmmc-sdhi0 { regulator-max-microvolt = <3300000>; gpios-states = <0>; states = <3300000 0>, <1800000 1>; + regulator-ramp-delay = <60>; }; #endif
arch/arm64/boot/dts/renesas/rzv2-evk-cn15-sd.dtso +1 -0
@@ -25,6 +25,7 @@ vqmmc_sdhi0: regulator-vqmmc-sdhi0 { regulator-max-microvolt = <3300000>; gpios-states = <0>; states = <3300000 0>, <1800000 1>; + regulator-ramp-delay = <60>; }; };
arch/arm64/kernel/rsi.c +2 -1
@@ -12,6 +12,7 @@#include <asm/io.h> #include <asm/mem_encrypt.h> +#include <asm/pgtable.h> #include <asm/rsi.h> static struct realm_config config;
@@ -146,7 +147,7 @@ void __init arm64_rsi_init(void)return ;if (WARN_ON (rsi_get_realm_config (&config)))return ; - prot_ns_shared =BIT (config.ipa_bits -1 ); + prot_ns_shared =__phys_to_pte_val (BIT (config.ipa_bits -1 ));if (arm64_ioremap_prot_hook_register (realm_ioremap_hook))return ;
arch/loongarch/include/asm/uaccess.h +12 -2
@@ -196,8 +196,13 @@ do { \ \__get_kernel_common (*((type *)(dst)),sizeof (type), \ (__force type *)(src)); \ -if (unlikely (__gu_err)) \ +if (unlikely (__gu_err)) { \ +pr_info ("%s: memory access failed, ecode 0x%x\n" , \ + __func__,read_csr_excode ()); \ +pr_info ("%s: the caller is %pS\n" , \ + __func__,__builtin_return_address (0 )); \ goto err_label; \ + } \ }while (0 ) #define __put_kernel_nofault(dst, src, type, err_label) \
@@ -207,8 +212,13 @@ do { \ \ __pu_val = *(__force type *)(src); \__put_kernel_common (((type *)(dst)),sizeof (type)); \ -if (unlikely (__pu_err)) \ +if (unlikely (__pu_err)) { \ +pr_info ("%s: memory access failed, ecode 0x%x\n" , \ + __func__,read_csr_excode ()); \ +pr_info ("%s: the caller is %pS\n" , \ + __func__,__builtin_return_address (0 )); \ goto err_label; \ + } \ }while (0 ) extern unsigned long __copy_user(void *to, const void *from, __kernel_size_t n);
arch/loongarch/kernel/inst.c +17 -4
@@ -246,18 +246,21 @@ static int text_copy_cb(void *data)if (smp_processor_id () == copy->cpu) { ret =copy_to_kernel_nofault (copy->dst, copy->src, copy->len); -if (ret) +if (ret) {pr_err ("%s: operation failed\n" , __func__); +return ret; + } }flush_icache_range ((unsigned long )copy->dst, (unsigned long )copy->dst + copy->len); -return ret; +return 0 ; }int larch_insn_text_copy (void *dst,void *src,size_t len) {int ret =0 ; +int err =0 ;size_t start, end;struct insn_copy copy = { .dst = dst,
@@ -269,9 +272,19 @@ int larch_insn_text_copy(void *dst, void *src, size_t len) start =round_down ((size_t )dst,PAGE_SIZE ); end =round_up ((size_t )dst + len,PAGE_SIZE ); -set_memory_rw (start, (end - start) /PAGE_SIZE ); + err =set_memory_rw (start, (end - start) /PAGE_SIZE ); +if (err) { +pr_info ("%s: set_memory_rw() failed\n" , __func__); +return err; + } + ret =stop_machine (text_copy_cb, ©, cpu_online_mask); -set_memory_rox (start, (end - start) /PAGE_SIZE ); + + err =set_memory_rox (start, (end - start) /PAGE_SIZE ); +if (err) { +pr_info ("%s: set_memory_rox() failed\n" , __func__); +return err; + }return ret; }
arch/parisc/kernel/cache.c +2 -2
@@ -953,7 +953,7 @@ SYSCALL_DEFINE3(cacheflush, unsigned long, addr, unsigned long, bytes,#else "1: cmpb,<<,n %0,%2,1b\n" #endif -" fic,m %3(%4,%0)\n" +" fdc,m %3(%4,%0)\n" "2: sync\n" ASM_EXCEPTIONTABLE_ENTRY_EFAULT (1b ,2b ,"%1" ) : "+r" (start), "+r" (error)
@@ -968,7 +968,7 @@ SYSCALL_DEFINE3(cacheflush, unsigned long, addr, unsigned long, bytes,#else "1: cmpb,<<,n %0,%2,1b\n" #endif -" fdc,m %3(%4,%0)\n" +" fic,m %3(%4,%0)\n" "2: sync\n" ASM_EXCEPTIONTABLE_ENTRY_EFAULT (1b ,2b ,"%1" ) : "+r" (start), "+r" (error)
arch/x86/events/core.c +2 -1
@@ -1359,6 +1359,8 @@ static void x86_pmu_enable(struct pmu *pmu)else if (i < n_running)continue ; + cpuc->events[hwc->idx] = event; +if (hwc->state &PERF_HES_ARCH )continue ;
@@ -1366,7 +1368,6 @@ static void x86_pmu_enable(struct pmu *pmu)* if cpuc->enabled = 0, then no wrmsr as * per x86_pmu_enable_event() */ - cpuc->events[hwc->idx] = event;x86_pmu_start (event,PERF_EF_RELOAD ); } cpuc->n_added =0 ;
arch/x86/events/intel/core.c +21 -10
@@ -4224,6 +4224,19 @@ static inline void intel_pmu_set_acr_caused_constr(struct perf_event *event, event->hw.dyn_constraint &=hybrid (event->pmu, acr_cause_mask64); } +static inline int intel_set_branch_counter_constr (struct perf_event *event, +int *num) +{ +if (branch_sample_call_stack (event)) +return -EINVAL ; +if (branch_sample_counters (event)) { + (*num)++; + event->hw.dyn_constraint &= x86_pmu.lbr_counters; + } + +return 0 ; +} +static int intel_pmu_hw_config (struct perf_event *event) {int ret =x86_pmu_hw_config (event);
@@ -4283,21 +4296,19 @@ static int intel_pmu_hw_config(struct perf_event *event)* group, which requires the extra space to store the counters. */ leader = event->group_leader; -if (branch_sample_call_stack (leader)) +if (intel_set_branch_counter_constr (leader, &num))return -EINVAL ; -if (branch_sample_counters (leader)) { - num++; - leader->hw.dyn_constraint &= x86_pmu.lbr_counters; - } leader->hw.flags |=PERF_X86_EVENT_BRANCH_COUNTERS ;for_each_sibling_event (sibling, leader) { -if (branch_sample_call_stack (sibling)) +if (intel_set_branch_counter_constr (sibling, &num)) +return -EINVAL ; + } + +/* event isn't installed as a sibling yet. */ +if (event != leader) { +if (intel_set_branch_counter_constr (event, &num))return -EINVAL ; -if (branch_sample_counters (sibling)) { - num++; - sibling->hw.dyn_constraint &= x86_pmu.lbr_counters; - } }if (num >fls (x86_pmu.lbr_counters))
arch/x86/kernel/apic/x2apic_uv_x.c +16 -2
@@ -1708,8 +1708,22 @@ static void __init uv_system_init_hub(void)struct uv_hub_info_s *new_hub;/* Allocate & fill new per hub info list */ - new_hub = (bid ==0 ) ? &uv_hub_info_node0 - :kzalloc_node (bytes,GFP_KERNEL ,uv_blade_to_node (bid)); +if (bid ==0 ) { + new_hub = &uv_hub_info_node0; + }else { +int nid; + +/* +* Deconfigured sockets are mapped to SOCK_EMPTY. Use +* NUMA_NO_NODE to allocate on a valid node. +*/ + nid =uv_blade_to_node (bid); +if (nid ==SOCK_EMPTY ) + nid =NUMA_NO_NODE ; + + new_hub =kzalloc_node (bytes,GFP_KERNEL , nid); + } +if (WARN_ON_ONCE (!new_hub)) {/* do not kfree() bid 0, which is statically allocated */ while (--bid >0 )
drivers/acpi/acpi_processor.c +8 -7
@@ -113,6 +113,10 @@ static int acpi_processor_errata_piix4(struct pci_dev *dev) PCI_ANY_ID, PCI_ANY_ID, NULL);if (ide_dev) { errata.piix4.bmisx =pci_resource_start (ide_dev,4 ); +if (errata.piix4.bmisx) +dev_dbg (&ide_dev->dev, +"Bus master activity detection (BM-IDE) erratum enabled\n" ); +pci_dev_put (ide_dev); }
@@ -131,20 +135,17 @@ static int acpi_processor_errata_piix4(struct pci_dev *dev)if (isa_dev) {pci_read_config_byte (isa_dev,0x76 , &value1);pci_read_config_byte (isa_dev,0x77 , &value2); -if ((value1 &0x80 ) || (value2 &0x80 )) +if ((value1 &0x80 ) || (value2 &0x80 )) { errata.piix4.fdma =1 ; +dev_dbg (&isa_dev->dev, +"Type-F DMA livelock erratum (C3 disabled)\n" ); + }pci_dev_put (isa_dev); }break ; } -if (ide_dev) -dev_dbg (&ide_dev->dev,"Bus master activity detection (BM-IDE) erratum enabled\n" ); - -if (isa_dev) -dev_dbg (&isa_dev->dev,"Type-F DMA livelock erratum (C3 disabled)\n" ); -return 0 ; }
drivers/acpi/acpica/acpredef.h +1 -1
@@ -450,7 +450,7 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = { {{"_DSM" ,METHOD_4ARGS (ACPI_TYPE_BUFFER ,ACPI_TYPE_INTEGER ,ACPI_TYPE_INTEGER , -ACPI_TYPE_ANY |ACPI_TYPE_PACKAGE ) | +ACPI_TYPE_PACKAGE |ACPI_TYPE_ANY ) |ARG_COUNT_IS_MINIMUM , METHOD_RETURNS(ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */
drivers/ata/libata-core.c +3 -0
@@ -4156,6 +4156,9 @@ static const struct ata_dev_quirks_entry __ata_dev_quirks[] = { {"ST3320[68]13AS" ,"SD1[5-9]" ,ATA_QUIRK_NONCQ | ATA_QUIRK_FIRMWARE_WARN }, +/* ADATA devices with LPM issues. */ + { "ADATA SU680", NULL, ATA_QUIRK_NOLPM }, +/* Seagate disks with LPM issues */ { "ST1000DM010-2EP102", NULL, ATA_QUIRK_NOLPM }, { "ST2000DM008-2FR102", NULL, ATA_QUIRK_NOLPM },
drivers/ata/libata-scsi.c +1 -1
@@ -3599,7 +3599,7 @@ static unsigned int ata_scsiop_maint_in(struct ata_device *dev,if (cdb[2 ] !=1 && cdb[2 ] !=3 ) {ata_dev_warn (dev,"invalid command format %d\n" , cdb[2 ]); -ata_scsi_set_invalid_field (dev, cmd,1 ,0xff ); +ata_scsi_set_invalid_field (dev, cmd,2 ,0xff );return 0 ; }
drivers/base/power/runtime.c +1 -0
@@ -1896,6 +1896,7 @@ void pm_runtime_reinit(struct device *dev)void pm_runtime_remove (struct device *dev) {__pm_runtime_disable (dev, false); +flush_work (&dev->power.work);pm_runtime_reinit (dev); }
drivers/block/ublk_drv.c +9 -3
@@ -3604,15 +3604,22 @@ static int ublk_ctrl_get_features(const struct ublksrv_ctrl_cmd *header)return 0 ; } -static void ublk_ctrl_set_size (struct ublk_device *ub,const struct ublksrv_ctrl_cmd *header) +static int ublk_ctrl_set_size (struct ublk_device *ub,const struct ublksrv_ctrl_cmd *header) {struct ublk_param_basic *p = &ub->params.basic;u64 new_size = header->data[0 ]; +int ret =0 ;mutex_lock (&ub->mutex); +if (!ub->ub_disk) { + ret = -ENODEV ; + goto out; + } p->dev_sectors = new_size;set_capacity_and_notify (ub->ub_disk, p->dev_sectors); +out:mutex_unlock (&ub->mutex); +return ret; }struct count_busy {
@@ -3902,8 +3909,7 @@ static int ublk_ctrl_uring_cmd(struct io_uring_cmd *cmd, ret =ublk_ctrl_end_recovery (ub, header);break ;case UBLK_CMD_UPDATE_SIZE : -ublk_ctrl_set_size (ub, header); - ret =0 ; + ret =ublk_ctrl_set_size (ub, header);break ;case UBLK_CMD_QUIESCE_DEV : ret =ublk_ctrl_quiesce_dev (ub, header);
drivers/bluetooth/btqca.c +2 -0
@@ -804,6 +804,8 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,*/ if (soc_type ==QCA_WCN3988 ) rom_ver = ((soc_ver &0x00000f00 ) >>0x05 ) | (soc_ver &0x0000000f ); +else if (soc_type ==QCA_WCN3998 ) + rom_ver = ((soc_ver &0x0000f000 ) >>0x07 ) | (soc_ver &0x0000000f );else rom_ver = ((soc_ver &0x00000f00 ) >>0x04 ) | (soc_ver &0x0000000f );
drivers/cache/ax45mp_cache.c +2 -2
@@ -178,11 +178,11 @@ static const struct of_device_id ax45mp_cache_ids[] = {static int __init ax45mp_cache_init (void ) { -struct device_node *np;struct resource res;int ret; - np =of_find_matching_node (NULL , ax45mp_cache_ids); + struct device_node *np __free(device_node) = +of_find_matching_node (NULL , ax45mp_cache_ids);if (!of_device_is_available (np))return -ENODEV ;
drivers/cache/starfive_starlink_cache.c +2 -2
@@ -102,11 +102,11 @@ static const struct of_device_id starlink_cache_ids[] = {static int __init starlink_cache_init (void ) { -struct device_node *np;u32 block_size;int ret; - np =of_find_matching_node (NULL , starlink_cache_ids); + struct device_node *np __free(device_node) = +of_find_matching_node (NULL , starlink_cache_ids);if (!of_device_is_available (np))return -ENODEV ;
drivers/char/ipmi/ipmi_msghandler.c +92 -50
253 lines not on this page · raw message
drivers/crypto/atmel-sha204a.c +3 -2
@@ -52,9 +52,10 @@ static int atmel_sha204a_rng_read_nonblocking(struct hwrng *rng, void *data, rng->priv =0 ; }else { work_data =kmalloc (sizeof (*work_data),GFP_ATOMIC ); -if (!work_data) +if (!work_data) { +atomic_dec (&i2c_priv->tfm_count);return -ENOMEM ; - + } work_data->ctx = i2c_priv; work_data->client = i2c_priv->client;
drivers/crypto/ccp/sev-dev.c +1 -3
@@ -2381,10 +2381,8 @@ static int sev_ioctl_do_snp_platform_status(struct sev_issue_cmd *argp)* in Firmware state on failure. Use snp_reclaim_pages() to * transition either case back to Hypervisor-owned state. */ -if (snp_reclaim_pages (__pa (data),1 , true)) { -snp_leak_pages (__page_to_pfn (status_page),1 ); +if (snp_reclaim_pages (__pa (data),1 , true))return -EFAULT ; - } }if (ret)
drivers/crypto/padlock-sha.c +7 -0
@@ -332,6 +332,13 @@ static int __init padlock_init(void)if (!x86_match_cpu (padlock_sha_ids) || !boot_cpu_has (X86_FEATURE_PHE_EN ))return -ENODEV ; +/* +* Skip family 0x07 and newer used by Zhaoxin processors, +* as the driver's self-tests fail on these CPUs. +*/ +if (c->x86 >=0x07 ) +return -ENODEV ; +/* Register the newly added algorithm module if on * * VIA Nano processor, or else just do as before */ if (c->x86_model <0x0f ) {
drivers/firewire/net.c +3 -2
@@ -257,9 +257,10 @@ static void fwnet_header_cache_update(struct hh_cache *hh,memcpy ((u8 *)hh->hh_data +HH_DATA_OFF (FWNET_HLEN ), haddr, net->addr_len); } -static int fwnet_header_parse (const struct sk_buff *skb,unsigned char *haddr) +static int fwnet_header_parse (const struct sk_buff *skb,const struct net_device *dev, +unsigned char *haddr) { -memcpy (haddr, skb->dev->dev_addr,FWNET_ALEN ); +memcpy (haddr, dev->dev_addr,FWNET_ALEN );return FWNET_ALEN ; }
drivers/firmware/arm_ffa/driver.c +4 -4
@@ -205,12 +205,12 @@ static int ffa_rxtx_map(phys_addr_t tx_buf, phys_addr_t rx_buf, u32 pg_cnt)return 0 ; } -static int ffa_rxtx_unmap (u16 vm_id) +static int ffa_rxtx_unmap (void ) {ffa_value_t ret;invoke_ffa_fn ((ffa_value_t ){ - .a0 =FFA_RXTX_UNMAP , .a1 =PACK_TARGET_INFO (vm_id,0 ), + .a0 =FFA_RXTX_UNMAP , }, &ret);if (ret.a0 ==FFA_ERROR )
@@ -2093,7 +2093,7 @@ static int __init ffa_init(void)pr_err ("failed to setup partitions\n" );ffa_notifications_cleanup (); -ffa_rxtx_unmap (drv_info->vm_id); +ffa_rxtx_unmap (); free_pages:if (drv_info->tx_buffer)free_pages_exact (drv_info->tx_buffer, rxtx_bufsz);
@@ -2108,7 +2108,7 @@ static void __exit ffa_exit(void) {ffa_notifications_cleanup ();ffa_partitions_cleanup (); -ffa_rxtx_unmap (drv_info->vm_id); +ffa_rxtx_unmap ();free_pages_exact (drv_info->tx_buffer, drv_info->rxtx_bufsz);free_pages_exact (drv_info->rx_buffer, drv_info->rxtx_bufsz);kfree (drv_info);
drivers/firmware/arm_scmi/notify.c +2 -2
@@ -1066,7 +1066,7 @@ static int scmi_register_event_handler(struct scmi_notify_instance *ni,* since at creation time we usually want to have all setup and ready before * events really start flowing. * -* Return: A properly refcounted handler on Success, NULL on Failure +* Return: A properly refcounted handler on Success, ERR_PTR on Failure */ static inline struct scmi_event_handler * __scmi_event_handler_get_ops(struct scmi_notify_instance *ni,
@@ -1113,7 +1113,7 @@ __scmi_event_handler_get_ops(struct scmi_notify_instance *ni, }mutex_unlock (&ni->pending_mtx); -return hndl; +return hndl ?:ERR_PTR (-ENODEV ); } static struct scmi_event_handler *
drivers/firmware/arm_scpi.c +3 -2
@@ -18,6 +18,7 @@#include <linux/bitmap.h> #include <linux/bitfield.h> +#include <linux/cleanup.h> #include <linux/device.h> #include <linux/err.h> #include <linux/export.h>
@@ -940,13 +941,13 @@ static int scpi_probe(struct platform_device *pdev)int idx = scpi_drvinfo->num_chans;struct scpi_chan *pchan = scpi_drvinfo->channels + idx;struct mbox_client *cl = &pchan->cl; -struct device_node *shmem =of_parse_phandle (np,"shmem" , idx); + struct device_node *shmem __free(device_node) = +of_parse_phandle (np,"shmem" , idx);if (!of_match_node (shmem_of_match, shmem))return -ENXIO ; ret =of_address_to_resource (shmem,0 , &res); -of_node_put (shmem);if (ret) {dev_err (dev,"failed to get SCPI payload mem resource\n" );return ret;
drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c +4 -0
@@ -36,6 +36,7 @@#define AMDGPU_BO_LIST_MAX_PRIORITY 32u#define AMDGPU_BO_LIST_NUM_BUCKETS (AMDGPU_BO_LIST_MAX_PRIORITY + 1) +#define AMDGPU_BO_LIST_MAX_ENTRIES (128 * 1024)static void amdgpu_bo_list_free_rcu (struct rcu_head *rcu) {
@@ -190,6 +191,9 @@ int amdgpu_bo_create_list_entry_array(struct drm_amdgpu_bo_list_in *in,const uint32_t bo_number = in->bo_number;struct drm_amdgpu_bo_list_entry *info; +if (bo_number >AMDGPU_BO_LIST_MAX_ENTRIES ) +return -EINVAL ; +/* copy the handle array from userspace to a kernel buffer */ if (likely (info_size == bo_info_size)) { info =vmemdup_array_user (uptr, bo_number, info_size);
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +14 -7
@@ -691,28 +691,35 @@ static int gmc_v9_0_process_interrupt(struct amdgpu_device *adev, }else {switch (amdgpu_ip_version (adev,MMHUB_HWIP ,0 )) {case IP_VERSION (9 ,0 ,0 ): - mmhub_cid = mmhub_client_ids_vega10[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_vega10) ? + mmhub_client_ids_vega10[cid][rw] :NULL ;break ;case IP_VERSION (9 ,3 ,0 ): - mmhub_cid = mmhub_client_ids_vega12[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_vega12) ? + mmhub_client_ids_vega12[cid][rw] :NULL ;break ;case IP_VERSION (9 ,4 ,0 ): - mmhub_cid = mmhub_client_ids_vega20[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_vega20) ? + mmhub_client_ids_vega20[cid][rw] :NULL ;break ;case IP_VERSION (9 ,4 ,1 ): - mmhub_cid = mmhub_client_ids_arcturus[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_arcturus) ? + mmhub_client_ids_arcturus[cid][rw] :NULL ;break ;case IP_VERSION (9 ,1 ,0 ):case IP_VERSION (9 ,2 ,0 ): - mmhub_cid = mmhub_client_ids_raven[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_raven) ? + mmhub_client_ids_raven[cid][rw] :NULL ;break ;case IP_VERSION (1 ,5 ,0 ):case IP_VERSION (2 ,4 ,0 ): - mmhub_cid = mmhub_client_ids_renoir[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_renoir) ? + mmhub_client_ids_renoir[cid][rw] :NULL ;break ;case IP_VERSION (1 ,8 ,0 ):case IP_VERSION (9 ,4 ,2 ): - mmhub_cid = mmhub_client_ids_aldebaran[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_aldebaran) ? + mmhub_client_ids_aldebaran[cid][rw] :NULL ;break ;default : mmhub_cid =NULL ;
drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c +6 -3
@@ -154,14 +154,17 @@ mmhub_v2_0_print_l2_protection_fault_status(struct amdgpu_device *adev,switch (amdgpu_ip_version (adev,MMHUB_HWIP ,0 )) {case IP_VERSION (2 ,0 ,0 ):case IP_VERSION (2 ,0 ,2 ): - mmhub_cid = mmhub_client_ids_navi1x[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_navi1x) ? + mmhub_client_ids_navi1x[cid][rw] :NULL ;break ;case IP_VERSION (2 ,1 ,0 ):case IP_VERSION (2 ,1 ,1 ): - mmhub_cid = mmhub_client_ids_sienna_cichlid[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_sienna_cichlid) ? + mmhub_client_ids_sienna_cichlid[cid][rw] :NULL ;break ;case IP_VERSION (2 ,1 ,2 ): - mmhub_cid = mmhub_client_ids_beige_goby[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_beige_goby) ? + mmhub_client_ids_beige_goby[cid][rw] :NULL ;break ;default : mmhub_cid =NULL ;
drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.c +2 -1
@@ -94,7 +94,8 @@ mmhub_v2_3_print_l2_protection_fault_status(struct amdgpu_device *adev,case IP_VERSION (2 ,3 ,0 ):case IP_VERSION (2 ,4 ,0 ):case IP_VERSION (2 ,4 ,1 ): - mmhub_cid = mmhub_client_ids_vangogh[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_vangogh) ? + mmhub_client_ids_vangogh[cid][rw] :NULL ;break ;default : mmhub_cid =NULL ;
drivers/gpu/drm/amd/amdgpu/mmhub_v3_0.c +2 -1
@@ -110,7 +110,8 @@ mmhub_v3_0_print_l2_protection_fault_status(struct amdgpu_device *adev,switch (amdgpu_ip_version (adev,MMHUB_HWIP ,0 )) {case IP_VERSION (3 ,0 ,0 ):case IP_VERSION (3 ,0 ,1 ): - mmhub_cid = mmhub_client_ids_v3_0_0[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_v3_0_0) ? + mmhub_client_ids_v3_0_0[cid][rw] :NULL ;break ;default : mmhub_cid =NULL ;
drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_1.c +2 -1
@@ -117,7 +117,8 @@ mmhub_v3_0_1_print_l2_protection_fault_status(struct amdgpu_device *adev,switch (amdgpu_ip_version (adev,MMHUB_HWIP ,0 )) {case IP_VERSION (3 ,0 ,1 ): - mmhub_cid = mmhub_client_ids_v3_0_1[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_v3_0_1) ? + mmhub_client_ids_v3_0_1[cid][rw] :NULL ;break ;default : mmhub_cid =NULL ;
drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_2.c +2 -1
@@ -108,7 +108,8 @@ mmhub_v3_0_2_print_l2_protection_fault_status(struct amdgpu_device *adev,"MMVM_L2_PROTECTION_FAULT_STATUS:0x%08X\n" , status); - mmhub_cid = mmhub_client_ids_v3_0_2[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_v3_0_2) ? + mmhub_client_ids_v3_0_2[cid][rw] :NULL ;dev_err (adev->dev,"\t Faulty UTCL2 client ID: %s (0x%x)\n" , mmhub_cid ? mmhub_cid :"unknown" , cid); dev_err(adev->dev, "\t MORE_FAULTS: 0x%lx\n",
drivers/gpu/drm/amd/amdgpu/mmhub_v4_1_0.c +2 -1
@@ -102,7 +102,8 @@ mmhub_v4_1_0_print_l2_protection_fault_status(struct amdgpu_device *adev, status);switch (amdgpu_ip_version (adev,MMHUB_HWIP ,0 )) {case IP_VERSION (4 ,1 ,0 ): - mmhub_cid = mmhub_client_ids_v4_1_0[cid][rw]; + mmhub_cid = cid <ARRAY_SIZE (mmhub_client_ids_v4_1_0) ? + mmhub_client_ids_v4_1_0[cid][rw] :NULL ;break ;default : mmhub_cid =NULL ;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +2 -2
@@ -12864,7 +12864,7 @@ static void parse_edid_displayid_vrr(struct drm_connector *connector,u16 min_vfreq;u16 max_vfreq; -if (edid ==NULL || edid->extensions ==0 ) +if (!edid || !edid->extensions)return ;/* Find DisplayID extension */
@@ -12874,7 +12874,7 @@ static void parse_edid_displayid_vrr(struct drm_connector *connector,break ; } -if (edid_ext ==NULL ) +if (i == edid->extensions)return ;while (j <EDID_LENGTH ) {
drivers/gpu/drm/amd/display/dc/clk_mgr/clk_mgr.c +4 -4
@@ -255,6 +255,10 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *pBREAK_TO_DEBUGGER ();return NULL ; } +if (ctx->dce_version ==DCN_VERSION_2_01 ) { +dcn201_clk_mgr_construct (ctx, clk_mgr, pp_smu, dccg); +return &clk_mgr->base; + }if (ASICREV_IS_SIENNA_CICHLID_P (asic_id.hw_internal_rev)) {dcn3_clk_mgr_construct (ctx, clk_mgr, pp_smu, dccg);return &clk_mgr->base;
@@ -267,10 +271,6 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *pdcn3_clk_mgr_construct (ctx, clk_mgr, pp_smu, dccg);return &clk_mgr->base; } -if (ctx->dce_version ==DCN_VERSION_2_01 ) { -dcn201_clk_mgr_construct (ctx, clk_mgr, pp_smu, dccg); -return &clk_mgr->base; - }dcn20_clk_mgr_construct (ctx, clk_mgr, pp_smu, dccg);return &clk_mgr->base; }
drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c +3 -0
@@ -1786,7 +1786,10 @@ static bool dml1_validate(struct dc *dc, struct dc_state *context, enum dc_valid dc->res_pool->funcs->calculate_wm_and_dlg (dc, context, pipes, pipe_cnt, vlevel); +DC_FP_START ();dcn32_override_min_req_memclk (dc, context); +DC_FP_END (); +dcn32_override_min_req_dcfclk (dc, context);BW_VAL_TRACE_END_WATERMARKS ();
drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c +3 -1
@@ -3459,9 +3459,11 @@ static void si_apply_state_adjust_rules(struct amdgpu_device *adev,if (adev->asic_type ==CHIP_HAINAN ) {if ((adev->pdev->revision ==0x81 ) || (adev->pdev->revision ==0xC3 ) || + (adev->pdev->device ==0x6660 ) || (adev->pdev->device ==0x6664 ) || (adev->pdev->device ==0x6665 ) || - (adev->pdev->device ==0x6667 )) { + (adev->pdev->device ==0x6667 ) || + (adev->pdev->device ==0x666F )) { max_sclk =75000 ; } if ((adev->pdev->revision == 0xC3) ||
drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +1 -1
@@ -818,7 +818,7 @@ static int dw_hdmi_qp_config_audio_infoframe(struct dw_hdmi_qp *hdmi,regmap_bulk_write (hdmi->regm,PKT_AUDI_CONTENTS0 , &header_bytes,1 );regmap_bulk_write (hdmi->regm,PKT_AUDI_CONTENTS1 , &buffer[3 ],1 ); -regmap_bulk_write (hdmi->regm,PKT_AUDI_CONTENTS2 , &buffer[4 ],1 ); +regmap_bulk_write (hdmi->regm,PKT_AUDI_CONTENTS2 , &buffer[7 ],1 );/* Enable ACR, AUDI, AMD */ dw_hdmi_qp_mod(hdmi,
drivers/gpu/drm/drm_file.c +4 -1
@@ -233,6 +233,7 @@ static void drm_events_release(struct drm_file *file_priv)void drm_file_free (struct drm_file *file) {struct drm_device *dev; +int idx;if (!file)return ;
@@ -249,9 +250,11 @@ void drm_file_free(struct drm_file *file)drm_events_release (file); -if (drm_core_check_feature (dev,DRIVER_MODESET )) { +if (drm_core_check_feature (dev,DRIVER_MODESET ) && +drm_dev_enter (dev, &idx)) {drm_fb_release (file);drm_property_destroy_user_blobs (dev, file); +drm_dev_exit (idx); }if (drm_core_check_feature (dev,DRIVER_SYNCOBJ ))
drivers/gpu/drm/drm_mode_config.c +6 -3
@@ -570,10 +570,13 @@ void drm_mode_config_cleanup(struct drm_device *dev)*/ WARN_ON (!list_empty (&dev->mode_config.fb_list));list_for_each_entry_safe (fb, fbt, &dev->mode_config.fb_list, head) { -struct drm_printer p =drm_dbg_printer (dev,DRM_UT_KMS ,"[leaked fb]" ); +if (list_empty (&fb->filp_head) ||drm_framebuffer_read_refcount (fb) >1 ) { +struct drm_printer p =drm_dbg_printer (dev,DRM_UT_KMS ,"[leaked fb]" ); -drm_printf (&p,"framebuffer[%u]:\n" , fb->base.id); -drm_framebuffer_print_info (&p,1 , fb); +drm_printf (&p,"framebuffer[%u]:\n" , fb->base.id); +drm_framebuffer_print_info (&p,1 , fb); + } +list_del_init (&fb->filp_head);drm_framebuffer_free (&fb->base.refcount); }
drivers/gpu/drm/i915/display/intel_display.c +0 -2
@@ -1642,8 +1642,6 @@ static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_sta }intel_set_transcoder_timings (crtc_state); -if (HAS_VRR (display)) -intel_vrr_set_transcoder_timings (crtc_state);if (cpu_transcoder !=TRANSCODER_EDP ) intel_de_write(display, TRANS_MULT(display, cpu_transcoder),
drivers/gpu/drm/i915/display/intel_display_power_well.c +1 -1
@@ -796,7 +796,7 @@ void gen9_set_dc_state(struct intel_display *display, u32 state) power_domains->dc_state, val & mask); enable_dc6 = state &DC_STATE_EN_UPTO_DC6 ; - dc6_was_enabled = val &DC_STATE_EN_UPTO_DC6 ; + dc6_was_enabled = power_domains->dc_state &DC_STATE_EN_UPTO_DC6 ;if (!dc6_was_enabled && enable_dc6)intel_dmc_update_dc6_allowed_count (display, true);
drivers/gpu/drm/i915/display/intel_display_types.h +1 -0
@@ -1127,6 +1127,7 @@ struct intel_crtc_state {u32 dc3co_exitline;u16 su_y_granularity;u8 active_non_psr_pipes; +u8 entry_setup_frames;/* * Frequency the dpll for the port should run at. Differs from the
drivers/gpu/drm/i915/display/intel_dmc.c +1 -2
@@ -1569,8 +1569,7 @@ static bool intel_dmc_get_dc6_allowed_count(struct intel_display *display, u32 *return false;mutex_lock (&power_domains->lock); - dc6_enabled =intel_de_read (display,DC_STATE_EN ) & -DC_STATE_EN_UPTO_DC6 ; + dc6_enabled = power_domains->dc_state &DC_STATE_EN_UPTO_DC6 ;if (dc6_enabled)intel_dmc_update_dc6_allowed_count (display, false);
drivers/gpu/drm/i915/display/intel_psr.c +14 -2
@@ -50,6 +50,7 @@#include "intel_snps_phy.h" #include "intel_step.h" #include "intel_vblank.h" +#include "intel_vdsc.h" #include "intel_vrr.h" #include "skl_universal_plane.h"
@@ -1584,7 +1585,7 @@ static bool _psr_compute_config(struct intel_dp *intel_dp, entry_setup_frames =intel_psr_entry_setup_frames (intel_dp, adjusted_mode);if (entry_setup_frames >=0 ) { - intel_dp->psr.entry_setup_frames = entry_setup_frames; + crtc_state->entry_setup_frames = entry_setup_frames; }else {drm_dbg_kms (display->drm,"PSR condition failed: PSR setup timing not met\n" );
@@ -1656,7 +1657,7 @@ static bool intel_psr_needs_wa_18037818876(struct intel_dp *intel_dp, {struct intel_display *display =to_intel_display (intel_dp); -return (DISPLAY_VER (display) ==20 && intel_dp->psr.entry_setup_frames >0 && +return (DISPLAY_VER (display) ==20 && crtc_state->entry_setup_frames >0 && !crtc_state->has_sel_update); }
@@ -2026,6 +2027,7 @@ static void intel_psr_enable_locked(struct intel_dp *intel_dp, crtc_state->req_psr2_sdp_prior_scanline; intel_dp->psr.active_non_psr_pipes = crtc_state->active_non_psr_pipes; intel_dp->psr.pkg_c_latency_used = crtc_state->pkg_c_latency_used; + intel_dp->psr.entry_setup_frames = crtc_state->entry_setup_frames;if (!psr_interrupt_error_check (intel_dp))return ;
@@ -2489,6 +2491,12 @@ void intel_psr2_program_trans_man_trk_ctl(struct intel_dsb *dsb,intel_de_write_dsb (display, dsb,PIPE_SRCSZ_ERLY_TPT (crtc->pipe), crtc_state->pipe_srcsz_early_tpt); + +if (!crtc_state->dsc.compression_enable) +return ; + +intel_dsc_su_et_parameters_configure (dsb, encoder, crtc_state, +drm_rect_height (&crtc_state->psr2_su_area)); } static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
@@ -2909,6 +2917,10 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state, } skip_sel_fetch_set_loop: +if (full_update) +clip_area_update (&crtc_state->psr2_su_area, &crtc_state->pipe_src, + &crtc_state->pipe_src); +psr2_man_trk_ctl_calc (crtc_state, full_update); crtc_state->pipe_srcsz_early_tpt =psr2_pipe_srcsz_early_tpt_calc (crtc_state, full_update);
drivers/gpu/drm/i915/display/intel_vdsc.c +23 -0
@@ -751,6 +751,29 @@ void intel_dsc_dp_pps_write(struct intel_encoder *encoder, sizeof(dp_dsc_pps_sdp)); } +void intel_dsc_su_et_parameters_configure (struct intel_dsb *dsb,struct intel_encoder *encoder, +const struct intel_crtc_state *crtc_state,int su_lines) +{ +struct intel_display *display =to_intel_display (crtc_state); +struct intel_crtc *crtc =to_intel_crtc (crtc_state->uapi.crtc); +const struct drm_dsc_config *vdsc_cfg = &crtc_state->dsc.config; +enum pipe pipe = crtc->pipe; +int vdsc_instances_per_pipe =intel_dsc_get_vdsc_per_pipe (crtc_state); +int slice_row_per_frame = su_lines / vdsc_cfg->slice_height; +u32 val; + +drm_WARN_ON_ONCE (display->drm, su_lines % vdsc_cfg->slice_height); +drm_WARN_ON_ONCE (display->drm, vdsc_instances_per_pipe >2 ); + + val =DSC_SUPS0_SU_SLICE_ROW_PER_FRAME (slice_row_per_frame); + val |=DSC_SUPS0_SU_PIC_HEIGHT (su_lines); + +intel_de_write_dsb (display, dsb,LNL_DSC0_SU_PARAMETER_SET_0 (pipe), val); + +if (vdsc_instances_per_pipe ==2 ) +intel_de_write_dsb (display, dsb,LNL_DSC1_SU_PARAMETER_SET_0 (pipe), val); +} +static i915_reg_t dss_ctl1_reg (struct intel_crtc *crtc,enum transcoder cpu_transcoder) { return is_pipe_dsc(crtc, cpu_transcoder) ?
drivers/gpu/drm/i915/display/intel_vdsc.h +3 -0
@@ -13,6 +13,7 @@ struct drm_printer;enum transcoder ;struct intel_crtc ;struct intel_crtc_state ; +struct intel_dsb ;struct intel_encoder ;bool intel_dsc_source_support (const struct intel_crtc_state *crtc_state);
@@ -29,6 +30,8 @@ void intel_dsc_dsi_pps_write(struct intel_encoder *encoder, const struct intel_crtc_state *crtc_state);void intel_dsc_dp_pps_write (struct intel_encoder *encoder,const struct intel_crtc_state *crtc_state); +void intel_dsc_su_et_parameters_configure (struct intel_dsb *dsb,struct intel_encoder *encoder, +const struct intel_crtc_state *crtc_state,int su_lines);void intel_vdsc_state_dump (struct drm_printer *p,int indent,const struct intel_crtc_state *crtc_state);int intel_vdsc_min_cdclk (const struct intel_crtc_state *crtc_state);
drivers/gpu/drm/i915/display/intel_vdsc_regs.h +12 -0
@@ -196,6 +196,18 @@#define DSC_PPS18_NSL_BPG_OFFSET (offset) REG_FIELD_PREP(DSC_PPS18_NSL_BPG_OFFSET_MASK, offset)#define DSC_PPS18_SL_OFFSET_ADJ (offset) REG_FIELD_PREP(DSC_PPS18_SL_OFFSET_ADJ_MASK, offset) +#define _LNL_DSC0_SU_PARAMETER_SET_0_PA 0x78064 +#define _LNL_DSC1_SU_PARAMETER_SET_0_PA 0x78164 +#define _LNL_DSC0_SU_PARAMETER_SET_0_PB 0x78264 +#define _LNL_DSC1_SU_PARAMETER_SET_0_PB 0x78364 +#define LNL_DSC0_SU_PARAMETER_SET_0 (pipe) _MMIO_PIPE((pipe), _LNL_DSC0_SU_PARAMETER_SET_0_PA, _LNL_DSC0_SU_PARAMETER_SET_0_PB) +#define LNL_DSC1_SU_PARAMETER_SET_0 (pipe) _MMIO_PIPE((pipe), _LNL_DSC1_SU_PARAMETER_SET_0_PA, _LNL_DSC1_SU_PARAMETER_SET_0_PB) + +#define DSC_SUPS0_SU_SLICE_ROW_PER_FRAME_MASK REG_GENMASK(31, 20) +#define DSC_SUPS0_SU_SLICE_ROW_PER_FRAME (rows) REG_FIELD_PREP(DSC_SUPS0_SU_SLICE_ROW_PER_FRAME_MASK, (rows)) +#define DSC_SUPS0_SU_PIC_HEIGHT_MASK REG_GENMASK(15, 0) +#define DSC_SUPS0_SU_PIC_HEIGHT (h) REG_FIELD_PREP(DSC_SUPS0_SU_PIC_HEIGHT_MASK, (h)) +/* Icelake Rate Control Buffer Threshold Registers */ #define DSCA_RC_BUF_THRESH_0 _MMIO(0x6B230)#define DSCA_RC_BUF_THRESH_0_UDW _MMIO(0x6B230 + 4)
drivers/gpu/drm/i915/display/intel_vrr.c +17 -0
@@ -461,6 +461,21 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)struct intel_display *display =to_intel_display (crtc_state);enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; +if (!HAS_VRR (display)) +return ; + +/* +* Bspec says: +* "(note: VRR needs to be programmed after +* TRANS_DDI_FUNC_CTL and before TRANS_CONF)." +* +* In practice it turns out that ICL can hang if +* TRANS_VRR_VMAX/FLIPLINE are written before +* enabling TRANS_DDI_FUNC_CTL. +*/ +drm_WARN_ON (display->drm, + !(intel_de_read (display,TRANS_DDI_FUNC_CTL (display, cpu_transcoder)) &TRANS_DDI_FUNC_ENABLE )); +/* * This bit seems to have two meanings depending on the platform: * TGL: generate VRR "safe window" for DSB vblank waits
@@ -655,6 +670,8 @@ void intel_vrr_transcoder_enable(const struct intel_crtc_state *crtc_state)if (!HAS_VRR (display))return ; +intel_vrr_set_transcoder_timings (crtc_state); +if (!intel_vrr_possible (crtc_state))return ;
drivers/gpu/drm/i915/gt/intel_engine_cs.c +2 -1
@@ -1969,7 +1969,8 @@ void intel_engines_reset_default_submission(struct intel_gt *gt)if (engine->sanitize) engine->sanitize (engine); - engine->set_default_submission (engine); +if (engine->set_default_submission) + engine->set_default_submission (engine); } }
drivers/gpu/drm/imagination/pvr_device.c +0 -17
@@ -224,29 +224,12 @@ static irqreturn_t pvr_device_irq_thread_handler(int irq, void *data) }if (pvr_dev->has_safety_events) { -int err; - -/* -* Ensure the GPU is powered on since some safety events (such -* as ECC faults) can happen outside of job submissions, which -* are otherwise the only time a power reference is held. -*/ - err =pvr_power_get (pvr_dev); -if (err) { -drm_err_ratelimited (drm_dev, -"%s: could not take power reference (%d)\n" , - __func__, err); -return ret; - } -while (pvr_device_safety_irq_pending (pvr_dev)) {pvr_device_safety_irq_clear (pvr_dev);pvr_device_handle_safety_events (pvr_dev); ret =IRQ_HANDLED ; } - -pvr_power_put (pvr_dev); }return ret;
drivers/gpu/drm/imagination/pvr_power.c +18 -4
@@ -89,7 +89,7 @@ pvr_power_request_pwr_off(struct pvr_device *pvr_dev) }static int -pvr_power_fw_disable (struct pvr_device *pvr_dev,bool hard_reset) +pvr_power_fw_disable (struct pvr_device *pvr_dev,bool hard_reset,bool rpm_suspend) {if (!hard_reset) {int err;
@@ -105,6 +105,11 @@ pvr_power_fw_disable(struct pvr_device *pvr_dev, bool hard_reset)return err; } +if (rpm_suspend) { +/* Wait for late processing of GPU or firmware IRQs in other cores */ +synchronize_irq (pvr_dev->irq); + } +return pvr_fw_stop (pvr_dev); }
@@ -360,7 +365,7 @@ pvr_power_device_suspend(struct device *dev)return -EIO ;if (pvr_dev->fw_dev.booted) { - err =pvr_power_fw_disable (pvr_dev, false); + err =pvr_power_fw_disable (pvr_dev, false, true);if (err) goto err_drm_dev_exit; }
@@ -509,7 +514,16 @@ pvr_power_reset(struct pvr_device *pvr_dev, bool hard_reset) }/* Disable IRQs for the duration of the reset. */ -disable_irq (pvr_dev->irq); +if (hard_reset) { +disable_irq (pvr_dev->irq); + }else { +/* +* Soft reset is triggered as a response to a FW command to the Host and is +* processed from the threaded IRQ handler. This code cannot (nor needs to) +* wait for any IRQ processing to complete. +*/ +disable_irq_nosync (pvr_dev->irq); + } do { if (hard_reset) {
@@ -517,7 +531,7 @@ pvr_power_reset(struct pvr_device *pvr_dev, bool hard_reset) queues_disabled = true; } - err =pvr_power_fw_disable (pvr_dev, hard_reset); + err =pvr_power_fw_disable (pvr_dev, hard_reset, false);if (!err) {if (hard_reset) { pvr_dev->fw_dev.booted = false;
drivers/gpu/drm/radeon/si_dpm.c +3 -1
@@ -2915,9 +2915,11 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev,if (rdev->family ==CHIP_HAINAN ) {if ((rdev->pdev->revision ==0x81 ) || (rdev->pdev->revision ==0xC3 ) || + (rdev->pdev->device ==0x6660 ) || (rdev->pdev->device ==0x6664 ) || (rdev->pdev->device ==0x6665 ) || - (rdev->pdev->device ==0x6667 )) { + (rdev->pdev->device ==0x6667 ) || + (rdev->pdev->device ==0x666F )) { max_sclk =75000 ; } if ((rdev->pdev->revision == 0xC3) ||
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +2 -1
@@ -768,7 +768,8 @@ static struct drm_framebuffer *vmw_kms_fb_create(struct drm_device *dev, ret =vmw_bo_dirty_add (bo);if (!ret && surface && surface->res.func->dirty_alloc) { surface->res.coherent = true; - ret = surface->res.func->dirty_alloc (&surface->res); +if (surface->res.dirty ==NULL ) + ret = surface->res.func->dirty_alloc (&surface->res); }ttm_bo_unreserve (&bo->tbo); }
drivers/gpu/drm/xe/xe_ggtt.c +4 -6
@@ -243,6 +243,8 @@ static void dev_fini_ggtt(void *arg) {struct xe_ggtt *ggtt = arg; +scoped_guard (mutex, &ggtt->lock) + ggtt->flags &= ~XE_GGTT_FLAGS_ONLINE;drain_workqueue (ggtt->wq); }
@@ -301,6 +303,7 @@ int xe_ggtt_init_early(struct xe_ggtt *ggtt)if (err)return err; + ggtt->flags |=XE_GGTT_FLAGS_ONLINE ; err =devm_add_action_or_reset (xe->drm.dev, dev_fini_ggtt, ggtt);if (err)return err;
@@ -334,13 +337,10 @@ static void xe_ggtt_initial_clear(struct xe_ggtt *ggtt)static void ggtt_node_remove (struct xe_ggtt_node *node) {struct xe_ggtt *ggtt = node->ggtt; -struct xe_device *xe =tile_to_xe (ggtt->tile);bool bound; -int idx; - - bound =drm_dev_enter (&xe->drm, &idx);mutex_lock (&ggtt->lock); + bound = ggtt->flags &XE_GGTT_FLAGS_ONLINE ;if (bound)xe_ggtt_clear (ggtt, node->base.start, node->base.size);drm_mm_remove_node (&node->base);
@@ -353,8 +353,6 @@ static void ggtt_node_remove(struct xe_ggtt_node *node)if (node->invalidate_on_remove)xe_ggtt_invalidate (ggtt); -drm_dev_exit (idx); - free_node:xe_ggtt_node_fini (node); }
drivers/gpu/drm/xe/xe_ggtt_types.h +4 -1
@@ -25,11 +25,14 @@ struct xe_ggtt {/** @size: Total size of this GGTT */ u64 size; -#define XE_GGTT_FLAGS_64K BIT(0) +#define XE_GGTT_FLAGS_64K BIT(0) +#define XE_GGTT_FLAGS_ONLINE BIT(1)/** * @flags: Flags for this GGTT * Acceptable flags: * - %XE_GGTT_FLAGS_64K - if PTE size is 64K. Otherwise, regular is 4K. +* - %XE_GGTT_FLAGS_ONLINE - is GGTT online, protected by ggtt->lock +* after init */ unsigned int flags;/** @scratch: Internal object allocation used as a scratch page */
drivers/gpu/drm/xe/xe_guc_ct.c +1 -0
@@ -266,6 +266,7 @@ static void guc_action_disable_ct(void *arg) {struct xe_guc_ct *ct = arg; +xe_guc_ct_stop (ct);guc_ct_change_state (ct,XE_GUC_CT_STATE_DISABLED ); }
drivers/gpu/drm/xe/xe_oa.c +5 -2
@@ -543,8 +543,7 @@ static ssize_t xe_oa_read(struct file *file, char __user *buf,size_t offset =0 ;int ret; -/* Can't read from disabled streams */ -if (!stream->enabled || !stream->sample) +if (!stream->sample)return -EINVAL ;if (!(file->f_flags &O_NONBLOCK )) {
@@ -1459,6 +1458,10 @@ static void xe_oa_stream_disable(struct xe_oa_stream *stream)if (stream->sample)hrtimer_cancel (&stream->poll_check_timer); + +/* Update stream->oa_buffer.tail to allow any final reports to be read */ +if (xe_oa_buffer_check_unlocked (stream)) +wake_up (&stream->poll_wq); }static int xe_oa_enable_preempt_timeslice (struct xe_oa_stream *stream)
drivers/gpu/drm/xe/xe_sync.c +4 -2
@@ -206,8 +206,10 @@ int xe_sync_entry_parse(struct xe_device *xe, struct xe_file *xef,if (XE_IOCTL_DBG (xe,IS_ERR (sync->ufence)))return PTR_ERR (sync->ufence); sync->ufence_chain_fence =dma_fence_chain_alloc (); -if (!sync->ufence_chain_fence) -return -ENOMEM ; +if (!sync->ufence_chain_fence) { + err = -ENOMEM ; + goto free_sync; + } sync->ufence_syncobj = ufence_syncobj; }
drivers/gpu/drm/xe/xe_vm_madvise.c +2 -1
@@ -390,7 +390,7 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data, struct drm_file *fil madvise_range.num_vmas, args->atomic.val)) { err = -EINVAL ; - goto unlock_vm; + goto free_vmas; } }
@@ -426,6 +426,7 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data, struct drm_file *fil err_fini:if (madvise_range.has_bo_vmas)drm_exec_fini (&exec); +free_vmas:kfree (madvise_range.vmas); madvise_range.vmas =NULL ; unlock_vm:
drivers/hid/bpf/hid_bpf_dispatch.c +2 -0
@@ -447,6 +447,8 @@ hid_bpf_hw_request(struct hid_bpf_ctx *ctx, __u8 *buf, size_t buf__sz, (u64 )(long )ctx, true); /* prevent infinite recursions */ +if (ret > size) + ret = size;if (ret >0 )memcpy (buf, dma_data, ret);
drivers/hwmon/max6639.c +5 -5
@@ -235,7 +235,7 @@ static int max6639_read_fan(struct device *dev, u32 attr, int channel,static int max6639_set_ppr (struct max6639_data *data,int channel,u8 ppr) {/* Decrement the PPR value and shift left by 6 to match the register format */ -return regmap_write (data->regmap,MAX6639_REG_FAN_PPR (channel), ppr-- <<6 ); +return regmap_write (data->regmap,MAX6639_REG_FAN_PPR (channel), --ppr <<6 ); } static int max6639_write_fan(struct device *dev, u32 attr, int channel,
@@ -537,8 +537,8 @@ static int max6639_probe_child_from_dt(struct i2c_client *client, {struct device *dev = &client->dev; -u32 i; -int err, val; +u32 i, val; +int err; err =of_property_read_u32 (child,"reg" , &i);if (err) {
@@ -553,8 +553,8 @@ static int max6639_probe_child_from_dt(struct i2c_client *client, err =of_property_read_u32 (child,"pulses-per-revolution" , &val);if (!err) { -if (val <1 || val >5 ) { -dev_err (dev,"invalid pulses-per-revolution %d of %pOFn\n" , val, child); +if (val <1 || val >4 ) { +dev_err (dev,"invalid pulses-per-revolution %u of %pOFn\n" , val, child);return -EINVAL ; } data->ppr[i] = val;
drivers/hwmon/pmbus/ina233.c +2 -0
@@ -67,6 +67,8 @@ static int ina233_read_word_data(struct i2c_client *client, int page,switch (reg) {case PMBUS_VIRT_READ_VMON : ret =pmbus_read_word_data (client,0 ,0xff ,MFR_READ_VSHUNT ); +if (ret <0 ) +return ret;/* Adjust returned value to match VIN coefficients */ /* VIN: 1.25 mV VSHUNT: 2.5 uV LSB */
drivers/hwmon/pmbus/isl68137.c +5 -2
@@ -96,8 +96,11 @@ static ssize_t isl68137_avs_enable_show_page(struct i2c_client *client, {int val =pmbus_read_byte_data (client, page,PMBUS_OPERATION ); -return sprintf (buf,"%d\n" , - (val &ISL68137_VOUT_AVS ) ==ISL68137_VOUT_AVS ?1 :0 ); +if (val <0 ) +return val; + +return sysfs_emit (buf,"%d\n" , + (val &ISL68137_VOUT_AVS ) ==ISL68137_VOUT_AVS ); } static ssize_t isl68137_avs_enable_store_page(struct i2c_client *client,
drivers/hwmon/pmbus/mp2869.c +21 -14
@@ -165,7 +165,7 @@ static int mp2869_read_byte_data(struct i2c_client *client, int page, int reg) {const struct pmbus_driver_info *info =pmbus_get_driver_info (client);struct mp2869_data *data =to_mp2869_data (info); -int ret; +int ret, mfr;switch (reg) {case PMBUS_VOUT_MODE :
@@ -188,11 +188,14 @@ static int mp2869_read_byte_data(struct i2c_client *client, int page, int reg)if (ret <0 )return ret; + mfr =pmbus_read_byte_data (client, page, +PMBUS_STATUS_MFR_SPECIFIC ); +if (mfr <0 ) +return mfr; + ret = (ret & ~GENMASK (2 ,2 )) |FIELD_PREP (GENMASK (2 ,2 ), -FIELD_GET (GENMASK (1 ,1 ), -pmbus_read_byte_data (client, page, -PMBUS_STATUS_MFR_SPECIFIC ))); +FIELD_GET (GENMASK (1 ,1 ), mfr));break ;case PMBUS_STATUS_TEMPERATURE :/*
@@ -207,15 +210,16 @@ static int mp2869_read_byte_data(struct i2c_client *client, int page, int reg)if (ret <0 )return ret; + mfr =pmbus_read_byte_data (client, page, +PMBUS_STATUS_MFR_SPECIFIC ); +if (mfr <0 ) +return mfr; + ret = (ret & ~GENMASK (7 ,6 )) |FIELD_PREP (GENMASK (6 ,6 ), -FIELD_GET (GENMASK (1 ,1 ), -pmbus_read_byte_data (client, page, -PMBUS_STATUS_MFR_SPECIFIC ))) | +FIELD_GET (GENMASK (1 ,1 ), mfr)) |FIELD_PREP (GENMASK (7 ,7 ), -FIELD_GET (GENMASK (1 ,1 ), -pmbus_read_byte_data (client, page, -PMBUS_STATUS_MFR_SPECIFIC ))); +FIELD_GET (GENMASK (1 ,1 ), mfr));break ;default : ret = -ENODATA ;
@@ -230,7 +234,7 @@ static int mp2869_read_word_data(struct i2c_client *client, int page, int phase, {const struct pmbus_driver_info *info =pmbus_get_driver_info (client);struct mp2869_data *data =to_mp2869_data (info); -int ret; +int ret, mfr;switch (reg) {case PMBUS_STATUS_WORD :
@@ -246,11 +250,14 @@ static int mp2869_read_word_data(struct i2c_client *client, int page, int phase,if (ret <0 )return ret; + mfr =pmbus_read_byte_data (client, page, +PMBUS_STATUS_MFR_SPECIFIC ); +if (mfr <0 ) +return mfr; + ret = (ret & ~GENMASK (2 ,2 )) |FIELD_PREP (GENMASK (2 ,2 ), -FIELD_GET (GENMASK (1 ,1 ), -pmbus_read_byte_data (client, page, -PMBUS_STATUS_MFR_SPECIFIC ))); +FIELD_GET (GENMASK (1 ,1 ), mfr));break ;case PMBUS_READ_VIN :/*
drivers/hwmon/pmbus/mp2975.c +2 -0
@@ -313,6 +313,8 @@ static int mp2973_read_word_data(struct i2c_client *client, int page,case PMBUS_STATUS_WORD :/* MP2973 & MP2971 return PGOOD instead of PB_STATUS_POWER_GOOD_N. */ ret =pmbus_read_word_data (client, page, phase, reg); +if (ret <0 ) +return ret; ret ^=PB_STATUS_POWER_GOOD_N ;break ;case PMBUS_OT_FAULT_LIMIT :
drivers/i2c/busses/i2c-cp2615.c +3 -0
@@ -298,6 +298,9 @@ cp2615_i2c_probe(struct usb_interface *usbif, const struct usb_device_id *id)if (!adap)return -ENOMEM ; +if (!usbdev->serial) +return -EINVAL ; +strscpy (adap->name, usbdev->serial,sizeof (adap->name)); adap->owner =THIS_MODULE ; adap->dev.parent = &usbif->dev;
drivers/i2c/busses/i2c-fsi.c +1 -0
@@ -728,6 +728,7 @@ static int fsi_i2c_probe(struct device *dev) rc =i2c_add_adapter (&port->adapter);if (rc <0 ) {dev_err (dev,"Failed to register adapter: %d\n" , rc); +of_node_put (np);kfree (port);continue ; }
drivers/i2c/busses/i2c-pxa.c +16 -1
@@ -268,6 +268,7 @@ struct pxa_i2c {struct pinctrl *pinctrl;struct pinctrl_state *pinctrl_default;struct pinctrl_state *pinctrl_recovery; +bool reset_before_xfer; };#define _IBMR (i2c) ((i2c)->reg_ibmr)
@@ -1144,6 +1145,11 @@ static int i2c_pxa_xfer(struct i2c_adapter *adap, {struct pxa_i2c *i2c = adap->algo_data; +if (i2c->reset_before_xfer) { +i2c_pxa_reset (i2c); + i2c->reset_before_xfer = false; + } +return i2c_pxa_internal_xfer (i2c, msgs, num, i2c_pxa_do_xfer); }
@@ -1521,7 +1527,16 @@ static int i2c_pxa_probe(struct platform_device *dev) } } -i2c_pxa_reset (i2c); +/* +* Skip reset on Armada 3700 when recovery is used to avoid +* controller hang due to the pinctrl state changes done by +* the generic recovery initialization code. The reset will +* be performed later, prior to the first transfer. +*/ +if (i2c_type ==REGS_A3700 && i2c->adap.bus_recovery_info) + i2c->reset_before_xfer = true; +else +i2c_pxa_reset (i2c); ret =i2c_add_numbered_adapter (&i2c->adap);if (ret <0 )
drivers/iommu/intel/dmar.c +1 -2
@@ -1314,7 +1314,6 @@ static int qi_check_fault(struct intel_iommu *iommu, int index, int wait_index)if (fault &DMA_FSTS_ITE ) { head =readl (iommu->reg +DMAR_IQH_REG ); head = ((head >> shift) -1 +QI_LENGTH ) %QI_LENGTH ; - head |=1 ; tail =readl (iommu->reg +DMAR_IQT_REG ); tail = ((tail >> shift) -1 +QI_LENGTH ) %QI_LENGTH ;
@@ -1331,7 +1330,7 @@ static int qi_check_fault(struct intel_iommu *iommu, int index, int wait_index)do {if (qi->desc_status[head] ==QI_IN_USE ) qi->desc_status[head] =QI_ABORT ; - head = (head -2 +QI_LENGTH ) %QI_LENGTH ; + head = (head -1 +QI_LENGTH ) %QI_LENGTH ; }while (head != tail);/*
drivers/iommu/intel/svm.c +8 -4
@@ -164,9 +164,12 @@ static int intel_svm_set_dev_pasid(struct iommu_domain *domain,if (IS_ERR (dev_pasid))return PTR_ERR (dev_pasid); - ret =iopf_for_domain_replace (domain, old, dev); -if (ret) - goto out_remove_dev_pasid; +/* SVA with non-IOMMU/PRI IOPF handling is allowed. */ +if (info->pri_supported) { + ret =iopf_for_domain_replace (domain, old, dev); +if (ret) + goto out_remove_dev_pasid; + }/* Setup the pasid table: */ sflags =cpu_feature_enabled (X86_FEATURE_LA57 ) ?PASID_FLAG_FL5LP :0 ;
@@ -180,7 +183,8 @@ static int intel_svm_set_dev_pasid(struct iommu_domain *domain,return 0 ; out_unwind_iopf: -iopf_for_domain_replace (old, domain, dev); +if (info->pri_supported) +iopf_for_domain_replace (old, domain, dev); out_remove_dev_pasid:domain_remove_dev_pasid (domain, dev, pasid);return ret;
drivers/iommu/iommu-sva.c +6 -6
@@ -182,13 +182,13 @@ void iommu_sva_unbind_device(struct iommu_sva *handle)iommu_detach_device_pasid (domain, dev, iommu_mm->pasid);if (--domain->users ==0 ) {list_del (&domain->next); -iommu_domain_free (domain); - } +if (list_empty (&iommu_mm->sva_domains)) { +list_del (&iommu_mm->mm_list_elm); +if (list_empty (&iommu_sva_mms)) + iommu_sva_present = false; + } -if (list_empty (&iommu_mm->sva_domains)) { -list_del (&iommu_mm->mm_list_elm); -if (list_empty (&iommu_sva_mms)) - iommu_sva_present = false; +iommu_domain_free (domain); }mutex_unlock (&iommu_sva_lock);
drivers/irqchip/irq-riscv-rpmi-sysmsi.c +1 -0
@@ -250,6 +250,7 @@ static int rpmi_sysmsi_probe(struct platform_device *pdev) rc =riscv_acpi_get_gsi_info (fwnode, &priv->gsi_base, &id, &nr_irqs,NULL );if (rc) { +mbox_free_channel (priv->chan);dev_err (dev,"failed to find GSI mapping\n" );return rc; }
drivers/mmc/host/sdhci-pci-gli.c +9 -0
@@ -68,6 +68,9 @@#define GLI_9750_MISC_TX1_DLY_VALUE 0x5#define SDHCI_GLI_9750_MISC_SSC_OFF BIT(26) +#define SDHCI_GLI_9750_GM_BURST_SIZE 0x510 +#define SDHCI_GLI_9750_GM_BURST_SIZE_R_OSRC_LMT GENMASK(17, 16) +#define SDHCI_GLI_9750_TUNING_CONTROL 0x540#define SDHCI_GLI_9750_TUNING_CONTROL_EN BIT(4)#define GLI_9750_TUNING_CONTROL_EN_ON 0x1
@@ -345,10 +348,16 @@ static void gli_set_9750(struct sdhci_host *host)u32 misc_value;u32 parameter_value;u32 control_value; +u32 burst_value;u16 ctrl2;gl9750_wt_on (host); +/* clear R_OSRC_Lmt to avoid DMA write corruption */ + burst_value =sdhci_readl (host,SDHCI_GLI_9750_GM_BURST_SIZE ); + burst_value &= ~SDHCI_GLI_9750_GM_BURST_SIZE_R_OSRC_LMT ; +sdhci_writel (host, burst_value,SDHCI_GLI_9750_GM_BURST_SIZE ); + driving_value =sdhci_readl (host,SDHCI_GLI_9750_DRIVING ); pll_value =sdhci_readl (host,SDHCI_GLI_9750_PLL ); sw_ctrl_value =sdhci_readl (host,SDHCI_GLI_9750_SW_CTRL );
drivers/mmc/host/sdhci.c +8 -1
@@ -4532,8 +4532,15 @@ int sdhci_setup_host(struct sdhci_host *host)* their platform code before calling sdhci_add_host(), and we * won't assume 8-bit width for hosts without that CAP. */ -if (!(host->quirks &SDHCI_QUIRK_FORCE_1_BIT_DATA )) +if (host->quirks &SDHCI_QUIRK_FORCE_1_BIT_DATA ) { + host->caps1 &= ~(SDHCI_SUPPORT_SDR104 |SDHCI_SUPPORT_SDR50 |SDHCI_SUPPORT_DDR50 ); +if (host->quirks2 &SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 ) + host->caps1 &= ~SDHCI_SUPPORT_HS400 ; + mmc->caps2 &= ~(MMC_CAP2_HS200 |MMC_CAP2_HS400 |MMC_CAP2_HS400_ES ); + mmc->caps &= ~(MMC_CAP_DDR |MMC_CAP_UHS ); + }else { mmc->caps |=MMC_CAP_4_BIT_DATA ; + }if (host->quirks2 &SDHCI_QUIRK2_HOST_NO_CMD23 ) mmc->caps &= ~MMC_CAP_CMD23 ;
drivers/mtd/nand/raw/brcmnand/brcmnand.c +2 -4
@@ -2350,14 +2350,12 @@ static int brcmnand_write(struct mtd_info *mtd, struct nand_chip *chip,for (i =0 ; i < ctrl->max_oob; i +=4 )oob_reg_write (ctrl, i,0xffffffff ); -if (mtd->oops_panic_write) +if (mtd->oops_panic_write) {/* switch to interrupt polling and PIO mode */ disable_ctrl_irqs (ctrl); - -if (use_dma (ctrl) && (has_edu (ctrl) || !oob) &&flash_dma_buf_ok (buf)) { + }else if (use_dma (ctrl) && (has_edu (ctrl) || !oob) &&flash_dma_buf_ok (buf)) {if (ctrl->dma_trans (host, addr, (u32 *)buf, oob, mtd->writesize,CMD_PROGRAM_PAGE )) - ret = -EIO ; goto out;
drivers/mtd/nand/raw/cadence-nand-controller.c +1 -1
@@ -2878,7 +2878,7 @@ static int cadence_nand_init(struct cdns_nand_ctrl *cdns_ctrl)sizeof (*cdns_ctrl->cdma_desc), &cdns_ctrl->dma_cdma_desc, GFP_KERNEL); -if (!cdns_ctrl->dma_cdma_desc) +if (!cdns_ctrl->cdma_desc)return -ENOMEM ; cdns_ctrl->buf_size =SZ_16K ;
drivers/mtd/nand/raw/nand_base.c +12 -2
@@ -4737,11 +4737,16 @@ static void nand_shutdown(struct mtd_info *mtd)static int nand_lock (struct mtd_info *mtd,loff_t ofs,uint64_t len) {struct nand_chip *chip =mtd_to_nand (mtd); +int ret;if (!chip->ops.lock_area)return -ENOTSUPP ; -return chip->ops.lock_area (chip, ofs, len); +nand_get_device (chip); + ret = chip->ops.lock_area (chip, ofs, len); +nand_release_device (chip); + +return ret; }/**
@@ -4753,11 +4758,16 @@ static int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)static int nand_unlock (struct mtd_info *mtd,loff_t ofs,uint64_t len) {struct nand_chip *chip =mtd_to_nand (mtd); +int ret;if (!chip->ops.unlock_area)return -ENOTSUPP ; -return chip->ops.unlock_area (chip, ofs, len); +nand_get_device (chip); + ret = chip->ops.unlock_area (chip, ofs, len); +nand_release_device (chip); + +return ret; }/* Set default functions */
drivers/mtd/nand/raw/pl35x-nand-controller.c +3 -0
@@ -862,6 +862,9 @@ static int pl35x_nfc_setup_interface(struct nand_chip *chip, int cs,PL35X_SMC_NAND_TAR_CYCLES (tmgs.t_ar) |PL35X_SMC_NAND_TRR_CYCLES (tmgs.t_rr); +writel (plnand->timings, nfc->conf_regs +PL35X_SMC_CYCLES ); +pl35x_smc_update_regs (nfc); +return 0 ; }
drivers/mtd/parsers/redboot.c +3 -3
@@ -270,9 +270,9 @@ static int parse_redboot_partitions(struct mtd_info *master,strcpy (names, fl->img->name);#ifdef CONFIG_MTD_REDBOOT_PARTS_READONLY -if (!memcmp (names,"RedBoot" ,8 ) || - !memcmp (names,"RedBoot config" ,15 ) || - !memcmp (names,"FIS directory" ,14 )) { +if (!strcmp (names,"RedBoot" ) || + !strcmp (names,"RedBoot config" ) || + !strcmp (names,"FIS directory" )) { parts[i].mask_flags =MTD_WRITEABLE ; }#endif
drivers/net/bonding/bond_debugfs.c +11 -5
@@ -34,11 +34,17 @@ static int bond_debug_rlb_hash_show(struct seq_file *m, void *v)for (; hash_index !=RLB_NULL_INDEX ; hash_index = client_info->used_next) { client_info = &(bond_info->rx_hashtbl[hash_index]); -seq_printf (m,"%-15pI4 %-15pI4 %-17pM %s\n" , - &client_info->ip_src, - &client_info->ip_dst, - &client_info->mac_dst, - client_info->slave->dev->name); +if (client_info->slave) +seq_printf (m,"%-15pI4 %-15pI4 %-17pM %s\n" , + &client_info->ip_src, + &client_info->ip_dst, + &client_info->mac_dst, + client_info->slave->dev->name); +else +seq_printf (m,"%-15pI4 %-15pI4 %-17pM (none)\n" , + &client_info->ip_src, + &client_info->ip_dst, + &client_info->mac_dst); }spin_unlock_bh (&bond->mode_lock);
drivers/net/bonding/bond_main.c +5 -3
@@ -1497,9 +1497,11 @@ static int bond_header_create(struct sk_buff *skb, struct net_device *bond_dev,return ret; } -static int bond_header_parse (const struct sk_buff *skb,unsigned char *haddr) +static int bond_header_parse (const struct sk_buff *skb, +const struct net_device *dev, +unsigned char *haddr) { -struct bonding *bond =netdev_priv (skb->dev); +struct bonding *bond =netdev_priv (dev);const struct header_ops *slave_ops;struct slave *slave;int ret =0 ;
@@ -1509,7 +1511,7 @@ static int bond_header_parse(const struct sk_buff *skb, unsigned char *haddr)if (slave) { slave_ops =READ_ONCE (slave->dev->header_ops);if (slave_ops && slave_ops->parse) - ret = slave_ops->parse (skb, haddr); + ret = slave_ops->parse (skb, slave->dev, haddr); }rcu_read_unlock ();return ret;
drivers/net/dsa/bcm_sf2.c +6 -2
@@ -980,15 +980,19 @@ static int bcm_sf2_sw_resume(struct dsa_switch *ds) ret =bcm_sf2_sw_rst (priv);if (ret) {pr_err ("%s: failed to software reset switch\n" , __func__); +if (!priv->wol_ports_mask) +clk_disable_unprepare (priv->clk);return ret; }bcm_sf2_crossbar_setup (priv); ret =bcm_sf2_cfp_resume (ds); -if (ret) +if (ret) { +if (!priv->wol_ports_mask) +clk_disable_unprepare (priv->clk);return ret; - + }if (priv->hw_params.num_gphy ==1 )bcm_sf2_gphy_enable_set (ds, true);
drivers/net/ethernet/airoha/airoha_eth.c +0 -1
@@ -3046,7 +3046,6 @@ static void airoha_remove(struct platform_device *pdev)if (!port)continue ; -airoha_dev_stop (port->dev);unregister_netdev (port->dev);airoha_metadata_dst_free (port); }
drivers/net/ethernet/broadcom/bnxt/bnxt.c +2 -0
@@ -2927,6 +2927,8 @@ static int bnxt_async_event_process(struct bnxt *bp,u16 type = (u16 )BNXT_EVENT_BUF_PRODUCER_TYPE (data1);u32 offset =BNXT_EVENT_BUF_PRODUCER_OFFSET (data2); +if (type >=ARRAY_SIZE (bp->bs_trace)) + goto async_event_process_exit;bnxt_bs_trace_check_wrap (&bp->bs_trace[type], offset); goto async_event_process_exit; }
drivers/net/ethernet/broadcom/bnxt/bnxt.h +1 -1
@@ -2134,7 +2134,7 @@ enum board_idx { };#define BNXT_TRACE_BUF_MAGIC_BYTE ((u8)0xbc) -#define BNXT_TRACE_MAX 11 +#define BNXT_TRACE_MAX (DBG_LOG_BUFFER_FLUSH_REQ_TYPE_ERR_QPC_TRACE + 1)struct bnxt_bs_trace_info {u8 *magic_byte;
drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c +1 -1
@@ -123,7 +123,7 @@ static int bcmgenet_poll_wol_status(struct bcmgenet_priv *priv)while (!(bcmgenet_rbuf_readl (priv,RBUF_STATUS ) &RBUF_STATUS_WOL )) { retries++; -if (retries >5 ) { +if (retries >50 ) {netdev_crit (dev,"polling wol mode timeout\n" );return -ETIMEDOUT ; }
drivers/net/ethernet/cadence/macb_main.c +136 -25
224 lines not on this page · raw message
drivers/net/ethernet/cadence/macb_ptp.c +3 -1
@@ -355,8 +355,10 @@ void gem_ptp_remove(struct net_device *ndev) {struct macb *bp =netdev_priv (ndev); -if (bp->ptp_clock) +if (bp->ptp_clock) {ptp_clock_unregister (bp->ptp_clock); + bp->ptp_clock =NULL ; + }gem_ptp_clear_timer (bp);
drivers/net/ethernet/intel/iavf/iavf_main.c +6 -3
@@ -757,10 +757,13 @@ iavf_vlan_filter *iavf_add_vlan(struct iavf_adapter *adapter, adapter->num_vlan_filters++;iavf_schedule_aq_request (adapter,IAVF_FLAG_AQ_ADD_VLAN_FILTER ); }else if (f->state ==IAVF_VLAN_REMOVE ) { -/* IAVF_VLAN_REMOVE means that VLAN wasn't yet removed. -* We can safely only change the state here. +/* Re-add the filter since we cannot tell whether the +* pending delete has already been processed by the PF. +* A duplicate add is harmless. */ - f->state =IAVF_VLAN_ACTIVE ; + f->state =IAVF_VLAN_ADD ; +iavf_schedule_aq_request (adapter, +IAVF_FLAG_AQ_ADD_VLAN_FILTER ); } clearout:
drivers/net/ethernet/intel/igc/igc.h +2 -0
@@ -781,6 +781,8 @@ int igc_ptp_hwtstamp_set(struct net_device *netdev,struct kernel_hwtstamp_config *config, struct netlink_ext_ack *extack);void igc_ptp_tx_hang (struct igc_adapter *adapter); +void igc_ptp_clear_xsk_tx_tstamp_queue (struct igc_adapter *adapter, +u16 queue_id);void igc_ptp_read (struct igc_adapter *adapter,struct timespec64 *ts);void igc_ptp_tx_tstamp_event (struct igc_adapter *adapter);
drivers/net/ethernet/intel/igc/igc_main.c +9 -5
@@ -264,6 +264,13 @@ static void igc_clean_tx_ring(struct igc_ring *tx_ring)/* reset next_to_use and next_to_clean */ tx_ring->next_to_use =0 ; tx_ring->next_to_clean =0 ; + +/* Clear any lingering XSK TX timestamp requests */ +if (test_bit (IGC_RING_FLAG_TX_HWTSTAMP , &tx_ring->flags)) { +struct igc_adapter *adapter =netdev_priv (tx_ring->netdev); + +igc_ptp_clear_xsk_tx_tstamp_queue (adapter, tx_ring->queue_index); + } }/**
@@ -1730,11 +1737,8 @@ static netdev_tx_t igc_xmit_frame(struct sk_buff *skb,/* The minimum packet size with TCTL.PSP set is 17 so pad the skb * in order to meet this minimum size requirement. */ -if (skb->len <17 ) { -if (skb_padto (skb,17 )) -return NETDEV_TX_OK ; - skb->len =17 ; - } +if (skb_put_padto (skb,17 )) +return NETDEV_TX_OK ;return igc_xmit_frame_ring (skb,igc_tx_queue_mapping (adapter, skb)); }
drivers/net/ethernet/intel/igc/igc_ptp.c +33 -0
@@ -576,6 +576,39 @@ static void igc_ptp_clear_tx_tstamp(struct igc_adapter *adapter)spin_unlock_irqrestore (&adapter->ptp_tx_lock, flags); } +/** +* igc_ptp_clear_xsk_tx_tstamp_queue - Clear pending XSK TX timestamps for a queue +* @adapter: Board private structure +* @queue_id: TX queue index to clear timestamps for +* +* Iterates over all TX timestamp registers and releases any pending +* timestamp requests associated with the given TX queue. This is +* called when an XDP pool is being disabled to ensure no stale +* timestamp references remain. +*/ +void igc_ptp_clear_xsk_tx_tstamp_queue (struct igc_adapter *adapter,u16 queue_id) +{ +unsigned long flags; +int i; + +spin_lock_irqsave (&adapter->ptp_tx_lock, flags); + +for (i =0 ; i <IGC_MAX_TX_TSTAMP_REGS ; i++) { +struct igc_tx_timestamp_request *tstamp = &adapter->tx_tstamp[i]; + +if (tstamp->buffer_type !=IGC_TX_BUFFER_TYPE_XSK ) +continue ; +if (tstamp->xsk_queue_index != queue_id) +continue ; +if (!tstamp->xsk_tx_buffer) +continue ; + +igc_ptp_free_tx_buffer (adapter, tstamp); + } + +spin_unlock_irqrestore (&adapter->ptp_tx_lock, flags); +} +static void igc_ptp_disable_tx_timestamp (struct igc_adapter *adapter) {struct igc_hw *hw = &adapter->hw;
drivers/net/ethernet/intel/libie/fwlog.c +36 -13
110 lines not on this page · raw message
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +2 -2
@@ -5018,7 +5018,7 @@ static int mvpp2_bm_switch_buffers(struct mvpp2 *priv, bool percpu)if (priv->percpu_pools) numbufs = port->nrxqs *2 ; -if (change_percpu) +if (change_percpu && priv->global_tx_fc)mvpp2_bm_pool_update_priv_fc (priv, false);for (i =0 ; i < numbufs; i++)
@@ -5043,7 +5043,7 @@ static int mvpp2_bm_switch_buffers(struct mvpp2 *priv, bool percpu)mvpp2_open (port->dev); } -if (change_percpu) +if (change_percpu && priv->global_tx_fc)mvpp2_bm_pool_update_priv_fc (priv, true);return 0 ;
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h +1 -0
@@ -287,6 +287,7 @@ struct mlx5e_ipsec_sa_entry {struct mlx5e_ipsec_dwork *dwork;struct mlx5e_ipsec_limits limits;u32 rx_mapped_id; +u8 ctx[MLX5_ST_SZ_BYTES (ipsec_aso)]; };struct mlx5_accel_pol_xfrm_attrs {
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_offload.c +22 -28
105 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c +9 -14
@@ -1497,24 +1497,24 @@ static int esw_qos_node_enable_tc_arbitration(struct mlx5_esw_sched_node *node,return err; } -static u32 mlx5_esw_qos_lag_link_speed_get_locked (struct mlx5_core_dev *mdev) +static u32 mlx5_esw_qos_lag_link_speed_get (struct mlx5_core_dev *mdev, +bool take_rtnl) {struct ethtool_link_ksettings lksettings;struct net_device *slave, *master;u32 speed =SPEED_UNKNOWN ; -/* Lock ensures a stable reference to master and slave netdevice -* while port speed of master is queried. -*/ -ASSERT_RTNL (); - slave =mlx5_uplink_netdev_get (mdev);if (!slave) goto out; +if (take_rtnl) +rtnl_lock (); master =netdev_master_upper_dev_get (slave);if (master && !__ethtool_get_link_ksettings (master, &lksettings)) speed = lksettings.base.speed; +if (take_rtnl) +rtnl_unlock (); out:mlx5_uplink_netdev_put (mdev, slave);
@@ -1522,20 +1522,15 @@ static u32 mlx5_esw_qos_lag_link_speed_get_locked(struct mlx5_core_dev *mdev) }static int mlx5_esw_qos_max_link_speed_get (struct mlx5_core_dev *mdev,u32 *link_speed_max, -bool hold_rtnl_lock,struct netlink_ext_ack *extack) +bool take_rtnl, +struct netlink_ext_ack *extack) {int err;if (!mlx5_lag_is_active (mdev)) goto skip_lag; -if (hold_rtnl_lock) -rtnl_lock (); - - *link_speed_max =mlx5_esw_qos_lag_link_speed_get_locked (mdev); - -if (hold_rtnl_lock) -rtnl_unlock (); + *link_speed_max =mlx5_esw_qos_lag_link_speed_get (mdev, take_rtnl);if (*link_speed_max != (u32 )SPEED_UNKNOWN )return 0 ;
drivers/net/ethernet/microsoft/mana/hw_channel.c +3 -3
@@ -802,9 +802,6 @@ void mana_hwc_destroy_channel(struct gdma_context *gc) gc->max_num_cqs =0 ; } -kfree (hwc->caller_ctx); - hwc->caller_ctx =NULL ; -if (hwc->txq)mana_hwc_destroy_wq (hwc, hwc->txq);
@@ -814,6 +811,9 @@ void mana_hwc_destroy_channel(struct gdma_context *gc)if (hwc->cq)mana_hwc_destroy_cq (hwc->gdma_dev->gdma_context, hwc->cq); +kfree (hwc->caller_ctx); + hwc->caller_ctx =NULL ; +mana_gd_free_res_map (&hwc->inflight_msg_res); hwc->num_inflight_msg =0 ;
drivers/net/netconsole.c +1 -1
@@ -503,7 +503,7 @@ static ssize_t sysdata_release_enabled_show(struct config_item *item,bool release_enabled;mutex_lock (&dynamic_netconsole_mutex); - release_enabled = !!(nt->sysdata_fields &SYSDATA_TASKNAME ); + release_enabled = !!(nt->sysdata_fields &SYSDATA_RELEASE );mutex_unlock (&dynamic_netconsole_mutex);return sysfs_emit (buf,"%d\n" , release_enabled);
drivers/net/netdevsim/netdev.c +4 -1
@@ -109,8 +109,11 @@ static int nsim_forward_skb(struct net_device *tx_dev,int ret; ret =__dev_forward_skb (rx_dev, skb); -if (ret) +if (ret) { +if (psp_ext) +__skb_ext_put (psp_ext);return ret; + }nsim_psp_handle_ext (skb, psp_ext);
drivers/net/usb/aqc111.c +6 -6
@@ -1400,14 +1400,14 @@ static int aqc111_suspend(struct usb_interface *intf, pm_message_t message)aqc111_write16_cmd_nopm (dev,AQ_ACCESS_MAC ,SFR_MEDIUM_STATUS_MODE ,2 , ®16); -aqc111_write_cmd (dev,AQ_WOL_CFG ,0 ,0 , -WOL_CFG_SIZE , &wol_cfg); -aqc111_write32_cmd (dev,AQ_PHY_OPS ,0 ,0 , - &aqc111_data->phy_cfg); +aqc111_write_cmd_nopm (dev,AQ_WOL_CFG ,0 ,0 , +WOL_CFG_SIZE , &wol_cfg); +aqc111_write32_cmd_nopm (dev,AQ_PHY_OPS ,0 ,0 , + &aqc111_data->phy_cfg); }else { aqc111_data->phy_cfg |=AQ_LOW_POWER ; -aqc111_write32_cmd (dev,AQ_PHY_OPS ,0 ,0 , - &aqc111_data->phy_cfg); +aqc111_write32_cmd_nopm (dev,AQ_PHY_OPS ,0 ,0 , + &aqc111_data->phy_cfg);/* Disable RX path */ aqc111_read16_cmd_nopm(dev, AQ_ACCESS_MAC,
drivers/net/usb/cdc_ncm.c +6 -4
@@ -1656,6 +1656,7 @@ int cdc_ncm_rx_verify_ndp16(struct sk_buff *skb_in, int ndpoffset)struct usbnet *dev =netdev_priv (skb_in->dev);struct usb_cdc_ncm_ndp16 *ndp16;int ret = -EINVAL ; +size_t ndp_len;if ((ndpoffset +sizeof (struct usb_cdc_ncm_ndp16 )) > skb_in->len) { netif_dbg(dev, rx_err, dev->net, "invalid NDP offset <%u>\n",
@@ -1675,8 +1676,8 @@ int cdc_ncm_rx_verify_ndp16(struct sk_buff *skb_in, int ndpoffset) sizeof(struct usb_cdc_ncm_dpe16)); ret--;/* we process NDP entries except for the last one */ -if ((sizeof (struct usb_cdc_ncm_ndp16 ) + - ret * (sizeof (struct usb_cdc_ncm_dpe16 ))) > skb_in->len) { + ndp_len = struct_size_t(struct usb_cdc_ncm_ndp16, dpe16, ret); +if (ndpoffset + ndp_len > skb_in->len) {netif_dbg (dev, rx_err, dev->net,"Invalid nframes = %d\n" , ret); ret = -EINVAL ; }
@@ -1692,6 +1693,7 @@ int cdc_ncm_rx_verify_ndp32(struct sk_buff *skb_in, int ndpoffset)struct usbnet *dev =netdev_priv (skb_in->dev);struct usb_cdc_ncm_ndp32 *ndp32;int ret = -EINVAL ; +size_t ndp_len;if ((ndpoffset +sizeof (struct usb_cdc_ncm_ndp32 )) > skb_in->len) { netif_dbg(dev, rx_err, dev->net, "invalid NDP offset <%u>\n",
@@ -1711,8 +1713,8 @@ int cdc_ncm_rx_verify_ndp32(struct sk_buff *skb_in, int ndpoffset) sizeof(struct usb_cdc_ncm_dpe32)); ret--;/* we process NDP entries except for the last one */ -if ((sizeof (struct usb_cdc_ncm_ndp32 ) + - ret * (sizeof (struct usb_cdc_ncm_dpe32 ))) > skb_in->len) { + ndp_len = struct_size_t(struct usb_cdc_ncm_ndp32, dpe32, ret); +if (ndpoffset + ndp_len > skb_in->len) {netif_dbg (dev, rx_err, dev->net,"Invalid nframes = %d\n" , ret); ret = -EINVAL ; }
drivers/net/wireless/ath/ath9k/channel.c +2 -4
@@ -1006,7 +1006,7 @@ static void ath_scan_send_probe(struct ath_softc *sc,skb_set_queue_mapping (skb,IEEE80211_AC_VO );if (!ieee80211_tx_prepare_skb (sc->hw, vif, skb, band,NULL )) - goto error; +return ; txctl.txq = sc->tx.txq_map[IEEE80211_AC_VO ];if (ath_tx_start (sc->hw, skb, &txctl))
@@ -1119,10 +1119,8 @@ ath_chanctx_send_vif_ps_frame(struct ath_softc *sc, struct ath_vif *avp, skb->priority =7 ;skb_set_queue_mapping (skb,IEEE80211_AC_VO ); -if (!ieee80211_tx_prepare_skb (sc->hw, vif, skb, band, &sta)) { -dev_kfree_skb_any (skb); +if (!ieee80211_tx_prepare_skb (sc->hw, vif, skb, band, &sta))return false; - }break ;default :return false;
drivers/net/wireless/mediatek/mt76/scan.c +1 -3
@@ -63,10 +63,8 @@ mt76_scan_send_probe(struct mt76_dev *dev, struct cfg80211_ssid *ssid)rcu_read_lock (); -if (!ieee80211_tx_prepare_skb (phy->hw, vif, skb, band,NULL )) { -ieee80211_free_txskb (phy->hw, skb); +if (!ieee80211_tx_prepare_skb (phy->hw, vif, skb, band,NULL )) goto out; - } info =IEEE80211_SKB_CB (skb);if (req->no_cck)
drivers/net/wireless/ti/wlcore/tx.c +1 -1
@@ -210,7 +210,7 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct wl12xx_vif *wlvif,if (skb_headroom (skb) < (total_len - skb->len) &&pskb_expand_head (skb, (total_len - skb->len),0 ,GFP_ATOMIC )) {wl1271_free_tx_id (wl, id); -return -EAGAIN ; +return -ENOMEM ; } desc =skb_push (skb, total_len - skb->len);
drivers/net/wireless/virtual/mac80211_hwsim.c +0 -1
@@ -3021,7 +3021,6 @@ static void hw_scan_work(struct work_struct *work) hwsim->tmp_chan->band, NULL)) {rcu_read_unlock (); -kfree_skb (probe);continue ; }
drivers/nfc/nxp-nci/i2c.c +2 -2
@@ -47,8 +47,8 @@ static int nxp_nci_i2c_set_mode(void *phy_id, {struct nxp_nci_i2c_phy *phy = (struct nxp_nci_i2c_phy *) phy_id; -gpiod_set_value (phy->gpiod_fw, (mode ==NXP_NCI_MODE_FW ) ?1 :0 ); -gpiod_set_value (phy->gpiod_en, (mode !=NXP_NCI_MODE_COLD ) ?1 :0 ); +gpiod_set_value_cansleep (phy->gpiod_fw, (mode ==NXP_NCI_MODE_FW ) ?1 :0 ); +gpiod_set_value_cansleep (phy->gpiod_en, (mode !=NXP_NCI_MODE_COLD ) ?1 :0 );usleep_range (10000 ,15000 );if (mode ==NXP_NCI_MODE_COLD )
drivers/nvdimm/bus.c +3 -2
@@ -486,14 +486,15 @@ EXPORT_SYMBOL_GPL(nd_synchronize);static void nd_async_device_register (void *d,async_cookie_t cookie) {struct device *dev = d; +struct device *parent = dev->parent;if (device_add (dev) !=0 ) {dev_err (dev,"%s: failed\n" , __func__);put_device (dev); }put_device (dev); -if (dev->parent) -put_device (dev->parent); +if (parent) +put_device (parent); }static void nd_async_device_unregister (void *d,async_cookie_t cookie)
drivers/pmdomain/bcm/bcm2835-power.c +4 -8
@@ -9,6 +9,7 @@#include <linux/clk.h> #include <linux/delay.h> #include <linux/io.h> +#include <linux/iopoll.h> #include <linux/mfd/bcm2835-pm.h> #include <linux/module.h> #include <linux/platform_device.h>
@@ -152,7 +153,6 @@ struct bcm2835_power {static int bcm2835_asb_control (struct bcm2835_power *power,u32 reg,bool enable) {void __iomem *base = power->asb; -u64 start;u32 val;switch (reg) {
@@ -165,8 +165,6 @@ static int bcm2835_asb_control(struct bcm2835_power *power, u32 reg, bool enablebreak ; } - start =ktime_get_ns (); -/* Enable the module's async AXI bridges. */ if (enable) { val =readl (base + reg) & ~ASB_REQ_STOP ;
@@ -175,11 +173,9 @@ static int bcm2835_asb_control(struct bcm2835_power *power, u32 reg, bool enable }writel (PM_PASSWORD | val, base + reg); -while (!!(readl (base + reg) &ASB_ACK ) == enable) { -cpu_relax (); -if (ktime_get_ns () - start >=1000 ) -return -ETIMEDOUT ; - } +if (readl_poll_timeout_atomic (base + reg, val, + !!(val &ASB_ACK ) != enable,0 ,5 )) +return -ETIMEDOUT ;return 0 ; }
drivers/soc/fsl/qbman/qman.c +22 -2
@@ -1827,6 +1827,8 @@ EXPORT_SYMBOL(qman_create_fq);void qman_destroy_fq (struct qman_fq *fq) { +int leaked; +/* * We don't need to lock the FQ as it is a pre-condition that the FQ be * quiesced. Instead, run some checks.
@@ -1834,11 +1836,29 @@ void qman_destroy_fq(struct qman_fq *fq)switch (fq->state) {case qman_fq_state_parked:case qman_fq_state_oos: -if (fq_isset (fq,QMAN_FQ_FLAG_DYNAMIC_FQID )) -qman_release_fqid (fq->fqid); +/* +* There's a race condition here on releasing the fqid, +* setting the fq_table to NULL, and freeing the fqid. +* To prevent it, this order should be respected: +*/ +if (fq_isset (fq,QMAN_FQ_FLAG_DYNAMIC_FQID )) { + leaked =qman_shutdown_fq (fq->fqid); +if (leaked) +pr_debug ("FQID %d leaked\n" , fq->fqid); + }DPAA_ASSERT (fq_table[fq->idx]); fq_table[fq->idx] =NULL ; + +if (fq_isset (fq,QMAN_FQ_FLAG_DYNAMIC_FQID ) && !leaked) { +/* +* fq_table[fq->idx] should be set to null before +* freeing fq->fqid otherwise it could by allocated by +* qman_alloc_fqid() while still being !NULL +*/ +smp_wmb (); +gen_pool_free (qm_fqalloc, fq->fqid |DPAA_GENALLOC_OFF ,1 ); + }return ;default :break ;
drivers/soc/fsl/qe/qmc.c +2 -2
@@ -1799,8 +1799,8 @@ static int qmc_qe_init_resources(struct qmc *qmc, struct platform_device *pdev)return -EINVAL ; qmc->dpram_offset = res->start -qe_muram_dma (qe_muram_addr (0 )); qmc->dpram =devm_ioremap_resource (qmc->dev, res); -if (IS_ERR (qmc->scc_pram)) -return PTR_ERR (qmc->scc_pram); +if (IS_ERR (qmc->dpram)) +return PTR_ERR (qmc->dpram);return 0 ; }
drivers/soc/microchip/mpfs-sys-controller.c +9 -4
@@ -142,8 +142,10 @@ static int mpfs_sys_controller_probe(struct platform_device *pdev) sys_controller->flash =of_get_mtd_device_by_node (np);of_node_put (np); -if (IS_ERR (sys_controller->flash)) -return dev_err_probe (dev,PTR_ERR (sys_controller->flash),"Failed to get flash\n" ); +if (IS_ERR (sys_controller->flash)) { + ret =dev_err_probe (dev,PTR_ERR (sys_controller->flash),"Failed to get flash\n" ); + goto out_free; + } no_flash: sys_controller->client.dev = dev;
@@ -155,8 +157,7 @@ static int mpfs_sys_controller_probe(struct platform_device *pdev)if (IS_ERR (sys_controller->chan)) { ret =dev_err_probe (dev,PTR_ERR (sys_controller->chan),"Failed to get mbox channel\n" ); -kfree (sys_controller); -return ret; + goto out_free; }init_completion (&sys_controller->c);
@@ -174,6 +175,10 @@ static int mpfs_sys_controller_probe(struct platform_device *pdev)dev_info (&pdev->dev,"Registered MPFS system controller\n" );return 0 ; + +out_free: +kfree (sys_controller); +return ret; }static void mpfs_sys_controller_remove (struct platform_device *pdev)
drivers/soc/rockchip/grf.c +1 -0
@@ -216,6 +216,7 @@ static int __init rockchip_grf_init(void) grf =syscon_node_to_regmap (np);if (IS_ERR (grf)) {pr_err ("%s: could not get grf syscon\n" , __func__); +of_node_put (np);return PTR_ERR (grf); }
drivers/spi/spi-amlogic-spifc-a4.c +7 -39
78 lines not on this page · raw message
drivers/spi/spi-amlogic-spisg.c +4 -8
@@ -729,9 +729,9 @@ static int aml_spisg_probe(struct platform_device *pdev) };if (of_property_read_bool (dev->of_node,"spi-slave" )) - ctlr =spi_alloc_target (dev,sizeof (*spisg)); + ctlr =devm_spi_alloc_target (dev,sizeof (*spisg));else - ctlr =spi_alloc_host (dev,sizeof (*spisg)); + ctlr =devm_spi_alloc_host (dev,sizeof (*spisg));if (!ctlr)return -ENOMEM ;
@@ -750,10 +750,8 @@ static int aml_spisg_probe(struct platform_device *pdev)return dev_err_probe (dev,PTR_ERR (spisg->map),"regmap init failed\n" ); irq =platform_get_irq (pdev,0 ); -if (irq <0 ) { - ret = irq; - goto out_controller; - } +if (irq <0 ) +return irq; ret =device_reset_optional (dev);if (ret)
@@ -818,8 +816,6 @@ static int aml_spisg_probe(struct platform_device *pdev)if (spisg->core)clk_disable_unprepare (spisg->core);clk_disable_unprepare (spisg->pclk); -out_controller: -spi_controller_put (ctlr);return ret; }
drivers/spi/spi.c +12 -13
@@ -2914,6 +2914,8 @@ static void spi_controller_release(struct device *dev)struct spi_controller *ctlr; ctlr = container_of(dev, struct spi_controller, dev); + +free_percpu (ctlr->pcpu_statistics);kfree (ctlr); }
@@ -3057,6 +3059,12 @@ struct spi_controller *__spi_alloc_controller(struct device *dev,if (!ctlr)return NULL ; + ctlr->pcpu_statistics =spi_alloc_pcpu_stats (NULL ); +if (!ctlr->pcpu_statistics) { +kfree (ctlr); +return NULL ; + } +device_initialize (&ctlr->dev);INIT_LIST_HEAD (&ctlr->queue);spin_lock_init (&ctlr->queue_lock);
@@ -3344,17 +3352,8 @@ int spi_register_controller(struct spi_controller *ctlr)dev_info (dev,"controller is unqueued, this is deprecated\n" ); }else if (ctlr->transfer_one || ctlr->transfer_one_message) { status =spi_controller_initialize_queue (ctlr); -if (status) { -device_del (&ctlr->dev); - goto free_bus_id; - } - } -/* Add statistics */ - ctlr->pcpu_statistics =spi_alloc_pcpu_stats (dev); -if (!ctlr->pcpu_statistics) { -dev_err (dev,"Error allocating per-cpu statistics\n" ); - status = -ENOMEM ; - goto destroy_queue; +if (status) + goto del_ctrl; }mutex_lock (&board_lock);
@@ -3368,8 +3367,8 @@ int spi_register_controller(struct spi_controller *ctlr)acpi_register_spi_devices (ctlr);return status; -destroy_queue: -spi_destroy_queue (ctlr); +del_ctrl: +device_del (&ctlr->dev); free_bus_id:mutex_lock (&board_lock);idr_remove (&spi_controller_idr, ctlr->bus_num);
drivers/tee/tee_shm.c +0 -27
@@ -23,29 +23,11 @@ struct tee_shm_dma_mem {struct page *page; }; -static void shm_put_kernel_pages (struct page **pages,size_t page_count) -{ -size_t n; - -for (n =0 ; n < page_count; n++) -put_page (pages[n]); -} - -static void shm_get_kernel_pages (struct page **pages,size_t page_count) -{ -size_t n; - -for (n =0 ; n < page_count; n++) -get_page (pages[n]); -} -static void release_registered_pages (struct tee_shm *shm) {if (shm->pages) {if (shm->flags &TEE_SHM_USER_MAPPED )unpin_user_pages (shm->pages, shm->num_pages); -else -shm_put_kernel_pages (shm->pages, shm->num_pages);kfree (shm->pages); }
@@ -477,13 +459,6 @@ register_shm_helper(struct tee_context *ctx, struct iov_iter *iter, u32 flags, goto err_put_shm_pages; } -/* -* iov_iter_extract_kvec_pages does not get reference on the pages, -* get a reference on them. -*/
Lines of this file are not shown. View the raw message.
drivers/tty/serial/8250/8250_dw.c +235 -61
296 lines not on this page · raw message
drivers/tty/serial/8250/8250_port.c +45 -30
75 lines not on this page · raw message
drivers/usb/serial/f81232.c +47 -30
77 lines not on this page · raw message
drivers/xen/privcmd.c +70 -3
73 lines not on this page · raw message
fs/nfsd/export.c +54 -9
63 lines not on this page · raw message
fs/smb/client/misc.c +42 -0
42 lines not on this page · raw message
kernel/sched/ext.c +93 -39
132 lines not on this page · raw message
net/bluetooth/l2cap_core.c +31 -20
51 lines not on this page · raw message
net/shaper/shaper.c +93 -65
158 lines not on this page · raw message
tools/testing/selftests/hid/progs/hid_bpf_helpers.h +12 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.