Linux 6.1.34
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.34 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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/mm/page_table_check.rst | 19 Documentation/networking/ip-sysctl.rst | 4 Makefile | 2 arch/arm/boot/dts/at91-sama7g5ek.dts | 2 arch/arm/mach-at91/pm.c | 20 - arch/arm64/boot/dts/freescale/imx8-ss-dma.dtsi | 8 arch/arm64/boot/dts/freescale/imx8mn-beacon-baseboard.dtsi | 4 arch/arm64/boot/dts/freescale/imx8qm-mek.dts | 4 arch/arm64/boot/dts/qcom/sc7180-lite.dtsi | 8 arch/arm64/boot/dts/qcom/sc8280xp.dtsi | 1 arch/riscv/Kconfig | 1 arch/riscv/include/asm/pgtable.h | 3 arch/riscv/mm/init.c | 2 block/blk-mq.c | 8 drivers/block/rbd.c | 62 ++- drivers/bluetooth/hci_qca.c | 6 drivers/firmware/arm_ffa/driver.c | 1 drivers/gpio/gpio-sim.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 10 drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 7 drivers/gpu/drm/amd/amdgpu/vi.c | 11 drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c | 2 drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 92 +++- drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 4 drivers/gpu/drm/i915/display/intel_dp_aux.c | 32 + drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c | 130 +++--- drivers/gpu/drm/i915/gt/selftest_execlists.c | 60 +-- drivers/gpu/drm/i915/gt/selftest_hangcheck.c | 51 +- drivers/gpu/drm/i915/selftests/i915_request.c | 252 ++++++++----- drivers/i2c/busses/i2c-mv64xxx.c | 11 drivers/i2c/busses/i2c-sprd.c | 8 drivers/input/input.c | 2 drivers/input/joystick/xpad.c | 1 drivers/input/mouse/elantech.c | 9 drivers/misc/eeprom/Kconfig | 1 drivers/net/dsa/lan9303-core.c | 4 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 39 +- drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c | 1 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 22 - drivers/net/ethernet/broadcom/genet/bcmgenet.h | 3 drivers/net/ethernet/broadcom/genet/bcmmii.c | 5 drivers/net/ethernet/freescale/enetc/enetc.c | 16 drivers/net/ethernet/qlogic/qed/qed_l2.c | 2 drivers/net/ethernet/qlogic/qede/qede.h | 4 drivers/net/ethernet/qlogic/qede/qede_ethtool.c | 24 + drivers/net/ethernet/qlogic/qede/qede_main.c | 34 + drivers/net/phy/sfp.c | 5 drivers/net/virtio_net.c | 16 drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 8 drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 3 drivers/net/wireless/realtek/rtw88/mac80211.c | 14 drivers/net/wireless/realtek/rtw88/main.c | 4 drivers/net/wireless/realtek/rtw88/ps.c | 43 ++ drivers/net/wireless/realtek/rtw88/ps.h | 2 drivers/net/wireless/realtek/rtw89/mac80211.c | 16 drivers/net/wireless/realtek/rtw89/ps.c | 26 + drivers/net/wireless/realtek/rtw89/ps.h | 1 drivers/pinctrl/meson/pinctrl-meson-axg.c | 1 drivers/platform/surface/aggregator/controller.c | 2 drivers/platform/surface/surface_aggregator_tabletsw.c | 5 drivers/s390/block/dasd_ioctl.c | 4 drivers/scsi/megaraid/megaraid_sas_fusion.c | 2 drivers/scsi/megaraid/megaraid_sas_fusion.h | 5 drivers/soc/qcom/icc-bwmon.c | 4 drivers/soundwire/stream.c | 4 drivers/spi/spi-mt65xx.c | 3 drivers/spi/spi-qup.c | 37 - drivers/staging/rtl8192e/rtl8192e/rtl_core.c | 6 drivers/staging/rtl8192e/rtl8192e/rtl_core.h | 5 drivers/tee/amdtee/amdtee_if.h | 10 drivers/tee/amdtee/call.c | 30 - drivers/usb/core/buffer.c | 41 ++ drivers/usb/core/devio.c | 20 - drivers/vdpa/vdpa_user/vduse_dev.c | 3 drivers/vhost/vdpa.c | 21 - drivers/vhost/vhost.c | 18 drivers/vhost/vhost.h | 8 fs/afs/dir.c | 3 fs/ceph/caps.c | 6 fs/ceph/snap.c | 4 fs/ext4/super.c | 6 fs/ext4/xattr.c | 6 fs/ksmbd/connection.c | 12 fs/ksmbd/oplock.c | 66 +-- fs/ksmbd/smb2pdu.c | 13 include/linux/netdevice.h | 9 include/linux/page-flags.h | 6 include/linux/usb/hcd.h | 5 include/net/bluetooth/hci.h | 1 include/net/bluetooth/hci_core.h | 1 include/net/neighbour.h | 2 include/net/netns/ipv6.h | 2 include/net/ping.h | 6 include/net/pkt_sched.h | 2 include/net/rpl.h | 3 include/net/sch_generic.h | 6 include/net/sock.h | 18 kernel/bpf/map_in_map.c | 8 kernel/fork.c | 2 kernel/trace/bpf_trace.c | 12 lib/cpu_rmap.c | 2 mm/Kconfig.debug | 1 mm/page_table_check.c | 6 net/batman-adv/distributed-arp-table.c | 2 net/bluetooth/hci_conn.c | 2 net/bluetooth/hci_core.c | 10 net/bluetooth/hci_sync.c | 23 - net/bluetooth/l2cap_core.c | 13 net/can/j1939/main.c | 24 - net/can/j1939/socket.c | 5 net/core/dev.c | 8 net/core/skmsg.c | 3 net/ipv4/sysctl_net_ipv4.c | 8 net/ipv4/tcp_offload.c | 19 net/ipv6/exthdrs.c | 29 - net/mac80211/he.c | 15 net/mac80211/mlme.c | 8 net/mac80211/rx.c | 4 net/mptcp/pm.c | 23 - net/mptcp/pm_netlink.c | 18 net/mptcp/pm_userspace.c | 48 ++ net/mptcp/protocol.h | 1 net/netfilter/ipset/ip_set_core.c | 8 net/netfilter/nf_conntrack_core.c | 3 net/netfilter/nf_tables_api.c | 2 net/netfilter/nft_bitwise.c | 2 net/sched/act_police.c | 10 net/sched/cls_api.c | 3 net/sched/sch_api.c | 26 - net/sched/sch_fq_pie.c | 10 net/sched/sch_generic.c | 30 - net/sched/sch_mq.c | 8 net/sched/sch_mqprio.c | 8 net/sched/sch_pie.c | 5 net/sched/sch_red.c | 5 net/sched/sch_sfq.c | 5 net/sched/sch_taprio.c | 6 net/sched/sch_teql.c | 2 net/smc/smc_llc.c | 4 net/wireless/core.c | 4 net/wireless/nl80211.c | 2 sound/isa/gus/gus_pcm.c | 2 sound/pci/cmipci.c | 6 sound/pci/hda/hda_codec.c | 6 sound/pci/hda/patch_realtek.c | 9 sound/pci/ice1712/aureon.c | 7 sound/pci/ice1712/ice1712.c | 14 sound/pci/ice1712/ice1724.c | 16 sound/pci/ymfpci/ymfpci_main.c | 6 sound/soc/codecs/wsa881x.c | 1 sound/soc/codecs/wsa883x.c | 1 sound/soc/generic/simple-card-utils.c | 2 sound/soc/mediatek/mt8195/mt8195-afe-clk.c | 5 sound/soc/mediatek/mt8195/mt8195-afe-clk.h | 1 sound/soc/mediatek/mt8195/mt8195-afe-pcm.c | 9 sound/soc/mediatek/mt8195/mt8195-audsys-clk.c | 47 +- sound/soc/mediatek/mt8195/mt8195-audsys-clk.h | 1 tools/testing/selftests/bpf/prog_tests/sockopt_sk.c | 28 + tools/testing/selftests/bpf/progs/sockopt_sk.c | 12 tools/testing/selftests/net/mptcp/mptcp_join.sh | 11 162 files changed, 1479 insertions(+), 687 deletions(-)
Adam Ford (1):
arm64: dts: imx8mn-beacon: Fix SPI CS pinmux
Ai Chao (1):
ALSA: hda/realtek: Add a quirk for HP Slim Desktop S01
Akihiro Suda (1):
net/ipv4: ping_group_range: allow GID from 2147483648 to 4294967294
Alexander Sverdlin (1):
net: dsa: lan9303: allow vid != 0 in port_fdb_{add|del} methodsAlvin Lee (1):
drm/amd/display: Reduce sdp bw after urgent to 90%
Andi Shyti (1):
drm/i915/gt: Use the correct error value when kernel_context() fails
Balint Dobszay (1):
firmware: arm_ffa: Set handle field to zero in memory descriptor
Ben Hutchings (1):
lib: cpu_rmap: Fix potential use-after-free in irq_cpu_rmap_release()
Bjorn Andersson (1):
arm64: dts: qcom: sc8280xp: Flush RSC sleep & wake votes
Brett Creeley (1):
virtio_net: use control_buf for coalesce params
Charles Keepax (1):
soundwire: stream: Add missing clear of alloc_slave_rt
Chia-I Wu (1):
drm/amdgpu: fix xclk freq on CHIP_STONEY
Claudiu Beznea (2):
ARM: at91: pm: fix imbalanced reference counter for ethernet devices
ARM: dts: at91: sama7g5ek: fix debounce delay property for shdwc
Daniel Golle (1):
spi: mt65xx: make sure operations completed before unloading
David Howells (1):
afs: Fix setting of mtime when creating a file/dir/symlink
Dmitry Torokhov (2):
Input: psmouse - fix OOB access in Elantech protocol
Input: fix open count when closing inhibited device
Douglas Anderson (1):
arm64: dts: qcom: sc7180-lite: Fix SDRAM freq for misidentified sc7180-lite boards
Eric Dumazet (9):
bpf, sockmap: Avoid potential NULL dereference in sk_psock_verdict_data_ready() net/ipv6: fix bool/int mismatch for skip_notify_on_dev_down net/sched: fq_pie: ensure reasonable TCA_FQ_PIE_QUANTUM values
tcp: gso: really support BIG TCP
rfs: annotate lockless accesses to sk->sk_rxhash
rfs: annotate lockless accesses to RFS sock flow table
net: sched: add rcu annotations around qdisc->qdisc_sleeping
net: sched: move rtm_tca_policy declaration to include file
net: sched: act_police: fix sparse errors in tcf_police_dump()
Evan Quan (1):
drm/amd/pm: conditionally disable pcie lane switching for some sienna_cichlid SKUs
Fedor Pchelkin (2):
can: j1939: change j1939_netdev_lock type to mutex
can: j1939: avoid possible use-after-free when j1939_can_rx_register fails
Florian Fainelli (1):
net: bcmgenet: Fix EEE implementation
Geliang Tang (5):
mptcp: only send RM_ADDR in nl_cmd_remove
mptcp: add address into userspace pm list
mptcp: update userspace pm infos
selftests: mptcp: update userspace pm addr tests
selftests: mptcp: update userspace pm subflow tests
Greg Kroah-Hartman (2):
Revert "staging: rtl8192e: Replace macro RTL_PCI_DEVICE with PCI_DEVICE" Linux 6.1.34
Gustavo A. R. Silva (1):
wifi: iwlwifi: mvm: Fix -Warray-bounds bug in iwl_mvm_wait_d3_notif()
Hangyu Hua (1):
net: sched: fix possible refcount leak in tc_chain_tmplt_add()
Horatio Zhang (1):
drm/amdgpu: fix Null pointer dereference error in amdgpu_device_recover_vram
Hsieh-Tseng Shen (1):
riscv: mm: Ensure prot of VM_WRITE and VM_EXEC must be readable
Ilya Dryomov (2):
rbd: move RBD_OBJ_FLAG_COPYUP_ENABLED flag setting
rbd: get snapshot context after exclusive lock is ensured to be held
Ismael Ferreras Morezuelas (1):
Input: xpad - delete a Razer DeathAdder mouse VID/PID entry
Jan Höppner (1):
s390/dasd: Use correct lock while counting channel queue length
Jaroslav Kysela (1):
ALSA: ice1712,ice1724: fix the kcontrol->id initialization
Jeremy Sowden (1):
netfilter: nft_bitwise: fix register tracking
Jiri Olsa (1):
bpf: Add extra path pointer check to d_path helper
Johan Hovold (2):
Bluetooth: fix debugfs registration
Bluetooth: hci_qca: fix debugfs registration
Johannes Berg (5):
wifi: mac80211: use correct iftype HE cap
wifi: cfg80211: reject bad AP MLD address
wifi: mac80211: mlme: fix non-inheritence element
wifi: mac80211: don't translate beacon/presp addrs
wifi: cfg80211: fix locking in sched scan stop work
Jouni Högander (1):
drm/i915: Use 18 fast wake AUX sync len
KP Singh (1):
bpf: Fix UAF in task local storage
Kees Cook (1):
scsi: megaraid_sas: Add flexible array member for SGLs
Kent Gibson (1):
gpio: sim: fix memory corruption when adding named lines and unnamed hogs
Krzysztof Kozlowski (1):
soc: qcom: icc-bwmon: fix incorrect error code passed to dev_err_probe()
Kuniyuki Iwashima (2):
netfilter: ipset: Add schedule point in call_ad().
ipv6: rpl: Fix Route of Death.
Lijo Lazar (1):
drm/amd/pm: Fix power context allocation in SMU13
Lorenzo Bianconi (1):
wifi: mt76: mt7615: fix possible race in mt7615_mac_sta_poll
Luiz Augusto von Dentz (1):
Bluetooth: Fix use-after-free in hci_remove_ltk/hci_remove_irk
Manish Chopra (1):
qed/qede: Fix scheduling while atomic
Marek Behún (1):
i2c: mv64xxx: Fix reading invalid status value in atomic mode
Martin Hundebøll (1):
pinctrl: meson-axg: add missing GPIOA_18 gpio group
Maximilian Luz (2):
platform/surface: aggregator: Allow completion work-items to be executed in parallel platform/surface: aggregator_tabletsw: Add support for book mode in KIP subsystem
Namjae Jeon (3):
ksmbd: fix out-of-bound read in deassemble_neg_contexts()
ksmbd: fix out-of-bound read in parse_lease_state()
ksmbd: check the validation of pdu_size in ksmbd_conn_handler_loop
Oleksij Rempel (1):
can: j1939: j1939_sk_send_loop_abort(): improved error queue handling in J1939 Socket
Pablo Neira Ayuso (1):
netfilter: nf_tables: out-of-bound check in chain blob
Pauli Virtanen (1):
Bluetooth: ISO: don't try to remove CIG if there are bound CIS left
Pavan Chebbi (1):
bnxt_en: Prevent kernel panic when receiving unexpected PHC_UPDATE event
Ping-Ke Shih (2):
wifi: rtw89: correct PS calculation for SUPPORTS_DYNAMIC_PS
wifi: rtw88: correct PS calculation for SUPPORTS_DYNAMIC_PS
Qingfang DENG (1):
neighbour: fix unaligned access to pneigh_entry
Randy Dunlap (1):
eeprom: at24: also select REGMAP
RenHai (1):
ALSA: hda/realtek: Add Lenovo P3 Tower platform
Rhys Rustad-Elliott (1):
bpf: Fix elem_size not being set for inner maps
Rijo Thomas (1):
tee: amdtee: Add return_origin to 'struct tee_cmd_load_ta'
Robert Hancock (1):
ASoC: simple-card-utils: fix PCM constraint error check
Ruan Jinjie (1):
riscv: fix kprobe __user string arg print fault issue
Ruihan Li (4):
usb: usbfs: Enforce page requirements for mmap
usb: usbfs: Use consistent mmap functions
mm: page_table_check: Make it dependent on EXCLUSIVE_SYSTEM_RAM
mm: page_table_check: Ensure user pages are not slab pages
Russell King (Oracle) (1):
net: sfp: fix state loss when updating state_hw_mask
Shannon Nelson (2):
vhost: support PACKED when setting-getting vring_base
vhost_vdpa: support PACKED when setting-getting vring_base
Sheng Zhao (1):
vduse: avoid empty string for dev name
Shenwei Wang (2):
arm64: dts: imx8qm-mek: correct GPIOs for USDHC2 CD and WP signals
arm64: dts: imx8-ss-dma: assign default clock rate for lpuarts
Somnath Kotur (2):
bnxt_en: Query default VLAN before VNIC setup on a VF
bnxt_en: Implement .set_port / .unset_port UDP tunnel callbacks
Sreekanth Reddy (1):
bnxt_en: Don't issue AP reset during ethtool's reset operation
Srinivas Kandagatla (2):
ASoC: codecs: wsa883x: do not set can_multi_write flag
ASoC: codecs: wsa881x: do not set can_multi_write flag
Stanislav Fomichev (1):
selftests/bpf: Verify optval=NULL case
Stefan Binding (1):
ALSA: hda/realtek: Add quirks for Asus ROG 2024 laptops using CS35L41
Stephan Gerhold (1):
spi: qup: Request DMA before enabling clocks
Sungwoo Kim (1):
Bluetooth: L2CAP: Add missing checks for invalid DCID
Takashi Iwai (4):
ALSA: hda: Fix kctl->id initialization
ALSA: ymfpci: Fix kctl->id initialization
ALSA: gus: Fix kctl->id initialization
ALSA: cmipci: Fix kctl->id initializationTheodore Ts'o (2):
Revert "ext4: don't clear SB_RDONLY when remounting r/w until quota is re-enabled"
ext4: only check dquot_initialize_needed() when debugging
Tian Lan (1):
blk-mq: fix blk_mq_hw_ctx active request accounting
Tijs Van Buggenhout (1):
netfilter: conntrack: fix NULL pointer dereference in nf_confirm_cthelper
Tim Crawford (1):
ALSA: hda/realtek: Add quirk for Clevo NS50AU
Trevor Wu (1):
ASoC: mediatek: mt8195: fix use-after-free in driver remove path
Tvrtko Ursulin (2):
drm/i915/selftests: Stop using kthread_stop() drm/i915/selftests: Add some missing error propagation
Uwe Kleine-König (2):
ASoC: mediatek: mt8195-afe-pcm: Convert to platform remove callback returning void
i2c: sprd: Delete i2c adapter in .remove's error path
Vikas Gupta (1):
bnxt_en: Skip firmware fatal error recovery if chip is not accessible
Ville Syrjälä (1):
drm/i915: Explain the magic numbers for AUX SYNC/precharge length
Vladislav Efanov (1):
batman-adv: Broken sync while rescheduling delayed work
Wei Fang (2):
net: enetc: correct the statistics of rx bytes
net: enetc: correct rx_bytes statistics of XDP
Wen Gu (1):
net/smc: Avoid to access invalid RMBs' MRs in SMCRv1 ADD LINK CONT
Xiubo Li (1):
ceph: fix use-after-free bug for inodes when flushing capsnaps
YiPeng Chai (1):
drm/amdgpu: change reserved vram info print
Ying Hsu (1):
Bluetooth: Fix l2cap_disconnect_req deadlock
Yonghong Song (1):
selftests/bpf: Fix sockopt_sk selftest
Zhengping Jiang (1):
Bluetooth: hci_sync: add lock to protect HCI_UNREGISTER
Greg Kroah-Hartman
maintainerDocumentation/mm/page_table_check.rst +19 -0
@@ -54,3 +54,22 @@ Build kernel with: Optionally, build kernel with PAGE_TABLE_CHECK_ENFORCED in order to have page table support without extra kernel parameter. + +Implementation notes +==================== + +We specifically decided not to use VMA information in order to avoid relying on +MM states (except for limited "struct page" info). The page table check is a +separate from Linux-MM state machine that verifies that the user accessible +pages are not falsely shared. + +PAGE_TABLE_CHECK depends on EXCLUSIVE_SYSTEM_RAM. The reason is that without +EXCLUSIVE_SYSTEM_RAM, users are allowed to map arbitrary physical memory +regions into the userspace via /dev/mem. At the same time, pages may change +their properties (e.g., from anonymous pages to named pages) while they are +still being mapped in the userspace, leading to "corruption" detected by the +page table check. + +Even with EXCLUSIVE_SYSTEM_RAM, I/O pages may be still allowed to be mapped via +/dev/mem. However, these pages are always considered as named pages, so they +won't break the logic used in the page table check.
Documentation/networking/ip-sysctl.rst +2 -2
@@ -1247,8 +1247,8 @@ ping_group_range - 2 INTEGERS Restrict ICMP_PROTO datagram sockets to users in the group range. The default is "1 0", meaning, that nobody (not even root) may create ping sockets. Setting it to "100 100" would grant permissions - to the single group. "0 4294967295" would enable it for the world, "100 - 4294967295" would enable it for the users, but not daemons. + to the single group. "0 4294967294" would enable it for the world, "100 + 4294967294" would enable it for the users, but not daemons. tcp_early_demux - BOOLEAN Enable early demux for established TCP sockets.
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 33 +SUBLEVEL = 34 EXTRAVERSION = NAME = Curry Ramen
arch/arm/boot/dts/at91-sama7g5ek.dts +1 -1
@@ -789,7 +789,7 @@ &sdmmc2 { }; &shdwc { - atmel,shdwc-debouncer = <976>; + debounce-delay-us = <976>; status = "okay"; input@0 {
arch/arm/mach-at91/pm.c +9 -11
@@ -334,16 +334,14 @@ static bool at91_pm_eth_quirk_is_valid(struct at91_pm_quirk_eth *eth) pdev =of_find_device_by_node (eth->np);if (!pdev)return false; +/* put_device(eth->dev) is called at the end of suspend. */ eth->dev = &pdev->dev; }/* No quirks if device isn't a wakeup source. */ -if (!device_may_wakeup (eth->dev)) { -put_device (eth->dev); +if (!device_may_wakeup (eth->dev))return false; - } -/* put_device(eth->dev) is called at the end of suspend. */ return true; }
@@ -439,14 +437,14 @@ static int at91_pm_config_quirks(bool suspend)pr_err ("AT91: PM: failed to enable %s clocks\n" , j ==AT91_PM_G_ETH ?"geth" :"eth" ); } - }else { -/* -* Release the reference to eth->dev taken in -* at91_pm_eth_quirk_is_valid(). -*/ -put_device (eth->dev); - eth->dev =NULL ; } + +/* +* Release the reference to eth->dev taken in +* at91_pm_eth_quirk_is_valid(). +*/ +put_device (eth->dev); + eth->dev =NULL ; }return ret;
arch/arm64/boot/dts/freescale/imx8-ss-dma.dtsi +8 -0
@@ -26,6 +26,8 @@ lpuart0: serial@5a060000 { clocks = <&uart0_lpcg IMX_LPCG_CLK_4>, <&uart0_lpcg IMX_LPCG_CLK_0>; clock-names = "ipg", "baud"; + assigned-clocks = <&clk IMX_SC_R_UART_0 IMX_SC_PM_CLK_PER>; + assigned-clock-rates = <80000000>; power-domains = <&pd IMX_SC_R_UART_0>; status = "disabled"; };
@@ -36,6 +38,8 @@ lpuart1: serial@5a070000 { clocks = <&uart1_lpcg IMX_LPCG_CLK_4>, <&uart1_lpcg IMX_LPCG_CLK_0>; clock-names = "ipg", "baud"; + assigned-clocks = <&clk IMX_SC_R_UART_1 IMX_SC_PM_CLK_PER>; + assigned-clock-rates = <80000000>; power-domains = <&pd IMX_SC_R_UART_1>; status = "disabled"; };
@@ -46,6 +50,8 @@ lpuart2: serial@5a080000 { clocks = <&uart2_lpcg IMX_LPCG_CLK_4>, <&uart2_lpcg IMX_LPCG_CLK_0>; clock-names = "ipg", "baud"; + assigned-clocks = <&clk IMX_SC_R_UART_2 IMX_SC_PM_CLK_PER>; + assigned-clock-rates = <80000000>; power-domains = <&pd IMX_SC_R_UART_2>; status = "disabled"; };
@@ -56,6 +62,8 @@ lpuart3: serial@5a090000 { clocks = <&uart3_lpcg IMX_LPCG_CLK_4>, <&uart3_lpcg IMX_LPCG_CLK_0>; clock-names = "ipg", "baud"; + assigned-clocks = <&clk IMX_SC_R_UART_3 IMX_SC_PM_CLK_PER>; + assigned-clock-rates = <80000000>; power-domains = <&pd IMX_SC_R_UART_3>; status = "disabled"; };
arch/arm64/boot/dts/freescale/imx8mn-beacon-baseboard.dtsi +2 -2
@@ -81,7 +81,7 @@ sound { &ecspi2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_espi2>; - cs-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>; + cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>; status = "okay"; eeprom@0 {
@@ -202,7 +202,7 @@ pinctrl_espi2: espi2grp { MX8MN_IOMUXC_ECSPI2_SCLK_ECSPI2_SCLK 0x82 MX8MN_IOMUXC_ECSPI2_MOSI_ECSPI2_MOSI 0x82 MX8MN_IOMUXC_ECSPI2_MISO_ECSPI2_MISO 0x82 - MX8MN_IOMUXC_ECSPI1_SS0_GPIO5_IO9 0x41 + MX8MN_IOMUXC_ECSPI2_SS0_GPIO5_IO13 0x41 >; };
arch/arm64/boot/dts/freescale/imx8qm-mek.dts +2 -2
@@ -82,8 +82,8 @@ &usdhc2 { pinctrl-0 = <&pinctrl_usdhc2>; bus-width = <4>; vmmc-supply = <®_usdhc2_vmmc>; - cd-gpios = <&lsio_gpio4 22 GPIO_ACTIVE_LOW>; - wp-gpios = <&lsio_gpio4 21 GPIO_ACTIVE_HIGH>; + cd-gpios = <&lsio_gpio5 22 GPIO_ACTIVE_LOW>; + wp-gpios = <&lsio_gpio5 21 GPIO_ACTIVE_HIGH>; status = "okay"; };
arch/arm64/boot/dts/qcom/sc7180-lite.dtsi +8 -0
@@ -16,3 +16,11 @@ &cpu6_opp11 { &cpu6_opp12 { opp-peak-kBps = <8532000 23347200>; }; + +&cpu6_opp13 { + opp-peak-kBps = <8532000 23347200>; +}; + +&cpu6_opp14 { + opp-peak-kBps = <8532000 23347200>; +};
arch/arm64/boot/dts/qcom/sc8280xp.dtsi +1 -0
@@ -1727,6 +1727,7 @@ apps_rsc: rsc@18200000 { qcom,tcs-config = <ACTIVE_TCS 2>, <SLEEP_TCS 3>, <WAKE_TCS 3>, <CONTROL_TCS 1>; label = "apps_rsc"; + power-domains = <&CLUSTER_PD>; apps_bcm_voter: bcm-voter { compatible = "qcom,bcm-voter";
arch/riscv/Kconfig +1 -0
@@ -25,6 +25,7 @@ config RISCV select ARCH_HAS_GIGANTIC_PAGE select ARCH_HAS_KCOV select ARCH_HAS_MMIOWB + select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE select ARCH_HAS_PTE_SPECIAL select ARCH_HAS_SET_DIRECT_MAP if MMU select ARCH_HAS_SET_MEMORY if MMU
arch/riscv/include/asm/pgtable.h +1 -2
@@ -165,8 +165,7 @@ extern struct pt_alloc_ops pt_ops __initdata; _PAGE_EXEC | _PAGE_WRITE)#define PAGE_COPY PAGE_READ -#define PAGE_COPY_EXEC PAGE_EXEC -#define PAGE_COPY_READ_EXEC PAGE_READ_EXEC +#define PAGE_COPY_EXEC PAGE_READ_EXEC#define PAGE_SHARED PAGE_WRITE#define PAGE_SHARED_EXEC PAGE_WRITE_EXEC
arch/riscv/mm/init.c +1 -1
@@ -286,7 +286,7 @@ static const pgprot_t protection_map[16] = { [VM_EXEC] = PAGE_EXEC, [VM_EXEC | VM_READ] = PAGE_READ_EXEC, [VM_EXEC | VM_WRITE] = PAGE_COPY_EXEC, - [VM_EXEC | VM_WRITE | VM_READ] = PAGE_COPY_READ_EXEC, + [VM_EXEC | VM_WRITE | VM_READ] = PAGE_COPY_EXEC, [VM_SHARED] = PAGE_NONE, [VM_SHARED | VM_READ] = PAGE_READ, [VM_SHARED | VM_WRITE] = PAGE_SHARED,
block/blk-mq.c +4 -4
@@ -685,6 +685,10 @@ static void __blk_mq_free_request(struct request *rq)blk_crypto_free_request (rq);blk_pm_mark_last_busy (rq); rq->mq_hctx =NULL ; + +if (rq->rq_flags &RQF_MQ_INFLIGHT ) +__blk_mq_dec_active_requests (hctx); +if (rq->tag !=BLK_MQ_NO_TAG )blk_mq_put_tag (hctx->tags, ctx, rq->tag);if (sched_tag !=BLK_MQ_NO_TAG )
@@ -696,15 +700,11 @@ static void __blk_mq_free_request(struct request *rq)void blk_mq_free_request (struct request *rq) {struct request_queue *q = rq->q; -struct blk_mq_hw_ctx *hctx = rq->mq_hctx;if ((rq->rq_flags &RQF_ELVPRIV ) && q->elevator->type->ops.finish_request) q->elevator->type->ops.finish_request (rq); -if (rq->rq_flags &RQF_MQ_INFLIGHT ) -__blk_mq_dec_active_requests (hctx); -if (unlikely (laptop_mode && !blk_rq_is_passthrough (rq)))laptop_io_completion (q->disk->bdi);
drivers/block/rbd.c +44 -18
133 lines not on this page · raw message
drivers/bluetooth/hci_qca.c +5 -1
@@ -78,7 +78,8 @@ enum qca_flags {QCA_HW_ERROR_EVENT ,QCA_SSR_TRIGGERED ,QCA_BT_OFF , -QCA_ROM_FW +QCA_ROM_FW , + QCA_DEBUGFS_CREATED, }; enum qca_capabilities {
@@ -635,6 +636,9 @@ static void qca_debugfs_init(struct hci_dev *hdev)if (!hdev->debugfs)return ; +if (test_and_set_bit (QCA_DEBUGFS_CREATED , &qca->flags)) +return ; + ibs_dir =debugfs_create_dir ("ibs" , hdev->debugfs);/* read only */
drivers/firmware/arm_ffa/driver.c +1 -0
@@ -505,6 +505,7 @@ ffa_setup_and_transmit(u32 func_id, void *buffer, u32 max_fragsize, ep_mem_access->flag =0 ; ep_mem_access->reserved =0 ; } + mem_region->handle =0 ; mem_region->reserved_0 =0 ; mem_region->reserved_1 =0 ; mem_region->ep_count = args->nattrs;
drivers/gpio/gpio-sim.c +4 -2
@@ -717,8 +717,10 @@ static char **gpio_sim_make_line_names(struct gpio_sim_bank *bank,if (!line_names)return ERR_PTR (-ENOMEM ); -list_for_each_entry (line, &bank->line_list, siblings) - line_names[line->offset] = line->name; +list_for_each_entry (line, &bank->line_list, siblings) { +if (line->name && (line->offset <= max_offset)) + line_names[line->offset] = line->name; + }return line_names; }
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +4 -6
@@ -79,9 +79,10 @@ static void amdgpu_bo_user_destroy(struct ttm_buffer_object *tbo)static void amdgpu_bo_vm_destroy (struct ttm_buffer_object *tbo) {struct amdgpu_device *adev =amdgpu_ttm_adev (tbo->bdev); -struct amdgpu_bo *bo =ttm_to_amdgpu_bo (tbo); +struct amdgpu_bo *shadow_bo =ttm_to_amdgpu_bo (tbo), *bo;struct amdgpu_bo_vm *vmbo; + bo = shadow_bo->parent; vmbo =to_amdgpu_bo_vm (bo);/* in case amdgpu_device_recover_vram got NULL of bo->parent */ if (!list_empty (&vmbo->shadow_list)) {
@@ -691,11 +692,6 @@ int amdgpu_bo_create_vm(struct amdgpu_device *adev,return r; *vmbo_ptr =to_amdgpu_bo_vm (bo_ptr); -INIT_LIST_HEAD (&(*vmbo_ptr)->shadow_list); -/* Set destroy callback to amdgpu_bo_vm_destroy after vmbo->shadow_list -* is initialized. -*/ - bo_ptr->tbo.destroy = &amdgpu_bo_vm_destroy;return r; }
@@ -712,6 +708,8 @@ void amdgpu_bo_add_to_shadow_list(struct amdgpu_bo_vm *vmbo)mutex_lock (&adev->shadow_list_lock);list_add_tail (&vmbo->shadow_list, &adev->shadow_list); + vmbo->shadow->parent =amdgpu_bo_ref (&vmbo->bo); + vmbo->shadow->tbo.destroy = &amdgpu_bo_vm_destroy;mutex_unlock (&adev->shadow_list_lock); }
drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c +0 -1
@@ -564,7 +564,6 @@ int amdgpu_vm_pt_create(struct amdgpu_device *adev, struct amdgpu_vm *vm,return r; } - (*vmbo)->shadow->parent =amdgpu_bo_ref (bo);amdgpu_bo_add_to_shadow_list (*vmbo);return 0 ;
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c +4 -3
@@ -799,7 +799,7 @@ static void amdgpu_vram_mgr_debug(struct ttm_resource_manager *man, {struct amdgpu_vram_mgr *mgr =to_vram_mgr (man);struct drm_buddy *mm = &mgr->mm; -struct drm_buddy_block *block; +struct amdgpu_vram_reservation *rsv;drm_printf (printer," vis usage:%llu\n" ,amdgpu_vram_mgr_vis_usage (mgr));
@@ -811,8 +811,9 @@ static void amdgpu_vram_mgr_debug(struct ttm_resource_manager *man,drm_buddy_print (mm, printer);drm_printf (printer,"reserved:\n" ); -list_for_each_entry (block, &mgr->reserved_pages, link) -drm_buddy_block_print (mm, block, printer); +list_for_each_entry (rsv, &mgr->reserved_pages, blocks) +drm_printf (printer,"%#018llx-%#018llx: %llu\n" , + rsv->start, rsv->start + rsv->size, rsv->size);mutex_unlock (&mgr->lock); }
drivers/gpu/drm/amd/amdgpu/vi.c +9 -2
@@ -542,8 +542,15 @@ static u32 vi_get_xclk(struct amdgpu_device *adev)u32 reference_clock = adev->clock.spll.reference_freq;u32 tmp; -if (adev->flags &AMD_IS_APU ) -return reference_clock; +if (adev->flags &AMD_IS_APU ) { +switch (adev->asic_type) { +case CHIP_STONEY : +/* vbios says 48Mhz, but the actual freq is 100Mhz */ +return 10000 ; +default : +return reference_clock; + } + } tmp =RREG32_SMC (ixCG_CLKPIN_CNTL_2);if (REG_GET_FIELD (tmp,CG_CLKPIN_CNTL_2 ,MUX_TCLK_TO_XCLK ))
drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c +1 -1
@@ -137,7 +137,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_2_soc = { .urgent_out_of_order_return_per_channel_pixel_only_bytes = 4096, .urgent_out_of_order_return_per_channel_pixel_and_vm_bytes = 4096, .urgent_out_of_order_return_per_channel_vm_only_bytes = 4096, - .pct_ideal_sdp_bw_after_urgent = 100.0, + .pct_ideal_sdp_bw_after_urgent = 90.0, .pct_ideal_fabric_bw_after_urgent = 67.0, .pct_ideal_dram_sdp_bw_after_urgent_pixel_only = 20.0, .pct_ideal_dram_sdp_bw_after_urgent_pixel_and_vm = 60.0, // N/A, for now keep as is until DML implemented
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +74 -18
118 lines not on this page · raw message
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c +2 -2
@@ -582,11 +582,11 @@ int smu_v13_0_init_power(struct smu_context *smu)if (smu_power->power_context || smu_power->power_context_size !=0 )return -EINVAL ; - smu_power->power_context =kzalloc (sizeof (struct smu_13_0_dpm_context ), + smu_power->power_context =kzalloc (sizeof (struct smu_13_0_power_context ),GFP_KERNEL );if (!smu_power->power_context)return -ENOMEM ; - smu_power->power_context_size =sizeof (struct smu_13_0_dpm_context ); + smu_power->power_context_size =sizeof (struct smu_13_0_power_context );return 0 ; }
drivers/gpu/drm/i915/display/intel_dp_aux.c +29 -3
@@ -119,6 +119,32 @@ static u32 skl_get_aux_clock_divider(struct intel_dp *intel_dp, int index)return index ?0 :1 ; } +static int intel_dp_aux_sync_len (void ) +{ +int precharge =16 ;/* 10-16 */ +int preamble =16 ; + +return precharge + preamble; +} + +static int intel_dp_aux_fw_sync_len (void ) +{ +int precharge =10 ;/* 10-16 */ +int preamble =8 ; + +return precharge + preamble; +} + +static int g4x_dp_aux_precharge_len (void ) +{ +int precharge_min =10 ; +int preamble =16 ; + +/* HW wants the length of the extra precharge in 2us units */ +return (intel_dp_aux_sync_len () - + precharge_min - preamble) /2 ; +} +static u32 g4x_get_aux_send_ctl (struct intel_dp *intel_dp,int send_bytes,u32 aux_clock_divider)
@@ -141,7 +167,7 @@ static u32 g4x_get_aux_send_ctl(struct intel_dp *intel_dp, timeout |DP_AUX_CH_CTL_RECEIVE_ERROR | (send_bytes <<DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT ) | - (3 <<DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT ) | + (g4x_dp_aux_precharge_len () <<DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT ) | (aux_clock_divider <<DP_AUX_CH_CTL_BIT_CLOCK_2X_SHIFT ); }
@@ -165,8 +191,8 @@ static u32 skl_get_aux_send_ctl(struct intel_dp *intel_dp,DP_AUX_CH_CTL_TIME_OUT_MAX |DP_AUX_CH_CTL_RECEIVE_ERROR | (send_bytes <<DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT ) | -DP_AUX_CH_CTL_FW_SYNC_PULSE_SKL (24 ) | -DP_AUX_CH_CTL_SYNC_PULSE_SKL (32 ); +DP_AUX_CH_CTL_FW_SYNC_PULSE_SKL (intel_dp_aux_fw_sync_len ()) | +DP_AUX_CH_CTL_SYNC_PULSE_SKL (intel_dp_aux_sync_len ());if (intel_tc_port_in_tbt_alt_mode (dig_port)) ret |=DP_AUX_CH_CTL_TBT_IO ;
drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c +75 -55
236 lines not on this page · raw message
drivers/gpu/drm/i915/gt/selftest_execlists.c +31 -29
135 lines not on this page · raw message
drivers/gpu/drm/i915/gt/selftest_hangcheck.c +30 -21
116 lines not on this page · raw message
drivers/gpu/drm/i915/selftests/i915_request.c +162 -90
520 lines not on this page · raw message
drivers/i2c/busses/i2c-mv64xxx.c +11 -0
@@ -520,6 +520,17 @@ mv64xxx_i2c_intr(int irq, void *dev_id)while (readl (drv_data->reg_base + drv_data->reg_offsets.control) &MV64XXX_I2C_REG_CONTROL_IFLG ) { +/* +* It seems that sometime the controller updates the status +* register only after it asserts IFLG in control register. +* This may result in weird bugs when in atomic mode. A delay +* of 100 ns before reading the status register solves this +* issue. This bug does not seem to appear when using +* interrupts. +*/ +if (drv_data->atomic) +ndelay (100 ); + status =readl (drv_data->reg_base + drv_data->reg_offsets.status);mv64xxx_i2c_fsm (drv_data, status);mv64xxx_i2c_do_action (drv_data);
drivers/i2c/busses/i2c-sprd.c +5 -3
@@ -576,12 +576,14 @@ static int sprd_i2c_remove(struct platform_device *pdev)struct sprd_i2c *i2c_dev =platform_get_drvdata (pdev);int ret; - ret =pm_runtime_resume_and_get (i2c_dev->dev); + ret =pm_runtime_get_sync (i2c_dev->dev);if (ret <0 ) -return ret; +dev_err (&pdev->dev,"Failed to resume device (%pe)\n" ,ERR_PTR (ret));i2c_del_adapter (&i2c_dev->adap); -clk_disable_unprepare (i2c_dev->clk); + +if (ret >=0 ) +clk_disable_unprepare (i2c_dev->clk);pm_runtime_put_noidle (i2c_dev->dev);pm_runtime_disable (i2c_dev->dev);
drivers/input/input.c +1 -1
@@ -701,7 +701,7 @@ void input_close_device(struct input_handle *handle)__input_release_device (handle); -if (!dev->inhibited && !--dev->users) { +if (!--dev->users && !dev->inhibited) {if (dev->poller)input_dev_poller_stop (dev->poller);if (dev->close)
drivers/input/joystick/xpad.c +0 -1
@@ -282,7 +282,6 @@ static const struct xpad_device { { 0x1430, 0xf801, "RedOctane Controller", 0, XTYPE_XBOX360 }, { 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, XTYPE_XBOX360 }, { 0x146b, 0x0604, "Bigben Interactive DAIJA Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, - { 0x1532, 0x0037, "Razer Sabertooth", 0, XTYPE_XBOX360 }, { 0x1532, 0x0a00, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, { 0x1532, 0x0a03, "Razer Wildcat", 0, XTYPE_XBOXONE }, { 0x15e4, 0x3f00, "Power A Mini Pro Elite", 0, XTYPE_XBOX360 },
drivers/input/mouse/elantech.c +5 -4
@@ -674,10 +674,11 @@ static void process_packet_head_v4(struct psmouse *psmouse)struct input_dev *dev = psmouse->dev;struct elantech_data *etd = psmouse->private;unsigned char *packet = psmouse->packet; -int id = ((packet[3 ] &0xe0 ) >>5 ) -1 ; +int id;int pres, traces; -if (id <0 ) + id = ((packet[3 ] &0xe0 ) >>5 ) -1 ; +if (id <0 || id >=ETP_MAX_FINGERS )return ; etd->mt[id].x = ((packet[1 ] &0x0f ) <<8 ) | packet[2 ];
@@ -707,7 +708,7 @@ static void process_packet_motion_v4(struct psmouse *psmouse)int id, sid; id = ((packet[0 ] &0xe0 ) >>5 ) -1 ; -if (id <0 ) +if (id <0 || id >=ETP_MAX_FINGERS )return ; sid = ((packet[3 ] &0xe0 ) >>5 ) -1 ;
@@ -728,7 +729,7 @@ static void process_packet_motion_v4(struct psmouse *psmouse)input_report_abs (dev,ABS_MT_POSITION_X , etd->mt[id].x);input_report_abs (dev,ABS_MT_POSITION_Y , etd->mt[id].y); -if (sid >=0 ) { +if (sid >=0 && sid <ETP_MAX_FINGERS ) { etd->mt[sid].x += delta_x2 * weight; etd->mt[sid].y -= delta_y2 * weight;input_mt_slot (dev, sid);
drivers/misc/eeprom/Kconfig +1 -0
@@ -6,6 +6,7 @@ config EEPROM_AT24 depends on I2C && SYSFS select NVMEM select NVMEM_SYSFS + select REGMAP select REGMAP_I2C help Enable this driver to get read/write support to most I2C EEPROMs
drivers/net/dsa/lan9303-core.c +0 -4
@@ -1199,8 +1199,6 @@ static int lan9303_port_fdb_add(struct dsa_switch *ds, int port,struct lan9303 *chip = ds->priv;dev_dbg (chip->dev,"%s(%d, %pM, %d)\n" , __func__, port, addr, vid); -if (vid) -return -EOPNOTSUPP ;return lan9303_alr_add_port (chip, addr, port, false); }
@@ -1212,8 +1210,6 @@ static int lan9303_port_fdb_del(struct dsa_switch *ds, int port,struct lan9303 *chip = ds->priv;dev_dbg (chip->dev,"%s(%d, %pM, %d)\n" , __func__, port, addr, vid); -if (vid) -return -EOPNOTSUPP ;lan9303_alr_del_port (chip, addr, port);return 0 ;
drivers/net/ethernet/broadcom/bnxt/bnxt.c +30 -9
@@ -2389,6 +2389,9 @@ static int bnxt_async_event_process(struct bnxt *bp,struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;u64 ns; +if (!ptp) + goto async_event_process_exit; +spin_lock_bh (&ptp->ptp_lock);bnxt_ptp_update_current_time (bp); ns = (((u64)BNXT_EVENT_PHC_RTC_UPDATE(data1) <<
@@ -4787,6 +4790,9 @@ int bnxt_hwrm_func_drv_rgtr(struct bnxt *bp, unsigned long *bmap, int bmap_size,if (event_id ==ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY && !(bp->fw_cap &BNXT_FW_CAP_ERROR_RECOVERY ))continue ; +if (event_id ==ASYNC_EVENT_CMPL_EVENT_ID_PHC_UPDATE && + !bp->ptp_cfg) +continue ;__set_bit (bnxt_async_events_arr[i], async_events_bmap); }if (bmap && bmap_size) {
@@ -8808,6 +8814,9 @@ static int bnxt_init_chip(struct bnxt *bp, bool irq_re_init) goto err_out; } +if (BNXT_VF (bp)) +bnxt_hwrm_func_qcfg (bp); + rc =bnxt_setup_vnic (bp,0 );if (rc) goto err_out;
@@ -11573,6 +11582,7 @@ static void bnxt_tx_timeout(struct net_device *dev, unsigned int txqueue)static void bnxt_fw_health_check (struct bnxt *bp) {struct bnxt_fw_health *fw_health = bp->fw_health; +struct pci_dev *pdev = bp->pdev;u32 val;if (!fw_health->enabled ||test_bit (BNXT_STATE_IN_FW_RESET , &bp->state))
@@ -11586,7 +11596,7 @@ static void bnxt_fw_health_check(struct bnxt *bp) } val =bnxt_fw_health_readl (bp,BNXT_FW_HEARTBEAT_REG ); -if (val == fw_health->last_fw_heartbeat) { +if (val == fw_health->last_fw_heartbeat &&pci_device_is_present (pdev)) { fw_health->arrests++; goto fw_reset; }
@@ -11594,7 +11604,7 @@ static void bnxt_fw_health_check(struct bnxt *bp) fw_health->last_fw_heartbeat = val; val =bnxt_fw_health_readl (bp,BNXT_FW_RESET_CNT_REG ); -if (val != fw_health->last_fw_reset_cnt) { +if (val != fw_health->last_fw_reset_cnt &&pci_device_is_present (pdev)) { fw_health->discoveries++; goto fw_reset; }
@@ -12998,26 +13008,37 @@ static void bnxt_cfg_ntp_filters(struct bnxt *bp)#endif /* CONFIG_RFS_ACCEL */ -static int bnxt_udp_tunnel_sync (struct net_device *netdev,unsigned int table) +static int bnxt_udp_tunnel_set_port (struct net_device *netdev,unsigned int table, +unsigned int entry,struct udp_tunnel_info *ti) {struct bnxt *bp =netdev_priv (netdev); -struct udp_tunnel_info ti;unsigned int cmd; -udp_tunnel_nic_get_port (netdev, table,0 , &ti); -if (ti.type ==UDP_TUNNEL_TYPE_VXLAN ) +if (ti->type ==UDP_TUNNEL_TYPE_VXLAN ) cmd =TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_VXLAN ;else cmd =TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE ; -if (ti.port) -return bnxt_hwrm_tunnel_dst_port_alloc (bp, ti.port, cmd); +return bnxt_hwrm_tunnel_dst_port_alloc (bp, ti->port, cmd); +} + +static int bnxt_udp_tunnel_unset_port (struct net_device *netdev,unsigned int table, +unsigned int entry,struct udp_tunnel_info *ti) +{ +struct bnxt *bp =netdev_priv (netdev); +unsigned int cmd; + +if (ti->type ==UDP_TUNNEL_TYPE_VXLAN ) + cmd =TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_VXLAN ; +else + cmd =TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE ;return bnxt_hwrm_tunnel_dst_port_free (bp, cmd); }static const struct udp_tunnel_nic_info bnxt_udp_tunnels = { - .sync_table = bnxt_udp_tunnel_sync, + .set_port = bnxt_udp_tunnel_set_port, + .unset_port = bnxt_udp_tunnel_unset_port, .flags =UDP_TUNNEL_NIC_INFO_MAY_SLEEP |UDP_TUNNEL_NIC_INFO_OPEN_ONLY , .tables = {
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +1 -1
@@ -3727,7 +3727,7 @@ static int bnxt_reset(struct net_device *dev, u32 *flags) } } -if (req &BNXT_FW_RESET_AP ) { +if (!BNXT_CHIP_P4_PLUS (bp) && (req &BNXT_FW_RESET_AP )) {/* This feature is not supported in older firmware versions */ if (bp->hwrm_spec_code >=0x10803 ) {if (!bnxt_firmware_reset_ap (dev)) {
drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c +1 -0
@@ -929,6 +929,7 @@ int bnxt_ptp_init(struct bnxt *bp, bool phc_cfg) }else {bnxt_ptp_timecounter_init (bp, true); } +bnxt_hwrm_func_drv_rgtr (bp,NULL ,0 , true); ptp->ptp_info = bnxt_ptp_caps;if ((bp->fw_cap &BNXT_FW_CAP_PTP_PPS )) {
drivers/net/ethernet/broadcom/genet/bcmgenet.c +8 -14
@@ -1290,7 +1290,8 @@ static void bcmgenet_get_ethtool_stats(struct net_device *dev, } } -static void bcmgenet_eee_enable_set (struct net_device *dev,bool enable) +void bcmgenet_eee_enable_set (struct net_device *dev,bool enable, +bool tx_lpi_enabled) {struct bcmgenet_priv *priv =netdev_priv (dev);u32 off = priv->hw_params->tbuf_offset +TBUF_ENERGY_CTRL ;
@@ -1310,7 +1311,7 @@ static void bcmgenet_eee_enable_set(struct net_device *dev, bool enable)/* Enable EEE and switch to a 27Mhz clock automatically */ reg =bcmgenet_readl (priv->base + off); -if (enable) +if (tx_lpi_enabled) reg |=TBUF_EEE_EN |TBUF_PM_EN ;else reg &= ~(TBUF_EEE_EN |TBUF_PM_EN );
@@ -1331,6 +1332,7 @@ static void bcmgenet_eee_enable_set(struct net_device *dev, bool enable) priv->eee.eee_enabled = enable; priv->eee.eee_active = enable; + priv->eee.tx_lpi_enabled = tx_lpi_enabled; }static int bcmgenet_get_eee (struct net_device *dev,struct ethtool_eee *e)
@@ -1346,6 +1348,7 @@ static int bcmgenet_get_eee(struct net_device *dev, struct ethtool_eee *e) e->eee_enabled = p->eee_enabled; e->eee_active = p->eee_active; + e->tx_lpi_enabled = p->tx_lpi_enabled; e->tx_lpi_timer =bcmgenet_umac_readl (priv,UMAC_EEE_LPI_TIMER );return phy_ethtool_get_eee (dev->phydev, e);
@@ -1355,7 +1358,6 @@ static int bcmgenet_set_eee(struct net_device *dev, struct ethtool_eee *e) {struct bcmgenet_priv *priv =netdev_priv (dev);struct ethtool_eee *p = &priv->eee; -int ret =0 ;if (GENET_IS_V1 (priv))return -EOPNOTSUPP ;
@@ -1366,16 +1368,11 @@ static int bcmgenet_set_eee(struct net_device *dev, struct ethtool_eee *e) p->eee_enabled = e->eee_enabled;if (!p->eee_enabled) { -bcmgenet_eee_enable_set (dev, false); +bcmgenet_eee_enable_set (dev, false, false); }else { - ret =phy_init_eee (dev->phydev, false); -if (ret) { -netif_err (priv, hw, dev,"EEE initialization failed\n" ); -return ret; - } - + p->eee_active =phy_init_eee (dev->phydev, false) >=0 ;bcmgenet_umac_writel (priv, e->tx_lpi_timer,UMAC_EEE_LPI_TIMER ); -bcmgenet_eee_enable_set (dev, true); +bcmgenet_eee_enable_set (dev, p->eee_active, e->tx_lpi_enabled); }return phy_ethtool_set_eee (dev->phydev, e);
@@ -4274,9 +4271,6 @@ static int bcmgenet_resume(struct device *d)if (!device_may_wakeup (d))phy_resume (dev->phydev); -if (priv->eee.eee_enabled) -bcmgenet_eee_enable_set (dev, true); -bcmgenet_netif_start (dev);netif_device_attach (dev);
drivers/net/ethernet/broadcom/genet/bcmgenet.h +3 -0
@@ -703,4 +703,7 @@ int bcmgenet_wol_power_down_cfg(struct bcmgenet_priv *priv,void bcmgenet_wol_power_up_cfg (struct bcmgenet_priv *priv,enum bcmgenet_power_mode mode); +void bcmgenet_eee_enable_set (struct net_device *dev,bool enable, +bool tx_lpi_enabled); +#endif /* __BCMGENET_H__ */
drivers/net/ethernet/broadcom/genet/bcmmii.c +5 -0
@@ -88,6 +88,11 @@ static void bcmgenet_mac_config(struct net_device *dev) reg |=CMD_TX_EN |CMD_RX_EN ; }bcmgenet_umac_writel (priv, reg,UMAC_CMD ); + + priv->eee.eee_active =phy_init_eee (phydev,0 ) >=0 ; +bcmgenet_eee_enable_set (dev, + priv->eee.eee_enabled && priv->eee.eee_active, + priv->eee.tx_lpi_enabled); }/* setup netdev link state when PHY link status change and
drivers/net/ethernet/freescale/enetc/enetc.c +15 -1
@@ -1209,7 +1209,13 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,if (!skb)break ; - rx_byte_cnt += skb->len; +/* When set, the outer VLAN header is extracted and reported +* in the receive buffer descriptor. So rx_byte_cnt should +* add the length of the extracted VLAN header. +*/ +if (bd_status &ENETC_RXBD_FLAG_VLAN ) + rx_byte_cnt +=VLAN_HLEN ; + rx_byte_cnt += skb->len +ETH_HLEN ; rx_frm_cnt++;napi_gro_receive (napi, skb);
@@ -1532,6 +1538,14 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,enetc_build_xdp_buff (rx_ring, bd_status, &rxbd, &i, &cleaned_cnt, &xdp_buff); +/* When set, the outer VLAN header is extracted and reported +* in the receive buffer descriptor. So rx_byte_cnt should +* add the length of the extracted VLAN header. +*/ +if (bd_status &ENETC_RXBD_FLAG_VLAN ) + rx_byte_cnt +=VLAN_HLEN ; + rx_byte_cnt +=xdp_get_buff_len (&xdp_buff); + xdp_act =bpf_prog_run_xdp (prog, &xdp_buff);switch (xdp_act) {
drivers/net/ethernet/qlogic/qed/qed_l2.c +1 -1
@@ -1903,7 +1903,7 @@ void qed_get_vport_stats(struct qed_dev *cdev, struct qed_eth_stats *stats) {u32 i; -if (!cdev) { +if (!cdev || cdev->recov_in_prog) {memset (stats,0 ,sizeof (*stats));return ; }
drivers/net/ethernet/qlogic/qede/qede.h +4 -0
@@ -271,6 +271,10 @@ struct qede_dev {#define QEDE_ERR_WARN 3struct qede_dump_info dump_info; +struct delayed_work periodic_task; +unsigned long stats_coal_ticks; +u32 stats_coal_usecs; +spinlock_t stats_lock;/* lock for vport stats access */ };enum QEDE_STATE {
drivers/net/ethernet/qlogic/qede/qede_ethtool.c +22 -2
@@ -430,6 +430,8 @@ static void qede_get_ethtool_stats(struct net_device *dev, } } +spin_lock (&edev->stats_lock); +for (i =0 ; i <QEDE_NUM_STATS ; i++) {if (qede_is_irrelevant_stat (edev, i))continue ;
@@ -439,6 +441,8 @@ static void qede_get_ethtool_stats(struct net_device *dev, buf++; } +spin_unlock (&edev->stats_lock); +__qede_unlock (edev); }
@@ -830,6 +834,7 @@ static int qede_get_coalesce(struct net_device *dev, coal->rx_coalesce_usecs = rx_coal; coal->tx_coalesce_usecs = tx_coal; + coal->stats_block_coalesce_usecs = edev->stats_coal_usecs;return rc; }
@@ -843,6 +848,19 @@ int qede_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal,int i, rc =0 ;u16 rxc, txc; +if (edev->stats_coal_usecs != coal->stats_block_coalesce_usecs) { + edev->stats_coal_usecs = coal->stats_block_coalesce_usecs; +if (edev->stats_coal_usecs) { + edev->stats_coal_ticks =usecs_to_jiffies (edev->stats_coal_usecs); +schedule_delayed_work (&edev->periodic_task,0 ); + +DP_INFO (edev,"Configured stats coal ticks=%lu jiffies\n" , + edev->stats_coal_ticks); + }else { +cancel_delayed_work_sync (&edev->periodic_task); + } + } +if (!netif_running (dev)) {DP_INFO (edev,"Interface is down\n" );return -EINVAL ;
@@ -2253,7 +2271,8 @@ static int qede_get_per_coalesce(struct net_device *dev, }static const struct ethtool_ops qede_ethtool_ops = { - .supported_coalesce_params =ETHTOOL_COALESCE_USECS , + .supported_coalesce_params =ETHTOOL_COALESCE_USECS | +ETHTOOL_COALESCE_STATS_BLOCK_USECS , .get_link_ksettings = qede_get_link_ksettings, .set_link_ksettings = qede_set_link_ksettings, .get_drvinfo = qede_get_drvinfo,
@@ -2304,7 +2323,8 @@ static const struct ethtool_ops qede_ethtool_ops = { };static const struct ethtool_ops qede_vf_ethtool_ops = { - .supported_coalesce_params =ETHTOOL_COALESCE_USECS , + .supported_coalesce_params =ETHTOOL_COALESCE_USECS | +ETHTOOL_COALESCE_STATS_BLOCK_USECS , .get_link_ksettings = qede_get_link_ksettings, .get_drvinfo = qede_get_drvinfo, .get_msglevel = qede_get_msglevel,
drivers/net/ethernet/qlogic/qede/qede_main.c +33 -1
@@ -308,6 +308,8 @@ void qede_fill_by_demand_stats(struct qede_dev *edev) edev->ops->get_vport_stats (edev->cdev, &stats); +spin_lock (&edev->stats_lock); + p_common->no_buff_discards = stats.common.no_buff_discards; p_common->packet_too_big_discard = stats.common.packet_too_big_discard; p_common->ttl0_discard = stats.common.ttl0_discard;
@@ -405,6 +407,8 @@ void qede_fill_by_demand_stats(struct qede_dev *edev) p_ah->tx_1519_to_max_byte_packets = stats.ah.tx_1519_to_max_byte_packets; } + +spin_unlock (&edev->stats_lock); } static void qede_get_stats64(struct net_device *dev,
@@ -413,9 +417,10 @@ static void qede_get_stats64(struct net_device *dev,struct qede_dev *edev =netdev_priv (dev);struct qede_stats_common *p_common; -qede_fill_by_demand_stats (edev); p_common = &edev->stats.common; +spin_lock (&edev->stats_lock); + stats->rx_packets = p_common->rx_ucast_pkts + p_common->rx_mcast_pkts + p_common->rx_bcast_pkts; stats->tx_packets = p_common->tx_ucast_pkts + p_common->tx_mcast_pkts +
@@ -435,6 +440,8 @@ static void qede_get_stats64(struct net_device *dev, stats->collisions = edev->stats.bb.tx_total_collisions; stats->rx_crc_errors = p_common->rx_crc_errors; stats->rx_frame_errors = p_common->rx_align_errors; + +spin_unlock (&edev->stats_lock); }#ifdef CONFIG_QED_SRIOV
@@ -1061,6 +1068,23 @@ static void qede_unlock(struct qede_dev *edev)rtnl_unlock (); } +static void qede_periodic_task (struct work_struct *work) +{ + struct qede_dev *edev = container_of(work, struct qede_dev, + periodic_task.work); + +qede_fill_by_demand_stats (edev); +schedule_delayed_work (&edev->periodic_task, edev->stats_coal_ticks); +} + +static void qede_init_periodic_task (struct qede_dev *edev) +{ +INIT_DELAYED_WORK (&edev->periodic_task, qede_periodic_task); +spin_lock_init (&edev->stats_lock); + edev->stats_coal_usecs =USEC_PER_SEC ; + edev->stats_coal_ticks =usecs_to_jiffies (USEC_PER_SEC ); +} +static void qede_sp_task (struct work_struct *work) { struct qede_dev *edev = container_of(work, struct qede_dev,
@@ -1080,6 +1104,7 @@ static void qede_sp_task(struct work_struct *work)*/ if (test_and_clear_bit (QEDE_SP_RECOVERY , &edev->sp_flags)) { +cancel_delayed_work_sync (&edev->periodic_task);#ifdef CONFIG_QED_SRIOV /* SRIOV must be disabled outside the lock to avoid a deadlock. * The recovery of the active VFs is currently not supported.
@@ -1270,6 +1295,7 @@ static int __qede_probe(struct pci_dev *pdev, u32 dp_module, u8 dp_level,*/ INIT_DELAYED_WORK (&edev->sp_task, qede_sp_task);mutex_init (&edev->qede_lock); +qede_init_periodic_task (edev); rc =register_netdev (edev->ndev);if (rc) {
@@ -1294,6 +1320,11 @@ static int __qede_probe(struct pci_dev *pdev, u32 dp_module, u8 dp_level, edev->rx_copybreak =QEDE_RX_HDR_SIZE ;qede_log_probe (edev); + +/* retain user config (for example - after recovery) */ +if (edev->stats_coal_usecs) +schedule_delayed_work (&edev->periodic_task,0 ); +return 0 ; err4:
@@ -1362,6 +1393,7 @@ static void __qede_remove(struct pci_dev *pdev, enum qede_remove_mode mode)unregister_netdev (ndev);cancel_delayed_work_sync (&edev->sp_task); +cancel_delayed_work_sync (&edev->periodic_task); edev->ops->common->set_power_state (cdev,PCI_D0 );
drivers/net/phy/sfp.c +5 -0
@@ -2199,6 +2199,11 @@ static void sfp_sm_module(struct sfp *sfp, unsigned int event)break ; } +/* Force a poll to re-read the hardware signal state after +* sfp_sm_mod_probe() changed state_hw_mask. +*/ +mod_delayed_work (system_wq, &sfp->poll,1 ); + err =sfp_hwmon_insert (sfp);if (err) dev_warn(sfp->dev, "hwmon probe failed: %pe\n",
drivers/net/virtio_net.c +8 -8
@@ -200,6 +200,8 @@ struct control_buf {__virtio16 vid;__virtio64 offloads;struct virtio_net_ctrl_rss rss; +struct virtio_net_ctrl_coal_tx coal_tx; +struct virtio_net_ctrl_coal_rx coal_rx; };struct virtnet_info {
@@ -2786,12 +2788,10 @@ static int virtnet_send_notf_coal_cmds(struct virtnet_info *vi, struct ethtool_coalesce *ec) { struct scatterlist sgs_tx, sgs_rx; - struct virtio_net_ctrl_coal_tx coal_tx; - struct virtio_net_ctrl_coal_rx coal_rx; - coal_tx.tx_usecs = cpu_to_le32(ec->tx_coalesce_usecs); - coal_tx.tx_max_packets = cpu_to_le32(ec->tx_max_coalesced_frames); - sg_init_one(&sgs_tx, &coal_tx, sizeof(coal_tx)); + vi->ctrl->coal_tx.tx_usecs = cpu_to_le32(ec->tx_coalesce_usecs); + vi->ctrl->coal_tx.tx_max_packets = cpu_to_le32(ec->tx_max_coalesced_frames); + sg_init_one(&sgs_tx, &vi->ctrl->coal_tx, sizeof(vi->ctrl->coal_tx)); if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_NOTF_COAL, VIRTIO_NET_CTRL_NOTF_COAL_TX_SET,
@@ -2802,9 +2802,9 @@ static int virtnet_send_notf_coal_cmds(struct virtnet_info *vi, vi->tx_usecs = ec->tx_coalesce_usecs; vi->tx_max_packets = ec->tx_max_coalesced_frames; - coal_rx.rx_usecs =cpu_to_le32 (ec->rx_coalesce_usecs); - coal_rx.rx_max_packets =cpu_to_le32 (ec->rx_max_coalesced_frames); -sg_init_one (&sgs_rx, &coal_rx,sizeof (coal_rx)); + vi->ctrl->coal_rx.rx_usecs =cpu_to_le32 (ec->rx_coalesce_usecs); + vi->ctrl->coal_rx.rx_max_packets =cpu_to_le32 (ec->rx_max_coalesced_frames); +sg_init_one (&sgs_rx, &vi->ctrl->coal_rx,sizeof (vi->ctrl->coal_rx)); if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_NOTF_COAL, VIRTIO_NET_CTRL_NOTF_COAL_RX_SET,
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +2 -6
@@ -2724,17 +2724,13 @@ static bool iwl_mvm_wait_d3_notif(struct iwl_notif_wait_data *notif_wait,if (wowlan_info_ver <2 ) {struct iwl_wowlan_info_notif_v1 *notif_v1 = (void *)pkt->data; - notif =kmemdup (notif_v1, - offsetofend(struct iwl_wowlan_info_notif, - received_beacons), -GFP_ATOMIC ); - + notif =kmemdup (notif_v1,sizeof (*notif),GFP_ATOMIC );if (!notif)return false; notif->tid_tear_down = notif_v1->tid_tear_down; notif->station_id = notif_v1->station_id; - +memset_after (notif,0 , station_id); }else { notif = (void *)pkt->data; }
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +3 -0
@@ -921,7 +921,10 @@ void mt7615_mac_sta_poll(struct mt7615_dev *dev) msta = list_first_entry(&sta_poll_list, struct mt7615_sta, poll_list); + +spin_lock_bh (&dev->sta_poll_lock);list_del_init (&msta->poll_list); +spin_unlock_bh (&dev->sta_poll_lock); addr =mt7615_mac_wtbl_addr (dev, msta->wcid.idx) +19 *4 ;
drivers/net/wireless/realtek/rtw88/mac80211.c +5 -9
@@ -88,15 +88,6 @@ static int rtw_ops_config(struct ieee80211_hw *hw, u32 changed) } } -if (changed &IEEE80211_CONF_CHANGE_PS ) { -if (hw->conf.flags &IEEE80211_CONF_PS ) { - rtwdev->ps_enabled = true; - }else { - rtwdev->ps_enabled = false; -rtw_leave_lps (rtwdev); - } - } -if (changed &IEEE80211_CONF_CHANGE_CHANNEL )rtw_set_channel (rtwdev);
@@ -206,6 +197,7 @@ static int rtw_ops_add_interface(struct ieee80211_hw *hw, rtwvif->bcn_ctrl = bcn_ctrl; config |=PORT_SET_BCN_CTRL ;rtw_vif_port_config (rtwdev, rtwvif, config); +rtw_recalc_lps (rtwdev, vif);mutex_unlock (&rtwdev->mutex);
@@ -236,6 +228,7 @@ static void rtw_ops_remove_interface(struct ieee80211_hw *hw, rtwvif->bcn_ctrl =0 ; config |=PORT_SET_BCN_CTRL ;rtw_vif_port_config (rtwdev, rtwvif, config); +rtw_recalc_lps (rtwdev,NULL );mutex_unlock (&rtwdev->mutex); }
@@ -428,6 +421,9 @@ static void rtw_ops_bss_info_changed(struct ieee80211_hw *hw,if (changed &BSS_CHANGED_ERP_SLOT )rtw_conf_tx (rtwdev, rtwvif); +if (changed &BSS_CHANGED_PS ) +rtw_recalc_lps (rtwdev,NULL ); +rtw_vif_port_config (rtwdev, rtwvif, config);mutex_unlock (&rtwdev->mutex);
drivers/net/wireless/realtek/rtw88/main.c +2 -2
@@ -248,8 +248,8 @@ static void rtw_watch_dog_work(struct work_struct *work)* more than two stations associated to the AP, then we can not enter * lps, because fw does not handle the overlapped beacon interval * -* mac80211 should iterate vifs and determine if driver can enter -* ps by passing IEEE80211_CONF_PS to us, all we need to do is to +* rtw_recalc_lps() iterate vifs and determine if driver can enter +* ps by vif->type and vif->cfg.ps, all we need to do here is to * get that vif and check if device is having traffic more than the * threshold. */
drivers/net/wireless/realtek/rtw88/ps.c +43 -0
46 lines not on this page · raw message
drivers/net/wireless/realtek/rtw88/ps.h +2 -0
@@ -23,4 +23,6 @@ void rtw_enter_lps(struct rtw_dev *rtwdev, u8 port_id);void rtw_leave_lps (struct rtw_dev *rtwdev);void rtw_leave_lps_deep (struct rtw_dev *rtwdev);enum rtw_lps_deep_mode rtw_get_lps_deep_mode (struct rtw_dev *rtwdev); +void rtw_recalc_lps (struct rtw_dev *rtwdev,struct ieee80211_vif *new_vif); +#endif
drivers/net/wireless/realtek/rtw89/mac80211.c +7 -9
@@ -78,15 +78,6 @@ static int rtw89_ops_config(struct ieee80211_hw *hw, u32 changed) !(hw->conf.flags & IEEE80211_CONF_IDLE))rtw89_leave_ips (rtwdev); -if (changed &IEEE80211_CONF_CHANGE_PS ) { -if (hw->conf.flags &IEEE80211_CONF_PS ) { - rtwdev->lps_enabled = true; - }else { -rtw89_leave_lps (rtwdev); - rtwdev->lps_enabled = false; - } - } -if (changed &IEEE80211_CONF_CHANGE_CHANNEL ) {rtw89_config_entity_chandef (rtwdev,RTW89_SUB_ENTITY_0 , &hw->conf.chandef);
@@ -142,6 +133,8 @@ static int rtw89_ops_add_interface(struct ieee80211_hw *hw,rtw89_core_txq_init (rtwdev, vif->txq);rtw89_btc_ntfy_role_info (rtwdev, rtwvif,NULL ,BTC_ROLE_START ); + +rtw89_recalc_lps (rtwdev); out:mutex_unlock (&rtwdev->mutex);
@@ -165,6 +158,8 @@ static void rtw89_ops_remove_interface(struct ieee80211_hw *hw,rtw89_mac_remove_vif (rtwdev, rtwvif);rtw89_core_release_bit_map (rtwdev->hw_port, rtwvif->port);list_del_init (&rtwvif->list); +rtw89_recalc_lps (rtwdev); +mutex_unlock (&rtwdev->mutex); }
@@ -411,6 +406,9 @@ static void rtw89_ops_bss_info_changed(struct ieee80211_hw *hw,if (changed &BSS_CHANGED_P2P_PS )rtw89_process_p2p_ps (rtwdev, vif); +if (changed &BSS_CHANGED_PS ) +rtw89_recalc_lps (rtwdev); +mutex_unlock (&rtwdev->mutex); }
drivers/net/wireless/realtek/rtw89/ps.c +26 -0
@@ -244,3 +244,29 @@ void rtw89_process_p2p_ps(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif)rtw89_p2p_disable_all_noa (rtwdev, vif);rtw89_p2p_update_noa (rtwdev, vif); } + +void rtw89_recalc_lps (struct rtw89_dev *rtwdev) +{ +struct ieee80211_vif *vif, *found_vif =NULL ; +struct rtw89_vif *rtwvif; +int count =0 ; + +rtw89_for_each_rtwvif (rtwdev, rtwvif) { + vif =rtwvif_to_vif (rtwvif); + +if (vif->type !=NL80211_IFTYPE_STATION ) { + count =0 ; +break ; + } + + count++; + found_vif = vif; + } + +if (count ==1 && found_vif->cfg.ps) { + rtwdev->lps_enabled = true; + }else { +rtw89_leave_lps (rtwdev); + rtwdev->lps_enabled = false; + } +}
drivers/net/wireless/realtek/rtw89/ps.h +1 -0
@@ -13,5 +13,6 @@ void rtw89_enter_ips(struct rtw89_dev *rtwdev);void rtw89_leave_ips (struct rtw89_dev *rtwdev);void rtw89_set_coex_ctrl_lps (struct rtw89_dev *rtwdev,bool btc_ctrl);void rtw89_process_p2p_ps (struct rtw89_dev *rtwdev,struct ieee80211_vif *vif); +void rtw89_recalc_lps (struct rtw89_dev *rtwdev);#endif
drivers/pinctrl/meson/pinctrl-meson-axg.c +1 -0
@@ -400,6 +400,7 @@ static struct meson_pmx_group meson_axg_periphs_groups[] = {GPIO_GROUP (GPIOA_15 ),GPIO_GROUP (GPIOA_16 ),GPIO_GROUP (GPIOA_17 ), +GPIO_GROUP (GPIOA_18 ),GPIO_GROUP (GPIOA_19 ), GPIO_GROUP(GPIOA_20),
drivers/platform/surface/aggregator/controller.c +1 -1
@@ -825,7 +825,7 @@ static int ssam_cplt_init(struct ssam_cplt *cplt, struct device *dev) cplt->dev = dev; - cplt->wq =create_workqueue (SSAM_CPLT_WQ_NAME ); + cplt->wq =alloc_workqueue (SSAM_CPLT_WQ_NAME ,WQ_UNBOUND |WQ_MEM_RECLAIM ,0 );if (!cplt->wq)return -ENOMEM ;
drivers/platform/surface/surface_aggregator_tabletsw.c +5 -0
@@ -201,6 +201,7 @@ enum ssam_kip_cover_state {SSAM_KIP_COVER_STATE_LAPTOP =0x03 ,SSAM_KIP_COVER_STATE_FOLDED_CANVAS =0x04 ,SSAM_KIP_COVER_STATE_FOLDED_BACK =0x05 , + SSAM_KIP_COVER_STATE_BOOK = 0x06, };static const char *ssam_kip_cover_state_name (struct ssam_tablet_sw *sw,u32 state)
@@ -221,6 +222,9 @@ static const char *ssam_kip_cover_state_name(struct ssam_tablet_sw *sw, u32 statcase SSAM_KIP_COVER_STATE_FOLDED_BACK :return "folded-back" ; +case SSAM_KIP_COVER_STATE_BOOK : +return "book" ; +default :dev_warn (&sw->sdev->dev,"unknown KIP cover state: %u\n" , state);return "<unknown>" ;
@@ -233,6 +237,7 @@ static bool ssam_kip_cover_state_is_tablet_mode(struct ssam_tablet_sw *sw, u32 scase SSAM_KIP_COVER_STATE_DISCONNECTED :case SSAM_KIP_COVER_STATE_FOLDED_CANVAS :case SSAM_KIP_COVER_STATE_FOLDED_BACK : +case SSAM_KIP_COVER_STATE_BOOK :return true;case SSAM_KIP_COVER_STATE_CLOSED :
drivers/s390/block/dasd_ioctl.c +2 -2
@@ -552,10 +552,10 @@ static int __dasd_ioctl_information(struct dasd_block *block,memcpy (dasd_info->type, base->discipline->name,4 ); -spin_lock_irqsave (&block->queue_lock, flags); +spin_lock_irqsave (get_ccwdev_lock (base->cdev), flags);list_for_each (l, &base->ccw_queue) dasd_info->chanq_len++; -spin_unlock_irqrestore (&block->queue_lock, flags); +spin_unlock_irqrestore (get_ccwdev_lock (base->cdev), flags);return 0 ; }
drivers/scsi/megaraid/megaraid_sas_fusion.c +1 -1
@@ -3323,7 +3323,7 @@ static void megasas_prepare_secondRaid1_IO(struct megasas_instance *instance,/* copy the io request frame as well as 8 SGEs data for r1 command*/ memcpy (r1_cmd->io_request, cmd->io_request, (sizeof (struct MPI2_RAID_SCSI_IO_REQUEST ))); -memcpy (&r1_cmd->io_request->SGL, &cmd->io_request->SGL, +memcpy (r1_cmd->io_request->SGLs, cmd->io_request->SGLs, (fusion->max_sge_in_main_msg *sizeof (union MPI2_SGE_IO_UNION )));/*sense buffer is different for r1 command*/ r1_cmd->io_request->SenseBufferLowAddress =
drivers/scsi/megaraid/megaraid_sas_fusion.h +4 -1
@@ -526,7 +526,10 @@ struct MPI2_RAID_SCSI_IO_REQUEST {__le32 Control;/* 0x3C */ union MPI2_SCSI_IO_CDB_UNION CDB ;/* 0x40 */ union RAID_CONTEXT_UNION RaidContext;/* 0x60 */ -union MPI2_SGE_IO_UNION SGL ;/* 0x80 */ +union { +union MPI2_SGE_IO_UNION SGL;/* 0x80 */ + DECLARE_FLEX_ARRAY(union MPI2_SGE_IO_UNION, SGLs); + }; };/*
drivers/soc/qcom/icc-bwmon.c +2 -2
@@ -603,12 +603,12 @@ static int bwmon_probe(struct platform_device *pdev) bwmon->max_bw_kbps =UINT_MAX ; opp =dev_pm_opp_find_bw_floor (dev, &bwmon->max_bw_kbps,0 );if (IS_ERR (opp)) -return dev_err_probe (dev, ret,"failed to find max peak bandwidth\n" ); +return dev_err_probe (dev,PTR_ERR (opp),"failed to find max peak bandwidth\n" ); bwmon->min_bw_kbps =0 ; opp =dev_pm_opp_find_bw_ceil (dev, &bwmon->min_bw_kbps,0 );if (IS_ERR (opp)) -return dev_err_probe (dev, ret,"failed to find min peak bandwidth\n" ); +return dev_err_probe (dev,PTR_ERR (opp),"failed to find min peak bandwidth\n" ); bwmon->dev = dev;
drivers/soundwire/stream.c +3 -1
@@ -2019,8 +2019,10 @@ int sdw_stream_add_slave(struct sdw_slave *slave, skip_alloc_master_rt: s_rt =sdw_slave_rt_find (slave, stream); -if (s_rt) +if (s_rt) { + alloc_slave_rt = false; goto skip_alloc_slave_rt; + } s_rt =sdw_slave_rt_alloc (slave, m_rt);if (!s_rt) {
drivers/spi/spi-mt65xx.c +3 -0
@@ -1275,6 +1275,9 @@ static int mtk_spi_remove(struct platform_device *pdev)struct mtk_spi *mdata =spi_master_get_devdata (master);int ret; +if (mdata->use_spimem && !completion_done (&mdata->spimem_done)) +complete (&mdata->spimem_done); + ret =pm_runtime_resume_and_get (&pdev->dev);if (ret <0 )return ret;
drivers/spi/spi-qup.c +18 -19
@@ -1029,23 +1029,8 @@ static int spi_qup_probe(struct platform_device *pdev)return -ENXIO ; } - ret =clk_prepare_enable (cclk); -if (ret) { -dev_err (dev,"cannot enable core clock\n" ); -return ret; - } - - ret =clk_prepare_enable (iclk); -if (ret) { -clk_disable_unprepare (cclk); -dev_err (dev,"cannot enable iface clock\n" ); -return ret; - } - master =spi_alloc_master (dev,sizeof (struct spi_qup ));if (!master) { -clk_disable_unprepare (cclk); -clk_disable_unprepare (iclk);dev_err (dev,"cannot allocate master\n" );return -ENOMEM ; }
@@ -1093,6 +1078,19 @@ static int spi_qup_probe(struct platform_device *pdev)spin_lock_init (&controller->lock);init_completion (&controller->done); + ret =clk_prepare_enable (cclk); +if (ret) { +dev_err (dev,"cannot enable core clock\n" ); + goto error_dma; + } + + ret =clk_prepare_enable (iclk); +if (ret) { +clk_disable_unprepare (cclk); +dev_err (dev,"cannot enable iface clock\n" ); + goto error_dma; + } + iomode =readl_relaxed (base +QUP_IO_M_MODES ); size =QUP_IO_M_OUTPUT_BLOCK_SIZE (iomode);
@@ -1122,7 +1120,7 @@ static int spi_qup_probe(struct platform_device *pdev) ret =spi_qup_set_state (controller,QUP_STATE_RESET );if (ret) {dev_err (dev,"cannot set RESET state\n" ); - goto error_dma; + goto error_clk; }writel_relaxed (0 , base +QUP_OPERATIONAL );
@@ -1146,7 +1144,7 @@ static int spi_qup_probe(struct platform_device *pdev) ret =devm_request_irq (dev, irq, spi_qup_qup_irq,IRQF_TRIGGER_HIGH , pdev->name, controller);if (ret) - goto error_dma; + goto error_clk;pm_runtime_set_autosuspend_delay (dev,MSEC_PER_SEC );pm_runtime_use_autosuspend (dev);
@@ -1161,11 +1159,12 @@ static int spi_qup_probe(struct platform_device *pdev) disable_pm:pm_runtime_disable (&pdev->dev); +error_clk: +clk_disable_unprepare (cclk); +clk_disable_unprepare (iclk); error_dma:spi_qup_release_dma (master); error: -clk_disable_unprepare (cclk); -clk_disable_unprepare (iclk);spi_master_put (master);return ret; }
drivers/staging/rtl8192e/rtl8192e/rtl_core.c +3 -3
@@ -48,9 +48,9 @@ static const struct rtl819x_ops rtl819xp_ops = { };static struct pci_device_id rtl8192_pci_id_tbl[] = { - {PCI_DEVICE (0x10ec ,0x8192 )}, - {PCI_DEVICE (0x07aa ,0x0044 )}, - {PCI_DEVICE (0x07aa ,0x0047 )}, + {RTL_PCI_DEVICE (0x10ec ,0x8192 , rtl819xp_ops)}, + {RTL_PCI_DEVICE (0x07aa ,0x0044 , rtl819xp_ops)}, + {RTL_PCI_DEVICE (0x07aa ,0x0047 , rtl819xp_ops)}, {} };
drivers/staging/rtl8192e/rtl8192e/rtl_core.h +5 -0
@@ -55,6 +55,11 @@#define IS_HARDWARE_TYPE_8192SE (_priv) \ (((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8192SE) +#define RTL_PCI_DEVICE (vend, dev, cfg) \ + .vendor = (vend), .device = (dev), \ + .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, \ + .driver_data = (kernel_ulong_t)&(cfg) +#define TOTAL_CAM_ENTRY 32#define CAM_CONTENT_COUNT 8
drivers/tee/amdtee/amdtee_if.h +6 -4
@@ -118,16 +118,18 @@ struct tee_cmd_unmap_shared_mem {/** * struct tee_cmd_load_ta - load Trusted Application (TA) binary into TEE -* @low_addr: [in] bits [31:0] of the physical address of the TA binary -* @hi_addr: [in] bits [63:32] of the physical address of the TA binary -* @size: [in] size of TA binary in bytes -* @ta_handle: [out] return handle of the loaded TA +* @low_addr: [in] bits [31:0] of the physical address of the TA binary +* @hi_addr: [in] bits [63:32] of the physical address of the TA binary +* @size: [in] size of TA binary in bytes +* @ta_handle: [out] return handle of the loaded TA +* @return_origin: [out] origin of return code after TEE processing */ struct tee_cmd_load_ta {u32 low_addr;u32 hi_addr;u32 size;u32 ta_handle; +u32 return_origin; };/**
drivers/tee/amdtee/call.c +17 -13
@@ -423,19 +423,23 @@ int handle_load_ta(void *data, u32 size, struct tee_ioctl_open_session_arg *arg)if (ret) { arg->ret_origin =TEEC_ORIGIN_COMMS ; arg->ret =TEEC_ERROR_COMMUNICATION ; - }else if (arg->ret ==TEEC_SUCCESS ) { - ret =get_ta_refcount (load_cmd.ta_handle); -if (!ret) { - arg->ret_origin =TEEC_ORIGIN_COMMS ; - arg->ret =TEEC_ERROR_OUT_OF_MEMORY ; - -/* Unload the TA on error */ - unload_cmd.ta_handle = load_cmd.ta_handle; -psp_tee_process_cmd (TEE_CMD_ID_UNLOAD_TA , - (void *)&unload_cmd, -sizeof (unload_cmd), &ret); - }else { -set_session_id (load_cmd.ta_handle,0 , &arg->session); + }else { + arg->ret_origin = load_cmd.return_origin; + +if (arg->ret ==TEEC_SUCCESS ) { + ret =get_ta_refcount (load_cmd.ta_handle); +if (!ret) { + arg->ret_origin =TEEC_ORIGIN_COMMS ; + arg->ret =TEEC_ERROR_OUT_OF_MEMORY ; + +/* Unload the TA on error */ + unload_cmd.ta_handle = load_cmd.ta_handle; +psp_tee_process_cmd (TEE_CMD_ID_UNLOAD_TA , + (void *)&unload_cmd, +sizeof (unload_cmd), &ret); + }else { +set_session_id (load_cmd.ta_handle,0 , &arg->session); + } } }mutex_unlock (&ta_refcount_mutex);
drivers/usb/core/buffer.c +41 -0
44 lines not on this page · raw message
drivers/usb/core/devio.c +14 -6
@@ -186,6 +186,7 @@ static int connected(struct usb_dev_state *ps)static void dec_usb_memory_use_count (struct usb_memory *usbm,int *count) {struct usb_dev_state *ps = usbm->ps; +struct usb_hcd *hcd =bus_to_hcd (ps->dev->bus);unsigned long flags;spin_lock_irqsave (&ps->lock, flags);
@@ -194,8 +195,8 @@ static void dec_usb_memory_use_count(struct usb_memory *usbm, int *count)list_del (&usbm->memlist);spin_unlock_irqrestore (&ps->lock, flags); -usb_free_coherent (ps->dev, usbm->size, usbm->mem, - usbm->dma_handle); +hcd_buffer_free_pages (hcd, usbm->size, + usbm->mem, usbm->dma_handle);usbfs_decrease_memory_usage ( usbm->size +sizeof (struct usb_memory ));kfree (usbm);
@@ -234,7 +235,7 @@ static int usbdev_mmap(struct file *file, struct vm_area_struct *vma)size_t size = vma->vm_end - vma->vm_start;void *mem;unsigned long flags; -dma_addr_t dma_handle; +dma_addr_t dma_handle =DMA_MAPPING_ERROR ;int ret; ret =usbfs_increase_memory_usage (size +sizeof (struct usb_memory ));
@@ -247,8 +248,8 @@ static int usbdev_mmap(struct file *file, struct vm_area_struct *vma) goto error_decrease_mem; } - mem =usb_alloc_coherent (ps->dev, size,GFP_USER | __GFP_NOWARN, - &dma_handle); + mem =hcd_buffer_alloc_pages (hcd, + size,GFP_USER | __GFP_NOWARN, &dma_handle);if (!mem) { ret = -ENOMEM ; goto error_free_usbm;
@@ -264,7 +265,14 @@ static int usbdev_mmap(struct file *file, struct vm_area_struct *vma) usbm->vma_use_count =1 ;INIT_LIST_HEAD (&usbm->memlist); -if (hcd->localmem_pool || !hcd_uses_dma (hcd)) { +/* +* In DMA-unavailable cases, hcd_buffer_alloc_pages allocates +* normal pages and assigns DMA_MAPPING_ERROR to dma_handle. Check +* whether we are in such cases, and then use remap_pfn_range (or +* dma_mmap_coherent) to map normal (or DMA) pages into the user +* space, respectively. +*/ +if (dma_handle ==DMA_MAPPING_ERROR ) {if (remap_pfn_range (vma, vma->vm_start,virt_to_phys (usbm->mem) >>PAGE_SHIFT , size, vma->vm_page_prot) <0 ) {
drivers/vdpa/vdpa_user/vduse_dev.c +3 -0
@@ -1443,6 +1443,9 @@ static bool vduse_validate_config(struct vduse_dev_config *config)if (config->vq_num >0xffff )return false; +if (!config->name[0 ]) +return false; +if (!device_is_allowed (config->device_id))return false;
drivers/vhost/vdpa.c +17 -4
@@ -549,7 +549,14 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd,if (r)return r; - vq->last_avail_idx = vq_state.split.avail_index; +if (vhost_has_feature (vq,VIRTIO_F_RING_PACKED )) { + vq->last_avail_idx = vq_state.packed.last_avail_idx | + (vq_state.packed.last_avail_counter <<15 ); + vq->last_used_idx = vq_state.packed.last_used_idx | + (vq_state.packed.last_used_counter <<15 ); + }else { + vq->last_avail_idx = vq_state.split.avail_index; + }break ; }
@@ -567,9 +574,15 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd,break ;case VHOST_SET_VRING_BASE : - vq_state.split.avail_index = vq->last_avail_idx; -if (ops->set_vq_state (vdpa, idx, &vq_state)) - r = -EINVAL ; +if (vhost_has_feature (vq,VIRTIO_F_RING_PACKED )) { + vq_state.packed.last_avail_idx = vq->last_avail_idx &0x7fff ; + vq_state.packed.last_avail_counter = !!(vq->last_avail_idx &0x8000 ); + vq_state.packed.last_used_idx = vq->last_used_idx &0x7fff ; + vq_state.packed.last_used_counter = !!(vq->last_used_idx &0x8000 ); + }else { + vq_state.split.avail_index = vq->last_avail_idx; + } + r = ops->set_vq_state (vdpa, idx, &vq_state);break ;case VHOST_SET_VRING_CALL :
drivers/vhost/vhost.c +13 -5
@@ -1633,17 +1633,25 @@ long vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *arg r = -EFAULT ;break ; } -if (s.num >0xffff ) { - r = -EINVAL ; -break ; +if (vhost_has_feature (vq,VIRTIO_F_RING_PACKED )) { + vq->last_avail_idx = s.num &0xffff ; + vq->last_used_idx = (s.num >>16 ) &0xffff ; + }else { +if (s.num >0xffff ) { + r = -EINVAL ; +break ; + } + vq->last_avail_idx = s.num; } - vq->last_avail_idx = s.num;/* Forget the cached index value. */ vq->avail_idx = vq->last_avail_idx;break ;case VHOST_GET_VRING_BASE : s.index = idx; - s.num = vq->last_avail_idx; +if (vhost_has_feature (vq,VIRTIO_F_RING_PACKED )) + s.num = (u32 )vq->last_avail_idx | ((u32 )vq->last_used_idx <<16 ); +else + s.num = vq->last_avail_idx;if (copy_to_user (argp, &s,sizeof s)) r = -EFAULT ;break ;
drivers/vhost/vhost.h +6 -2
@@ -85,13 +85,17 @@ struct vhost_virtqueue {/* The routine to call when the Guest pings us, or timeout. */ vhost_work_fn_t handle_kick; -/* Last available index we saw. */ +/* Last available index we saw. +* Values are limited to 0x7fff, and the high bit is used as +* a wrap counter when using VIRTIO_F_RING_PACKED. */ u16 last_avail_idx;/* Caches available index value from user. */ u16 avail_idx; -/* Last index we used. */ +/* Last index we used. +* Values are limited to 0x7fff, and the high bit is used as +* a wrap counter when using VIRTIO_F_RING_PACKED. */ u16 last_used_idx;/* Used flags */
fs/afs/dir.c +3 -0
@@ -1357,6 +1357,7 @@ static int afs_mkdir(struct user_namespace *mnt_userns, struct inode *dir, op->dentry = dentry; op->create.mode =S_IFDIR | mode; op->create.reason = afs_edit_dir_for_mkdir; + op->mtime =current_time (dir); op->ops = &afs_mkdir_operation;return afs_do_sync_operation (op); }
@@ -1660,6 +1661,7 @@ static int afs_create(struct user_namespace *mnt_userns, struct inode *dir, op->dentry = dentry; op->create.mode =S_IFREG | mode; op->create.reason = afs_edit_dir_for_create; + op->mtime =current_time (dir); op->ops = &afs_create_operation;return afs_do_sync_operation (op);
@@ -1795,6 +1797,7 @@ static int afs_symlink(struct user_namespace *mnt_userns, struct inode *dir, op->ops = &afs_symlink_operation; op->create.reason = afs_edit_dir_for_symlink; op->create.symlink = content; + op->mtime =current_time (dir);return afs_do_sync_operation (op); error:
fs/ceph/caps.c +6 -0
@@ -1626,6 +1626,7 @@ void ceph_flush_snaps(struct ceph_inode_info *ci,struct inode *inode = &ci->netfs.inode;struct ceph_mds_client *mdsc =ceph_inode_to_client (inode)->mdsc;struct ceph_mds_session *session =NULL ; +bool need_put = false;int mds;dout ("ceph_flush_snaps %p\n" , inode);
@@ -1670,8 +1671,13 @@ void ceph_flush_snaps(struct ceph_inode_info *ci,ceph_put_mds_session (session);/* we flushed them all; remove this inode from the queue */ spin_lock (&mdsc->snap_flush_lock); +if (!list_empty (&ci->i_snap_flush_item)) + need_put = true;list_del_init (&ci->i_snap_flush_item);spin_unlock (&mdsc->snap_flush_lock); + +if (need_put) +iput (inode); }/*
fs/ceph/snap.c +3 -1
@@ -693,8 +693,10 @@ int __ceph_finish_cap_snap(struct ceph_inode_info *ci, capsnap->size);spin_lock (&mdsc->snap_flush_lock); -if (list_empty (&ci->i_snap_flush_item)) +if (list_empty (&ci->i_snap_flush_item)) { +ihold (inode);list_add_tail (&ci->i_snap_flush_item, &mdsc->snap_flush_list); + }spin_unlock (&mdsc->snap_flush_lock);return 1 ;/* caller may want to ceph_flush_snaps */ }
fs/ext4/super.c +1 -5
@@ -6341,7 +6341,6 @@ static int __ext4_remount(struct fs_context *fc, struct super_block *sb)struct ext4_mount_options old_opts;ext4_group_t g;int err =0 ; -int enable_rw =0 ;#ifdef CONFIG_QUOTA int enable_quota =0 ;int i, j;
@@ -6528,7 +6527,7 @@ static int __ext4_remount(struct fs_context *fc, struct super_block *sb)if (err) goto restore_opts; - enable_rw =1 ; + sb->s_flags &= ~SB_RDONLY ;if (ext4_has_feature_mmp (sb)) { err =ext4_multi_mount_protect (sb,le64_to_cpu (es->s_mmp_block));
@@ -6575,9 +6574,6 @@ static int __ext4_remount(struct fs_context *fc, struct super_block *sb)if (!test_opt (sb,BLOCK_VALIDITY ) && sbi->s_system_blks)ext4_release_system_zone (sb); -if (enable_rw) - sb->s_flags &= ~SB_RDONLY ; -/* * Reinitialize lazy itable initialization thread based on * current settings
fs/ext4/xattr.c +4 -2
@@ -2006,8 +2006,9 @@ ext4_xattr_block_set(handle_t *handle, struct inode *inode,else {u32 ref; +#ifdef EXT4_XATTR_DEBUG WARN_ON_ONCE (dquot_initialize_needed (inode)); - +#endif /* The old block is released after updating the inode. */ error = dquot_alloc_block(inode,
@@ -2070,8 +2071,9 @@ ext4_xattr_block_set(handle_t *handle, struct inode *inode,/* We need to allocate a new block */ ext4_fsblk_t goal, block; +#ifdef EXT4_XATTR_DEBUG WARN_ON_ONCE (dquot_initialize_needed (inode)); - +#endif goal =ext4_group_first_block_no (sb,EXT4_I (inode)->i_block_group); block = ext4_new_meta_blocks(handle, inode, goal, 0,
fs/ksmbd/connection.c +12 -0
@@ -296,6 +296,9 @@ bool ksmbd_conn_alive(struct ksmbd_conn *conn)return true; } +#define SMB1_MIN_SUPPORTED_HEADER_SIZE (sizeof(struct smb_hdr)) +#define SMB2_MIN_SUPPORTED_HEADER_SIZE (sizeof(struct smb2_hdr) + 4) +/** * ksmbd_conn_handler_loop() - session thread to listen on new smb requests * @p: connection instance
@@ -352,6 +355,9 @@ int ksmbd_conn_handler_loop(void *p)if (pdu_size >MAX_STREAM_PROT_LEN )break ; +if (pdu_size <SMB1_MIN_SUPPORTED_HEADER_SIZE ) +break ; +/* 4 for rfc1002 length field */ /* 1 for implied bcc[0] */ size = pdu_size +4 +1 ;
@@ -379,6 +385,12 @@ int ksmbd_conn_handler_loop(void *p)continue ; } +if (((struct smb2_hdr *)smb2_get_msg (conn->request_buf))->ProtocolId == +SMB2_PROTO_NUMBER ) { +if (pdu_size <SMB2_MIN_SUPPORTED_HEADER_SIZE ) +break ; + } +if (!default_conn_ops.process_fn) {pr_err ("No connection request callback\n" );break ;
fs/ksmbd/oplock.c +24 -42
42 lines not on this page · raw message
net/mptcp/pm_userspace.c +47 -1
48 lines not on this page · raw message
sound/soc/mediatek/mt8195/mt8195-afe-clk.c +0 -5
Lines of this file are not shown. View the raw message.
sound/soc/mediatek/mt8195/mt8195-afe-clk.h +0 -1
Lines of this file are not shown. View the raw message.
sound/soc/mediatek/mt8195/mt8195-afe-pcm.c +2 -7
Lines of this file are not shown. View the raw message.
sound/soc/mediatek/mt8195/mt8195-audsys-clk.c +24 -23
47 lines not on this page · raw message
sound/soc/mediatek/mt8195/mt8195-audsys-clk.h +0 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/prog_tests/sockopt_sk.c +28 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/sockopt_sk.c +12 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_join.sh +10 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.