Linux 6.15.8
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.15.8 kernel.
All users of the 6.15 kernel series must upgrade.
The updated 6.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.15.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
------------
Makefile | 2 arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi | 3 arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi | 1 arch/arm64/boot/dts/freescale/imx8mp-venice-gw71xx.dtsi | 2 arch/arm64/boot/dts/freescale/imx8mp-venice-gw72xx.dtsi | 2 arch/arm64/boot/dts/freescale/imx8mp-venice-gw73xx.dtsi | 2 arch/arm64/boot/dts/freescale/imx8mp-venice-gw74xx.dts | 2 arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts | 20 arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts | 12 arch/arm64/boot/dts/freescale/imx95.dtsi | 2 arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi | 23 arch/arm64/boot/dts/rockchip/rk3576-armsom-sige5.dts | 28 arch/arm64/boot/dts/rockchip/rk3588-coolpi-cm5.dtsi | 1 arch/arm64/boot/dts/rockchip/rk3588s-coolpi-4b.dts | 1 arch/riscv/kernel/traps.c | 10 arch/riscv/kernel/traps_misaligned.c | 2 arch/s390/net/bpf_jit_comp.c | 10 arch/x86/kvm/xen.c | 2 block/blk-sysfs.c | 1 drivers/block/loop.c | 5 drivers/bluetooth/bfusb.c | 2 drivers/bluetooth/bpa10x.c | 2 drivers/bluetooth/btbcm.c | 8 drivers/bluetooth/btintel.c | 30 drivers/bluetooth/btintel_pcie.c | 8 drivers/bluetooth/btmtksdio.c | 4 drivers/bluetooth/btmtkuart.c | 2 drivers/bluetooth/btnxpuart.c | 2 drivers/bluetooth/btqca.c | 2 drivers/bluetooth/btqcomsmd.c | 2 drivers/bluetooth/btrtl.c | 10 drivers/bluetooth/btsdio.c | 2 drivers/bluetooth/btusb.c | 148 +- drivers/bluetooth/hci_aml.c | 2 drivers/bluetooth/hci_bcm.c | 4 drivers/bluetooth/hci_bcm4377.c | 10 drivers/bluetooth/hci_intel.c | 2 drivers/bluetooth/hci_ldisc.c | 6 drivers/bluetooth/hci_ll.c | 4 drivers/bluetooth/hci_nokia.c | 2 drivers/bluetooth/hci_qca.c | 14 drivers/bluetooth/hci_serdev.c | 8 drivers/bluetooth/hci_vhci.c | 8 drivers/bluetooth/virtio_bt.c | 10 drivers/comedi/comedi_fops.c | 30 drivers/comedi/drivers.c | 17 drivers/comedi/drivers/aio_iiro_16.c | 3 drivers/comedi/drivers/comedi_test.c | 2 drivers/comedi/drivers/das16m1.c | 3 drivers/comedi/drivers/das6402.c | 3 drivers/comedi/drivers/pcl812.c | 3 drivers/cpuidle/cpuidle-psci.c | 23 drivers/dma/mediatek/mtk-cqdma.c | 4 drivers/dma/nbpfaxi.c | 11 drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 9 drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 1 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 11 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c | 3 drivers/gpu/drm/mediatek/mtk_crtc.c | 36 drivers/gpu/drm/mediatek/mtk_crtc.h | 1 drivers/gpu/drm/mediatek/mtk_ddp_comp.c | 1 drivers/gpu/drm/mediatek/mtk_ddp_comp.h | 9 drivers/gpu/drm/mediatek/mtk_disp_drv.h | 1 drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 7 drivers/gpu/drm/mediatek/mtk_plane.c | 12 drivers/gpu/drm/mediatek/mtk_plane.h | 3 drivers/gpu/drm/panfrost/panfrost_job.c | 2 drivers/gpu/drm/xe/xe_gt.c | 13 drivers/gpu/drm/xe/xe_gt_sriov_pf.c | 19 drivers/gpu/drm/xe/xe_gt_sriov_pf.h | 5 drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 27 drivers/gpu/drm/xe/xe_ring_ops.c | 22 drivers/hid/hid-core.c | 19 drivers/hwmon/corsair-cpro.c | 5 drivers/i2c/busses/i2c-omap.c | 7 drivers/i2c/busses/i2c-stm32.c | 8 drivers/i2c/busses/i2c-stm32f7.c | 24 drivers/iio/accel/fxls8962af-core.c | 2 drivers/iio/accel/st_accel_core.c | 10 drivers/iio/adc/ad7380.c | 5 drivers/iio/adc/adi-axi-adc.c | 6 drivers/iio/adc/axp20x_adc.c | 1 drivers/iio/adc/max1363.c | 43 drivers/iio/adc/stm32-adc-core.c | 7 drivers/iio/common/st_sensors/st_sensors_core.c | 36 drivers/iio/common/st_sensors/st_sensors_trigger.c | 20 drivers/iio/industrialio-backend.c | 5 drivers/input/joystick/xpad.c | 2 drivers/md/dm-bufio.c | 6 drivers/memstick/core/memstick.c | 2 drivers/mmc/host/bcm2835.c | 3 drivers/mmc/host/sdhci-pci-core.c | 3 drivers/mmc/host/sdhci_am654.c | 9 drivers/net/can/m_can/tcan4x5x-core.c | 61 - drivers/net/ethernet/airoha/airoha_npu.c | 3 drivers/net/ethernet/intel/ice/ice_debugfs.c | 2 drivers/net/ethernet/intel/ice/ice_lag.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 12 drivers/net/ethernet/mellanox/mlx5/core/main.c | 1 drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c | 8 drivers/net/ethernet/wangxun/libwx/wx_hw.c | 9 drivers/net/ethernet/wangxun/libwx/wx_lib.c | 20 drivers/net/ethernet/wangxun/libwx/wx_type.h | 2 drivers/net/ethernet/xilinx/xilinx_emaclite.c | 2 drivers/net/hyperv/netvsc_drv.c | 5 drivers/net/phy/phy_device.c | 6 drivers/net/usb/sierra_net.c | 4 drivers/net/virtio_net.c | 2 drivers/net/wireless/intel/iwlwifi/fw/api/nvm-reg.h | 5 drivers/net/wireless/intel/iwlwifi/fw/regulatory.c | 1 drivers/net/wireless/intel/iwlwifi/mld/regulatory.c | 4 drivers/nvme/host/core.c | 27 drivers/nvme/target/tcp.c | 4 drivers/nvmem/imx-ocotp-ele.c | 5 drivers/nvmem/imx-ocotp.c | 5 drivers/nvmem/layouts/u-boot-env.c | 6 drivers/phy/phy-core.c | 5 drivers/phy/tegra/xusb-tegra186.c | 75 - drivers/phy/tegra/xusb.h | 1 drivers/pmdomain/governor.c | 18 drivers/soc/aspeed/aspeed-lpc-snoop.c | 13 drivers/soundwire/amd_manager.c | 4 drivers/soundwire/qcom.c | 26 drivers/spi/spi.c | 14 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 95 + drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c | 1 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h | 2 drivers/thunderbolt/switch.c | 10 drivers/thunderbolt/tb.h | 2 drivers/thunderbolt/usb4.c | 12 drivers/tty/serial/pch_uart.c | 2 drivers/usb/core/hub.c | 36 drivers/usb/core/hub.h | 1 drivers/usb/dwc2/gadget.c | 38 drivers/usb/dwc3/dwc3-qcom.c | 8 drivers/usb/gadget/configfs.c | 4 drivers/usb/musb/musb_gadget.c | 2 drivers/usb/serial/ftdi_sio.c | 2 drivers/usb/serial/ftdi_sio_ids.h | 3 drivers/usb/serial/option.c | 5 fs/cachefiles/io.c | 2 fs/cachefiles/ondemand.c | 4 fs/efivarfs/super.c | 6 fs/isofs/inode.c | 9 fs/netfs/read_pgpriv2.c | 5 fs/notify/dnotify/dnotify.c | 8 fs/smb/client/cifs_debug.c | 23 fs/smb/client/file.c | 10 fs/smb/client/smb2inode.c | 3 fs/smb/client/smb2ops.c | 24 fs/smb/client/smbdirect.c | 544 ++++------ fs/smb/client/smbdirect.h | 64 - fs/smb/common/smbdirect/smbdirect.h | 37 fs/smb/common/smbdirect/smbdirect_pdu.h | 55 + fs/smb/common/smbdirect/smbdirect_socket.h | 43 fs/xfs/libxfs/xfs_group.c | 14 fs/xfs/xfs_extent_busy.h | 8 include/linux/phy/phy.h | 2 include/net/bluetooth/hci.h | 2 include/net/bluetooth/hci_core.h | 50 include/net/cfg80211.h | 2 include/net/netfilter/nf_conntrack.h | 15 include/trace/events/netfs.h | 30 include/trace/events/rxrpc.h | 6 io_uring/net.c | 12 io_uring/poll.c | 2 kernel/bpf/helpers.c | 11 kernel/cgroup/legacy_freezer.c | 8 kernel/freezer.c | 15 kernel/sched/ext.c | 12 kernel/sched/loadavg.c | 2 kernel/sched/sched.h | 2 kernel/trace/trace_events.c | 5 kernel/trace/trace_osnoise.c | 2 kernel/trace/trace_probe.c | 2 net/8021q/vlan.c | 42 net/8021q/vlan.h | 1 net/bluetooth/hci_core.c | 4 net/bluetooth/hci_debugfs.c | 8 net/bluetooth/hci_event.c | 19 net/bluetooth/hci_sync.c | 63 - net/bluetooth/l2cap_core.c | 26 net/bluetooth/l2cap_sock.c | 3 net/bluetooth/mgmt.c | 38 net/bluetooth/msft.c | 2 net/bluetooth/smp.c | 21 net/bluetooth/smp.h | 1 net/bridge/br_switchdev.c | 3 net/ipv4/tcp_offload.c | 1 net/ipv4/udp_offload.c | 1 net/ipv6/mcast.c | 2 net/ipv6/rpl_iptunnel.c | 8 net/mptcp/options.c | 3 net/mptcp/pm.c | 8 net/mptcp/protocol.c | 56 - net/mptcp/protocol.h | 29 net/mptcp/subflow.c | 30 net/netfilter/nf_conntrack_core.c | 26 net/packet/af_packet.c | 27 net/phonet/pep.c | 2 net/rxrpc/ar-internal.h | 4 net/rxrpc/call_accept.c | 14 net/rxrpc/call_object.c | 28 net/rxrpc/io_thread.c | 14 net/rxrpc/output.c | 22 net/rxrpc/peer_object.c | 6 net/rxrpc/recvmsg.c | 23 net/rxrpc/security.c | 8 net/sched/sch_htb.c | 4 net/sched/sch_qfq.c | 30 net/smc/af_smc.c | 14 net/smc/smc.h | 8 net/tls/tls_strp.c | 3 rust/Makefile | 1 rust/kernel/firmware.rs | 2 rust/kernel/init.rs | 8 rust/kernel/kunit.rs | 2 rust/kernel/lib.rs | 2 rust/macros/module.rs | 10 scripts/Makefile.build | 2 sound/core/compress_offload.c | 48 sound/pci/hda/patch_realtek.c | 2 tools/hv/hv_fcopy_uio_daemon.c | 91 + tools/lib/bpf/libbpf.c | 20 tools/objtool/check.c | 1 tools/testing/selftests/net/udpgro.sh | 8 tools/testing/selftests/sched_ext/exit.c | 8 227 files changed, 2113 insertions(+), 1236 deletions(-)
Al Viro (1):
fix a leak in fcntl_dirnotify()
Alessandro Gasbarroni (1):
Bluetooth: hci_sync: fix connectable extended advertising when using static random address
Alexey Charkov (1):
arm64: dts: rockchip: list all CPU supplies on ArmSoM Sige5
Alok Tiwari (3):
thunderbolt: Fix bit masking in tb_dp_port_set_hops()
net: emaclite: Fix missing pointer increment in aligned_read()
net: airoha: fix potential use-after-free in airoha_npu_get()
Amit Pundir (1):
soundwire: Revert "soundwire: qcom: Add set_channel_map api support"
Andrea Righi (1):
selftests/sched_ext: Fix exit selftest hang on UP
Andreas Schwab (1):
riscv: traps_misaligned: properly sign extend value in misaligned load handler
Andrew Jeffery (2):
soc: aspeed: lpc-snoop: Cleanup resources in stack-order
soc: aspeed: lpc-snoop: Don't disable channels that aren't enabled
Andrii Nakryiko (1):
libbpf: Fix handling of BPF arena relocations
Andy Yan (2):
arm64: dts: rockchip: Add cd-gpios for sdcard detect on Cool Pi CM5
arm64: dts: rockchip: Add cd-gpios for sdcard detect on Cool Pi 4B
Arnd Bergmann (1):
ALSA: compress_offload: tighten ioctl command number checks
Aruna Ramakrishna (1):
sched: Change nr_uninterruptible type to unsigned long
Balasubramani Vivekanandan (1):
drm/xe/mocs: Initialize MOCS index early
Benjamin Tissoires (3):
HID: core: ensure the allocated report buffer can contain the reserved report ID
HID: core: ensure __hid_request reserves the report ID as the first byte
HID: core: do not bypass hid_hw_raw_request
Breno Leitao (2):
efivarfs: Fix memory leak of efivarfs_fs_info in fs_context error paths sched/ext: Prevent update_locked_rq() calls with NULL rq
Brett Werling (1):
can: tcan4x5x: fix reset gpio usage during probe
Chen Ni (1):
iio: adc: stm32-adc: Fix race in installing chained IRQ handler
Chen Ridong (2):
Revert "cgroup_freezer: cgroup_freezing: Check if not frozen" sched,freezer: Remove unnecessary warning in __thaw_task
Chen-Yu Tsai (1):
iio: adc: axp20x_adc: Add missing sentinel to AXP717 ADC channel maps
Cheng Ming Lin (1):
spi: Add check for 8-bit transfer with 8 IO mode support
Christian Eggers (3):
Bluetooth: hci_core: fix typos in macros
Bluetooth: hci_core: add missing braces when using macro parameters
Bluetooth: hci_dev: replace 'quirks' integer by 'quirk_flags' bitmap
Christoph Hellwig (2):
xfs: don't allocate the xfs_extent_busy structure for zoned RTGs
nvme: revert the cross-controller atomic write size validation
Christoph Paasch (1):
net/mlx5: Correctly set gso_size when LRO is used
Christophe JAILLET (2):
i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe()
i2c: omap: Fix an error handling path in omap_i2c_probe()
Clayton King (1):
drm/amd/display: Free memory allocation
Clément Le Goffic (2):
i2c: stm32: fix the device used for the DMA map
i2c: stm32f7: unmap DMA mapped buffer
Dan Carpenter (1):
dmaengine: nbpfaxi: Fix memory corruption in probe()
Daniel Lezcano (1):
cpuidle: psci: Fix cpuhotplug routine with PREEMPT_RT=y
Dave Ertman (1):
ice: add NULL check in eswitch lag check
David Howells (9):
netfs: Fix copy-to-cache so that it performs collection with ceph+fscache
netfs: Fix race between cache write completion and ALL_QUEUED being set
rxrpc: Fix irq-disabled in local_bh_enable()
rxrpc: Fix recv-recv race of completed call
rxrpc: Fix notification vs call-release vs recvmsg
rxrpc: Fix transmission of an abort in response to an abort
rxrpc: Fix to use conn aborts for conn-wide failures
cifs: Fix the smbd_response slab to allow usercopy
cifs: Fix reading into an ITER_FOLIOQ from the smbdirect code
David Lechner (2):
iio: adc: ad7380: fix adi,gain-milli property parsing
iio: adc: adi-axi-adc: fix ad7606_bus_reg_read()
Dmitry Baryshkov (1):
phy: use per-PHY lockdep keys
Dong Chenchen (1):
net: vlan: fix VLAN 0 refcount imbalance of toggling filtering during runtime
Drew Hamilton (1):
usb: musb: fix gadget state on disconnect
Edip Hazuri (1):
ALSA: hda/realtek - Fix mute LED for HP Victus 16-r0xxx
Edson Juliano Drosdeck (1):
mmc: sdhci-pci: Quirk for broken command queuing on Intel GLK-based Positivo models
Eeli Haapalainen (1):
drm/amdgpu/gfx8: reset compute ring wptr on the GPU on resume
Fabio Estevam (2):
iio: adc: max1363: Fix MAX1363_4X_CHANS/MAX1363_8X_CHANS[]
iio: adc: max1363: Reorder mode_list[] entriesFabio Porcedda (1):
USB: serial: option: add Telit Cinterion FE910C04 (ECM) composition
Felix Fietkau (1):
net: fix segmentation after TCP/UDP fraglist GRO
Florian Westphal (1):
netfilter: nf_conntrack: fix crash due to removal of uninitialised entry
Francesco Dolcini (1):
arm64: dts: freescale: imx8mm-verdin: Keep LDO5 always on
Greg Kroah-Hartman (1):
Linux 6.15.8
Haotien Hsu (1):
phy: tegra: xusb: Disable periodic tracking on Tegra234
Ian Abbott (9):
comedi: pcl812: Fix bit shift out of bounds
comedi: aio_iiro_16: Fix bit shift out of bounds
comedi: das16m1: Fix bit shift out of bounds
comedi: das6402: Fix bit shift out of bounds
comedi: comedi_test: Fix possible deletion of uninitialized timers
comedi: Fail COMEDI_INSNLIST ioctl if n_insns is too large
comedi: Fix some signed shift left operations
comedi: Fix use of uninitialized data in insn_rw_emulate_bits()
comedi: Fix initialization of data for instructions that write to subdevice
Icenowy Zheng (1):
drm/mediatek: only announce AFBC if really supported
Ilya Leoshkevich (1):
s390/bpf: Fix bpf_arch_text_poke() with new_addr == NULL again
Jakob Unterwurzacher (1):
arm64: dts: rockchip: use cs-gpios for spi1 on ringneck
Jakub Kicinski (1):
tls: always refresh the queue when reading sock
Jan Kara (1):
isofs: Verify inode mode when loading from disk
Janne Grunau (1):
rust: init: Fix generics in *_init! macros
Jason-JH Lin (1):
drm/mediatek: Add wait_event_timeout when disabling plane
Jiawen Wu (4):
net: libwx: remove duplicate page_pool_put_full_page()
net: libwx: fix the using of Rx buffer DMA
net: libwx: properly reset Rx ring descriptor
net: libwx: fix multicast packets received count
Johannes Berg (1):
wifi: cfg80211: remove scan request n_channels counted_by
John Garry (1):
nvme: fix endianness of command word prints in nvme_log_err_passthru()
Joseph Huang (1):
net: bridge: Do not offload IGMP/MLD messages
Judith Mendez (1):
mmc: sdhci_am654: Workaround for Errata i2312
Krishna Kurapati (1):
usb: dwc3: qcom: Don't leave BCR asserted
Kuniyuki Iwashima (3):
rpl: Fix use-after-free in rpl_do_srh_inline().
smc: Fix various oops due to inet_sock type confusion.
Bluetooth: Fix null-ptr-deref in l2cap_sock_resume_cb()
Li Tian (1):
hv_netvsc: Set VF priv_flags to IFF_NO_ADDRCONF before open to prevent IPv6 addrconf
Lijo Lazar (1):
drm/amdgpu: Increase reset counter only on success
Luiz Augusto von Dentz (4):
Bluetooth: btintel: Check if controller is ISO capable on btintel_classify_pkt_type
Bluetooth: SMP: If an unallowed command is received consider it a failure
Bluetooth: SMP: Fix using HCI_ERROR_REMOTE_USER_TERM on timeout
Bluetooth: L2CAP: Fix attempting to adjust outgoing MTU
Manuel Andreas (1):
KVM: x86/xen: Fix cleanup logic in emulation of Xen schedop poll hypercalls
Maor Gottlieb (1):
net/mlx5: Update the list of the PCI supported devices
Mario Limonciello (1):
thunderbolt: Fix wake on connect at runtime
Marius Zachmann (1):
hwmon: (corsair-cpro) Validate the size of the received input buffer
Markus Blöchl (1):
net: stmmac: intel: populate entire system_counterval_t in get_time_fn() callback
Markus Burri (1):
iio: backend: fix out-of-bound write
Mathias Nyman (4):
usb: hub: fix detection of high tier USB3 devices behind suspended hubs
usb: hub: Fix flushing and scheduling of delayed work that tunes runtime pm
usb: hub: Fix flushing of delayed work used for post resume purposes
usb: hub: Don't try to recover devices lost during warm reset.
Matthew Brost (1):
drm/xe: Move page fault init after topology init
Maud Spierings (1):
iio: common: st_sensors: Fix use of uninitialize device structs
Maulik Shah (1):
pmdomain: governor: Consider CPU latency tolerance from pm_domain_cpu_gov
Maurizio Lombardi (1):
nvmet-tcp: fix callback lock for TLS handshake
Melissa Wen (1):
drm/amd/display: Disable CRTC degamma LUT for DCN401
Meng Li (1):
arm64: dts: add big-endian property back into watchdog node
Michael C. Pratt (1):
nvmem: layouts: u-boot-env: remove crc32 endianness conversion
Michal Swiatkowski (1):
ice: check correct pointer in fwlog debugfs
Michal Wajdeczko (2):
drm/xe/pf: Prepare to stop SR-IOV support prior GT reset drm/xe/pf: Resend PF provisioning after GT reset
Miguel Ojeda (2):
objtool/rust: add one more noreturn Rust function for Rust 1.89.0
rust: use #[used(compiler)] to fix build and modpost with Rust >= 1.89.0
Minas Harutyunyan (1):
usb: dwc2: gadget: Fix enter to hibernation for UTMI+ PHY
Ming Lei (2):
block: fix kobject leak in blk_unregister_queue
loop: use kiocb helpers to fix lockdep warning
Nam Cao (1):
riscv: Enable interrupt during exception handling
Naman Jain (1):
tools/hv: fcopy: Fix irregularities with size of ring buffer
Nathan Chancellor (3):
tracing/probes: Avoid using params uninitialized in parse_btf_arg() phonet/pep: Move call to pn_skb_get_dst_sockaddr() earlier in pep_sock_accept()
memstick: core: Zero initialize id_reg in h_memstick_read_dev_id()
Nilton Perim Neto (1):
Input: xpad - set correct controller type for Acer NGR200
Oliver Neukum (1):
usb: net: sierra: check for no status endpoint
Pagadala Yesu Anjaneyulu (1):
wifi: iwlwifi: mask reserved bits in chan_state_active_bitmap
Paolo Abeni (4):
mptcp: make fallback action and fallback decision atomic
mptcp: plug races between subflow fail and subflow creation
mptcp: reset fallback status gracefully at disconnect() time
selftests: net: increase inter-packet timeout in udpgro.sh
Paul Chaignon (1):
bpf: Reject %p% format string in bprintf-like helpers
Pavel Begunkov (1):
io_uring/poll: fix POLLERR handling
Philipp Stanner (1):
drm/panfrost: Fix scheduler workqueue bug
Qiu-ji Chen (1):
dmaengine: mediatek: Fix a flag reuse error in mtk_cqdma_tx_status()
Richard Zhu (1):
arm64: dts: imx95: Correct the DMA interrupter number of pcie0_ep
Ryan Mann (NDI) (1):
USB: serial: ftdi_sio: add support for NDI EMGUIDE GEMINI
Sean Anderson (1):
net: phy: Don't register LEDs for genphy
Sean Nyekjaer (1):
iio: accel: fxls8962af: Fix use after free in fxls8962af_fifo_flush
Sheng Yong (1):
dm-bufio: fix sched in atomic context
Slark Xiao (1):
USB: serial: option: add Foxconn T99W640
Stefan Metzmacher (8):
smb: smbdirect: add smbdirect_pdu.h with protocol definitions
smb: client: make use of common smbdirect_pdu.h
smb: smbdirect: add smbdirect.h with public structures
smb: smbdirect: add smbdirect_socket.h
smb: client: make use of common smbdirect_socket
smb: smbdirect: introduce smbdirect_socket_parameters
smb: client: make use of common smbdirect_socket_parameters
smb: client: let smbd_post_send_iter() respect the peers max_send_size and transmit all data
Stefan Wahren (2):
Revert "staging: vchiq_arm: Improve initial VCHIQ connect" Revert "staging: vchiq_arm: Create keep-alive thread during probe"
Steffen Bätz (1):
nvmem: imx-ocotp: fix MAC address byte length
Steve French (1):
Fix SMB311 posix special file creation to servers which do not advertise reparse support
Steven Rostedt (1):
tracing: Add down_write(trace_event_sem) when adding trace event
Takashi Iwai (1):
ALSA: hda/realtek: Add quirk for ASUS ROG Strix G712LWS
Tejas Upadhyay (1):
drm/xe: Dont skip TLB invalidations on VF
Thomas Fourier (2):
pch_uart: Fix dma_sync_sg_for_device() nents value
mmc: bcm2835: Fix dma_unmap_sg() nents value
Tim Harvey (4):
arm64: dts: imx8mp-venice-gw74xx: fix TPM SPI frequency
arm64: dts: imx8mp-venice-gw71xx: fix TPM SPI frequency
arm64: dts: imx8mp-venice-gw72xx: fix TPM SPI frequency
arm64: dts: imx8mp-venice-gw73xx: fix TPM SPI frequency
Tomas Glozar (1):
tracing/osnoise: Fix crash in timerlat_dump_stack()
Vijendar Mukunda (2):
soundwire: amd: fix for handling slave alerts after link is down
soundwire: amd: fix for clearing command status register
Wang Zhaolong (2):
smb: client: fix use-after-free in crypt_message when using async crypto
smb: client: fix use-after-free in cifs_oplock_break
Wayne Chang (2):
phy: tegra: xusb: Fix unbalanced regulator disable in UTMI PHY mode
phy: tegra: xusb: Decouple CYA_TRK_CODE_UPDATE_ON_IDLE from trk_hw_mode
Wei Fang (2):
arm64: dts: imx95-19x19-evk: fix the overshoot issue of NETC
arm64: dts: imx95-15x15-evk: fix the overshoot issue of NETC
William Liu (1):
net/sched: Return NULL when htb_lookup_leaf encounters an empty rbtree
Xiang Mei (1):
net/sched: sch_qfq: Fix race condition on qfq_aggregate
Xinyu Liu (1):
usb: gadget: configfs: Fix OOB read on empty string write
Yu Kuai (1):
nvme: fix misaccounting of nvme-mpath inflight I/O
Yue Haibing (1):
ipv6: mcast: Delay put pmc->idev in mld_del_delrec()
Yun Lu (2):
af_packet: fix the SO_SNDTIMEO constraint not effective on tpacked_snd()
af_packet: fix soft lockup issue caused by tpacket_snd()
Zheng Qixing (1):
nvme: fix inconsistent RCU list manipulation in nvme_ns_add_to_ctrl_list()
Zigit Zo (1):
virtio-net: fix recursived rtnl_lock() during probe()
Zijun Hu (1):
Bluetooth: btusb: QCA: Fix downloading wrong NVM for WCN6855 GF variant without board ID
Zizhi Wo (1):
cachefiles: Fix the incorrect return value in __cachefiles_write()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 15 -SUBLEVEL = 7 +SUBLEVEL = 8 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi +2 -1
@@ -687,11 +687,12 @@ lpuart5: serial@29a0000 { }; wdog0: watchdog@2ad0000 { - compatible = "fsl,imx21-wdt"; + compatible = "fsl,ls1046a-wdt", "fsl,imx21-wdt"; reg = <0x0 0x2ad0000 0x0 0x10000>; interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL QORIQ_CLK_PLL_DIV(2)>; + big-endian; }; edma0: dma-controller@2c00000 {
arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi +1 -0
@@ -464,6 +464,7 @@ reg_vdd_phy: LDO4 { }; reg_nvcc_sd: LDO5 { + regulator-always-on; regulator-max-microvolt = <3300000>; regulator-min-microvolt = <1800000>; regulator-name = "On-module +V3.3_1.8_SD (LDO5)";
arch/arm64/boot/dts/freescale/imx8mp-venice-gw71xx.dtsi +1 -1
@@ -70,7 +70,7 @@ &ecspi2 { tpm@1 { compatible = "atmel,attpm20p", "tcg,tpm_tis-spi"; reg = <0x1>; - spi-max-frequency = <36000000>; + spi-max-frequency = <25000000>; }; };
arch/arm64/boot/dts/freescale/imx8mp-venice-gw72xx.dtsi +1 -1
@@ -110,7 +110,7 @@ &ecspi2 { tpm@1 { compatible = "atmel,attpm20p", "tcg,tpm_tis-spi"; reg = <0x1>; - spi-max-frequency = <36000000>; + spi-max-frequency = <25000000>; }; };
arch/arm64/boot/dts/freescale/imx8mp-venice-gw73xx.dtsi +1 -1
@@ -122,7 +122,7 @@ &ecspi2 { tpm@1 { compatible = "atmel,attpm20p", "tcg,tpm_tis-spi"; reg = <0x1>; - spi-max-frequency = <36000000>; + spi-max-frequency = <25000000>; }; };
arch/arm64/boot/dts/freescale/imx8mp-venice-gw74xx.dts +1 -1
@@ -201,7 +201,7 @@ &ecspi1 { tpm@0 { compatible = "atmel,attpm20p", "tcg,tpm_tis-spi"; reg = <0x0>; - spi-max-frequency = <36000000>; + spi-max-frequency = <25000000>; }; };
arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts +10 -10
@@ -558,17 +558,17 @@ &sai3 { &scmi_iomuxc { pinctrl_emdio: emdiogrp { fsl,pins = < - IMX95_PAD_ENET2_MDC__NETCMIX_TOP_NETC_MDC 0x57e - IMX95_PAD_ENET2_MDIO__NETCMIX_TOP_NETC_MDIO 0x97e + IMX95_PAD_ENET2_MDC__NETCMIX_TOP_NETC_MDC 0x50e + IMX95_PAD_ENET2_MDIO__NETCMIX_TOP_NETC_MDIO 0x90e >; }; pinctrl_enetc0: enetc0grp { fsl,pins = < - IMX95_PAD_ENET1_TD3__NETCMIX_TOP_ETH0_RGMII_TD3 0x57e - IMX95_PAD_ENET1_TD2__NETCMIX_TOP_ETH0_RGMII_TD2 0x57e - IMX95_PAD_ENET1_TD1__NETCMIX_TOP_ETH0_RGMII_TD1 0x57e - IMX95_PAD_ENET1_TD0__NETCMIX_TOP_ETH0_RGMII_TD0 0x57e + IMX95_PAD_ENET1_TD3__NETCMIX_TOP_ETH0_RGMII_TD3 0x50e + IMX95_PAD_ENET1_TD2__NETCMIX_TOP_ETH0_RGMII_TD2 0x50e + IMX95_PAD_ENET1_TD1__NETCMIX_TOP_ETH0_RGMII_TD1 0x50e + IMX95_PAD_ENET1_TD0__NETCMIX_TOP_ETH0_RGMII_TD0 0x50e IMX95_PAD_ENET1_TX_CTL__NETCMIX_TOP_ETH0_RGMII_TX_CTL 0x57e IMX95_PAD_ENET1_TXC__NETCMIX_TOP_ETH0_RGMII_TX_CLK 0x58e IMX95_PAD_ENET1_RX_CTL__NETCMIX_TOP_ETH0_RGMII_RX_CTL 0x57e
@@ -582,10 +582,10 @@ IMX95_PAD_ENET1_RD3__NETCMIX_TOP_ETH0_RGMII_RD3 0x57e pinctrl_enetc1: enetc1grp { fsl,pins = < - IMX95_PAD_ENET2_TD3__NETCMIX_TOP_ETH1_RGMII_TD3 0x57e - IMX95_PAD_ENET2_TD2__NETCMIX_TOP_ETH1_RGMII_TD2 0x57e - IMX95_PAD_ENET2_TD1__NETCMIX_TOP_ETH1_RGMII_TD1 0x57e - IMX95_PAD_ENET2_TD0__NETCMIX_TOP_ETH1_RGMII_TD0 0x57e + IMX95_PAD_ENET2_TD3__NETCMIX_TOP_ETH1_RGMII_TD3 0x50e + IMX95_PAD_ENET2_TD2__NETCMIX_TOP_ETH1_RGMII_TD2 0x50e + IMX95_PAD_ENET2_TD1__NETCMIX_TOP_ETH1_RGMII_TD1 0x50e + IMX95_PAD_ENET2_TD0__NETCMIX_TOP_ETH1_RGMII_TD0 0x50e IMX95_PAD_ENET2_TX_CTL__NETCMIX_TOP_ETH1_RGMII_TX_CTL 0x57e IMX95_PAD_ENET2_TXC__NETCMIX_TOP_ETH1_RGMII_TX_CLK 0x58e IMX95_PAD_ENET2_RX_CTL__NETCMIX_TOP_ETH1_RGMII_RX_CTL 0x57e
arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts +6 -6
@@ -536,17 +536,17 @@ &wdog3 { &scmi_iomuxc { pinctrl_emdio: emdiogrp{ fsl,pins = < - IMX95_PAD_ENET1_MDC__NETCMIX_TOP_NETC_MDC 0x57e - IMX95_PAD_ENET1_MDIO__NETCMIX_TOP_NETC_MDIO 0x97e + IMX95_PAD_ENET1_MDC__NETCMIX_TOP_NETC_MDC 0x50e + IMX95_PAD_ENET1_MDIO__NETCMIX_TOP_NETC_MDIO 0x90e >; }; pinctrl_enetc0: enetc0grp { fsl,pins = < - IMX95_PAD_ENET1_TD3__NETCMIX_TOP_ETH0_RGMII_TD3 0x57e - IMX95_PAD_ENET1_TD2__NETCMIX_TOP_ETH0_RGMII_TD2 0x57e - IMX95_PAD_ENET1_TD1__NETCMIX_TOP_ETH0_RGMII_TD1 0x57e - IMX95_PAD_ENET1_TD0__NETCMIX_TOP_ETH0_RGMII_TD0 0x57e + IMX95_PAD_ENET1_TD3__NETCMIX_TOP_ETH0_RGMII_TD3 0x50e + IMX95_PAD_ENET1_TD2__NETCMIX_TOP_ETH0_RGMII_TD2 0x50e + IMX95_PAD_ENET1_TD1__NETCMIX_TOP_ETH0_RGMII_TD1 0x50e + IMX95_PAD_ENET1_TD0__NETCMIX_TOP_ETH0_RGMII_TD0 0x50e IMX95_PAD_ENET1_TX_CTL__NETCMIX_TOP_ETH0_RGMII_TX_CTL 0x57e IMX95_PAD_ENET1_TXC__NETCMIX_TOP_ETH0_RGMII_TX_CLK 0x58e IMX95_PAD_ENET1_RX_CTL__NETCMIX_TOP_ETH0_RGMII_RX_CTL 0x57e
arch/arm64/boot/dts/freescale/imx95.dtsi +1 -1
@@ -1678,7 +1678,7 @@ pcie0_ep: pcie-ep@4c300000 { <0x9 0 1 0>; reg-names = "dbi","atu", "dbi2", "app", "dma", "addr_space"; num-lanes = <1>; - interrupts = <GIC_SPI 317 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 311 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "dma"; clocks = <&scmi_clk IMX95_CLK_HSIO>, <&scmi_clk IMX95_CLK_HSIOPLL>,
arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi +23 -0
@@ -363,6 +363,18 @@ pmic_int: pmic-int { <0 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>; }; }; + + spi1 { + spi1_csn0_gpio_pin: spi1-csn0-gpio-pin { + rockchip,pins = + <3 RK_PB1 RK_FUNC_GPIO &pcfg_pull_up_4ma>; + }; + + spi1_csn1_gpio_pin: spi1-csn1-gpio-pin { + rockchip,pins = + <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up_4ma>; + }; + }; }; &pmu_io_domains {
@@ -380,6 +392,17 @@ &sdmmc { vqmmc-supply = <&vccio_sd>; }; +&spi1 { + /* + * Hardware CS has a very slow rise time of about 6us, + * causing transmission errors. + * With cs-gpios we have a rise time of about 20ns. + */ + cs-gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>, <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; + pinctrl-names = "default"; + pinctrl-0 = <&spi1_clk &spi1_csn0_gpio_pin &spi1_csn1_gpio_pin &spi1_miso &spi1_mosi>; +}; + &tsadc { status = "okay"; };
arch/arm64/boot/dts/rockchip/rk3576-armsom-sige5.dts +28 -0
@@ -177,10 +177,38 @@ vcc_3v3_ufs_s0: regulator-vcc-ufs-s0 { }; }; +&cpu_b0 { + cpu-supply = <&vdd_cpu_big_s0>; +}; + +&cpu_b1 { + cpu-supply = <&vdd_cpu_big_s0>; +}; + +&cpu_b2 { + cpu-supply = <&vdd_cpu_big_s0>; +}; + +&cpu_b3 { + cpu-supply = <&vdd_cpu_big_s0>; +}; + &cpu_l0 { cpu-supply = <&vdd_cpu_lit_s0>; }; +&cpu_l1 { + cpu-supply = <&vdd_cpu_lit_s0>; +}; + +&cpu_l2 { + cpu-supply = <&vdd_cpu_lit_s0>; +}; + +&cpu_l3 { + cpu-supply = <&vdd_cpu_lit_s0>; +}; + &gmac0 { phy-mode = "rgmii-id"; clock_in_out = "output";
arch/arm64/boot/dts/rockchip/rk3588-coolpi-cm5.dtsi +1 -0
@@ -321,6 +321,7 @@ &sdmmc { bus-width = <4>; cap-mmc-highspeed; cap-sd-highspeed; + cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>; disable-wp; max-frequency = <150000000>; no-sdio;
arch/arm64/boot/dts/rockchip/rk3588s-coolpi-4b.dts +1 -0
@@ -474,6 +474,7 @@ &sdmmc { bus-width = <4>; cap-mmc-highspeed; cap-sd-highspeed; + cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>; disable-wp; max-frequency = <150000000>; no-sdio;
arch/riscv/kernel/traps.c +6 -4
@@ -6,6 +6,7 @@#include <linux/cpu.h> #include <linux/kernel.h> #include <linux/init.h> +#include <linux/irqflags.h> #include <linux/randomize_kstack.h> #include <linux/sched.h> #include <linux/sched/debug.h>
@@ -151,7 +152,9 @@ asmlinkage __visible __trap_section void name(struct pt_regs *regs) \ { \if (user_mode (regs)) { \irqentry_enter_from_user_mode (regs); \ +local_irq_enable (); \do_trap_error (regs, signo, code, regs->epc,"Oops - " str); \ +local_irq_disable (); \irqentry_exit_to_user_mode (regs); \ }else { \irqentry_state_t state =irqentry_nmi_enter (regs); \
@@ -173,17 +176,14 @@ asmlinkage __visible __trap_section void do_trap_insn_illegal(struct pt_regs *reif (user_mode (regs)) {irqentry_enter_from_user_mode (regs); -local_irq_enable (); handled =riscv_v_first_use_handler (regs); - -local_irq_disable (); -if (!handled)do_trap_error (regs,SIGILL ,ILL_ILLOPC , regs->epc,"Oops - illegal instruction" ); +local_irq_disable ();irqentry_exit_to_user_mode (regs); }else {irqentry_state_t state =irqentry_nmi_enter (regs);
@@ -308,9 +308,11 @@ asmlinkage __visible __trap_section void do_trap_break(struct pt_regs *regs) {if (user_mode (regs)) {irqentry_enter_from_user_mode (regs); +local_irq_enable ();handle_break (regs); +local_irq_disable ();irqentry_exit_to_user_mode (regs); }else {irqentry_state_t state =irqentry_nmi_enter (regs);
arch/riscv/kernel/traps_misaligned.c +1 -1
@@ -460,7 +460,7 @@ static int handle_scalar_misaligned_load(struct pt_regs *regs) }if (!fp) -SET_RD (insn, regs, val.data_ulong << shift >> shift); +SET_RD (insn, regs, (long )(val.data_ulong << shift) >> shift);else if (len ==8 )set_f64_rd (insn, regs, val.data_u64);else
arch/s390/net/bpf_jit_comp.c +9 -1
@@ -544,7 +544,15 @@ static void bpf_jit_plt(struct bpf_plt *plt, void *ret, void *target) {memcpy (plt, &bpf_plt,sizeof (*plt)); plt->ret = ret; - plt->target = target; +/* +* (target == NULL) implies that the branch to this PLT entry was +* patched and became a no-op. However, some CPU could have jumped +* to this PLT entry before patching and may be still executing it. +* +* Since the intention in this case is to make the PLT entry a no-op, +* make the target point to the return label instead of NULL. +*/ + plt->target = target ?: ret; }/*
arch/x86/kvm/xen.c +1 -1
@@ -1526,7 +1526,7 @@ static bool kvm_xen_schedop_poll(struct kvm_vcpu *vcpu, bool longmode,if (kvm_read_guest_virt (vcpu, (gva_t )sched_poll.ports, ports, sched_poll.nr_ports *sizeof (*ports), &e)) { *r = -EFAULT ; -return true; + goto out; }for (i =0 ; i < sched_poll.nr_ports; i++) {
block/blk-sysfs.c +1 -0
@@ -964,4 +964,5 @@ void blk_unregister_queue(struct gendisk *disk)kobject_del (&disk->queue_kobj);blk_debugfs_remove (disk); +kobject_put (&disk->queue_kobj); }
drivers/block/loop.c +2 -3
@@ -308,14 +308,13 @@ static void lo_complete_rq(struct request *rq)static void lo_rw_aio_do_completion (struct loop_cmd *cmd) {struct request *rq =blk_mq_rq_from_pdu (cmd); -struct loop_device *lo = rq->q->queuedata;if (!atomic_dec_and_test (&cmd->ref))return ;kfree (cmd->bvec); cmd->bvec =NULL ;if (req_op (rq) ==REQ_OP_WRITE ) -file_end_write (lo->lo_backing_file); +kiocb_end_write (&cmd->iocb);if (likely (!blk_should_fake_timeout (rq->q)))blk_mq_complete_request (rq); }
@@ -391,7 +390,7 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd, }if (rw ==ITER_SOURCE ) { -file_start_write (lo->lo_backing_file); +kiocb_start_write (&cmd->iocb); ret = file->f_op->write_iter (&cmd->iocb, &iter); }else ret = file->f_op->read_iter (&cmd->iocb, &iter);
drivers/bluetooth/bfusb.c +1 -1
@@ -670,7 +670,7 @@ static int bfusb_probe(struct usb_interface *intf, const struct usb_device_id *i hdev->flush = bfusb_flush; hdev->send = bfusb_send_frame; -set_bit (HCI_QUIRK_BROKEN_LOCAL_COMMANDS , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_BROKEN_LOCAL_COMMANDS );if (hci_register_dev (hdev) <0 ) {BT_ERR ("Can't register HCI device" );
drivers/bluetooth/bpa10x.c +1 -1
@@ -398,7 +398,7 @@ static int bpa10x_probe(struct usb_interface *intf, hdev->send = bpa10x_send_frame; hdev->set_diag = bpa10x_set_diag; -set_bit (HCI_QUIRK_RESET_ON_CLOSE , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_RESET_ON_CLOSE ); err =hci_register_dev (hdev);if (err <0 ) {
drivers/bluetooth/btbcm.c +4 -4
@@ -135,7 +135,7 @@ int btbcm_check_bdaddr(struct hci_dev *hdev)if (btbcm_set_bdaddr_from_efi (hdev) !=0 ) {bt_dev_info (hdev,"BCM: Using default device address (%pMR)" , &bda->bdaddr); -set_bit (HCI_QUIRK_INVALID_BDADDR , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_INVALID_BDADDR ); } }
@@ -467,7 +467,7 @@ static int btbcm_print_controller_features(struct hci_dev *hdev)/* Read DMI and disable broken Read LE Min/Max Tx Power */ if (dmi_first_match (disable_broken_read_transmit_power)) -set_bit (HCI_QUIRK_BROKEN_READ_TRANSMIT_POWER , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_BROKEN_READ_TRANSMIT_POWER );return 0 ; }
@@ -706,7 +706,7 @@ int btbcm_finalize(struct hci_dev *hdev, bool *fw_load_done, bool use_autobaud_mbtbcm_check_bdaddr (hdev); -set_bit (HCI_QUIRK_STRICT_DUPLICATE_FILTER , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_STRICT_DUPLICATE_FILTER );return 0 ; }
@@ -769,7 +769,7 @@ int btbcm_setup_apple(struct hci_dev *hdev)kfree_skb (skb); } -set_bit (HCI_QUIRK_STRICT_DUPLICATE_FILTER , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_STRICT_DUPLICATE_FILTER );return 0 ; }
drivers/bluetooth/btintel.c +15 -15
@@ -88,7 +88,7 @@ int btintel_check_bdaddr(struct hci_dev *hdev)if (!bacmp (&bda->bdaddr,BDADDR_INTEL )) {bt_dev_err (hdev,"Found Intel default device address (%pMR)" , &bda->bdaddr); -set_bit (HCI_QUIRK_INVALID_BDADDR , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_INVALID_BDADDR ); }kfree_skb (skb);
@@ -2027,7 +2027,7 @@ static int btintel_download_fw(struct hci_dev *hdev,*/ if (!bacmp (¶ms->otp_bdaddr,BDADDR_ANY )) {bt_dev_info (hdev,"No device address configured" ); -set_bit (HCI_QUIRK_INVALID_BDADDR , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_INVALID_BDADDR ); } download:
@@ -2295,7 +2295,7 @@ static int btintel_prepare_fw_download_tlv(struct hci_dev *hdev,*/ if (!bacmp (&ver->otp_bd_addr,BDADDR_ANY )) {bt_dev_info (hdev,"No device address configured" ); -set_bit (HCI_QUIRK_INVALID_BDADDR , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_INVALID_BDADDR ); } }
@@ -2670,7 +2670,7 @@ static u8 btintel_classify_pkt_type(struct hci_dev *hdev, struct sk_buff *skb)* Distinguish ISO data packets form ACL data packets * based on their connection handle value range. */ -if (hci_skb_pkt_type (skb) ==HCI_ACLDATA_PKT ) { +if (iso_capable (hdev) &&hci_skb_pkt_type (skb) ==HCI_ACLDATA_PKT ) {__u16 handle =__le16_to_cpu (hci_acl_hdr (skb)->handle);if (hci_handle (handle) >=BTINTEL_ISODATA_HANDLE_BASE )
@@ -3435,9 +3435,9 @@ static int btintel_setup_combined(struct hci_dev *hdev) }/* Apply the common HCI quirks for Intel device */ -set_bit (HCI_QUIRK_STRICT_DUPLICATE_FILTER , &hdev->quirks); -set_bit (HCI_QUIRK_SIMULTANEOUS_DISCOVERY , &hdev->quirks); -set_bit (HCI_QUIRK_NON_PERSISTENT_DIAG , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_STRICT_DUPLICATE_FILTER ); +hci_set_quirk (hdev,HCI_QUIRK_SIMULTANEOUS_DISCOVERY ); +hci_set_quirk (hdev,HCI_QUIRK_NON_PERSISTENT_DIAG );/* Set up the quality report callback for Intel devices */ hdev->set_quality_report = btintel_set_quality_report;
@@ -3475,8 +3475,8 @@ static int btintel_setup_combined(struct hci_dev *hdev)*/ if (!btintel_test_flag (hdev,INTEL_ROM_LEGACY_NO_WBS_SUPPORT )) -set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , - &hdev->quirks); +hci_set_quirk (hdev, +HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED ); err =btintel_legacy_rom_setup (hdev, &ver);break ;
@@ -3491,11 +3491,11 @@ static int btintel_setup_combined(struct hci_dev *hdev)* * All Legacy bootloader devices support WBS */ -set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , - &hdev->quirks); +hci_set_quirk (hdev, +HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED );/* These variants don't seem to support LE Coded PHY */ -set_bit (HCI_QUIRK_BROKEN_LE_CODED , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_BROKEN_LE_CODED );/* Setup MSFT Extension support */ btintel_set_msft_opcode (hdev, ver.hw_variant);
@@ -3571,10 +3571,10 @@ static int btintel_setup_combined(struct hci_dev *hdev)* * All Legacy bootloader devices support WBS */ -set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED );/* These variants don't seem to support LE Coded PHY */ -set_bit (HCI_QUIRK_BROKEN_LE_CODED , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_BROKEN_LE_CODED );/* Setup MSFT Extension support */ btintel_set_msft_opcode (hdev, ver.hw_variant);
@@ -3600,7 +3600,7 @@ static int btintel_setup_combined(struct hci_dev *hdev)* * All TLV based devices support WBS */ -set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED );/* Setup MSFT Extension support */ btintel_set_msft_opcode(hdev,
drivers/bluetooth/btintel_pcie.c +4 -4
@@ -1941,9 +1941,9 @@ static int btintel_pcie_setup_internal(struct hci_dev *hdev) }/* Apply the common HCI quirks for Intel device */ -set_bit (HCI_QUIRK_STRICT_DUPLICATE_FILTER , &hdev->quirks); -set_bit (HCI_QUIRK_SIMULTANEOUS_DISCOVERY , &hdev->quirks); -set_bit (HCI_QUIRK_NON_PERSISTENT_DIAG , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_STRICT_DUPLICATE_FILTER ); +hci_set_quirk (hdev,HCI_QUIRK_SIMULTANEOUS_DISCOVERY ); +hci_set_quirk (hdev,HCI_QUIRK_NON_PERSISTENT_DIAG );/* Set up the quality report callback for Intel devices */ hdev->set_quality_report = btintel_set_quality_report;
@@ -1983,7 +1983,7 @@ static int btintel_pcie_setup_internal(struct hci_dev *hdev)* * All TLV based devices support WBS */ -set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED );/* Setup MSFT Extension support */ btintel_set_msft_opcode(hdev,
drivers/bluetooth/btmtksdio.c +2 -2
@@ -1141,7 +1141,7 @@ static int btmtksdio_setup(struct hci_dev *hdev) }/* Enable WBS with mSBC codec */ -set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED );/* Enable GPIO reset mechanism */ if (bdev->reset) {
@@ -1384,7 +1384,7 @@ static int btmtksdio_probe(struct sdio_func *func,SET_HCIDEV_DEV (hdev, &func->dev); hdev->manufacturer =70 ; -set_bit (HCI_QUIRK_NON_PERSISTENT_SETUP , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_NON_PERSISTENT_SETUP );sdio_set_drvdata (func, bdev);
drivers/bluetooth/btmtkuart.c +1 -1
@@ -872,7 +872,7 @@ static int btmtkuart_probe(struct serdev_device *serdev)SET_HCIDEV_DEV (hdev, &serdev->dev); hdev->manufacturer =70 ; -set_bit (HCI_QUIRK_NON_PERSISTENT_SETUP , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_NON_PERSISTENT_SETUP );if (btmtkuart_is_standalone (bdev)) { err =clk_prepare_enable (bdev->osc);
drivers/bluetooth/btnxpuart.c +1 -1
@@ -1769,7 +1769,7 @@ static int nxp_serdev_probe(struct serdev_device *serdev)"local-bd-address" , (u8 *)&ba, sizeof(ba));if (bacmp (&ba,BDADDR_ANY )) -set_bit (HCI_QUIRK_USE_BDADDR_PROPERTY , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_USE_BDADDR_PROPERTY );if (hci_register_dev (hdev) <0 ) {dev_err (&serdev->dev,"Can't register HCI device\n" );
drivers/bluetooth/btqca.c +1 -1
@@ -739,7 +739,7 @@ static int qca_check_bdaddr(struct hci_dev *hdev, const struct qca_fw_config *co bda = (struct hci_rp_read_bd_addr *)skb->data;if (!bacmp (&bda->bdaddr, &config->bdaddr)) -set_bit (HCI_QUIRK_USE_BDADDR_PROPERTY , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_USE_BDADDR_PROPERTY );kfree_skb (skb);
drivers/bluetooth/btqcomsmd.c +1 -1
@@ -117,7 +117,7 @@ static int btqcomsmd_setup(struct hci_dev *hdev)/* Devices do not have persistent storage for BD address. Retrieve * it from the firmware node property. */ -set_bit (HCI_QUIRK_USE_BDADDR_PROPERTY , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_USE_BDADDR_PROPERTY );return 0 ; }
drivers/bluetooth/btrtl.c +5 -5
@@ -1287,7 +1287,7 @@ void btrtl_set_quirks(struct hci_dev *hdev, struct btrtl_device_info *btrtl_dev)/* Enable controller to do both LE scan and BR/EDR inquiry * simultaneously. */ -set_bit (HCI_QUIRK_SIMULTANEOUS_DISCOVERY , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_SIMULTANEOUS_DISCOVERY );/* Enable central-peripheral role (able to create new connections with * an existing connection in slave role).
@@ -1301,7 +1301,7 @@ void btrtl_set_quirks(struct hci_dev *hdev, struct btrtl_device_info *btrtl_dev)case CHIP_ID_8851B :case CHIP_ID_8922A :case CHIP_ID_8852BT : -set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED );/* RTL8852C needs to transmit mSBC data continuously without * the zero length of USB packets for the ALT 6 supported chips
@@ -1312,7 +1312,8 @@ void btrtl_set_quirks(struct hci_dev *hdev, struct btrtl_device_info *btrtl_dev)if (btrtl_dev->project_id ==CHIP_ID_8852A || btrtl_dev->project_id ==CHIP_ID_8852B || btrtl_dev->project_id ==CHIP_ID_8852C ) -set_bit (HCI_QUIRK_USE_MSFT_EXT_ADDRESS_FILTER , &hdev->quirks); +hci_set_quirk (hdev, +HCI_QUIRK_USE_MSFT_EXT_ADDRESS_FILTER );hci_set_aosp_capable (hdev);break ;
@@ -1331,8 +1332,7 @@ void btrtl_set_quirks(struct hci_dev *hdev, struct btrtl_device_info *btrtl_dev)* but it doesn't support any features from page 2 - * it either responds with garbage or with error status */ -set_bit (HCI_QUIRK_BROKEN_LOCAL_EXT_FEATURES_PAGE_2 , - &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_BROKEN_LOCAL_EXT_FEATURES_PAGE_2 );break ;default :break ;
drivers/bluetooth/btsdio.c +1 -1
@@ -327,7 +327,7 @@ static int btsdio_probe(struct sdio_func *func, hdev->send = btsdio_send_frame;if (func->vendor ==0x0104 && func->device ==0x00c5 ) -set_bit (HCI_QUIRK_RESET_ON_CLOSE , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_RESET_ON_CLOSE ); err =hci_register_dev (hdev);if (err <0 ) {
drivers/bluetooth/btusb.c +79 -69
258 lines not on this page · raw message
drivers/bluetooth/hci_aml.c +1 -1
@@ -425,7 +425,7 @@ static int aml_check_bdaddr(struct hci_dev *hdev)if (!bacmp (&paddr->bdaddr,AML_BDADDR_DEFAULT )) {bt_dev_info (hdev,"amlbt using default bdaddr (%pM)" , &paddr->bdaddr); -set_bit (HCI_QUIRK_INVALID_BDADDR , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_INVALID_BDADDR ); } exit:
drivers/bluetooth/hci_bcm.c +2 -2
@@ -643,8 +643,8 @@ static int bcm_setup(struct hci_uart *hu)* Allow the bootloader to set a valid address through the * device tree. */ -if (test_bit (HCI_QUIRK_INVALID_BDADDR , &hu->hdev->quirks)) -set_bit (HCI_QUIRK_USE_BDADDR_PROPERTY , &hu->hdev->quirks); +if (hci_test_quirk (hu->hdev,HCI_QUIRK_INVALID_BDADDR )) +hci_set_quirk (hu->hdev,HCI_QUIRK_USE_BDADDR_PROPERTY );if (!bcm_request_irq (bcm)) err =bcm_setup_sleep (hu);
drivers/bluetooth/hci_bcm4377.c +5 -5
@@ -1435,7 +1435,7 @@ static int bcm4377_check_bdaddr(struct bcm4377_data *bcm4377) bda = (struct hci_rp_read_bd_addr *)skb->data;if (!bcm4377_is_valid_bdaddr (bcm4377, &bda->bdaddr)) -set_bit (HCI_QUIRK_USE_BDADDR_PROPERTY , &bcm4377->hdev->quirks); +hci_set_quirk (bcm4377->hdev,HCI_QUIRK_USE_BDADDR_PROPERTY );kfree_skb (skb);return 0 ;
@@ -2389,13 +2389,13 @@ static int bcm4377_probe(struct pci_dev *pdev, const struct pci_device_id *id) hdev->setup = bcm4377_hci_setup;if (bcm4377->hw->broken_mws_transport_config) -set_bit (HCI_QUIRK_BROKEN_MWS_TRANSPORT_CONFIG , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_BROKEN_MWS_TRANSPORT_CONFIG );if (bcm4377->hw->broken_ext_scan) -set_bit (HCI_QUIRK_BROKEN_EXT_SCAN , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_BROKEN_EXT_SCAN );if (bcm4377->hw->broken_le_coded) -set_bit (HCI_QUIRK_BROKEN_LE_CODED , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_BROKEN_LE_CODED );if (bcm4377->hw->broken_le_ext_adv_report_phy) -set_bit (HCI_QUIRK_FIXUP_LE_EXT_ADV_REPORT_PHY , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_FIXUP_LE_EXT_ADV_REPORT_PHY );pci_set_drvdata (pdev, bcm4377);hci_set_drvdata (hdev, bcm4377);
drivers/bluetooth/hci_intel.c +1 -1
@@ -660,7 +660,7 @@ static int intel_setup(struct hci_uart *hu)*/ if (!bacmp (¶ms.otp_bdaddr,BDADDR_ANY )) {bt_dev_info (hdev,"No device address configured" ); -set_bit (HCI_QUIRK_INVALID_BDADDR , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_INVALID_BDADDR ); }/* With this Intel bootloader only the hardware variant and device
drivers/bluetooth/hci_ldisc.c +3 -3
@@ -667,13 +667,13 @@ static int hci_uart_register_dev(struct hci_uart *hu)SET_HCIDEV_DEV (hdev, hu->tty->dev);if (test_bit (HCI_UART_RAW_DEVICE , &hu->hdev_flags)) -set_bit (HCI_QUIRK_RAW_DEVICE , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_RAW_DEVICE );if (test_bit (HCI_UART_EXT_CONFIG , &hu->hdev_flags)) -set_bit (HCI_QUIRK_EXTERNAL_CONFIG , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_EXTERNAL_CONFIG );if (!test_bit (HCI_UART_RESET_ON_INIT , &hu->hdev_flags)) -set_bit (HCI_QUIRK_RESET_ON_CLOSE , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_RESET_ON_CLOSE );/* Only call open() for the protocol after hdev is fully initialized as * open() (or a timer/workqueue it starts) may attempt to reference it.
drivers/bluetooth/hci_ll.c +2 -2
@@ -649,11 +649,11 @@ static int ll_setup(struct hci_uart *hu)/* This means that there was an error getting the BD address * during probe, so mark the device as having a bad address. */ -set_bit (HCI_QUIRK_INVALID_BDADDR , &hu->hdev->quirks); +hci_set_quirk (hu->hdev,HCI_QUIRK_INVALID_BDADDR ); }else if (bacmp (&lldev->bdaddr,BDADDR_ANY )) { err =ll_set_bdaddr (hu->hdev, &lldev->bdaddr);if (err) -set_bit (HCI_QUIRK_INVALID_BDADDR , &hu->hdev->quirks); +hci_set_quirk (hu->hdev,HCI_QUIRK_INVALID_BDADDR ); }/* Operational speed if any */
drivers/bluetooth/hci_nokia.c +1 -1
@@ -439,7 +439,7 @@ static int nokia_setup(struct hci_uart *hu)if (btdev->man_id ==NOKIA_ID_BCM2048 ) { hu->hdev->set_bdaddr = btbcm_set_bdaddr; -set_bit (HCI_QUIRK_INVALID_BDADDR , &hu->hdev->quirks); +hci_set_quirk (hu->hdev,HCI_QUIRK_INVALID_BDADDR );dev_dbg (dev,"bcm2048 has invalid bluetooth address!" ); }
drivers/bluetooth/hci_qca.c +7 -7
@@ -1892,7 +1892,7 @@ static int qca_setup(struct hci_uart *hu)/* Enable controller to do both LE scan and BR/EDR inquiry * simultaneously. */ -set_bit (HCI_QUIRK_SIMULTANEOUS_DISCOVERY , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_SIMULTANEOUS_DISCOVERY );switch (soc_type) {case QCA_QCA2066 :
@@ -1944,7 +1944,7 @@ static int qca_setup(struct hci_uart *hu)case QCA_WCN7850 : qcadev =serdev_device_get_drvdata (hu->serdev);if (qcadev->bdaddr_property_broken) -set_bit (HCI_QUIRK_BDADDR_PROPERTY_BROKEN , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_BDADDR_PROPERTY_BROKEN );hci_set_aosp_capable (hdev);
@@ -2487,7 +2487,7 @@ static int qca_serdev_probe(struct serdev_device *serdev) hdev = qcadev->serdev_hu.hdev;if (power_ctrl_enabled) { -set_bit (HCI_QUIRK_NON_PERSISTENT_SETUP , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_NON_PERSISTENT_SETUP ); hdev->shutdown = qca_power_off; }
@@ -2496,11 +2496,11 @@ static int qca_serdev_probe(struct serdev_device *serdev)* be queried via hci. Same with the valid le states quirk. */ if (data->capabilities &QCA_CAP_WIDEBAND_SPEECH ) -set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , - &hdev->quirks); +hci_set_quirk (hdev, +HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED );if (!(data->capabilities &QCA_CAP_VALID_LE_STATES )) -set_bit (HCI_QUIRK_BROKEN_LE_STATES , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_BROKEN_LE_STATES ); }return 0 ;
@@ -2550,7 +2550,7 @@ static void qca_serdev_shutdown(struct device *dev)* invoked and the SOC is already in the initial state, so * don't also need to send the VSC. */ -if (test_bit (HCI_QUIRK_NON_PERSISTENT_SETUP , &hdev->quirks) || +if (hci_test_quirk (hdev,HCI_QUIRK_NON_PERSISTENT_SETUP ) ||hci_dev_test_flag (hdev,HCI_SETUP ))return ;
drivers/bluetooth/hci_serdev.c +4 -4
@@ -152,7 +152,7 @@ static int hci_uart_close(struct hci_dev *hdev)* BT SOC is completely powered OFF during BT OFF, holding port * open may drain the battery. */ -if (test_bit (HCI_QUIRK_NON_PERSISTENT_SETUP , &hdev->quirks)) { +if (hci_test_quirk (hdev,HCI_QUIRK_NON_PERSISTENT_SETUP )) {clear_bit (HCI_UART_PROTO_READY , &hu->flags);serdev_device_close (hu->serdev); }
@@ -358,13 +358,13 @@ int hci_uart_register_device_priv(struct hci_uart *hu,SET_HCIDEV_DEV (hdev, &hu->serdev->dev);if (test_bit (HCI_UART_NO_SUSPEND_NOTIFIER , &hu->flags)) -set_bit (HCI_QUIRK_NO_SUSPEND_NOTIFIER , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_NO_SUSPEND_NOTIFIER );if (test_bit (HCI_UART_RAW_DEVICE , &hu->hdev_flags)) -set_bit (HCI_QUIRK_RAW_DEVICE , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_RAW_DEVICE );if (test_bit (HCI_UART_EXT_CONFIG , &hu->hdev_flags)) -set_bit (HCI_QUIRK_EXTERNAL_CONFIG , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_EXTERNAL_CONFIG );if (test_bit (HCI_UART_INIT_PENDING , &hu->hdev_flags))return 0 ;
drivers/bluetooth/hci_vhci.c +4 -4
@@ -415,16 +415,16 @@ static int __vhci_create_device(struct vhci_data *data, __u8 opcode) hdev->get_codec_config_data = vhci_get_codec_config_data; hdev->wakeup = vhci_wakeup; hdev->setup = vhci_setup; -set_bit (HCI_QUIRK_NON_PERSISTENT_SETUP , &hdev->quirks); -set_bit (HCI_QUIRK_SYNC_FLOWCTL_SUPPORTED , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_NON_PERSISTENT_SETUP ); +hci_set_quirk (hdev,HCI_QUIRK_SYNC_FLOWCTL_SUPPORTED );/* bit 6 is for external configuration */ if (opcode &0x40 ) -set_bit (HCI_QUIRK_EXTERNAL_CONFIG , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_EXTERNAL_CONFIG );/* bit 7 is for raw device */ if (opcode &0x80 ) -set_bit (HCI_QUIRK_RAW_DEVICE , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_RAW_DEVICE );if (hci_register_dev (hdev) <0 ) {BT_ERR ("Can't register HCI device" );
drivers/bluetooth/virtio_bt.c +5 -5
@@ -327,17 +327,17 @@ static int virtbt_probe(struct virtio_device *vdev) hdev->setup = virtbt_setup_intel; hdev->shutdown = virtbt_shutdown_generic; hdev->set_bdaddr = virtbt_set_bdaddr_intel; -set_bit (HCI_QUIRK_STRICT_DUPLICATE_FILTER , &hdev->quirks); -set_bit (HCI_QUIRK_SIMULTANEOUS_DISCOVERY , &hdev->quirks); -set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_STRICT_DUPLICATE_FILTER ); +hci_set_quirk (hdev,HCI_QUIRK_SIMULTANEOUS_DISCOVERY ); +hci_set_quirk (hdev,HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED );break ;case VIRTIO_BT_CONFIG_VENDOR_REALTEK : hdev->manufacturer =93 ; hdev->setup = virtbt_setup_realtek; hdev->shutdown = virtbt_shutdown_generic; -set_bit (HCI_QUIRK_SIMULTANEOUS_DISCOVERY , &hdev->quirks); -set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , &hdev->quirks); +hci_set_quirk (hdev,HCI_QUIRK_SIMULTANEOUS_DISCOVERY ); +hci_set_quirk (hdev,HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED );break ; } }
drivers/comedi/comedi_fops.c +28 -2
@@ -1556,21 +1556,27 @@ static int do_insnlist_ioctl(struct comedi_device *dev, }for (i =0 ; i < n_insns; ++i) { +unsigned int n = insns[i].n; +if (insns[i].insn &INSN_MASK_WRITE ) {if (copy_from_user (data, insns[i].data, - insns[i].n *sizeof (unsigned int ))) { + n *sizeof (unsigned int ))) {dev_dbg (dev->class_dev,"copy_from_user failed\n" ); ret = -EFAULT ; goto error; } +if (n <MIN_SAMPLES ) { +memset (&data[n],0 , (MIN_SAMPLES - n) * +sizeof (unsigned int )); + } } ret =parse_insn (dev, insns + i, data, file);if (ret <0 ) goto error;if (insns[i].insn &INSN_MASK_READ ) {if (copy_to_user (insns[i].data, data, - insns[i].n *sizeof (unsigned int ))) { + n *sizeof (unsigned int ))) {dev_dbg (dev->class_dev,"copy_to_user failed\n" ); ret = -EFAULT ;
@@ -1589,6 +1595,16 @@ static int do_insnlist_ioctl(struct comedi_device *dev,return i; } +#define MAX_INSNS MAX_SAMPLES +static int check_insnlist_len (struct comedi_device *dev,unsigned int n_insns) +{ +if (n_insns >MAX_INSNS ) { +dev_dbg (dev->class_dev,"insnlist length too large\n" ); +return -EINVAL ; + } +return 0 ; +} +/* * COMEDI_INSN ioctl * synchronous instruction
@@ -1633,6 +1649,10 @@ static int do_insn_ioctl(struct comedi_device *dev, ret = -EFAULT ; goto error; } +if (insn->n <MIN_SAMPLES ) { +memset (&data[insn->n],0 , + (MIN_SAMPLES - insn->n) *sizeof (unsigned int )); + } } ret =parse_insn (dev, insn, data, file);if (ret <0 )
@@ -2239,6 +2259,9 @@ static long comedi_unlocked_ioctl(struct file *file, unsigned int cmd, rc = -EFAULT ;break ; } + rc =check_insnlist_len (dev, insnlist.n_insns); +if (rc) +break ; insns =kcalloc (insnlist.n_insns,sizeof (*insns),GFP_KERNEL );if (!insns) { rc = -ENOMEM ;
@@ -3090,6 +3113,9 @@ static int compat_insnlist(struct file *file, unsigned long arg)if (copy_from_user (&insnlist32,compat_ptr (arg),sizeof (insnlist32)))return -EFAULT ; + rc =check_insnlist_len (dev, insnlist32.n_insns); +if (rc) +return rc; insns =kcalloc (insnlist32.n_insns,sizeof (*insns),GFP_KERNEL );if (!insns)return -ENOMEM ;
drivers/comedi/drivers.c +10 -7
@@ -339,10 +339,10 @@ int comedi_dio_insn_config(struct comedi_device *dev, unsigned int *data, unsigned int mask) { -unsigned int chan_mask =1 <<CR_CHAN (insn->chanspec); +unsigned int chan =CR_CHAN (insn->chanspec); -if (!mask) - mask = chan_mask; +if (!mask && chan <32 ) + mask =1U << chan;switch (data[0 ]) {case INSN_CONFIG_DIO_INPUT :
@@ -382,7 +382,7 @@ EXPORT_SYMBOL_GPL(comedi_dio_insn_config);unsigned int comedi_dio_update_state (struct comedi_subdevice *s,unsigned int *data) { -unsigned int chanmask = (s->n_chan <32 ) ? ((1 << s->n_chan) -1 ) +unsigned int chanmask = (s->n_chan <32 ) ? ((1U << s->n_chan) -1 ) :0xffffffff ;unsigned int mask = data[0 ] & chanmask;unsigned int bits = data[1 ];
@@ -615,6 +615,9 @@ static int insn_rw_emulate_bits(struct comedi_device *dev,unsigned int _data[2 ];int ret; +if (insn->n ==0 ) +return 0 ; +memset (_data,0 ,sizeof (_data));memset (&_insn,0 ,sizeof (_insn)); _insn.insn =INSN_BITS ;
@@ -625,8 +628,8 @@ static int insn_rw_emulate_bits(struct comedi_device *dev,if (insn->insn ==INSN_WRITE ) {if (!(s->subdev_flags &SDF_WRITABLE ))return -EINVAL ; - _data[0 ] =1 << (chan - base_chan);/* mask */ - _data[1 ] = data[0 ] ? (1 << (chan - base_chan)) :0 ;/* bits */ + _data[0 ] =1U << (chan - base_chan);/* mask */ + _data[1 ] = data[0 ] ? (1U << (chan - base_chan)) :0 ;/* bits */ } ret = s->insn_bits (dev, s, &_insn, _data);
@@ -709,7 +712,7 @@ static int __comedi_device_postconfig(struct comedi_device *dev)if (s->type ==COMEDI_SUBD_DO ) {if (s->n_chan <32 ) - s->io_bits = (1 << s->n_chan) -1 ; + s->io_bits = (1U << s->n_chan) -1 ;else s->io_bits =0xffffffff ; }
drivers/comedi/drivers/aio_iiro_16.c +2 -1
@@ -177,7 +177,8 @@ static int aio_iiro_16_attach(struct comedi_device *dev,* Digital input change of state interrupts are optionally supported * using IRQ 2-7, 10-12, 14, or 15. */ -if ((1 << it->options[1 ]) &0xdcfc ) { +if (it->options[1 ] >0 && it->options[1 ] <16 && + (1 << it->options[1 ]) &0xdcfc ) { ret =request_irq (it->options[1 ], aio_iiro_16_cos,0 , dev->board_name, dev);if (ret ==0 )
drivers/comedi/drivers/comedi_test.c +1 -1
@@ -790,7 +790,7 @@ static void waveform_detach(struct comedi_device *dev) {struct waveform_private *devpriv = dev->private; -if (devpriv) { +if (devpriv && dev->n_subdevices) {timer_delete_sync (&devpriv->ai_timer);timer_delete_sync (&devpriv->ao_timer); }
drivers/comedi/drivers/das16m1.c +2 -1
@@ -522,7 +522,8 @@ static int das16m1_attach(struct comedi_device *dev, devpriv->extra_iobase = dev->iobase +DAS16M1_8255_IOBASE ;/* only irqs 2, 3, 4, 5, 6, 7, 10, 11, 12, 14, and 15 are valid */ -if ((1 << it->options[1 ]) &0xdcfc ) { +if (it->options[1 ] >=2 && it->options[1 ] <=15 && + (1 << it->options[1 ]) &0xdcfc ) { ret =request_irq (it->options[1 ], das16m1_interrupt,0 , dev->board_name, dev);if (ret ==0 )
drivers/comedi/drivers/das6402.c +2 -1
@@ -567,7 +567,8 @@ static int das6402_attach(struct comedi_device *dev,das6402_reset (dev);/* IRQs 2,3,5,6,7, 10,11,15 are valid for "enhanced" mode */ -if ((1 << it->options[1 ]) &0x8cec ) { +if (it->options[1 ] >0 && it->options[1 ] <16 && + (1 << it->options[1 ]) &0x8cec ) { ret =request_irq (it->options[1 ], das6402_interrupt,0 , dev->board_name, dev);if (ret ==0 ) {
drivers/comedi/drivers/pcl812.c +2 -1
@@ -1149,7 +1149,8 @@ static int pcl812_attach(struct comedi_device *dev, struct comedi_devconfig *it)if (IS_ERR (dev->pacer))return PTR_ERR (dev->pacer); -if ((1 << it->options[1 ]) & board->irq_bits) { +if (it->options[1 ] >0 && it->options[1 ] <16 && + (1 << it->options[1 ]) & board->irq_bits) { ret =request_irq (it->options[1 ], pcl812_interrupt,0 , dev->board_name, dev);if (ret ==0 )
drivers/cpuidle/cpuidle-psci.c +12 -11
@@ -39,7 +39,6 @@ struct psci_cpuidle_data { static DEFINE_PER_CPU_READ_MOSTLY(struct psci_cpuidle_data, psci_cpuidle_data); static DEFINE_PER_CPU(u32, domain_state);static bool psci_cpuidle_use_syscore; -static bool psci_cpuidle_use_cpuhp;void psci_set_domain_state (u32 state) {
@@ -108,8 +107,12 @@ static int psci_idle_cpuhp_up(unsigned int cpu) {struct device *pd_dev =__this_cpu_read (psci_cpuidle_data.dev); -if (pd_dev) -pm_runtime_get_sync (pd_dev); +if (pd_dev) { +if (!IS_ENABLED (CONFIG_PREEMPT_RT )) +pm_runtime_get_sync (pd_dev); +else +dev_pm_genpd_resume (pd_dev); + }return 0 ; }
@@ -119,7 +122,11 @@ static int psci_idle_cpuhp_down(unsigned int cpu)struct device *pd_dev =__this_cpu_read (psci_cpuidle_data.dev);if (pd_dev) { -pm_runtime_put_sync (pd_dev); +if (!IS_ENABLED (CONFIG_PREEMPT_RT )) +pm_runtime_put_sync (pd_dev); +else +dev_pm_genpd_suspend (pd_dev); +/* Clear domain state to start fresh at next online. */ psci_set_domain_state (0 ); }
@@ -180,9 +187,6 @@ static void psci_idle_init_cpuhp(void) {int err; -if (!psci_cpuidle_use_cpuhp) -return ; - err = cpuhp_setup_state_nocalls(CPUHP_AP_CPU_PM_STARTING, "cpuidle/psci:online", psci_idle_cpuhp_up,
@@ -243,10 +247,8 @@ static int psci_dt_cpu_init_topology(struct cpuidle_driver *drv,* s2ram and s2idle. */ drv->states[state_count -1 ].enter_s2idle = psci_enter_s2idle_domain_idle_state; -if (!IS_ENABLED (CONFIG_PREEMPT_RT )) { +if (!IS_ENABLED (CONFIG_PREEMPT_RT )) drv->states[state_count -1 ].enter = psci_enter_domain_idle_state; - psci_cpuidle_use_cpuhp = true; - }return 0 ; }
@@ -323,7 +325,6 @@ static void psci_cpu_deinit_idle(int cpu)dt_idle_detach_cpu (data->dev); psci_cpuidle_use_syscore = false; - psci_cpuidle_use_cpuhp = false; }static int psci_idle_init_cpu (struct device *dev,int cpu)
drivers/dma/mediatek/mtk-cqdma.c +2 -2
@@ -449,9 +449,9 @@ static enum dma_status mtk_cqdma_tx_status(struct dma_chan *c,return ret;spin_lock_irqsave (&cvc->pc->lock, flags); -spin_lock_irqsave (&cvc->vc.lock, flags); +spin_lock (&cvc->vc.lock); vd =mtk_cqdma_find_active_desc (c, cookie); -spin_unlock_irqrestore (&cvc->vc.lock, flags); +spin_unlock (&cvc->vc.lock);spin_unlock_irqrestore (&cvc->pc->lock, flags);if (vd) {
drivers/dma/nbpfaxi.c +5 -6
@@ -1351,7 +1351,7 @@ static int nbpf_probe(struct platform_device *pdev)if (irqs ==1 ) { eirq = irqbuf[0 ]; -for (i =0 ; i <= num_channels; i++) +for (i =0 ; i < num_channels; i++) nbpf->chan[i].irq = irqbuf[0 ]; }else { eirq =platform_get_irq_byname (pdev,"error" );
@@ -1361,16 +1361,15 @@ static int nbpf_probe(struct platform_device *pdev)if (irqs == num_channels +1 ) {struct nbpf_channel *chan; -for (i =0 , chan = nbpf->chan; i <= num_channels; +for (i =0 , chan = nbpf->chan; i < num_channels; i++, chan++) {/* Skip the error IRQ */ if (irqbuf[i] == eirq) i++; +if (i >=ARRAY_SIZE (irqbuf)) +return -EINVAL ; chan->irq = irqbuf[i]; } - -if (chan != nbpf->chan + num_channels) -return -EINVAL ; }else {/* 2 IRQs and more than one channel */ if (irqbuf[0 ] == eirq)
@@ -1378,7 +1377,7 @@ static int nbpf_probe(struct platform_device *pdev)else irq = irqbuf[0 ]; -for (i =0 ; i <= num_channels; i++) +for (i =0 ; i < num_channels; i++) nbpf->chan[i].irq = irq; } }
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +7 -2
@@ -463,6 +463,7 @@ bool amdgpu_ring_soft_recovery(struct amdgpu_ring *ring, unsigned int vmid, {unsigned long flags;ktime_t deadline; +bool ret;if (unlikely (ring->adev->debug_disable_soft_recovery))return false;
@@ -477,12 +478,16 @@ bool amdgpu_ring_soft_recovery(struct amdgpu_ring *ring, unsigned int vmid,dma_fence_set_error (fence, -ENODATA );spin_unlock_irqrestore (fence->lock, flags); -atomic_inc (&ring->adev->gpu_reset_counter);while (!dma_fence_is_signaled (fence) &&ktime_to_ns (ktime_sub (deadline,ktime_get ())) >0 ) ring->funcs->soft_recovery (ring, vmid); -return dma_fence_is_signaled (fence); + ret =dma_fence_is_signaled (fence); +/* increment the counter only if soft reset worked */ +if (ret) +atomic_inc (&ring->adev->gpu_reset_counter); + +return ret; }/*
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +1 -0
@@ -4664,6 +4664,7 @@ static int gfx_v8_0_kcq_init_queue(struct amdgpu_ring *ring)memcpy (mqd, adev->gfx.mec.mqd_backup[mqd_idx],sizeof (struct vi_mqd_allocation ));/* reset ring buffer */ ring->wptr =0 ; +atomic64_set ((atomic64_t *)ring->wptr_cpu_addr,0 );amdgpu_ring_clear_ring (ring); }return 0 ;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c +10 -1
@@ -737,7 +737,16 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,* support programmable degamma anywhere. */ is_dcn = dm->adev->dm.dc->caps.color.dpp.dcn_arch; -drm_crtc_enable_color_mgmt (&acrtc->base, is_dcn ?MAX_COLOR_LUT_ENTRIES :0 , +/* Dont't enable DRM CRTC degamma property for DCN401 since the +* pre-blending degamma LUT doesn't apply to cursor, and therefore +* can't work similar to a post-blending degamma LUT as in other hw +* versions. +* TODO: revisit it once KMS plane color API is merged. +*/ +drm_crtc_enable_color_mgmt (&acrtc->base, + (is_dcn && + dm->adev->dm.dc->ctx->dce_version !=DCN_VERSION_4_01 ) ? +MAX_COLOR_LUT_ENTRIES :0 , true,MAX_COLOR_LUT_ENTRIES );drm_mode_crtc_set_gamma_size (&acrtc->base,MAX_COLOR_LEGACY_LUT_ENTRIES );
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c +2 -1
@@ -1565,7 +1565,7 @@ struct clk_mgr_internal *dcn401_clk_mgr_construct( clk_mgr->base.bw_params =kzalloc (sizeof (*clk_mgr->base.bw_params),GFP_KERNEL );if (!clk_mgr->base.bw_params) {BREAK_TO_DEBUGGER (); -kfree (clk_mgr); +kfree (clk_mgr401);return NULL ; }
@@ -1576,6 +1576,7 @@ struct clk_mgr_internal *dcn401_clk_mgr_construct(if (!clk_mgr->wm_range_table) {BREAK_TO_DEBUGGER ();kfree (clk_mgr->base.bw_params); +kfree (clk_mgr401);return NULL ; }
drivers/gpu/drm/mediatek/mtk_crtc.c +35 -1
@@ -719,6 +719,39 @@ int mtk_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane,return 0 ; } +void mtk_crtc_plane_disable (struct drm_crtc *crtc,struct drm_plane *plane) +{ +#if IS_REACHABLE (CONFIG_MTK_CMDQ ) +struct mtk_crtc *mtk_crtc =to_mtk_crtc (crtc); +struct mtk_plane_state *plane_state =to_mtk_plane_state (plane->state); +int i; + +/* no need to wait for disabling the plane by CPU */ +if (!mtk_crtc->cmdq_client.chan) +return ; + +if (!mtk_crtc->enabled) +return ; + +/* set pending plane state to disabled */ +for (i =0 ; i < mtk_crtc->layer_nr; i++) { +struct drm_plane *mtk_plane = &mtk_crtc->planes[i]; +struct mtk_plane_state *mtk_plane_state =to_mtk_plane_state (mtk_plane->state); + +if (mtk_plane->index == plane->index) { +memcpy (mtk_plane_state, plane_state,sizeof (*plane_state)); +break ; + } + } +mtk_crtc_update_config (mtk_crtc, false); + +/* wait for planes to be disabled by CMDQ */ +wait_event_timeout (mtk_crtc->cb_blocking_queue, + mtk_crtc->cmdq_vblank_cnt ==0 , +msecs_to_jiffies (500 )); +#endif +} +void mtk_crtc_async_update (struct drm_crtc *crtc,struct drm_plane *plane,struct drm_atomic_state *state) {
@@ -930,7 +963,8 @@ static int mtk_crtc_init_comp_planes(struct drm_device *drm_dev,mtk_ddp_comp_supported_rotations (comp),mtk_ddp_comp_get_blend_modes (comp),mtk_ddp_comp_get_formats (comp), - mtk_ddp_comp_get_num_formats(comp), i); +mtk_ddp_comp_get_num_formats (comp), + mtk_ddp_comp_is_afbc_supported(comp), i);if (ret)return ret;
drivers/gpu/drm/mediatek/mtk_crtc.h +1 -0
@@ -21,6 +21,7 @@ int mtk_crtc_create(struct drm_device *drm_dev, const unsigned int *path, unsigned int num_conn_routes);int mtk_crtc_plane_check (struct drm_crtc *crtc,struct drm_plane *plane,struct mtk_plane_state *state); +void mtk_crtc_plane_disable (struct drm_crtc *crtc,struct drm_plane *plane);void mtk_crtc_async_update (struct drm_crtc *crtc,struct drm_plane *plane,struct drm_atomic_state *plane_state);struct device *mtk_crtc_dma_dev_get (struct drm_crtc *crtc);
drivers/gpu/drm/mediatek/mtk_ddp_comp.c +1 -0
@@ -366,6 +366,7 @@ static const struct mtk_ddp_comp_funcs ddp_ovl = { .get_blend_modes = mtk_ovl_get_blend_modes, .get_formats = mtk_ovl_get_formats, .get_num_formats = mtk_ovl_get_num_formats, + .is_afbc_supported = mtk_ovl_is_afbc_supported, };static const struct mtk_ddp_comp_funcs ddp_postmask = {
drivers/gpu/drm/mediatek/mtk_ddp_comp.h +9 -0
@@ -83,6 +83,7 @@ struct mtk_ddp_comp_funcs {u32 (*get_blend_modes)(struct device *dev);const u32 *(*get_formats)(struct device *dev);size_t (*get_num_formats)(struct device *dev); +bool (*is_afbc_supported)(struct device *dev);void (*connect)(struct device *dev,struct device *mmsys_dev,unsigned int next);void (*disconnect)(struct device *dev,struct device *mmsys_dev,unsigned int next);void (*add)(struct device *dev,struct mtk_mutex *mutex);
@@ -294,6 +295,14 @@ size_t mtk_ddp_comp_get_num_formats(struct mtk_ddp_comp *comp)return 0 ; } +static inline bool mtk_ddp_comp_is_afbc_supported (struct mtk_ddp_comp *comp) +{ +if (comp->funcs && comp->funcs->is_afbc_supported) +return comp->funcs->is_afbc_supported (comp->dev); + +return false; +} +static inline bool mtk_ddp_comp_add (struct mtk_ddp_comp *comp,struct mtk_mutex *mutex) {if (comp->funcs && comp->funcs->add) {
drivers/gpu/drm/mediatek/mtk_disp_drv.h +1 -0
@@ -106,6 +106,7 @@ void mtk_ovl_disable_vblank(struct device *dev);u32 mtk_ovl_get_blend_modes (struct device *dev);const u32 *mtk_ovl_get_formats (struct device *dev);size_t mtk_ovl_get_num_formats (struct device *dev); +bool mtk_ovl_is_afbc_supported (struct device *dev);void mtk_ovl_adaptor_add_comp (struct device *dev,struct mtk_mutex *mutex);void mtk_ovl_adaptor_remove_comp (struct device *dev,struct mtk_mutex *mutex);
drivers/gpu/drm/mediatek/mtk_disp_ovl.c +7 -0
@@ -236,6 +236,13 @@ size_t mtk_ovl_get_num_formats(struct device *dev)return ovl->data->num_formats; } +bool mtk_ovl_is_afbc_supported (struct device *dev) +{ +struct mtk_disp_ovl *ovl =dev_get_drvdata (dev); + +return ovl->data->supports_afbc; +} +int mtk_ovl_clk_enable (struct device *dev) {struct mtk_disp_ovl *ovl =dev_get_drvdata (dev);
drivers/gpu/drm/mediatek/mtk_plane.c +10 -2
@@ -285,9 +285,14 @@ static void mtk_plane_atomic_disable(struct drm_plane *plane,struct drm_plane_state *new_state =drm_atomic_get_new_plane_state (state, plane);struct mtk_plane_state *mtk_plane_state =to_mtk_plane_state (new_state); +struct drm_plane_state *old_state =drm_atomic_get_old_plane_state (state, + plane); + mtk_plane_state->pending.enable = false;wmb ();/* Make sure the above parameter is set before update */ mtk_plane_state->pending.dirty = true; + +mtk_crtc_plane_disable (old_state->crtc, plane); } static void mtk_plane_atomic_update(struct drm_plane *plane,
@@ -321,7 +326,8 @@ static const struct drm_plane_helper_funcs mtk_plane_helper_funcs = {int mtk_plane_init (struct drm_device *dev,struct drm_plane *plane,unsigned long possible_crtcs,enum drm_plane_type type,unsigned int supported_rotations,const u32 blend_modes, -const u32 *formats,size_t num_formats,unsigned int plane_idx) +const u32 *formats,size_t num_formats, +bool supports_afbc,unsigned int plane_idx) {int err;
@@ -332,7 +338,9 @@ int mtk_plane_init(struct drm_device *dev, struct drm_plane *plane, err =drm_universal_plane_init (dev, plane, possible_crtcs, &mtk_plane_funcs, formats, - num_formats, modifiers, type,NULL ); + num_formats, + supports_afbc ? modifiers :NULL , + type,NULL );if (err) {DRM_ERROR ("failed to initialize plane\n" );return err;
drivers/gpu/drm/mediatek/mtk_plane.h +2 -1
@@ -49,5 +49,6 @@ to_mtk_plane_state(struct drm_plane_state *state)int mtk_plane_init (struct drm_device *dev,struct drm_plane *plane,unsigned long possible_crtcs,enum drm_plane_type type,unsigned int supported_rotations,const u32 blend_modes, -const u32 *formats,size_t num_formats,unsigned int plane_idx); +const u32 *formats,size_t num_formats, +bool supports_afbc,unsigned int plane_idx);#endif
drivers/gpu/drm/panfrost/panfrost_job.c +1 -1
@@ -841,7 +841,6 @@ int panfrost_job_init(struct panfrost_device *pfdev) .num_rqs = DRM_SCHED_PRIORITY_COUNT, .credit_limit = 2, .timeout = msecs_to_jiffies(JOB_TIMEOUT_MS), - .timeout_wq = pfdev->reset.wq, .name = "pan_js", .dev = pfdev->dev, };
@@ -879,6 +878,7 @@ int panfrost_job_init(struct panfrost_device *pfdev) pfdev->reset.wq =alloc_ordered_workqueue ("panfrost-reset" ,0 );if (!pfdev->reset.wq)return -ENOMEM ; + args.timeout_wq = pfdev->reset.wq;for (j =0 ; j <NUM_JOB_SLOTS ; j++) { js->queue[j].fence_context =dma_fence_context_alloc (1 );
drivers/gpu/drm/xe/xe_gt.c +8 -5
@@ -375,6 +375,8 @@ int xe_gt_init_early(struct xe_gt *gt)if (err)return err; +xe_mocs_init_early (gt); +return 0 ; }
@@ -588,17 +590,15 @@ int xe_gt_init(struct xe_gt *gt)if (err)return err; - err =xe_gt_pagefault_init (gt); + err =xe_gt_sysfs_init (gt);if (err)return err; -xe_mocs_init_early (gt); - - err =xe_gt_sysfs_init (gt); + err =gt_fw_domain_init (gt);if (err)return err; - err =gt_fw_domain_init (gt); + err =xe_gt_pagefault_init (gt);if (err)return err;
@@ -797,6 +797,9 @@ static int gt_reset(struct xe_gt *gt) goto err_out; } +if (IS_SRIOV_PF (gt_to_xe (gt))) +xe_gt_sriov_pf_stop_prepare (gt); +xe_uc_gucrc_disable (>->uc);xe_uc_stop_prepare (>->uc);xe_gt_pagefault_reset (gt);
drivers/gpu/drm/xe/xe_gt_sriov_pf.c +19 -0
@@ -172,6 +172,25 @@ void xe_gt_sriov_pf_sanitize_hw(struct xe_gt *gt, unsigned int vfid)pf_clear_vf_scratch_regs (gt, vfid); } +static void pf_cancel_restart (struct xe_gt *gt) +{ +xe_gt_assert (gt,IS_SRIOV_PF (gt_to_xe (gt))); + +if (cancel_work_sync (>->sriov.pf.workers.restart)) +xe_gt_sriov_dbg_verbose (gt,"pending restart canceled!\n" ); +} + +/** +* xe_gt_sriov_pf_stop_prepare() - Prepare to stop SR-IOV support. +* @gt: the &xe_gt +* +* This function can only be called on the PF. +*/ +void xe_gt_sriov_pf_stop_prepare (struct xe_gt *gt) +{ +pf_cancel_restart (gt); +} +static void pf_restart (struct xe_gt *gt) {struct xe_device *xe =gt_to_xe (gt);
drivers/gpu/drm/xe/xe_gt_sriov_pf.h +5 -0
@@ -13,6 +13,7 @@ int xe_gt_sriov_pf_init_early(struct xe_gt *gt);int xe_gt_sriov_pf_init (struct xe_gt *gt);void xe_gt_sriov_pf_init_hw (struct xe_gt *gt);void xe_gt_sriov_pf_sanitize_hw (struct xe_gt *gt,unsigned int vfid); +void xe_gt_sriov_pf_stop_prepare (struct xe_gt *gt);void xe_gt_sriov_pf_restart (struct xe_gt *gt);#else static inline int xe_gt_sriov_pf_init_early (struct xe_gt *gt)
@@ -29,6 +30,10 @@ static inline void xe_gt_sriov_pf_init_hw(struct xe_gt *gt) { } +static inline void xe_gt_sriov_pf_stop_prepare (struct xe_gt *gt) +{ +} +static inline void xe_gt_sriov_pf_restart (struct xe_gt *gt) { }
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c +27 -0
@@ -2356,6 +2356,21 @@ int xe_gt_sriov_pf_config_restore(struct xe_gt *gt, unsigned int vfid,return err; } +static int pf_push_self_config (struct xe_gt *gt) +{ +int err; + + err =pf_push_full_vf_config (gt,PFID ); +if (err) { +xe_gt_sriov_err (gt,"Failed to push self configuration (%pe)\n" , +ERR_PTR (err)); +return err; + } + +xe_gt_sriov_dbg_verbose (gt,"self configuration completed\n" ); +return 0 ; +} +static void fini_config (void *arg) {struct xe_gt *gt = arg;
@@ -2379,9 +2394,17 @@ static void fini_config(void *arg)int xe_gt_sriov_pf_config_init (struct xe_gt *gt) {struct xe_device *xe =gt_to_xe (gt); +int err;xe_gt_assert (gt,IS_SRIOV_PF (xe)); +mutex_lock (xe_gt_sriov_pf_master_mutex (gt)); + err =pf_push_self_config (gt); +mutex_unlock (xe_gt_sriov_pf_master_mutex (gt)); + +if (err) +return err; +return devm_add_action_or_reset (xe->drm.dev, fini_config, gt); }
@@ -2399,6 +2422,10 @@ void xe_gt_sriov_pf_config_restart(struct xe_gt *gt)unsigned int n, total_vfs =xe_sriov_pf_get_totalvfs (gt_to_xe (gt));unsigned int fail =0 , skip =0 ; +mutex_lock (xe_gt_sriov_pf_master_mutex (gt)); +pf_push_self_config (gt); +mutex_unlock (xe_gt_sriov_pf_master_mutex (gt)); +for (n =1 ; n <= total_vfs; n++) {if (xe_gt_sriov_pf_config_is_empty (gt, n)) skip++;
drivers/gpu/drm/xe/xe_ring_ops.c +10 -12
@@ -110,13 +110,14 @@ static int emit_bb_start(u64 batch_addr, u32 ppgtt_flag, u32 *dw, int i)return i; } -static int emit_flush_invalidate (u32 *dw,int i) +static int emit_flush_invalidate (u32 addr,u32 val,u32 *dw,int i) { dw[i++] =MI_FLUSH_DW |MI_INVALIDATE_TLB |MI_FLUSH_DW_OP_STOREDW | -MI_FLUSH_IMM_DW |MI_FLUSH_DW_STORE_INDEX ; - dw[i++] =LRC_PPHWSP_FLUSH_INVAL_SCRATCH_ADDR ; - dw[i++] =0 ; +MI_FLUSH_IMM_DW ; + + dw[i++] = addr |MI_FLUSH_DW_USE_GTT ; dw[i++] =0 ; + dw[i++] = val;return i; }
@@ -397,23 +398,20 @@ static void __emit_job_gen12_render_compute(struct xe_sched_job *job,static void emit_migration_job_gen12 (struct xe_sched_job *job,struct xe_lrc *lrc,u32 seqno) { +u32 saddr =xe_lrc_start_seqno_ggtt_addr (lrc);u32 dw[MAX_JOB_SIZE_DW ], i =0 ; i =emit_copy_timestamp (lrc, dw, i); - i =emit_store_imm_ggtt (xe_lrc_start_seqno_ggtt_addr (lrc), - seqno, dw, i); + i =emit_store_imm_ggtt (saddr, seqno, dw, i); dw[i++] =MI_ARB_ON_OFF |MI_ARB_DISABLE ;/* Enabled again below */ i =emit_bb_start (job->ptrs[0 ].batch_addr,BIT (8 ), dw, i); -if (!IS_SRIOV_VF (gt_to_xe (job->q->gt))) { -/* XXX: Do we need this? Leaving for now. */ - dw[i++] =preparser_disable (true); - i =emit_flush_invalidate (dw, i); - dw[i++] =preparser_disable (false); - } + dw[i++] =preparser_disable (true); + i =emit_flush_invalidate (saddr, seqno, dw, i); + dw[i++] =preparser_disable (false); i =emit_bb_start (job->ptrs[1 ].batch_addr,BIT (8 ), dw, i);
drivers/hid/hid-core.c +14 -5
@@ -1883,9 +1883,12 @@ u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags)/* * 7 extra bytes are necessary to achieve proper functionality * of implement() working on 8 byte chunks +* 1 extra byte for the report ID if it is null (not used) so +* we can reserve that extra byte in the first position of the buffer +* when sending it to .raw_request() */ -u32 len =hid_report_len (report) +7 ; +u32 len =hid_report_len (report) +7 + (report->id ==0 );return kzalloc (len, flags); }
@@ -1973,7 +1976,7 @@ static struct hid_report *hid_get_report(struct hid_report_enum *report_enum,int __hid_request (struct hid_device *hid,struct hid_report *report,enum hid_class_request reqtype) { -char *buf; +char *buf, *data_buf;int ret;u32 len;
@@ -1981,13 +1984,19 @@ int __hid_request(struct hid_device *hid, struct hid_report *report,if (!buf)return -ENOMEM ; + data_buf = buf; len =hid_report_len (report); +if (report->id ==0 ) { +/* reserve the first byte for the report ID */ + data_buf++; + len++; + } +if (reqtype ==HID_REQ_SET_REPORT ) -hid_output_report (report, buf); +hid_output_report (report, data_buf); - ret = hid->ll_driver->raw_request (hid, report->id, buf, len, - report->type, reqtype); + ret =hid_hw_raw_request (hid, report->id, buf, len, report->type, reqtype);if (ret <0 ) {dbg_hid ("unable to complete request: %d\n" , ret); goto out;
drivers/hwmon/corsair-cpro.c +5 -0
@@ -89,6 +89,7 @@ struct ccp_device {struct mutex mutex;/* whenever buffer is used, lock before send_usb_cmd */ u8 *cmd_buffer;u8 *buffer; +int buffer_recv_size;/* number of received bytes in buffer */ int target[6 ];DECLARE_BITMAP (temp_cnct,NUM_TEMP_SENSORS );DECLARE_BITMAP (fan_cnct,NUM_FANS );
@@ -146,6 +147,9 @@ static int send_usb_cmd(struct ccp_device *ccp, u8 command, u8 byte1, u8 byte2,if (!t)return -ETIMEDOUT ; +if (ccp->buffer_recv_size !=IN_BUFFER_SIZE ) +return -EPROTO ; +return ccp_get_errno (ccp); }
@@ -157,6 +161,7 @@ static int ccp_raw_event(struct hid_device *hdev, struct hid_report *report, u8spin_lock (&ccp->wait_input_report_lock);if (!completion_done (&ccp->wait_input_report)) {memcpy (ccp->buffer, data,min (IN_BUFFER_SIZE , size)); + ccp->buffer_recv_size = size;complete_all (&ccp->wait_input_report); }spin_unlock (&ccp->wait_input_report_lock);
drivers/i2c/busses/i2c-omap.c +5 -2
@@ -1472,7 +1472,9 @@ omap_i2c_probe(struct platform_device *pdev) }/* reset ASAP, clearing any IRQs */ -omap_i2c_init (omap); + r =omap_i2c_init (omap); +if (r) + goto err_mux_state_deselect;if (omap->rev <OMAP_I2C_OMAP1_REV_2 ) r = devm_request_irq(&pdev->dev, omap->irq, omap_i2c_omap1_isr,
@@ -1515,12 +1517,13 @@ omap_i2c_probe(struct platform_device *pdev) err_unuse_clocks:omap_i2c_write_reg (omap,OMAP_I2C_CON_REG ,0 ); +err_mux_state_deselect:if (omap->mux_state)mux_state_deselect (omap->mux_state); err_put_pm: -pm_runtime_dont_use_autosuspend (omap->dev);pm_runtime_put_sync (omap->dev); err_disable_pm: +pm_runtime_dont_use_autosuspend (omap->dev);pm_runtime_disable (&pdev->dev);return r;
drivers/i2c/busses/i2c-stm32.c +3 -5
@@ -102,7 +102,6 @@ int stm32_i2c_prep_dma_xfer(struct device *dev, struct stm32_i2c_dma *dma, void *dma_async_param) {struct dma_async_tx_descriptor *txdesc; -struct device *chan_dev;int ret;if (rd_wr) {
@@ -116,11 +115,10 @@ int stm32_i2c_prep_dma_xfer(struct device *dev, struct stm32_i2c_dma *dma, } dma->dma_len = len; - chan_dev = dma->chan_using->device->dev; - dma->dma_buf =dma_map_single (chan_dev, buf, dma->dma_len, + dma->dma_buf =dma_map_single (dev, buf, dma->dma_len, dma->dma_data_dir); -if (dma_mapping_error (chan_dev, dma->dma_buf)) { +if (dma_mapping_error (dev, dma->dma_buf)) {dev_err (dev,"DMA mapping failed\n" );return -EINVAL ; }
@@ -150,7 +148,7 @@ int stm32_i2c_prep_dma_xfer(struct device *dev, struct stm32_i2c_dma *dma,return 0 ; err: -dma_unmap_single (chan_dev, dma->dma_buf, dma->dma_len, +dma_unmap_single (dev, dma->dma_buf, dma->dma_len, dma->dma_data_dir);return ret; }
drivers/i2c/busses/i2c-stm32f7.c +9 -15
@@ -739,12 +739,13 @@ static void stm32f7_i2c_disable_dma_req(struct stm32f7_i2c_dev *i2c_dev)static void stm32f7_i2c_dma_callback (void *arg) { -struct stm32f7_i2c_dev *i2c_dev = (struct stm32f7_i2c_dev *)arg; +struct stm32f7_i2c_dev *i2c_dev = arg;struct stm32_i2c_dma *dma = i2c_dev->dma; -struct device *dev = dma->chan_using->device->dev;stm32f7_i2c_disable_dma_req (i2c_dev); -dma_unmap_single (dev, dma->dma_buf, dma->dma_len, dma->dma_data_dir); +dmaengine_terminate_async (dma->chan_using); +dma_unmap_single (i2c_dev->dev, dma->dma_buf, dma->dma_len, + dma->dma_data_dir);complete (&dma->dma_complete); }
@@ -1510,7 +1511,6 @@ static irqreturn_t stm32f7_i2c_handle_isr_errs(struct stm32f7_i2c_dev *i2c_dev,u16 addr = f7_msg->addr;void __iomem *base = i2c_dev->base;struct device *dev = i2c_dev->dev; -struct stm32_i2c_dma *dma = i2c_dev->dma;/* Bus error */ if (status &STM32F7_I2C_ISR_BERR ) {
@@ -1551,10 +1551,8 @@ static irqreturn_t stm32f7_i2c_handle_isr_errs(struct stm32f7_i2c_dev *i2c_dev, }/* Disable dma */ -if (i2c_dev->use_dma) { -stm32f7_i2c_disable_dma_req (i2c_dev); -dmaengine_terminate_async (dma->chan_using); - } +if (i2c_dev->use_dma) +stm32f7_i2c_dma_callback (i2c_dev); i2c_dev->master_mode = false;complete (&i2c_dev->complete);
@@ -1600,7 +1598,6 @@ static irqreturn_t stm32f7_i2c_isr_event_thread(int irq, void *data) {struct stm32f7_i2c_dev *i2c_dev = data;struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg; -struct stm32_i2c_dma *dma = i2c_dev->dma;void __iomem *base = i2c_dev->base;u32 status, mask;int ret;
@@ -1619,10 +1616,8 @@ static irqreturn_t stm32f7_i2c_isr_event_thread(int irq, void *data)dev_dbg (i2c_dev->dev,"<%s>: Receive NACK (addr %x)\n" , __func__, f7_msg->addr);writel_relaxed (STM32F7_I2C_ICR_NACKCF , base +STM32F7_I2C_ICR ); -if (i2c_dev->use_dma) { -stm32f7_i2c_disable_dma_req (i2c_dev); -dmaengine_terminate_async (dma->chan_using); - } +if (i2c_dev->use_dma) +stm32f7_i2c_dma_callback (i2c_dev); f7_msg->result = -ENXIO ; }
@@ -1640,8 +1635,7 @@ static irqreturn_t stm32f7_i2c_isr_event_thread(int irq, void *data) ret =wait_for_completion_timeout (&i2c_dev->dma->dma_complete,HZ );if (!ret) {dev_dbg (i2c_dev->dev,"<%s>: Timed out\n" , __func__); -stm32f7_i2c_disable_dma_req (i2c_dev); -dmaengine_terminate_async (dma->chan_using); +stm32f7_i2c_dma_callback (i2c_dev); f7_msg->result = -ETIMEDOUT ; } }
drivers/iio/accel/fxls8962af-core.c +2 -0
@@ -877,6 +877,8 @@ static int fxls8962af_buffer_predisable(struct iio_dev *indio_dev)if (ret)return ret; +synchronize_irq (data->irq); + ret =__fxls8962af_fifo_set_mode (data, false);if (data->enable_event)
drivers/iio/accel/st_accel_core.c +5 -5
@@ -1353,6 +1353,7 @@ static int apply_acpi_orientation(struct iio_dev *indio_dev)union acpi_object *ont;union acpi_object *elements;acpi_status status; +struct device *parent = indio_dev->dev.parent;int ret = -EINVAL ;unsigned int val;int i, j;
@@ -1371,7 +1372,7 @@ static int apply_acpi_orientation(struct iio_dev *indio_dev) }; - adev =ACPI_COMPANION (indio_dev->dev.parent); + adev =ACPI_COMPANION (parent);if (!adev)return -ENXIO ;
@@ -1380,8 +1381,7 @@ static int apply_acpi_orientation(struct iio_dev *indio_dev)if (status ==AE_NOT_FOUND ) {return -ENXIO ; }else if (ACPI_FAILURE (status)) { -dev_warn (&indio_dev->dev,"failed to execute _ONT: %d\n" , - status); +dev_warn (parent,"failed to execute _ONT: %d\n" , status);return status; }
@@ -1457,12 +1457,12 @@ static int apply_acpi_orientation(struct iio_dev *indio_dev) } ret =0 ; -dev_info (&indio_dev->dev,"computed mount matrix from ACPI\n" ); +dev_info (parent,"computed mount matrix from ACPI\n" ); out:kfree (buffer.pointer);if (ret) -dev_dbg (&indio_dev->dev, +dev_dbg (parent,"failed to apply ACPI orientation data: %d\n" , ret);return ret;
drivers/iio/adc/ad7380.c +3 -2
@@ -1920,8 +1920,9 @@ static int ad7380_probe(struct spi_device *spi)if (st->chip_info->has_hardware_gain) {device_for_each_child_node_scoped (dev, node) { -unsigned int channel, gain; +unsigned int channel;int gain_idx; +u16 gain; ret =fwnode_property_read_u32 (node,"reg" , &channel);if (ret)
@@ -1933,7 +1934,7 @@ static int ad7380_probe(struct spi_device *spi)"Invalid channel number %i\n" , channel); - ret =fwnode_property_read_u32 (node,"adi,gain-milli" , + ret =fwnode_property_read_u16 (node,"adi,gain-milli" , &gain);if (ret && ret != -EINVAL ) return dev_err_probe(dev, ret,
drivers/iio/adc/adi-axi-adc.c +4 -2
@@ -445,7 +445,7 @@ static int axi_adc_raw_read(struct iio_backend *back, u32 *val)static int ad7606_bus_reg_read (struct iio_backend *back,u32 reg,u32 *val) {struct adi_axi_adc_state *st =iio_backend_get_priv (back); -int addr; +u32 addr, reg_val;guard (mutex)(&st->lock);
@@ -455,7 +455,9 @@ static int ad7606_bus_reg_read(struct iio_backend *back, u32 reg, u32 *val)*/ addr =FIELD_PREP (ADI_AXI_REG_ADDRESS_MASK , reg) |ADI_AXI_REG_READ_BIT ;axi_adc_raw_write (back, addr); -axi_adc_raw_read (back, val); +axi_adc_raw_read (back, ®_val); + + *val =FIELD_GET (ADI_AXI_REG_VALUE_MASK , reg_val);/* Write 0x0 on the bus to get back to ADC mode */ axi_adc_raw_write (back,0 );
drivers/iio/adc/axp20x_adc.c +1 -0
@@ -187,6 +187,7 @@ static struct iio_map axp717_maps[] = { .consumer_channel = "batt_chrg_i", .adc_channel_label = "batt_chrg_i", }, + { } };/*
drivers/iio/adc/max1363.c +21 -22
84 lines not on this page · raw message
drivers/iio/adc/stm32-adc-core.c +3 -4
@@ -429,10 +429,9 @@ static int stm32_adc_irq_probe(struct platform_device *pdev,return -ENOMEM ; } -for (i =0 ; i < priv->cfg->num_irqs; i++) { -irq_set_chained_handler (priv->irq[i], stm32_adc_irq_handler); -irq_set_handler_data (priv->irq[i], priv); - } +for (i =0 ; i < priv->cfg->num_irqs; i++) +irq_set_chained_handler_and_data (priv->irq[i], + stm32_adc_irq_handler, priv);return 0 ; }
drivers/iio/common/st_sensors/st_sensors_core.c +17 -19
@@ -154,7 +154,7 @@ static int st_sensors_set_fullscale(struct iio_dev *indio_dev, unsigned int fs)return err; st_accel_set_fullscale_error: -dev_err (&indio_dev->dev,"failed to set new fullscale.\n" ); +dev_err (indio_dev->dev.parent,"failed to set new fullscale.\n" );return err; }
@@ -231,8 +231,7 @@ int st_sensors_power_enable(struct iio_dev *indio_dev)ARRAY_SIZE (regulator_names), regulator_names);if (err) -return dev_err_probe (&indio_dev->dev, err, -"unable to enable supplies\n" ); +return dev_err_probe (parent, err,"unable to enable supplies\n" );return 0 ; }
@@ -241,13 +240,14 @@ EXPORT_SYMBOL_NS(st_sensors_power_enable, "IIO_ST_SENSORS");static int st_sensors_set_drdy_int_pin (struct iio_dev *indio_dev,struct st_sensors_platform_data *pdata) { +struct device *parent = indio_dev->dev.parent;struct st_sensor_data *sdata =iio_priv (indio_dev);/* Sensor does not support interrupts */ if (!sdata->sensor_settings->drdy_irq.int1.addr && !sdata->sensor_settings->drdy_irq.int2.addr) {if (pdata->drdy_int_pin) -dev_info (&indio_dev->dev, +dev_info (parent,"DRDY on pin INT%d specified, but sensor does not support interrupts\n" , pdata->drdy_int_pin);return 0 ;
@@ -256,29 +256,27 @@ static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev,switch (pdata->drdy_int_pin) {case 1 :if (!sdata->sensor_settings->drdy_irq.int1.mask) { -dev_err (&indio_dev->dev, -"DRDY on INT1 not available.\n" ); +dev_err (parent,"DRDY on INT1 not available.\n" );return -EINVAL ; } sdata->drdy_int_pin =1 ;break ;case 2 :if (!sdata->sensor_settings->drdy_irq.int2.mask) { -dev_err (&indio_dev->dev, -"DRDY on INT2 not available.\n" ); +dev_err (parent,"DRDY on INT2 not available.\n" );return -EINVAL ; } sdata->drdy_int_pin =2 ;break ;default : -dev_err (&indio_dev->dev,"DRDY on pdata not valid.\n" ); +dev_err (parent,"DRDY on pdata not valid.\n" );return -EINVAL ; }if (pdata->open_drain) {if (!sdata->sensor_settings->drdy_irq.int1.addr_od && !sdata->sensor_settings->drdy_irq.int2.addr_od) -dev_err (&indio_dev->dev, +dev_err (parent,"open drain requested but unsupported.\n" );else sdata->int_pin_open_drain = true;
@@ -336,6 +334,7 @@ EXPORT_SYMBOL_NS(st_sensors_dev_name_probe, "IIO_ST_SENSORS");int st_sensors_init_sensor (struct iio_dev *indio_dev,struct st_sensors_platform_data *pdata) { +struct device *parent = indio_dev->dev.parent;struct st_sensor_data *sdata =iio_priv (indio_dev);struct st_sensors_platform_data *of_pdata;int err =0 ;
@@ -343,7 +342,7 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev,mutex_init (&sdata->odr_lock);/* If OF/DT pdata exists, it will take precedence of anything else */ - of_pdata =st_sensors_dev_probe (indio_dev->dev.parent, pdata); + of_pdata =st_sensors_dev_probe (parent, pdata);if (IS_ERR (of_pdata))return PTR_ERR (of_pdata);if (of_pdata)
@@ -370,7 +369,7 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev,if (err <0 )return err; }else -dev_info (&indio_dev->dev,"Full-scale not possible\n" ); +dev_info (parent,"Full-scale not possible\n" ); err =st_sensors_set_odr (indio_dev, sdata->odr);if (err <0 )
@@ -405,7 +404,7 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev, mask = sdata->sensor_settings->drdy_irq.int2.mask_od; } -dev_info (&indio_dev->dev, +dev_info (parent,"set interrupt line to open drain mode on pin %d\n" , sdata->drdy_int_pin); err = st_sensors_write_data_with_mask(indio_dev, addr,
@@ -594,21 +593,20 @@ EXPORT_SYMBOL_NS(st_sensors_get_settings_index, "IIO_ST_SENSORS");int st_sensors_verify_id (struct iio_dev *indio_dev) {struct st_sensor_data *sdata =iio_priv (indio_dev); +struct device *parent = indio_dev->dev.parent;int wai, err;if (sdata->sensor_settings->wai_addr) { err =regmap_read (sdata->regmap, sdata->sensor_settings->wai_addr, &wai);if (err <0 ) { -dev_err (&indio_dev->dev, -"failed to read Who-Am-I register.\n" ); -return err; +return dev_err_probe (parent, err, +"failed to read Who-Am-I register.\n" ); }if (sdata->sensor_settings->wai != wai) { -dev_warn (&indio_dev->dev, -"%s: WhoAmI mismatch (0x%x).\n" , - indio_dev->name, wai); +dev_warn (parent,"%s: WhoAmI mismatch (0x%x).\n" , + indio_dev->name, wai); } }
drivers/iio/common/st_sensors/st_sensors_trigger.c +9 -11
@@ -127,7 +127,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev, sdata->trig =devm_iio_trigger_alloc (parent,"%s-trigger" , indio_dev->name);if (sdata->trig ==NULL ) { -dev_err (&indio_dev->dev,"failed to allocate iio trigger.\n" ); +dev_err (parent,"failed to allocate iio trigger.\n" );return -ENOMEM ; }
@@ -143,7 +143,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,case IRQF_TRIGGER_FALLING :case IRQF_TRIGGER_LOW :if (!sdata->sensor_settings->drdy_irq.addr_ihl) { -dev_err (&indio_dev->dev, +dev_err (parent,"falling/low specified for IRQ but hardware supports only rising/high: will request rising/high\n" );if (irq_trig ==IRQF_TRIGGER_FALLING ) irq_trig =IRQF_TRIGGER_RISING ;
@@ -156,21 +156,19 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev, sdata->sensor_settings->drdy_irq.mask_ihl, 1);if (err <0 )return err; -dev_info (&indio_dev->dev, +dev_info (parent,"interrupts on the falling edge or active low level\n" ); }break ;case IRQF_TRIGGER_RISING : -dev_info (&indio_dev->dev, -"interrupts on the rising edge\n" ); +dev_info (parent,"interrupts on the rising edge\n" );break ;case IRQF_TRIGGER_HIGH : -dev_info (&indio_dev->dev, -"interrupts active high level\n" ); +dev_info (parent,"interrupts active high level\n" );break ;default :/* This is the most preferred mode, if possible */ -dev_err (&indio_dev->dev, +dev_err (parent,"unsupported IRQ trigger specified (%lx), enforce rising edge\n" , irq_trig); irq_trig =IRQF_TRIGGER_RISING ; }
@@ -179,7 +177,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,if (irq_trig ==IRQF_TRIGGER_FALLING || irq_trig ==IRQF_TRIGGER_RISING ) {if (!sdata->sensor_settings->drdy_irq.stat_drdy.addr) { -dev_err (&indio_dev->dev, +dev_err (parent,"edge IRQ not supported w/o stat register.\n" );return -EOPNOTSUPP ; }
@@ -214,13 +212,13 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev, sdata->trig->name, sdata->trig);if (err) { -dev_err (&indio_dev->dev,"failed to request trigger IRQ.\n" ); +dev_err (parent,"failed to request trigger IRQ.\n" );return err; } err =devm_iio_trigger_register (parent, sdata->trig);if (err <0 ) { -dev_err (&indio_dev->dev,"failed to register iio trigger.\n" ); +dev_err (parent,"failed to register iio trigger.\n" );return err; } indio_dev->trig =iio_trigger_get (sdata->trig);
drivers/iio/industrialio-backend.c +4 -1
@@ -155,11 +155,14 @@ static ssize_t iio_backend_debugfs_write_reg(struct file *file,ssize_t rc;int ret; +if (count >=sizeof (buf)) +return -ENOSPC ; + rc =simple_write_to_buffer (buf,sizeof (buf) -1 , ppos, userbuf, count);if (rc <0 )return rc; - buf[count] ='\0' ; + buf[rc] ='\0' ; ret =sscanf (buf,"%i %i" , &back->cached_reg_addr, &val);
drivers/input/joystick/xpad.c +1 -1
@@ -169,12 +169,12 @@ static const struct xpad_device { { 0x046d, 0xca88, "Logitech Compact Controller for Xbox", 0, XTYPE_XBOX }, { 0x046d, 0xca8a, "Logitech Precision Vibration Feedback Wheel", 0, XTYPE_XBOX }, { 0x046d, 0xcaa3, "Logitech DriveFx Racing Wheel", 0, XTYPE_XBOX360 }, + { 0x0502, 0x1305, "Acer NGR200", 0, XTYPE_XBOX360 }, { 0x056e, 0x2004, "Elecom JC-U3613M", 0, XTYPE_XBOX360 }, { 0x05fd, 0x1007, "Mad Catz Controller (unverified)", 0, XTYPE_XBOX }, { 0x05fd, 0x107a, "InterAct 'PowerPad Pro' X-Box pad (Germany)", 0, XTYPE_XBOX }, { 0x05fe, 0x3030, "Chic Controller", 0, XTYPE_XBOX }, { 0x05fe, 0x3031, "Chic Controller", 0, XTYPE_XBOX }, - { 0x0502, 0x1305, "Acer NGR200", 0, XTYPE_XBOX }, { 0x062a, 0x0020, "Logic3 Xbox GamePad", 0, XTYPE_XBOX }, { 0x062a, 0x0033, "Competition Pro Steering Wheel", 0, XTYPE_XBOX }, { 0x06a3, 0x0200, "Saitek Racing Wheel", 0, XTYPE_XBOX },
drivers/md/dm-bufio.c +5 -1
@@ -2750,7 +2750,11 @@ static unsigned long __evict_many(struct dm_bufio_client *c,__make_buffer_clean (b);__free_buffer_wake (b); -cond_resched (); +if (need_resched ()) { +dm_bufio_unlock (c); +cond_resched (); +dm_bufio_lock (c); + } }return count;
drivers/memstick/core/memstick.c +1 -1
@@ -324,7 +324,7 @@ EXPORT_SYMBOL(memstick_init_req);static int h_memstick_read_dev_id (struct memstick_dev *card,struct memstick_request **mrq) { -struct ms_id_register id_reg; +struct ms_id_register id_reg = {};if (!(*mrq)) { memstick_init_req(&card->current_mrq, MS_TPC_READ_REG, &id_reg,
drivers/mmc/host/bcm2835.c +2 -1
@@ -503,7 +503,8 @@ void bcm2835_prepare_dma(struct bcm2835_host *host, struct mmc_data *data) DMA_PREP_INTERRUPT | DMA_CTRL_ACK);if (!desc) { -dma_unmap_sg (dma_chan->device->dev, data->sg, sg_len, dir_data); +dma_unmap_sg (dma_chan->device->dev, data->sg, data->sg_len, + dir_data);return ; }
drivers/mmc/host/sdhci-pci-core.c +2 -1
@@ -913,7 +913,8 @@ static bool glk_broken_cqhci(struct sdhci_pci_slot *slot) {return slot->chip->pdev->device ==PCI_DEVICE_ID_INTEL_GLK_EMMC && (dmi_match (DMI_BIOS_VENDOR ,"LENOVO" ) || -dmi_match (DMI_SYS_VENDOR ,"IRBIS" )); +dmi_match (DMI_SYS_VENDOR ,"IRBIS" ) || +dmi_match (DMI_SYS_VENDOR ,"Positivo Tecnologia SA" )); }static bool jsl_broken_hs400es (struct sdhci_pci_slot *slot)
drivers/mmc/host/sdhci_am654.c +6 -3
@@ -613,7 +613,8 @@ static const struct sdhci_ops sdhci_am654_ops = {static const struct sdhci_pltfm_data sdhci_am654_pdata = { .ops = &sdhci_am654_ops, .quirks =SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 , - .quirks2 =SDHCI_QUIRK2_PRESET_VALUE_BROKEN , + .quirks2 =SDHCI_QUIRK2_PRESET_VALUE_BROKEN | +SDHCI_QUIRK2_DISABLE_HW_TIMEOUT , };static const struct sdhci_am654_driver_data sdhci_am654_sr1_drvdata = {
@@ -643,7 +644,8 @@ static const struct sdhci_ops sdhci_j721e_8bit_ops = {static const struct sdhci_pltfm_data sdhci_j721e_8bit_pdata = { .ops = &sdhci_j721e_8bit_ops, .quirks =SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 , - .quirks2 =SDHCI_QUIRK2_PRESET_VALUE_BROKEN , + .quirks2 =SDHCI_QUIRK2_PRESET_VALUE_BROKEN | +SDHCI_QUIRK2_DISABLE_HW_TIMEOUT , };static const struct sdhci_am654_driver_data sdhci_j721e_8bit_drvdata = {
@@ -667,7 +669,8 @@ static const struct sdhci_ops sdhci_j721e_4bit_ops = {static const struct sdhci_pltfm_data sdhci_j721e_4bit_pdata = { .ops = &sdhci_j721e_4bit_ops, .quirks =SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 , - .quirks2 =SDHCI_QUIRK2_PRESET_VALUE_BROKEN , + .quirks2 =SDHCI_QUIRK2_PRESET_VALUE_BROKEN | +SDHCI_QUIRK2_DISABLE_HW_TIMEOUT , };static const struct sdhci_am654_driver_data sdhci_j721e_4bit_drvdata = {
drivers/net/can/m_can/tcan4x5x-core.c +41 -20
91 lines not on this page · raw message
drivers/net/ethernet/airoha/airoha_npu.c +2 -1
@@ -344,12 +344,13 @@ struct airoha_npu *airoha_npu_get(struct device *dev)return ERR_PTR (-ENODEV ); pdev =of_find_device_by_node (np); -of_node_put (np);if (!pdev) {dev_err (dev,"cannot find device node %s\n" , np->name); +of_node_put (np);return ERR_PTR (-ENODEV ); } +of_node_put (np);if (!try_module_get (THIS_MODULE )) {dev_err (dev,"failed to get the device driver module\n" );
drivers/net/ethernet/intel/ice/ice_debugfs.c +1 -1
@@ -606,7 +606,7 @@ void ice_debugfs_fwlog_init(struct ice_pf *pf) pf->ice_debugfs_pf_fwlog =debugfs_create_dir ("fwlog" , pf->ice_debugfs_pf); -if (IS_ERR (pf->ice_debugfs_pf)) +if (IS_ERR (pf->ice_debugfs_pf_fwlog)) goto err_create_module_files; fw_modules_dir = debugfs_create_dir("modules",
drivers/net/ethernet/intel/ice/ice_lag.c +2 -1
@@ -2226,7 +2226,8 @@ bool ice_lag_is_switchdev_running(struct ice_pf *pf)struct ice_lag *lag = pf->lag;struct net_device *tmp_nd; -if (!ice_is_feature_supported (pf,ICE_F_SRIOV_LAG ) || !lag) +if (!ice_is_feature_supported (pf,ICE_F_SRIOV_LAG ) || + !lag || !lag->upper_netdev)return false;rcu_read_lock ();
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +8 -4
@@ -1154,8 +1154,9 @@ static void mlx5e_lro_update_tcp_hdr(struct mlx5_cqe64 *cqe, struct tcphdr *tcp) } } -static void mlx5e_lro_update_hdr (struct sk_buff *skb,struct mlx5_cqe64 *cqe, -u32 cqe_bcnt) +static unsigned int mlx5e_lro_update_hdr (struct sk_buff *skb, +struct mlx5_cqe64 *cqe, +u32 cqe_bcnt) {struct ethhdr *eth = (struct ethhdr *)(skb->data);struct tcphdr *tcp;
@@ -1205,6 +1206,8 @@ static void mlx5e_lro_update_hdr(struct sk_buff *skb, struct mlx5_cqe64 *cqe, tcp->check =tcp_v6_check (payload_len, &ipv6->saddr, &ipv6->daddr, check); } + +return (unsigned int )((unsigned char *)tcp + tcp->doff *4 - skb->data); }static void *mlx5e_shampo_get_packet_hd (struct mlx5e_rq *rq,u16 header_index)
@@ -1561,8 +1564,9 @@ static inline void mlx5e_build_rx_skb(struct mlx5_cqe64 *cqe,mlx5e_macsec_offload_handle_rx_skb (netdev, skb, cqe);if (lro_num_seg >1 ) { -mlx5e_lro_update_hdr (skb, cqe, cqe_bcnt); -skb_shinfo (skb)->gso_size =DIV_ROUND_UP (cqe_bcnt, lro_num_seg); +unsigned int hdrlen =mlx5e_lro_update_hdr (skb, cqe, cqe_bcnt); + +skb_shinfo (skb)->gso_size =DIV_ROUND_UP (cqe_bcnt - hdrlen, lro_num_seg);/* Subtract one since we already counted this as one * "regular" packet in mlx5e_complete_rx_cqe() */
drivers/net/ethernet/mellanox/mlx5/core/main.c +1 -0
@@ -2257,6 +2257,7 @@ static const struct pci_device_id mlx5_core_pci_table[] = { { PCI_VDEVICE(MELLANOX, 0x1021) }, /* ConnectX-7 */ { PCI_VDEVICE(MELLANOX, 0x1023) }, /* ConnectX-8 */ { PCI_VDEVICE(MELLANOX, 0x1025) }, /* ConnectX-9 */ + { PCI_VDEVICE(MELLANOX, 0x1027) }, /* ConnectX-10 */ { PCI_VDEVICE(MELLANOX, 0xa2d2) }, /* BlueField integrated ConnectX-5 network controller */ { PCI_VDEVICE(MELLANOX, 0xa2d3), MLX5_PCI_DEV_IS_VF}, /* BlueField integrated ConnectX-5 network controller VF */ { PCI_VDEVICE(MELLANOX, 0xa2d6) }, /* BlueField-2 integrated ConnectX-6 Dx network controller */
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c +7 -1
@@ -433,6 +433,12 @@ static int intel_crosststamp(ktime_t *device,return -ETIMEDOUT ; } + *system = (struct system_counterval_t ) { + .cycles =0 , + .cs_id =CSID_X86_ART , + .use_nsecs = false, + }; + num_snapshot = (readl (ioaddr +GMAC_TIMESTAMP_STATUS ) &GMAC_TIMESTAMP_ATSNS_MASK ) >>GMAC_TIMESTAMP_ATSNS_SHIFT ;
@@ -448,7 +454,7 @@ static int intel_crosststamp(ktime_t *device, } system->cycles *= intel_priv->crossts_adj; - system->cs_id =CSID_X86_ART ; + priv->plat->flags &= ~STMMAC_FLAG_INT_SNAPSHOT_EN ;return 0 ;
drivers/net/ethernet/wangxun/libwx/wx_hw.c +5 -4
@@ -1699,7 +1699,6 @@ static void wx_configure_rx_ring(struct wx *wx, struct wx_ring *ring) {u16 reg_idx = ring->reg_idx; -union wx_rx_desc *rx_desc;u64 rdba = ring->dma;u32 rxdctl;
@@ -1729,9 +1728,9 @@ static void wx_configure_rx_ring(struct wx *wx,memset (ring->rx_buffer_info,0 ,sizeof (struct wx_rx_buffer ) * ring->count); -/* initialize Rx descriptor 0 */ - rx_desc =WX_RX_DESC (ring,0 ); - rx_desc->wb.upper.length =0 ; +/* reset ntu and ntc to place SW in sync with hardware */ + ring->next_to_clean =0 ; + ring->next_to_use =0 ;/* enable receive descriptor ring */ wr32m(wx, WX_PX_RR_CFG(reg_idx),
@@ -2524,6 +2523,8 @@ void wx_update_stats(struct wx *wx) hwstats->fdirmiss +=rd32 (wx,WX_RDB_FDIR_MISS ); } +/* qmprc is not cleared on read, manual reset it */ + hwstats->qmprc =0 ;for (i =0 ; i < wx->mac.max_rx_queues; i++) hwstats->qmprc +=rd32 (wx,WX_PX_MPRC (i)); }
drivers/net/ethernet/wangxun/libwx/wx_lib.c +7 -13
@@ -173,10 +173,6 @@ static void wx_dma_sync_frag(struct wx_ring *rx_ring,skb_frag_off (frag),skb_frag_size (frag), DMA_FROM_DEVICE); - -/* If the page was released, just unmap it. */ -if (unlikely (WX_CB (skb)->page_released)) -page_pool_put_full_page (rx_ring->page_pool, rx_buffer->page, false); } static struct wx_rx_buffer *wx_get_rx_buffer(struct wx_ring *rx_ring,
@@ -226,10 +222,6 @@ static void wx_put_rx_buffer(struct wx_ring *rx_ring, struct sk_buff *skb, int rx_buffer_pgcnt) { -if (!IS_ERR (skb) &&WX_CB (skb)->dma == rx_buffer->dma) -/* the page has been released from the ring */ -WX_CB (skb)->page_released = true; -/* clear contents of rx_buffer */ rx_buffer->page =NULL ; rx_buffer->skb =NULL ;
@@ -314,7 +306,7 @@ static bool wx_alloc_mapped_page(struct wx_ring *rx_ring,return false; dma =page_pool_get_dma_addr (page); - bi->page_dma = dma; + bi->dma = dma; bi->page = page; bi->page_offset =0 ;
@@ -351,7 +343,7 @@ void wx_alloc_rx_buffers(struct wx_ring *rx_ring, u16 cleaned_count) DMA_FROM_DEVICE); rx_desc->read.pkt_addr = -cpu_to_le64 (bi->page_dma + bi->page_offset); +cpu_to_le64 (bi->dma + bi->page_offset); rx_desc++; bi++;
@@ -364,6 +356,8 @@ void wx_alloc_rx_buffers(struct wx_ring *rx_ring, u16 cleaned_count)/* clear the status bits for the next_to_use descriptor */ rx_desc->wb.upper.status_error =0 ; +/* clear the length for the next_to_use descriptor */ + rx_desc->wb.upper.length =0 ; cleaned_count--; }while (cleaned_count);
@@ -2288,9 +2282,6 @@ static void wx_clean_rx_ring(struct wx_ring *rx_ring)if (rx_buffer->skb) {struct sk_buff *skb = rx_buffer->skb; -if (WX_CB (skb)->page_released) -page_pool_put_full_page (rx_ring->page_pool, rx_buffer->page, false); -dev_kfree_skb (skb); }
@@ -2314,6 +2305,9 @@ static void wx_clean_rx_ring(struct wx_ring *rx_ring) } } +/* Zero out the descriptor ring */ +memset (rx_ring->desc,0 , rx_ring->size); + rx_ring->next_to_alloc =0 ; rx_ring->next_to_clean =0 ; rx_ring->next_to_use =0 ;
drivers/net/ethernet/wangxun/libwx/wx_type.h +0 -2
@@ -859,7 +859,6 @@ enum wx_reset_type {struct wx_cb {dma_addr_t dma;u16 append_cnt;/* number of skb's appended */ -bool page_released;bool dma_released; };
@@ -948,7 +947,6 @@ struct wx_tx_buffer {struct wx_rx_buffer {struct sk_buff *skb;dma_addr_t dma; -dma_addr_t page_dma;struct page *page;unsigned int page_offset; };
drivers/net/ethernet/xilinx/xilinx_emaclite.c +1 -1
@@ -286,7 +286,7 @@ static void xemaclite_aligned_read(u32 *src_ptr, u8 *dest_ptr,/* Read the remaining data */ for (; length >0 ; length--) - *to_u8_ptr = *from_u8_ptr; + *to_u8_ptr++ = *from_u8_ptr++; } }
drivers/net/hyperv/netvsc_drv.c +4 -1
@@ -2317,8 +2317,11 @@ static int netvsc_prepare_bonding(struct net_device *vf_netdev)if (!ndev)return NOTIFY_DONE ; -/* set slave flag before open to prevent IPv6 addrconf */ +/* Set slave flag and no addrconf flag before open +* to prevent IPv6 addrconf. +*/ vf_netdev->flags |=IFF_SLAVE ; + vf_netdev->priv_flags |=IFF_NO_ADDRCONF ;return NOTIFY_DONE ; }
drivers/net/phy/phy_device.c +4 -2
@@ -3391,7 +3391,8 @@ static int phy_probe(struct device *dev)/* Get the LEDs from the device tree, and instantiate standard * LEDs for them. */ -if (IS_ENABLED (CONFIG_PHYLIB_LEDS )) +if (IS_ENABLED (CONFIG_PHYLIB_LEDS ) && !phy_driver_is_genphy (phydev) && + !phy_driver_is_genphy_10g (phydev)) err =of_phy_leds (phydev); out:
@@ -3408,7 +3409,8 @@ static int phy_remove(struct device *dev)cancel_delayed_work_sync (&phydev->state_queue); -if (IS_ENABLED (CONFIG_PHYLIB_LEDS )) +if (IS_ENABLED (CONFIG_PHYLIB_LEDS ) && !phy_driver_is_genphy (phydev) && + !phy_driver_is_genphy_10g (phydev))phy_leds_unregister (phydev); phydev->state =PHY_DOWN ;
drivers/net/usb/sierra_net.c +4 -0
@@ -689,6 +689,10 @@ static int sierra_net_bind(struct usbnet *dev, struct usb_interface *intf) status);return -ENODEV ; } +if (!dev->status) { +dev_err (&dev->udev->dev,"No status endpoint found" ); +return -ENODEV ; + }/* Initialize sierra private data */ priv =kzalloc (sizeof *priv,GFP_KERNEL );if (!priv)
drivers/net/virtio_net.c +1 -1
@@ -7074,7 +7074,7 @@ static int virtnet_probe(struct virtio_device *vdev)otherwise get link status from config. */ netif_carrier_off (dev);if (virtio_has_feature (vi->vdev,VIRTIO_NET_F_STATUS )) { -virtnet_config_changed_work (&vi->config_work); +virtio_config_changed (vi->vdev); }else { vi->status =VIRTIO_NET_S_LINK_UP ;virtnet_update_settings (vi);
drivers/net/wireless/intel/iwlwifi/fw/api/nvm-reg.h +3 -2
@@ -1,6 +1,6 @@/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* -* Copyright (C) 2012-2014, 2018-2024 Intel Corporation +* Copyright (C) 2012-2014, 2018-2025 Intel Corporation * Copyright (C) 2013-2015 Intel Mobile Communications GmbH * Copyright (C) 2016-2017 Intel Deutschland GmbH */
@@ -754,7 +754,7 @@ struct iwl_lari_config_change_cmd_v10 {* according to the BIOS definitions. * For LARI cmd version 11 - bits 0:4 are supported. * For LARI cmd version 12 - bits 0:6 are supported and bits 7:31 are -* reserved. No need to mask out the reserved bits. +* reserved. * @force_disable_channels_bitmap: Bitmap of disabled bands/channels. * Each bit represents a set of channels in a specific band that should be * disabled
@@ -787,6 +787,7 @@ struct iwl_lari_config_change_cmd {/* Activate UNII-1 (5.2GHz) for World Wide */ #define ACTIVATE_5G2_IN_WW_MASK BIT(4)#define CHAN_STATE_ACTIVE_BITMAP_CMD_V11 0x1F +#define CHAN_STATE_ACTIVE_BITMAP_CMD_V12 0x7F/** * struct iwl_pnvm_init_complete_ntfy - PNVM initialization complete
drivers/net/wireless/intel/iwlwifi/fw/regulatory.c +1 -0
@@ -603,6 +603,7 @@ int iwl_fill_lari_config(struct iwl_fw_runtime *fwrt, ret =iwl_bios_get_dsm (fwrt,DSM_FUNC_ACTIVATE_CHANNEL , &value);if (!ret) { + value &=CHAN_STATE_ACTIVE_BITMAP_CMD_V12 ;if (cmd_ver <8 ) value &= ~ACTIVATE_5G2_IN_WW_MASK ;
drivers/net/wireless/intel/iwlwifi/mld/regulatory.c +3 -1
@@ -251,8 +251,10 @@ void iwl_mld_configure_lari(struct iwl_mld *mld)cpu_to_le32 (value &=DSM_UNII4_ALLOW_BITMAP ); ret =iwl_bios_get_dsm (fwrt,DSM_FUNC_ACTIVATE_CHANNEL , &value); -if (!ret) +if (!ret) { + value &=CHAN_STATE_ACTIVE_BITMAP_CMD_V12 ; cmd.chan_state_active_bitmap =cpu_to_le32 (value); + } ret =iwl_bios_get_dsm (fwrt,DSM_FUNC_ENABLE_6E , &value);if (!ret)
drivers/nvme/host/core.c +11 -16
@@ -377,12 +377,12 @@ static void nvme_log_err_passthru(struct request *req) nr->status &NVME_SC_MASK ,/* Status Code */ nr->status &NVME_STATUS_MORE ?"MORE " :"" , nr->status &NVME_STATUS_DNR ?"DNR " :"" , - nr->cmd->common.cdw10, - nr->cmd->common.cdw11, - nr->cmd->common.cdw12, - nr->cmd->common.cdw13, - nr->cmd->common.cdw14, - nr->cmd->common.cdw15); +le32_to_cpu (nr->cmd->common.cdw10), +le32_to_cpu (nr->cmd->common.cdw11), +le32_to_cpu (nr->cmd->common.cdw12), +le32_to_cpu (nr->cmd->common.cdw13), +le32_to_cpu (nr->cmd->common.cdw14), + le32_to_cpu(nr->cmd->common.cdw15)); }enum nvme_disposition {
@@ -759,6 +759,10 @@ blk_status_t nvme_fail_nonready_command(struct nvme_ctrl *ctrl, !test_bit(NVME_CTRL_FAILFAST_EXPIRED, &ctrl->flags) && !blk_noretry_request(rq) && !(rq->cmd_flags & REQ_NVME_MPATH))return BLK_STS_RESOURCE ; + +if (!(rq->rq_flags &RQF_DONTPREP )) +nvme_clear_nvme_request (rq); +return nvme_host_path_error (rq); }EXPORT_SYMBOL_GPL (nvme_fail_nonready_command);
@@ -3354,15 +3358,6 @@ static int nvme_init_identify(struct nvme_ctrl *ctrl)if (ret) goto out_free; } - -if (le16_to_cpu (id->awupf) != ctrl->subsys->awupf) { -dev_err_ratelimited (ctrl->device, -"inconsistent AWUPF, controller not added (%u/%u).\n" , -le16_to_cpu (id->awupf), ctrl->subsys->awupf); - ret = -EINVAL ; - goto out_free; - } -memcpy (ctrl->subsys->firmware_rev, id->fr,sizeof (ctrl->subsys->firmware_rev));
@@ -3889,7 +3884,7 @@ static void nvme_ns_add_to_ctrl_list(struct nvme_ns *ns)return ; } } -list_add (&ns->list, &ns->ctrl->namespaces); +list_add_rcu (&ns->list, &ns->ctrl->namespaces); }static void nvme_alloc_ns (struct nvme_ctrl *ctrl,struct nvme_ns_info *info)
drivers/nvme/target/tcp.c +2 -2
@@ -1967,10 +1967,10 @@ static void nvmet_tcp_alloc_queue(struct nvmet_tcp_port *port,struct sock *sk = queue->sock->sk;/* Restore the default callbacks before starting upcall */ -read_lock_bh (&sk->sk_callback_lock); +write_lock_bh (&sk->sk_callback_lock); sk->sk_user_data =NULL ; sk->sk_data_ready = port->data_ready; -read_unlock_bh (&sk->sk_callback_lock); +write_unlock_bh (&sk->sk_callback_lock);if (!nvmet_tcp_try_peek_pdu (queue)) {if (!nvmet_tcp_tls_handshake (queue))return ;
drivers/nvmem/imx-ocotp-ele.c +4 -1
@@ -12,6 +12,7 @@#include <linux/of.h> #include <linux/platform_device.h> #include <linux/slab.h> +#include <linux/if_ether.h> /* ETH_ALEN */ enum fuse_type {FUSE_FSB =BIT (0 ),
@@ -118,9 +119,11 @@ static int imx_ocotp_cell_pp(void *context, const char *id, int index,int i;/* Deal with some post processing of nvmem cell data */ -if (id && !strcmp (id,"mac-address" )) +if (id && !strcmp (id,"mac-address" )) { + bytes =min (bytes,ETH_ALEN );for (i =0 ; i < bytes /2 ; i++)swap (buf[i], buf[bytes - i -1 ]); + }return 0 ; }
drivers/nvmem/imx-ocotp.c +4 -1
@@ -23,6 +23,7 @@#include <linux/platform_device.h> #include <linux/slab.h> #include <linux/delay.h> +#include <linux/if_ether.h> /* ETH_ALEN */ #define IMX_OCOTP_OFFSET_B0W0 0x400/* Offset from base address of the * OTP Bank0 Word0
@@ -227,9 +228,11 @@ static int imx_ocotp_cell_pp(void *context, const char *id, int index,int i;/* Deal with some post processing of nvmem cell data */ -if (id && !strcmp (id,"mac-address" )) +if (id && !strcmp (id,"mac-address" )) { + bytes =min (bytes,ETH_ALEN );for (i =0 ; i < bytes /2 ; i++)swap (buf[i], buf[bytes - i -1 ]); + }return 0 ; }
drivers/nvmem/layouts/u-boot-env.c +3 -3
@@ -92,7 +92,7 @@ int u_boot_env_parse(struct device *dev, struct nvmem_device *nvmem,size_t crc32_data_offset;size_t crc32_data_len;size_t crc32_offset; -__le32 *crc32_addr; +uint32_t *crc32_addr;size_t data_offset;size_t data_len;size_t dev_size;
@@ -143,8 +143,8 @@ int u_boot_env_parse(struct device *dev, struct nvmem_device *nvmem, goto err_kfree; } - crc32_addr = (__le32 *)(buf + crc32_offset); - crc32 =le32_to_cpu (*crc32_addr); + crc32_addr = (uint32_t *)(buf + crc32_offset); + crc32 = *crc32_addr; crc32_data_len = dev_size - crc32_data_offset; data_len = dev_size - data_offset;
drivers/phy/phy-core.c +4 -1
@@ -994,7 +994,8 @@ struct phy *phy_create(struct device *dev, struct device_node *node, }device_initialize (&phy->dev); -mutex_init (&phy->mutex); +lockdep_register_key (&phy->lockdep_key); +mutex_init_with_key (&phy->mutex, &phy->lockdep_key); phy->dev.class = &phy_class; phy->dev.parent = dev;
@@ -1259,6 +1260,8 @@ static void phy_release(struct device *dev)dev_vdbg (dev,"releasing '%s'\n" ,dev_name (dev));debugfs_remove_recursive (phy->debugfs);regulator_put (phy->pwr); +mutex_destroy (&phy->mutex); +lockdep_unregister_key (&phy->lockdep_key);ida_free (&phy_ida, phy->id);kfree (phy); }
drivers/phy/tegra/xusb-tegra186.c +46 -29
122 lines not on this page · raw message
drivers/phy/tegra/xusb.h +1 -0
@@ -434,6 +434,7 @@ struct tegra_xusb_padctl_soc {bool need_fake_usb3_port;bool poll_trk_completed;bool trk_hw_mode; +bool trk_update_on_idle;bool supports_lp_cfg_en; };
drivers/pmdomain/governor.c +16 -2
@@ -8,6 +8,7 @@#include <linux/pm_domain.h> #include <linux/pm_qos.h> #include <linux/hrtimer.h> +#include <linux/cpu.h> #include <linux/cpuidle.h> #include <linux/cpumask.h> #include <linux/ktime.h>
@@ -349,6 +350,8 @@ static bool cpu_power_down_ok(struct dev_pm_domain *pd)struct cpuidle_device *dev;ktime_t domain_wakeup, next_hrtimer;ktime_t now =ktime_get (); +struct device *cpu_dev; +s64 cpu_constraint, global_constraint;s64 idle_duration_ns;int cpu, i;
@@ -359,6 +362,7 @@ static bool cpu_power_down_ok(struct dev_pm_domain *pd)if (!(genpd->flags &GENPD_FLAG_CPU_DOMAIN ))return true; + global_constraint =cpu_latency_qos_limit ();/* * Find the next wakeup for any of the online CPUs within the PM domain * and its subdomains. Note, we only need the genpd->cpus, as it already
Lines of this file are not shown. View the raw message.
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +55 -40
95 lines not on this page · raw message
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c +0 -1
Lines of this file are not shown. View the raw message.
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h +0 -2
Lines of this file are not shown. View the raw message.
fs/smb/client/smbdirect.c +267 -277
544 lines not on this page · raw message
fs/smb/client/smbdirect.h +6 -58
64 lines not on this page · raw message
fs/smb/common/smbdirect/smbdirect.h new file +37 -0
Lines of this file are not shown. View the raw message.
fs/smb/common/smbdirect/smbdirect_pdu.h new file +55 -0
55 lines not on this page · raw message
fs/smb/common/smbdirect/smbdirect_socket.h new file +43 -0
43 lines not on this page · raw message
include/net/bluetooth/hci_core.h +27 -23
50 lines not on this page · raw message
net/8021q/vlan.c +33 -9
42 lines not on this page · raw message
net/bluetooth/hci_sync.c +31 -32
63 lines not on this page · raw message
net/mptcp/protocol.c +48 -8
56 lines not on this page · raw message
sound/core/compress_offload.c +24 -24
48 lines not on this page · raw message
tools/hv/hv_fcopy_uio_daemon.c +81 -10
91 lines not on this page · raw message
tools/testing/selftests/sched_ext/exit.c +8 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.