Linux 6.3.8
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.3.8 kernel.
All users of the 6.3 kernel series must upgrade.
The updated 6.3.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.3.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/arm64/boot/dts/qcom/sm6375-sony-xperia-murray-pdx225.dts | 4 arch/riscv/Kconfig | 1 arch/riscv/include/asm/pgtable.h | 3 arch/riscv/mm/init.c | 2 block/blk-mq.c | 8 drivers/accel/ivpu/Kconfig | 1 drivers/accel/ivpu/ivpu_hw_mtl.c | 22 drivers/accel/ivpu/ivpu_hw_mtl_reg.h | 1 drivers/accel/ivpu/ivpu_ipc.c | 4 drivers/accel/ivpu/ivpu_job.c | 21 drivers/accel/ivpu/ivpu_mmu.c | 22 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_acpi.c | 8 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/core/dc.c | 36 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 20 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 | 14 drivers/gpu/drm/i915/gt/selftest_execlists.c | 12 drivers/gpu/drm/lima/lima_sched.c | 2 drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 2 drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 2 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/input/touchscreen/cyttsp5.c | 2 drivers/misc/eeprom/Kconfig | 1 drivers/net/dsa/lan9303-core.c | 4 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 40 - 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/intel/ice/ice_common.c | 2 drivers/net/ethernet/intel/ice/ice_common.h | 2 drivers/net/ethernet/intel/ice/ice_gnss.c | 64 - drivers/net/ethernet/intel/ice/ice_gnss.h | 10 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/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/soc/qcom/icc-bwmon.c | 4 drivers/soc/qcom/ramp_controller.c | 2 drivers/soc/qcom/rmtfs_mem.c | 1 drivers/soc/qcom/rpmh-rsc.c | 2 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/mlx5/net/mlx5_vnet.c | 2 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 fs/ksmbd/smbacl.c | 4 fs/ksmbd/vfs.c | 4 include/linux/netdevice.h | 9 include/linux/page-flags.h | 6 include/linux/usb/hcd.h | 5 include/net/bluetooth/bluetooth.h | 43 - include/net/bluetooth/hci.h | 1 include/net/bluetooth/hci_core.h | 41 - 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 | 378 ++++++---- net/bluetooth/hci_core.c | 10 net/bluetooth/hci_event.c | 161 ++-- net/bluetooth/hci_sync.c | 23 net/bluetooth/iso.c | 133 ++- 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 | 4 net/netfilter/nft_bitwise.c | 2 net/openvswitch/datapath.c | 19 net/openvswitch/vport.c | 18 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/amd/ps/pci-ps.c | 3 sound/soc/amd/ps/ps-pdm-dma.c | 10 sound/soc/codecs/wsa881x.c | 1 sound/soc/codecs/wsa883x.c | 1 sound/soc/generic/simple-card-utils.c | 2 sound/soc/mediatek/mt8188/mt8188-afe-clk.c | 7 sound/soc/mediatek/mt8188/mt8188-afe-clk.h | 1 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c | 4 sound/soc/mediatek/mt8188/mt8188-audsys-clk.c | 47 - sound/soc/mediatek/mt8188/mt8188-audsys-clk.h | 1 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 193 files changed, 1842 insertions(+), 951 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
Andrzej Kacprowski (2):
accel/ivpu: Do not trigger extra VPU reset if the VPU is idle accel/ivpu: Fix sporadic VPU boot failure
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
Christophe JAILLET (1):
soc: qcom: ramp_controller: Fix an error handling path in qcom_ramp_controller_probe()
Claudiu Beznea (2):
ARM: at91: pm: fix imbalanced reference counter for ethernet devices
ARM: dts: at91: sama7g5ek: fix debounce delay property for shdwc
Dan Carpenter (1):
soc: qcom: rmtfs: Fix error code in probe()
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 Baryshkov (1):
drm/msm/a6xx: initialize GMU mutex earlier
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
Dragos Tatulea (1):
vdpa/mlx5: Fix hang when cvq commands are triggered during device unregister
Eelco Chaudron (1):
net: openvswitch: fix upcall counter access before allocation
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()
Erico Nunes (1):
drm/lima: fix sched context destroy
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
Gavrilov Ilia (1):
netfilter: nf_tables: Add null check for nla_nest_start_noflag() in nft_dump_basechain_hook()
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.3.8
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
Iulia Tanasescu (1):
Bluetooth: Split bt_iso_qos into dedicated structures
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
Kent Gibson (1):
gpio: sim: fix memory corruption when adding named lines and unnamed hogs
Konrad Dybcio (1):
arm64: dts: qcom: sm6375-pdx225: Fix remoteproc firmware paths
Krzysztof Kozlowski (2):
soc: qcom: icc-bwmon: fix incorrect error code passed to dev_err_probe()
soc: qcom: rpmh-rsc: drop redundant unsigned >=0 comparision
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 (3):
Bluetooth: hci_conn: Add support for linking multiple hcon
Bluetooth: hci_conn: Fix not matching by CIS ID
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
Mario Limonciello (1):
drm/amd: Disallow s0ix without BIOS support again
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
Maximilian Weigand (1):
Input: cyttsp5 - fix array length
Michal Schmidt (1):
ice: make writes to /dev/gnssX synchronous
Namjae Jeon (4):
ksmbd: fix out-of-bound read in deassemble_neg_contexts()
ksmbd: fix out-of-bound read in parse_lease_state()
ksmbd: fix posix_acls and acls dereferencing possible ERR_PTR()
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 (4):
Bluetooth: ISO: consider right CIS when removing CIG at cleanup
Bluetooth: ISO: Fix CIG auto-allocation to select configurable CIG
Bluetooth: ISO: don't try to remove CIG if there are bound CIS left
Bluetooth: ISO: use correct CIS order in Set CIG Parameters event
Pavan Chebbi (2):
bnxt_en: Fix bnxt_hwrm_update_rss_hash_cfg()
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 (2):
accel/ivpu: ivpu_ipc needs GENERIC_ALLOCATOR
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 (7):
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
Bluetooth: Fix potential double free caused by hci_conn_unlink
Bluetooth: Refcnt drop must be placed last in hci_conn_unlink
Bluetooth: Fix UAF in hci_conn_hash_flush again
Samson Tam (1):
drm/amd/display: add ODM case when looking for first split pipe
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
Stanislaw Gruszka (2):
accel/ivpu: Reserve all non-command bo's using DMA_RESV_USAGE_BOOKKEEP accel/ivpu: Do not use mutex_lock_interruptible
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 (2):
ASoC: mediatek: mt8188: fix use-after-free in driver remove path
ASoC: mediatek: mt8195: fix use-after-free in driver remove path
Tvrtko Ursulin (1):
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
Vijendar Mukunda (1):
ASoC: amd: ps: fix for acp_lock access in pdm driver
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
@@ -52,3 +52,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
@@ -1352,8 +1352,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 = 3 -SUBLEVEL = 7 +SUBLEVEL = 8 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm/boot/dts/at91-sama7g5ek.dts +1 -1
@@ -792,7 +792,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
@@ -90,6 +90,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"; };
@@ -100,6 +102,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"; };
@@ -110,6 +114,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"; };
@@ -120,6 +126,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
@@ -3957,6 +3957,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/arm64/boot/dts/qcom/sm6375-sony-xperia-murray-pdx225.dts +2 -2
@@ -151,12 +151,12 @@ &qupv3_id_1 { }; &remoteproc_adsp { - firmware-name = "qcom/Sony/murray/adsp.mbn"; + firmware-name = "qcom/sm6375/Sony/murray/adsp.mbn"; status = "okay"; }; &remoteproc_cdsp { - firmware-name = "qcom/Sony/murray/cdsp.mbn"; + firmware-name = "qcom/sm6375/Sony/murray/cdsp.mbn"; status = "okay"; };
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_PMEM_API select ARCH_HAS_PTE_SPECIAL select ARCH_HAS_SET_DIRECT_MAP 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
@@ -717,6 +717,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 )
@@ -728,15 +732,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/accel/ivpu/Kconfig +1 -0
@@ -7,6 +7,7 @@ config DRM_ACCEL_IVPU depends on PCI && PCI_MSI select FW_LOADER select SHMEM + select GENERIC_ALLOCATOR help Choose this option if you have a system that has an 14th generation Intel CPU or newer. VPU stands for Versatile Processing Unit and it's a CPU-integrated
drivers/accel/ivpu/ivpu_hw_mtl.c +17 -5
@@ -197,6 +197,11 @@ static void ivpu_pll_init_frequency_ratios(struct ivpu_device *vdev) hw->pll.pn_ratio =clamp_t (u8, fuse_pn_ratio, hw->pll.min_ratio, hw->pll.max_ratio); } +static int ivpu_hw_mtl_wait_for_vpuip_bar (struct ivpu_device *vdev) +{ +return REGV_POLL_FLD (MTL_VPU_HOST_SS_CPR_RST_CLR ,AON ,0 ,100 ); +} +static int ivpu_pll_drive (struct ivpu_device *vdev,bool enable) {struct ivpu_hw_info *hw = vdev->hw;
@@ -239,6 +244,12 @@ static int ivpu_pll_drive(struct ivpu_device *vdev, bool enable)ivpu_err (vdev,"Timed out waiting for PLL ready status\n" );return ret; } + + ret =ivpu_hw_mtl_wait_for_vpuip_bar (vdev); +if (ret) { +ivpu_err (vdev,"Timed out waiting for VPUIP bar\n" ); +return ret; + } }return 0 ;
@@ -256,7 +267,7 @@ static int ivpu_pll_disable(struct ivpu_device *vdev)static void ivpu_boot_host_ss_rst_clr_assert (struct ivpu_device *vdev) { -u32 val =REGV_RD32 (MTL_VPU_HOST_SS_CPR_RST_CLR ); +u32 val =0 ; val =REG_SET_FLD (MTL_VPU_HOST_SS_CPR_RST_CLR ,TOP_NOC , val); val =REG_SET_FLD (MTL_VPU_HOST_SS_CPR_RST_CLR ,DSS_MAS , val);
@@ -754,9 +765,8 @@ static int ivpu_hw_mtl_power_down(struct ivpu_device *vdev) {int ret =0 ; -if (ivpu_hw_mtl_reset (vdev)) { +if (!ivpu_hw_mtl_is_idle (vdev) &&ivpu_hw_mtl_reset (vdev)) {ivpu_err (vdev,"Failed to reset the VPU\n" ); - ret = -EIO ; }if (ivpu_pll_disable (vdev)) {
@@ -764,8 +774,10 @@ static int ivpu_hw_mtl_power_down(struct ivpu_device *vdev) ret = -EIO ; } -if (ivpu_hw_mtl_d0i3_enable (vdev)) -ivpu_warn (vdev,"Failed to enable D0I3\n" ); +if (ivpu_hw_mtl_d0i3_enable (vdev)) { +ivpu_err (vdev,"Failed to enter D0I3\n" ); + ret = -EIO ; + }return ret; }
drivers/accel/ivpu/ivpu_hw_mtl_reg.h +1 -0
@@ -91,6 +91,7 @@#define MTL_VPU_HOST_SS_CPR_RST_SET_MSS_MAS_MASK BIT_MASK(11)#define MTL_VPU_HOST_SS_CPR_RST_CLR 0x00000098u +#define MTL_VPU_HOST_SS_CPR_RST_CLR_AON_MASK BIT_MASK(0)#define MTL_VPU_HOST_SS_CPR_RST_CLR_TOP_NOC_MASK BIT_MASK(1)#define MTL_VPU_HOST_SS_CPR_RST_CLR_DSS_MAS_MASK BIT_MASK(10)#define MTL_VPU_HOST_SS_CPR_RST_CLR_MSS_MAS_MASK BIT_MASK(11)
drivers/accel/ivpu/ivpu_ipc.c +1 -3
@@ -183,9 +183,7 @@ ivpu_ipc_send(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, struct vstruct ivpu_ipc_info *ipc = vdev->ipc;int ret; - ret =mutex_lock_interruptible (&ipc->lock); -if (ret) -return ret; +mutex_lock (&ipc->lock);if (!ipc->on) { ret = -EAGAIN ;
drivers/accel/ivpu/ivpu_job.c +14 -7
@@ -431,6 +431,7 @@ ivpu_job_prepare_bos_for_submit(struct drm_file *file, struct ivpu_job *job, u32struct ivpu_file_priv *file_priv = file->driver_priv;struct ivpu_device *vdev = file_priv->vdev;struct ww_acquire_ctx acquire_ctx; +enum dma_resv_usage usage;struct ivpu_bo *bo;int ret;u32 i;
@@ -461,22 +462,28 @@ ivpu_job_prepare_bos_for_submit(struct drm_file *file, struct ivpu_job *job, u32 job->cmd_buf_vpu_addr = bo->vpu_addr + commands_offset; - ret =drm_gem_lock_reservations ((struct drm_gem_object **)job->bos,1 , &acquire_ctx); + ret =drm_gem_lock_reservations ((struct drm_gem_object **)job->bos, buf_count, + &acquire_ctx);if (ret) {ivpu_warn (vdev,"Failed to lock reservations: %d\n" , ret);return ret; } - ret =dma_resv_reserve_fences (bo->base.resv,1 ); -if (ret) { -ivpu_warn (vdev,"Failed to reserve fences: %d\n" , ret); - goto unlock_reservations; +for (i =0 ; i < buf_count; i++) { + ret =dma_resv_reserve_fences (job->bos[i]->base.resv,1 ); +if (ret) { +ivpu_warn (vdev,"Failed to reserve fences: %d\n" , ret); + goto unlock_reservations; + } } -dma_resv_add_fence (bo->base.resv, job->done_fence,DMA_RESV_USAGE_WRITE ); +for (i =0 ; i < buf_count; i++) { + usage = (i ==CMD_BUF_IDX ) ?DMA_RESV_USAGE_WRITE :DMA_RESV_USAGE_BOOKKEEP ; +dma_resv_add_fence (job->bos[i]->base.resv, job->done_fence, usage); + } unlock_reservations: -drm_gem_unlock_reservations ((struct drm_gem_object **)job->bos,1 , &acquire_ctx); +drm_gem_unlock_reservations ((struct drm_gem_object **)job->bos, buf_count, &acquire_ctx);wmb ();/* Flush write combining buffers */
drivers/accel/ivpu/ivpu_mmu.c +6 -16
@@ -587,16 +587,11 @@ static int ivpu_mmu_strtab_init(struct ivpu_device *vdev)int ivpu_mmu_invalidate_tlb (struct ivpu_device *vdev,u16 ssid) {struct ivpu_mmu_info *mmu = vdev->mmu; -int ret; - - ret =mutex_lock_interruptible (&mmu->lock); -if (ret) -return ret; +int ret =0 ; -if (!mmu->on) { - ret =0 ; +mutex_lock (&mmu->lock); +if (!mmu->on) goto unlock; - } ret =ivpu_mmu_cmdq_write_tlbi_nh_asid (vdev, ssid);if (ret)
@@ -614,7 +609,7 @@ static int ivpu_mmu_cd_add(struct ivpu_device *vdev, u32 ssid, u64 cd_dma)struct ivpu_mmu_cdtab *cdtab = &mmu->cdtab;u64 *entry;u64 cd[4 ]; -int ret; +int ret =0 ;if (ssid >IVPU_MMU_CDTAB_ENT_COUNT )return -EINVAL ;
@@ -655,14 +650,9 @@ static int ivpu_mmu_cd_add(struct ivpu_device *vdev, u32 ssid, u64 cd_dma)ivpu_dbg (vdev,MMU ,"CDTAB %s entry (SSID=%u, dma=%pad): 0x%llx, 0x%llx, 0x%llx, 0x%llx\n" , cd_dma ?"write" :"clear" , ssid, &cd_dma, cd[0 ], cd[1 ], cd[2 ], cd[3 ]); - ret =mutex_lock_interruptible (&mmu->lock); -if (ret) -return ret; - -if (!mmu->on) { - ret =0 ; +mutex_lock (&mmu->lock); +if (!mmu->on) goto unlock; - } ret =ivpu_mmu_cmdq_write_cfgi_all (vdev);if (ret)
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
@@ -424,6 +424,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
@@ -721,8 +721,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_acpi.c +6 -2
@@ -1092,16 +1092,20 @@ bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev)* S0ix even though the system is suspending to idle, so return false * in that case. */ -if (!(acpi_gbl_FADT.flags &ACPI_FADT_LOW_POWER_S0 )) +if (!(acpi_gbl_FADT.flags &ACPI_FADT_LOW_POWER_S0 )) {dev_warn_once (adev->dev,"Power consumption will be higher as BIOS has not been configured for suspend-to-idle.\n" "To use suspend-to-idle change the sleep mode in BIOS setup.\n" ); +return false; + }#if !IS_ENABLED (CONFIG_AMD_PMC )dev_warn_once (adev->dev,"Power consumption will be higher as the kernel has not been compiled with CONFIG_AMD_PMC.\n" ); -#endif /* CONFIG_AMD_PMC */ +return false; +#else return true; +#endif /* CONFIG_AMD_PMC */ }#endif /* CONFIG_SUSPEND */
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)) {
@@ -694,11 +695,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; }
@@ -715,6 +711,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
@@ -800,7 +800,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));
@@ -812,8 +812,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/core/dc.c +35 -1
@@ -1962,6 +1962,9 @@ static enum dc_status dc_commit_state_no_check(struct dc *dc, struct dc_state *creturn result; } +static bool commit_minimal_transition_state (struct dc *dc, +struct dc_state *transition_base_context); +/** * dc_commit_streams - Commit current stream state *
@@ -1983,6 +1986,8 @@ enum dc_status dc_commit_streams(struct dc *dc,struct dc_state *context;enum dc_status res =DC_OK ;struct dc_validation_set set[MAX_STREAMS ] = {0 }; +struct pipe_ctx *pipe; +bool handle_exit_odm2to1 = false;if (dc->ctx->dce_environment ==DCE_ENV_VIRTUAL_HW )return res;
@@ -2007,6 +2012,22 @@ enum dc_status dc_commit_streams(struct dc *dc, } } +/* Check for case where we are going from odm 2:1 to max +* pipe scenario. For these cases, we will call +* commit_minimal_transition_state() to exit out of odm 2:1 +* first before processing new streams +*/ +if (stream_count == dc->res_pool->pipe_count) { +for (i =0 ; i < dc->res_pool->pipe_count; i++) { + pipe = &dc->current_state->res_ctx.pipe_ctx[i]; +if (pipe->next_odm_pipe) + handle_exit_odm2to1 = true; + } + } + +if (handle_exit_odm2to1) + res =commit_minimal_transition_state (dc, dc->current_state); + context =dc_create_state (dc);if (!context) goto context_alloc_fail;
@@ -3915,6 +3936,7 @@ static bool commit_minimal_transition_state(struct dc *dc,unsigned int i, j;unsigned int pipe_in_use =0 ;bool subvp_in_use = false; +bool odm_in_use = false;if (!transition_context)return false;
@@ -3943,6 +3965,18 @@ static bool commit_minimal_transition_state(struct dc *dc, } } +/* If ODM is enabled and we are adding or removing planes from any ODM +* pipe, we must use the minimal transition. +*/ +for (i =0 ; i < dc->res_pool->pipe_count; i++) { +struct pipe_ctx *pipe = &dc->current_state->res_ctx.pipe_ctx[i]; + +if (pipe->stream && pipe->next_odm_pipe) { + odm_in_use = true; +break ; + } + } +/* When the OS add a new surface if we have been used all of pipes with odm combine * and mpc split feature, it need use commit_minimal_transition_state to transition safely. * After OS exit MPO, it will back to use odm and mpc split with all of pipes, we need
@@ -3951,7 +3985,7 @@ static bool commit_minimal_transition_state(struct dc *dc,* Reduce the scenarios to use dc_commit_state_no_check in the stage of flip. Especially * enter/exit MPO when DCN still have enough resources. */ -if (pipe_in_use != dc->res_pool->pipe_count && !subvp_in_use) { +if (pipe_in_use != dc->res_pool->pipe_count && !subvp_in_use && !odm_in_use) {dc_release_state (transition_context);return true; }
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +20 -0
@@ -1444,6 +1444,26 @@ static int acquire_first_split_pipe( split_pipe->plane_res.mpcc_inst = pool->dpps[i]->inst; split_pipe->pipe_idx = i; + split_pipe->stream = stream; +return i; + }else if (split_pipe->prev_odm_pipe && + split_pipe->prev_odm_pipe->plane_state == split_pipe->plane_state) { + split_pipe->prev_odm_pipe->next_odm_pipe = split_pipe->next_odm_pipe; +if (split_pipe->next_odm_pipe) + split_pipe->next_odm_pipe->prev_odm_pipe = split_pipe->prev_odm_pipe; + +if (split_pipe->prev_odm_pipe->plane_state) +resource_build_scaling_params (split_pipe->prev_odm_pipe); + +memset (split_pipe,0 ,sizeof (*split_pipe)); + split_pipe->stream_res.tg = pool->timing_generators[i]; + split_pipe->plane_res.hubp = pool->hubps[i]; + split_pipe->plane_res.ipp = pool->ipps[i]; + split_pipe->plane_res.dpp = pool->dpps[i]; + split_pipe->stream_res.opp = pool->opps[i]; + split_pipe->plane_res.mpcc_inst = pool->dpps[i]->inst; + split_pipe->pipe_idx = i; + split_pipe->stream = stream;return i; }
drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c +1 -1
@@ -138,7 +138,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
@@ -566,11 +566,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
@@ -117,6 +117,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)
@@ -139,7 +165,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 ); }
@@ -163,8 +189,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 +10 -4
@@ -346,8 +346,10 @@ static int live_parallel_switch(void *arg)continue ; ce =intel_context_create (data[m].ce[0 ]->engine); -if (IS_ERR (ce)) +if (IS_ERR (ce)) { + err =PTR_ERR (ce); goto out; + } err =intel_context_pin (ce);if (err) {
@@ -367,8 +369,10 @@ static int live_parallel_switch(void *arg) worker =kthread_create_worker (0 ,"igt/parallel:%s" , data[n].ce[0 ]->engine->name); -if (IS_ERR (worker)) +if (IS_ERR (worker)) { + err =PTR_ERR (worker); goto out; + } data[n].worker = worker; }
@@ -397,8 +401,10 @@ static int live_parallel_switch(void *arg) } } -if (igt_live_test_end (&t)) - err = -EIO ; +if (igt_live_test_end (&t)) { + err = err ?: -EIO ; +break ; + } } out:
drivers/gpu/drm/i915/gt/selftest_execlists.c +8 -4
@@ -1530,8 +1530,8 @@ static int live_busywait_preempt(void *arg)struct drm_i915_gem_object *obj;struct i915_vma *vma;enum intel_engine_id id; -int err = -ENOMEM ;u32 *map; +int err;/* * Verify that even without HAS_LOGICAL_RING_PREEMPTION, we can
@@ -1539,13 +1539,17 @@ static int live_busywait_preempt(void *arg)*/ ctx_hi =kernel_context (gt->i915,NULL ); -if (!ctx_hi) -return -ENOMEM ; +if (IS_ERR (ctx_hi)) +return PTR_ERR (ctx_hi); + ctx_hi->sched.priority =I915_CONTEXT_MAX_USER_PRIORITY ; ctx_lo =kernel_context (gt->i915,NULL ); -if (!ctx_lo) +if (IS_ERR (ctx_lo)) { + err =PTR_ERR (ctx_lo); goto err_ctx_hi; + } + ctx_lo->sched.priority =I915_CONTEXT_MIN_USER_PRIORITY ; obj =i915_gem_object_create_internal (gt->i915,PAGE_SIZE );
drivers/gpu/drm/lima/lima_sched.c +1 -1
@@ -165,7 +165,7 @@ int lima_sched_context_init(struct lima_sched_pipe *pipe,void lima_sched_context_fini (struct lima_sched_pipe *pipe,struct lima_sched_context *context) { -drm_sched_entity_fini (&context->base); +drm_sched_entity_destroy (&context->base); }struct dma_fence *lima_sched_context_queue_task (struct lima_sched_task *task)
drivers/gpu/drm/msm/adreno/a6xx_gmu.c +0 -2
@@ -1514,8 +1514,6 @@ int a6xx_gmu_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)if (!pdev)return -ENODEV ; -mutex_init (&gmu->lock); - gmu->dev = &pdev->dev;of_dma_configure (gmu->dev, node, true);
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +2 -0
@@ -1998,6 +1998,8 @@ struct msm_gpu *a6xx_gpu_init(struct drm_device *dev) adreno_gpu = &a6xx_gpu->base; gpu = &adreno_gpu->base; +mutex_init (&a6xx_gpu->gmu.lock); + adreno_gpu->registers =NULL ;/*
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
@@ -703,7 +703,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/input/touchscreen/cyttsp5.c +1 -1
@@ -560,7 +560,7 @@ static int cyttsp5_hid_output_get_sysinfo(struct cyttsp5 *ts)static int cyttsp5_hid_output_bl_launch_app (struct cyttsp5 *ts) {int rc; -u8 cmd[HID_OUTPUT_BL_LAUNCH_APP ]; +u8 cmd[HID_OUTPUT_BL_LAUNCH_APP_SIZE ];u16 crc;put_unaligned_le16 (HID_OUTPUT_BL_LAUNCH_APP_SIZE , cmd);
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
@@ -1188,8 +1188,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); }
@@ -1201,8 +1199,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 +31 -9
@@ -2392,6 +2392,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) <<
@@ -4789,6 +4792,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) {
@@ -5376,6 +5382,7 @@ static void bnxt_hwrm_update_rss_hash_cfg(struct bnxt *bp)if (hwrm_req_init (bp, req,HWRM_VNIC_RSS_QCFG ))return ; + req->vnic_id =cpu_to_le16 (vnic->fw_vnic_id);/* all contexts configured to same hash_type, zero always exists */ req->rss_ctx_idx =cpu_to_le16 (vnic->fw_rss_cos_lb_ctx[0 ]); resp =hwrm_req_hold (bp, req);
@@ -8838,6 +8845,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;
@@ -11624,6 +11634,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))
@@ -11637,7 +11648,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; }
@@ -11645,7 +11656,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; }
@@ -13051,26 +13062,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
@@ -3831,7 +3831,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
@@ -946,6 +946,7 @@ int bnxt_ptp_init(struct bnxt *bp, bool phc_cfg)bnxt_ptp_timecounter_init (bp, true);bnxt_ptp_adjfine_rtc (bp,0 ); } +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
@@ -1272,7 +1272,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 ;
@@ -1292,7 +1293,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 );
@@ -1313,6 +1314,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)
@@ -1328,6 +1330,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);
@@ -1337,7 +1340,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 ;
@@ -1348,16 +1350,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);
@@ -4279,9 +4276,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
@@ -87,6 +87,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
@@ -1222,7 +1222,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);
@@ -1558,6 +1564,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/intel/ice/ice_common.c +1 -1
@@ -5169,7 +5169,7 @@ ice_aq_read_i2c(struct ice_hw *hw, struct ice_aqc_link_topo_addr topo_addr,*/ int ice_aq_write_i2c (struct ice_hw *hw,struct ice_aqc_link_topo_addr topo_addr, -u16 bus_addr,__le16 addr,u8 params,u8 *data, +u16 bus_addr,__le16 addr,u8 params,const u8 *data,struct ice_sq_cd *cd) {struct ice_aq_desc desc = {0 };
drivers/net/ethernet/intel/ice/ice_common.h +1 -1
@@ -229,7 +229,7 @@ ice_aq_read_i2c(struct ice_hw *hw, struct ice_aqc_link_topo_addr topo_addr, struct ice_sq_cd *cd);int ice_aq_write_i2c (struct ice_hw *hw,struct ice_aqc_link_topo_addr topo_addr, -u16 bus_addr,__le16 addr,u8 params,u8 *data, +u16 bus_addr,__le16 addr,u8 params,const u8 *data,struct ice_sq_cd *cd);bool ice_fw_supports_report_dflt_cfg (struct ice_hw *hw);#endif /* _ICE_COMMON_H_ */
drivers/net/ethernet/intel/ice/ice_gnss.c +4 -60
107 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_gnss.h +0 -10
@@ -23,26 +23,16 @@#define ICE_MAX_UBX_READ_TRIES 255#define ICE_MAX_UBX_ACK_READ_TRIES 4095 -struct gnss_write_buf { -struct list_head queue; -unsigned int size; -unsigned char *buf; -}; -/** * struct gnss_serial - data used to initialize GNSS TTY port * @back: back pointer to PF * @kworker: kwork thread for handling periodic work * @read_work: read_work function for handling GNSS reads -* @write_work: write_work function for handling GNSS writes -* @queue: write buffers queue */ struct gnss_serial {struct ice_pf *back;struct kthread_worker *kworker;struct kthread_delayed_work read_work; -struct kthread_work write_work; -struct list_head queue; };#if IS_ENABLED (CONFIG_GNSS )
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
@@ -1064,6 +1071,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,
@@ -1083,6 +1107,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.
@@ -1273,6 +1298,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) {
@@ -1297,6 +1323,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:
@@ -1365,6 +1396,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/virtio_net.c +8 -8
@@ -204,6 +204,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 {
@@ -2933,12 +2935,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,
@@ -2949,9 +2949,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
@@ -2729,17 +2729,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
@@ -919,7 +919,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
@@ -250,8 +250,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
@@ -79,15 +79,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);
@@ -147,6 +138,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);
@@ -170,6 +163,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); }
@@ -425,6 +420,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
@@ -14,5 +14,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/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/soc/qcom/ramp_controller.c +1 -1
@@ -296,7 +296,7 @@ static int qcom_ramp_controller_probe(struct platform_device *pdev)return -ENOMEM ; qrc->desc =device_get_match_data (&pdev->dev); -if (!qrc) +if (!qrc->desc)return -EINVAL ; qrc->regmap =devm_regmap_init_mmio (&pdev->dev, base, &qrc_regmap_config);
drivers/soc/qcom/rmtfs_mem.c +1 -0
@@ -234,6 +234,7 @@ static int qcom_rmtfs_mem_probe(struct platform_device *pdev) num_vmids =0 ; }else if (num_vmids <0 ) {dev_err (&pdev->dev,"failed to count qcom,vmid elements: %d\n" , num_vmids); + ret = num_vmids; goto remove_cdev; }else if (num_vmids >NUM_MAX_VMIDS ) { dev_warn(&pdev->dev,
drivers/soc/qcom/rpmh-rsc.c +1 -1
@@ -1073,7 +1073,7 @@ static int rpmh_rsc_probe(struct platform_device *pdev) drv->ver.minor = rsc_id & (MINOR_VER_MASK <<MINOR_VER_SHIFT ); drv->ver.minor >>=MINOR_VER_SHIFT ; -if (drv->ver.major ==3 && drv->ver.minor >=0 ) +if (drv->ver.major ==3 ) drv->regs = rpmh_rsc_reg_offset_ver_3_0;else drv->regs = rpmh_rsc_reg_offset_ver_2_7;
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/mlx5/net/mlx5_vnet.c +1 -1
@@ -3323,10 +3323,10 @@ static void mlx5_vdpa_dev_del(struct vdpa_mgmt_dev *v_mdev, struct vdpa_device *mlx5_vdpa_remove_debugfs (ndev->debugfs); ndev->debugfs =NULL ;unregister_link_notifier (ndev); +_vdpa_unregister_device (dev); wq = mvdev->wq; mvdev->wq =NULL ;destroy_workqueue (wq); -_vdpa_unregister_device (dev); mgtdev->ndev =NULL ; }
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
@@ -572,7 +572,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 ; }
@@ -590,9 +597,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
@@ -1358,6 +1358,7 @@ static int afs_mkdir(struct mnt_idmap *idmap, 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); }
@@ -1661,6 +1662,7 @@ static int afs_create(struct mnt_idmap *idmap, 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);
@@ -1796,6 +1798,7 @@ static int afs_symlink(struct mnt_idmap *idmap, 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
@@ -1627,6 +1627,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);
@@ -1671,8 +1672,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
@@ -6354,7 +6354,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;
@@ -6541,7 +6540,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));
@@ -6588,9 +6587,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
@@ -2057,8 +2057,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,
@@ -2121,8 +2122,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
@@ -294,6 +294,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
@@ -350,6 +353,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 ;
@@ -377,6 +383,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
80 lines not on this page · raw message
fs/ksmbd/smb2pdu.c +6 -7
@@ -991,13 +991,13 @@ static void decode_sign_cap_ctxt(struct ksmbd_conn *conn,static __le32 deassemble_neg_contexts (struct ksmbd_conn *conn,struct smb2_negotiate_req *req, -int len_of_smb) +unsigned int len_of_smb) {/* +4 is to account for the RFC1001 len field */ struct smb2_neg_context *pctx = (struct smb2_neg_context *)req;int i =0 , len_of_ctxts; -int offset =le32_to_cpu (req->NegotiateContextOffset); -int neg_ctxt_cnt =le16_to_cpu (req->NegotiateContextCount); +unsigned int offset =le32_to_cpu (req->NegotiateContextOffset); +unsigned int neg_ctxt_cnt =le16_to_cpu (req->NegotiateContextCount);__le32 status =STATUS_INVALID_PARAMETER ;ksmbd_debug (SMB ,"decoding %d negotiate contexts\n" , neg_ctxt_cnt);
@@ -1011,7 +1011,7 @@ static __le32 deassemble_neg_contexts(struct ksmbd_conn *conn,while (i++ < neg_ctxt_cnt) {int clen, ctxt_len; -if (len_of_ctxts <sizeof (struct smb2_neg_context )) +if (len_of_ctxts < (int )sizeof (struct smb2_neg_context ))break ; pctx = (struct smb2_neg_context *)((char *)pctx + offset);
@@ -1066,9 +1066,8 @@ static __le32 deassemble_neg_contexts(struct ksmbd_conn *conn, }/* offsets must be 8 byte aligned */ - clen = (clen +7 ) & ~0x7 ; - offset = clen +sizeof (struct smb2_neg_context ); - len_of_ctxts -= clen +sizeof (struct smb2_neg_context ); + offset = (ctxt_len +7 ) & ~0x7 ; + len_of_ctxts -= offset; }return status; }
fs/ksmbd/smbacl.c +2 -2
@@ -1290,7 +1290,7 @@ int smb_check_perm_dacl(struct ksmbd_conn *conn, const struct path *path,if (IS_ENABLED (CONFIG_FS_POSIX_ACL )) { posix_acls =get_inode_acl (d_inode (path->dentry),ACL_TYPE_ACCESS ); -if (posix_acls && !found) { +if (!IS_ERR_OR_NULL (posix_acls) && !found) {unsigned int id =-1 ; pa_entry = posix_acls->a_entries;
@@ -1314,7 +1314,7 @@ int smb_check_perm_dacl(struct ksmbd_conn *conn, const struct path *path, } } } -if (posix_acls) +if (!IS_ERR_OR_NULL (posix_acls))posix_acl_release (posix_acls); }
fs/ksmbd/vfs.c +2 -2
@@ -1377,7 +1377,7 @@ static struct xattr_smb_acl *ksmbd_vfs_make_xattr_posix_acl(struct mnt_idmap *idreturn NULL ; posix_acls =get_inode_acl (inode, acl_type); -if (!posix_acls) +if (IS_ERR_OR_NULL (posix_acls))return NULL ; smb_acl = kzalloc(sizeof(struct xattr_smb_acl) +
@@ -1886,7 +1886,7 @@ int ksmbd_vfs_inherit_posix_acl(struct mnt_idmap *idmap,return -EOPNOTSUPP ; acls =get_inode_acl (parent_inode,ACL_TYPE_DEFAULT ); -if (!acls) +if (IS_ERR_OR_NULL (acls))return -ENOENT ; pace = acls->a_entries;
include/linux/netdevice.h +6 -3
@@ -612,7 +612,7 @@ struct netdev_queue {netdevice_tracker dev_tracker;struct Qdisc __rcu *qdisc; -struct Qdisc *qdisc_sleeping; +struct Qdisc __rcu *qdisc_sleeping;#ifdef CONFIG_SYSFS struct kobject kobj;#endif
@@ -760,8 +760,11 @@ static inline void rps_record_sock_flow(struct rps_sock_flow_table *table,/* We only give a hint, preemption can change CPU under us */ val |=raw_smp_processor_id (); -if (table->ents[index] != val) - table->ents[index] = val; +/* The following WRITE_ONCE() is paired with the READ_ONCE() +* here, and another one in get_rps_cpu(). +*/ +if (READ_ONCE (table->ents[index]) != val) +WRITE_ONCE (table->ents[index], val); } }
include/linux/page-flags.h +6 -0
@@ -630,6 +630,12 @@ PAGEFLAG_FALSE(VmemmapSelfHosted, vmemmap_self_hosted)* Please note that, confusingly, "page_mapping" refers to the inode * address_space which maps the page from disk; whereas "page_mapped" * refers to user virtual address space into which the page is mapped. +* +* For slab pages, since slab reuses the bits in struct page to store its +* internal states, the page->mapping does not exist as such, nor do these +* flags below. So in order to avoid testing non-existent bits, please +* make sure that PageSlab(page) actually evaluates to false before calling +* the following functions (e.g., PageAnon). See mm/slab.h. */ #define PAGE_MAPPING_ANON 0x1#define PAGE_MAPPING_MOVABLE 0x2
include/linux/usb/hcd.h +5 -0
@@ -503,6 +503,11 @@ void *hcd_buffer_alloc(struct usb_bus *bus, size_t size,void hcd_buffer_free (struct usb_bus *bus,size_t size,void *addr,dma_addr_t dma); +void *hcd_buffer_alloc_pages (struct usb_hcd *hcd, +size_t size,gfp_t mem_flags,dma_addr_t *dma); +void hcd_buffer_free_pages (struct usb_hcd *hcd, +size_t size,void *addr,dma_addr_t dma); +/* generic bus glue, needed for host controllers that don't use PCI */ extern irqreturn_t usb_hcd_irq (int irq,void *__hcd);
include/net/bluetooth/bluetooth.h +30 -13
59 lines not on this page · raw message
include/net/bluetooth/hci.h +1 -0
@@ -350,6 +350,7 @@ enum {enum {HCI_SETUP ,HCI_CONFIG , +HCI_DEBUGFS_CREATED ,HCI_AUTO_OFF ,HCI_RFKILLED ,HCI_MGMT ,
include/net/bluetooth/hci_core.h +32 -9
118 lines not on this page · raw message
include/net/neighbour.h +1 -1
@@ -180,7 +180,7 @@ struct pneigh_entry {netdevice_tracker dev_tracker;u32 flags;u8 protocol; -u8 key[]; +u32 key[]; };/*
include/net/netns/ipv6.h +1 -1
@@ -53,7 +53,7 @@ struct netns_sysctl_ipv6 {int seg6_flowlabel;u32 ioam6_id;u64 ioam6_id_wide; -bool skip_notify_on_dev_down; +int skip_notify_on_dev_down;u8 fib_notify_on_flag_change; };
include/net/ping.h +1 -5
@@ -16,11 +16,7 @@#define PING_HTABLE_SIZE 64#define PING_HTABLE_MASK (PING_HTABLE_SIZE-1) -/* -* gid_t is either uint or ushort. We want to pass it to -* proc_dointvec_minmax(), so it must not be larger than MAX_INT -*/ -#define GID_T_MAX (((gid_t)~0U) >> 1) +#define GID_T_MAX (((gid_t)~0U) - 1)/* Compatibility glue so we can support IPv6 when it's compiled as a module */ struct pingv6_ops {
include/net/pkt_sched.h +2 -0
@@ -128,6 +128,8 @@ static inline void qdisc_run(struct Qdisc *q) } } +extern const struct nla_policy rtm_tca_policy[TCA_MAX +1 ]; +/* Calculate maximal size of packet seen by hard_start_xmit routine of this device. */
include/net/rpl.h +0 -3
@@ -23,9 +23,6 @@ static inline int rpl_init(void)static inline void rpl_exit (void ) {}#endif -/* Worst decompression memory usage ipv6 address (16) + pad 7 */ -#define IPV6_RPL_SRH_WORST_SWAP_SIZE (sizeof(struct in6_addr) + 7) -size_t ipv6_rpl_srh_size (unsigned char n,unsigned char cmpri,unsigned char cmpre);
include/net/sch_generic.h +4 -2
@@ -545,7 +545,7 @@ static inline struct Qdisc *qdisc_root_bh(const struct Qdisc *qdisc)static inline struct Qdisc *qdisc_root_sleeping (const struct Qdisc *qdisc) { -return qdisc->dev_queue->qdisc_sleeping; +return rcu_dereference_rtnl (qdisc->dev_queue->qdisc_sleeping); }static inline spinlock_t *qdisc_root_sleeping_lock (const struct Qdisc *qdisc)
@@ -754,7 +754,9 @@ static inline bool qdisc_tx_changing(const struct net_device *dev)for (i =0 ; i < dev->num_tx_queues; i++) {struct netdev_queue *txq =netdev_get_tx_queue (dev, i); -if (rcu_access_pointer (txq->qdisc) != txq->qdisc_sleeping) + +if (rcu_access_pointer (txq->qdisc) != +rcu_access_pointer (txq->qdisc_sleeping))return true; }return false;
include/net/sock.h +13 -5
@@ -1152,8 +1152,12 @@ static inline void sock_rps_record_flow(const struct sock *sk)* OR an additional socket flag * [1] : sk_state and sk_prot are in the same cache line. */ -if (sk->sk_state ==TCP_ESTABLISHED ) - sock_rps_record_flow_hash(sk->sk_rxhash); +if (sk->sk_state ==TCP_ESTABLISHED ) { +/* This READ_ONCE() is paired with the WRITE_ONCE() +* from sock_rps_save_rxhash() and sock_rps_reset_rxhash(). +*/ +sock_rps_record_flow_hash (READ_ONCE (sk->sk_rxhash)); + } }#endif }
@@ -1162,15 +1166,19 @@ static inline void sock_rps_save_rxhash(struct sock *sk, const struct sk_buff *skb) {#ifdef CONFIG_RPS -if (unlikely (sk->sk_rxhash != skb->hash)) - sk->sk_rxhash = skb->hash; +/* The following WRITE_ONCE() is paired with the READ_ONCE() +* here, and another one in sock_rps_record_flow(). +*/ +if (unlikely (READ_ONCE (sk->sk_rxhash) != skb->hash)) +WRITE_ONCE (sk->sk_rxhash, skb->hash);#endif }static inline void sock_rps_reset_rxhash (struct sock *sk) {#ifdef CONFIG_RPS - sk->sk_rxhash =0 ; +/* Paired with READ_ONCE() in sock_rps_record_flow() */ +WRITE_ONCE (sk->sk_rxhash,0 );#endif }
kernel/bpf/map_in_map.c +6 -2
@@ -81,9 +81,13 @@ struct bpf_map *bpf_map_meta_alloc(int inner_map_ufd)/* Misc members not needed in bpf_map_meta_equal() check. */ inner_map_meta->ops = inner_map->ops;if (inner_map->ops == &array_map_ops) { +struct bpf_array *inner_array_meta = + container_of(inner_map_meta, struct bpf_array, map); + struct bpf_array *inner_array = container_of(inner_map, struct bpf_array, map); + + inner_array_meta->index_mask = inner_array->index_mask; + inner_array_meta->elem_size = inner_array->elem_size; inner_map_meta->bypass_spec_v1 = inner_map->bypass_spec_v1; - container_of(inner_map_meta, struct bpf_array, map)->index_mask = - container_of(inner_map, struct bpf_array, map)->index_mask; }fdput (f);
kernel/fork.c +1 -1
@@ -559,6 +559,7 @@ void free_task(struct task_struct *tsk)arch_release_task_struct (tsk);if (tsk->flags &PF_KTHREAD )free_kthread_struct (tsk); +bpf_task_storage_free (tsk);free_task_struct (tsk); }EXPORT_SYMBOL (free_task);
@@ -845,7 +846,6 @@ void __put_task_struct(struct task_struct *tsk)cgroup_free (tsk);task_numa_free (tsk, true);
Lines of this file are not shown. View the raw message.
net/bluetooth/hci_conn.c +239 -139
378 lines not on this page · raw message
net/bluetooth/hci_event.c +80 -81
161 lines not on this page · raw message
net/bluetooth/iso.c +105 -28
133 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/mt8188/mt8188-afe-clk.c +0 -7
Lines of this file are not shown. View the raw message.
sound/soc/mediatek/mt8188/mt8188-afe-clk.h +0 -1
Lines of this file are not shown. View the raw message.
sound/soc/mediatek/mt8188/mt8188-afe-pcm.c +0 -4
Lines of this file are not shown. View the raw message.
sound/soc/mediatek/mt8188/mt8188-audsys-clk.c +24 -23
47 lines not on this page · raw message
sound/soc/mediatek/mt8188/mt8188-audsys-clk.h +0 -1
Lines of this file are not shown. View the 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.