Linux 6.12.81
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.12.81 kernel.
All users of the 6.12 kernel series must upgrade.
The updated 6.12.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.12.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/auxdisplay/holtek,ht16k33.yaml | 2 Documentation/devicetree/bindings/connector/usb-connector.yaml | 1 Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml | 4 Makefile | 2 arch/arm64/kernel/pi/patch-scs.c | 8 arch/loongarch/include/asm/setup.h | 3 arch/loongarch/kernel/unwind_orc.c | 32 - arch/mips/lib/multi3.c | 6 arch/mips/mm/cache.c | 3 arch/mips/mm/tlb-r4k.c | 2 arch/mips/ralink/clk.c | 8 arch/riscv/kernel/kgdb.c | 7 arch/s390/kernel/perf_cpum_sf.c | 30 - arch/x86/coco/sev/core.c | 6 arch/x86/entry/entry_fred.c | 14 arch/x86/kernel/cpu/amd.c | 7 crypto/af_alg.c | 4 drivers/accel/qaic/qaic_control.c | 47 + drivers/comedi/drivers.c | 8 drivers/comedi/drivers/dt2815.c | 12 drivers/comedi/drivers/me4000.c | 16 drivers/comedi/drivers/me_daq.c | 35 - drivers/comedi/drivers/ni_atmio16d.c | 3 drivers/counter/rz-mtu3-cnt.c | 67 +- drivers/cpufreq/cpufreq_governor.c | 6 drivers/crypto/caam/caamalg_qi2.c | 3 drivers/crypto/caam/caamhash.c | 3 drivers/crypto/tegra/tegra-se-aes.c | 11 drivers/crypto/tegra/tegra-se-hash.c | 30 - drivers/firmware/microchip/mpfs-auto-update.c | 10 drivers/gpio/gpio-mxc.c | 10 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 39 + drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 2 drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 4 drivers/gpu/drm/amd/display/dc/clk_mgr/dce100/dce_clk_mgr.c | 17 drivers/gpu/drm/amd/display/dc/dce60/dce60_resource.c | 49 + drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c | 6 drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 1 drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c | 1 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 33 + drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 33 + drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c | 1 drivers/gpu/drm/ast/ast_dp501.c | 2 drivers/gpu/drm/drm_file.c | 5 drivers/gpu/drm/drm_ioc32.c | 2 drivers/gpu/drm/drm_mode_config.c | 9 drivers/gpu/drm/i915/display/g4x_dp.c | 2 drivers/gpu/drm/i915/display/icl_dsi.c | 4 drivers/hid/hid-logitech-hidpp.c | 6 drivers/hid/hid-multitouch.c | 7 drivers/hid/wacom_wac.c | 10 drivers/hwmon/occ/common.c | 19 drivers/hwmon/pmbus/ltc4286.c | 1 drivers/hwmon/pmbus/pxe1610.c | 5 drivers/hwmon/pmbus/tps53679.c | 4 drivers/i2c/busses/Kconfig | 2 drivers/i2c/busses/i2c-tegra.c | 5 drivers/iio/accel/adxl355_core.c | 2 drivers/iio/accel/adxl380.c | 2 drivers/iio/adc/aspeed_adc.c | 1 drivers/iio/adc/ti-adc161s626.c | 41 - drivers/iio/adc/ti-ads1119.c | 11 drivers/iio/dac/ad5770r.c | 2 drivers/iio/gyro/mpu3050-core.c | 32 - drivers/iio/imu/bmi160/bmi160_core.c | 15 drivers/iio/imu/bno055/bno055.c | 2 drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 4 drivers/iio/light/vcnl4035.c | 18 drivers/input/joystick/xpad.c | 5 drivers/input/mouse/bcm5974.c | 42 + drivers/input/rmi4/rmi_f54.c | 4 drivers/input/serio/i8042-acpipnpio.h | 7 drivers/misc/fastrpc.c | 1 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 drivers/net/ethernet/broadcom/tg3.c | 13 drivers/net/ethernet/cadence/macb_pci.c | 10 drivers/net/ethernet/faraday/ftgmac100.c | 28 drivers/net/ethernet/freescale/enetc/enetc_ethtool.c | 4 drivers/net/ethernet/freescale/fec_ptp.c | 3 drivers/net/ethernet/intel/ice/ice_ethtool.c | 11 drivers/net/ethernet/mediatek/airoha_eth.c | 18 drivers/net/ethernet/mediatek/mtk_ppe_offload.c | 21 drivers/net/ethernet/mellanox/mlx5/core/devlink.c | 4 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 2 drivers/net/ethernet/mellanox/mlx5/core/fw.c | 53 + drivers/net/ethernet/mellanox/mlx5/core/lag/debugfs.c | 3 drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h | 4 drivers/net/ethernet/meta/fbnic/fbnic_txrx.c | 6 drivers/net/ethernet/microsoft/mana/mana_en.c | 6 drivers/net/ethernet/xilinx/xilinx_axienet.h | 4 drivers/net/phy/sfp.c | 7 drivers/net/vxlan/vxlan_core.c | 6 drivers/net/wireless/ath/ath11k/dp_rx.c | 15 drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 2 drivers/net/wireless/microchip/wilc1000/hif.c | 2 drivers/net/wireless/virtual/virt_wifi.c | 1 drivers/nfc/pn533/uart.c | 3 drivers/nvmem/imx-ocotp-ele.c | 1 drivers/nvmem/imx-ocotp.c | 1 drivers/nvmem/zynqmp_nvmem.c | 8 drivers/spi/spi-cadence-quadspi.c | 13 drivers/spi/spi-geni-qcom.c | 9 drivers/target/loopback/tcm_loop.c | 52 + drivers/thermal/thermal_core.c | 1 drivers/thunderbolt/nhi.c | 2 drivers/usb/cdns3/cdns3-gadget.c | 4 drivers/usb/class/cdc-acm.c | 9 drivers/usb/class/cdc-acm.h | 1 drivers/usb/class/usbtmc.c | 3 drivers/usb/common/ulpi.c | 5 drivers/usb/core/phy.c | 12 drivers/usb/core/quirks.c | 3 drivers/usb/dwc2/gadget.c | 2 drivers/usb/gadget/function/f_ecm.c | 37 - drivers/usb/gadget/function/f_eem.c | 59 +- drivers/usb/gadget/function/f_hid.c | 19 drivers/usb/gadget/function/f_rndis.c | 51 + drivers/usb/gadget/function/f_subset.c | 63 +- drivers/usb/gadget/function/f_uac1_legacy.c | 47 + drivers/usb/gadget/function/f_uvc.c | 39 + drivers/usb/gadget/function/u_ecm.h | 21 drivers/usb/gadget/function/u_eem.h | 21 drivers/usb/gadget/function/u_ether.c | 16 drivers/usb/gadget/function/u_gether.h | 22 drivers/usb/gadget/function/u_rndis.h | 31 - drivers/usb/gadget/function/uvc.h | 3 drivers/usb/gadget/function/uvc_v4l2.c | 5 drivers/usb/gadget/udc/dummy_hcd.c | 42 - drivers/usb/host/ehci-brcm.c | 4 drivers/usb/serial/io_edgeport.c | 3 drivers/usb/serial/io_usbvend.h | 1 drivers/usb/serial/option.c | 4 drivers/usb/typec/ucsi/ucsi.c | 9 fs/btrfs/inode.c | 6 fs/btrfs/ioctl.c | 12 fs/btrfs/tree-checker.c | 17 fs/btrfs/zoned.c | 6 fs/ext4/fast_commit.c | 4 fs/ext4/inode.c | 15 fs/smb/server/smb2pdu.c | 121 +++- fs/smb/server/smbacl.c | 43 + fs/smb/server/smbacl.h | 2 include/linux/io_uring_types.h | 9 include/linux/netdevice.h | 3 include/linux/netfilter/ipset/ip_set.h | 2 include/linux/swapops.h | 27 include/net/netfilter/nf_conntrack_expect.h | 20 io_uring/io_uring.c | 15 io_uring/io_uring.h | 1 io_uring/kbuf.c | 289 ++++------ io_uring/kbuf.h | 148 +---- io_uring/net.c | 149 ++--- io_uring/poll.c | 4 io_uring/rw.c | 58 +- kernel/bpf/verifier.c | 87 ++- kernel/sched/fair.c | 12 mm/gup.c | 10 mm/hmm.c | 2 mm/memory.c | 22 mm/mprotect.c | 2 mm/sparse-vmemmap.c | 2 mm/vmscan.c | 2 net/atm/lec.c | 72 +- net/atm/lec.h | 2 net/bluetooth/hci_conn.c | 8 net/bluetooth/hci_event.c | 33 - net/bluetooth/hci_sync.c | 14 net/bluetooth/mgmt.c | 17 net/bluetooth/sco.c | 26 net/bluetooth/smp.c | 11 net/bridge/br_arp_nd_proxy.c | 18 net/core/dev.c | 38 + net/core/skmsg.c | 13 net/hsr/hsr_device.c | 32 - net/ipv6/addrconf.c | 6 net/ipv6/datagram.c | 10 net/ipv6/icmp.c | 3 net/ipv6/ioam6.c | 4 net/ipv6/ip6_flowlabel.c | 5 net/ipv6/ip6_tunnel.c | 5 net/ipv6/ndisc.c | 3 net/mac80211/tdls.c | 2 net/mptcp/pm_netlink.c | 2 net/netfilter/ipset/ip_set_core.c | 4 net/netfilter/ipset/ip_set_hash_gen.h | 2 net/netfilter/ipset/ip_set_list_set.c | 4 net/netfilter/nf_conntrack_broadcast.c | 8 net/netfilter/nf_conntrack_expect.c | 25 net/netfilter/nf_conntrack_h323_main.c | 12 net/netfilter/nf_conntrack_helper.c | 13 net/netfilter/nf_conntrack_netlink.c | 87 +-- net/netfilter/nf_conntrack_sip.c | 4 net/netfilter/nf_flow_table_offload.c | 196 ++++-- net/netfilter/nf_tables_api.c | 7 net/netfilter/nfnetlink_log.c | 2 net/netfilter/x_tables.c | 23 net/netfilter/xt_cgroup.c | 6 net/netfilter/xt_rateest.c | 5 net/qrtr/af_qrtr.c | 31 - net/rds/ib_rdma.c | 7 net/sched/cls_api.c | 1 net/sched/cls_flow.c | 10 net/sched/cls_fw.c | 14 net/sched/sch_hfsc.c | 4 net/sched/sch_netem.c | 5 net/x25/x25_in.c | 9 net/x25/x25_subr.c | 1 sound/pci/ctxfi/ctdaio.c | 1 sound/soc/cirrus/ep93xx-i2s.c | 34 - sound/soc/intel/boards/Kconfig | 2 sound/usb/caiaq/device.c | 2 tools/objtool/check.c | 5 tools/testing/selftests/bpf/prog_tests/reg_bounds.c | 62 ++ tools/testing/selftests/bpf/progs/verifier_bounds.c | 159 +++++ 215 files changed, 2592 insertions(+), 1281 deletions(-)
Adrian Freund (1):
HID: logitech-hidpp: Enable MX Master 4 over bluetooth
Alan Stern (2):
USB: dummy-hcd: Fix locking/synchronization error
USB: dummy-hcd: Fix interrupt synchronization error
Alex Deucher (1):
drm/amdgpu/pm: drop SMU driver if version not matched messages
Alexander Popov (1):
wifi: virt_wifi: remove SET_NETDEV_DEV to avoid use-after-free
Alexei Starovoitov (1):
bpf: Fix regsafe() for pointers to packet
Alexey Velichayshiy (1):
wifi: iwlwifi: mvm: fix potential out-of-bounds read in iwl_mvm_nd_match_info_handler()
Anshuman Khandual (1):
mm: replace READ_ONCE() with standard page table accessors
Antoniu Miclaus (2):
iio: accel: adxl380: fix FIFO watermark bit 8 always written as 0
iio: dac: ad5770r: fix error return in ad5770r_read_raw()
Asim Viladi Oglu Manizada (1):
ksmbd: fix OOB write in QUERY_INFO for compound requests
Bart Van Assche (1):
Input: synaptics-rmi4 - fix a locking bug in an error path
Benoît Sevens (1):
HID: wacom: fix out-of-bounds read in wacom_intuos_bt_irq
Berk Cem Goksel (1):
ALSA: caiaq: fix stack out-of-bounds read in init_card
Billy Tsai (1):
iio: adc: aspeed: clear reference voltage bits before configuring vref
Buday Csaba (1):
net: fec: fix the PTP periodic output sysfs interface
Caleb Sander Mateos (1):
io_uring/kbuf: use READ_ONCE() for userspace-mapped memory
Cen Zhang (1):
Bluetooth: SCO: fix race conditions in sco_sock_connect()
Charlene Liu (1):
drm/amd/display: Correct logic check error for fastboot
Christian Eggers (1):
nvmem: imx: assign nvmem_cell_info::raw_len
Christoffer Sandberg (1):
Input: i8042 - add TUXEDO InfinityBook Max 16 Gen10 AMD to i8042 quirk table
Conor Dooley (1):
firmware: microchip: fail auto-update probe if no flash found
Cosmin Tanislav (2):
counter: rz-mtu3-cnt: prevent counter from being toggled multiple times
counter: rz-mtu3-cnt: do not use struct rz_mtu3_channel's dev member
David Hildenbrand (Arm) (1):
mm/memory: fix PMD/PUD checks in follow_pfnmap_start()
David Lechner (4):
iio: imu: bno055: fix BNO055_SCAN_CH_COUNT off by one
iio: adc: ti-adc161s626: fix buffer read on big-endian
iio: adc: ti-adc161s626: use DMA-safe memory for spi_read()
iio: light: vcnl4035: fix scan buffer on big-endian
Deepanshu Kartikey (3):
wifi: mac80211: check tdls flag in ieee80211_tdls_oper
atm: lec: fix use-after-free in sock_def_readable()
comedi: dt2815: add hardware detection to prevent crash
Dimitri Daskalakis (1):
eth: fbnic: Account for page fragments when updating BDQ tail
Donet Tom (1):
drm/amdgpu: Change AMDGPU_VA_RESERVED_TRAP_SIZE to 64KB
Eduard Zingerman (2):
bpf: Fix u32/s32 bounds when ranges cross min/max boundary selftests/bpf: test refining u32/s32 bounds when ranges cross min/max boundary
Emanuele Ghidoli (1):
spi: cadence-qspi: Fix exec_mem_op error handling
Eric Biggers (1):
crypto: tegra - Add missing CRYPTO_ALG_ASYNC
Eric Dumazet (3):
ipv6: icmp: clear skb2->cb[] in ip6_err_gen_icmpv6_unreach()
ip6_tunnel: clear skb2->cb[] in ip4ip6_err()
ipv6: avoid overflows in ip6_datagram_send_ctl()Ernestas Kulik (1):
USB: serial: option: add MeiG Smart SRM825WN
Ethan Tidmore (4):
iio: gyro: mpu3050: Fix incorrect free_irq() variable
iio: gyro: mpu3050: Fix irq resource leak
iio: gyro: mpu3050: Move iio_device_register() to correct location
iio: gyro: mpu3050: Fix out-of-sequence free_irq()
Fedor Pchelkin (2):
net: macb: fix clk handling on PCI glue driver removal
net: macb: properly unregister fixed rate clocks
Felix Gu (3):
iio: adc: ti-ads1119: Fix unbalanced pm reference count in ds1119_single_conversion()
iio: adc: ti-ads1119: Reinit completion before wait_for_completion_timeout()
iio: adc: ti-ads1119: Replace IRQF_ONESHOT with IRQF_NO_THREAD
Filipe Manana (2):
btrfs: reserve enough transaction items for qgroup ioctls
btrfs: do not free data reservation in fallback from inline due to -ENOSPC
Florian Westphal (3):
netfilter: nfnetlink_log: account for netlink header size
netfilter: x_tables: ensure names are nul-terminated
netfilter: ipset: use nla_strcmp for IPSET_ATTR_NAME attr
Francesco Lavra (1):
iio: imu: st_lsm6dsx: Set FIFO ODR for accelerometer and gyroscope only
Frank Li (1):
dt-bindings: auxdisplay: ht16k33: Use unevaluatedProperties to fix common property warning
Frej Drejhammar (1):
USB: serial: io_edgeport: add support for Blackbox IC135A
Gabor Juhos (1):
usb: core: phy: avoid double use of 'usb3-phy'
Greg Kroah-Hartman (2):
drm/ioc32: stop speculation on the drm_compat_ioctl path Linux 6.12.81
Guangshuo Li (3):
usb: ulpi: fix double free in ulpi_register_interface() error path
cpufreq: governor: fix double free in cpufreq_dbs_governor_init() error path
net: mana: fix use-after-free in add_adev() error path
Guoyu Su (1):
net: use skb_header_pointer() for TCPv4 GSO frag_off check
Heiko Carstens (1):
s390/perf_cpum_sf: Convert to use try_cmpxchg128()
Heitor Alves de Siqueira (1):
usb: usbtmc: Flush anchored URBs in usbtmc_release
Horia Geantă (2):
crypto: caam - fix DMA corruption on long hmac keys
crypto: caam - fix overflow on long hmac keys
Ian Abbott (4):
comedi: Reinit dev->spinlock between attachments to low-level drivers
comedi: ni_atmio16d: Fix invalid clean-up after failed attach
comedi: me_daq: Fix potential overrun of firmware buffer
comedi: me4000: Fix potential overrun of firmware buffer
Ivan Vera (1):
nvmem: zynqmp_nvmem: Fix buffer size in DMA and memcpy
JP Hein (1):
USB: core: add NO_LPM quirk for Razer Kiyo Pro webcam
Jamie Gibbons (1):
dt-bindings: gpio: fix microchip #interrupt-cells
Jens Axboe (16):
io_uring/kbuf: drop 'issue_flags' from io_put_kbuf(s)() arguments io_uring/net: don't use io_net_kbuf_recyle() for non-provided cases io_uring/net: clarify io_recv_buf_select() return value io_uring/kbuf: pass in struct io_buffer_list to commit/recycle helpers io_uring/kbuf: introduce struct io_br_sel
io_uring/kbuf: use struct io_br_sel for multiple buffers picking io_uring/net: use struct io_br_sel->val as the recv finish value io_uring/net: use struct io_br_sel->val as the send finish value io_uring/kbuf: switch to storing struct io_buffer_list locally
io_uring: remove async/poll related provided buffer recycles io_uring/net: correct type for min_not_zero() cast io_uring/rw: check for NULL io_br_sel when putting a buffer io_uring/kbuf: enable bundles for incrementally consumed buffers io_uring/kbuf: always use READ_ONCE() to read ring provided buffer lengths io_uring/kbuf: fix missing BUF_MORE for incremental buffers at EOF io_uring/kbuf: propagate BUF_MORE through early buffer commit path
Jiayuan Chen (1):
net: qrtr: replace qrtr_tx_flow radix_tree with xarray to fix memory leak
Jihed Chaibi (1):
ASoC: ep93xx: Fix unchecked clk_prepare_enable() and add rollback on failure
Jimmy Hu (1):
usb: gadget: uvc: fix NULL pointer dereference during unbind race
Jinjiang Tu (1):
mm/huge_memory: fix folio isn't locked in softleaf_to_folio()
Joanne Koong (1):
io_uring/kbuf: use WRITE_ONCE() for userspace-shared buffer ring fields
Johannes Thumshirn (1):
btrfs: don't take device_list_mutex when querying zone info
Josef Bacik (1):
scsi: target: tcm_loop: Drain commands in target_reset handler
Josh Poimboeuf (2):
objtool: Fix Clang jump table detection
iio: imu: bmi160: Remove potential undefined behavior in bmi160_config_pin()
Julian Braha (1):
ASoC: Intel: boards: fix unmet dependency on PINCTRL
Juno Choi (1):
usb: dwc2: gadget: Fix spin_lock/unlock mismatch in dwc2_hsotg_udc_stop()
Junxi Qian (1):
io_uring/net: fix slab-out-of-bounds read in io_bundle_nbufs()
Justin Chen (1):
usb: ehci-brcm: fix sleep during atomic
Keenan Dong (2):
Bluetooth: MGMT: validate LTK enc_size on load
Bluetooth: MGMT: validate mesh send advertising payload length
Kenneth Feng (2):
drm/amd/amdgpu: decouple ASPM with pcie dpm drm/amd/amdgpu: disable ASPM in some situations
Konrad Dybcio (1):
thunderbolt: Fix property read in nhi_wake_supported()
Kuen-Han Tsai (8):
usb: gadget: u_ether: Fix race between gether_disconnect and eth_stop
usb: gadget: u_ether: Fix NULL pointer deref in eth_get_drvinfo
usb: gadget: f_subset: Fix unbalanced refcnt in geth_free
usb: gadget: f_rndis: Protect RNDIS options with mutex
usb: gadget: f_ecm: Fix net_device lifecycle with device_move
usb: gadget: f_eem: Fix net_device lifecycle with device_move
usb: gadget: f_subset: Fix net_device lifecycle with device_move
usb: gadget: f_rndis: Fix net_device lifecycle with device_move
Kuniyuki Iwashima (1):
bpf: sockmap: Fix use-after-free of sk->sk_socket in sk_psock_verdict_data_ready().
Lee Jones (2):
HID: logitech-hidpp: Prevent use-after-free on force feedback initialisation failure
HID: multitouch: Check to ensure report responses match the request
Li Chen (1):
ext4: publish jinode after initialization
Li Xiasong (1):
MPTCP: fix lock class name family in pm_nl_create_listen_socket
Liam Mitchell (1):
Input: bcm5974 - recover from failed mode switch
Lorenzo Bianconi (1):
net: airoha: Add missing cleanup bits in airoha_qdma_cleanup_rx_queue()
Luka Gejak (1):
net: hsr: fix VLAN add unwind on slave errors
Maarten Lankhorst (1):
Revert "drm: Fix use-after-free on framebuffers and property blobs when calling drm_dev_unplug"
Maciej W. Rozycki (2):
MIPS: SiByte: Bring back cache initialisation
MIPS: Fix the GCC version check for `__multi3' workaround
Marek Behún (1):
net: sfp: Fix Ubiquiti U-Fiber Instant SFP module on mvneta
Mario Limonciello (1):
x86/CPU/AMD: Add additional fixed RDSEED microcode revisions
Martin Schiller (2):
net/x25: Fix potential double free of skb net/x25: Fix overflow when accumulating packets
Miao Li (1):
usb: quirks: add DELAY_INIT quirk for another Silicon Motion flash drive
Michael Zimmermann (1):
usb: gadget: f_hid: move list and spinlock inits from bind to alloc
Mikko Perttunen (1):
i2c: tegra: Don't mark devices with pins as IRQ safe
Nathan Rebello (1):
usb: typec: ucsi: validate connector number in ucsi_notify_common()
Nikunj A Dadhania (1):
x86/fred: Fix early boot failures on SEV-ES/SNP guests
Norbert Szetei (1):
crypto: af-alg - fix NULL pointer dereference in scatterwalk
Oleh Konko (2):
Bluetooth: SMP: derive legacy responder STK authentication from MITM state
Bluetooth: SMP: force responder MITM requirements before building the pairing response
Oliver Neukum (1):
cdc-acm: new quirk for EPSON HMD
Pablo Neira Ayuso (7):
netfilter: flowtable: strictly check for maximum number of actions
netfilter: nf_conntrack_expect: honor expectation helper field
netfilter: nf_conntrack_expect: use expect->helper
netfilter: nf_conntrack_expect: store netns and zone in expectation
netfilter: ctnetlink: ignore explicit helper on new expectations
netfilter: x_tables: restrict xt_check_match/xt_check_target extensions for NFPROTO_ARP
netfilter: nf_tables: reject immediate NF_QUEUE verdict
Paolo Abeni (2):
ipv6: prevent possible UaF in addrconf_permanent_addr()
net: introduce mangleid_features
Paul Chaignon (4):
bpf: Improve bounds when s64 crosses sign boundary selftests/bpf: Test cross-sign 64bits range refinement selftests/bpf: Test invariants on JSLT crossing sign
bpf: Add third round of bounds deduction
Paul SAGE (1):
tg3: replace placeholder MAC address with device property
Paul Walmsley (1):
riscv: kgdb: fix several debug register assignment bugs
Pauli Virtanen (3):
Bluetooth: hci_sync: call destroy in hci_cmd_sync_run if immediate
Bluetooth: hci_conn: fix potential UAF in set_cig_params_sync
Bluetooth: hci_event: fix potential UAF in hci_le_remote_conn_param_req_evt
Pavan Chebbi (1):
bnxt_en: Restore default stat ctxs for ULP when resource is available
Pavel Begunkov (7):
io_uring/kbuf: remove legacy kbuf bulk allocation io_uring/kbuf: remove legacy kbuf kmem cache io_uring/kbuf: simplify __io_put_kbuf io_uring/kbuf: remove legacy kbuf caching io_uring/kbuf: open code __io_put_kbuf() io_uring/kbuf: introduce io_kbuf_drop_legacy() io_uring/kbuf: uninline __io_put_kbufs
Pengpeng Hou (2):
net/ipv6: ioam6: prevent schema length wraparound in trace fill
NFC: pn533: bound the UART receive buffer
Pepper Gray (1):
arm64/scs: Fix handling of advance_loc4
Peter Zijlstra (1):
sched/fair: Fix zero_vruntime tracking fix
Praveen Talari (1):
spi: geni-qcom: Check DMA interrupts early in ISR
Prike Liang (1):
drm/amdgpu: fix the idr allocation flags
Qi Tang (3):
netfilter: nf_conntrack_helper: pass helper to expect cleanup
netfilter: ctnetlink: zero expect NAT fields when CTA_EXPECT_NAT absent
bpf: reject direct access to nullable PTR_TO_BUF pointers
Qu Wenruo (1):
btrfs: fix the qgroup data free range for inline data extents
Rafael J. Wysocki (1):
thermal: core: Fix thermal zone device registration error path
Reshma Immaculate Rajkumar (1):
wifi: ath11k: Pass the correct value of each TID during a stop AMPDU session
Saeed Mahameed (2):
net/mlx5: Avoid "No data available" when FW version queries fail net/mlx5: Fix switchdev mode rollback in case of failure
Sanman Pradhan (5):
hwmon: (pxe1610) Check return value of page-select write in probe
hwmon: (ltc4286) Add missing MODULE_IMPORT_NS("PMBUS")
hwmon: (tps53679) Fix device ID comparison and printing in tps53676_identify()
hwmon: (occ) Fix missing newline in occ_show_extended()
hwmon: (occ) Fix division by zero in occ_show_power_1()
Sasha Levin (3):
Revert "LoongArch: Handle percpu handler address for ORC unwinder" Revert "LoongArch: Remove unnecessary checks for ORC unwinder" Revert "LoongArch/orc: Use RCU in all users of __module_address()."
Sebastian Urban (1):
usb: gadget: dummy_hcd: fix premature URB completion when ZLP follows partial transfer
Shay Drory (1):
net/mlx5: lag: Check for LAG device before creating debugfs
Shengyu Qu (1):
Input: xpad - add support for BETOP BTP-KP50B/C controller's wireless mode
Shenwei Wang (1):
gpio: mxc: map Both Edge pad wakeup to Rising Edge
Shiji Yang (1):
mips: ralink: update CPU clock index
Stefan Wiehler (1):
mips: mm: Allocate tlb_vpn array atomically
Suraj Gupta (1):
net: xilinx: axienet: Correct BD length masks to match AXIDMA IP spec
Sven Eckelmann (Plasma Cloud) (1):
net: ethernet: mtk_ppe: avoid NULL deref when gmac0 is disabled
Taegu Ha (1):
usb: gadget: f_uac1_legacy: validate control request size
Takashi Iwai (1):
ALSA: ctxfi: Fix missing SPDIFI1 index handling
Thomas Bogendoerfer (1):
tg3: Fix race for querying speed/duplex
Thomas Richter (1):
s390/cpum_sf: Cap sampling rate to prevent lsctl exception
Thomas Zimmermann (1):
drm/ast: dp501: Fix initialization of SCU2C
Timur Kristóf (6):
drm/amd/display: Disable fastboot on DCE 6 too drm/amd/display: Keep PLL0 running on DCE 6.0 and 6.4 drm/amd/display: Fix DCE 6.0 and 6.4 PLL programming. drm/amd/display: Adjust DCE 8-10 clock, don't overclock by 15% drm/amd/display: Disable scaling on DCE6 for now drm/amd: Disable ASPM on SI
Valek Andrej (1):
iio: accel: fix ADXL355 temperature signature value
Ville Syrjälä (2):
drm/i915/dsi: Don't do DSC horizontal timing adjustments in command mode drm/i915/dp: Use crtc_state->enhanced_framing properly on ivb/hsw CPU eDP
Vincent Guittot (1):
sched/fair: Use protect_slice() instead of direct comparison
Wanquan Zhong (1):
USB: serial: option: add support for Rolling Wireless RW135R-GL
Wei Fang (1):
net: enetc: check whether the RSS algorithm is Toeplitz
Weiming Shi (1):
rds: ib: reject FRMR registration before IB connection is established
Willem de Bruijn (1):
net: correctly handle tunneled traffic on IPV6_CSUM GSO fallback
Xiang Mei (3):
net/sched: sch_hfsc: fix divide-by-zero in rtsc_min() net/sched: cls_fw: fix NULL pointer dereference on shared blocks net/sched: cls_flow: fix NULL pointer dereference on shared blocks
Xingjing Deng (1):
misc: fastrpc: possible double-free of cctx->remote_heap
Xu Yang (1):
dt-bindings: connector: add pd-disable dependency
Yang Wang (1):
drm/amd/pm: disable OD_FAN_CURVE if temp or pwm range invalid for smu v13
Yang Yang (3):
bridge: br_nd_send: linearize skb before parsing ND options
bridge: br_nd_send: validate ND option lengths
vxlan: validate ND option lengths in vxlan_na_create
Yasuaki Torimaru (1):
wifi: wilc1000: fix u8 overflow in SSID scan buffer size calculation
Yifan Wu (1):
netfilter: ipset: drop logically empty buckets in mtype_del
Yochai Eisenrich (2):
net: ipv6: ndisc: fix ndisc_ra_useropt to initialize nduseropt_padX fields to zero to prevent an info-leak
net: sched: cls_api: fix tc_chain_fill_node to initialize tcm_info to zero to prevent an info-leak
Yongchao Wu (2):
usb: cdns3: gadget: fix NULL pointer dereference in ep_queue
usb: cdns3: gadget: fix state inconsistency on gadget init failure
Youssef Samir (1):
accel/qaic: Handle DBC deactivation if the owner went away
Yucheng Lu (1):
net/sched: sch_netem: fix out-of-bounds access in packet corruption
Yufan Chen (1):
net: ftgmac100: fix ring allocation unwind on open failure
ZhengYuan Huang (1):
btrfs: reject root items with drop_progress and zero drop_level
Zhengchuan Liang (1):
net: ipv6: flowlabel: defer exclusive option free until RCU teardown
Zilin Guan (1):
ice: Fix memory leak in ice_set_ringparam()
Zoltan Illes (1):
Input: xpad - add support for Razer Wolverine V3 Pro
hkbinbin (1):
Bluetooth: hci_sync: fix stack buffer overflow in hci_le_big_create_sync
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/auxdisplay/holtek,ht16k33.yaml +1 -1
@@ -66,7 +66,7 @@ then: required: - refresh-rate-hz -additionalProperties: false +unevaluatedProperties: false examples: - |
Documentation/devicetree/bindings/connector/usb-connector.yaml +1 -0
@@ -254,6 +254,7 @@ properties: additionalProperties: false dependencies: + pd-disable: [typec-power-opmode] sink-vdos-v1: [ sink-vdos ] sink-vdos: [ sink-vdos-v1 ]
Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml +2 -2
@@ -34,7 +34,7 @@ properties: const: 2 "#interrupt-cells": - const: 1 + const: 2 ngpios: description:
@@ -83,7 +83,7 @@ examples: gpio-controller; #gpio-cells = <2>; interrupt-controller; - #interrupt-cells = <1>; + #interrupt-cells = <2>; interrupts = <53>, <53>, <53>, <53>, <53>, <53>, <53>, <53>, <53>, <53>, <53>, <53>,
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 12 -SUBLEVEL = 80 +SUBLEVEL = 81 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm64/kernel/pi/patch-scs.c +8 -0
@@ -174,6 +174,14 @@ static int scs_handle_fde_frame(const struct eh_frame *frame, size -=2 ;break ; +case DW_CFA_advance_loc4: + loc += *opcode++ * code_alignment_factor; + loc += (*opcode++ <<8 ) * code_alignment_factor; + loc += (*opcode++ <<16 ) * code_alignment_factor; + loc += (*opcode++ <<24 ) * code_alignment_factor; + size -=4 ; +break ; +case DW_CFA_def_cfa:case DW_CFA_offset_extended: size =skip_xleb128 (&opcode, size);
arch/loongarch/include/asm/setup.h +0 -3
@@ -7,7 +7,6 @@#define _LOONGARCH_SETUP_H#include <linux/types.h> -#include <linux/threads.h> #include <asm/sections.h> #include <uapi/asm/setup.h>
@@ -15,8 +14,6 @@extern unsigned long eentry;extern unsigned long tlbrentry; -extern unsigned long pcpu_handlers[NR_CPUS ]; -extern long exception_handlers[VECSIZE *128 /sizeof (long )];extern char init_command_line[COMMAND_LINE_SIZE ];extern void tlb_init (int cpu);extern void cpu_cache_init (void );
arch/loongarch/kernel/unwind_orc.c +13 -19
@@ -357,21 +357,13 @@ static bool is_entry_func(unsigned long addr)static inline unsigned long bt_address (unsigned long ra) { -#if defined(CONFIG_NUMA ) && !defined(CONFIG_PREEMPT_RT ) -int cpu; -int vec_sz =sizeof (exception_handlers); +extern unsigned long eentry; -for_each_possible_cpu (cpu) { -if (!pcpu_handlers[cpu]) -continue ; +if (__kernel_text_address (ra)) +return ra; -if (ra >= pcpu_handlers[cpu] && - ra < pcpu_handlers[cpu] + vec_sz) { - ra = ra + eentry - pcpu_handlers[cpu]; -break ; - } - } -#endif +if (__module_text_address (ra)) +return ra;if (ra >= eentry && ra < eentry +EXCCODE_INT_END *VECSIZE ) {unsigned long func;
@@ -390,13 +382,10 @@ static inline unsigned long bt_address(unsigned long ra)break ; } - ra = func + offset; +return func + offset; } -if (__kernel_text_address (ra)) -return ra; - -return 0 ; +return ra; }bool unwind_next_frame (struct unwind_state *state)
@@ -410,7 +399,7 @@ bool unwind_next_frame(struct unwind_state *state)return false;/* Don't let modules unload while we're reading their ORC data. */ -guard (rcu)(); +preempt_disable ();if (is_entry_func (state->pc)) goto end;
@@ -522,12 +511,17 @@ bool unwind_next_frame(struct unwind_state *state) goto err; } +if (!__kernel_text_address (state->pc)) + goto err; + +preempt_enable ();return true; err: state->error = true; end: +preempt_enable (); state->stack_info.type =STACK_TYPE_UNKNOWN ;return false; }
arch/mips/lib/multi3.c +3 -3
@@ -4,12 +4,12 @@#include "libgcc.h" /* -* GCC 7 & older can suboptimally generate __multi3 calls for mips64r6, so for +* GCC 9 & older can suboptimally generate __multi3 calls for mips64r6, so for * that specific case only we implement that intrinsic here. * * See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82981 */ -#if defined(CONFIG_64BIT ) && defined(CONFIG_CPU_MIPSR6 ) && (__GNUC__ <8 ) +#if defined(CONFIG_64BIT ) && defined(CONFIG_CPU_MIPSR6 ) && (__GNUC__ <10 )/* multiply 64-bit values, low 64-bits returned */ static inline long long notrace dmulu (long long a,long long b)
@@ -51,4 +51,4 @@ ti_type notrace __multi3(ti_type a, ti_type b) }EXPORT_SYMBOL (__multi3); -#endif /* 64BIT && CPU_MIPSR6 && GCC7 */ +#endif /* 64BIT && CPU_MIPSR6 && GCC9 */
arch/mips/mm/cache.c +2 -1
@@ -207,7 +207,8 @@ void cpu_cache_init(void) {if (IS_ENABLED (CONFIG_CPU_R3000 ) && cpu_has_3k_cache)r3k_cache_init (); -if (IS_ENABLED (CONFIG_CPU_R4K_CACHE_TLB ) && cpu_has_4k_cache) +if ((IS_ENABLED (CONFIG_CPU_R4K_CACHE_TLB ) || +IS_ENABLED (CONFIG_CPU_SB1 )) && cpu_has_4k_cache)r4k_cache_init ();if (IS_ENABLED (CONFIG_CPU_CAVIUM_OCTEON ) && cpu_has_octeon_cache)
arch/mips/mm/tlb-r4k.c +1 -1
@@ -538,7 +538,7 @@ static void __ref r4k_tlb_uniquify(void) tlb_vpn_size = tlbsize *sizeof (*tlb_vpns); tlb_vpns = (use_slab ? -kmalloc (tlb_vpn_size,GFP_KERNEL ) : +kmalloc (tlb_vpn_size,GFP_ATOMIC ) :memblock_alloc_raw (tlb_vpn_size,sizeof (*tlb_vpns)));if (WARN_ON (!tlb_vpns))return ;/* Pray local_flush_tlb_all() is good enough. */
arch/mips/ralink/clk.c +4 -4
@@ -21,16 +21,16 @@ static const char *clk_cpu(int *idx) {switch (ralink_soc) {case RT2880_SOC : - *idx =0 ; + *idx =1 ;return "ralink,rt2880-sysc" ;case RT3883_SOC : - *idx =0 ; + *idx =1 ;return "ralink,rt3883-sysc" ;case RT305X_SOC_RT3050 : - *idx =0 ; + *idx =1 ;return "ralink,rt3050-sysc" ;case RT305X_SOC_RT3052 : - *idx =0 ; + *idx =1 ;return "ralink,rt3052-sysc" ;case RT305X_SOC_RT3350 : *idx =1 ;
arch/riscv/kernel/kgdb.c +4 -3
@@ -175,7 +175,7 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = { {DBG_REG_T1, GDB_SIZEOF_REG, offsetof(struct pt_regs, t1)}, {DBG_REG_T2, GDB_SIZEOF_REG, offsetof(struct pt_regs, t2)}, {DBG_REG_FP, GDB_SIZEOF_REG, offsetof(struct pt_regs, s0)}, - {DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)}, + {DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, s1)}, {DBG_REG_A0, GDB_SIZEOF_REG, offsetof(struct pt_regs, a0)}, {DBG_REG_A1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)}, {DBG_REG_A2, GDB_SIZEOF_REG, offsetof(struct pt_regs, a2)},
@@ -244,8 +244,9 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task) gdb_regs[DBG_REG_S6_OFF ] = task->thread.s[6 ]; gdb_regs[DBG_REG_S7_OFF ] = task->thread.s[7 ]; gdb_regs[DBG_REG_S8_OFF ] = task->thread.s[8 ]; - gdb_regs[DBG_REG_S9_OFF ] = task->thread.s[10 ]; - gdb_regs[DBG_REG_S10_OFF ] = task->thread.s[11 ]; + gdb_regs[DBG_REG_S9_OFF ] = task->thread.s[9 ]; + gdb_regs[DBG_REG_S10_OFF ] = task->thread.s[10 ]; + gdb_regs[DBG_REG_S11_OFF ] = task->thread.s[11 ]; gdb_regs[DBG_REG_EPC_OFF ] = task->thread.ra; }
arch/s390/kernel/perf_cpum_sf.c +14 -16
@@ -1188,8 +1188,9 @@ static void hw_collect_samples(struct perf_event *event, unsigned long *sdbt,static void hw_perf_event_update (struct perf_event *event,int flush_all) {unsigned long long event_overflow, sampl_overflow, num_sdb; -union hws_trailer_header old, prev, new; +struct cpu_hw_sf *cpuhw =this_cpu_ptr (&cpu_hw_sf);struct hw_perf_event *hwc = &event->hw; +union hws_trailer_header prev, new;struct hws_trailer_entry *te;unsigned long *sdbt, sdb;int done;
@@ -1233,13 +1234,11 @@ static void hw_perf_event_update(struct perf_event *event, int flush_all)/* Reset trailer (using compare-double-and-swap) */ prev.val =READ_ONCE_ALIGNED_128 (te->header.val);do { - old.val = prev.val; new.val = prev.val; new.f =0 ; new.a =1 ; new.overflow =0 ; - prev.val =cmpxchg128 (&te->header.val, old.val, new.val); - }while (prev.val != old.val); + }while (!try_cmpxchg128 (&te->header.val, &prev.val, new.val));/* Advance to next sample-data-block */ sdbt++;
@@ -1269,8 +1268,11 @@ static void hw_perf_event_update(struct perf_event *event, int flush_all)* are dropped. * Slightly increase the interval to avoid hitting this limit. */ -if (event_overflow) +if (event_overflow) {SAMPL_RATE (hwc) +=DIV_ROUND_UP (SAMPL_RATE (hwc),10 ); +if (SAMPL_RATE (hwc) > cpuhw->qsi.max_sampl_rate) +SAMPL_RATE (hwc) = cpuhw->qsi.max_sampl_rate; + } } static inline unsigned long aux_sdb_index(struct aux_buffer *aux,
@@ -1405,16 +1407,15 @@ static int aux_output_begin(struct perf_output_handle *handle,static bool aux_set_alert (struct aux_buffer *aux,unsigned long alert_index,unsigned long long *overflow) { -union hws_trailer_header old, prev, new; +union hws_trailer_header prev, new;struct hws_trailer_entry *te; te =aux_sdb_trailer (aux, alert_index); prev.val =READ_ONCE_ALIGNED_128 (te->header.val); do { - old.val = prev.val; new.val = prev.val; - *overflow = old.overflow; - if (old.f) { + *overflow = prev.overflow; + if (prev.f) { /* * SDB is already set by hardware. * Abort and try to set somewhere
@@ -1424,8 +1425,7 @@ static bool aux_set_alert(struct aux_buffer *aux, unsigned long alert_index, } new.a =1 ; new.overflow =0 ; - prev.val =cmpxchg128 (&te->header.val, old.val, new.val); - }while (prev.val != old.val); + }while (!try_cmpxchg128 (&te->header.val, &prev.val, new.val));return true; }
@@ -1454,7 +1454,7 @@ static bool aux_set_alert(struct aux_buffer *aux, unsigned long alert_index,static bool aux_reset_buffer (struct aux_buffer *aux,unsigned long range,unsigned long long *overflow) { -union hws_trailer_header old, prev, new; +union hws_trailer_header prev, new;unsigned long i, range_scan, idx;unsigned long long orig_overflow;struct hws_trailer_entry *te;
@@ -1486,17 +1486,15 @@ static bool aux_reset_buffer(struct aux_buffer *aux, unsigned long range, te =aux_sdb_trailer (aux, idx); prev.val =READ_ONCE_ALIGNED_128 (te->header.val);do { - old.val = prev.val; new.val = prev.val; - orig_overflow = old.overflow; + orig_overflow = prev.overflow; new.f =0 ; new.overflow =0 ;if (idx == aux->alert_mark) new.a =1 ;else new.a =0 ; - prev.val =cmpxchg128 (&te->header.val, old.val, new.val); - }while (prev.val != old.val); + }while (!try_cmpxchg128 (&te->header.val, &prev.val, new.val)); *overflow += orig_overflow; }
arch/x86/coco/sev/core.c +6 -0
@@ -253,6 +253,9 @@ static noinstr struct ghcb *__sev_get_ghcb(struct ghcb_state *state)WARN_ON (!irqs_disabled ()); +if (!sev_cfg.ghcbs_initialized) +return boot_ghcb; + data =this_cpu_read (runtime_data); ghcb = &data->ghcb_page;
@@ -649,6 +652,9 @@ static noinstr void __sev_put_ghcb(struct ghcb_state *state)WARN_ON (!irqs_disabled ()); +if (!sev_cfg.ghcbs_initialized) +return ; + data =this_cpu_read (runtime_data); ghcb = &data->ghcb_page;
arch/x86/entry/entry_fred.c +14 -0
@@ -176,6 +176,16 @@ static noinstr void fred_extint(struct pt_regs *regs) } } +#ifdef CONFIG_AMD_MEM_ENCRYPT +noinstr void exc_vmm_communication(struct pt_regs *regs, unsigned long error_code) +{ +if (user_mode (regs)) +return user_exc_vmm_communication (regs, error_code); +else +return kernel_exc_vmm_communication (regs, error_code); +} +#endif + static noinstr void fred_hwexc(struct pt_regs *regs, unsigned long error_code) {/* Optimize for #PF. That's the only exception which matters performance wise */
@@ -206,6 +216,10 @@ static noinstr void fred_hwexc(struct pt_regs *regs, unsigned long error_code)#ifdef CONFIG_X86_CET case X86_TRAP_CP :return exc_control_protection (regs, error_code);#endif +#ifdef CONFIG_AMD_MEM_ENCRYPT +case X86_TRAP_VC :return exc_vmm_communication (regs, error_code); +#endif +default :return fred_bad_type (regs, error_code); }
arch/x86/kernel/cpu/amd.c +7 -0
@@ -1034,7 +1034,14 @@ static bool check_rdseed_microcode(void)if (cpu_has (c,X86_FEATURE_ZEN5 )) {switch (p.ucode_rev >>8 ) {case 0xb0021 : min_rev =0xb00215a ;break ; +case 0xb0081 : min_rev =0xb008121 ;break ;case 0xb1010 : min_rev =0xb101054 ;break ; +case 0xb2040 : min_rev =0xb204037 ;break ; +case 0xb4040 : min_rev =0xb404035 ;break ; +case 0xb4041 : min_rev =0xb404108 ;break ; +case 0xb6000 : min_rev =0xb600037 ;break ; +case 0xb6080 : min_rev =0xb608038 ;break ; +case 0xb7000 : min_rev =0xb700037 ;break ;default :pr_debug ("%s: ucode_rev: 0x%x, current revision: 0x%x\n" , __func__, p.ucode_rev, c->microcode);
crypto/af_alg.c +3 -1
@@ -623,8 +623,10 @@ static int af_alg_alloc_tsgl(struct sock *sk)sg_init_table (sgl->sg,MAX_SGL_ENTS +1 ); sgl->cur =0 ; -if (sg) +if (sg) { +sg_unmark_end (sg +MAX_SGL_ENTS -1 );sg_chain (sg,MAX_SGL_ENTS +1 , sgl->sg); + }list_add_tail (&sgl->list, &ctx->tsgl_list); }
drivers/accel/qaic/qaic_control.c +45 -2
67 lines not on this page · raw message
drivers/comedi/drivers.c +8 -0
@@ -1001,6 +1001,14 @@ int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it) ret = -EIO ; goto out; } +if (IS_ENABLED (CONFIG_LOCKDEP )) { +/* +* dev->spinlock is for private use by the attached low-level +* driver. Reinitialize it to stop lock-dependency tracking +* between attachments to different low-level drivers. +*/ +spin_lock_init (&dev->spinlock); + } dev->driver = driv; dev->board_name = dev->board_ptr ? *(const char **)dev->board_ptr : dev->driver->driver_name;
drivers/comedi/drivers/dt2815.c +12 -0
@@ -175,6 +175,18 @@ static int dt2815_attach(struct comedi_device *dev, struct comedi_devconfig *it) ? current_range_type : voltage_range_type; } +/* +* Check if hardware is present before attempting any I/O operations. +* Reading 0xff from status register typically indicates no hardware +* on the bus (floating bus reads as all 1s). +*/ +if (inb (dev->iobase +DT2815_STATUS ) ==0xff ) { +dev_err (dev->class_dev, +"No hardware detected at I/O base 0x%lx\n" , + dev->iobase); +return -ENODEV ; + } +/* Init the 2815 */ outb (0x00 , dev->iobase +DT2815_STATUS );for (i =0 ; i <100 ; i++) {
drivers/comedi/drivers/me4000.c +12 -4
@@ -315,6 +315,18 @@ static int me4000_xilinx_download(struct comedi_device *dev,unsigned int val;unsigned int i; +/* Get data stream length from header. */ +if (size >=4 ) { + file_length = (((unsigned int )data[0 ] &0xff ) <<24 ) + + (((unsigned int )data[1 ] &0xff ) <<16 ) + + (((unsigned int )data[2 ] &0xff ) <<8 ) + + ((unsigned int )data[3 ] &0xff ); + } +if (size <16 || file_length > size -16 ) { +dev_err (dev->class_dev,"Firmware length inconsistency\n" ); +return -EINVAL ; + } +if (!xilinx_iobase)return -ENODEV ;
@@ -346,10 +358,6 @@ static int me4000_xilinx_download(struct comedi_device *dev,outl (val, devpriv->plx_regbase +PLX9052_CNTRL );/* Download Xilinx firmware */ - file_length = (((unsigned int )data[0 ] &0xff ) <<24 ) + - (((unsigned int )data[1 ] &0xff ) <<16 ) + - (((unsigned int )data[2 ] &0xff ) <<8 ) + - ((unsigned int )data[3 ] &0xff );usleep_range (10 ,1000 );for (i =0 ; i < file_length; i++) {
drivers/comedi/drivers/me_daq.c +19 -16
@@ -344,6 +344,25 @@ static int me2600_xilinx_download(struct comedi_device *dev,unsigned int file_length;unsigned int i; +/* +* Format of the firmware +* Build longs from the byte-wise coded header +* Byte 1-3: length of the array +* Byte 4-7: version +* Byte 8-11: date +* Byte 12-15: reserved +*/ +if (size >=4 ) { + file_length = (((unsigned int )data[0 ] &0xff ) <<24 ) + + (((unsigned int )data[1 ] &0xff ) <<16 ) + + (((unsigned int )data[2 ] &0xff ) <<8 ) + + ((unsigned int )data[3 ] &0xff ); + } +if (size <16 || file_length > size -16 ) { +dev_err (dev->class_dev,"Firmware length inconsistency\n" ); +return -EINVAL ; + } +/* disable irq's on PLX */ writel (0x00 , devpriv->plx_regbase +PLX9052_INTCSR );
@@ -357,22 +376,6 @@ static int me2600_xilinx_download(struct comedi_device *dev,writeb (0x00 , dev->mmio +0x0 );sleep (1 ); -/* -* Format of the firmware -* Build longs from the byte-wise coded header -* Byte 1-3: length of the array -* Byte 4-7: version -* Byte 8-11: date -* Byte 12-15: reserved -*/ -if (size <16 ) -return -EINVAL ; - - file_length = (((unsigned int )data[0 ] &0xff ) <<24 ) + - (((unsigned int )data[1 ] &0xff ) <<16 ) + - (((unsigned int )data[2 ] &0xff ) <<8 ) + - ((unsigned int )data[3 ] &0xff ); -/* * Loop for writing firmware byte by byte to xilinx * Firmware data start at offset 16
drivers/comedi/drivers/ni_atmio16d.c +2 -1
@@ -698,7 +698,8 @@ static int atmio16d_attach(struct comedi_device *dev,static void atmio16d_detach (struct comedi_device *dev) { -reset_atmio16d (dev); +if (dev->private) +reset_atmio16d (dev);comedi_legacy_detach (dev); }
drivers/counter/rz-mtu3-cnt.c +35 -32
192 lines not on this page · raw message
drivers/cpufreq/cpufreq_governor.c +3 -3
@@ -468,13 +468,13 @@ int cpufreq_dbs_governor_init(struct cpufreq_policy *policy)/* Failure, so roll back. */ pr_err ("initialization failed (dbs_data kobject init error %d)\n" , ret); -kobject_put (&dbs_data->attr_set.kobj); - policy->governor_data =NULL ;if (!have_governor_per_policy ()) gov->gdbs_data =NULL ; - gov->exit (dbs_data); + +kobject_put (&dbs_data->attr_set.kobj); + goto free_policy_dbs_info; free_dbs_data:kfree (dbs_data);
drivers/crypto/caam/caamalg_qi2.c +2 -1
@@ -3325,9 +3325,10 @@ static int ahash_setkey(struct crypto_ahash *ahash, const u8 *key,if (aligned_len < keylen)return -EOVERFLOW ; - hashed_key =kmemdup (key, aligned_len,GFP_KERNEL ); + hashed_key =kmalloc (aligned_len,GFP_KERNEL );if (!hashed_key)return -ENOMEM ; +memcpy (hashed_key, key, keylen); ret =hash_digest_key (ctx, &keylen, hashed_key, digestsize);if (ret) goto bad_free_key;
drivers/crypto/caam/caamhash.c +2 -1
@@ -441,9 +441,10 @@ static int ahash_setkey(struct crypto_ahash *ahash,if (aligned_len < keylen)return -EOVERFLOW ; - hashed_key =kmemdup (key, keylen,GFP_KERNEL ); + hashed_key =kmalloc (aligned_len,GFP_KERNEL );if (!hashed_key)return -ENOMEM ; +memcpy (hashed_key, key, keylen); ret =hash_digest_key (ctx, &keylen, hashed_key, digestsize);if (ret) goto bad_free_key;
drivers/crypto/tegra/tegra-se-aes.c +7 -4
@@ -480,7 +480,7 @@ static struct tegra_se_alg tegra_aes_algs[] = { .cra_name = "cbc(aes)", .cra_driver_name = "cbc-aes-tegra", .cra_priority = 500, - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_aes_ctx), .cra_alignmask = 0xf,
@@ -501,7 +501,7 @@ static struct tegra_se_alg tegra_aes_algs[] = { .cra_name = "ecb(aes)", .cra_driver_name = "ecb-aes-tegra", .cra_priority = 500, - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_aes_ctx), .cra_alignmask = 0xf,
@@ -523,7 +523,7 @@ static struct tegra_se_alg tegra_aes_algs[] = { .cra_name = "ctr(aes)", .cra_driver_name = "ctr-aes-tegra", .cra_priority = 500, - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = 1, .cra_ctxsize = sizeof(struct tegra_aes_ctx), .cra_alignmask = 0xf,
@@ -545,6 +545,7 @@ static struct tegra_se_alg tegra_aes_algs[] = { .cra_name = "xts(aes)", .cra_driver_name = "xts-aes-tegra", .cra_priority = 500, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_aes_ctx), .cra_alignmask = (__alignof__(u64) - 1),
@@ -1804,6 +1805,7 @@ static struct tegra_se_alg tegra_aead_algs[] = { .cra_name = "gcm(aes)", .cra_driver_name = "gcm-aes-tegra", .cra_priority = 500, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = 1, .cra_ctxsize = sizeof(struct tegra_aead_ctx), .cra_alignmask = 0xf,
@@ -1826,6 +1828,7 @@ static struct tegra_se_alg tegra_aead_algs[] = { .cra_name = "ccm(aes)", .cra_driver_name = "ccm-aes-tegra", .cra_priority = 500, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = 1, .cra_ctxsize = sizeof(struct tegra_aead_ctx), .cra_alignmask = 0xf,
@@ -1853,7 +1856,7 @@ static struct tegra_se_alg tegra_cmac_algs[] = { .cra_name = "cmac(aes)", .cra_driver_name = "tegra-se-cmac", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_cmac_ctx), .cra_alignmask = 0,
drivers/crypto/tegra/tegra-se-hash.c +17 -13
@@ -698,7 +698,7 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "sha1", .cra_driver_name = "tegra-se-sha1", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA1_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -723,7 +723,7 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "sha224", .cra_driver_name = "tegra-se-sha224", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA224_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -748,7 +748,7 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "sha256", .cra_driver_name = "tegra-se-sha256", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA256_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -773,7 +773,7 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "sha384", .cra_driver_name = "tegra-se-sha384", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA384_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -798,7 +798,7 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "sha512", .cra_driver_name = "tegra-se-sha512", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA512_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -823,7 +823,7 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "sha3-224", .cra_driver_name = "tegra-se-sha3-224", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA3_224_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -848,7 +848,7 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "sha3-256", .cra_driver_name = "tegra-se-sha3-256", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA3_256_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -873,7 +873,7 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "sha3-384", .cra_driver_name = "tegra-se-sha3-384", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA3_384_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -898,7 +898,7 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "sha3-512", .cra_driver_name = "tegra-se-sha3-512", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA3_512_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -925,7 +925,8 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "hmac(sha224)", .cra_driver_name = "tegra-se-hmac-sha224", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, + .cra_flags =CRYPTO_ALG_ASYNC | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA224_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -952,7 +953,8 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "hmac(sha256)", .cra_driver_name = "tegra-se-hmac-sha256", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, + .cra_flags =CRYPTO_ALG_ASYNC | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA256_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -979,7 +981,8 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "hmac(sha384)", .cra_driver_name = "tegra-se-hmac-sha384", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, + .cra_flags =CRYPTO_ALG_ASYNC | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA384_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
@@ -1006,7 +1009,8 @@ static struct tegra_se_alg tegra_hash_algs[] = { .cra_name = "hmac(sha512)", .cra_driver_name = "tegra-se-hmac-sha512", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, + .cra_flags =CRYPTO_ALG_ASYNC | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA512_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0,
drivers/firmware/microchip/mpfs-auto-update.c +6 -4
@@ -113,10 +113,6 @@ static enum fw_upload_err mpfs_auto_update_prepare(struct fw_upload *fw_uploader* be added here. */ - priv->flash =mpfs_sys_controller_get_flash (priv->sys_controller); -if (!priv->flash) -return FW_UPLOAD_ERR_HW_ERROR ; - erase_size =round_up (erase_size, (u64 )priv->flash->erasesize);/*
@@ -427,6 +423,12 @@ static int mpfs_auto_update_probe(struct platform_device *pdev)return dev_err_probe (dev,PTR_ERR (priv->sys_controller),"Could not register as a sub device of the system controller\n" ); + priv->flash =mpfs_sys_controller_get_flash (priv->sys_controller); +if (IS_ERR_OR_NULL (priv->flash)) { +dev_dbg (dev,"No flash connected to the system controller, auto-update not supported\n" ); +return -ENODEV ; + } + priv->dev = dev;platform_set_drvdata (pdev, priv);
drivers/gpio/gpio-mxc.c +9 -1
@@ -576,12 +576,13 @@ static bool mxc_gpio_set_pad_wakeup(struct mxc_gpio_port *port, bool enable)unsigned long config;bool ret = false;int i, type; +bool is_imx8qm =of_device_is_compatible (port->dev->of_node,"fsl,imx8qm-gpio" );static const u32 pad_type_map[] = {IMX_SCU_WAKEUP_OFF ,/* 0 */ IMX_SCU_WAKEUP_RISE_EDGE ,/* IRQ_TYPE_EDGE_RISING */ IMX_SCU_WAKEUP_FALL_EDGE ,/* IRQ_TYPE_EDGE_FALLING */ -IMX_SCU_WAKEUP_FALL_EDGE ,/* IRQ_TYPE_EDGE_BOTH */ +IMX_SCU_WAKEUP_RISE_EDGE ,/* IRQ_TYPE_EDGE_BOTH */ IMX_SCU_WAKEUP_HIGH_LVL ,/* IRQ_TYPE_LEVEL_HIGH */ IMX_SCU_WAKEUP_OFF ,/* 5 */ IMX_SCU_WAKEUP_OFF ,/* 6 */
@@ -596,6 +597,13 @@ static bool mxc_gpio_set_pad_wakeup(struct mxc_gpio_port *port, bool enable) config = pad_type_map[type]; else config =IMX_SCU_WAKEUP_OFF ; + +if (is_imx8qm && config ==IMX_SCU_WAKEUP_FALL_EDGE ) { +dev_warn_once (port->dev, +"No falling-edge support for wakeup on i.MX8QM\n" ); + config =IMX_SCU_WAKEUP_OFF ; + } + ret |=mxc_gpio_generic_config (port, i, config); } }
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +38 -1
@@ -84,6 +84,7 @@#if IS_ENABLED (CONFIG_X86 )#include <asm/intel-family.h> +#include <asm/cpu_device_id.h> #endif MODULE_FIRMWARE ("amdgpu/vega10_gpu_info.bin" );
@@ -1758,6 +1759,42 @@ static bool amdgpu_device_pcie_dynamic_switching_supported(struct amdgpu_devicereturn true; } +static bool amdgpu_device_aspm_support_quirk (struct amdgpu_device *adev) +{ +/* Enabling ASPM causes randoms hangs on Tahiti and Oland on Zen4. +* It's unclear if this is a platform-specific or GPU-specific issue. +* Disable ASPM on SI for the time being. +*/ +if (adev->family ==AMDGPU_FAMILY_SI ) +return true; + +#if IS_ENABLED (CONFIG_X86 ) +struct cpuinfo_x86 *c = &cpu_data (0 ); + +if (!(amdgpu_ip_version (adev,GC_HWIP ,0 ) ==IP_VERSION (12 ,0 ,0 ) || +amdgpu_ip_version (adev,GC_HWIP ,0 ) ==IP_VERSION (12 ,0 ,1 ))) +return false; + +if (c->x86 ==6 && + adev->pm.pcie_gen_mask &CAIL_PCIE_LINK_SPEED_SUPPORT_GEN5 ) { +switch (c->x86_model) { +case VFM_MODEL (INTEL_ALDERLAKE ): +case VFM_MODEL (INTEL_ALDERLAKE_L ): +case VFM_MODEL (INTEL_RAPTORLAKE ): +case VFM_MODEL (INTEL_RAPTORLAKE_P ): +case VFM_MODEL (INTEL_RAPTORLAKE_S ): +return true; +default : +return false; + } + }else { +return false; + } +#else +return false; +#endif +} +/** * amdgpu_device_should_use_aspm - check if the device should program ASPM *
@@ -1782,7 +1819,7 @@ bool amdgpu_device_should_use_aspm(struct amdgpu_device *adev) }if (adev->flags &AMD_IS_APU )return false; -if (!(adev->pm.pp_feature &PP_PCIE_DPM_MASK )) +if (amdgpu_device_aspm_support_quirk (adev))return false;return pcie_aspm_enabled (adev->pdev); }
drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c +4 -1
@@ -68,8 +68,11 @@ int amdgpu_pasid_alloc(unsigned int bits)return -EINVAL ;spin_lock (&amdgpu_pasid_idr_lock); +/* TODO: Need to replace the idr with an xarry, and then +* handle the internal locking with ATOMIC safe paths. +*/ pasid =idr_alloc_cyclic (&amdgpu_pasid_idr,NULL ,1 , -1U << bits,GFP_KERNEL ); +1U << bits,GFP_ATOMIC );spin_unlock (&amdgpu_pasid_idr_lock);if (pasid >=0 )
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +1 -1
@@ -172,7 +172,7 @@ struct amdgpu_mem_stats;#define AMDGPU_VA_RESERVED_SEQ64_SIZE (2ULL << 20)#define AMDGPU_VA_RESERVED_SEQ64_START (adev) (AMDGPU_VA_RESERVED_CSA_START(adev) \ - AMDGPU_VA_RESERVED_SEQ64_SIZE) -#define AMDGPU_VA_RESERVED_TRAP_SIZE (2ULL << 12) +#define AMDGPU_VA_RESERVED_TRAP_SIZE (1ULL << 16)#define AMDGPU_VA_RESERVED_TRAP_START (adev) (AMDGPU_VA_RESERVED_SEQ64_START(adev) \ - AMDGPU_VA_RESERVED_TRAP_SIZE)#define AMDGPU_VA_RESERVED_BOTTOM (1ULL << 16)
drivers/gpu/drm/amd/amdkfd/kfd_priv.h +2 -2
@@ -102,8 +102,8 @@* The first chunk is the TBA used for the CWSR ISA code. The second * chunk is used as TMA for user-mode trap handler setup in daisy-chain mode. */ -#define KFD_CWSR_TBA_TMA_SIZE (PAGE_SIZE * 2) -#define KFD_CWSR_TMA_OFFSET (PAGE_SIZE + 2048) +#define KFD_CWSR_TBA_TMA_SIZE (AMDGPU_GPU_PAGE_SIZE * 2) +#define KFD_CWSR_TMA_OFFSET (AMDGPU_GPU_PAGE_SIZE + 2048)#define KFD_MAX_NUM_OF_QUEUES_PER_DEVICE \ (KFD_MAX_NUM_OF_PROCESSES * \
drivers/gpu/drm/amd/display/dc/clk_mgr/dce100/dce_clk_mgr.c +10 -7
@@ -72,9 +72,9 @@ static const struct state_dependent_clocks dce80_max_clks_by_state[] = {/* ClocksStateLow */ { .display_clk_khz = 352000, .pixel_clk_khz = 330000}, /* ClocksStateNominal */ -{ .display_clk_khz = 600000, .pixel_clk_khz = 400000 }, +{ .display_clk_khz = 625000, .pixel_clk_khz = 400000 }, /* ClocksStatePerformance */ -{ .display_clk_khz = 600000, .pixel_clk_khz = 400000 } }; +{ .display_clk_khz = 625000, .pixel_clk_khz = 400000 } };int dentist_get_divider_from_did (int did) {
@@ -245,6 +245,11 @@ int dce_set_clock( pxl_clk_params.target_pixel_clock_100hz = requested_clk_khz *10 ; pxl_clk_params.pll_id =CLOCK_SOURCE_ID_DFS ; +/* DCE 6.0, DCE 6.4: engine clock is the same as PLL0 */ +if (clk_mgr_base->ctx->dce_version ==DCE_VERSION_6_0 || + clk_mgr_base->ctx->dce_version ==DCE_VERSION_6_4 ) + pxl_clk_params.pll_id =CLOCK_SOURCE_ID_PLL0 ; +if (clk_mgr_dce->dfs_bypass_active) pxl_clk_params.flags.SET_DISPCLK_DFS_BYPASS = true;
@@ -398,11 +403,9 @@ static void dce_update_clocks(struct clk_mgr *clk_mgr_base, {struct clk_mgr_internal *clk_mgr_dce =TO_CLK_MGR_INTERNAL (clk_mgr_base);struct dm_pp_power_level_change_request level_change_req; -int patched_disp_clk = context->bw_ctx.bw.dce.dispclk_khz; - -/*TODO: W/A for dal3 linux, investigate why this works */ -if (!clk_mgr_dce->dfs_bypass_active) - patched_disp_clk = patched_disp_clk *115 /100 ; +const int max_disp_clk = + clk_mgr_dce->max_clks_by_state[DM_PP_CLOCKS_STATE_PERFORMANCE ].display_clk_khz; +int patched_disp_clk =MIN (max_disp_clk, context->bw_ctx.bw.dce.dispclk_khz); level_change_req.power_level =dce_get_required_clocks_state (clk_mgr_base, context);/* get max clock state from PPLIB */
drivers/gpu/drm/amd/display/dc/dce60/dce60_resource.c +32 -17
108 lines not on this page · raw message
drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c +2 -4
@@ -1910,10 +1910,8 @@ void dce110_enable_accelerated_mode(struct dc *dc, struct dc_state *context)get_edp_streams (context, edp_streams, &edp_stream_num); -// Check fastboot support, disable on DCE8 because of blank screens -if (edp_num && edp_stream_num && dc->ctx->dce_version !=DCE_VERSION_8_0 && - dc->ctx->dce_version !=DCE_VERSION_8_1 && - dc->ctx->dce_version !=DCE_VERSION_8_3 ) { +/* Check fastboot support, disable on DCE 6-8-10 because of blank screens */ +if (edp_num && edp_stream_num && dc->ctx->dce_version >DCE_VERSION_10_0 ) {for (i =0 ; i < edp_num; i++) { edp_link = edp_links[i];if (edp_link != edp_streams[0 ]->link)
drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c +0 -1
@@ -260,7 +260,6 @@ int smu_v11_0_check_fw_version(struct smu_context *smu)"smu fw program = %d, version = 0x%08x (%d.%d.%d)\n" , smu->smc_driver_if_version, if_version, smu_program, smu_version, smu_major, smu_minor, smu_debug); -dev_info (smu->adev->dev,"SMU driver if version not matched\n" ); }return ret;
drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c +0 -1
@@ -101,7 +101,6 @@ int smu_v12_0_check_fw_version(struct smu_context *smu)"smu fw program = %d, smu fw version = 0x%08x (%d.%d.%d)\n" , smu->smc_driver_if_version, if_version, smu_program, smu_version, smu_major, smu_minor, smu_debug); -dev_info (smu->adev->dev,"SMU driver if version not matched\n" ); }return ret;
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c +32 -1
@@ -59,6 +59,10 @@#define to_amdgpu_device (x) (container_of(x, struct amdgpu_device, pm.smu_i2c)) +static void smu_v13_0_0_get_od_setting_limits (struct smu_context *smu, +int od_feature_bit, +int32_t *min,int32_t *max); +#define FEATURE_MASK (feature) (1ULL << feature)#define SMC_DPM_FEATURE ( \ FEATURE_MASK(FEATURE_DPM_GFXCLK_BIT) | \
@@ -1082,8 +1086,35 @@ static bool smu_v13_0_0_is_od_feature_supported(struct smu_context *smu,PPTable_t *pptable = smu->smu_table.driver_pptable;const OverDriveLimits_t *const overdrive_upperlimits = &pptable->SkuTable.OverDriveLimitsBasicMax; +int32_t min_value, max_value; +bool feature_enabled; -return overdrive_upperlimits->FeatureCtrlMask & (1U << od_feature_bit); +switch (od_feature_bit) { +case PP_OD_FEATURE_FAN_CURVE_BIT : + feature_enabled = !!(overdrive_upperlimits->FeatureCtrlMask & (1U << od_feature_bit)); +if (feature_enabled) { +smu_v13_0_0_get_od_setting_limits (smu,PP_OD_FEATURE_FAN_CURVE_TEMP , + &min_value, &max_value); +if (!min_value && !max_value) { + feature_enabled = false; + goto out; + } + +smu_v13_0_0_get_od_setting_limits (smu,PP_OD_FEATURE_FAN_CURVE_PWM , + &min_value, &max_value); +if (!min_value && !max_value) { + feature_enabled = false; + goto out; + } + } +break ; +default : + feature_enabled = !!(overdrive_upperlimits->FeatureCtrlMask & (1U << od_feature_bit)); +break ; + } + +out: +return feature_enabled; } static void smu_v13_0_0_get_od_setting_limits(struct smu_context *smu,
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c +32 -1
@@ -59,6 +59,10 @@#define to_amdgpu_device (x) (container_of(x, struct amdgpu_device, pm.smu_i2c)) +static void smu_v13_0_7_get_od_setting_limits (struct smu_context *smu, +int od_feature_bit, +int32_t *min,int32_t *max); +#define FEATURE_MASK (feature) (1ULL << feature)#define SMC_DPM_FEATURE ( \ FEATURE_MASK(FEATURE_DPM_GFXCLK_BIT) | \
@@ -1071,8 +1075,35 @@ static bool smu_v13_0_7_is_od_feature_supported(struct smu_context *smu,PPTable_t *pptable = smu->smu_table.driver_pptable;const OverDriveLimits_t *const overdrive_upperlimits = &pptable->SkuTable.OverDriveLimitsBasicMax; +int32_t min_value, max_value; +bool feature_enabled; -return overdrive_upperlimits->FeatureCtrlMask & (1U << od_feature_bit); +switch (od_feature_bit) { +case PP_OD_FEATURE_FAN_CURVE_BIT : + feature_enabled = !!(overdrive_upperlimits->FeatureCtrlMask & (1U << od_feature_bit)); +if (feature_enabled) { +smu_v13_0_7_get_od_setting_limits (smu,PP_OD_FEATURE_FAN_CURVE_TEMP , + &min_value, &max_value); +if (!min_value && !max_value) { + feature_enabled = false; + goto out; + } + +smu_v13_0_7_get_od_setting_limits (smu,PP_OD_FEATURE_FAN_CURVE_PWM , + &min_value, &max_value); +if (!min_value && !max_value) { + feature_enabled = false; + goto out; + } + } +break ; +default : + feature_enabled = !!(overdrive_upperlimits->FeatureCtrlMask & (1U << od_feature_bit)); +break ; + } + +out: +return feature_enabled; } static void smu_v13_0_7_get_od_setting_limits(struct smu_context *smu,
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c +0 -1
@@ -277,7 +277,6 @@ int smu_v14_0_check_fw_version(struct smu_context *smu)"smu fw program = %d, smu fw version = 0x%08x (%d.%d.%d)\n" , smu->smc_driver_if_version, if_version, smu_program, smu_version, smu_major, smu_minor, smu_debug); -dev_info (adev->dev,"SMU driver if version not matched\n" ); }return ret;
drivers/gpu/drm/ast/ast_dp501.c +1 -1
@@ -442,7 +442,7 @@ static void ast_init_analog(struct drm_device *dev)/* Finally, clear bits [17:16] of SCU2c */ data =ast_read32 (ast,0x1202c ); data &=0xfffcffff ; -ast_write32 (ast,0 , data); +ast_write32 (ast,0x1202c , data);/* Disable DVO */ ast_set_index_reg_mask (ast,AST_IO_VGACRI ,0xa3 ,0xcf ,0x00 );
drivers/gpu/drm/drm_file.c +1 -4
@@ -223,7 +223,6 @@ 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 ;
@@ -237,11 +236,9 @@ void drm_file_free(struct drm_file *file)drm_events_release (file); -if (drm_core_check_feature (dev,DRIVER_MODESET ) && -drm_dev_enter (dev, &idx)) { +if (drm_core_check_feature (dev,DRIVER_MODESET )) {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_ioc32.c +2 -0
@@ -28,6 +28,7 @@* IN THE SOFTWARE. */ #include <linux/compat.h> +#include <linux/nospec.h> #include <linux/ratelimit.h> #include <linux/export.h>
@@ -374,6 +375,7 @@ long drm_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)if (nr >=ARRAY_SIZE (drm_compat_ioctls))return drm_ioctl (filp, cmd, arg); + nr =array_index_nospec (nr,ARRAY_SIZE (drm_compat_ioctls)); fn = drm_compat_ioctls[nr].fn;if (!fn)return drm_ioctl (filp, cmd, arg);
drivers/gpu/drm/drm_mode_config.c +3 -6
@@ -553,13 +553,10 @@ 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) { -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]" ); +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); - } -list_del_init (&fb->filp_head); +drm_printf (&p,"framebuffer[%u]:\n" , fb->base.id); +drm_framebuffer_print_info (&p,1 , fb);drm_framebuffer_free (&fb->base.refcount); }
drivers/gpu/drm/i915/display/g4x_dp.c +1 -1
@@ -134,7 +134,7 @@ static void intel_dp_prepare(struct intel_encoder *encoder, intel_dp->DP |=DP_SYNC_VS_HIGH ; intel_dp->DP |=DP_LINK_TRAIN_OFF_CPT ; -if (drm_dp_enhanced_frame_cap (intel_dp->dpcd)) +if (pipe_config->enhanced_framing) intel_dp->DP |=DP_ENHANCED_FRAMING ; intel_dp->DP |=DP_PIPE_SEL_IVB (crtc->pipe);
drivers/gpu/drm/i915/display/icl_dsi.c +2 -2
@@ -869,7 +869,7 @@ gen11_dsi_set_transcoder_timings(struct intel_encoder *encoder,* non-compressed link speeds, and simplifies down to the ratio between * compressed and non-compressed bpp. */ -if (crtc_state->dsc.compression_enable) { +if (is_vid_mode (intel_dsi) && crtc_state->dsc.compression_enable) { mul =fxp_q4_to_int (crtc_state->dsc.compressed_bpp_x16); div =mipi_dsi_pixel_format_to_bpp (intel_dsi->pixel_format); }
@@ -1477,7 +1477,7 @@ static void gen11_dsi_get_timings(struct intel_encoder *encoder,struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode; -if (pipe_config->dsc.compressed_bpp_x16) { +if (is_vid_mode (intel_dsi) && pipe_config->dsc.compressed_bpp_x16) {int div =fxp_q4_to_int (pipe_config->dsc.compressed_bpp_x16);int mul =mipi_dsi_pixel_format_to_bpp (intel_dsi->pixel_format);
drivers/hid/hid-logitech-hidpp.c +5 -1
@@ -4514,10 +4514,12 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)if (!ret) ret =hidpp_ff_init (hidpp, &data); -if (ret) +if (ret) {hid_warn (hidpp->hid_dev,"Unable to initialize force feedback support, errno %d\n" , ret); + ret =0 ; + } }/*
@@ -4695,6 +4697,8 @@ static const struct hid_device_id hidpp_devices[] = { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb038) }, {/* Slim Solar+ K980 Keyboard over Bluetooth */ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb391) }, + { /* MX Master 4 mouse over Bluetooth */ + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb042) }, {} };
drivers/hid/hid-multitouch.c +7 -0
@@ -493,12 +493,19 @@ static void mt_get_feature(struct hid_device *hdev, struct hid_report *report)dev_warn (&hdev->dev,"failed to fetch feature %d\n" , report->id); }else { +/* The report ID in the request and the response should match */ +if (report->id != buf[0 ]) { +hid_err (hdev,"Returned feature report did not match the request\n" ); + goto free; + } + ret =hid_report_raw_event (hdev,HID_FEATURE_REPORT , buf, size,0 );if (ret)dev_warn (&hdev->dev,"failed to report feature\n" ); } +free:kfree (buf); }
drivers/hid/wacom_wac.c +10 -0
@@ -1210,10 +1210,20 @@ static int wacom_intuos_bt_irq(struct wacom_wac *wacom, size_t len)switch (data[0 ]) {case 0x04 : +if (len <32 ) { +dev_warn (wacom->pen_input->dev.parent, +"Report 0x04 too short: %zu bytes\n" , len); +break ; + }wacom_intuos_bt_process_data (wacom, data + i); i +=10 ; fallthrough;case 0x03 : +if (i ==1 && len <22 ) { +dev_warn (wacom->pen_input->dev.parent, +"Report 0x03 too short: %zu bytes\n" , len); +break ; + }wacom_intuos_bt_process_data (wacom, data + i); i +=10 ;wacom_intuos_bt_process_data (wacom, data + i);
drivers/hwmon/occ/common.c +9 -10
@@ -420,6 +420,12 @@ static ssize_t occ_show_freq_2(struct device *dev,return sysfs_emit (buf,"%u\n" , val); } +static u64 occ_get_powr_avg (u64 accum,u32 samples) +{ +return (samples ==0 ) ?0 : +mul_u64_u32_div (accum,1000000UL , samples); +} +static ssize_t occ_show_power_1 (struct device *dev,struct device_attribute *attr,char *buf) {
@@ -441,9 +447,8 @@ static ssize_t occ_show_power_1(struct device *dev, val =get_unaligned_be16 (&power->sensor_id);break ;case 1 : - val =get_unaligned_be32 (&power->accumulator) / -get_unaligned_be32 (&power->update_tag); - val *=1000000ULL ; + val =occ_get_powr_avg (get_unaligned_be32 (&power->accumulator), +get_unaligned_be32 (&power->update_tag));break ;case 2 : val = (u64)get_unaligned_be32(&power->update_tag) *
@@ -459,12 +464,6 @@ static ssize_t occ_show_power_1(struct device *dev,return sysfs_emit (buf,"%llu\n" , val); } -static u64 occ_get_powr_avg (u64 accum,u32 samples) -{ -return (samples ==0 ) ?0 : -mul_u64_u32_div (accum,1000000UL , samples); -} -static ssize_t occ_show_power_2 (struct device *dev,struct device_attribute *attr,char *buf) {
@@ -725,7 +724,7 @@ static ssize_t occ_show_extended(struct device *dev,switch (sattr->nr) {case 0 :if (extn->flags &EXTN_FLAG_SENSOR_ID ) { - rc =sysfs_emit (buf,"%u" , + rc =sysfs_emit (buf,"%u\n" ,get_unaligned_be32 (&extn->sensor_id)); }else { rc =sysfs_emit (buf,"%4phN\n" , extn->name);
drivers/hwmon/pmbus/ltc4286.c +1 -0
@@ -173,3 +173,4 @@ module_i2c_driver(ltc4286_driver);MODULE_AUTHOR ("Delphine CC Chiu <[email protected]>" );MODULE_DESCRIPTION ("PMBUS driver for LTC4286 and compatibles" );MODULE_LICENSE ("GPL" ); +MODULE_IMPORT_NS ("PMBUS" );
drivers/hwmon/pmbus/pxe1610.c +4 -1
@@ -104,7 +104,10 @@ static int pxe1610_probe(struct i2c_client *client)* By default this device doesn't boot to page 0, so set page 0 * to access all pmbus registers. */ -i2c_smbus_write_byte_data (client,PMBUS_PAGE ,0 ); + ret =i2c_smbus_write_byte_data (client,PMBUS_PAGE ,0 ); +if (ret <0 ) +return dev_err_probe (&client->dev, ret, +"Failed to set page 0\n" );/* Read Manufacturer id */ ret =i2c_smbus_read_block_data (client,PMBUS_MFR_ID , buf);
drivers/hwmon/pmbus/tps53679.c +2 -2
@@ -156,8 +156,8 @@ static int tps53676_identify(struct i2c_client *client, ret =i2c_smbus_read_block_data (client,PMBUS_IC_DEVICE_ID , buf);if (ret <0 )return ret; -if (strncmp ("TI\x53\x67\x60" , buf,5 )) { -dev_err (&client->dev,"Unexpected device ID: %s\n" , buf); +if (ret !=6 ||memcmp (buf,"TI\x53\x67\x60\x00" ,6 )) { +dev_err (&client->dev,"Unexpected device ID: %*ph\n" , ret, buf);return -ENODEV ; }
drivers/i2c/busses/Kconfig +2 -0
@@ -1177,6 +1177,8 @@ config I2C_TEGRA tristate "NVIDIA Tegra internal I2C controller" depends on ARCH_TEGRA || (COMPILE_TEST && (ARC || ARM || ARM64 || M68K || RISCV || SUPERH || SPARC)) # COMPILE_TEST needs architectures with readsX()/writesX() primitives + depends on PINCTRL + # ARCH_TEGRA implies PINCTRL, but the COMPILE_TEST side doesn't. help If you say yes to this option, support will be included for the I2C controller embedded in NVIDIA Tegra SOCs
drivers/i2c/busses/i2c-tegra.c +4 -1
@@ -1786,8 +1786,11 @@ static int tegra_i2c_probe(struct platform_device *pdev)* * VI I2C device shouldn't be marked as IRQ-safe because VI I2C won't * be used for atomic transfers. ACPI device is not IRQ safe also. +* +* Devices with pinctrl states cannot be marked IRQ-safe as the pinctrl +* state transitions during runtime PM require mutexes. */ -if (!IS_VI (i2c_dev) && !has_acpi_companion (i2c_dev->dev)) +if (!IS_VI (i2c_dev) && !has_acpi_companion (i2c_dev->dev) && !i2c_dev->dev->pins)pm_runtime_irq_safe (i2c_dev->dev);pm_runtime_enable (i2c_dev->dev);
drivers/iio/accel/adxl355_core.c +1 -1
@@ -745,7 +745,7 @@ static const struct iio_chan_spec adxl355_channels[] = {BIT (IIO_CHAN_INFO_OFFSET ), .scan_index = 3, .scan_type = { - .sign ='s' , + .sign ='u' , .realbits =12 , .storagebits =16 , .endianness =IIO_BE ,
drivers/iio/accel/adxl380.c +1 -1
@@ -888,7 +888,7 @@ static int adxl380_set_fifo_samples(struct adxl380_state *st) ret =regmap_update_bits (st->regmap,ADXL380_FIFO_CONFIG_0_REG ,ADXL380_FIFO_SAMPLES_8_MSK ,FIELD_PREP (ADXL380_FIFO_SAMPLES_8_MSK , - (fifo_samples &BIT (8 )))); + !!(fifo_samples &BIT (8 ))));if (ret)return ret;
drivers/iio/adc/aspeed_adc.c +1 -0
@@ -415,6 +415,7 @@ static int aspeed_adc_vref_config(struct iio_dev *indio_dev) } adc_engine_control_reg_val =readl (data->base +ASPEED_REG_ENGINE_CONTROL ); + adc_engine_control_reg_val &= ~ASPEED_ADC_REF_VOLTAGE ; ret =devm_regulator_get_enable_read_voltage (data->dev,"vref" );if (ret <0 && ret != -ENODEV )
drivers/iio/adc/ti-adc161s626.c +20 -21
75 lines not on this page · raw message
drivers/iio/adc/ti-ads1119.c +6 -5
@@ -274,12 +274,15 @@ static int ads1119_single_conversion(struct ads1119_state *st, ret =pm_runtime_resume_and_get (dev);if (ret) - goto pdown; +return ret; ret =ads1119_configure_channel (st, mux, gain, datarate);if (ret) goto pdown; +if (st->client->irq) +reinit_completion (&st->completion); + ret =i2c_smbus_write_byte (st->client,ADS1119_CMD_START_SYNC );if (ret) goto pdown;
@@ -735,10 +738,8 @@ static int ads1119_probe(struct i2c_client *client)return dev_err_probe (dev, ret,"Failed to setup IIO buffer\n" );if (client->irq >0 ) { - ret =devm_request_threaded_irq (dev, client->irq, - ads1119_irq_handler, -NULL ,IRQF_ONESHOT , -"ads1119" , indio_dev); + ret =devm_request_irq (dev, client->irq, ads1119_irq_handler, +IRQF_NO_THREAD ,"ads1119" , indio_dev);if (ret)return dev_err_probe (dev, ret,"Failed to allocate irq\n" );
drivers/iio/dac/ad5770r.c +1 -1
@@ -323,7 +323,7 @@ static int ad5770r_read_raw(struct iio_dev *indio_dev, chan->address, st->transf_buf, 2);if (ret) -return 0 ; +return ret; buf16 = st->transf_buf[0 ] + (st->transf_buf[1 ] <<8 ); *val = buf16 >>2 ;
drivers/iio/gyro/mpu3050-core.c +21 -11
@@ -1132,11 +1132,16 @@ static int mpu3050_trigger_probe(struct iio_dev *indio_dev, int irq) ret =iio_trigger_register (mpu3050->trig);if (ret) -return ret; + goto err_iio_trigger; indio_dev->trig =iio_trigger_get (mpu3050->trig);return 0 ; + +err_iio_trigger: +free_irq (mpu3050->irq, mpu3050->trig); + +return ret; } int mpu3050_common_probe(struct device *dev,
@@ -1224,12 +1229,6 @@ int mpu3050_common_probe(struct device *dev, goto err_power_down; } - ret =iio_device_register (indio_dev); -if (ret) { -dev_err (dev,"device register failed\n" ); - goto err_cleanup_buffer; - } -dev_set_drvdata (dev, indio_dev);/* Check if we have an assigned IRQ to use as trigger */
@@ -1252,9 +1251,20 @@ int mpu3050_common_probe(struct device *dev,pm_runtime_use_autosuspend (dev);pm_runtime_put (dev); + ret =iio_device_register (indio_dev); +if (ret) { +dev_err (dev,"device register failed\n" ); + goto err_iio_device_register; + } +return 0 ; -err_cleanup_buffer: +err_iio_device_register: +pm_runtime_get_sync (dev); +pm_runtime_put_noidle (dev); +pm_runtime_disable (dev); +if (irq) +free_irq (mpu3050->irq, mpu3050->trig);iio_triggered_buffer_cleanup (indio_dev); err_power_down:mpu3050_power_down (mpu3050);
@@ -1267,13 +1277,13 @@ void mpu3050_common_remove(struct device *dev)struct iio_dev *indio_dev =dev_get_drvdata (dev);struct mpu3050 *mpu3050 =iio_priv (indio_dev); +iio_device_unregister (indio_dev);pm_runtime_get_sync (dev);pm_runtime_put_noidle (dev);pm_runtime_disable (dev); -iio_triggered_buffer_cleanup (indio_dev);if (mpu3050->irq) -free_irq (mpu3050->irq, mpu3050); -iio_device_unregister (indio_dev); +free_irq (mpu3050->irq, mpu3050->trig); +iio_triggered_buffer_cleanup (indio_dev);mpu3050_power_down (mpu3050); }
drivers/iio/imu/bmi160/bmi160_core.c +5 -10
@@ -573,12 +573,16 @@ static int bmi160_config_pin(struct regmap *regmap, enum bmi160_int_pin pin, int_out_ctrl_shift =BMI160_INT1_OUT_CTRL_SHIFT ; int_latch_mask =BMI160_INT1_LATCH_MASK ; int_map_mask =BMI160_INT1_MAP_DRDY_EN ; + pin_name ="INT1" ;break ;case BMI160_PIN_INT2 : int_out_ctrl_shift =BMI160_INT2_OUT_CTRL_SHIFT ; int_latch_mask =BMI160_INT2_LATCH_MASK ; int_map_mask =BMI160_INT2_MAP_DRDY_EN ; + pin_name ="INT2" ;break ; +default : +return -EINVAL ; } int_out_ctrl_mask =BMI160_INT_OUT_CTRL_MASK << int_out_ctrl_shift;
@@ -612,17 +616,8 @@ static int bmi160_config_pin(struct regmap *regmap, enum bmi160_int_pin pin, ret =bmi160_write_conf_reg (regmap,BMI160_REG_INT_MAP , int_map_mask, int_map_mask, write_usleep); -if (ret) { -switch (pin) { -case BMI160_PIN_INT1 : - pin_name ="INT1" ; -break ; -case BMI160_PIN_INT2 : - pin_name ="INT2" ; -break ; - } +if (ret)dev_err (dev,"Failed to configure %s IRQ pin" , pin_name); - }return ret; }
drivers/iio/imu/bno055/bno055.c +1 -1
@@ -64,7 +64,7 @@#define BNO055_GRAVITY_DATA_X_LSB_REG 0x2E#define BNO055_GRAVITY_DATA_Y_LSB_REG 0x30#define BNO055_GRAVITY_DATA_Z_LSB_REG 0x32 -#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2) +#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2 + 1)#define BNO055_TEMP_REG 0x34#define BNO055_CALIB_STAT_REG 0x35#define BNO055_CALIB_STAT_MAGN_SHIFT 0
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +4 -0
@@ -224,6 +224,10 @@ static int st_lsm6dsx_set_fifo_odr(struct st_lsm6dsx_sensor *sensor,const struct st_lsm6dsx_reg *batch_reg;u8 data; +/* Only internal sensors have a FIFO ODR configuration register. */ +if (sensor->id >=ARRAY_SIZE (hw->settings->batch)) +return 0 ; + batch_reg = &hw->settings->batch[sensor->id];if (batch_reg->addr) {int val;
drivers/iio/light/vcnl4035.c +12 -6
@@ -105,17 +105,23 @@ static irqreturn_t vcnl4035_trigger_consumer_handler(int irq, void *p)struct iio_dev *indio_dev = pf->indio_dev;struct vcnl4035_data *data =iio_priv (indio_dev);/* Ensure naturally aligned timestamp */ -u8 buffer[ALIGN (sizeof (u16),sizeof (s64)) +sizeof (s64)]__aligned(8) = { }; +struct { +u16 als_data; +aligned_s64 timestamp; + } buffer = { }; +unsigned int val;int ret; - ret =regmap_read (data->regmap,VCNL4035_ALS_DATA , (int *)buffer); + ret =regmap_read (data->regmap,VCNL4035_ALS_DATA , &val);if (ret <0 ) {dev_err (&data->client->dev,"Trigger consumer can't read from sensor.\n" ); goto fail_read; } -iio_push_to_buffers_with_timestamp (indio_dev, buffer, -iio_get_time_ns (indio_dev)); + + buffer.als_data = val; +iio_push_to_buffers_with_timestamp (indio_dev, &buffer, +iio_get_time_ns (indio_dev)); fail_read:iio_trigger_notify_done (indio_dev->trig);
@@ -378,7 +384,7 @@ static const struct iio_chan_spec vcnl4035_channels[] = { .sign = 'u', .realbits = 16, .storagebits = 16, - .endianness = IIO_LE, + .endianness = IIO_CPU, }, }, {
@@ -392,7 +398,7 @@ static const struct iio_chan_spec vcnl4035_channels[] = { .sign = 'u', .realbits = 16, .storagebits = 16, - .endianness = IIO_LE, + .endianness = IIO_CPU, }, }, };
drivers/input/joystick/xpad.c +5 -0
@@ -307,6 +307,8 @@ static const struct xpad_device { { 0x1532, 0x0a00, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, { 0x1532, 0x0a03, "Razer Wildcat", 0, XTYPE_XBOXONE }, { 0x1532, 0x0a29, "Razer Wolverine V2", 0, XTYPE_XBOXONE }, + { 0x1532, 0x0a57, "Razer Wolverine V3 Pro (Wired)", 0, XTYPE_XBOX360 }, + { 0x1532, 0x0a59, "Razer Wolverine V3 Pro (2.4 GHz Dongle)", 0, XTYPE_XBOX360 }, { 0x15e4, 0x3f00, "Power A Mini Pro Elite", 0, XTYPE_XBOX360 }, { 0x15e4, 0x3f0a, "Xbox Airflo wired controller", 0, XTYPE_XBOX360 }, { 0x15e4, 0x3f10, "Batarang Xbox 360 controller", 0, XTYPE_XBOX360 },
@@ -354,6 +356,8 @@ static const struct xpad_device { { 0x1bad, 0xfd00, "Razer Onza TE", 0, XTYPE_XBOX360 }, { 0x1bad, 0xfd01, "Razer Onza", 0, XTYPE_XBOX360 }, { 0x1ee9, 0x1590, "ZOTAC Gaming Zone", 0, XTYPE_XBOX360 }, + { 0x20bc, 0x5134, "BETOP BTP-KP50B Xinput Dongle", 0, XTYPE_XBOX360 }, + { 0x20bc, 0x514a, "BETOP BTP-KP50C Xinput Dongle", 0, XTYPE_XBOX360 }, { 0x20d6, 0x2001, "BDA Xbox Series X Wired Controller", 0, XTYPE_XBOXONE }, { 0x20d6, 0x2009, "PowerA Enhanced Wired Controller for Xbox Series X|S", 0, XTYPE_XBOXONE }, { 0x20d6, 0x2064, "PowerA Wired Controller for Xbox", MAP_SHARE_BUTTON, XTYPE_XBOXONE },
@@ -548,6 +552,7 @@ static const struct usb_device_id xpad_table[] = {XPAD_XBOX360_VENDOR (0x1a86 ),/* Nanjing Qinheng Microelectronics (WCH) */ XPAD_XBOX360_VENDOR (0x1bad ),/* Harmonix Rock Band guitar and drums */ XPAD_XBOX360_VENDOR (0x1ee9 ),/* ZOTAC Technology Limited */ +XPAD_XBOX360_VENDOR (0x20bc ),/* BETOP wireless dongles */ XPAD_XBOX360_VENDOR (0x20d6 ),/* PowerA controllers */ XPAD_XBOXONE_VENDOR (0x20d6 ),/* PowerA controllers */ XPAD_XBOX360_VENDOR(0x2345), /* Machenike Controllers */
drivers/input/mouse/bcm5974.c +41 -1
75 lines not on this page · raw message
drivers/input/rmi4/rmi_f54.c +2 -2
@@ -540,6 +540,8 @@ static void rmi_f54_work(struct work_struct *work)int error;int i; +mutex_lock (&f54->data_mutex); + report_size =rmi_f54_get_report_size (f54);if (report_size ==0 ) { dev_err(&fn->dev, "Bad report size, report type=%d\n",
@@ -548,8 +550,6 @@ static void rmi_f54_work(struct work_struct *work) goto error;/* retry won't help */ } -mutex_lock (&f54->data_mutex); -/* * Need to check if command has completed. * If not try again later.
drivers/input/serio/i8042-acpipnpio.h +7 -0
@@ -1187,6 +1187,13 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) }, + { + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "X6KK45xU_X6SP45xU"), + }, + .driver_data = (void *)(SERIO_QUIRK_NOMUX |SERIO_QUIRK_RESET_ALWAYS | +SERIO_QUIRK_NOLOOP |SERIO_QUIRK_NOPNP ) + }, { .matches = { DMI_MATCH(DMI_BOARD_NAME, "WUJIE Series-X5SP4NAG"),
drivers/misc/fastrpc.c +1 -0
@@ -1373,6 +1373,7 @@ static int fastrpc_init_create_static_process(struct fastrpc_user *fl, } err_map:fastrpc_buf_free (fl->cctx->remote_heap); + fl->cctx->remote_heap =NULL ; err_name:kfree (name); err:
drivers/net/ethernet/broadcom/bnxt/bnxt.c +2 -0
@@ -7748,6 +7748,8 @@ static int __bnxt_reserve_rings(struct bnxt *bp) ulp_msix =bnxt_get_avail_msix (bp, bp->ulp_num_msix_want);if (!ulp_msix)bnxt_set_ulp_stat_ctxs (bp,0 ); +else +bnxt_set_dflt_ulp_stat_ctxs (bp);if (ulp_msix > bp->ulp_num_msix_want) ulp_msix = bp->ulp_num_msix_want;
drivers/net/ethernet/broadcom/tg3.c +12 -1
@@ -12277,7 +12277,7 @@ static int tg3_get_link_ksettings(struct net_device *dev,ethtool_convert_legacy_u32_to_link_mode (cmd->link_modes.advertising, advertising); -if (netif_running (dev) && tp->link_up) { +if (netif_running (dev) &&netif_carrier_ok (dev)) { cmd->base.speed = tp->link_config.active_speed; cmd->base.duplex = tp->link_config.active_duplex; ethtool_convert_legacy_u32_to_link_mode(
@@ -17015,6 +17015,13 @@ static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)return err; } +static int tg3_is_default_mac_address (u8 *addr) +{ +static const u8 default_mac_address[ETH_ALEN ] = {0x00 ,0x10 ,0x18 ,0x00 ,0x00 ,0x00 }; + +return ether_addr_equal (default_mac_address, addr); +} +static int tg3_get_device_address (struct tg3 *tp,u8 *addr) {u32 hi, lo, mac_offset;
@@ -17086,6 +17093,10 @@ static int tg3_get_device_address(struct tg3 *tp, u8 *addr)if (!is_valid_ether_addr (addr))return -EINVAL ; + +if (tg3_is_default_mac_address (addr)) +return device_get_mac_address (&tp->pdev->dev, addr); +return 0 ; }
drivers/net/ethernet/cadence/macb_pci.c +6 -4
@@ -96,10 +96,10 @@ static int macb_probe(struct pci_dev *pdev, const struct pci_device_id *id)return 0 ; err_plat_dev_register: -clk_unregister (plat_data.hclk); +clk_unregister_fixed_rate (plat_data.hclk); err_hclk_register: -clk_unregister (plat_data.pclk); +clk_unregister_fixed_rate (plat_data.pclk); err_pclk_register:return err;
@@ -109,10 +109,12 @@ static void macb_remove(struct pci_dev *pdev) {struct platform_device *plat_dev =pci_get_drvdata (pdev);struct macb_platform_data *plat_data =dev_get_platdata (&plat_dev->dev); +struct clk *pclk = plat_data->pclk; +struct clk *hclk = plat_data->hclk; -clk_unregister (plat_data->pclk); -clk_unregister (plat_data->hclk);platform_device_unregister (plat_dev); +clk_unregister_fixed_rate (pclk); +clk_unregister_fixed_rate (hclk); }static const struct pci_device_id dev_id_table[] = {
drivers/net/ethernet/faraday/ftgmac100.c +24 -4
@@ -944,19 +944,19 @@ static int ftgmac100_alloc_rings(struct ftgmac100 *priv) priv->tx_skbs =kcalloc (MAX_TX_QUEUE_ENTRIES ,sizeof (void *),GFP_KERNEL );if (!priv->tx_skbs) -return -ENOMEM ; + goto err_free_rx_skbs;/* Allocate descriptors */ priv->rxdes =dma_alloc_coherent (priv->dev,MAX_RX_QUEUE_ENTRIES *sizeof (struct ftgmac100_rxdes ), &priv->rxdes_dma,GFP_KERNEL );if (!priv->rxdes) -return -ENOMEM ; + goto err_free_tx_skbs; priv->txdes =dma_alloc_coherent (priv->dev,MAX_TX_QUEUE_ENTRIES *sizeof (struct ftgmac100_txdes ), &priv->txdes_dma,GFP_KERNEL );if (!priv->txdes) -return -ENOMEM ; + goto err_free_rxdes;/* Allocate scratch packet buffer */ priv->rx_scratch = dma_alloc_coherent(priv->dev,
@@ -964,9 +964,29 @@ static int ftgmac100_alloc_rings(struct ftgmac100 *priv) &priv->rx_scratch_dma, GFP_KERNEL);if (!priv->rx_scratch) -return -ENOMEM ; + goto err_free_txdes;return 0 ; + +err_free_txdes: +dma_free_coherent (priv->dev, +MAX_TX_QUEUE_ENTRIES * +sizeof (struct ftgmac100_txdes ), + priv->txdes, priv->txdes_dma); + priv->txdes =NULL ; +err_free_rxdes: +dma_free_coherent (priv->dev, +MAX_RX_QUEUE_ENTRIES * +sizeof (struct ftgmac100_rxdes ), + priv->rxdes, priv->rxdes_dma); + priv->rxdes =NULL ; +err_free_tx_skbs: +kfree (priv->tx_skbs); + priv->tx_skbs =NULL ; +err_free_rx_skbs: +kfree (priv->rx_skbs); + priv->rx_skbs =NULL ; +return -ENOMEM ; }static void ftgmac100_init_rings (struct ftgmac100 *priv)
drivers/net/ethernet/freescale/enetc/enetc_ethtool.c +4 -0
@@ -731,6 +731,10 @@ static int enetc_set_rxfh(struct net_device *ndev,struct enetc_hw *hw = &priv->si->hw;int err =0 ; +if (rxfh->hfunc !=ETH_RSS_HASH_NO_CHANGE && + rxfh->hfunc !=ETH_RSS_HASH_TOP ) +return -EOPNOTSUPP ; +/* set hash key, if PF */ if (rxfh->key && hw->port)enetc_set_rss_key (hw, rxfh->key);
drivers/net/ethernet/freescale/fec_ptp.c +0 -3
@@ -546,9 +546,6 @@ static int fec_ptp_enable(struct ptp_clock_info *ptp,if (rq->perout.flags)return -EOPNOTSUPP ; -if (rq->perout.index != fep->pps_channel) -return -EOPNOTSUPP ; - period.tv_sec = rq->perout.period.sec; period.tv_nsec = rq->perout.period.nsec; period_ns =timespec64_to_ns (&period);
drivers/net/ethernet/intel/ice/ice_ethtool.c +9 -2
@@ -3331,7 +3331,7 @@ ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring, rx_rings =kcalloc (vsi->num_rxq,sizeof (*rx_rings),GFP_KERNEL );if (!rx_rings) { err = -ENOMEM ; - goto done; + goto free_xdp; }ice_for_each_rxq (vsi, i) {
@@ -3361,7 +3361,7 @@ ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring, }kfree (rx_rings); err = -ENOMEM ; - goto free_tx; + goto free_xdp; } }
@@ -3412,6 +3412,13 @@ ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring, } goto done; +free_xdp: +if (xdp_rings) { +ice_for_each_xdp_txq (vsi, i) +ice_free_tx_ring (&xdp_rings[i]); +kfree (xdp_rings); + } + free_tx:/* error cleanup if the Rx allocations failed after getting Tx */ if (tx_rings) {
drivers/net/ethernet/mediatek/airoha_eth.c +17 -1
@@ -1615,18 +1615,34 @@ static int airoha_qdma_init_rx_queue(struct airoha_queue *q,static void airoha_qdma_cleanup_rx_queue (struct airoha_queue *q) { -struct airoha_eth *eth = q->qdma->eth; +struct airoha_qdma *qdma = q->qdma; +struct airoha_eth *eth = qdma->eth; +int qid = q - &qdma->q_rx[0 ];while (q->queued) {struct airoha_queue_entry *e = &q->entry[q->tail]; +struct airoha_qdma_desc *desc = &q->desc[q->tail];struct page *page =virt_to_head_page (e->buf);dma_sync_single_for_cpu (eth->dev, e->dma_addr, e->dma_len,page_pool_get_dma_dir (q->page_pool));page_pool_put_full_page (q->page_pool, page, false); +/* Reset DMA descriptor */ +WRITE_ONCE (desc->ctrl,0 ); +WRITE_ONCE (desc->addr,0 ); +WRITE_ONCE (desc->data,0 ); +WRITE_ONCE (desc->msg0,0 ); +WRITE_ONCE (desc->msg1,0 ); +WRITE_ONCE (desc->msg2,0 ); +WRITE_ONCE (desc->msg3,0 ); + q->tail = (q->tail +1 ) % q->ndesc; q->queued--; } + + q->head = q->tail; +airoha_qdma_rmw (qdma,REG_RX_DMA_IDX (qid),RX_RING_DMA_IDX_MASK , +FIELD_PREP (RX_RING_DMA_IDX_MASK , q->tail)); }static int airoha_qdma_init_rx (struct airoha_qdma *qdma)
drivers/net/ethernet/mediatek/mtk_ppe_offload.c +20 -1
@@ -244,6 +244,25 @@ mtk_flow_set_output_device(struct mtk_eth *eth, struct mtk_foe_entry *foe,return 0 ; } +static bool +mtk_flow_is_valid_idev (const struct mtk_eth *eth,const struct net_device *idev) +{ +size_t i; + +if (!idev) +return false; + +for (i =0 ; i <ARRAY_SIZE (eth->netdev); i++) { +if (!eth->netdev[i]) +continue ; + +if (idev->netdev_ops == eth->netdev[i]->netdev_ops) +return true; + } + +return false; +} +static int mtk_flow_offload_replace (struct mtk_eth *eth,struct flow_cls_offload *f,int ppe_index)
@@ -270,7 +289,7 @@ mtk_flow_offload_replace(struct mtk_eth *eth, struct flow_cls_offload *f,flow_rule_match_meta (rule, &match);if (mtk_is_netsys_v2_or_greater (eth)) { idev =__dev_get_by_index (&init_net, match.key->ingress_ifindex); -if (idev && idev->netdev_ops == eth->netdev[0 ]->netdev_ops) { +if (mtk_flow_is_valid_idev (eth, idev)) {struct mtk_mac *mac =netdev_priv (idev);if (WARN_ON (mac->ppe_idx >= eth->soc->ppe_num))
drivers/net/ethernet/mellanox/mlx5/core/devlink.c +1 -3
@@ -53,9 +53,7 @@ mlx5_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,if (err)return err; - err =mlx5_fw_version_query (dev, &running_fw, &stored_fw); -if (err) -return err; +mlx5_fw_version_query (dev, &running_fw, &stored_fw); snprintf(version_str, sizeof(version_str), "%d.%d.%04d", mlx5_fw_ver_major(running_fw), mlx5_fw_ver_minor(running_fw),
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +2 -0
@@ -3575,6 +3575,8 @@ int esw_offloads_enable(struct mlx5_eswitch *esw)return 0 ; err_vports: +/* rollback to legacy, indicates don't unregister the uplink netdev */ + esw->dev->priv.flags |=MLX5_PRIV_FLAGS_SWITCH_LEGACY ;mlx5_esw_offloads_rep_unload (esw,MLX5_VPORT_UPLINK ); err_uplink:esw_offloads_steering_cleanup (esw);
drivers/net/ethernet/mellanox/mlx5/core/fw.c +34 -19
82 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/lag/debugfs.c +3 -0
@@ -163,8 +163,11 @@ DEFINE_SHOW_ATTRIBUTE(members);void mlx5_ldev_add_debugfs (struct mlx5_core_dev *dev) { +struct mlx5_lag *ldev =mlx5_lag_dev (dev);struct dentry *dbg; +if (!ldev) +return ; dbg =debugfs_create_dir ("lag" ,mlx5_debugfs_get_dev_root (dev)); dev->priv.dbg.lag_debugfs = dbg;
drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h +2 -2
@@ -373,8 +373,8 @@ int mlx5_port_max_linkspeed(struct mlx5_core_dev *mdev, u32 *speed);int mlx5_firmware_flash (struct mlx5_core_dev *dev,const struct firmware *fw,struct netlink_ext_ack *extack); -int mlx5_fw_version_query (struct mlx5_core_dev *dev, -u32 *running_ver,u32 *stored_ver); +void mlx5_fw_version_query (struct mlx5_core_dev *dev,u32 *running_ver, +u32 *stored_ver);#ifdef CONFIG_MLX5_CORE_EN int mlx5e_init (void );
drivers/net/ethernet/meta/fbnic/fbnic_txrx.c +3 -3
@@ -544,7 +544,7 @@ static void fbnic_fill_bdq(struct fbnic_napi_vector *nv, struct fbnic_ring *bdq)/* Force DMA writes to flush before writing to tail */ dma_wmb (); -writel (i, bdq->doorbell); +writel (i *FBNIC_BD_FRAG_COUNT , bdq->doorbell); } }
@@ -1783,7 +1783,7 @@ static void fbnic_enable_bdq(struct fbnic_ring *hpq, struct fbnic_ring *ppq) hpq->tail =0 ; hpq->head =0 ; - log_size =fls (hpq->size_mask); + log_size =fls (hpq->size_mask) +ilog2 (FBNIC_BD_FRAG_COUNT );/* Store descriptor ring address and size */ fbnic_ring_wr32 (hpq,FBNIC_QUEUE_BDQ_HPQ_BAL ,lower_32_bits (hpq->dma));
@@ -1795,7 +1795,7 @@ static void fbnic_enable_bdq(struct fbnic_ring *hpq, struct fbnic_ring *ppq)if (!ppq->size_mask) goto write_ctl; - log_size =fls (ppq->size_mask); + log_size =fls (ppq->size_mask) +ilog2 (FBNIC_BD_FRAG_COUNT );/* Add enabling of PPQ to BDQ control */ bdq_ctl |=FBNIC_QUEUE_BDQ_CTL_PPQ_ENABLE ;
drivers/net/ethernet/microsoft/mana/mana_en.c +4 -2
@@ -2823,6 +2823,7 @@ static int add_adev(struct gdma_dev *gd)struct auxiliary_device *adev;struct mana_adev *madev;int ret; +int id; madev =kzalloc (sizeof (*madev),GFP_KERNEL );if (!madev)
@@ -2832,7 +2833,8 @@ static int add_adev(struct gdma_dev *gd) ret =mana_adev_idx_alloc ();if (ret <0 ) goto idx_fail; - adev->id = ret; + id = ret; + adev->id = id; adev->name ="rdma" ; adev->dev.parent = gd->gdma_context->dev;
@@ -2856,7 +2858,7 @@ static int add_adev(struct gdma_dev *gd)auxiliary_device_uninit (adev); init_fail: -mana_adev_idx_free (adev->id); +mana_adev_idx_free (id); idx_fail:kfree (madev);
drivers/net/ethernet/xilinx/xilinx_axienet.h +2 -2
@@ -104,7 +104,7 @@#define XAXIDMA_BD_HAS_DRE_MASK 0xF00/* Whether has DRE mask */ #define XAXIDMA_BD_WORDLEN_MASK 0xFF/* Whether has DRE mask */ -#define XAXIDMA_BD_CTRL_LENGTH_MASK 0x007FFFFF/* Requested len */ +#define XAXIDMA_BD_CTRL_LENGTH_MASK GENMASK(25, 0)/* Requested len */ #define XAXIDMA_BD_CTRL_TXSOF_MASK 0x08000000/* First tx packet */ #define XAXIDMA_BD_CTRL_TXEOF_MASK 0x04000000/* Last tx packet */ #define XAXIDMA_BD_CTRL_ALL_MASK 0x0C000000/* All control bits */
@@ -130,7 +130,7 @@#define XAXIDMA_BD_CTRL_TXEOF_MASK 0x04000000/* Last tx packet */ #define XAXIDMA_BD_CTRL_ALL_MASK 0x0C000000/* All control bits */ -#define XAXIDMA_BD_STS_ACTUAL_LEN_MASK 0x007FFFFF/* Actual len */ +#define XAXIDMA_BD_STS_ACTUAL_LEN_MASK GENMASK(25, 0)/* Actual len */ #define XAXIDMA_BD_STS_COMPLETE_MASK 0x80000000/* Completed */ #define XAXIDMA_BD_STS_DEC_ERR_MASK 0x40000000/* Decode error */ #define XAXIDMA_BD_STS_SLV_ERR_MASK 0x20000000/* Slave error */
drivers/net/phy/sfp.c +6 -1
@@ -473,11 +473,16 @@ static void sfp_quirk_ubnt_uf_instant(const struct sfp_eeprom_id *id, {/* Ubiquiti U-Fiber Instant module claims that support all transceiver * types including 10G Ethernet which is not truth. So clear all claimed -* modes and set only one mode which module supports: 1000baseX_Full. +* modes and set only one mode which module supports: 1000baseX_Full, +* along with the Autoneg and pause bits. */ linkmode_zero (caps->link_modes);linkmode_set_bit (ETHTOOL_LINK_MODE_1000baseX_Full_BIT, caps->link_modes); +linkmode_set_bit (ETHTOOL_LINK_MODE_Autoneg_BIT, caps->link_modes); +linkmode_set_bit (ETHTOOL_LINK_MODE_Pause_BIT, caps->link_modes); +linkmode_set_bit (ETHTOOL_LINK_MODE_Asym_Pause_BIT, caps->link_modes); +phy_interface_zero (caps->interfaces);__set_bit (PHY_INTERFACE_MODE_1000BASEX , caps->interfaces); }
drivers/net/vxlan/vxlan_core.c +4 -2
@@ -1988,12 +1988,14 @@ static struct sk_buff *vxlan_na_create(struct sk_buff *request, ns_olen = request->len -skb_network_offset (request) -sizeof (struct ipv6hdr ) -sizeof (*ns);for (i =0 ; i < ns_olen-1 ; i += (ns->opt[i+1 ]<<3 )) { -if (!ns->opt[i +1 ]) { +if (!ns->opt[i +1 ] || i + (ns->opt[i +1 ] <<3 ) > ns_olen) {kfree_skb (reply);return NULL ; }if (ns->opt[i] ==ND_OPT_SOURCE_LL_ADDR ) { - daddr = ns->opt + i +sizeof (struct nd_opt_hdr ); +if ((ns->opt[i +1 ] <<3 ) >= +sizeof (struct nd_opt_hdr ) +ETH_ALEN ) + daddr = ns->opt + i +sizeof (struct nd_opt_hdr );break ; } }
drivers/net/wireless/ath/ath11k/dp_rx.c +7 -8
@@ -1,7 +1,7 @@// SPDX-License-Identifier: BSD-3-Clause-Clear /* * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. -* Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved. +* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. */ #include <linux/ieee80211.h>
@@ -1110,9 +1110,8 @@ int ath11k_dp_rx_ampdu_stop(struct ath11k *ar,struct ath11k_base *ab = ar->ab;struct ath11k_peer *peer;struct ath11k_sta *arsta =ath11k_sta_to_arsta (params->sta); +struct dp_rx_tid *rx_tid;int vdev_id = arsta->arvif->vdev_id; -dma_addr_t paddr; -bool active;int ret;spin_lock_bh (&ab->base_lock);
@@ -1124,15 +1123,14 @@ int ath11k_dp_rx_ampdu_stop(struct ath11k *ar,return -ENOENT ; } - paddr = peer->rx_tid[params->tid].paddr; - active = peer->rx_tid[params->tid].active; + rx_tid = &peer->rx_tid[params->tid]; -if (!active) { +if (!rx_tid->active) {spin_unlock_bh (&ab->base_lock);return 0 ; } - ret =ath11k_peer_rx_tid_reo_update (ar, peer, peer->rx_tid,1 ,0 , false); + ret =ath11k_peer_rx_tid_reo_update (ar, peer, rx_tid,1 ,0 , false);spin_unlock_bh (&ab->base_lock);if (ret) { ath11k_warn(ab, "failed to update reo for rx tid %d: %d\n",
@@ -1141,7 +1139,8 @@ int ath11k_dp_rx_ampdu_stop(struct ath11k *ar, } ret =ath11k_wmi_peer_rx_reorder_queue_setup (ar, vdev_id, - params->sta->addr, paddr, + params->sta->addr, + rx_tid->paddr, params->tid,1 ,1 );if (ret) ath11k_warn(ab, "failed to send wmi to delete rx tid %d\n",
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +1 -1
@@ -3195,7 +3195,7 @@ static void iwl_mvm_nd_match_info_handler(struct iwl_mvm *mvm,if (IS_ERR_OR_NULL (vif))return ; -if (len <sizeof (struct iwl_scan_offload_match_info )) { +if (len <sizeof (struct iwl_scan_offload_match_info ) + matches_len) {IWL_ERR (mvm,"Invalid scan match info notification\n" );return ; }
drivers/net/wireless/microchip/wilc1000/hif.c +1 -1
@@ -163,7 +163,7 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source,u32 index =0 ;u32 i, scan_timeout;u8 *buffer; -u8 valuesize =0 ; +u32 valuesize =0 ;u8 *search_ssid_vals =NULL ;const u8 ch_list_len = request->n_channels;struct host_if_drv *hif_drv = vif->hif_drv;
drivers/net/wireless/virtual/virt_wifi.c +0 -1
@@ -555,7 +555,6 @@ static int virt_wifi_newlink(struct net *src_net, struct net_device *dev,eth_hw_addr_inherit (dev, priv->lowerdev);netif_stacked_transfer_operstate (priv->lowerdev, dev); -SET_NETDEV_DEV (dev, &priv->lowerdev->dev); dev->ieee80211_ptr =kzalloc (sizeof (*dev->ieee80211_ptr),GFP_KERNEL );if (!dev->ieee80211_ptr) {
drivers/nfc/pn533/uart.c +3 -0
@@ -211,6 +211,9 @@ static size_t pn532_receive_buf(struct serdev_device *serdev,del_timer (&dev->cmd_timeout);for (i =0 ; i < count; i++) { +if (unlikely (!skb_tailroom (dev->recv_skb))) +skb_trim (dev->recv_skb,0 ); +skb_put_u8 (dev->recv_skb, *data++);if (!pn532_uart_rx_is_frame (dev->recv_skb))continue ;
drivers/nvmem/imx-ocotp-ele.c +1 -0
@@ -131,6 +131,7 @@ static int imx_ocotp_cell_pp(void *context, const char *id, int index,static void imx_ocotp_fixup_dt_cell_info (struct nvmem_device *nvmem,struct nvmem_cell_info *cell) { + cell->raw_len =round_up (cell->bytes,4 ); cell->read_post_process = imx_ocotp_cell_pp; }
drivers/nvmem/imx-ocotp.c +1 -0
@@ -589,6 +589,7 @@ MODULE_DEVICE_TABLE(of, imx_ocotp_dt_ids);static void imx_ocotp_fixup_dt_cell_info (struct nvmem_device *nvmem,struct nvmem_cell_info *cell) { + cell->raw_len =round_up (cell->bytes,4 ); cell->read_post_process = imx_ocotp_cell_pp; }
drivers/nvmem/zynqmp_nvmem.c +4 -4
@@ -66,7 +66,7 @@ static int zynqmp_efuse_access(void *context, unsigned int offset,dma_addr_t dma_buf;size_t words = bytes /WORD_INBYTES ;int ret; -int value; +unsigned int value;char *data;if (bytes %WORD_INBYTES !=0 ) {
@@ -80,7 +80,7 @@ static int zynqmp_efuse_access(void *context, unsigned int offset, }if (pufflag ==1 && flag ==EFUSE_WRITE ) { -memcpy (&value, val, bytes); +memcpy (&value, val,sizeof (value));if ((offset ==EFUSE_PUF_START_OFFSET || offset ==EFUSE_PUF_MID_OFFSET ) && value &P_USER_0_64_UPPER_MASK ) {
@@ -100,7 +100,7 @@ static int zynqmp_efuse_access(void *context, unsigned int offset,if (!efuse)return -ENOMEM ; - data =dma_alloc_coherent (dev,sizeof (bytes), + data =dma_alloc_coherent (dev, bytes, &dma_buf,GFP_KERNEL );if (!data) { ret = -ENOMEM ;
@@ -134,7 +134,7 @@ static int zynqmp_efuse_access(void *context, unsigned int offset,if (flag ==EFUSE_READ )memcpy (val, data, bytes); efuse_access_err: -dma_free_coherent (dev,sizeof (bytes), +dma_free_coherent (dev, bytes, data, dma_buf); efuse_data_fail: dma_free_coherent(dev, sizeof(struct xilinx_efuse),
drivers/spi/spi-cadence-quadspi.c +7 -6
@@ -1461,12 +1461,6 @@ static int cqspi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op)if (refcount_read (&cqspi->inflight_ops) ==0 )return -ENODEV ; - ret =pm_runtime_resume_and_get (dev); -if (ret) { -dev_err (&mem->spi->dev,"resume failed with %d\n" , ret); -return ret; - } -if (!refcount_read (&cqspi->refcount))return -EBUSY ;
@@ -1478,6 +1472,12 @@ static int cqspi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op)return -EBUSY ; } + ret =pm_runtime_resume_and_get (dev); +if (ret) { +dev_err (&mem->spi->dev,"resume failed with %d\n" , ret); + goto dec_inflight_refcount; + } + ret =cqspi_mem_process (mem, op);pm_runtime_mark_last_busy (dev);
@@ -1486,6 +1486,7 @@ static int cqspi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op)if (ret)dev_err (&mem->spi->dev,"operation failed with %d\n" , ret); +dec_inflight_refcount:if (refcount_read (&cqspi->inflight_ops) >1 )refcount_dec (&cqspi->inflight_ops);
drivers/spi/spi-geni-qcom.c +5 -4
@@ -952,10 +952,13 @@ static irqreturn_t geni_spi_isr(int irq, void *data)struct spi_controller *spi = data;struct spi_geni_master *mas =spi_controller_get_devdata (spi);struct geni_se *se = &mas->se; -u32 m_irq; +u32 m_irq, dma_tx_status, dma_rx_status; m_irq =readl (se->base +SE_GENI_M_IRQ_STATUS ); -if (!m_irq) + dma_tx_status =readl_relaxed (se->base +SE_DMA_TX_IRQ_STAT ); + dma_rx_status =readl_relaxed (se->base +SE_DMA_RX_IRQ_STAT ); + +if (!m_irq && !dma_tx_status && !dma_rx_status)return IRQ_NONE ; if (m_irq & (M_CMD_OVERRUN_EN | M_ILLEGAL_CMD_EN | M_CMD_FAILURE_EN |
@@ -1003,8 +1006,6 @@ static irqreturn_t geni_spi_isr(int irq, void *data) } }else if (mas->cur_xfer_mode ==GENI_SE_DMA ) {const struct spi_transfer *xfer = mas->cur_xfer; -u32 dma_tx_status =readl_relaxed (se->base +SE_DMA_TX_IRQ_STAT ); -u32 dma_rx_status =readl_relaxed (se->base +SE_DMA_RX_IRQ_STAT );if (dma_tx_status)writel (dma_tx_status, se->base +SE_DMA_TX_IRQ_CLR );
drivers/target/loopback/tcm_loop.c +46 -6
78 lines not on this page · raw message
drivers/thermal/thermal_core.c +1 -0
@@ -1543,6 +1543,7 @@ thermal_zone_device_register_with_trips(const char *type,device_del (&tz->device); release_device:put_device (&tz->device); +wait_for_completion (&tz->removal); remove_id:ida_free (&thermal_tz_ida, id); free_tzp:
drivers/thunderbolt/nhi.c +1 -1
@@ -1010,7 +1010,7 @@ static bool nhi_wake_supported(struct pci_dev *pdev)* If power rails are sustainable for wakeup from S4 this * property is set by the BIOS. */ -if (device_property_read_u8 (&pdev->dev,"WAKE_SUPPORTED" , &val)) +if (!device_property_read_u8 (&pdev->dev,"WAKE_SUPPORTED" , &val))return !!val;return true;
drivers/usb/cdns3/cdns3-gadget.c +4 -0
@@ -2589,6 +2589,9 @@ static int __cdns3_gadget_ep_queue(struct usb_ep *ep,struct cdns3_request *priv_req;int ret =0 ; +if (!ep->desc) +return -ESHUTDOWN ; + request->actual =0 ; request->status = -EINPROGRESS ; priv_req =to_cdns3_request (request);
@@ -3429,6 +3432,7 @@ static int __cdns3_gadget_init(struct cdns *cdns) ret =cdns3_gadget_start (cdns);if (ret) {pm_runtime_put_sync (cdns->dev); +cdns_drd_gadget_off (cdns);return ret; }
drivers/usb/class/cdc-acm.c +9 -0
@@ -1225,6 +1225,12 @@ static int acm_probe(struct usb_interface *intf,if (!data_interface || !control_interface)return -ENODEV ; goto skip_normal_probe; + }else if (quirks ==NO_UNION_12 ) { + data_interface =usb_ifnum_to_if (usb_dev,2 ); + control_interface =usb_ifnum_to_if (usb_dev,1 ); +if (!data_interface || !control_interface) +return -ENODEV ; + goto skip_normal_probe; }/* normal probing*/
@@ -1748,6 +1754,9 @@ static const struct usb_device_id acm_ids[] = { { USB_DEVICE(0x045b, 0x024D), /* Renesas R-Car E3 USB Download mode */ .driver_info =DISABLE_ECHO ,/* Don't echo banner */ }, + { USB_DEVICE(0x04b8, 0x0d12), /* EPSON HMD Com&Sens */ + .driver_info = NO_UNION_12, /* union descriptor is garbage */ + }, { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; [email protected] */ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ },
drivers/usb/class/cdc-acm.h +1 -0
@@ -114,3 +114,4 @@ struct acm {#define SEND_ZERO_PACKET BIT(6)#define DISABLE_ECHO BIT(7)#define MISSING_CAP_BRK BIT(8) +#define NO_UNION_12 BIT(9)
drivers/usb/class/usbtmc.c +3 -0
@@ -254,6 +254,9 @@ static int usbtmc_release(struct inode *inode, struct file *file)list_del (&file_data->file_elem);spin_unlock_irq (&file_data->data->dev_lock); + +/* flush anchored URBs */ +usbtmc_draw_down (file_data);mutex_unlock (&file_data->data->io_mutex);kref_put (&file_data->data->kref, usbtmc_delete);
drivers/usb/common/ulpi.c +2 -3
@@ -331,10 +331,9 @@ struct ulpi *ulpi_register_interface(struct device *dev, ulpi->ops = ops; ret =ulpi_register (dev, ulpi); -if (ret) { -kfree (ulpi); +if (ret)return ERR_PTR (ret); - } +return ulpi; }
drivers/usb/core/phy.c +11 -1
@@ -114,7 +114,7 @@ EXPORT_SYMBOL_GPL(usb_phy_roothub_alloc);struct usb_phy_roothub *usb_phy_roothub_alloc_usb3_phy (struct device *dev) {struct usb_phy_roothub *phy_roothub; -int num_phys; +int num_phys, usb2_phy_index;if (!IS_ENABLED (CONFIG_GENERIC_PHY ))return NULL ;
@@ -124,6 +124,16 @@ struct usb_phy_roothub *usb_phy_roothub_alloc_usb3_phy(struct device *dev)if (num_phys <=0 )return NULL ; +/* +* If 'usb2-phy' is not present, usb_phy_roothub_alloc() added +* all PHYs to the primary HCD's phy_roothub already, so skip +* adding 'usb3-phy' here to avoid double use of that. +*/ + usb2_phy_index =of_property_match_string (dev->of_node,"phy-names" , +"usb2-phy" ); +if (usb2_phy_index <0 ) +return NULL ; + phy_roothub =devm_kzalloc (dev,sizeof (*phy_roothub),GFP_KERNEL );if (!phy_roothub)return ERR_PTR (-ENOMEM );
drivers/usb/core/quirks.c +3 -0
@@ -402,6 +402,7 @@ static const struct usb_device_id usb_quirk_list[] = {/* Silicon Motion Flash Drive */ { USB_DEVICE(0x090c, 0x1000), .driver_info = USB_QUIRK_DELAY_INIT }, + { USB_DEVICE(0x090c, 0x2000), .driver_info = USB_QUIRK_DELAY_INIT }, /* Sound Devices USBPre2 */ { USB_DEVICE(0x0926, 0x0202), .driver_info =
@@ -490,6 +491,8 @@ static const struct usb_device_id usb_quirk_list[] = {/* Razer - Razer Blade Keyboard */ { USB_DEVICE(0x1532, 0x0116), .driver_info = USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL }, + /* Razer - Razer Kiyo Pro Webcam */ + { USB_DEVICE(0x1532, 0x0e05), .driver_info = USB_QUIRK_NO_LPM }, /* Lenovo ThinkPad OneLink+ Dock twin hub controllers (VIA Labs VL812) */ { USB_DEVICE(0x17ef, 0x1018), .driver_info = USB_QUIRK_RESET_RESUME },
drivers/usb/dwc2/gadget.c +2 -0
@@ -4607,7 +4607,9 @@ static int dwc2_hsotg_udc_stop(struct usb_gadget *gadget)/* Exit clock gating when driver is stopped. */ if (hsotg->params.power_down ==DWC2_POWER_DOWN_PARAM_NONE && hsotg->bus_suspended && !hsotg->params.no_clock_gating) { +spin_lock_irqsave (&hsotg->lock, flags);dwc2_gadget_exit_clock_gating (hsotg,0 ); +spin_unlock_irqrestore (&hsotg->lock, flags); }/* all endpoints should be shutdown */
drivers/usb/gadget/function/f_ecm.c +24 -13
@@ -681,6 +681,7 @@ ecm_bind(struct usb_configuration *c, struct usb_function *f)struct usb_ep *ep;struct f_ecm_opts *ecm_opts; + struct net_device *net __free(detach_gadget) = NULL; struct usb_request *request __free(free_usb_request) = NULL;if (!can_support_ecm (cdev->gadget))
@@ -688,18 +689,18 @@ ecm_bind(struct usb_configuration *c, struct usb_function *f) ecm_opts = container_of(f->fi, struct f_ecm_opts, func_inst); -mutex_lock (&ecm_opts->lock); - -gether_set_gadget (ecm_opts->net, cdev->gadget); - -if (!ecm_opts->bound) { - status =gether_register_netdev (ecm_opts->net); - ecm_opts->bound = true; - } - -mutex_unlock (&ecm_opts->lock); -if (status) -return status; + scoped_guard(mutex, &ecm_opts->lock) +if (ecm_opts->bind_count ==0 && !ecm_opts->bound) { +if (!device_is_registered (&ecm_opts->net->dev)) { +gether_set_gadget (ecm_opts->net, cdev->gadget); + status =gether_register_netdev (ecm_opts->net); + }else + status =gether_attach_gadget (ecm_opts->net, cdev->gadget); + +if (status) +return status; + net = ecm_opts->net; + } ecm_string_defs[1 ].s = ecm->ethaddr;
@@ -790,6 +791,9 @@ ecm_bind(struct usb_configuration *c, struct usb_function *f) ecm->notify_req =no_free_ptr (request); + ecm_opts->bind_count++; +retain_and_null_ptr (net); +DBG (cdev,"CDC Ethernet: IN/%s OUT/%s NOTIFY/%s\n" , ecm->port.in_ep->name, ecm->port.out_ep->name, ecm->notify->name);
@@ -836,7 +840,7 @@ static void ecm_free_inst(struct usb_function_instance *f)struct f_ecm_opts *opts; opts = container_of(f, struct f_ecm_opts, func_inst); -if (opts->bound) +if (device_is_registered (&opts->net->dev))gether_cleanup (netdev_priv (opts->net));else free_netdev (opts->net);
@@ -906,9 +910,12 @@ static void ecm_free(struct usb_function *f)static void ecm_unbind (struct usb_configuration *c,struct usb_function *f) {struct f_ecm *ecm =func_to_ecm (f); +struct f_ecm_opts *ecm_opts;DBG (c->cdev,"ecm unbind\n" ); + ecm_opts = container_of(f->fi, struct f_ecm_opts, func_inst); +usb_free_all_descriptors (f);if (atomic_read (&ecm->notify_count)) {
@@ -918,6 +925,10 @@ static void ecm_unbind(struct usb_configuration *c, struct usb_function *f)kfree (ecm->notify_req->buf);usb_ep_free_request (ecm->notify, ecm->notify_req); + + ecm_opts->bind_count--; +if (ecm_opts->bind_count ==0 && !ecm_opts->bound) +gether_detach_gadget (ecm_opts->net); }static struct usb_function *ecm_alloc (struct usb_function_instance *fi)
drivers/usb/gadget/function/f_eem.c +31 -28
87 lines not on this page · raw message
drivers/usb/gadget/function/f_rndis.c +31 -20
51 lines not on this page · raw message
drivers/usb/gadget/function/f_subset.c +35 -28
63 lines not on this page · raw message
drivers/usb/gadget/function/f_uac1_legacy.c +37 -10
47 lines not on this page · raw message
drivers/usb/gadget/function/u_gether.h +15 -7
Lines of this file are not shown. View the raw message.
drivers/usb/gadget/udc/dummy_hcd.c +26 -16
42 lines not on this page · raw message
fs/smb/server/smb2pdu.c +89 -32
121 lines not on this page · raw message
fs/smb/server/smbacl.c +43 -0
43 lines not on this page · raw message
include/net/netfilter/nf_conntrack_expect.h +18 -2
Lines of this file are not shown. View the raw message.
io_uring/kbuf.c +141 -148
289 lines not on this page · raw message
io_uring/kbuf.h +43 -105
148 lines not on this page · raw message
io_uring/net.c +74 -75
149 lines not on this page · raw message
io_uring/rw.c +33 -25
58 lines not on this page · raw message
kernel/bpf/verifier.c +85 -2
87 lines not on this page · raw message
net/atm/lec.c +47 -25
72 lines not on this page · raw message
net/netfilter/nf_conntrack_netlink.c +29 -58
87 lines not on this page · raw message
net/netfilter/nf_flow_table_offload.c +130 -66
196 lines not on this page · raw message
tools/testing/selftests/bpf/prog_tests/reg_bounds.c +58 -4
62 lines not on this page · raw message
tools/testing/selftests/bpf/progs/verifier_bounds.c +157 -2
159 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.