Linux 6.16.10
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.16.10 kernel.
All users of the 6.16 kernel series must upgrade.
The updated 6.16.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.16.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/admin-guide/laptops/lg-laptop.rst | 4 Makefile | 2 arch/arm/boot/dts/intel/socfpga/socfpga_cyclone5_sodia.dts | 6 arch/arm/boot/dts/marvell/kirkwood-openrd-client.dts | 2 arch/arm64/boot/dts/freescale/imx8mp.dtsi | 4 arch/arm64/boot/dts/marvell/cn9130-cf.dtsi | 7 arch/arm64/boot/dts/marvell/cn9131-cf-solidwan.dts | 6 arch/arm64/boot/dts/marvell/cn9132-clearfog.dts | 22 arch/arm64/boot/dts/marvell/cn9132-sr-cex7.dtsi | 8 arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dtsi | 3 arch/riscv/include/asm/pgtable.h | 17 arch/x86/Kconfig | 2 arch/x86/include/asm/topology.h | 10 arch/x86/kernel/cpu/topology.c | 13 drivers/cpufreq/cpufreq.c | 20 drivers/firewire/core-cdev.c | 2 drivers/gpio/gpio-regmap.c | 2 drivers/gpio/gpiolib-acpi-quirks.c | 14 drivers/gpio/gpiolib.c | 21 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 44 drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 3 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 7 drivers/gpu/drm/amd/display/dc/dc.h | 1 drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c | 6 drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c | 6 drivers/gpu/drm/ast/ast_dp.c | 2 drivers/gpu/drm/gma500/oaktrail_hdmi.c | 2 drivers/gpu/drm/i915/display/intel_ddi.c | 5 drivers/gpu/drm/panfrost/panfrost_drv.c | 61 - drivers/gpu/drm/panthor/panthor_sched.c | 8 drivers/gpu/drm/xe/abi/guc_actions_abi.h | 5 drivers/gpu/drm/xe/abi/guc_klvs_abi.h | 40 drivers/gpu/drm/xe/xe_bo_evict.c | 4 drivers/gpu/drm/xe/xe_configfs.c | 2 drivers/gpu/drm/xe/xe_device_sysfs.c | 2 drivers/gpu/drm/xe/xe_gt.c | 3 drivers/gpu/drm/xe/xe_guc.c | 62 - drivers/gpu/drm/xe/xe_guc.h | 1 drivers/gpu/drm/xe/xe_guc_submit.c | 87 - drivers/gpu/drm/xe/xe_guc_submit.h | 2 drivers/gpu/drm/xe/xe_uc.c | 4 drivers/hid/amd-sfh-hid/amd_sfh_client.c | 12 drivers/hid/amd-sfh-hid/amd_sfh_common.h | 3 drivers/hid/amd-sfh-hid/amd_sfh_pcie.c | 4 drivers/hid/hid-asus.c | 3 drivers/hid/hid-cp2112.c | 10 drivers/hid/hid-multitouch.c | 45 drivers/hid/intel-thc-hid/intel-quickspi/pci-quickspi.c | 2 drivers/hid/intel-thc-hid/intel-quickspi/quickspi-dev.h | 2 drivers/i2c/busses/i2c-designware-platdrv.c | 7 drivers/infiniband/hw/mlx5/devx.c | 1 drivers/iommu/iommufd/eventq.c | 9 drivers/iommu/iommufd/main.c | 35 drivers/mmc/host/sdhci-cadence.c | 11 drivers/net/can/rcar/rcar_can.c | 8 drivers/net/can/spi/hi311x.c | 1 drivers/net/can/sun4i_can.c | 1 drivers/net/can/usb/etas_es58x/es58x_core.c | 3 drivers/net/can/usb/mcba_usb.c | 1 drivers/net/can/usb/peak_usb/pcan_usb_core.c | 2 drivers/net/dsa/lantiq_gswip.c | 21 drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c | 2 drivers/net/ethernet/freescale/fec_main.c | 4 drivers/net/ethernet/intel/i40e/i40e.h | 3 drivers/net/ethernet/intel/i40e/i40e_main.c | 26 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 110 + drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h | 3 drivers/net/ethernet/marvell/octeontx2/af/cgx.c | 3 drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_stats.c | 1 drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 2 drivers/net/ethernet/mellanox/mlx5/core/fs_core.h | 1 drivers/net/ethernet/mellanox/mlx5/core/fs_counters.c | 25 drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action.c | 7 drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws.c | 18 drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws_pools.c | 8 drivers/net/ethernet/mellanox/mlx5/core/steering/hws/mlx5hws.h | 7 drivers/net/phy/bcm-phy-ptp.c | 6 drivers/net/phy/sfp.c | 24 drivers/net/tun.c | 3 drivers/net/wireless/intel/iwlwifi/pcie/tx.c | 3 drivers/net/wireless/virtual/virt_wifi.c | 4 drivers/pinctrl/mediatek/pinctrl-airoha.c | 31 drivers/platform/x86/lg-laptop.c | 34 drivers/platform/x86/oxpec.c | 7 drivers/spi/spi-cadence-quadspi.c | 90 + drivers/ufs/core/ufs-mcq.c | 4 drivers/usb/core/quirks.c | 2 drivers/vhost/net.c | 33 drivers/video/fbdev/core/fbcon.c | 13 fs/afs/server.c | 3 fs/btrfs/volumes.c | 5 fs/hugetlbfs/inode.c | 10 fs/netfs/buffered_read.c | 10 fs/netfs/direct_read.c | 7 fs/netfs/direct_write.c | 6 fs/netfs/internal.h | 1 fs/netfs/objects.c | 30 fs/netfs/read_pgpriv2.c | 2 fs/netfs/read_single.c | 2 fs/netfs/write_issue.c | 3 fs/nfs/file.c | 33 fs/nfs/inode.c | 9 fs/nfs/internal.h | 2 fs/nfs/nfs42proc.c | 33 fs/nfs/nfstrace.h | 1 fs/proc/task_mmu.c | 3 fs/smb/client/smb2inode.c | 2 fs/smb/server/transport_rdma.c | 22 include/crypto/if_alg.h | 2 include/linux/firmware/imx/sm.h | 47 include/linux/mlx5/fs.h | 2 include/net/bluetooth/hci_core.h | 21 kernel/bpf/core.c | 5 kernel/bpf/verifier.c | 6 kernel/fork.c | 2 kernel/futex/requeue.c | 6 kernel/sched/ext_idle.c | 52 kernel/sched/ext_idle.h | 7 kernel/trace/fgraph.c | 12 kernel/trace/fprobe.c | 7 kernel/trace/trace_dynevent.c | 4 kernel/trace/trace_osnoise.c | 3 kernel/vhost_task.c | 3 mm/damon/sysfs.c | 4 mm/kmsan/core.c | 10 mm/kmsan/kmsan_test.c | 16 net/bluetooth/hci_event.c | 30 net/bluetooth/hci_sync.c | 7 net/bluetooth/mgmt.c | 259 +++- net/bluetooth/mgmt_util.c | 46 net/bluetooth/mgmt_util.h | 3 net/core/skbuff.c | 2 net/ipv4/nexthop.c | 7 net/smc/smc_loopback.c | 14 net/xfrm/xfrm_device.c | 2 net/xfrm/xfrm_state.c | 3 sound/pci/hda/patch_realtek.c | 11 sound/soc/intel/boards/sof_es8336.c | 10 sound/soc/intel/boards/sof_rt5682.c | 7 sound/soc/intel/common/soc-acpi-intel-ptl-match.c | 32 sound/usb/mixer_quirks.c | 571 +++++++--- sound/usb/quirks.c | 24 sound/usb/usbaudio.h | 4 tools/testing/selftests/bpf/prog_tests/free_timer.c | 4 tools/testing/selftests/bpf/prog_tests/timer.c | 4 tools/testing/selftests/bpf/prog_tests/timer_crash.c | 4 tools/testing/selftests/bpf/prog_tests/timer_lockup.c | 4 tools/testing/selftests/bpf/prog_tests/timer_mim.c | 4 tools/testing/selftests/filesystems/mount-notify/mount-notify_test.c | 17 tools/testing/selftests/filesystems/mount-notify/mount-notify_test_ns.c | 18 tools/testing/selftests/net/fib_nexthops.sh | 12 153 files changed, 1832 insertions(+), 851 deletions(-)
Adrián Larumbe (1):
drm/panthor: Defer scheduler entitiy destruction to queue release
Akinobu Mita (1):
mm/damon/sysfs: do not ignore callback's return value in damon_sysfs_damon_call()
Aleksander Jan Bajkowski (1):
net: sfp: add quirk for FLYPRO copper SFP+ module
Alexander Popov (1):
x86/Kconfig: Reenable PTDUMP on i386
Alexandre Ghiti (1):
riscv: Use an atomic xchg in pudp_huge_get_and_clear()
Alok Tiwari (2):
scsi: ufs: mcq: Fix memory allocation checks for SQE and CQE
bnxt_en: correct offset handling for IPv6 destination address
Amit Chaudhari (1):
HID: asus: add support for missing PX series fn keys
Andrea Righi (2):
sched_ext: idle: Make local functions static in ext_idle.c
sched_ext: idle: Handle migration-disabled tasks in BPF code
Antheas Kapenekakis (1):
platform/x86: oxpec: Add support for OneXPlayer X1 Mini Pro (Strix Point)
Balamurugan C (3):
ASoC: Intel: soc-acpi: Add entry for sof_es8336 in PTL match table.
ASoC: Intel: soc-acpi: Add entry for HDMI_In capture support in PTL match table
ASoC: Intel: sof_rt5682: Add HDMI-In capture with rt5682 support for PTL.
Basavaraj Natikar (1):
HID: amd_sfh: Add sync across amd sfh work functions
Benoît Monin (1):
mmc: sdhci-cadence: add Mobileye eyeQ support
Carolina Jubran (1):
net/mlx5e: Fix missing FEC RS stats for RS_544_514_INTERLEAVED_QUAD
Chen Ni (1):
ALSA: usb-audio: Convert comma to semicolon
Chris Morgan (1):
net: sfp: add quirk for Potron SFP+ XGSPON ONU Stick
Christian Loehle (1):
cpufreq: Initialize cpufreq-based invariance before subsys
Christian Marangi (2):
pinctrl: airoha: fix wrong PHY LED mux value for LED1 GPIO46
pinctrl: airoha: fix wrong MDIO function bitmaks
Cristian Ciocaltea (8):
ALSA: usb-audio: Fix code alignment in mixer_quirks
ALSA: usb-audio: Fix whitespace & blank line issues in mixer_quirks
ALSA: usb-audio: Fix block comments in mixer_quirks
ALSA: usb-audio: Drop unnecessary parentheses in mixer_quirks
ALSA: usb-audio: Avoid multiple assignments in mixer_quirks
ALSA: usb-audio: Simplify NULL comparison in mixer_quirks
ALSA: usb-audio: Remove unneeded wmb() in mixer_quirks
ALSA: usb-audio: Add mixer quirk for Sony DualSense PS5
Cryolitia PukNgae (1):
ALSA: usb-audio: move mixer_quirks' min_mute into common quirk
Dan Carpenter (1):
octeontx2-pf: Fix potential use after free in otx2_tc_add_flow()
Daniel Lee (1):
platform/x86: lg-laptop: Fix WMAB call in fan_mode_store()
Eric Biggers (2):
crypto: af_alg - Fix incorrect boolean values in af_alg_ctx
kmsan: fix out-of-bounds access to shadow memory
Eric Huang (1):
drm/amdkfd: fix p2p links bug in topology
Geert Uytterhoeven (1):
can: rcar_can: rcar_can_resume(): fix s2ram with PSCI
Greg Kroah-Hartman (1):
Linux 6.16.10
Hans de Goede (1):
gpiolib: Extend software-node support to support secondary software-nodes
Heikki Krogerus (1):
i2c: designware: Add quirk for Intel Xe
Ido Schimmel (2):
nexthop: Forbid FDB status change while nexthop is in a group
selftests: fib_nexthops: Fix creation of non-FDB nexthops
Ioana Ciornei (1):
gpio: regmap: fix memory leak of gpio_regmap structure
Jacob Keller (2):
broadcom: fix support for PTP_PEROUT_DUTY_CYCLE
broadcom: fix support for PTP_EXTTS_REQUEST2 ioctl
Jakub Acs (1):
fs/proc/task_mmu: check p->vec_buf for NULL
James Guan (1):
wifi: virt_wifi: Fix page fault on connect
Jason Baron (1):
net: allow alloc_skb_with_frags() to use MAX_SKB_FRAGS
Jason Gunthorpe (1):
iommufd: Fix race during abort for file descriptors
Jason Wang (1):
vhost-net: flush batched before enabling notifications
Jiayi Li (1):
usb: core: Add 0x prefix to quirks debug output
Jihed Chaibi (1):
ARM: dts: kirkwood: Fix sound DAI cells for OpenRD clients
Jimmy Hon (1):
arm64: dts: rockchip: Fix the headphone detection on the orangepi 5
Jinjiang Tu (1):
mm/hugetlb: fix folio is still mapped when deleted
Jiri Olsa (1):
bpf: Check the helper function is valid in get_helper_proto
Johannes Berg (2):
wifi: iwlwifi: fix byte count table for old devices
wifi: iwlwifi: pcie: fix byte count table for some devices
Josua Mayer (3):
arm64: dts: marvell: cn913x-solidrun: fix sata ports status
arm64: dts: marvell: cn9132-clearfog: disable eMMC high-speed modes
arm64: dts: marvell: cn9132-clearfog: fix multi-lane pci x2 and x4 ports
Kerem Karabay (4):
HID: multitouch: Get the contact ID from HID_DG_TRANSDUCER_INDEX fields in case of Apple Touch Bar
HID: multitouch: support getting the tip state from HID_DG_TOUCH fields in Apple Touch Bar
HID: multitouch: take cls->maxcontacts into account for Apple Touch Bar even without a HID_DG_CONTACTMAX field
HID: multitouch: specify that Apple Touch Bar is direct
Khairul Anuar Romli (2):
spi: cadence-quadspi: Implement refcount to handle unbind during busy
spi: cadence-qspi: defer runtime support on socfpga if reset bit is enabled
Leon Hwang (2):
bpf: Reject bpf_timer for PREEMPT_RT
selftests/bpf: Skip timer cases when bpf_timer is not supported
Louis-Alexis Eyraud (3):
drm/panfrost: Drop duplicated Mediatek supplies arrays drm/panfrost: Commonize Mediatek power domain array definitions drm/panfrost: Add support for Mali on the MT8370 SoC
Lucas De Marchi (1):
drm/xe: Fix build with CONFIG_MODULES=n
Luiz Augusto von Dentz (4):
Bluetooth: hci_sync: Fix hci_resume_advertising_sync
Bluetooth: hci_event: Fix UAF in hci_conn_tx_dequeue
Bluetooth: hci_event: Fix UAF in hci_acl_create_conn_sync
Bluetooth: MGMT: Fix possible UAFs
Lukasz Czapnik (8):
i40e: add validation for ring_len param
i40e: fix idx validation in i40e_validate_queue_map
i40e: fix idx validation in config queues msg
i40e: fix input validation logic for action_meta
i40e: fix validation of VF state in get resources
i40e: add max boundary check for VF filters
i40e: add mask to apply valid bits for itr_idx
i40e: improve VF MAC filters accounting
Marc Kleine-Budde (1):
net: fec: rename struct fec_devinfo fec_imx6x_info -> fec_imx6sx_info
Mario Limonciello (AMD) (1):
gpiolib: acpi: Add quirk for ASUS ProArt PX13
Mark Harmstone (1):
btrfs: don't allow adding block device of less than 1 MB
Masami Hiramatsu (Google) (3):
tracing: dynevent: Add a missing lockdown check on dynevent
tracing: fgraph: Protect return handler from recursion loop
tracing: fprobe: Fix to remove recorded module addresses from filter
Matthew Schwartz (1):
drm/amd/display: Only restore backlight after amdgpu_dm_init or dm_resume
Max Kellermann (1):
netfs: fix reference leak
Melissa Wen (1):
drm/amd/display: remove output_tf_change flag
Michael S. Tsirkin (1):
Revert "vhost/net: Defer TX queue re-enable until after sendmsg"
Michal Wajdeczko (1):
drm/xe/vf: Don't expose sysfs attributes not applicable for VFs
Moshe Shemesh (1):
net/mlx5: fs, fix UAF in flow counter release
Nirmoy Das (1):
drm/ast: Use msleep instead of mdelay for edid read
Nobuhiro Iwamatsu (1):
ARM: dts: socfpga: sodia: Fix mdio bus probe and PHY address
Or Har-Toov (1):
IB/mlx5: Fix obj_type mismatch for SRQ event subscriptions
Peng Fan (4):
firmware: imx: Add stub functions for SCMI MISC API
firmware: imx: Add stub functions for SCMI LMM API
firmware: imx: Add stub functions for SCMI CPU API
arm64: dts: imx8mp: Correct thermal sensor index
Petr Malat (1):
ethernet: rvu-af: Remove slash from the driver name
Sabrina Dubroca (2):
xfrm: xfrm_alloc_spi shouldn't use 0 as SPI
xfrm: fix offloading of cross-family tunnels
Samasth Norway Ananda (1):
fbcon: fix integer overflow in fbcon_do_set_font
Sang-Heon Jeon (1):
smb: client: fix wrong index reference in smb2_compound_op()
Sasha Levin (2):
Revert "drm/xe/guc: Set RCS/CCS yield policy" Revert "drm/xe/guc: Enable extended CAT error reporting"
Sebastian Andrzej Siewior (3):
vhost: Take a reference on the task in struct vhost_task.
futex: Prevent use-after-free during requeue-PI
futex: Use correct exit on failure from futex_hash_allocate_default()
Sidraya Jayagond (1):
net/smc: fix warning in smc_rx_splice() when calling get_page()
Stefan Binding (1):
ALSA: hda/realtek: Add support for ASUS NUC using CS35L41 HDA
Stefan Metzmacher (2):
smb: server: don't use delayed_work for post_recv_credits_work
smb: server: use disable_work_sync in transport_rdma.c
Stéphane Grosjean (1):
can: peak_usb: fix shift-out-of-bounds issue
Suraj Kandpal (1):
drm/i915/ddi: Guard reg_val against a INVALID_TRANSCODER
Sébastien Szymanski (1):
HID: cp2112: fix setter callbacks return value
Takashi Iwai (1):
ALSA: usb-audio: Fix build with CONFIG_INPUT=n
Takashi Sakamoto (1):
firewire: core: fix overlooked update of subsystem ABI version
Thomas Gleixner (1):
x86/topology: Implement topology_is_core_online() to address SMT regression
Thomas Hellström (1):
drm/xe: Don't copy pinned kernel bos twice on suspend
Thomas Zimmermann (1):
fbcon: Fix OOB access in font allocation
Trond Myklebust (2):
NFS: Protect against 'eof page pollution'
NFSv4.2: Protect copy offload and clone against 'eof page pollution'
Vincent Mailhol (4):
can: etas_es58x: populate ndo_change_mtu() to prevent buffer overflow
can: hi311x: populate ndo_change_mtu() to prevent buffer overflow
can: sun4i_can: populate ndo_change_mtu() to prevent buffer overflow
can: mcba_usb: populate ndo_change_mtu() to prevent buffer overflow
Vlad Dogaru (1):
net/mlx5: HWS, remove unused create_dest_array parameter
Vladimir Oltean (2):
net: dsa: lantiq_gswip: move gswip_add_single_port_br() call to port_setup()
net: dsa: lantiq_gswip: suppress -EINVAL errors for bridge FDB entries added to the CPU port
Wang Liang (2):
net: tun: Update napi->skb after XDP process tracing/osnoise: Fix slab-out-of-bounds in _parse_integer_limit()
Xing Guo (1):
selftests/fs/mount-notify: Fix compilation failure.
Xinpeng Sun (1):
HID: intel-thc-hid: intel-quickspi: Add WCL Device IDs
Yevgeny Kliteynik (1):
net/mlx5: HWS, ignore flow level for multi-dest table
Yifan Zhang (1):
amd/amdkfd: correct mem limit calculation for small APUs
Zabelin Nikita (1):
drm/gma500: Fix null dereference in hdmi teardown
Zhen Ni (1):
afs: Fix potential null pointer dereference in afs_put_server
noble.yang (1):
ALSA: usb-audio: Add DSD support for Comtrue USB Audio device
qaqland (1):
ALSA: usb-audio: Add mute TLV for playback volumes on more devices
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/laptops/lg-laptop.rst +2 -2
@@ -48,8 +48,8 @@ This value is reset to 100 when the kernel boots. Fan mode -------- -Writing 1/0 to /sys/devices/platform/lg-laptop/fan_mode disables/enables -the fan silent mode. +Writing 0/1/2 to /sys/devices/platform/lg-laptop/fan_mode sets fan mode to +Optimal/Silent/Performance respectively. USB charge
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 16 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm/boot/dts/intel/socfpga/socfpga_cyclone5_sodia.dts +4 -2
@@ -66,8 +66,10 @@ &gmac1 { mdio0 { #address-cells = <1>; #size-cells = <0>; - phy0: ethernet-phy@0 { - reg = <0>; + compatible = "snps,dwmac-mdio"; + + phy0: ethernet-phy@4 { + reg = <4>; rxd0-skew-ps = <0>; rxd1-skew-ps = <0>; rxd2-skew-ps = <0>;
arch/arm/boot/dts/marvell/kirkwood-openrd-client.dts +1 -1
@@ -38,7 +38,7 @@ sound { simple-audio-card,mclk-fs = <256>; simple-audio-card,cpu { - sound-dai = <&audio0 0>; + sound-dai = <&audio0>; }; simple-audio-card,codec {
arch/arm64/boot/dts/freescale/imx8mp.dtsi +2 -2
@@ -298,7 +298,7 @@ thermal-zones { cpu-thermal { polling-delay-passive = <250>; polling-delay = <2000>; - thermal-sensors = <&tmu 0>; + thermal-sensors = <&tmu 1>; trips { cpu_alert0: trip0 { temperature = <85000>;
@@ -328,7 +328,7 @@ map0 { soc-thermal { polling-delay-passive = <250>; polling-delay = <2000>; - thermal-sensors = <&tmu 1>; + thermal-sensors = <&tmu 0>; trips { soc_alert0: trip0 { temperature = <85000>;
arch/arm64/boot/dts/marvell/cn9130-cf.dtsi +4 -3
@@ -152,11 +152,12 @@ expander0_pins: cp0-expander0-pins { /* SRDS #0 - SATA on M.2 connector */ &cp0_sata0 { - phys = <&cp0_comphy0 1>; status = "okay"; - /* only port 1 is available */ - /delete-node/ sata-port@0; + sata-port@1 { + phys = <&cp0_comphy0 1>; + status = "okay"; + }; }; /* microSD */
arch/arm64/boot/dts/marvell/cn9131-cf-solidwan.dts +4 -2
@@ -563,11 +563,13 @@ &cp1_rtc { /* SRDS #1 - SATA on M.2 (J44) */ &cp1_sata0 { - phys = <&cp1_comphy1 0>; status = "okay"; /* only port 0 is available */ - /delete-node/ sata-port@1; + sata-port@0 { + phys = <&cp1_comphy1 0>; + status = "okay"; + }; }; &cp1_syscon0 {
arch/arm64/boot/dts/marvell/cn9132-clearfog.dts +16 -6
@@ -413,7 +413,13 @@ fixed-link { /* SRDS #0,#1,#2,#3 - PCIe */ &cp0_pcie0 { num-lanes = <4>; - phys = <&cp0_comphy0 0>, <&cp0_comphy1 0>, <&cp0_comphy2 0>, <&cp0_comphy3 0>; + /* + * The mvebu-comphy driver does not currently know how to pass correct + * lane-count to ATF while configuring the serdes lanes. + * Rely on bootloader configuration only. + * + * phys = <&cp0_comphy0 0>, <&cp0_comphy1 0>, <&cp0_comphy2 0>, <&cp0_comphy3 0>; + */ status = "okay"; };
@@ -475,7 +481,13 @@ &cp1_eth0 { /* SRDS #0,#1 - PCIe */ &cp1_pcie0 { num-lanes = <2>; - phys = <&cp1_comphy0 0>, <&cp1_comphy1 0>; + /* + * The mvebu-comphy driver does not currently know how to pass correct + * lane-count to ATF while configuring the serdes lanes. + * Rely on bootloader configuration only. + * + * phys = <&cp1_comphy0 0>, <&cp1_comphy1 0>; + */ status = "okay"; };
@@ -512,10 +524,9 @@ &cp1_sata0 { status = "okay"; /* only port 1 is available */ - /delete-node/ sata-port@0; - sata-port@1 { phys = <&cp1_comphy3 1>; + status = "okay"; }; };
@@ -631,9 +642,8 @@ &cp2_sata0 { status = "okay"; /* only port 1 is available */ - /delete-node/ sata-port@0; - sata-port@1 { + status = "okay"; phys = <&cp2_comphy3 1>; }; };
arch/arm64/boot/dts/marvell/cn9132-sr-cex7.dtsi +8 -0
@@ -137,6 +137,14 @@ &ap_sdhci0 { pinctrl-0 = <&ap_mmc0_pins>; pinctrl-names = "default"; vqmmc-supply = <&v_1_8>; + /* + * Not stable in HS modes - phy needs "more calibration", so disable + * UHS (by preventing voltage switch), SDR104, SDR50 and DDR50 modes. + */ + no-1-8-v; + no-sd; + no-sdio; + non-removable; status = "okay"; };
arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dtsi +1 -2
@@ -42,9 +42,8 @@ analog-sound { simple-audio-card,bitclock-master = <&masterdai>; simple-audio-card,format = "i2s"; simple-audio-card,frame-master = <&masterdai>; - simple-audio-card,hp-det-gpios = <&gpio1 RK_PD5 GPIO_ACTIVE_LOW>; + simple-audio-card,hp-det-gpios = <&gpio1 RK_PD5 GPIO_ACTIVE_HIGH>; simple-audio-card,mclk-fs = <256>; - simple-audio-card,pin-switches = "Headphones"; simple-audio-card,routing = "Headphones", "LOUT1", "Headphones", "ROUT1",
arch/riscv/include/asm/pgtable.h +17 -0
@@ -964,6 +964,23 @@ static inline int pudp_test_and_clear_young(struct vm_area_struct *vma,return ptep_test_and_clear_young (vma, address, (pte_t *)pudp); } +#define __HAVE_ARCH_PUDP_HUGE_GET_AND_CLEAR +static inline pud_t pudp_huge_get_and_clear (struct mm_struct *mm, +unsigned long address,pud_t *pudp) +{ +#ifdef CONFIG_SMP +pud_t pud =__pud (xchg (&pudp->pud,0 )); +#else +pud_t pud = *pudp; + +pud_clear (pudp); +#endif + +page_table_check_pud_clear (mm, pud); + +return pud; +} +static inline int pud_young (pud_t pud) {return pte_young (pud_pte (pud));
arch/x86/Kconfig +1 -1
@@ -26,7 +26,6 @@ config X86_64 depends on 64BIT # Options that are inherently 64-bit kernel only: select ARCH_HAS_GIGANTIC_PAGE - select ARCH_HAS_PTDUMP select ARCH_SUPPORTS_MSEAL_SYSTEM_MAPPINGS select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 select ARCH_SUPPORTS_PER_VMA_LOCK
@@ -101,6 +100,7 @@ config X86 select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE select ARCH_HAS_PMEM_API if X86_64 select ARCH_HAS_PREEMPT_LAZY + select ARCH_HAS_PTDUMP select ARCH_HAS_PTE_DEVMAP if X86_64 select ARCH_HAS_PTE_SPECIAL select ARCH_HAS_HW_PTE_YOUNG
arch/x86/include/asm/topology.h +10 -0
@@ -231,6 +231,16 @@ static inline bool topology_is_primary_thread(unsigned int cpu) }#define topology_is_primary_thread topology_is_primary_thread +int topology_get_primary_thread (unsigned int cpu); + +static inline bool topology_is_core_online (unsigned int cpu) +{ +int pcpu =topology_get_primary_thread (cpu); + +return pcpu >=0 ?cpu_online (pcpu) : false; +} +#define topology_is_core_online topology_is_core_online +#else /* CONFIG_SMP */ static inline int topology_phys_to_logical_pkg (unsigned int pkg) {return 0 ; }static inline int topology_max_smt_threads (void ) {return 1 ; }
arch/x86/kernel/cpu/topology.c +13 -0
@@ -372,6 +372,19 @@ unsigned int topology_unit_count(u32 apicid, enum x86_topology_domains which_unireturn topo_unit_count (lvlid, at_level, apic_maps[which_units].map); } +#ifdef CONFIG_SMP +int topology_get_primary_thread (unsigned int cpu) +{ +u32 apic_id = cpuid_to_apicid[cpu]; + +/* +* Get the core domain level APIC id, which is the primary thread +* and return the CPU number assigned to it. +*/ +return topo_lookup_cpuid (topo_apicid (apic_id,TOPO_CORE_DOMAIN )); +} +#endif +#ifdef CONFIG_ACPI_HOTPLUG_CPU /** * topology_hotplug_apic - Handle a physical hotplugged APIC after boot
drivers/cpufreq/cpufreq.c +11 -9
@@ -2956,6 +2956,15 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) goto err_null_driver; } +/* +* Mark support for the scheduler's frequency invariance engine for +* drivers that implement target(), target_index() or fast_switch(). +*/ +if (!cpufreq_driver->setpolicy) { +static_branch_enable_cpuslocked (&cpufreq_freq_invariance); +pr_debug ("cpufreq: supports frequency invariance\n" ); + } + ret =subsys_interface_register (&cpufreq_interface);if (ret) goto err_boost_unreg;
@@ -2977,21 +2986,14 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) hp_online = ret; ret =0 ; -/* -* Mark support for the scheduler's frequency invariance engine for -* drivers that implement target(), target_index() or fast_switch(). -*/ -if (!cpufreq_driver->setpolicy) { -static_branch_enable_cpuslocked (&cpufreq_freq_invariance); -pr_debug ("supports frequency invariance" ); - } -pr_debug ("driver %s up and running\n" , driver_data->name); goto out; err_if_unreg:subsys_interface_unregister (&cpufreq_interface); err_boost_unreg: +if (!cpufreq_driver->setpolicy) +static_branch_disable_cpuslocked (&cpufreq_freq_invariance);remove_boost_sysfs_file (); err_null_driver:write_lock_irqsave (&cpufreq_driver_lock, flags);
drivers/firewire/core-cdev.c +1 -1
@@ -41,7 +41,7 @@/* * ABI version history is documented in linux/firewire-cdev.h. */ -#define FW_CDEV_KERNEL_VERSION 5 +#define FW_CDEV_KERNEL_VERSION 6#define FW_CDEV_VERSION_EVENT_REQUEST2 4#define FW_CDEV_VERSION_ALLOCATE_REGION_END 4#define FW_CDEV_VERSION_AUTO_FLUSH_ISO_OVERFLOW 5
drivers/gpio/gpio-regmap.c +1 -1
@@ -274,7 +274,7 @@ struct gpio_regmap *gpio_regmap_register(const struct gpio_regmap_config *configif (!chip->ngpio) { ret =gpiochip_get_ngpios (chip, chip->parent);if (ret) -return ERR_PTR (ret); + goto err_free_gpio; }/* if not set, assume there is only one register */
drivers/gpio/gpiolib-acpi-quirks.c +14 -0
@@ -344,6 +344,20 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] __initconst = { .ignore_interrupt = "AMDI0030:00@8", }, }, + { + /* + * Spurious wakeups from TP_ATTN# pin + * Found in BIOS 5.35 + * https://gitlab.freedesktop.org/drm/amd/-/issues/4482 + */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_PRODUCT_FAMILY, "ProArt PX13"), + }, + .driver_data = &(struct acpi_gpiolib_dmi_quirk) { + .ignore_wake = "ASCP1A00:00@8", + }, + }, {} /* Terminating entry */ };
drivers/gpio/gpiolib.c +19 -2
@@ -4605,6 +4605,23 @@ static struct gpio_desc *gpiod_find_by_fwnode(struct fwnode_handle *fwnode,return desc; } +static struct gpio_desc *gpiod_fwnode_lookup (struct fwnode_handle *fwnode, +struct device *consumer, +const char *con_id, +unsigned int idx, +enum gpiod_flags *flags, +unsigned long *lookupflags) +{ +struct gpio_desc *desc; + + desc =gpiod_find_by_fwnode (fwnode, consumer, con_id, idx, flags, lookupflags); +if (gpiod_not_found (desc) && !IS_ERR_OR_NULL (fwnode)) + desc =gpiod_find_by_fwnode (fwnode->secondary, consumer, con_id, + idx, flags, lookupflags); + +return desc; +} + struct gpio_desc *gpiod_find_and_request(struct device *consumer, struct fwnode_handle *fwnode, const char *con_id,
@@ -4623,8 +4640,8 @@ struct gpio_desc *gpiod_find_and_request(struct device *consumer,int ret =0 ; scoped_guard(srcu, &gpio_devices_srcu) { - desc =gpiod_find_by_fwnode (fwnode, consumer, con_id, idx, - &flags, &lookupflags); + desc =gpiod_fwnode_lookup (fwnode, consumer, con_id, idx, + &flags, &lookupflags);if (gpiod_not_found (desc) && platform_lookup_allowed) {/* * Either we are not using DT or ACPI, or their lookup
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +32 -12
62 lines not on this page · raw message
drivers/gpu/drm/amd/amdkfd/kfd_topology.c +2 -1
@@ -1587,7 +1587,8 @@ static int kfd_dev_create_p2p_links(void)break ;if (!dev->gpu || !dev->gpu->adev || (dev->gpu->kfd->hive_id && - dev->gpu->kfd->hive_id == new_dev->gpu->kfd->hive_id)) + dev->gpu->kfd->hive_id == new_dev->gpu->kfd->hive_id && +amdgpu_xgmi_get_is_sharing_enabled (dev->gpu->adev, new_dev->gpu->adev))) goto next;/* check if node(s) is/are peer accessible in one direction or bi-direction */
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +8 -4
@@ -2035,6 +2035,8 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)dc_hardware_init (adev->dm.dc); + adev->dm.restore_backlight = true; + adev->dm.hpd_rx_offload_wq =hpd_rx_irq_create_workqueue (adev);if (!adev->dm.hpd_rx_offload_wq) {drm_err (adev_to_drm (adev),"amdgpu: failed to create hpd rx offload workqueue.\n" );
@@ -3396,6 +3398,7 @@ static int dm_resume(struct amdgpu_ip_block *ip_block)dc_set_power_state (dm->dc,DC_ACPI_CM_POWER_STATE_D0 );dc_resume (dm->dc); + adev->dm.restore_backlight = true;amdgpu_dm_irq_resume_early (adev);
@@ -9801,7 +9804,6 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state,bool mode_set_reset_required = false;u32 i;struct dc_commit_streams_params params = {dc_state->streams, dc_state->stream_count}; -bool set_backlight_level = false;/* Disable writeback */ for_each_old_connector_in_state (state, connector, old_con_state, i) {
@@ -9921,7 +9923,6 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state, acrtc->hw_mode = new_crtc_state->mode; crtc->hwmode = new_crtc_state->mode; mode_set_reset_required = true; - set_backlight_level = true; }else if (modereset_required (new_crtc_state)) { drm_dbg_atomic(dev, "Atomic commit: RESET. crtc id %d:[%p]\n",
@@ -9978,13 +9979,16 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state,* to fix a flicker issue. * It will cause the dm->actual_brightness is not the current panel brightness * level. (the dm->brightness is the correct panel level) -* So we set the backlight level with dm->brightness value after set mode +* So we set the backlight level with dm->brightness value after initial +* set mode. Use restore_backlight flag to avoid setting backlight level +* for every subsequent mode set. */ -if (set_backlight_level) { +if (dm->restore_backlight) {for (i =0 ; i < dm->num_of_edps; i++) {if (dm->backlight_dev[i])amdgpu_dm_backlight_set_level (dm, i, dm->brightness[i]); } + dm->restore_backlight = false; } }
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +7 -0
@@ -610,6 +610,13 @@ struct amdgpu_display_manager {*/ u32 actual_brightness[AMDGPU_DM_MAX_NUM_EDP ]; +/** +* @restore_backlight: +* +* Flag to indicate whether to restore backlight after modeset. +*/ +bool restore_backlight; +/** * @aux_hpd_discon_quirk: *
drivers/gpu/drm/amd/display/dc/dc.h +0 -1
@@ -1292,7 +1292,6 @@ union surface_update_flags { uint32_t in_transfer_func_change:1; uint32_t input_csc_change:1; uint32_t coeff_reduction_change:1; - uint32_t output_tf_change:1; uint32_t pixel_format_change:1; uint32_t plane_size_change:1; uint32_t gamut_remap_change:1;
drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c +2 -4
@@ -1990,10 +1990,8 @@ static void dcn20_program_pipe(* updating on slave planes */ if (pipe_ctx->update_flags.bits.enable || - pipe_ctx->update_flags.bits.plane_changed || - pipe_ctx->stream->update_flags.bits.out_tf || - (pipe_ctx->plane_state && - pipe_ctx->plane_state->update_flags.bits.output_tf_change)) + pipe_ctx->update_flags.bits.plane_changed || + pipe_ctx->stream->update_flags.bits.out_tf) hws->funcs.set_output_transfer_func (dc, pipe_ctx, pipe_ctx->stream);/* If the pipe has been enabled or has a different opp, we
drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c +2 -4
@@ -2289,10 +2289,8 @@ void dcn401_program_pipe(* updating on slave planes */ if (pipe_ctx->update_flags.bits.enable || - pipe_ctx->update_flags.bits.plane_changed || - pipe_ctx->stream->update_flags.bits.out_tf || - (pipe_ctx->plane_state && - pipe_ctx->plane_state->update_flags.bits.output_tf_change)) + pipe_ctx->update_flags.bits.plane_changed || + pipe_ctx->stream->update_flags.bits.out_tf) hws->funcs.set_output_transfer_func (dc, pipe_ctx, pipe_ctx->stream);/* If the pipe has been enabled or has a different opp, we
drivers/gpu/drm/ast/ast_dp.c +1 -1
@@ -134,7 +134,7 @@ static int ast_astdp_read_edid_block(void *data, u8 *buf, unsigned int block, si* 3. The Delays are often longer a lot when system resume from S3/S4. */ if (j) -mdelay (j +1 ); +msleep (j +1 );/* Wait for EDID offset to show up in mirror register */ vgacrd7 =ast_get_index_reg (ast,AST_IO_VGACRI ,0xd7 );
drivers/gpu/drm/gma500/oaktrail_hdmi.c +1 -1
@@ -726,8 +726,8 @@ void oaktrail_hdmi_teardown(struct drm_device *dev)if (hdmi_dev) { pdev = hdmi_dev->dev; -pci_set_drvdata (pdev,NULL );oaktrail_hdmi_i2c_exit (pdev); +pci_set_drvdata (pdev,NULL );iounmap (hdmi_dev->regs);kfree (hdmi_dev);pci_dev_put (pdev);
drivers/gpu/drm/i915/display/intel_ddi.c +3 -2
@@ -593,8 +593,9 @@ intel_ddi_transcoder_func_reg_val_get(struct intel_encoder *encoder,enum transcoder master; master = crtc_state->mst_master_transcoder; -drm_WARN_ON (display->drm, - master ==INVALID_TRANSCODER ); +if (drm_WARN_ON (display->drm, + master ==INVALID_TRANSCODER )) + master =TRANSCODER_A ; temp |=TRANS_DDI_MST_TRANSPORT_SELECT (master); } }else {
drivers/gpu/drm/panfrost/panfrost_drv.c +33 -28
96 lines not on this page · raw message
drivers/gpu/drm/panthor/panthor_sched.c +1 -7
@@ -886,8 +886,7 @@ static void group_free_queue(struct panthor_group *group, struct panthor_queue *if (IS_ERR_OR_NULL (queue))return ; -if (queue->entity.fence_context) -drm_sched_entity_destroy (&queue->entity); +drm_sched_entity_destroy (&queue->entity);if (queue->scheduler.ops)drm_sched_fini (&queue->scheduler);
@@ -3558,11 +3557,6 @@ int panthor_group_destroy(struct panthor_file *pfile, u32 group_handle)if (!group)return -EINVAL ; -for (u32 i =0 ; i < group->queue_count; i++) { -if (group->queues[i]) -drm_sched_entity_destroy (&group->queues[i]->entity); - } -mutex_lock (&sched->reset.lock);mutex_lock (&sched->lock); group->destroyed = true;
drivers/gpu/drm/xe/abi/guc_actions_abi.h +0 -5
@@ -117,7 +117,6 @@ enum xe_guc_action {XE_GUC_ACTION_ENTER_S_STATE =0x501 ,XE_GUC_ACTION_EXIT_S_STATE =0x502 ,XE_GUC_ACTION_GLOBAL_SCHED_POLICY_CHANGE =0x506 , -XE_GUC_ACTION_UPDATE_SCHEDULING_POLICIES_KLV =0x509 ,XE_GUC_ACTION_SCHED_CONTEXT =0x1000 ,XE_GUC_ACTION_SCHED_CONTEXT_MODE_SET =0x1001 , XE_GUC_ACTION_SCHED_CONTEXT_MODE_DONE = 0x1002,
@@ -143,7 +142,6 @@ enum xe_guc_action {XE_GUC_ACTION_SET_ENG_UTIL_BUFF =0x550A ,XE_GUC_ACTION_SET_DEVICE_ENGINE_ACTIVITY_BUFFER =0x550C ,XE_GUC_ACTION_SET_FUNCTION_ENGINE_ACTIVITY_BUFFER =0x550D , -XE_GUC_ACTION_OPT_IN_FEATURE_KLV =0x550E ,XE_GUC_ACTION_NOTIFY_MEMORY_CAT_ERROR =0x6000 ,XE_GUC_ACTION_REPORT_PAGE_FAULT_REQ_DESC =0x6002 , XE_GUC_ACTION_PAGE_FAULT_RES_DESC = 0x6003,
@@ -242,7 +240,4 @@ enum xe_guc_g2g_type {#define XE_G2G_DEREGISTER_TILE REG_GENMASK(15, 12)#define XE_G2G_DEREGISTER_TYPE REG_GENMASK(11, 8) -/* invalid type for XE_GUC_ACTION_NOTIFY_MEMORY_CAT_ERROR */ -#define XE_GUC_CAT_ERR_TYPE_INVALID 0xdeadbeef -#endif
drivers/gpu/drm/xe/abi/guc_klvs_abi.h +0 -40
@@ -16,8 +16,6 @@* +===+=======+==============================================================+ * | 0 | 31:16 | **KEY** - KLV key identifier | * | | | - `GuC Self Config KLVs`_ | -* | | | - `GuC Opt In Feature KLVs`_ | -* | | | - `GuC Scheduling Policies KLVs`_ | * | | | - `GuC VGT Policy KLVs`_ | * | | | - `GuC VF Configuration KLVs`_ | * | | | |
@@ -126,44 +124,6 @@ enum { GUC_CONTEXT_POLICIES_KLV_NUM_IDS = 5, }; -/** -* DOC: GuC Opt In Feature KLVs -* -* `GuC KLV`_ keys available for use with OPT_IN_FEATURE_KLV -* -* _`GUC_KLV_OPT_IN_FEATURE_EXT_CAT_ERR_TYPE` : 0x4001 -* Adds an extra dword to the XE_GUC_ACTION_NOTIFY_MEMORY_CAT_ERROR G2H -* containing the type of the CAT error. On HW that does not support -* reporting the CAT error type, the extra dword is set to 0xdeadbeef. -*/ - -#define GUC_KLV_OPT_IN_FEATURE_EXT_CAT_ERR_TYPE_KEY 0x4001 -#define GUC_KLV_OPT_IN_FEATURE_EXT_CAT_ERR_TYPE_LEN 0u - -/** -* DOC: GuC Scheduling Policies KLVs -* -* `GuC KLV`_ keys available for use with UPDATE_SCHEDULING_POLICIES_KLV. -* -* _`GUC_KLV_SCHEDULING_POLICIES_RENDER_COMPUTE_YIELD` : 0x1001 -* Some platforms do not allow concurrent execution of RCS and CCS -* workloads from different address spaces. By default, the GuC prioritizes -* RCS submissions over CCS ones, which can lead to CCS workloads being -* significantly (or completely) starved of execution time. This KLV allows -* the driver to specify a quantum (in ms) and a ratio (percentage value -* between 0 and 100), and the GuC will prioritize the CCS for that -* percentage of each quantum. For example, specifying 100ms and 30% will -* make the GuC prioritize the CCS for 30ms of every 100ms. -* Note that this does not necessarly mean that RCS and CCS engines will -* only be active for their percentage of the quantum, as the restriction -* only kicks in if both classes are fully busy with non-compatible address -* spaces; i.e., if one engine is idle or running the same address space, -* a pending job on the other engine will still be submitted to the HW no -* matter what the ratio is -*/ -#define GUC_KLV_SCHEDULING_POLICIES_RENDER_COMPUTE_YIELD_KEY 0x1001 -#define GUC_KLV_SCHEDULING_POLICIES_RENDER_COMPUTE_YIELD_LEN 2u -/** * DOC: GuC VGT Policy KLVs *
drivers/gpu/drm/xe/xe_bo_evict.c +2 -2
@@ -158,8 +158,8 @@ int xe_bo_evict_all(struct xe_device *xe)if (ret)return ret; - ret =xe_bo_apply_to_pinned (xe, &xe->pinned.late.kernel_bo_present, - &xe->pinned.late.evicted, xe_bo_evict_pinned); + ret =xe_bo_apply_to_pinned (xe, &xe->pinned.late.external, + &xe->pinned.late.external, xe_bo_evict_pinned);if (!ret) ret = xe_bo_apply_to_pinned(xe, &xe->pinned.late.kernel_bo_present,
drivers/gpu/drm/xe/xe_configfs.c +1 -1
@@ -244,7 +244,7 @@ int __init xe_configfs_init(void)return 0 ; } -void __exit xe_configfs_exit(void) +void xe_configfs_exit (void ) {configfs_unregister_subsystem (&xe_configfs); }
drivers/gpu/drm/xe/xe_device_sysfs.c +1 -1
@@ -166,7 +166,7 @@ int xe_device_sysfs_init(struct xe_device *xe)return ret; } -if (xe->info.platform ==XE_BATTLEMAGE ) { +if (xe->info.platform ==XE_BATTLEMAGE && !IS_SRIOV_VF (xe)) { ret =sysfs_create_files (&dev->kobj, auto_link_downgrade_attrs);if (ret)return ret;
drivers/gpu/drm/xe/xe_gt.c +1 -2
@@ -41,7 +41,6 @@#include "xe_gt_topology.h" #include "xe_guc_exec_queue_types.h" #include "xe_guc_pc.h" -#include "xe_guc_submit.h" #include "xe_hw_fence.h" #include "xe_hw_engine_class_sysfs.h" #include "xe_irq.h"
@@ -98,7 +97,7 @@ void xe_gt_sanitize(struct xe_gt *gt)* FIXME: if xe_uc_sanitize is called here, on TGL driver will not * reload */ -xe_guc_submit_disable (>->uc.guc); + gt->uc.guc.submission_state.enabled = false; }static void xe_gt_enable_host_l2_vram (struct xe_gt *gt)
drivers/gpu/drm/xe/xe_guc.c +4 -58
92 lines not on this page · raw message
drivers/gpu/drm/xe/xe_guc.h +0 -1
@@ -33,7 +33,6 @@ int xe_guc_reset(struct xe_guc *guc);int xe_guc_upload (struct xe_guc *guc);int xe_guc_min_load_for_hwconfig (struct xe_guc *guc);int xe_guc_enable_communication (struct xe_guc *guc); -int xe_guc_opt_in_features_enable (struct xe_guc *guc);int xe_guc_suspend (struct xe_guc *guc);void xe_guc_notify (struct xe_guc *guc);int xe_guc_auth_huc (struct xe_guc *guc,u32 rsa_addr);
drivers/gpu/drm/xe/xe_guc_submit.c +3 -84
116 lines not on this page · raw message
drivers/gpu/drm/xe/xe_guc_submit.h +0 -2
@@ -13,8 +13,6 @@ struct xe_exec_queue;struct xe_guc ;int xe_guc_submit_init (struct xe_guc *guc,unsigned int num_ids); -int xe_guc_submit_enable (struct xe_guc *guc); -void xe_guc_submit_disable (struct xe_guc *guc);int xe_guc_submit_reset_prepare (struct xe_guc *guc);void xe_guc_submit_reset_wait (struct xe_guc *guc);
drivers/gpu/drm/xe/xe_uc.c +0 -4
@@ -165,10 +165,6 @@ static int vf_uc_init_hw(struct xe_uc *uc) uc->guc.submission_state.enabled = true; - err =xe_guc_opt_in_features_enable (&uc->guc); -if (err) -return err; - err =xe_gt_record_default_lrcs (uc_to_gt (uc));if (err)return err;
drivers/hid/amd-sfh-hid/amd_sfh_client.c +10 -2
@@ -39,8 +39,12 @@ int amd_sfh_get_report(struct hid_device *hid, int report_id, int report_type)struct amdtp_hid_data *hid_data = hid->driver_data;struct amdtp_cl_data *cli_data = hid_data->cli_data;struct request_list *req_list = &cli_data->req_list; +struct amd_input_data *in_data = cli_data->in_data; +struct amd_mp2_dev *mp2;int i; + mp2 = container_of(in_data, struct amd_mp2_dev, in_data); +guard (mutex)(&mp2->lock);for (i =0 ; i < cli_data->num_hid_devices; i++) {if (cli_data->hid_sensor_hubs[i] == hid) {struct request_list *new =kzalloc (sizeof (*new),GFP_KERNEL );
@@ -75,6 +79,8 @@ void amd_sfh_work(struct work_struct *work)u8 report_id, node_type;u8 report_size =0 ; + mp2 = container_of(in_data, struct amd_mp2_dev, in_data); +guard (mutex)(&mp2->lock); req_node = list_last_entry(&req_list->list, struct request_list, list);list_del (&req_node->list); current_index = req_node->current_index;
@@ -83,7 +89,6 @@ void amd_sfh_work(struct work_struct *work) node_type = req_node->report_type;kfree (req_node); - mp2 = container_of(in_data, struct amd_mp2_dev, in_data); mp2_ops = mp2->mp2_ops;if (node_type ==HID_FEATURE_REPORT ) { report_size = mp2_ops->get_feat_rep(sensor_index, report_id,
@@ -107,6 +112,8 @@ void amd_sfh_work(struct work_struct *work) cli_data->cur_hid_dev = current_index; cli_data->sensor_requested_cnt[current_index] =0 ;amdtp_hid_wakeup (cli_data->hid_sensor_hubs[current_index]); +if (!list_empty (&req_list->list)) +schedule_delayed_work (&cli_data->work,0 ); }void amd_sfh_work_buffer (struct work_struct *work)
@@ -117,9 +124,10 @@ void amd_sfh_work_buffer(struct work_struct *work)u8 report_size;int i; + mp2 = container_of(in_data, struct amd_mp2_dev, in_data); +guard (mutex)(&mp2->lock);for (i =0 ; i < cli_data->num_hid_devices; i++) {if (cli_data->sensor_sts[i] ==SENSOR_ENABLED ) { - mp2 = container_of(in_data, struct amd_mp2_dev, in_data); report_size = mp2->mp2_ops->get_in_rep (i, cli_data->sensor_idx[i], cli_data->report_id[i], in_data); hid_input_report(cli_data->hid_sensor_hubs[i], HID_INPUT_REPORT,
drivers/hid/amd-sfh-hid/amd_sfh_common.h +3 -0
@@ -10,6 +10,7 @@#ifndef AMD_SFH_COMMON_H #define AMD_SFH_COMMON_H +#include <linux/mutex.h> #include <linux/pci.h> #include "amd_sfh_hid.h"
@@ -59,6 +60,8 @@ struct amd_mp2_dev {u32 mp2_acs;struct sfh_dev_status dev_en;struct work_struct work; +/* mp2 to protect data */ +struct mutex lock;u8 init_done;u8 rver; };
drivers/hid/amd-sfh-hid/amd_sfh_pcie.c +4 -0
@@ -462,6 +462,10 @@ static int amd_mp2_pci_probe(struct pci_dev *pdev, const struct pci_device_id *iif (!privdata->cl_data)return -ENOMEM ; + rc =devm_mutex_init (&pdev->dev, &privdata->lock); +if (rc) +return rc; + privdata->sfh1_1_ops = (const struct amd_sfh1_1_ops *)id->driver_data;if (privdata->sfh1_1_ops) {if (boot_cpu_data.x86 >=0x1A )
drivers/hid/hid-asus.c +3 -0
@@ -974,7 +974,10 @@ static int asus_input_mapping(struct hid_device *hdev,case 0xc4 :asus_map_key_clear (KEY_KBDILLUMUP );break ;case 0xc5 :asus_map_key_clear (KEY_KBDILLUMDOWN );break ;case 0xc7 :asus_map_key_clear (KEY_KBDILLUMTOGGLE );break ; +case 0x4e :asus_map_key_clear (KEY_FN_ESC );break ; +case 0x7e :asus_map_key_clear (KEY_EMOJI_PICKER );break ; +case 0x8b :asus_map_key_clear (KEY_PROG1 );break ;/* ProArt Creator Hub key */ case 0x6b :asus_map_key_clear (KEY_F21 );break ;/* ASUS touchpad toggle */ case 0x38 :asus_map_key_clear (KEY_PROG1 );break ;/* ROG key */ case 0xba :asus_map_key_clear (KEY_PROG2 );break ;/* Fn+C ASUS Splendid */
drivers/hid/hid-cp2112.c +5 -5
@@ -229,10 +229,12 @@ static int cp2112_gpio_set_unlocked(struct cp2112_device *dev, ret =hid_hw_raw_request (hdev,CP2112_GPIO_SET , buf,CP2112_GPIO_SET_LENGTH ,HID_FEATURE_REPORT ,HID_REQ_SET_REPORT ); -if (ret <0 ) +if (ret !=CP2112_GPIO_SET_LENGTH ) {hid_err (hdev,"error setting GPIO values: %d\n" , ret); +return ret <0 ? ret : -EIO ; + } -return ret; +return 0 ; } static int cp2112_gpio_set(struct gpio_chip *chip, unsigned int offset,
@@ -309,9 +311,7 @@ static int cp2112_gpio_direction_output(struct gpio_chip *chip,* Set gpio value when output direction is already set, * as specified in AN495, Rev. 0.2, cpt. 4.4 */ -cp2112_gpio_set_unlocked (dev, offset, value); - -return 0 ; +return cp2112_gpio_set_unlocked (dev, offset, value); } static int cp2112_hid_get(struct hid_device *hdev, unsigned char report_number,
drivers/hid/hid-multitouch.c +40 -5
93 lines not on this page · raw message
drivers/hid/intel-thc-hid/intel-quickspi/pci-quickspi.c +2 -0
@@ -961,6 +961,8 @@ static const struct pci_device_id quickspi_pci_tbl[] = { {PCI_DEVICE_DATA(INTEL, THC_PTL_H_DEVICE_ID_SPI_PORT2, &ptl), }, {PCI_DEVICE_DATA(INTEL, THC_PTL_U_DEVICE_ID_SPI_PORT1, &ptl), }, {PCI_DEVICE_DATA(INTEL, THC_PTL_U_DEVICE_ID_SPI_PORT2, &ptl), }, + {PCI_DEVICE_DATA(INTEL, THC_WCL_DEVICE_ID_SPI_PORT1, &ptl), }, + {PCI_DEVICE_DATA(INTEL, THC_WCL_DEVICE_ID_SPI_PORT2, &ptl), }, {} };MODULE_DEVICE_TABLE (pci, quickspi_pci_tbl);
drivers/hid/intel-thc-hid/intel-quickspi/quickspi-dev.h +2 -0
@@ -19,6 +19,8 @@#define PCI_DEVICE_ID_INTEL_THC_PTL_H_DEVICE_ID_SPI_PORT2 0xE34B#define PCI_DEVICE_ID_INTEL_THC_PTL_U_DEVICE_ID_SPI_PORT1 0xE449#define PCI_DEVICE_ID_INTEL_THC_PTL_U_DEVICE_ID_SPI_PORT2 0xE44B +#define PCI_DEVICE_ID_INTEL_THC_WCL_DEVICE_ID_SPI_PORT1 0x4D49 +#define PCI_DEVICE_ID_INTEL_THC_WCL_DEVICE_ID_SPI_PORT2 0x4D4B/* HIDSPI special ACPI parameters DSM methods */ #define ACPI_QUICKSPI_REVISION_NUM 2
drivers/i2c/busses/i2c-designware-platdrv.c +5 -2
@@ -101,7 +101,7 @@ static int bt1_i2c_request_regs(struct dw_i2c_dev *dev) }#endif -static int txgbe_i2c_request_regs (struct dw_i2c_dev *dev) +static int dw_i2c_get_parent_regmap (struct dw_i2c_dev *dev) { dev->map =dev_get_regmap (dev->dev->parent,NULL );if (!dev->map)
@@ -123,12 +123,15 @@ static int dw_i2c_plat_request_regs(struct dw_i2c_dev *dev)struct platform_device *pdev =to_platform_device (dev->dev);int ret; +if (device_is_compatible (dev->dev,"intel,xe-i2c" )) +return dw_i2c_get_parent_regmap (dev); +switch (dev->flags &MODEL_MASK ) {case MODEL_BAIKAL_BT1 : ret =bt1_i2c_request_regs (dev);break ;case MODEL_WANGXUN_SP : - ret =txgbe_i2c_request_regs (dev); + ret =dw_i2c_get_parent_regmap (dev);break ;default : dev->base =devm_platform_ioremap_resource (pdev,0 );
drivers/infiniband/hw/mlx5/devx.c +1 -0
@@ -233,6 +233,7 @@ static u16 get_legacy_obj_type(u16 opcode) {switch (opcode) {case MLX5_CMD_OP_CREATE_RQ : +case MLX5_CMD_OP_CREATE_RMP :return MLX5_EVENT_QUEUE_TYPE_RQ ;case MLX5_CMD_OP_CREATE_QP :return MLX5_EVENT_QUEUE_TYPE_QP ;
drivers/iommu/iommufd/eventq.c +2 -7
@@ -393,12 +393,12 @@ static int iommufd_eventq_init(struct iommufd_eventq *eventq, char *name, const struct file_operations *fops) {struct file *filep; -int fdno;spin_lock_init (&eventq->lock);INIT_LIST_HEAD (&eventq->deliver);init_waitqueue_head (&eventq->wait_queue); +/* The filep is fput() by the core code during failure */ filep =anon_inode_getfile (name, fops, eventq,O_RDWR );if (IS_ERR (filep))return PTR_ERR (filep);
@@ -408,10 +408,7 @@ static int iommufd_eventq_init(struct iommufd_eventq *eventq, char *name, eventq->filep = filep;refcount_inc (&eventq->obj.users); - fdno =get_unused_fd_flags (O_CLOEXEC ); -if (fdno <0 ) -fput (filep); -return fdno; +return get_unused_fd_flags (O_CLOEXEC ); } static const struct file_operations iommufd_fault_fops =
@@ -455,7 +452,6 @@ int iommufd_fault_alloc(struct iommufd_ucmd *ucmd)return 0 ; out_put_fdno:put_unused_fd (fdno); -fput (fault->common.filep); out_abort:iommufd_object_abort_and_destroy (ucmd->ictx, &fault->common.obj);
@@ -542,7 +538,6 @@ int iommufd_veventq_alloc(struct iommufd_ucmd *ucmd) out_put_fdno:put_unused_fd (fdno); -fput (veventq->common.filep); out_abort:iommufd_object_abort_and_destroy (ucmd->ictx, &veventq->common.obj); out_unlock_veventqs:
drivers/iommu/iommufd/main.c +32 -3
@@ -23,6 +23,7 @@#include "iommufd_test.h" struct iommufd_object_ops { +size_t file_offset;void (*destroy)(struct iommufd_object *obj);void (*abort)(struct iommufd_object *obj); };
@@ -71,10 +72,30 @@ void iommufd_object_abort(struct iommufd_ctx *ictx, struct iommufd_object *obj)void iommufd_object_abort_and_destroy (struct iommufd_ctx *ictx,struct iommufd_object *obj) { -if (iommufd_object_ops[obj->type].abort) - iommufd_object_ops[obj->type].abort (obj); +const struct iommufd_object_ops *ops = &iommufd_object_ops[obj->type]; + +if (ops->file_offset) { +struct file **filep = ((void *)obj) + ops->file_offset; + +/* +* A file should hold a users refcount while the file is open +* and put it back in its release. The file should hold a +* pointer to obj in their private data. Normal fput() is +* deferred to a workqueue and can get out of order with the +* following kfree(obj). Using the sync version ensures the +* release happens immediately. During abort we require the file +* refcount is one at this point - meaning the object alloc +* function cannot do anything to allow another thread to take a +* refcount prior to a guaranteed success. +*/ +if (*filep) +__fput_sync (*filep); + } + +if (ops->abort) + ops->abort (obj);else - iommufd_object_ops[obj->type].destroy (obj); + ops->destroy (obj);iommufd_object_abort (ictx, obj); }
@@ -493,6 +514,12 @@ void iommufd_ctx_put(struct iommufd_ctx *ictx) }EXPORT_SYMBOL_NS_GPL (iommufd_ctx_put,"IOMMUFD" ); +#define IOMMUFD_FILE_OFFSET (_struct, _filep, _obj) \ + .file_offset = (offsetof(_struct, _filep) + \ + BUILD_BUG_ON_ZERO(!__same_type( \ + struct file *, ((_struct *)NULL)->_filep)) + \ + BUILD_BUG_ON_ZERO(offsetof(_struct, _obj))) +static const struct iommufd_object_ops iommufd_object_ops[] = { [IOMMUFD_OBJ_ACCESS ] = { .destroy = iommufd_access_destroy_object,
@@ -502,6 +529,7 @@ static const struct iommufd_object_ops iommufd_object_ops[] = { }, [IOMMUFD_OBJ_FAULT] = { .destroy = iommufd_fault_destroy, + IOMMUFD_FILE_OFFSET(struct iommufd_fault, common.filep, common.obj), }, [IOMMUFD_OBJ_HWPT_PAGING] = { .destroy = iommufd_hwpt_paging_destroy,
@@ -520,6 +548,7 @@ static const struct iommufd_object_ops iommufd_object_ops[] = { [IOMMUFD_OBJ_VEVENTQ] = { .destroy = iommufd_veventq_destroy, .abort = iommufd_veventq_abort, + IOMMUFD_FILE_OFFSET(struct iommufd_veventq, common.filep, common.obj), }, [IOMMUFD_OBJ_VIOMMU] = { .destroy = iommufd_viommu_destroy,
drivers/mmc/host/sdhci-cadence.c +11 -0
@@ -433,6 +433,13 @@ static const struct sdhci_cdns_drv_data sdhci_elba_drv_data = { }, }; +static const struct sdhci_cdns_drv_data sdhci_eyeq_drv_data = { + .pltfm_data = { + .ops = &sdhci_cdns_ops, + .quirks2 =SDHCI_QUIRK2_PRESET_VALUE_BROKEN , + }, +}; +static const struct sdhci_cdns_drv_data sdhci_cdns_drv_data = { .pltfm_data = { .ops = &sdhci_cdns_ops,
@@ -595,6 +602,10 @@ static const struct of_device_id sdhci_cdns_match[] = { .compatible = "amd,pensando-elba-sd4hc", .data = &sdhci_elba_drv_data, }, + { + .compatible = "mobileye,eyeq-sd4hc", + .data = &sdhci_eyeq_drv_data, + }, { .compatible = "cdns,sd4hc" }, {/* sentinel */ } };
drivers/net/can/rcar/rcar_can.c +1 -7
@@ -861,7 +861,6 @@ static int __maybe_unused rcar_can_resume(struct device *dev) {struct net_device *ndev =dev_get_drvdata (dev);struct rcar_can_priv *priv =netdev_priv (ndev); -u16 ctlr;int err;if (!netif_running (ndev))
@@ -873,12 +872,7 @@ static int __maybe_unused rcar_can_resume(struct device *dev)return err; } - ctlr =readw (&priv->regs->ctlr); - ctlr &= ~RCAR_CAN_CTLR_SLPM ; -writew (ctlr, &priv->regs->ctlr); - ctlr &= ~RCAR_CAN_CTLR_CANM ; -writew (ctlr, &priv->regs->ctlr); - priv->can.state =CAN_STATE_ERROR_ACTIVE ; +rcar_can_start (ndev);netif_device_attach (ndev);netif_start_queue (ndev);
drivers/net/can/spi/hi311x.c +1 -0
@@ -812,6 +812,7 @@ static const struct net_device_ops hi3110_netdev_ops = { .ndo_open = hi3110_open, .ndo_stop = hi3110_stop, .ndo_start_xmit = hi3110_hard_start_xmit, + .ndo_change_mtu = can_change_mtu, };static const struct ethtool_ops hi3110_ethtool_ops = {
drivers/net/can/sun4i_can.c +1 -0
@@ -768,6 +768,7 @@ static const struct net_device_ops sun4ican_netdev_ops = { .ndo_open = sun4ican_open, .ndo_stop = sun4ican_close, .ndo_start_xmit = sun4ican_start_xmit, + .ndo_change_mtu = can_change_mtu, };static const struct ethtool_ops sun4ican_ethtool_ops = {
drivers/net/can/usb/etas_es58x/es58x_core.c +2 -1
@@ -7,7 +7,7 @@* * Copyright (c) 2019 Robert Bosch Engineering and Business Solutions. All rights reserved. * Copyright (c) 2020 ETAS K.K.. All rights reserved. -* Copyright (c) 2020-2022 Vincent Mailhol <[email protected]> +* Copyright (c) 2020-2025 Vincent Mailhol <[email protected]> */ #include <linux/unaligned.h>
@@ -1977,6 +1977,7 @@ static const struct net_device_ops es58x_netdev_ops = { .ndo_stop = es58x_stop, .ndo_start_xmit = es58x_start_xmit, .ndo_eth_ioctl = can_eth_ioctl_hwts, + .ndo_change_mtu = can_change_mtu, };static const struct ethtool_ops es58x_ethtool_ops = {
drivers/net/can/usb/mcba_usb.c +1 -0
@@ -761,6 +761,7 @@ static const struct net_device_ops mcba_netdev_ops = { .ndo_open = mcba_usb_open, .ndo_stop = mcba_usb_close, .ndo_start_xmit = mcba_usb_start_xmit, + .ndo_change_mtu = can_change_mtu, };static const struct ethtool_ops mcba_ethtool_ops = {
drivers/net/can/usb/peak_usb/pcan_usb_core.c +1 -1
@@ -111,7 +111,7 @@ void peak_usb_update_ts_now(struct peak_time_ref *time_ref, u32 ts_now)u32 delta_ts = time_ref->ts_dev_2 - time_ref->ts_dev_1;if (time_ref->ts_dev_2 < time_ref->ts_dev_1) - delta_ts &= (1 << time_ref->adapter->ts_used_bits) -1 ; + delta_ts &= (1ULL << time_ref->adapter->ts_used_bits) -1 ; time_ref->ts_total += delta_ts; }
drivers/net/dsa/lantiq_gswip.c +16 -5
@@ -685,18 +685,27 @@ static int gswip_add_single_port_br(struct gswip_priv *priv, int port, bool add)return 0 ; } -static int gswip_port_enable (struct dsa_switch *ds,int port, -struct phy_device *phydev) +static int gswip_port_setup (struct dsa_switch *ds,int port) {struct gswip_priv *priv = ds->priv;int err;if (!dsa_is_cpu_port (ds, port)) { -u32 mdio_phy =0 ; - err =gswip_add_single_port_br (priv, port, true);if (err)return err; + } + +return 0 ; +} + +static int gswip_port_enable (struct dsa_switch *ds,int port, +struct phy_device *phydev) +{ +struct gswip_priv *priv = ds->priv; + +if (!dsa_is_cpu_port (ds, port)) { +u32 mdio_phy =0 ;if (phydev) mdio_phy = phydev->mdio.addr &GSWIP_MDIO_PHY_ADDR_MASK ;
@@ -1359,8 +1368,9 @@ static int gswip_port_fdb(struct dsa_switch *ds, int port,int i;int err; +/* Operation not supported on the CPU port, don't throw errors */ if (!bridge) -return -EINVAL ; +return 0 ;for (i = max_ports; i <ARRAY_SIZE (priv->vlans); i++) {if (priv->vlans[i].bridge == bridge) {
@@ -1829,6 +1839,7 @@ static const struct phylink_mac_ops gswip_phylink_mac_ops = {static const struct dsa_switch_ops gswip_xrx200_switch_ops = { .get_tag_protocol = gswip_get_tag_protocol, .setup = gswip_setup, + .port_setup = gswip_port_setup, .port_enable = gswip_port_enable, .port_disable = gswip_port_disable, .port_bridge_join = gswip_port_bridge_join,
drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c +1 -1
@@ -244,7 +244,7 @@ bnxt_tc_parse_pedit(struct bnxt *bp, struct bnxt_tc_actions *actions, offset < offset_of_ip6_daddr + 16) { actions->nat.src_xlate = false; idx = (offset - offset_of_ip6_daddr) / 4; - actions->nat.l3.ipv6.saddr.s6_addr32[idx] = htonl(val); + actions->nat.l3.ipv6.daddr.s6_addr32[idx] = htonl(val); } else { netdev_err(bp->dev, "%s: IPv6_hdr: Invalid pedit field\n",
drivers/net/ethernet/freescale/fec_main.c +2 -2
@@ -131,7 +131,7 @@ static const struct fec_devinfo fec_mvf600_info = { FEC_QUIRK_HAS_MDIO_C45, }; -static const struct fec_devinfo fec_imx6x_info = { +static const struct fec_devinfo fec_imx6sx_info = { .quirks =FEC_QUIRK_ENET_MAC |FEC_QUIRK_HAS_GBIT |FEC_QUIRK_HAS_BUFDESC_EX |FEC_QUIRK_HAS_CSUM | FEC_QUIRK_HAS_VLAN | FEC_QUIRK_HAS_AVB |
@@ -196,7 +196,7 @@ static const struct of_device_id fec_dt_ids[] = { { .compatible = "fsl,imx28-fec", .data = &fec_imx28_info, }, { .compatible = "fsl,imx6q-fec", .data = &fec_imx6q_info, }, { .compatible = "fsl,mvf600-fec", .data = &fec_mvf600_info, }, - { .compatible = "fsl,imx6sx-fec", .data = &fec_imx6x_info, }, + { .compatible = "fsl,imx6sx-fec", .data = &fec_imx6sx_info, }, { .compatible = "fsl,imx6ul-fec", .data = &fec_imx6ul_info, }, { .compatible = "fsl,imx8mq-fec", .data = &fec_imx8mq_info, }, { .compatible = "fsl,imx8qm-fec", .data = &fec_imx8qm_info, },
drivers/net/ethernet/intel/i40e/i40e.h +2 -1
@@ -1277,7 +1277,8 @@ struct i40e_mac_filter *i40e_add_mac_filter(struct i40e_vsi *vsi, const u8 *macaddr);int i40e_del_mac_filter (struct i40e_vsi *vsi,const u8 *macaddr);bool i40e_is_vsi_in_vlan (struct i40e_vsi *vsi); -int i40e_count_filters (struct i40e_vsi *vsi); +int i40e_count_all_filters (struct i40e_vsi *vsi); +int i40e_count_active_filters (struct i40e_vsi *vsi);struct i40e_mac_filter *i40e_find_mac (struct i40e_vsi *vsi,const u8 *macaddr);void i40e_vlan_stripping_enable (struct i40e_vsi *vsi);static inline bool i40e_is_sw_dcb (struct i40e_pf *pf)
drivers/net/ethernet/intel/i40e/i40e_main.c +22 -4
@@ -1241,12 +1241,30 @@ void i40e_update_stats(struct i40e_vsi *vsi) }/** -* i40e_count_filters - counts VSI mac filters +* i40e_count_all_filters - counts VSI MAC filters * @vsi: the VSI to be searched * -* Returns count of mac filters -**/ -int i40e_count_filters (struct i40e_vsi *vsi) +* Return: count of MAC filters in any state. +*/ +int i40e_count_all_filters (struct i40e_vsi *vsi) +{ +struct i40e_mac_filter *f; +struct hlist_node *h; +int bkt, cnt =0 ; + +hash_for_each_safe (vsi->mac_filter_hash, bkt, h, f, hlist) + cnt++; + +return cnt; +} + +/** +* i40e_count_active_filters - counts VSI MAC filters +* @vsi: the VSI to be searched +* +* Return: count of active MAC filters. +*/ +int i40e_count_active_filters (struct i40e_vsi *vsi) {struct i40e_mac_filter *f;struct hlist_node *h;
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +64 -46
213 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h +2 -1
@@ -41,7 +41,8 @@ enum i40e_vf_states {I40E_VF_STATE_MC_PROMISC ,I40E_VF_STATE_UC_PROMISC ,I40E_VF_STATE_PRE_ENABLE , - I40E_VF_STATE_RESETTING +I40E_VF_STATE_RESETTING , + I40E_VF_STATE_RESOURCES_LOADED, };/* VF capabilities */
drivers/net/ethernet/marvell/octeontx2/af/cgx.c +1 -2
@@ -21,8 +21,7 @@#include "rvu.h" #include "lmac_common.h" -#define DRV_NAME "Marvell-CGX/RPM" -#define DRV_STRING "Marvell CGX/RPM Driver" +#define DRV_NAME "Marvell-CGX-RPM"#define CGX_RX_STAT_GLOBAL_INDEX 9
drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c +1 -1
@@ -1326,7 +1326,6 @@ static int otx2_tc_add_flow(struct otx2_nic *nic, free_leaf:otx2_tc_del_from_flow_list (flow_cfg, new_node); -kfree_rcu (new_node, rcu);if (new_node->is_act_police) {mutex_lock (&nic->mbox.lock);
@@ -1346,6 +1345,7 @@ static int otx2_tc_add_flow(struct otx2_nic *nic,mutex_unlock (&nic->mbox.lock); } +kfree_rcu (new_node, rcu);return rc; }
drivers/net/ethernet/mellanox/mlx5/core/en_stats.c +1 -0
@@ -1466,6 +1466,7 @@ static void fec_set_block_stats(struct mlx5e_priv *priv,case MLX5E_FEC_RS_528_514 :case MLX5E_FEC_RS_544_514 :case MLX5E_FEC_LLRS_272_257_1 : +case MLX5E_FEC_RS_544_514_INTERLEAVED_QUAD :fec_set_rs_stats (fec_stats, out);return ;case MLX5E_FEC_FIRECODE :
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +1 -1
@@ -663,7 +663,7 @@ static void del_sw_hw_rule(struct fs_node *node)BIT (MLX5_SET_FTE_MODIFY_ENABLE_MASK_ACTION ) |BIT (MLX5_SET_FTE_MODIFY_ENABLE_MASK_FLOW_COUNTERS ); fte->act_dests.action.action &= ~MLX5_FLOW_CONTEXT_ACTION_COUNT ; -mlx5_fc_local_destroy (rule->dest_attr.counter); +mlx5_fc_local_put (rule->dest_attr.counter); goto out; }
drivers/net/ethernet/mellanox/mlx5/core/fs_core.h +1 -0
@@ -343,6 +343,7 @@ struct mlx5_fc {enum mlx5_fc_type type;struct mlx5_fc_bulk *bulk;struct mlx5_fc_cache cache; +refcount_t fc_local_refcount;/* last{packets,bytes} are used for calculating deltas since last reading. */ u64 lastpackets;u64 lastbytes;
drivers/net/ethernet/mellanox/mlx5/core/fs_counters.c +22 -3
@@ -562,17 +562,36 @@ mlx5_fc_local_create(u32 counter_id, u32 offset, u32 bulk_size) counter->id = counter_id; fc_bulk->base_id = counter_id - offset; fc_bulk->fs_bulk.bulk_len = bulk_size; +refcount_set (&fc_bulk->hws_data.hws_action_refcount,0 ); +mutex_init (&fc_bulk->hws_data.lock); counter->bulk = fc_bulk; +refcount_set (&counter->fc_local_refcount,1 );return counter; }EXPORT_SYMBOL (mlx5_fc_local_create);void mlx5_fc_local_destroy (struct mlx5_fc *counter) { -if (!counter || counter->type !=MLX5_FC_TYPE_LOCAL ) -return ; -kfree (counter->bulk);kfree (counter); }EXPORT_SYMBOL (mlx5_fc_local_destroy); + +void mlx5_fc_local_get (struct mlx5_fc *counter) +{ +if (!counter || counter->type !=MLX5_FC_TYPE_LOCAL ) +return ; + +refcount_inc (&counter->fc_local_refcount); +} + +void mlx5_fc_local_put (struct mlx5_fc *counter) +{ +if (!counter || counter->type !=MLX5_FC_TYPE_LOCAL ) +return ; + +if (!refcount_dec_and_test (&counter->fc_local_refcount)) +return ; + +mlx5_fc_local_destroy (counter); +}
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action.c +2 -5
@@ -1358,11 +1358,8 @@ mlx5hws_action_create_modify_header(struct mlx5hws_context *ctx, }struct mlx5hws_action * -mlx5hws_action_create_dest_array (struct mlx5hws_context *ctx, -size_t num_dest, +mlx5hws_action_create_dest_array (struct mlx5hws_context *ctx,size_t num_dest,struct mlx5hws_action_dest_attr *dests, -bool ignore_flow_level, -u32 flow_source,u32 flags) {struct mlx5hws_cmd_set_fte_dest *dest_list =NULL ;
@@ -1400,7 +1397,7 @@ mlx5hws_action_create_dest_array(struct mlx5hws_context *ctx,MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE ; dest_list[i].destination_id = dests[i].dest->dest_obj.obj_id; fte_attr.action_flags |=MLX5_FLOW_CONTEXT_ACTION_FWD_DEST ; - fte_attr.ignore_flow_level = ignore_flow_level; + fte_attr.ignore_flow_level =1 ;if (dests[i].is_wire_ft) last_dest_idx = i;break ;
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws.c +5 -13
@@ -572,14 +572,12 @@ static void mlx5_fs_put_dest_action_sampler(struct mlx5_fs_hws_context *fs_ctx,static struct mlx5hws_action *mlx5_fs_create_action_dest_array (struct mlx5hws_context *ctx,struct mlx5hws_action_dest_attr *dests, -u32 num_of_dests,bool ignore_flow_level, -u32 flow_source) +u32 num_of_dests) {u32 flags =MLX5HWS_ACTION_FLAG_HWS_FDB |MLX5HWS_ACTION_FLAG_SHARED ;return mlx5hws_action_create_dest_array (ctx, num_of_dests, dests, - ignore_flow_level, - flow_source, flags); + flags); } static struct mlx5hws_action *
@@ -1016,20 +1014,14 @@ static int mlx5_fs_fte_get_hws_actions(struct mlx5_flow_root_namespace *ns, } (*ractions)[num_actions++].action = dest_actions->dest; }else if (num_dest_actions >1 ) { -u32 flow_source = fte->act_dests.flow_context.flow_source; -bool ignore_flow_level; -if (num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX || num_fs_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX ) { err = -EOPNOTSUPP ; goto free_actions; } - ignore_flow_level = - !!(fte_action->flags &FLOW_ACT_IGNORE_FLOW_LEVEL ); - tmp_action =mlx5_fs_create_action_dest_array (ctx, dest_actions, - num_dest_actions, - ignore_flow_level, - flow_source); + tmp_action = +mlx5_fs_create_action_dest_array (ctx, dest_actions, + num_dest_actions);if (!tmp_action) { err = -EOPNOTSUPP ; goto free_actions;
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws_pools.c +7 -1
@@ -407,15 +407,21 @@ struct mlx5hws_action *mlx5_fc_get_hws_action(struct mlx5hws_context *ctx, {struct mlx5_fs_hws_create_action_ctx create_ctx;struct mlx5_fc_bulk *fc_bulk = counter->bulk; +struct mlx5hws_action *hws_action; create_ctx.hws_ctx = ctx; create_ctx.id = fc_bulk->base_id; create_ctx.actions_type =MLX5HWS_ACTION_TYP_CTR ; -return mlx5_fs_get_hws_action (&fc_bulk->hws_data, &create_ctx); +mlx5_fc_local_get (counter); + hws_action =mlx5_fs_get_hws_action (&fc_bulk->hws_data, &create_ctx); +if (!hws_action) +mlx5_fc_local_put (counter); +return hws_action; }void mlx5_fc_put_hws_action (struct mlx5_fc *counter) {mlx5_fs_put_hws_action (&counter->bulk->hws_data); +mlx5_fc_local_put (counter); }
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/mlx5hws.h +1 -6
@@ -727,18 +727,13 @@ mlx5hws_action_create_push_vlan(struct mlx5hws_context *ctx, u32 flags);* @num_dest: The number of dests attributes. * @dests: The destination array. Each contains a destination action and can * have additional actions. -* @ignore_flow_level: Whether to turn on 'ignore_flow_level' for this dest. -* @flow_source: Source port of the traffic for this actions. * @flags: Action creation flags (enum mlx5hws_action_flags). * * Return: pointer to mlx5hws_action on success NULL otherwise. */ struct mlx5hws_action * -mlx5hws_action_create_dest_array (struct mlx5hws_context *ctx, -size_t num_dest, +mlx5hws_action_create_dest_array (struct mlx5hws_context *ctx,size_t num_dest,struct mlx5hws_action_dest_attr *dests, -bool ignore_flow_level, -u32 flow_source,u32 flags);/**
drivers/net/phy/bcm-phy-ptp.c +2 -4
@@ -597,10 +597,6 @@ static int bcm_ptp_perout_locked(struct bcm_ptp_private *priv, period =BCM_MAX_PERIOD_8NS ;/* write nonzero value */ -/* Reject unsupported flags */ -if (req->flags & ~PTP_PEROUT_DUTY_CYCLE ) -return -EOPNOTSUPP ; -if (req->flags &PTP_PEROUT_DUTY_CYCLE ) pulse =ktime_to_ns (ktime_set (req->on.sec, req->on.nsec));else
@@ -741,6 +737,8 @@ static const struct ptp_clock_info bcm_ptp_clock_info = { .n_pins = 1, .n_per_out = 1, .n_ext_ts = 1, + .supported_perout_flags = PTP_PEROUT_DUTY_CYCLE, + .supported_extts_flags = PTP_STRICT_FLAGS | PTP_RISING_EDGE, }; static void bcm_ptp_txtstamp(struct mii_timestamper *mii_ts,
drivers/net/phy/sfp.c +23 -1
@@ -361,6 +361,11 @@ static void sfp_fixup_ignore_tx_fault(struct sfp *sfp) sfp->state_ignore_mask |=SFP_F_TX_FAULT ; } +static void sfp_fixup_ignore_hw (struct sfp *sfp,unsigned int mask) +{ + sfp->state_hw_mask &= ~mask; +} +static void sfp_fixup_nokia (struct sfp *sfp) {sfp_fixup_long_startup (sfp);
@@ -409,7 +414,19 @@ static void sfp_fixup_halny_gsfp(struct sfp *sfp)* these are possibly used for other purposes on this * module, e.g. a serial port. */ - sfp->state_hw_mask &= ~(SFP_F_TX_FAULT |SFP_F_LOS ); +sfp_fixup_ignore_hw (sfp,SFP_F_TX_FAULT |SFP_F_LOS ); +} + +static void sfp_fixup_potron (struct sfp *sfp) +{ +/* +* The TX_FAULT and LOS pins on this device are used for serial +* communication, so ignore them. Additionally, provide extra +* time for this device to fully start up. +*/ + +sfp_fixup_long_startup (sfp); +sfp_fixup_ignore_hw (sfp,SFP_F_TX_FAULT |SFP_F_LOS ); }static void sfp_fixup_rollball_cc (struct sfp *sfp)
@@ -475,6 +492,9 @@ static const struct sfp_quirk sfp_quirks[] = {SFP_QUIRK ("ALCATELLUCENT" ,"3FE46541AA" , sfp_quirk_2500basex, sfp_fixup_nokia), +// FLYPRO SFP-10GT-CS-30M uses Rollball protocol to talk to the PHY. + SFP_QUIRK_F("FLYPRO", "SFP-10GT-CS-30M", sfp_fixup_rollball), +// Fiberstore SFP-10G-T doesn't identify as copper, uses the Rollball // protocol to talk to the PHY and needs 4 sec wait before probing the // PHY.
@@ -512,6 +532,8 @@ static const struct sfp_quirk sfp_quirks[] = {SFP_QUIRK_F ("Walsun" ,"HXSX-ATRC-1" , sfp_fixup_fs_10gt),SFP_QUIRK_F ("Walsun" ,"HXSX-ATRI-1" , sfp_fixup_fs_10gt), +SFP_QUIRK_F ("YV" ,"SFP+ONU-XGSPON" , sfp_fixup_potron), +// OEM SFP-GE-T is a 1000Base-T module with broken TX_FAULT indicator SFP_QUIRK_F("OEM", "SFP-GE-T", sfp_fixup_ignore_tx_fault),
drivers/net/tun.c +3 -0
@@ -1863,6 +1863,9 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,local_bh_enable (); goto unlock_frags; } + +if (frags && skb != tfile->napi.skb) + tfile->napi.skb = skb; }rcu_read_unlock ();local_bh_enable ();
drivers/net/wireless/intel/iwlwifi/pcie/tx.c +2 -1
@@ -2093,7 +2093,8 @@ static void iwl_txq_gen1_update_byte_cnt_tbl(struct iwl_trans *trans,break ; } -if (trans->mac_cfg->device_family <IWL_DEVICE_FAMILY_AX210 ) +if (trans->mac_cfg->device_family >=IWL_DEVICE_FAMILY_7000 && + trans->mac_cfg->device_family <IWL_DEVICE_FAMILY_AX210 ) len =DIV_ROUND_UP (len,4 );if (WARN_ON (len >0xFFF || write_ptr >=TFD_QUEUE_SIZE_MAX ))
drivers/net/wireless/virtual/virt_wifi.c +3 -1
@@ -277,7 +277,9 @@ static void virt_wifi_connect_complete(struct work_struct *work) priv->is_connected = true;/* Schedules an event that acquires the rtnl lock. */ -cfg80211_connect_result (priv->upperdev, requested_bss,NULL ,0 ,NULL ,0 , +cfg80211_connect_result (priv->upperdev, + priv->is_connected ? fake_router_bssid :NULL , +NULL ,0 ,NULL ,0 , status,GFP_KERNEL );netif_carrier_on (priv->upperdev); }
drivers/pinctrl/mediatek/pinctrl-airoha.c +17 -14
@@ -108,6 +108,9 @@#define JTAG_UDI_EN_MASK BIT(4)#define JTAG_DFD_EN_MASK BIT(3) +#define REG_FORCE_GPIO_EN 0x0228 +#define FORCE_GPIO_EN (n) BIT(n) +/* LED MAP */ #define REG_LAN_LED0_MAPPING 0x027c#define REG_LAN_LED1_MAPPING 0x0280
@@ -718,17 +721,17 @@ static const struct airoha_pinctrl_func_group mdio_func_group[] = { { .name = "mdio", .regmap[0] = { - AIROHA_FUNC_MUX, - REG_GPIO_PON_MODE, - GPIO_SGMII_MDIO_MODE_MASK, - GPIO_SGMII_MDIO_MODE_MASK - }, - .regmap[1] = { AIROHA_FUNC_MUX, REG_GPIO_2ND_I2C_MODE, GPIO_MDC_IO_MASTER_MODE_MODE, GPIO_MDC_IO_MASTER_MODE_MODE }, + .regmap[1] = { + AIROHA_FUNC_MUX, + REG_FORCE_GPIO_EN, + FORCE_GPIO_EN(1) | FORCE_GPIO_EN(2), + FORCE_GPIO_EN(1) | FORCE_GPIO_EN(2) + }, .regmap_size = 2, }, };
@@ -1752,8 +1755,8 @@ static const struct airoha_pinctrl_func_group phy1_led1_func_group[] = { .regmap[0] = {AIROHA_FUNC_MUX ,REG_GPIO_2ND_I2C_MODE , -GPIO_LAN3_LED0_MODE_MASK , -GPIO_LAN3_LED0_MODE_MASK +GPIO_LAN3_LED1_MODE_MASK , +GPIO_LAN3_LED1_MODE_MASK }, .regmap[1] = { AIROHA_FUNC_MUX,
@@ -1816,8 +1819,8 @@ static const struct airoha_pinctrl_func_group phy2_led1_func_group[] = { .regmap[0] = {AIROHA_FUNC_MUX ,REG_GPIO_2ND_I2C_MODE , -GPIO_LAN3_LED0_MODE_MASK , -GPIO_LAN3_LED0_MODE_MASK +GPIO_LAN3_LED1_MODE_MASK , +GPIO_LAN3_LED1_MODE_MASK }, .regmap[1] = { AIROHA_FUNC_MUX,
@@ -1880,8 +1883,8 @@ static const struct airoha_pinctrl_func_group phy3_led1_func_group[] = { .regmap[0] = {AIROHA_FUNC_MUX ,REG_GPIO_2ND_I2C_MODE , -GPIO_LAN3_LED0_MODE_MASK , -GPIO_LAN3_LED0_MODE_MASK +GPIO_LAN3_LED1_MODE_MASK , +GPIO_LAN3_LED1_MODE_MASK }, .regmap[1] = { AIROHA_FUNC_MUX,
@@ -1944,8 +1947,8 @@ static const struct airoha_pinctrl_func_group phy4_led1_func_group[] = { .regmap[0] = {AIROHA_FUNC_MUX ,REG_GPIO_2ND_I2C_MODE , -GPIO_LAN3_LED0_MODE_MASK , -GPIO_LAN3_LED0_MODE_MASK +GPIO_LAN3_LED1_MODE_MASK , +GPIO_LAN3_LED1_MODE_MASK }, .regmap[1] = { AIROHA_FUNC_MUX,
drivers/platform/x86/lg-laptop.c +14 -20
@@ -8,6 +8,7 @@#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt#include <linux/acpi.h> +#include <linux/bitfield.h> #include <linux/bits.h> #include <linux/device.h> #include <linux/dev_printk.h>
@@ -75,6 +76,9 @@ MODULE_PARM_DESC(fw_debug, "Enable printing of firmware debug messages");#define WMBB_USB_CHARGE 0x10B#define WMBB_BATT_LIMIT 0x10C +#define FAN_MODE_LOWER GENMASK(1, 0) +#define FAN_MODE_UPPER GENMASK(5, 4) +#define PLATFORM_NAME "lg-laptop"MODULE_ALIAS ("wmi:" WMI_EVENT_GUID0 );
@@ -274,29 +278,19 @@ static ssize_t fan_mode_store(struct device *dev,struct device_attribute *attr, const char *buffer, size_t count) { - bool value; + unsigned long value;union acpi_object *r; -u32 m;int ret; - ret =kstrtobool (buffer, &value); + ret =kstrtoul (buffer,10 , &value);if (ret)return ret; +if (value >=3 ) +return -EINVAL ; - r =lg_wmab (dev,WM_FAN_MODE ,WM_GET ,0 ); -if (!r) -return -EIO ; - -if (r->type !=ACPI_TYPE_INTEGER ) { -kfree (r); -return -EIO ; - } - - m = r->integer.value; -kfree (r); - r =lg_wmab (dev,WM_FAN_MODE ,WM_SET , (m &0xffffff0f ) | (value <<4 )); -kfree (r); - r =lg_wmab (dev,WM_FAN_MODE ,WM_SET , (m &0xfffffff0 ) | value); + r =lg_wmab (dev,WM_FAN_MODE ,WM_SET , +FIELD_PREP (FAN_MODE_LOWER , value) | +FIELD_PREP (FAN_MODE_UPPER , value));kfree (r);return count;
@@ -305,7 +299,7 @@ static ssize_t fan_mode_store(struct device *dev,static ssize_t fan_mode_show (struct device *dev,struct device_attribute *attr,char *buffer) { -unsigned int status; +unsigned int mode;union acpi_object *r; r =lg_wmab (dev,WM_FAN_MODE ,WM_GET ,0 );
@@ -317,10 +311,10 @@ static ssize_t fan_mode_show(struct device *dev,return -EIO ; } - status = r->integer.value &0x01 ; + mode =FIELD_GET (FAN_MODE_LOWER , r->integer.value);kfree (r); -return sysfs_emit (buffer,"%d\n" , status); +return sysfs_emit (buffer,"%d\n" , mode); } static ssize_t usb_charge_store(struct device *dev,
drivers/platform/x86/oxpec.c +7 -0
@@ -292,6 +292,13 @@ static const struct dmi_system_id dmi_table[] = { }, .driver_data = (void *)oxp_x1, }, + { + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"ONE-NETBOOK" ), + DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONEXPLAYER X1Mini Pro"), + }, + .driver_data = (void *)oxp_x1, + }, { .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
drivers/spi/spi-cadence-quadspi.c +71 -19
174 lines not on this page · raw message
drivers/ufs/core/ufs-mcq.c +2 -2
@@ -243,7 +243,7 @@ int ufshcd_mcq_memory_alloc(struct ufs_hba *hba) hwq->sqe_base_addr =dmam_alloc_coherent (hba->dev, utrdl_size, &hwq->sqe_dma_addr,GFP_KERNEL ); -if (!hwq->sqe_dma_addr) { +if (!hwq->sqe_base_addr) {dev_err (hba->dev,"SQE allocation failed\n" );return -ENOMEM ; }
@@ -252,7 +252,7 @@ int ufshcd_mcq_memory_alloc(struct ufs_hba *hba) hwq->cqe_base_addr =dmam_alloc_coherent (hba->dev, cqe_size, &hwq->cqe_dma_addr,GFP_KERNEL ); -if (!hwq->cqe_dma_addr) { +if (!hwq->cqe_base_addr) {dev_err (hba->dev,"CQE allocation failed\n" );return -ENOMEM ; }
drivers/usb/core/quirks.c +1 -1
@@ -737,7 +737,7 @@ void usb_detect_quirks(struct usb_device *udev) udev->quirks ^=usb_detect_dynamic_quirks (udev);if (udev->quirks) -dev_dbg (&udev->dev,"USB quirks for this device: %x\n" , +dev_dbg (&udev->dev,"USB quirks for this device: 0x%x\n" , udev->quirks);#ifdef CONFIG_USB_DEFAULT_PERSIST
drivers/vhost/net.c +13 -20
@@ -760,10 +760,10 @@ static void handle_tx_copy(struct vhost_net *net, struct socket *sock)int err;int sent_pkts =0 ;bool sock_can_batch = (sock->sk->sk_sndbuf ==INT_MAX ); -bool busyloop_intr; do { - busyloop_intr = false; + bool busyloop_intr = false; + if (nvq->done_idx == VHOST_NET_BATCH) vhost_tx_batch(net, nvq, sock, &msg);
@@ -774,10 +774,18 @@ static void handle_tx_copy(struct vhost_net *net, struct socket *sock)break ;/* Nothing new? Wait for eventfd to tell us they refilled. */ if (head == vq->num) { -/* Kicks are disabled at this point, break loop and -* process any remaining batched packets. Queue will -* be re-enabled afterwards. +/* Flush batched packets to handle pending RX +* work (if busyloop_intr is set) and to avoid +* unnecessary virtqueue kicks. */ +vhost_tx_batch (net, nvq, sock, &msg); +if (unlikely (busyloop_intr)) { +vhost_poll_queue (&vq->poll); + }else if (unlikely (vhost_enable_notify (&net->dev, + vq))) { +vhost_disable_notify (&net->dev, vq); +continue ; + }break ; }
@@ -827,22 +835,7 @@ static void handle_tx_copy(struct vhost_net *net, struct socket *sock) ++nvq->done_idx; }while (likely (!vhost_exceeds_weight (vq, ++sent_pkts, total_len))); -/* Kicks are still disabled, dispatch any remaining batched msgs. */ vhost_tx_batch (net, nvq, sock, &msg); - -if (unlikely (busyloop_intr)) -/* If interrupted while doing busy polling, requeue the -* handler to be fair handle_rx as well as other tasks -* waiting on cpu. -*/ -vhost_poll_queue (&vq->poll); -else -/* All of our work has been completed; however, before -* leaving the TX handler, do one last check for work, -* and requeue handler if necessary. If there is no work, -* queue will be reenabled. -*/ -vhost_net_busy_poll_try_queue (net, vq); }static void handle_tx_zerocopy (struct vhost_net *net,struct socket *sock)
drivers/video/fbdev/core/fbcon.c +10 -3
@@ -2491,7 +2491,7 @@ static int fbcon_set_font(struct vc_data *vc, const struct console_font *font,unsigned charcount = font->charcount;int w = font->width;int h = font->height; -int size; +int size, alloc_size;int i, csum;u8 *new_data, *data = font->data;int pitch =PITCH (font->width);
@@ -2518,9 +2518,16 @@ static int fbcon_set_font(struct vc_data *vc, const struct console_font *font,if (fbcon_invalid_charcount (info, charcount))return -EINVAL ; - size =CALC_FONTSZ (h, pitch, charcount); +/* Check for integer overflow in font size calculation */ +if (check_mul_overflow (h, pitch, &size) || +check_mul_overflow (size, charcount, &size)) +return -EINVAL ; + +/* Check for overflow in allocation size calculation */ +if (check_add_overflow (FONT_EXTRA_WORDS *sizeof (int ), size, &alloc_size)) +return -EINVAL ; - new_data =kmalloc (FONT_EXTRA_WORDS *sizeof (int ) + size,GFP_USER ); + new_data =kmalloc (alloc_size,GFP_USER );if (!new_data)return -ENOMEM ;
fs/afs/server.c +2 -1
@@ -331,13 +331,14 @@ struct afs_server *afs_use_server(struct afs_server *server, bool activate,void afs_put_server (struct afs_net *net,struct afs_server *server,enum afs_server_trace reason) { -unsigned int a, debug_id = server->debug_id; +unsigned int a, debug_id;bool zero;int r;if (!server)return ; + debug_id = server->debug_id; a =atomic_read (&server->active); zero =__refcount_dec_and_test (&server->ref, &r);trace_afs_server (debug_id, r -1 , a, reason);
fs/btrfs/volumes.c +5 -0
@@ -2714,6 +2714,11 @@ int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path goto error; } +if (bdev_nr_bytes (file_bdev (bdev_file)) <=BTRFS_DEVICE_RANGE_RESERVED ) { + ret = -EINVAL ; + goto error; + } +if (fs_devices->seeding) { seeding_dev = true;down_write (&sb->s_umount);
fs/hugetlbfs/inode.c +6 -4
@@ -520,14 +520,16 @@ static bool remove_inode_single_folio(struct hstate *h, struct inode *inode,/* * If folio is mapped, it was faulted in after being -* unmapped in caller. Unmap (again) while holding -* the fault mutex. The mutex will prevent faults -* until we finish removing the folio. +* unmapped in caller or hugetlb_vmdelete_list() skips +* unmapping it due to fail to grab lock. Unmap (again) +* while holding the fault mutex. The mutex will prevent +* faults until we finish removing the folio. Hold folio +* lock to guarantee no concurrent migration. */ +folio_lock (folio);if (unlikely (folio_mapped (folio)))hugetlb_unmap_file_folio (h, mapping, folio, index); -folio_lock (folio);/* * We must remove the folio from page cache before removing * the region/ reserve map (hugetlb_unreserve_pages). In
fs/netfs/buffered_read.c +5 -5
@@ -369,7 +369,7 @@ void netfs_readahead(struct readahead_control *ractl)return netfs_put_request (rreq, netfs_rreq_trace_put_return); cleanup_free: -return netfs_put_request (rreq, netfs_rreq_trace_put_failed); +return netfs_put_failed_request (rreq); }EXPORT_SYMBOL (netfs_readahead);
@@ -472,7 +472,7 @@ static int netfs_read_gaps(struct file *file, struct folio *folio)return ret <0 ? ret :0 ; discard: -netfs_put_request (rreq, netfs_rreq_trace_put_discard); +netfs_put_failed_request (rreq); alloc_error:folio_unlock (folio);return ret;
@@ -532,7 +532,7 @@ int netfs_read_folio(struct file *file, struct folio *folio)return ret <0 ? ret :0 ; discard: -netfs_put_request (rreq, netfs_rreq_trace_put_discard); +netfs_put_failed_request (rreq); alloc_error:folio_unlock (folio);return ret;
@@ -699,7 +699,7 @@ int netfs_write_begin(struct netfs_inode *ctx,return 0 ; error_put: -netfs_put_request (rreq, netfs_rreq_trace_put_failed); +netfs_put_failed_request (rreq); error:if (folio) {folio_unlock (folio);
@@ -754,7 +754,7 @@ int netfs_prefetch_for_write(struct file *file, struct folio *folio,return ret <0 ? ret :0 ; error_put: -netfs_put_request (rreq, netfs_rreq_trace_put_discard); +netfs_put_failed_request (rreq); error:_leave (" = %d" , ret);return ret;
fs/netfs/direct_read.c +6 -1
@@ -131,6 +131,7 @@ static ssize_t netfs_unbuffered_read(struct netfs_io_request *rreq, bool sync)if (rreq->len ==0 ) {pr_err ("Zero-sized read [R=%x]\n" , rreq->debug_id); +netfs_put_request (rreq, netfs_rreq_trace_put_discard);return -EIO ; }
@@ -205,7 +206,7 @@ ssize_t netfs_unbuffered_read_iter_locked(struct kiocb *iocb, struct iov_iter *iif (user_backed_iter (iter)) { ret =netfs_extract_user_iter (iter, rreq->len, &rreq->buffer.iter,0 );if (ret <0 ) - goto out; + goto error_put; rreq->direct_bv = (struct bio_vec *)rreq->buffer.iter.bvec; rreq->direct_bv_count = ret; rreq->direct_bv_unpin =iov_iter_extract_will_pin (iter);
@@ -238,6 +239,10 @@ ssize_t netfs_unbuffered_read_iter_locked(struct kiocb *iocb, struct iov_iter *iif (ret >0 ) orig_count -= ret;return ret; + +error_put: +netfs_put_failed_request (rreq); +return ret; }EXPORT_SYMBOL (netfs_unbuffered_read_iter_locked);
fs/netfs/direct_write.c +5 -1
@@ -57,7 +57,7 @@ ssize_t netfs_unbuffered_write_iter_locked(struct kiocb *iocb, struct iov_iter * n =netfs_extract_user_iter (iter, len, &wreq->buffer.iter,0 );if (n <0 ) { ret = n; - goto out; + goto error_put; } wreq->direct_bv = (struct bio_vec *)wreq->buffer.iter.bvec; wreq->direct_bv_count = n;
@@ -101,6 +101,10 @@ ssize_t netfs_unbuffered_write_iter_locked(struct kiocb *iocb, struct iov_iter * out:netfs_put_request (wreq, netfs_rreq_trace_put_return);return ret; + +error_put: +netfs_put_failed_request (wreq); +return ret; }EXPORT_SYMBOL (netfs_unbuffered_write_iter_locked);
fs/netfs/internal.h +1 -0
@@ -87,6 +87,7 @@ struct netfs_io_request *netfs_alloc_request(struct address_space *mapping,void netfs_get_request (struct netfs_io_request *rreq,enum netfs_rreq_ref_trace what);void netfs_clear_subrequests (struct netfs_io_request *rreq);void netfs_put_request (struct netfs_io_request *rreq,enum netfs_rreq_ref_trace what); +void netfs_put_failed_request (struct netfs_io_request *rreq);struct netfs_io_subrequest *netfs_alloc_subrequest (struct netfs_io_request *rreq); static inline void netfs_see_request(struct netfs_io_request *rreq,
fs/netfs/objects.c +27 -3
@@ -116,10 +116,8 @@ static void netfs_free_request_rcu(struct rcu_head *rcu)netfs_stat_d (&netfs_n_rh_rreq); } -static void netfs_free_request (struct work_struct *work) +static void netfs_deinit_request (struct netfs_io_request *rreq) { -struct netfs_io_request *rreq = - container_of(work, struct netfs_io_request, cleanup_work);struct netfs_inode *ictx =netfs_inode (rreq->inode);unsigned int i;
@@ -149,6 +147,14 @@ static void netfs_free_request(struct work_struct *work)if (atomic_dec_and_test (&ictx->io_count))wake_up_var (&ictx->io_count); +} + +static void netfs_free_request (struct work_struct *work) +{ +struct netfs_io_request *rreq = + container_of(work, struct netfs_io_request, cleanup_work); + +netfs_deinit_request (rreq);call_rcu (&rreq->rcu, netfs_free_request_rcu); }
@@ -167,6 +173,24 @@ void netfs_put_request(struct netfs_io_request *rreq, enum netfs_rreq_ref_trace } } +/* +* Free a request (synchronously) that was just allocated but has +* failed before it could be submitted. +*/ +void netfs_put_failed_request (struct netfs_io_request *rreq) +{ +int r =refcount_read (&rreq->ref); + +/* new requests have two references (see +* netfs_alloc_request(), and this function is only allowed on +* new request objects +*/ +WARN_ON_ONCE (r !=2 ); + +trace_netfs_rreq_ref (rreq->debug_id, r, netfs_rreq_trace_put_failed); +netfs_free_request (&rreq->cleanup_work); +} +/* * Allocate and partially initialise an I/O request structure. */
fs/netfs/read_pgpriv2.c +1 -1
@@ -118,7 +118,7 @@ static struct netfs_io_request *netfs_pgpriv2_begin_copy_to_cache(return creq; cancel_put: -netfs_put_request (creq, netfs_rreq_trace_put_return); +netfs_put_failed_request (creq); cancel: rreq->copy_to_cache =ERR_PTR (-ENOBUFS );clear_bit (NETFS_RREQ_FOLIO_COPY_TO_CACHE , &rreq->flags);
fs/netfs/read_single.c +1 -1
@@ -189,7 +189,7 @@ ssize_t netfs_read_single(struct inode *inode, struct file *file, struct iov_itereturn ret; cleanup_free: -netfs_put_request (rreq, netfs_rreq_trace_put_failed); +netfs_put_failed_request (rreq);return ret; }EXPORT_SYMBOL (netfs_read_single);
fs/netfs/write_issue.c +1 -2
@@ -133,8 +133,7 @@ struct netfs_io_request *netfs_create_write_req(struct address_space *mapping,return wreq; nomem: - wreq->error = -ENOMEM ; -netfs_put_request (wreq, netfs_rreq_trace_put_failed); +netfs_put_failed_request (wreq);return ERR_PTR (-ENOMEM ); }
fs/nfs/file.c +33 -0
@@ -28,6 +28,7 @@#include <linux/mm.h> #include <linux/pagemap.h> #include <linux/gfp.h> +#include <linux/rmap.h> #include <linux/swap.h> #include <linux/compaction.h>
@@ -279,6 +280,37 @@ nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync) }EXPORT_SYMBOL_GPL (nfs_file_fsync); +void nfs_truncate_last_folio (struct address_space *mapping,loff_t from, +loff_t to) +{ +struct folio *folio; + +if (from >= to) +return ; + + folio =filemap_lock_folio (mapping, from >>PAGE_SHIFT ); +if (IS_ERR (folio)) +return ; + +if (folio_mkclean (folio)) +folio_mark_dirty (folio); + +if (folio_test_uptodate (folio)) { +loff_t fpos =folio_pos (folio); +size_t offset = from - fpos; +size_t end =folio_size (folio); + +if (to - fpos < end) + end = to - fpos; +folio_zero_segment (folio, offset, end); +trace_nfs_size_truncate_folio (mapping->host, to); + } + +folio_unlock (folio); +folio_put (folio); +} +EXPORT_SYMBOL_GPL (nfs_truncate_last_folio); +/* * Decide whether a read/modify/write cycle may be more efficient * then a modify/write/read cycle when writing to a page in the
@@ -353,6 +385,7 @@ static int nfs_write_begin(struct file *file, struct address_space *mapping,dfprintk (PAGECACHE ,"NFS: write_begin(%pD2(%lu), %u@%lld)\n" , file, mapping->host->i_ino, len, (long long ) pos); +nfs_truncate_last_folio (mapping,i_size_read (mapping->host), pos); fgp |=fgf_set_order (len); start:
fs/nfs/inode.c +7 -2
@@ -710,6 +710,7 @@ nfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, {struct inode *inode =d_inode (dentry);struct nfs_fattr *fattr; +loff_t oldsize =i_size_read (inode);int error =0 ;nfs_inc_stats (inode,NFSIOS_VFSSETATTR );
@@ -725,7 +726,7 @@ nfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,if (error)return error; -if (attr->ia_size ==i_size_read (inode)) +if (attr->ia_size == oldsize) attr->ia_valid &= ~ATTR_SIZE ; }
@@ -773,8 +774,12 @@ nfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, } error =NFS_PROTO (inode)->setattr (dentry, fattr, attr); -if (error ==0 ) +if (error ==0 ) { +if (attr->ia_valid &ATTR_SIZE ) +nfs_truncate_last_folio (inode->i_mapping, oldsize, + attr->ia_size); error =nfs_refresh_inode (inode, fattr); + }nfs_free_fattr (fattr); out:trace_nfs_setattr_exit (inode, error);
fs/nfs/internal.h +2 -0
@@ -438,6 +438,8 @@ int nfs_file_release(struct inode *, struct file *);int nfs_lock (struct file *,int ,struct file_lock *);int nfs_flock (struct file *,int ,struct file_lock *);int nfs_check_flags (int ); +void nfs_truncate_last_folio (struct address_space *mapping,loff_t from, +loff_t to);/* inode.c */ extern struct workqueue_struct *nfsiod_workqueue;
fs/nfs/nfs42proc.c +24 -9
@@ -138,6 +138,7 @@ int nfs42_proc_allocate(struct file *filep, loff_t offset, loff_t len) .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_ALLOCATE], };struct inode *inode =file_inode (filep); +loff_t oldsize =i_size_read (inode);int err;if (!nfs_server_capable (inode,NFS_CAP_ALLOCATE ))
@@ -146,7 +147,11 @@ int nfs42_proc_allocate(struct file *filep, loff_t offset, loff_t len)inode_lock (inode); err =nfs42_proc_fallocate (&msg, filep, offset, len); -if (err == -EOPNOTSUPP ) + +if (err ==0 ) +nfs_truncate_last_folio (inode->i_mapping, oldsize, + offset + len); +else if (err == -EOPNOTSUPP )NFS_SERVER (inode)->caps &= ~(NFS_CAP_ALLOCATE |NFS_CAP_ZERO_RANGE );
@@ -184,6 +189,7 @@ int nfs42_proc_zero_range(struct file *filep, loff_t offset, loff_t len) .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_ZERO_RANGE], };struct inode *inode =file_inode (filep); +loff_t oldsize =i_size_read (inode);int err;if (!nfs_server_capable (inode,NFS_CAP_ZERO_RANGE ))
@@ -192,9 +198,11 @@ int nfs42_proc_zero_range(struct file *filep, loff_t offset, loff_t len)inode_lock (inode); err =nfs42_proc_fallocate (&msg, filep, offset, len); -if (err ==0 ) +if (err ==0 ) { +nfs_truncate_last_folio (inode->i_mapping, oldsize, + offset + len);truncate_pagecache_range (inode, offset, (offset + len) -1 ); -if (err == -EOPNOTSUPP ) + }else if (err == -EOPNOTSUPP )NFS_SERVER (inode)->caps &= ~NFS_CAP_ZERO_RANGE ;inode_unlock (inode);
@@ -355,22 +363,27 @@ static int process_copy_commit(struct file *dst, loff_t pos_dst,/** * nfs42_copy_dest_done - perform inode cache updates after clone/copy offload -* @inode: pointer to destination inode +* @file: pointer to destination file * @pos: destination offset * @len: copy length +* @oldsize: length of the file prior to clone/copy * * Punch a hole in the inode page cache, so that the NFS client will * know to retrieve new data. * Update the file size if necessary, and then mark the inode as having * invalid cached values for change attribute, ctime, mtime and space used. */ -static void nfs42_copy_dest_done (struct inode *inode,loff_t pos,loff_t len) +static void nfs42_copy_dest_done (struct file *file,loff_t pos,loff_t len, +loff_t oldsize) { +struct inode *inode =file_inode (file); +struct address_space *mapping = file->f_mapping;loff_t newsize = pos + len;loff_t end = newsize -1 ; -WARN_ON_ONCE (invalidate_inode_pages2_range (inode->i_mapping, - pos >>PAGE_SHIFT , end >>PAGE_SHIFT )); +nfs_truncate_last_folio (mapping, oldsize, pos); +WARN_ON_ONCE (invalidate_inode_pages2_range (mapping, pos >>PAGE_SHIFT , + end >>PAGE_SHIFT ));spin_lock (&inode->i_lock);if (newsize >i_size_read (inode))
@@ -403,6 +416,7 @@ static ssize_t _nfs42_proc_copy(struct file *src,struct nfs_server *src_server =NFS_SERVER (src_inode);loff_t pos_src = args->src_pos;loff_t pos_dst = args->dst_pos; +loff_t oldsize_dst =i_size_read (dst_inode);size_t count = args->count;ssize_t status;
@@ -477,7 +491,7 @@ static ssize_t _nfs42_proc_copy(struct file *src, goto out; } -nfs42_copy_dest_done (dst_inode, pos_dst, res->write_res.count); +nfs42_copy_dest_done (dst, pos_dst, res->write_res.count, oldsize_dst);nfs_invalidate_atime (src_inode); status = res->write_res.count; out:
@@ -1244,6 +1258,7 @@ static int _nfs42_proc_clone(struct rpc_message *msg, struct file *src_f,struct nfs42_clone_res res = { .server = server, }; +loff_t oldsize_dst =i_size_read (dst_inode);int status; msg->rpc_argp = &args;
@@ -1278,7 +1293,7 @@ static int _nfs42_proc_clone(struct rpc_message *msg, struct file *src_f,/* a zero-length count means clone to EOF in src */ if (count ==0 && res.dst_fattr->valid &NFS_ATTR_FATTR_SIZE ) count =nfs_size_to_loff_t (res.dst_fattr->size) - dst_offset; -nfs42_copy_dest_done (dst_inode, dst_offset, count); +nfs42_copy_dest_done (dst_f, dst_offset, count, oldsize_dst); status =nfs_post_op_update_inode (dst_inode, res.dst_fattr); }
fs/nfs/nfstrace.h +1 -0
@@ -267,6 +267,7 @@ DECLARE_EVENT_CLASS(nfs_update_size_class, TP_ARGS(inode, new_size))DEFINE_NFS_UPDATE_SIZE_EVENT (truncate); +DEFINE_NFS_UPDATE_SIZE_EVENT (truncate_folio);DEFINE_NFS_UPDATE_SIZE_EVENT (wcc);DEFINE_NFS_UPDATE_SIZE_EVENT (update);DEFINE_NFS_UPDATE_SIZE_EVENT (grow);
fs/proc/task_mmu.c +3 -0
@@ -2286,6 +2286,9 @@ static void pagemap_scan_backout_range(struct pagemap_scan_private *p, {struct page_region *cur_buf = &p->vec_buf[p->vec_buf_index]; +if (!p->vec_buf) +return ; +if (cur_buf->start != addr) cur_buf->end = addr;else
fs/smb/client/smb2inode.c +1 -1
@@ -687,7 +687,7 @@ static int smb2_compound_op(const unsigned int xid, struct cifs_tcon *tcon, }for (i =0 ; i < num_cmds; i++) { -char *buf = rsp_iov[i + i].iov_base; +char *buf = rsp_iov[i +1 ].iov_base;if (buf && resp_buftype[i +1 ] !=CIFS_NO_BUFFER ) rc = server->ops->map_error (buf, false);
fs/smb/server/transport_rdma.c +10 -12
@@ -148,7 +148,7 @@ struct smb_direct_transport {wait_queue_head_t wait_send_pending;atomic_t send_pending; -struct delayed_work post_recv_credits_work; +struct work_struct post_recv_credits_work;struct work_struct send_immediate_work;struct work_struct disconnect_work;
@@ -367,8 +367,8 @@ static struct smb_direct_transport *alloc_transport(struct rdma_cm_id *cm_id)spin_lock_init (&t->lock_new_recv_credits); -INIT_DELAYED_WORK (&t->post_recv_credits_work, - smb_direct_post_recv_credits); +INIT_WORK (&t->post_recv_credits_work, + smb_direct_post_recv_credits);INIT_WORK (&t->send_immediate_work, smb_direct_send_immediate_work);INIT_WORK (&t->disconnect_work, smb_direct_disconnect_rdma_work);
@@ -399,9 +399,9 @@ static void free_transport(struct smb_direct_transport *t)wait_event (t->wait_send_pending,atomic_read (&t->send_pending) ==0 ); -cancel_work_sync (&t->disconnect_work); -cancel_delayed_work_sync (&t->post_recv_credits_work); -cancel_work_sync (&t->send_immediate_work); +disable_work_sync (&t->disconnect_work); +disable_work_sync (&t->post_recv_credits_work); +disable_work_sync (&t->send_immediate_work);if (t->qp) {ib_drain_qp (t->qp);
@@ -615,8 +615,7 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)wake_up_interruptible (&t->wait_send_credits);if (is_receive_credit_post_required (receive_credits, avail_recvmsg_count)) -mod_delayed_work (smb_direct_wq, - &t->post_recv_credits_work,0 ); +queue_work (smb_direct_wq, &t->post_recv_credits_work);if (data_length) {enqueue_reassembly (t, recvmsg, (int )data_length);
@@ -773,8 +772,7 @@ static int smb_direct_read(struct ksmbd_transport *t, char *buf, st->count_avail_recvmsg += queue_removed;if (is_receive_credit_post_required (st->recv_credits, st->count_avail_recvmsg)) {spin_unlock (&st->receive_credit_lock); -mod_delayed_work (smb_direct_wq, - &st->post_recv_credits_work,0 ); +queue_work (smb_direct_wq, &st->post_recv_credits_work); }else {spin_unlock (&st->receive_credit_lock); }
@@ -801,7 +799,7 @@ static int smb_direct_read(struct ksmbd_transport *t, char *buf,static void smb_direct_post_recv_credits (struct work_struct *work) {struct smb_direct_transport *t =container_of (work, - struct smb_direct_transport, post_recv_credits_work.work); + struct smb_direct_transport, post_recv_credits_work);struct smb_direct_recvmsg *recvmsg;int receive_credits, credits =0 ;int ret;
@@ -1734,7 +1732,7 @@ static int smb_direct_prepare_negotiation(struct smb_direct_transport *t) goto out_err; } -smb_direct_post_recv_credits (&t->post_recv_credits_work.work); +smb_direct_post_recv_credits (&t->post_recv_credits_work);return 0 ; out_err:put_recvmsg (t, recvmsg);
include/crypto/if_alg.h +1 -1
@@ -152,7 +152,7 @@ struct af_alg_ctx {size_t used;atomic_t rcvused; - u32 more:1, + bool more:1, merge:1, enc:1, write:1,
include/linux/firmware/imx/sm.h +47 -0
31 lines not on this page · raw message
kernel/sched/ext_idle.c +44 -8
52 lines not on this page · raw message
net/bluetooth/mgmt.c +182 -77
259 lines not on this page · raw message
net/bluetooth/mgmt_util.c +46 -0
46 lines not on this page · raw message
sound/soc/intel/common/soc-acpi-intel-ptl-match.c +32 -0
Lines of this file are not shown. View the raw message.
sound/usb/mixer_quirks.c +418 -153
571 lines not on this page · raw message
tools/testing/selftests/bpf/prog_tests/free_timer.c +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/prog_tests/timer.c +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/prog_tests/timer_crash.c +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/prog_tests/timer_lockup.c +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/prog_tests/timer_mim.c +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/filesystems/mount-notify/mount-notify_test.c +8 -9
Lines of this file are not shown. View the raw message.
tools/testing/selftests/filesystems/mount-notify/mount-notify_test_ns.c +8 -10
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/fib_nexthops.sh +6 -6
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.