Linux 6.12.39
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.12.39 kernel.
All users of the 6.12 kernel series must upgrade.
The updated 6.12.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.12.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/bpf/map_hash.rst | 8 Documentation/bpf/map_lru_hash_update.dot | 6 Makefile | 2 arch/arm64/kernel/cpufeature.c | 45 +-- arch/arm64/kernel/process.c | 5 arch/arm64/mm/fault.c | 30 +- arch/riscv/kernel/vdso/vdso.lds.S | 2 arch/s390/crypto/sha1_s390.c | 2 arch/s390/crypto/sha256_s390.c | 3 arch/s390/crypto/sha512_s390.c | 3 arch/um/drivers/vector_kern.c | 42 --- arch/x86/Kconfig | 2 arch/x86/include/asm/msr-index.h | 1 arch/x86/kernel/cpu/amd.c | 7 arch/x86/kernel/cpu/mce/amd.c | 28 +- arch/x86/kernel/cpu/mce/core.c | 24 - arch/x86/kernel/cpu/mce/intel.c | 1 arch/x86/kvm/cpuid.c | 4 arch/x86/kvm/svm/sev.c | 4 arch/x86/kvm/xen.c | 15 - crypto/ecc.c | 2 drivers/acpi/battery.c | 19 - drivers/atm/idt77252.c | 5 drivers/block/nbd.c | 6 drivers/block/ublk_drv.c | 3 drivers/bluetooth/hci_qca.c | 13 drivers/char/ipmi/ipmi_msghandler.c | 3 drivers/clk/clk-scmi.c | 18 - drivers/clk/imx/clk-imx95-blk-ctl.c | 12 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 30 ++ drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 3 drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 43 +-- drivers/gpu/drm/drm_framebuffer.c | 31 ++ drivers/gpu/drm/drm_gem.c | 74 ++++- drivers/gpu/drm/drm_internal.h | 2 drivers/gpu/drm/exynos/exynos7_drm_decon.c | 4 drivers/gpu/drm/imagination/pvr_power.c | 4 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c | 20 + drivers/gpu/drm/tegra/nvdec.c | 6 drivers/gpu/drm/ttm/ttm_bo_util.c | 13 drivers/gpu/drm/xe/xe_gt_pagefault.c | 1 drivers/gpu/drm/xe/xe_lmtt.c | 11 drivers/gpu/drm/xe/xe_migrate.c | 2 drivers/gpu/drm/xe/xe_pci.c | 1 drivers/gpu/drm/xe/xe_pm.c | 8 drivers/hid/hid-ids.h | 6 drivers/hid/hid-lenovo.c | 8 drivers/hid/hid-multitouch.c | 8 drivers/hid/hid-nintendo.c | 38 ++ drivers/hid/hid-quirks.c | 3 drivers/irqchip/Kconfig | 1 drivers/md/md-bitmap.c | 3 drivers/md/raid1.c | 1 drivers/md/raid10.c | 10 drivers/net/can/m_can/m_can.c | 2 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 10 drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c | 2 drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 2 drivers/net/ethernet/ibm/ibmvnic.h | 8 drivers/net/ethernet/mellanox/mlx5/core/en/fs.h | 9 drivers/net/ethernet/mellanox/mlx5/core/en_dim.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en_fs.c | 2 drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 13 drivers/net/ethernet/microsoft/mana/gdma_main.c | 3 drivers/net/ethernet/renesas/rtsn.c | 5 drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c | 24 - drivers/net/ethernet/ti/am65-cpsw-nuss.c | 4 drivers/net/ethernet/wangxun/libwx/wx_lib.c | 16 - drivers/net/ethernet/wangxun/libwx/wx_type.h | 2 drivers/net/ethernet/wangxun/ngbe/ngbe_main.c | 2 drivers/net/ethernet/wangxun/ngbe/ngbe_type.h | 2 drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c | 4 drivers/net/ethernet/wangxun/txgbe/txgbe_type.h | 4 drivers/net/ethernet/xilinx/ll_temac_main.c | 2 drivers/net/phy/microchip.c | 3 drivers/net/phy/qcom/at803x.c | 27 -- drivers/net/phy/qcom/qca808x.c | 2 drivers/net/phy/qcom/qcom-phy-lib.c | 25 + drivers/net/phy/qcom/qcom.h | 5 drivers/net/phy/smsc.c | 57 +++- drivers/net/usb/qmi_wwan.c | 1 drivers/net/wireless/marvell/mwifiex/util.c | 4 drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c | 4 drivers/net/wireless/mediatek/mt76/mt7921/main.c | 3 drivers/net/wireless/mediatek/mt76/mt7925/init.c | 2 drivers/net/wireless/mediatek/mt76/mt7925/main.c | 6 drivers/net/wireless/mediatek/mt76/mt7925/mcu.c | 4 drivers/net/wireless/mediatek/mt76/mt7925/regs.h | 2 drivers/net/wireless/ralink/rt2x00/rt2x00soc.c | 4 drivers/net/wireless/ralink/rt2x00/rt2x00soc.h | 2 drivers/net/wireless/zydas/zd1211rw/zd_mac.c | 6 drivers/pci/pci-acpi.c | 23 - drivers/pinctrl/pinctrl-amd.c | 11 drivers/pinctrl/qcom/pinctrl-msm.c | 20 + drivers/pwm/core.c | 2 drivers/pwm/pwm-mediatek.c | 13 drivers/tty/vt/vt.c | 1 drivers/usb/gadget/function/u_serial.c | 12 fs/btrfs/free-space-tree.c | 16 - fs/erofs/data.c | 21 + fs/erofs/decompressor.c | 12 fs/erofs/fileio.c | 6 fs/erofs/internal.h | 2 fs/erofs/zdata.c | 251 ++++++++---------- fs/erofs/zutil.c | 7 fs/eventpoll.c | 12 fs/netfs/write_collect.c | 2 fs/proc/inode.c | 2 fs/proc/proc_sysctl.c | 18 - fs/proc/task_mmu.c | 14 - fs/smb/server/smb2pdu.c | 29 -- fs/smb/server/transport_rdma.c | 5 fs/smb/server/vfs.c | 1 include/drm/drm_file.h | 3 include/drm/drm_framebuffer.h | 7 include/drm/spsc_queue.h | 4 include/linux/ieee80211.h | 45 ++- include/linux/math.h | 12 include/linux/mm.h | 5 include/linux/psp-sev.h | 2 include/net/af_vsock.h | 2 include/net/netfilter/nf_flow_table.h | 2 include/sound/soc-acpi.h | 13 include/trace/events/erofs.h | 2 io_uring/opdef.c | 1 kernel/bpf/bpf_lru_list.c | 9 kernel/bpf/bpf_lru_list.h | 1 kernel/events/core.c | 6 kernel/rseq.c | 60 +++- kernel/sched/core.c | 5 kernel/sched/deadline.c | 10 kernel/stop_machine.c | 20 - lib/alloc_tag.c | 3 lib/maple_tree.c | 1 mm/kasan/report.c | 13 mm/vmalloc.c | 22 + net/appletalk/ddp.c | 1 net/atm/clip.c | 64 +++- net/bluetooth/hci_event.c | 3 net/bluetooth/hci_sync.c | 2 net/ipv4/tcp.c | 2 net/ipv6/addrconf.c | 9 net/mac80211/mlme.c | 7 net/mac80211/parse.c | 6 net/netlink/af_netlink.c | 82 +++--- net/rxrpc/call_accept.c | 4 net/sched/sch_api.c | 23 + net/tipc/topsrv.c | 2 net/vmw_vsock/af_vsock.c | 57 +++- net/wireless/nl80211.c | 7 net/wireless/util.c | 52 +++ rust/kernel/init/macros.rs | 2 scripts/gdb/linux/constants.py.in | 7 scripts/gdb/linux/interrupts.py | 16 - scripts/gdb/linux/mapletree.py | 252 +++++++++++++++++++ scripts/gdb/linux/xarray.py | 28 ++ sound/isa/ad1816a/ad1816a.c | 2 sound/pci/hda/patch_realtek.c | 7 sound/soc/amd/yc/acp6x-mach.c | 7 sound/soc/codecs/cs35l56-shared.c | 2 sound/soc/fsl/fsl_asrc.c | 3 sound/soc/fsl/fsl_sai.c | 14 - sound/soc/intel/boards/Kconfig | 1 sound/soc/intel/common/Makefile | 2 sound/soc/intel/common/soc-acpi-intel-arl-match.c | 66 ++++ sound/soc/intel/common/sof-function-topology-lib.c | 136 ++++++++++ sound/soc/intel/common/sof-function-topology-lib.h | 15 + sound/soc/sof/intel/hda.c | 6 tools/arch/x86/include/asm/msr-index.h | 1 tools/include/linux/kallsyms.h | 4 tools/testing/selftests/bpf/test_lru_map.c | 105 +++---- tools/testing/selftests/net/forwarding/lib.sh | 113 -------- tools/testing/selftests/net/lib.sh | 115 ++++++++ virt/kvm/kvm_main.c | 3 176 files changed, 2012 insertions(+), 874 deletions(-)
Achill Gilgenast (1):
kallsyms: fix build without execinfo
Akira Inoue (1):
HID: lenovo: Add support for ThinkPad X1 Tablet Thin Keyboard Gen2
Al Viro (2):
fix proc_sys_compare() handling of in-lookup dentries
ksmbd: fix a mount write count leak in ksmbd_vfs_kern_path_locked()
Alessio Belle (1):
drm/imagination: Fix kernel crash when hard resetting the GPU
Alexander Gordeev (1):
mm/vmalloc: leave lazy MMU mode on PTE mapping error
Alok Tiwari (1):
net: ll_temac: Fix missing tx_pending check in ethtools_set_ringparam()
Arun Raghavan (1):
ASoC: fsl_sai: Force a software reset when starting in consumer mode
Baolin Wang (1):
mm: fix the inaccurate memory statistics issue for users
Bard Liao (4):
ASoC: Intel: SND_SOC_INTEL_SOF_BOARD_HELPERS select SND_SOC_ACPI_INTEL_MATCH
ASoC: soc-acpi: add get_function_tplg_files ops
ASoC: Intel: add sof_sdw_get_tplg_files ops
ASoC: Intel: soc-acpi-intel-arl-match: set get_function_tplg_files ops
Bartosz Golaszewski (1):
pinctrl: qcom: msm: mark certain pins as invalid for interrupts
Ben Skeggs (1):
drm/nouveau/gsp: fix potential leak of memory used during acpi init
Borislav Petkov (AMD) (1):
KVM: SVM: Set synthesized TSA CPUID flags
Carolina Jubran (1):
net/mlx5e: Fix race between DIM disable and net_dim()
Chao Yu (2):
erofs: fix to add missing tracepoint in erofs_read_folio()
erofs: fix to add missing tracepoint in erofs_readahead()
Charles Keepax (1):
ASoC: Intel: soc-acpi: arl: Correct order of cs42l43 matches
Chia-Lin Kao (AceLan) (1):
HID: quirks: Add quirk for 2 Chicony Electronics HP 5MP Cameras
Chintan Vankar (1):
net: ethernet: ti: am65-cpsw-nuss: Fix skb size by accounting for skb_shared_info
Christian König (1):
drm/ttm: fix error handling in ttm_buffer_object_transfer
Chunhai Guo (1):
erofs: free pclusters if no cached folio is attached
Dan Carpenter (1):
ipmi:msghandler: Fix potential memory corruption in ipmi_create_user()
Daniel J. Ogorchock (1):
HID: nintendo: avoid bluetooth suspend/resume stalls
Daniil Dulov (1):
wifi: zd1211rw: Fix potential NULL pointer dereference in zd_mac_tx_to_dev()
David Howells (3):
rxrpc: Fix bug due to prealloc collision
rxrpc: Fix oops due to non-existence of prealloc backlog struct
netfs: Fix ref leak on inserted extra subreq in write retry
David Woodhouse (1):
KVM: x86/xen: Allow 'out of range' event channel ports in IRQ routing table.
Deren Wu (2):
wifi: mt76: mt7921: prevent decap offload config before STA initialization
wifi: mt76: mt7925: prevent NULL pointer dereference in mt7925_sta_set_decap_offload()
Eric Biggers (1):
crypto: s390/sha - Fix uninitialized variable in SHA-1 and SHA-2
Eric Dumazet (1):
netfilter: flowtable: account for Ethernet header in nf_flow_pppoe_proto()
EricChan (1):
net: stmmac: Fix interrupt handling for level-triggered mode in DWC_XGMAC2
Fangrui Song (1):
riscv: vdso: Exclude .rodata from the PT_DYNAMIC segment
Felix Fietkau (1):
wifi: rt2x00: fix remove callback type mismatch
Fengnan Chang (1):
io_uring: make fallocate be hashed work
Filipe Manana (1):
btrfs: fix assertion when building free space tree
Flora Cui (2):
drm/amdgpu/discovery: use specific ip_discovery.bin for legacy asics drm/amdgpu/ip_discovery: add missing ip_discovery fw
Florian Fainelli (3):
scripts/gdb: fix interrupts display after MCP on x86 scripts/gdb: de-reference per-CPU MCE interrupts scripts/gdb: fix interrupts.py after maple tree conversion
Gao Xiang (5):
erofs: address D-cache aliasing
erofs: get rid of z_erofs_next_pcluster_t
erofs: tidy up zdata.c
erofs: refine readahead tracepoint
erofs: fix rare pcluster memory leak after unmounting
Greg Kroah-Hartman (1):
Linux 6.12.39
Guillaume Nault (1):
gre: Fix IPv6 multicast route creation.
Hangbin Liu (1):
selftests: net: lib: fix shift count out of range
Haoxiang Li (1):
net: ethernet: rtsn: Fix a null pointer dereference in rtsn_probe()
Harry Yoo (1):
lib/alloc_tag: do not acquire non-existent lock in alloc_tag_top_users()
Henry Martin (1):
wifi: mt76: mt7925: Fix null-ptr-deref in mt7925_thermal_init()
Håkon Bugge (1):
md/md-bitmap: fix GPF in bitmap_get_stats()
JP Kobryn (1):
x86/mce: Make sure CMCI banks are cleared during shutdown on Intel
Jakub Kicinski (1):
netlink: make sure we allow at least one dump skb
Jann Horn (1):
x86/mm: Disable hugetlb page table sharing on 32-bit
Jason Xing (1):
bnxt_en: eliminate the compile warning in bnxt_request_irq due to CONFIG_RFS_ACCEL
Jianbo Liu (1):
net/mlx5e: Add new prio for promiscuous mode
Jiawen Wu (1):
net: wangxun: revert the adjustment of the IRQ vector sequence
Jiayuan Chen (1):
tcp: Correct signedness in skb remaining space calculation
Johannes Berg (1):
wifi: mac80211: fix non-transmitted BSSID profile search
Kaustabh Chakraborty (1):
drm/exynos: exynos7_drm_decon: add vblank check in IRQ handling
Kevin Brodsky (1):
arm64: poe: Handle spurious Overlay faults
Kito Xu (1):
net: appletalk: Fix device refcount leak in atrtr_create()
Kuen-Han Tsai (2):
usb: gadget: u_serial: Fix race condition in TTY wakeup Revert "usb: gadget: u_serial: Add null pointer check in gs_start_io"
Kuniyuki Iwashima (6):
netlink: Fix wraparounds of sk->sk_rmem_alloc.
tipc: Fix use-after-free in tipc_conn_close().
atm: clip: Fix potential null-ptr-deref in to_atmarpd().
atm: clip: Fix memory leak of struct clip_vcc.
atm: clip: Fix infinite recursive call of clip_push().
netlink: Fix rmem check in netlink_broadcast_deliver().
Lachlan Hodges (2):
wifi: cfg80211: fix S1G beacon head validation in nl80211
wifi: mac80211: correctly identify S1G short beacon
Liam Merwick (1):
KVM: Allow CPU to reschedule while setting per-page memory attributes
Linus Torvalds (1):
eventpoll: don't decrement ep refcount while still holding the ep mutex
Long Li (1):
net: mana: Record doorbell physical address in PF mode
Luiz Augusto von Dentz (2):
Bluetooth: hci_sync: Fix not disabling advertising instance
Bluetooth: hci_event: Fix not marking Broadcast Sink BIS as connected
Lukas Wunner (1):
crypto: ecdsa - Harden against integer overflows in DIV_ROUND_UP()
Luo Gengkun (1):
perf/core: Fix the WARN_ON_ONCE is out of lock protected region
Luo Jie (2):
net: phy: qcom: move the WoL function to shared library
net: phy: qcom: qca808x: Fix WoL issue by utilizing at8031_set_wol()
Mario Limonciello (1):
pinctrl: amd: Clear GPIO debounce for suspend
Mark Brown (1):
arm64: Filter out SME hwcaps when FEAT_SME isn't implemented
Mathy Vanhoef (1):
wifi: prevent A-MSDU attacks in mesh networks
Matthew Auld (1):
drm/xe/bmg: fix compressed VRAM handling
Matthew Brost (3):
drm/sched: Increment job count before swapping tail spsc queue Revert "drm/xe/xe2: Enable Indirect Ring State support for Xe2" drm/xe: Allocate PF queue size on pow2 boundary
Michael Jeanson (1):
rseq: Fix segfault on registration when rseq_cs is non-zero
Michael Lo (1):
wifi: mt76: mt7925: fix invalid array index in ssid assignment during hw scan
Michal Luczaj (3):
vsock: Fix transport_{g2h,h2g} TOCTOU
vsock: Fix transport_* TOCTOU
vsock: Fix IOCTL_VM_SOCKETS_GET_LOCAL_CID to check also transport_local
Michal Wajdeczko (1):
drm/xe/pf: Clear all LMTT pages on alloc
Miguel Ojeda (1):
rust: init: allow dead_code warnings for Rust >= 1.89.0
Mikhail Paulyshka (1):
x86/rdrand: Disable RDSEED on AMD Cyan Skillfish
Mikko Perttunen (1):
drm/tegra: nvdec: Fix dma_alloc_coherent error check
Ming Yen Hsieh (1):
wifi: mt76: mt7925: fix the wrong config for tx interrupt
Mingming Cao (1):
ibmvnic: Fix hardcoded NUM_RX_STATS/NUM_TX_STATS with dynamic sizeof
Nam Cao (1):
irqchip/irq-msi-lib: Select CONFIG_GENERIC_MSI_IRQ
Namjae Jeon (1):
ksmbd: fix potential use-after-free in oplock/lease break ack
Nicolas Pitre (1):
vt: add missing notification when switching back to text mode
Nigel Croxon (1):
raid10: cleanup memleak at raid10_make_request
Nikunj A Dadhania (1):
KVM: SVM: Add missing member in SNP_LAUNCH_START command structure
Oleksij Rempel (5):
net: phy: smsc: Fix Auto-MDIX configuration when disabled by strap
net: phy: smsc: Force predictable MDI-X state on LAN87xx
net: phy: smsc: Fix link failure in forced mode with Auto-MDIX
net: phy: microchip: Use genphy_soft_reset() to purge stale LPA bits
net: phy: microchip: limit 100M workaround to link-down events on LAN88xx
Peter Ujfalusi (1):
ASoC: Intel: sof-function-topology-lib: Print out the unsupported dmic count
Peter Zijlstra (2):
sched/core: Fix migrate_swap() vs. hotplug
perf: Revert to requiring CAP_SYS_ADMIN for uprobes
Petr Machata (1):
selftests: net: lib: Move logging from forwarding/lib.sh here
Philip Yang (1):
drm/amdkfd: Don't call mmput from MMU notifier callback
Rafael J. Wysocki (1):
Revert "ACPI: battery: negate current when discharging"
Richard Fitzgerald (1):
ASoC: cs35l56: probe() should fail if the device ID is not recognized
Ronnie Sahlberg (1):
ublk: sanity check add_dev input for underflow
Sascha Hauer (1):
clk: scmi: Handle case where child clocks are initialized before their parents
Sean Christopherson (1):
KVM: SVM: Reject SEV{-ES} intra host migration if vCPU creation is in-flight
Sean Nyekjaer (1):
can: m_can: m_can_handle_lost_msg(): downgrade msg lost in rx message to debug level
Shengjiu Wang (1):
ASoC: fsl_asrc: use internal measured ratio for non-ideal ratio mode
Shravya KN (1):
bnxt_en: Fix DCB ETS validation
Shuai Zhang (1):
driver: bluetooth: hci_qca:fix unable to load the BT driver
Shuicheng Lin (1):
drm/xe/pm: Correct comment of xe_pm_set_vram_threshold()
Simon Trimmer (2):
ASoC: Intel: soc-acpi: arl: Correct naming of a cs35l56 address struct
ASoC: Intel: soc-acpi: arl: Add match entries for new cs42l43 laptops
Simona Vetter (1):
drm/gem: Fix race in drm_gem_handle_create_tail()
Somnath Kotur (1):
bnxt_en: Set DMA unmap len correctly for XDP_REDIRECT
Srinivasan Shanmugam (1):
drm/amdgpu: Replace Mutex with Spinlock for RLCG register access to avoid Priority Inversion in SRIOV
Stefan Metzmacher (1):
smb: server: make use of rdma_destroy_qp()
Stefano Garzarella (1):
vsock: fix vsock_proto declaration
Takashi Iwai (1):
ALSA: hda/realtek: Add mic-mute LED setup for ASUS UM5606
Tamura Dai (1):
ASoC: SOF: Intel: hda: Use devm_kstrdup() to avoid memleak.
Thomas Fourier (1):
atm: idt77252: Add missing `dma_map_error()`
Thomas Zimmermann (2):
drm/gem: Acquire references on GEM handles for framebuffers drm/framebuffer: Acquire internal references on GEM handles
Thorsten Blum (1):
ALSA: ad1816a: Fix potential NULL pointer deref in snd_card_ad1816a_pnp()
Tim Crawford (1):
ALSA: hda/realtek: Add quirks for some Clevo laptops
Tiwei Bie (1):
um: vector: Reduce stack usage in vector_eth_configure()
Uwe Kleine-König (2):
pwm: Fix invalid state detection
pwm: mediatek: Ensure to disable clocks in error path
Victor Nogueira (1):
net/sched: Abort __tc_modify_qdisc if parent class does not exist
Vitor Soares (1):
wifi: mwifiex: discard erroneous disassoc frames on STA interface
Wang Jinchao (1):
md/raid1: Fix stack memory use after return in raid1_reshape
Wei Yang (1):
maple_tree: fix mt_destroy_walk() on root leaf node
Willem de Bruijn (2):
bpf: Adjust free target to avoid global starvation of LRU map selftests/bpf: adapt one more case in test_lru_map to the new target_free
Xiaolei Wang (1):
clk: imx: Fix an out-of-bounds access in dispmix_csr_clk_dev_data
Xiaowei Li (1):
net: usb: qmi_wwan: add SIMCom 8230C composition
Yasmin Fitzgerald (1):
ALSA: hda/realtek - Enable mute LED on HP Pavilion Laptop 15-eg100
Yazen Ghannam (4):
x86/mce/amd: Add default names for MCA banks and blocks x86/mce/amd: Fix threshold limit reset
x86/mce: Don't remove sysfs if thresholding sysfs init fails x86/mce: Ensure user polling settings are honored when restarting timer
Yeoreum Yun (1):
kasan: remove kasan_find_vm_area() to prevent possible deadlock
Yue Haibing (1):
atm: clip: Fix NULL pointer dereference in vcc_sendmsg()
Yuzuru10 (1):
ASoC: amd: yc: add quirk for Acer Nitro ANV15-41 internal mic
Zhang Heng (1):
HID: Add IGNORE quirk for SMARTLINKTECHNOLOGY
Zhe Qiao (1):
Revert "PCI/ACPI: Fix allocated memory release on error in pci_acpi_scan_root()"
Zheng Qixing (1):
nbd: fix uaf in nbd_genl_connect() error path
kuyo chang (1):
sched/deadline: Fix dl_server runtime calculation formula
Greg Kroah-Hartman
maintainerDocumentation/bpf/map_hash.rst +7 -1
@@ -233,10 +233,16 @@ attempts in order to enforce the LRU property which have increasing impacts on other CPUs involved in the following operation attempts: - Attempt to use CPU-local state to batch operations -- Attempt to fetch free nodes from global lists +- Attempt to fetch ``target_free`` free nodes from global lists - Attempt to pull any node from a global list and remove it from the hashmap - Attempt to pull any node from any CPU's list and remove it from the hashmap +The number of nodes to borrow from the global list in a batch, ``target_free``, +depends on the size of the map. Larger batch size reduces lock contention, but +may also exhaust the global structure. The value is computed at map init to +avoid exhaustion, by limiting aggregate reservation by all CPUs to half the map +size. With a minimum of a single element and maximum budget of 128 at a time. + This algorithm is described visually in the following diagram. See the description in commit 3a08c2fd7634 ("bpf: LRU List") for a full explanation of the corresponding operations:
Documentation/bpf/map_lru_hash_update.dot +3 -3
@@ -35,18 +35,18 @@ digraph { fn_bpf_lru_list_pop_free_to_local [shape=rectangle,fillcolor=2, label="Flush local pending, Rotate Global list, move - LOCAL_FREE_TARGET + target_free from global -> local"] // Also corresponds to: // fn__local_list_flush() // fn_bpf_lru_list_rotate() fn___bpf_lru_node_move_to_free[shape=diamond,fillcolor=2, - label="Able to free\nLOCAL_FREE_TARGET\nnodes?"] + label="Able to free\ntarget_free\nnodes?"] fn___bpf_lru_list_shrink_inactive [shape=rectangle,fillcolor=3, label="Shrink inactive list up to remaining - LOCAL_FREE_TARGET + target_free (global LRU -> local)"] fn___bpf_lru_list_shrink [shape=diamond,fillcolor=2, label="> 0 entries in\nlocal free list?"]
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 12 -SUBLEVEL = 38 +SUBLEVEL = 39 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm64/kernel/cpufeature.c +26 -19
57 lines not on this page · raw message
arch/arm64/kernel/process.c +5 -0
@@ -544,6 +544,11 @@ static void permission_overlay_switch(struct task_struct *next) current->thread.por_el0 =read_sysreg_s (SYS_POR_EL0 );if (current->thread.por_el0 != next->thread.por_el0) {write_sysreg_s (next->thread.por_el0,SYS_POR_EL0 ); +/* +* No ISB required as we can tolerate spurious Overlay faults - +* the fault handler will check again based on the new value +* of POR_EL0. +*/ } }
arch/arm64/mm/fault.c +21 -9
@@ -487,17 +487,29 @@ static void do_bad_area(unsigned long far, unsigned long esr, } } -static bool fault_from_pkey (unsigned long esr,struct vm_area_struct *vma, -unsigned int mm_flags) +static bool fault_from_pkey (struct vm_area_struct *vma,unsigned int mm_flags) { -unsigned long iss2 =ESR_ELx_ISS2 (esr); -if (!system_supports_poe ())return false; -if (esr_fsc_is_permission_fault (esr) && (iss2 & ESR_ELx_Overlay)) -return true; - +/* +* We do not check whether an Overlay fault has occurred because we +* cannot make a decision based solely on its value: +* +* - If Overlay is set, a fault did occur due to POE, but it may be +* spurious in those cases where we update POR_EL0 without ISB (e.g. +* on context-switch). We would then need to manually check POR_EL0 +* against vma_pkey(vma), which is exactly what +* arch_vma_access_permitted() does. +* +* - If Overlay is not set, we may still need to report a pkey fault. +* This is the case if an access was made within a mapping but with no +* page mapped, and POR_EL0 forbids the access (according to +* vma_pkey()). Such access will result in a SIGSEGV regardless +* because core code checks arch_vma_access_permitted(), but in order +* to report the correct error code - SEGV_PKUERR - we must handle +* that case here. +*/ return !arch_vma_access_permitted(vma, mm_flags & FAULT_FLAG_WRITE, mm_flags & FAULT_FLAG_INSTRUCTION,
@@ -595,7 +607,7 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr, goto bad_area; } -if (fault_from_pkey (esr, vma, mm_flags)) { +if (fault_from_pkey (vma, mm_flags)) { pkey =vma_pkey (vma);vma_end_read (vma); fault =0 ;
@@ -639,7 +651,7 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr, goto bad_area; } -if (fault_from_pkey (esr, vma, mm_flags)) { +if (fault_from_pkey (vma, mm_flags)) { pkey =vma_pkey (vma);mmap_read_unlock (mm); fault =0 ;
arch/riscv/kernel/vdso/vdso.lds.S +1 -1
@@ -31,7 +31,7 @@ SECTIONS *(.data .data.* .gnu.linkonce.d.*) *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) - } + } :text .note : { *(.note.*) } :text :note
arch/s390/crypto/sha1_s390.c +2 -0
@@ -38,6 +38,7 @@ static int s390_sha1_init(struct shash_desc *desc) sctx->state[4 ] =SHA1_H4 ; sctx->count =0 ; sctx->func =CPACF_KIMD_SHA_1 ; + sctx->first_message_part =0 ;return 0 ; }
@@ -62,6 +63,7 @@ static int s390_sha1_import(struct shash_desc *desc, const void *in)memcpy (sctx->state, ictx->state,sizeof (ictx->state));memcpy (sctx->buf, ictx->buffer,sizeof (ictx->buffer)); sctx->func =CPACF_KIMD_SHA_1 ; + sctx->first_message_part =0 ;return 0 ; }
arch/s390/crypto/sha256_s390.c +3 -0
@@ -31,6 +31,7 @@ static int s390_sha256_init(struct shash_desc *desc) sctx->state[7 ] =SHA256_H7 ; sctx->count =0 ; sctx->func =CPACF_KIMD_SHA_256 ; + sctx->first_message_part =0 ;return 0 ; }
@@ -55,6 +56,7 @@ static int sha256_import(struct shash_desc *desc, const void *in)memcpy (sctx->state, ictx->state,sizeof (ictx->state));memcpy (sctx->buf, ictx->buf,sizeof (ictx->buf)); sctx->func =CPACF_KIMD_SHA_256 ; + sctx->first_message_part =0 ;return 0 ; }
@@ -90,6 +92,7 @@ static int s390_sha224_init(struct shash_desc *desc) sctx->state[7 ] =SHA224_H7 ; sctx->count =0 ; sctx->func =CPACF_KIMD_SHA_256 ; + sctx->first_message_part =0 ;return 0 ; }
arch/s390/crypto/sha512_s390.c +3 -0
@@ -32,6 +32,7 @@ static int sha512_init(struct shash_desc *desc) *(__u64 *)&ctx->state[14 ] =SHA512_H7 ; ctx->count =0 ; ctx->func =CPACF_KIMD_SHA_512 ; + ctx->first_message_part =0 ;return 0 ; }
@@ -60,6 +61,7 @@ static int sha512_import(struct shash_desc *desc, const void *in)memcpy (sctx->state, ictx->state,sizeof (ictx->state));memcpy (sctx->buf, ictx->buf,sizeof (ictx->buf)); sctx->func =CPACF_KIMD_SHA_512 ; + sctx->first_message_part =0 ;return 0 ; }
@@ -97,6 +99,7 @@ static int sha384_init(struct shash_desc *desc) *(__u64 *)&ctx->state[14 ] =SHA384_H7 ; ctx->count =0 ; ctx->func =CPACF_KIMD_SHA_512 ; + ctx->first_message_part =0 ;return 0 ; }
arch/um/drivers/vector_kern.c +13 -29
48 lines not on this page · raw message
arch/x86/Kconfig +1 -1
@@ -137,7 +137,7 @@ config X86 select ARCH_WANTS_DYNAMIC_TASK_STRUCT select ARCH_WANTS_NO_INSTR select ARCH_WANT_GENERAL_HUGETLB - select ARCH_WANT_HUGE_PMD_SHARE + select ARCH_WANT_HUGE_PMD_SHARE if X86_64 select ARCH_WANT_LD_ORPHAN_WARN select ARCH_WANT_OPTIMIZE_DAX_VMEMMAP if X86_64 select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP if X86_64
arch/x86/include/asm/msr-index.h +1 -0
@@ -621,6 +621,7 @@#define MSR_AMD64_OSVW_STATUS 0xc0010141#define MSR_AMD_PPIN_CTL 0xc00102f0#define MSR_AMD_PPIN 0xc00102f1 +#define MSR_AMD64_CPUID_FN_7 0xc0011002#define MSR_AMD64_CPUID_FN_1 0xc0011004#define MSR_AMD64_LS_CFG 0xc0011020#define MSR_AMD64_DC_CFG 0xc0011022
arch/x86/kernel/cpu/amd.c +7 -0
@@ -977,6 +977,13 @@ static void init_amd_zen2(struct cpuinfo_x86 *c)init_spectral_chicken (c);fix_erratum_1386 (c);zen2_zenbleed_check (c); + +/* Disable RDSEED on AMD Cyan Skillfish because of an error. */ +if (c->x86_model ==0x47 && c->x86_stepping ==0x0 ) { +clear_cpu_cap (c,X86_FEATURE_RDSEED ); +msr_clear_bit (MSR_AMD64_CPUID_FN_7 ,18 ); +pr_emerg ("RDSEED is not reliable on this platform; disabling.\n" ); + } }static void init_amd_zen3 (struct cpuinfo_x86 *c)
arch/x86/kernel/cpu/mce/amd.c +17 -11
@@ -327,7 +327,6 @@ static void smca_configure(unsigned int bank, unsigned int cpu)struct thresh_restart {struct threshold_block *b; -int reset;int set_lvt_off;int lvt_off;u16 old_limit;
@@ -422,13 +421,13 @@ static void threshold_restart_bank(void *_tr)rdmsr (tr->b->address, lo, hi); -if (tr->b->threshold_limit < (hi &THRESHOLD_MAX )) - tr->reset =1 ;/* limit cannot be lower than err count */ - -if (tr->reset) {/* reset err count and overflow bit */ - hi = - (hi & ~(MASK_ERR_COUNT_HI |MASK_OVERFLOW_HI )) | - (THRESHOLD_MAX - tr->b->threshold_limit); +/* +* Reset error count and overflow bit. +* This is done during init or after handling an interrupt. +*/ +if (hi &MASK_OVERFLOW_HI || tr->set_lvt_off) { + hi &= ~(MASK_ERR_COUNT_HI |MASK_OVERFLOW_HI ); + hi |=THRESHOLD_MAX - tr->b->threshold_limit; }else if (tr->old_limit) {/* change limit w/o reset */ int new_count = (hi &THRESHOLD_MAX ) + (tr->old_limit - tr->b->threshold_limit);
@@ -1099,13 +1098,20 @@ static const char *get_name(unsigned int cpu, unsigned int bank, struct threshol } bank_type =smca_get_bank_type (cpu, bank); -if (bank_type >=N_SMCA_BANK_TYPES ) -return NULL ;if (b && (bank_type ==SMCA_UMC || bank_type ==SMCA_UMC_V2 )) {if (b->block <ARRAY_SIZE (smca_umc_block_names))return smca_umc_block_names[b->block]; -return NULL ; + } + +if (b && b->block) { +snprintf (buf_mcatype,MAX_MCATYPE_NAME_LEN ,"th_block_%u" , b->block); +return buf_mcatype; + } + +if (bank_type >=N_SMCA_BANK_TYPES ) { +snprintf (buf_mcatype,MAX_MCATYPE_NAME_LEN ,"th_bank_%u" , bank); +return buf_mcatype; }if (per_cpu (smca_bank_counts, cpu)[bank_type] ==1 )
arch/x86/kernel/cpu/mce/core.c +11 -13
@@ -1688,6 +1688,11 @@ static void mc_poll_banks_default(void)void (*mc_poll_banks)(void ) = mc_poll_banks_default; +static bool should_enable_timer (unsigned long iv) +{ +return !mca_cfg.ignore_ce && iv; +} +static void mce_timer_fn (struct timer_list *t) {struct timer_list *cpu_t =this_cpu_ptr (&mce_timer);
@@ -1711,7 +1716,7 @@ static void mce_timer_fn(struct timer_list *t)if (mce_get_storm_mode ()) {__start_timer (t,HZ ); - }else { + }else if (should_enable_timer (iv)) {__this_cpu_write (mce_next_interval, iv);__start_timer (t, iv); }
@@ -2111,11 +2116,10 @@ static void mce_start_timer(struct timer_list *t) {unsigned long iv = check_interval *HZ ; -if (mca_cfg.ignore_ce || !iv) -return ; - -this_cpu_write (mce_next_interval, iv); -__start_timer (t, iv); +if (should_enable_timer (iv)) { +this_cpu_write (mce_next_interval, iv); +__start_timer (t, iv); + } }static void __mcheck_cpu_setup_timer (void )
@@ -2756,15 +2760,9 @@ static int mce_cpu_dead(unsigned int cpu)static int mce_cpu_online (unsigned int cpu) {struct timer_list *t =this_cpu_ptr (&mce_timer); -int ret;mce_device_create (cpu); - - ret =mce_threshold_create_device (cpu); -if (ret) { -mce_device_remove (cpu); -return ret; - } +mce_threshold_create_device (cpu);mce_reenable_cpu ();mce_start_timer (t);return 0 ;
arch/x86/kernel/cpu/mce/intel.c +1 -0
@@ -477,6 +477,7 @@ void mce_intel_feature_init(struct cpuinfo_x86 *c)void mce_intel_feature_clear (struct cpuinfo_x86 *c) {intel_clear_lmce (); +cmci_clear (); }bool intel_filter_mce (struct mce *m)
arch/x86/kvm/cpuid.c +4 -0
@@ -822,6 +822,7 @@ void kvm_set_cpu_caps(void)kvm_cpu_cap_check_and_set (X86_FEATURE_SBPB );kvm_cpu_cap_check_and_set (X86_FEATURE_IBPB_BRTYPE );kvm_cpu_cap_check_and_set (X86_FEATURE_SRSO_NO ); +kvm_cpu_cap_check_and_set (X86_FEATURE_VERW_CLEAR );kvm_cpu_cap_init_kvm_defined (CPUID_8000_0022_EAX , F(PERFMON_V2)
@@ -831,6 +832,9 @@ void kvm_set_cpu_caps(void)F (TSA_SQ_NO ) |F (TSA_L1_NO ) ); +kvm_cpu_cap_check_and_set (X86_FEATURE_TSA_SQ_NO ); +kvm_cpu_cap_check_and_set (X86_FEATURE_TSA_L1_NO ); +/* * Synthesize "LFENCE is serializing" into the AMD-defined entry in * KVM's supported CPUID if the feature is reported as supported by the
arch/x86/kvm/svm/sev.c +4 -0
@@ -2058,6 +2058,10 @@ static int sev_check_source_vcpus(struct kvm *dst, struct kvm *src)struct kvm_vcpu *src_vcpu;unsigned long i; +if (src->created_vcpus !=atomic_read (&src->online_vcpus) || + dst->created_vcpus !=atomic_read (&dst->online_vcpus)) +return -EBUSY ; +if (!sev_es_guest (src))return 0 ;
arch/x86/kvm/xen.c +13 -2
@@ -1916,8 +1916,19 @@ int kvm_xen_setup_evtchn(struct kvm *kvm, {struct kvm_vcpu *vcpu; -if (ue->u.xen_evtchn.port >=max_evtchn_port (kvm)) -return -EINVAL ; +/* +* Don't check for the port being within range of max_evtchn_port(). +* Userspace can configure what ever targets it likes; events just won't +* be delivered if/while the target is invalid, just like userspace can +* configure MSIs which target non-existent APICs. +* +* This allow on Live Migration and Live Update, the IRQ routing table +* can be restored *independently* of other things like creating vCPUs, +* without imposing an ordering dependency on userspace. In this +* particular case, the problematic ordering would be with setting the +* Xen 'long mode' flag, which changes max_evtchn_port() to allow 4096 +* instead of 1024 event channels. +*/ /* We only support 2 level event channels for now */ if (ue->u.xen_evtchn.priority !=KVM_IRQ_ROUTING_XEN_EVTCHN_PRIO_2LEVEL )
crypto/ecc.c +1 -1
@@ -71,7 +71,7 @@ EXPORT_SYMBOL(ecc_get_curve);void ecc_digits_from_bytes (const u8 *in,unsigned int nbytes,u64 *out,unsigned int ndigits) { -int diff = ndigits -DIV_ROUND_UP (nbytes,sizeof (u64)); +int diff = ndigits -DIV_ROUND_UP_POW2 (nbytes,sizeof (u64));unsigned int o = nbytes &7 ;__be64 msd =0 ;
drivers/acpi/battery.c +3 -16
@@ -243,23 +243,10 @@ static int acpi_battery_get_property(struct power_supply *psy,break ;case POWER_SUPPLY_PROP_CURRENT_NOW :case POWER_SUPPLY_PROP_POWER_NOW : -if (battery->rate_now ==ACPI_BATTERY_VALUE_UNKNOWN ) { +if (battery->rate_now ==ACPI_BATTERY_VALUE_UNKNOWN ) ret = -ENODEV ; -break ; - } - - val->intval = battery->rate_now *1000 ; -/* -* When discharging, the current should be reported as a -* negative number as per the power supply class interface -* definition. -*/ -if (psp ==POWER_SUPPLY_PROP_CURRENT_NOW && - (battery->state &ACPI_BATTERY_STATE_DISCHARGING ) && -acpi_battery_handle_discharging (battery) - ==POWER_SUPPLY_STATUS_DISCHARGING ) - val->intval = -val->intval; - +else + val->intval = battery->rate_now *1000 ;break ;case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN :case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN :
drivers/atm/idt77252.c +5 -0
@@ -852,6 +852,8 @@ queue_skb(struct idt77252_dev *card, struct vc_map *vc,IDT77252_PRV_PADDR (skb) =dma_map_single (&card->pcidev->dev, skb->data, skb->len,DMA_TO_DEVICE ); +if (dma_mapping_error (&card->pcidev->dev,IDT77252_PRV_PADDR (skb))) +return -ENOMEM ; error = -EINVAL ;
@@ -1857,6 +1859,8 @@ add_rx_skb(struct idt77252_dev *card, int queue, paddr =dma_map_single (&card->pcidev->dev, skb->data,skb_end_pointer (skb) - skb->data,DMA_FROM_DEVICE ); +if (dma_mapping_error (&card->pcidev->dev, paddr)) + goto outpoolrm;IDT77252_PRV_PADDR (skb) = paddr;if (push_rx_skb (card, skb, queue)) {
@@ -1871,6 +1875,7 @@ add_rx_skb(struct idt77252_dev *card, int queue,dma_unmap_single (&card->pcidev->dev,IDT77252_PRV_PADDR (skb),skb_end_pointer (skb) - skb->data,DMA_FROM_DEVICE ); +outpoolrm: handle =IDT77252_PRV_POOL (skb); card->sbpool[POOL_QUEUE (handle)].skb[POOL_INDEX (handle)] =NULL ;
drivers/block/nbd.c +3 -3
@@ -2136,9 +2136,7 @@ static int nbd_genl_connect(struct sk_buff *skb, struct genl_info *info) goto out; } } - ret =nbd_start_device (nbd); -if (ret) - goto out; +if (info->attrs[NBD_ATTR_BACKEND_IDENTIFIER ]) { nbd->backend =nla_strdup (info->attrs[NBD_ATTR_BACKEND_IDENTIFIER ],GFP_KERNEL );
@@ -2154,6 +2152,8 @@ static int nbd_genl_connect(struct sk_buff *skb, struct genl_info *info) goto out; }set_bit (NBD_RT_HAS_BACKEND_FILE , &config->runtime_flags); + + ret =nbd_start_device (nbd); out:mutex_unlock (&nbd->config_lock);if (!ret) {
drivers/block/ublk_drv.c +2 -1
@@ -2457,7 +2457,8 @@ static int ublk_ctrl_add_dev(struct io_uring_cmd *cmd)if (copy_from_user (&info, argp,sizeof (info)))return -EFAULT ; -if (info.queue_depth >UBLK_MAX_QUEUE_DEPTH || info.nr_hw_queues >UBLK_MAX_NR_QUEUES ) +if (info.queue_depth >UBLK_MAX_QUEUE_DEPTH || !info.queue_depth || + info.nr_hw_queues >UBLK_MAX_NR_QUEUES || !info.nr_hw_queues)return -EINVAL ;if (capable (CAP_SYS_ADMIN ))
drivers/bluetooth/hci_qca.c +10 -3
@@ -2363,10 +2363,17 @@ static int qca_serdev_probe(struct serdev_device *serdev)*/ qcadev->bt_power->pwrseq =devm_pwrseq_get (&serdev->dev,"bluetooth" ); -if (IS_ERR (qcadev->bt_power->pwrseq)) -return PTR_ERR (qcadev->bt_power->pwrseq); -break ; +/* +* Some modules have BT_EN enabled via a hardware pull-up, +* meaning it is not defined in the DTS and is not controlled +* through the power sequence. In such cases, fall through +* to follow the legacy flow. +*/ +if (IS_ERR (qcadev->bt_power->pwrseq)) + qcadev->bt_power->pwrseq =NULL ; +else +break ; } fallthrough;case QCA_WCN3988 :
drivers/char/ipmi/ipmi_msghandler.c +2 -1
@@ -1241,7 +1241,7 @@ int ipmi_create_user(unsigned int if_num, }/* Not found, return an error */ rv = -EINVAL ; - goto out_kfree; + goto out_unlock; found:if (atomic_add_return (1 , &intf->nr_users) > max_users) {
@@ -1283,6 +1283,7 @@ int ipmi_create_user(unsigned int if_num, out_kfree:atomic_dec (&intf->nr_users); +out_unlock:srcu_read_unlock (&ipmi_interfaces_srcu, index);vfree (new_user);return rv;
drivers/clk/clk-scmi.c +10 -8
@@ -404,6 +404,7 @@ static int scmi_clocks_probe(struct scmi_device *sdev)const struct scmi_handle *handle = sdev->handle;struct scmi_protocol_handle *ph;const struct clk_ops *scmi_clk_ops_db[SCMI_MAX_CLK_OPS ] = {}; +struct scmi_clk *sclks;if (!handle)return -ENODEV ;
@@ -430,18 +431,21 @@ static int scmi_clocks_probe(struct scmi_device *sdev) transport_is_atomic = handle->is_transport_atomic (handle, &atomic_threshold_us); + sclks =devm_kcalloc (dev, count,sizeof (*sclks),GFP_KERNEL ); +if (!sclks) +return -ENOMEM ; + +for (idx =0 ; idx < count; idx++) + hws[idx] = &sclks[idx].hw; +for (idx =0 ; idx < count; idx++) { -struct scmi_clk *sclk; +struct scmi_clk *sclk = &sclks[idx];const struct clk_ops *scmi_ops; - sclk =devm_kzalloc (dev,sizeof (*sclk),GFP_KERNEL ); -if (!sclk) -return -ENOMEM ; - sclk->info = scmi_proto_clk_ops->info_get (ph, idx);if (!sclk->info) {dev_dbg (dev,"invalid clock info for idx %d\n" , idx); -devm_kfree (dev, sclk); + hws[idx] =NULL ;continue ; }
@@ -479,13 +483,11 @@ static int scmi_clocks_probe(struct scmi_device *sdev)if (err) {dev_err (dev,"failed to register clock %d\n" , idx);devm_kfree (dev, sclk->parent_data); -devm_kfree (dev, sclk); hws[idx] =NULL ; }else {dev_dbg (dev,"Registered clock:%s%s\n" , sclk->info->name, scmi_ops->enable ?" (atomic ops)" :"" ); - hws[idx] = &sclk->hw; } }
drivers/clk/imx/clk-imx95-blk-ctl.c +8 -4
@@ -219,11 +219,15 @@ static const struct imx95_blk_ctl_dev_data lvds_csr_dev_data = { .clk_reg_offset = 0, }; +static const char *const disp_engine_parents[] = { +"videopll1" ,"dsi_pll" ,"ldb_pll_div7" +}; +static const struct imx95_blk_ctl_clk_dev_data dispmix_csr_clk_dev_data[] = { [IMX95_CLK_DISPMIX_ENG0_SEL ] = { .name ="disp_engine0_sel" , - .parent_names = (const char *[]){"videopll1" ,"dsi_pll" ,"ldb_pll_div7" , }, - .num_parents =4 , + .parent_names = disp_engine_parents, + .num_parents =ARRAY_SIZE (disp_engine_parents), .reg =0 , .bit_idx =0 , .bit_width =2 ,
@@ -232,8 +236,8 @@ static const struct imx95_blk_ctl_clk_dev_data dispmix_csr_clk_dev_data[] = { }, [IMX95_CLK_DISPMIX_ENG1_SEL] = { .name = "disp_engine1_sel", - .parent_names = (const char *[]){"videopll1", "dsi_pll", "ldb_pll_div7", }, - .num_parents = 4, + .parent_names = disp_engine_parents, + .num_parents = ARRAY_SIZE(disp_engine_parents), .reg = 0, .bit_idx = 2, .bit_width = 2,
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +1 -1
@@ -4144,7 +4144,6 @@ int amdgpu_device_init(struct amdgpu_device *adev,mutex_init (&adev->grbm_idx_mutex);mutex_init (&adev->mn_lock);mutex_init (&adev->virt.vf_errors.lock); -mutex_init (&adev->virt.rlcg_reg_lock);hash_init (adev->mn_hash);mutex_init (&adev->psp.mutex);mutex_init (&adev->notifier_lock);
@@ -4170,6 +4169,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,spin_lock_init (&adev->se_cac_idx_lock);spin_lock_init (&adev->audio_endpt_idx_lock);spin_lock_init (&adev->mm_stats.lock); +spin_lock_init (&adev->virt.rlcg_reg_lock);spin_lock_init (&adev->wb.lock);INIT_LIST_HEAD (&adev->reset_list);
drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c +29 -1
@@ -112,6 +112,14 @@#endif MODULE_FIRMWARE ("amdgpu/ip_discovery.bin" ); +MODULE_FIRMWARE ("amdgpu/vega10_ip_discovery.bin" ); +MODULE_FIRMWARE ("amdgpu/vega12_ip_discovery.bin" ); +MODULE_FIRMWARE ("amdgpu/vega20_ip_discovery.bin" ); +MODULE_FIRMWARE ("amdgpu/raven_ip_discovery.bin" ); +MODULE_FIRMWARE ("amdgpu/raven2_ip_discovery.bin" ); +MODULE_FIRMWARE ("amdgpu/picasso_ip_discovery.bin" ); +MODULE_FIRMWARE ("amdgpu/arcturus_ip_discovery.bin" ); +MODULE_FIRMWARE ("amdgpu/aldebaran_ip_discovery.bin" );#define mmIP_DISCOVERY_VERSION 0x16A00#define mmRCC_CONFIG_MEMSIZE 0xde3
@@ -400,7 +408,27 @@ static const char *amdgpu_discovery_get_fw_name(struct amdgpu_device *adev)if (amdgpu_discovery ==2 )return "amdgpu/ip_discovery.bin" ; -return NULL ; +switch (adev->asic_type) { +case CHIP_VEGA10 : +return "amdgpu/vega10_ip_discovery.bin" ; +case CHIP_VEGA12 : +return "amdgpu/vega12_ip_discovery.bin" ; +case CHIP_RAVEN : +if (adev->apu_flags &AMD_APU_IS_RAVEN2 ) +return "amdgpu/raven2_ip_discovery.bin" ; +else if (adev->apu_flags &AMD_APU_IS_PICASSO ) +return "amdgpu/picasso_ip_discovery.bin" ; +else +return "amdgpu/raven_ip_discovery.bin" ; +case CHIP_VEGA20 : +return "amdgpu/vega20_ip_discovery.bin" ; +case CHIP_ARCTURUS : +return "amdgpu/arcturus_ip_discovery.bin" ; +case CHIP_ALDEBARAN : +return "amdgpu/aldebaran_ip_discovery.bin" ; +default : +return NULL ; + } }static int amdgpu_discovery_init (struct amdgpu_device *adev)
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +3 -2
@@ -1010,6 +1010,7 @@ u32 amdgpu_virt_rlcg_reg_rw(struct amdgpu_device *adev, u32 offset, u32 v, u32 fvoid *scratch_reg2;void *scratch_reg3;void *spare_int; +unsigned long flags;if (!adev->gfx.rlc.rlcg_reg_access_supported) { dev_err(adev->dev,
@@ -1031,7 +1032,7 @@ u32 amdgpu_virt_rlcg_reg_rw(struct amdgpu_device *adev, u32 offset, u32 v, u32 f scratch_reg2 = (void __iomem *)adev->rmmio +4 * reg_access_ctrl->scratch_reg2; scratch_reg3 = (void __iomem *)adev->rmmio +4 * reg_access_ctrl->scratch_reg3; -mutex_lock (&adev->virt.rlcg_reg_lock); +spin_lock_irqsave (&adev->virt.rlcg_reg_lock, flags);if (reg_access_ctrl->spare_int) spare_int = (void __iomem *)adev->rmmio +4 * reg_access_ctrl->spare_int;
@@ -1090,7 +1091,7 @@ u32 amdgpu_virt_rlcg_reg_rw(struct amdgpu_device *adev, u32 offset, u32 v, u32 f ret =readl (scratch_reg0); -mutex_unlock (&adev->virt.rlcg_reg_lock); +spin_unlock_irqrestore (&adev->virt.rlcg_reg_lock, flags);return ret; }
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h +2 -1
@@ -275,7 +275,8 @@ struct amdgpu_virt {/* the ucode id to signal the autoload */ uint32_t autoload_ucode_id; -struct mutex rlcg_reg_lock; +/* Spinlock to protect access to the RLCG register interface */ +spinlock_t rlcg_reg_lock; };struct amdgpu_video_codec_info ;
drivers/gpu/drm/amd/amdkfd/kfd_svm.c +20 -23
97 lines not on this page · raw message
drivers/gpu/drm/drm_framebuffer.c +29 -2
@@ -860,11 +860,23 @@ void drm_framebuffer_free(struct kref *kref)int drm_framebuffer_init (struct drm_device *dev,struct drm_framebuffer *fb,const struct drm_framebuffer_funcs *funcs) { +unsigned int i;int ret; +bool exists;if (WARN_ON_ONCE (fb->dev != dev || !fb->format))return -EINVAL ; +for (i =0 ; i < fb->format->num_planes; i++) { +if (drm_WARN_ON_ONCE (dev, fb->internal_flags &DRM_FRAMEBUFFER_HAS_HANDLE_REF (i))) + fb->internal_flags &= ~DRM_FRAMEBUFFER_HAS_HANDLE_REF (i); +if (fb->obj[i]) { + exists =drm_gem_object_handle_get_if_exists_unlocked (fb->obj[i]); +if (exists) + fb->internal_flags |=DRM_FRAMEBUFFER_HAS_HANDLE_REF (i); + } + } +INIT_LIST_HEAD (&fb->filp_head); fb->funcs = funcs;
@@ -873,7 +885,7 @@ int drm_framebuffer_init(struct drm_device *dev, struct drm_framebuffer *fb, ret =__drm_mode_object_add (dev, &fb->base,DRM_MODE_OBJECT_FB , false, drm_framebuffer_free);if (ret) - goto out; + goto err;mutex_lock (&dev->mode_config.fb_lock); dev->mode_config.num_fb++;
@@ -881,7 +893,16 @@ int drm_framebuffer_init(struct drm_device *dev, struct drm_framebuffer *fb,mutex_unlock (&dev->mode_config.fb_lock);drm_mode_object_register (dev, &fb->base); -out: + +return 0 ; + +err: +for (i =0 ; i < fb->format->num_planes; i++) { +if (fb->internal_flags &DRM_FRAMEBUFFER_HAS_HANDLE_REF (i)) { +drm_gem_object_handle_put_unlocked (fb->obj[i]); + fb->internal_flags &= ~DRM_FRAMEBUFFER_HAS_HANDLE_REF (i); + } + }return ret; }EXPORT_SYMBOL (drm_framebuffer_init);
@@ -958,6 +979,12 @@ EXPORT_SYMBOL(drm_framebuffer_unregister_private);void drm_framebuffer_cleanup (struct drm_framebuffer *fb) {struct drm_device *dev = fb->dev; +unsigned int i; + +for (i =0 ; i < fb->format->num_planes; i++) { +if (fb->internal_flags &DRM_FRAMEBUFFER_HAS_HANDLE_REF (i)) +drm_gem_object_handle_put_unlocked (fb->obj[i]); + }mutex_lock (&dev->mode_config.fb_lock);list_del (&fb->head);
drivers/gpu/drm/drm_gem.c +64 -10
117 lines not on this page · raw message
drivers/gpu/drm/drm_internal.h +2 -0
@@ -153,6 +153,8 @@ void drm_sysfs_lease_event(struct drm_device *dev);/* drm_gem.c */ int drm_gem_init (struct drm_device *dev); +bool drm_gem_object_handle_get_if_exists_unlocked (struct drm_gem_object *obj); +void drm_gem_object_handle_put_unlocked (struct drm_gem_object *obj);int drm_gem_handle_create_tail (struct drm_file *file_priv,struct drm_gem_object *obj,u32 *handlep);
drivers/gpu/drm/exynos/exynos7_drm_decon.c +4 -0
@@ -601,6 +601,10 @@ static irqreturn_t decon_irq_handler(int irq, void *dev_id)if (!ctx->drm_dev) goto out; +/* check if crtc and vblank have been initialized properly */ +if (!drm_dev_has_vblank (ctx->drm_dev)) + goto out; +if (!ctx->i80_if) {drm_crtc_handle_vblank (&ctx->crtc->base);
drivers/gpu/drm/imagination/pvr_power.c +2 -2
@@ -363,13 +363,13 @@ pvr_power_reset(struct pvr_device *pvr_dev, bool hard_reset)if (!err) {if (hard_reset) { pvr_dev->fw_dev.booted = false; -WARN_ON (pm_runtime_force_suspend (from_pvr_device (pvr_dev)->dev)); +WARN_ON (pvr_power_device_suspend (from_pvr_device (pvr_dev)->dev)); err =pvr_fw_hard_reset (pvr_dev);if (err) goto err_device_lost; - err =pm_runtime_force_resume (from_pvr_device (pvr_dev)->dev); + err =pvr_power_device_resume (from_pvr_device (pvr_dev)->dev); pvr_dev->fw_dev.booted = true;if (err) goto err_device_lost;
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c +14 -6
@@ -1454,7 +1454,6 @@ r535_gsp_acpi_caps(acpi_handle handle, CAPS_METHOD_DATA *caps)union acpi_object argv4 = { .buffer.type =ACPI_TYPE_BUFFER , .buffer.length =4 , - .buffer.pointer =kmalloc (argv4.buffer.length,GFP_KERNEL ), }, *obj; caps->status =0xffff ;
@@ -1462,17 +1461,22 @@ r535_gsp_acpi_caps(acpi_handle handle, CAPS_METHOD_DATA *caps)if (!acpi_check_dsm (handle, &NVOP_DSM_GUID ,NVOP_DSM_REV ,BIT_ULL (0x1a )))return ; + argv4.buffer.pointer =kmalloc (argv4.buffer.length,GFP_KERNEL ); +if (!argv4.buffer.pointer) +return ; + obj =acpi_evaluate_dsm (handle, &NVOP_DSM_GUID ,NVOP_DSM_REV ,0x1a , &argv4);if (!obj) -return ; + goto done;if (WARN_ON (obj->type !=ACPI_TYPE_BUFFER ) ||WARN_ON (obj->buffer.length !=4 )) -return ; + goto done; caps->status =0 ; caps->optimusCaps = *(u32 *)obj->buffer.pointer; +done:ACPI_FREE (obj);kfree (argv4.buffer.pointer);
@@ -1489,24 +1493,28 @@ r535_gsp_acpi_jt(acpi_handle handle, JT_METHOD_DATA *jt)union acpi_object argv4 = { .buffer.type =ACPI_TYPE_BUFFER , .buffer.length =sizeof (caps), - .buffer.pointer =kmalloc (argv4.buffer.length,GFP_KERNEL ), }, *obj; jt->status =0xffff ; + argv4.buffer.pointer =kmalloc (argv4.buffer.length,GFP_KERNEL ); +if (!argv4.buffer.pointer) +return ; + obj =acpi_evaluate_dsm (handle, &JT_DSM_GUID ,JT_DSM_REV ,0x1 , &argv4);if (!obj) -return ; + goto done;if (WARN_ON (obj->type !=ACPI_TYPE_BUFFER ) ||WARN_ON (obj->buffer.length !=4 )) -return ; + goto done; jt->status =0 ; jt->jtCaps = *(u32 *)obj->buffer.pointer; jt->jtRevId = (jt->jtCaps &0xfff00000 ) >>20 ; jt->bSBIOSCaps =0 ; +done:ACPI_FREE (obj);kfree (argv4.buffer.pointer);
drivers/gpu/drm/tegra/nvdec.c +2 -4
@@ -261,10 +261,8 @@ static int nvdec_load_falcon_firmware(struct nvdec *nvdec)if (!client->group) { virt =dma_alloc_coherent (nvdec->dev, size, &iova,GFP_KERNEL ); - - err =dma_mapping_error (nvdec->dev, iova); -if (err <0 ) -return err; +if (!virt) +return -ENOMEM ; }else { virt =tegra_drm_alloc (tegra, size, &iova);if (IS_ERR (virt))
drivers/gpu/drm/ttm/ttm_bo_util.c +7 -6
@@ -254,6 +254,13 @@ static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo, ret =dma_resv_trylock (&fbo->base.base._resv);WARN_ON (!ret); + ret =dma_resv_reserve_fences (&fbo->base.base._resv,1 ); +if (ret) { +dma_resv_unlock (&fbo->base.base._resv); +kfree (fbo); +return ret; + } +if (fbo->base.resource) {ttm_resource_set_bo (fbo->base.resource, &fbo->base); bo->resource =NULL ;
@@ -262,12 +269,6 @@ static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo, fbo->base.bulk_move =NULL ; } - ret =dma_resv_reserve_fences (&fbo->base.base._resv,1 ); -if (ret) { -kfree (fbo); -return ret; - } -ttm_bo_get (bo); fbo->bo = bo;
drivers/gpu/drm/xe/xe_gt_pagefault.c +1 -0
@@ -432,6 +432,7 @@ static int xe_alloc_pf_queue(struct xe_gt *gt, struct pf_queue *pf_queue)#define PF_MULTIPLIER 8 pf_queue->num_dw = (num_eus +XE_NUM_HW_ENGINES ) *PF_MSG_LEN_DW *PF_MULTIPLIER ; + pf_queue->num_dw =roundup_pow_of_two (pf_queue->num_dw);#undef PF_MULTIPLIER pf_queue->gt = gt;
drivers/gpu/drm/xe/xe_lmtt.c +11 -0
@@ -78,6 +78,9 @@ static struct xe_lmtt_pt *lmtt_pt_alloc(struct xe_lmtt *lmtt, unsigned int level }lmtt_assert (lmtt,xe_bo_is_vram (bo)); +lmtt_debug (lmtt,"level=%u addr=%#llx\n" , level, (u64 )xe_bo_main_addr (bo,XE_PAGE_SIZE )); + +xe_map_memset (lmtt_to_xe (lmtt), &bo->vmap,0 ,0 , bo->size); pt->level = level; pt->bo = bo;
@@ -91,6 +94,9 @@ static struct xe_lmtt_pt *lmtt_pt_alloc(struct xe_lmtt *lmtt, unsigned int levelstatic void lmtt_pt_free (struct xe_lmtt_pt *pt) { +lmtt_debug (&pt->bo->tile->sriov.pf.lmtt,"level=%u addr=%llx\n" , + pt->level, (u64 )xe_bo_main_addr (pt->bo,XE_PAGE_SIZE )); +xe_bo_unpin_map_no_vm (pt->bo);kfree (pt); }
@@ -226,9 +232,14 @@ static void lmtt_write_pte(struct xe_lmtt *lmtt, struct xe_lmtt_pt *pt,switch (lmtt->ops->lmtt_pte_size (level)) {case sizeof (u32): +lmtt_assert (lmtt, !overflows_type (pte, u32)); +lmtt_assert (lmtt, !pte || !iosys_map_rd (&pt->bo->vmap, idx *sizeof (u32), u32)); +xe_map_wr (lmtt_to_xe (lmtt), &pt->bo->vmap, idx *sizeof (u32), u32, pte);break ;case sizeof (u64): +lmtt_assert (lmtt, !pte || !iosys_map_rd (&pt->bo->vmap, idx *sizeof (u64), u64)); +xe_map_wr (lmtt_to_xe (lmtt), &pt->bo->vmap, idx *sizeof (u64), u64, pte);break ;default :
drivers/gpu/drm/xe/xe_migrate.c +1 -1
@@ -860,7 +860,7 @@ struct dma_fence *xe_migrate_copy(struct xe_migrate *m,if (src_is_vram &&xe_migrate_allow_identity (src_L0, &src_it))xe_res_next (&src_it, src_L0);else -emit_pte (m, bb, src_L0_pt, src_is_vram, copy_system_ccs, +emit_pte (m, bb, src_L0_pt, src_is_vram, copy_system_ccs || use_comp_pat, &src_it, src_L0, src);if (dst_is_vram &&xe_migrate_allow_identity (src_L0, &dst_it))
drivers/gpu/drm/xe/xe_pci.c +0 -1
@@ -164,7 +164,6 @@ static const struct xe_graphics_desc graphics_xelpg = { .has_asid = 1, \ .has_atomic_enable_pte_bit = 1, \ .has_flat_ccs = 1, \ - .has_indirect_ring_state = 1, \ .has_range_tlb_invalidation = 1, \ .has_usm = 1, \ .va_bits = 48, \
drivers/gpu/drm/xe/xe_pm.c +5 -3
@@ -682,11 +682,13 @@ void xe_pm_assert_unbounded_bridge(struct xe_device *xe) }/** -* xe_pm_set_vram_threshold - Set a vram threshold for allowing/blocking D3Cold +* xe_pm_set_vram_threshold - Set a VRAM threshold for allowing/blocking D3Cold * @xe: xe device instance -* @threshold: VRAM size in bites for the D3cold threshold +* @threshold: VRAM size in MiB for the D3cold threshold * -* Returns 0 for success, negative error code otherwise. +* Return: +* * 0 - success +* * -EINVAL - invalid argument */ int xe_pm_set_vram_threshold (struct xe_device *xe,u32 threshold) {
drivers/hid/hid-ids.h +6 -0
@@ -311,6 +311,8 @@#define USB_DEVICE_ID_ASUS_AK1D 0x1125#define USB_DEVICE_ID_CHICONY_TOSHIBA_WT10A 0x1408#define USB_DEVICE_ID_CHICONY_ACER_SWITCH12 0x1421 +#define USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA 0xb824 +#define USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA2 0xb82c#define USB_VENDOR_ID_CHUNGHWAT 0x2247#define USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH 0x0001
@@ -814,6 +816,7 @@#define USB_DEVICE_ID_LENOVO_TPPRODOCK 0x6067#define USB_DEVICE_ID_LENOVO_X1_COVER 0x6085#define USB_DEVICE_ID_LENOVO_X1_TAB 0x60a3 +#define USB_DEVICE_ID_LENOVO_X1_TAB2 0x60a4#define USB_DEVICE_ID_LENOVO_X1_TAB3 0x60b5#define USB_DEVICE_ID_LENOVO_X12_TAB 0x60fe#define USB_DEVICE_ID_LENOVO_X12_TAB2 0x61ae
@@ -1518,4 +1521,7 @@#define USB_VENDOR_ID_SIGNOTEC 0x2133#define USB_DEVICE_ID_SIGNOTEC_VIEWSONIC_PD1011 0x0018 +#define USB_VENDOR_ID_SMARTLINKTECHNOLOGY 0x4c4a +#define USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155 0x4155 +#endif
drivers/hid/hid-lenovo.c +8 -0
@@ -473,6 +473,7 @@ static int lenovo_input_mapping(struct hid_device *hdev,return lenovo_input_mapping_tp10_ultrabook_kbd (hdev, hi, field, usage, bit, max);case USB_DEVICE_ID_LENOVO_X1_TAB : +case USB_DEVICE_ID_LENOVO_X1_TAB2 :case USB_DEVICE_ID_LENOVO_X1_TAB3 :return lenovo_input_mapping_x1_tab_kbd (hdev, hi, field, usage, bit, max);default :
@@ -587,6 +588,7 @@ static ssize_t attr_fn_lock_store(struct device *dev,break ;case USB_DEVICE_ID_LENOVO_TP10UBKBD :case USB_DEVICE_ID_LENOVO_X1_TAB : +case USB_DEVICE_ID_LENOVO_X1_TAB2 :case USB_DEVICE_ID_LENOVO_X1_TAB3 : ret =lenovo_led_set_tp10ubkbd (hdev,TP10UBKBD_FN_LOCK_LED , value);if (ret)
@@ -781,6 +783,7 @@ static int lenovo_event(struct hid_device *hdev, struct hid_field *field,return lenovo_event_cptkbd (hdev, field, usage, value);case USB_DEVICE_ID_LENOVO_TP10UBKBD :case USB_DEVICE_ID_LENOVO_X1_TAB : +case USB_DEVICE_ID_LENOVO_X1_TAB2 :case USB_DEVICE_ID_LENOVO_X1_TAB3 :return lenovo_event_tp10ubkbd (hdev, field, usage, value);default :
@@ -1062,6 +1065,7 @@ static int lenovo_led_brightness_set(struct led_classdev *led_cdev,break ;case USB_DEVICE_ID_LENOVO_TP10UBKBD :case USB_DEVICE_ID_LENOVO_X1_TAB : +case USB_DEVICE_ID_LENOVO_X1_TAB2 :case USB_DEVICE_ID_LENOVO_X1_TAB3 : ret =lenovo_led_set_tp10ubkbd (hdev, tp10ubkbd_led[led_nr], value);break ;
@@ -1293,6 +1297,7 @@ static int lenovo_probe(struct hid_device *hdev,break ;case USB_DEVICE_ID_LENOVO_TP10UBKBD :case USB_DEVICE_ID_LENOVO_X1_TAB : +case USB_DEVICE_ID_LENOVO_X1_TAB2 :case USB_DEVICE_ID_LENOVO_X1_TAB3 : ret =lenovo_probe_tp10ubkbd (hdev);break ;
@@ -1380,6 +1385,7 @@ static void lenovo_remove(struct hid_device *hdev)break ;case USB_DEVICE_ID_LENOVO_TP10UBKBD :case USB_DEVICE_ID_LENOVO_X1_TAB : +case USB_DEVICE_ID_LENOVO_X1_TAB2 :case USB_DEVICE_ID_LENOVO_X1_TAB3 :lenovo_remove_tp10ubkbd (hdev);break ;
@@ -1430,6 +1436,8 @@ static const struct hid_device_id lenovo_devices[] = {*/ {HID_DEVICE (BUS_USB ,HID_GROUP_GENERIC , USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB) }, + { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, + USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB2) }, { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB3) }, { }
drivers/hid/hid-multitouch.c +7 -1
@@ -2116,12 +2116,18 @@ static const struct hid_device_id mt_devices[] = { HID_DEVICE(BUS_I2C, HID_GROUP_GENERIC, USB_VENDOR_ID_LG, I2C_DEVICE_ID_LG_7010) }, -/* Lenovo X1 TAB Gen 2 */ +/* Lenovo X1 TAB Gen 1 */ { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,HID_DEVICE (BUS_USB ,HID_GROUP_MULTITOUCH_WIN_8 ,USB_VENDOR_ID_LENOVO , USB_DEVICE_ID_LENOVO_X1_TAB) }, + /* Lenovo X1 TAB Gen 2 */ + { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT, +HID_DEVICE (BUS_USB ,HID_GROUP_MULTITOUCH_WIN_8 , +USB_VENDOR_ID_LENOVO , + USB_DEVICE_ID_LENOVO_X1_TAB2) }, + /* Lenovo X1 TAB Gen 3 */ { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT, HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
drivers/hid/hid-nintendo.c +36 -2
@@ -308,6 +308,7 @@ enum joycon_ctlr_state {JOYCON_CTLR_STATE_INIT ,JOYCON_CTLR_STATE_READ ,JOYCON_CTLR_STATE_REMOVED , + JOYCON_CTLR_STATE_SUSPENDED, };/* Controller type received as part of device info */
@@ -2754,14 +2755,46 @@ static void nintendo_hid_remove(struct hid_device *hdev)static int nintendo_hid_resume (struct hid_device *hdev) { -int ret =joycon_init (hdev); +struct joycon_ctlr *ctlr =hid_get_drvdata (hdev); +int ret; + +hid_dbg (hdev,"resume\n" ); +if (!joycon_using_usb (ctlr)) { +hid_dbg (hdev,"no-op resume for bt ctlr\n" ); + ctlr->ctlr_state =JOYCON_CTLR_STATE_READ ; +return 0 ; + } + ret =joycon_init (hdev);if (ret) -hid_err (hdev,"Failed to restore controller after resume" ); +hid_err (hdev, +"Failed to restore controller after resume: %d\n" , + ret); +else + ctlr->ctlr_state =JOYCON_CTLR_STATE_READ ;return ret; } +static int nintendo_hid_suspend (struct hid_device *hdev,pm_message_t message) +{ +struct joycon_ctlr *ctlr =hid_get_drvdata (hdev); + +hid_dbg (hdev,"suspend: %d\n" , message.event); +/* +* Avoid any blocking loops in suspend/resume transitions. +* +* joycon_enforce_subcmd_rate() can result in repeated retries if for +* whatever reason the controller stops providing input reports. +* +* This has been observed with bluetooth controllers which lose +* connectivity prior to suspend (but not long enough to result in +* complete disconnection). +*/ + ctlr->ctlr_state =JOYCON_CTLR_STATE_SUSPENDED ; +return 0 ; +} +#endif static const struct hid_device_id nintendo_hid_devices[] = {
@@ -2800,6 +2833,7 @@ static struct hid_driver nintendo_hid_driver = {#ifdef CONFIG_PM .resume = nintendo_hid_resume, + .suspend = nintendo_hid_suspend,#endif };static int __init nintendo_init (void )
drivers/hid/hid-quirks.c +3 -0
@@ -747,6 +747,8 @@ static const struct hid_device_id hid_ignore_list[] = { { HID_USB_DEVICE(USB_VENDOR_ID_AVERMEDIA, USB_DEVICE_ID_AVER_FM_MR800) }, { HID_USB_DEVICE(USB_VENDOR_ID_AXENTIA, USB_DEVICE_ID_AXENTIA_FM_RADIO) }, { HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) }, + { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA) }, + { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA2) }, { HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) }, { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI470X) }, { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI4713) },
@@ -894,6 +896,7 @@ static const struct hid_device_id hid_ignore_list[] = {#endif { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) }, { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_HP_5MP_CAMERA_5473) }, + { HID_USB_DEVICE(USB_VENDOR_ID_SMARTLINKTECHNOLOGY, USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155) }, { } };
drivers/irqchip/Kconfig +1 -0
@@ -71,6 +71,7 @@ config ARM_VIC_NR config IRQ_MSI_LIB bool + select GENERIC_MSI_IRQ config ARMADA_370_XP_IRQ bool
drivers/md/md-bitmap.c +1 -2
@@ -2355,8 +2355,7 @@ static int bitmap_get_stats(void *data, struct md_bitmap_stats *stats)if (!bitmap)return -ENOENT ; -if (!bitmap->mddev->bitmap_info.external && - !bitmap->storage.sb_page) +if (!bitmap->storage.sb_page)return -EINVAL ; sb =kmap_local_page (bitmap->storage.sb_page); stats->sync_size =le64_to_cpu (sb->sync_size);
drivers/md/raid1.c +1 -0
@@ -3380,6 +3380,7 @@ static int raid1_reshape(struct mddev *mddev)/* ok, everything is stopped */ oldpool = conf->r1bio_pool; conf->r1bio_pool = newpool; +init_waitqueue_head (&conf->r1bio_pool.wait);for (d = d2 =0 ; d < conf->raid_disks; d++) {struct md_rdev *rdev = conf->mirrors[d].rdev;
drivers/md/raid10.c +8 -2
@@ -1181,8 +1181,11 @@ static void raid10_read_request(struct mddev *mddev, struct bio *bio, } } -if (!regular_request_wait (mddev, conf, bio, r10_bio->sectors)) +if (!regular_request_wait (mddev, conf, bio, r10_bio->sectors)) { +raid_end_bio_io (r10_bio);return ; + } + rdev =read_balance (conf, r10_bio, &max_sectors);if (!rdev) {if (err_rdev) {
@@ -1368,8 +1371,11 @@ static void raid10_write_request(struct mddev *mddev, struct bio *bio, } sectors = r10_bio->sectors; -if (!regular_request_wait (mddev, conf, bio, sectors)) +if (!regular_request_wait (mddev, conf, bio, sectors)) { +raid_end_bio_io (r10_bio);return ; + } + if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) && (mddev->reshape_backwards ? (bio->bi_iter.bi_sector < conf->reshape_safe &&
drivers/net/can/m_can/m_can.c +1 -1
@@ -665,7 +665,7 @@ static int m_can_handle_lost_msg(struct net_device *dev)struct can_frame *frame;u32 timestamp =0 ; -netdev_err (dev,"msg lost in rxf0\n" ); +netdev_dbg (dev,"msg lost in rxf0\n" ); stats->rx_errors++; stats->rx_over_errors++;
drivers/net/ethernet/broadcom/bnxt/bnxt.c +4 -6
@@ -11061,11 +11061,9 @@ static void bnxt_free_irq(struct bnxt *bp)static int bnxt_request_irq (struct bnxt *bp) { +struct cpu_rmap *rmap =NULL ;int i, j, rc =0 ;unsigned long flags =0 ; -#ifdef CONFIG_RFS_ACCEL -struct cpu_rmap *rmap; -#endif rc =bnxt_setup_int_mode (bp);if (rc) {
@@ -11080,15 +11078,15 @@ static int bnxt_request_irq(struct bnxt *bp)int map_idx =bnxt_cp_num_to_irq_num (bp, i);struct bnxt_irq *irq = &bp->irq_tbl[map_idx]; -#ifdef CONFIG_RFS_ACCEL -if (rmap && bp->bnapi[i]->rx_ring) { +if (IS_ENABLED (CONFIG_RFS_ACCEL ) && + rmap && bp->bnapi[i]->rx_ring) { rc =irq_cpu_rmap_add (rmap, irq->vector);if (rc)netdev_warn (bp->dev,"failed adding irq rmap for ring %d\n" , j); j++; } -#endif + rc =request_irq (irq->vector, irq->handler, flags, irq->name, bp->bnapi[i]);if (rc)
drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c +2 -0
@@ -487,7 +487,9 @@ static int bnxt_ets_validate(struct bnxt *bp, struct ieee_ets *ets, u8 *tc)if ((ets->tc_tx_bw[i] || ets->tc_tsa[i]) && i > bp->max_tc)return -EINVAL ; + } +for (i =0 ; i < max_tc; i++) {switch (ets->tc_tsa[i]) {case IEEE_8021QAZ_TSA_STRICT :break ;
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c +1 -1
@@ -115,7 +115,7 @@ static void __bnxt_xmit_xdp_redirect(struct bnxt *bp, tx_buf->action =XDP_REDIRECT ; tx_buf->xdpf = xdpf;dma_unmap_addr_set (tx_buf, mapping, mapping); -dma_unmap_len_set (tx_buf, len,0 ); +dma_unmap_len_set (tx_buf, len, len); }void bnxt_tx_int_xdp (struct bnxt *bp,struct bnxt_napi *bnapi,int budget)
drivers/net/ethernet/ibm/ibmvnic.h +6 -2
@@ -211,7 +211,6 @@ struct ibmvnic_statistics {u8 reserved[72 ]; } __packed__aligned(8) ; -#define NUM_TX_STATS 3struct ibmvnic_tx_queue_stats {u64 batched_packets;u64 direct_packets;
@@ -219,13 +218,18 @@ struct ibmvnic_tx_queue_stats {u64 dropped_packets; }; -#define NUM_RX_STATS 3 +#define NUM_TX_STATS \ + (sizeof(struct ibmvnic_tx_queue_stats) / sizeof(u64)) +struct ibmvnic_rx_queue_stats {u64 packets;u64 bytes;u64 interrupts; }; +#define NUM_RX_STATS \ + (sizeof(struct ibmvnic_rx_queue_stats) / sizeof(u64)) +struct ibmvnic_acl_buffer {__be32 len;__be32 version;
drivers/net/ethernet/mellanox/mlx5/core/en/fs.h +7 -2
@@ -18,7 +18,8 @@ enum {enum {MLX5E_TC_PRIO =0 , -MLX5E_NIC_PRIO +MLX5E_PROMISC_PRIO , +MLX5E_NIC_PRIO , };struct mlx5e_flow_table {
@@ -68,9 +69,13 @@ struct mlx5e_l2_table { MLX5_HASH_FIELD_SEL_DST_IP |\ MLX5_HASH_FIELD_SEL_IPSEC_SPI) -/* NIC prio FTS */ +/* NIC promisc FT level */ enum {MLX5E_PROMISC_FT_LEVEL , +}; + +/* NIC prio FTS */ +enum {MLX5E_VLAN_FT_LEVEL ,MLX5E_L2_FT_LEVEL ,MLX5E_TTC_FT_LEVEL ,
drivers/net/ethernet/mellanox/mlx5/core/en_dim.c +2 -2
@@ -113,7 +113,7 @@ int mlx5e_dim_rx_change(struct mlx5e_rq *rq, bool enable)__set_bit (MLX5E_RQ_STATE_DIM , &rq->state); }else {__clear_bit (MLX5E_RQ_STATE_DIM , &rq->state); - +synchronize_net ();mlx5e_dim_disable (rq->dim); rq->dim =NULL ; }
@@ -140,7 +140,7 @@ int mlx5e_dim_tx_change(struct mlx5e_txqsq *sq, bool enable)__set_bit (MLX5E_SQ_STATE_DIM , &sq->state); }else {__clear_bit (MLX5E_SQ_STATE_DIM , &sq->state); - +synchronize_net ();mlx5e_dim_disable (sq->dim); sq->dim =NULL ; }
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c +1 -1
@@ -776,7 +776,7 @@ static int mlx5e_create_promisc_table(struct mlx5e_flow_steering *fs) ft_attr.max_fte =MLX5E_PROMISC_TABLE_SIZE ; ft_attr.autogroup.max_num_groups =1 ; ft_attr.level =MLX5E_PROMISC_FT_LEVEL ; - ft_attr.prio =MLX5E_NIC_PRIO ; + ft_attr.prio =MLX5E_PROMISC_PRIO ; ft->t =mlx5_create_auto_grouped_flow_table (fs->ns, &ft_attr);if (IS_ERR (ft->t)) {
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +9 -4
@@ -113,13 +113,16 @@#define ETHTOOL_PRIO_NUM_LEVELS 1#define ETHTOOL_NUM_PRIOS 11#define ETHTOOL_MIN_LEVEL (KERNEL_MIN_LEVEL + ETHTOOL_NUM_PRIOS) -/* Promiscuous, Vlan, mac, ttc, inner ttc, {UDP/ANY/aRFS/accel/{esp, esp_err}}, IPsec policy, +/* Vlan, mac, ttc, inner ttc, {UDP/ANY/aRFS/accel/{esp, esp_err}}, IPsec policy, * {IPsec RoCE MPV,Alias table},IPsec RoCE policy */ -#define KERNEL_NIC_PRIO_NUM_LEVELS 11 +#define KERNEL_NIC_PRIO_NUM_LEVELS 10#define KERNEL_NIC_NUM_PRIOS 1 -/* One more level for tc */ -#define KERNEL_MIN_LEVEL (KERNEL_NIC_PRIO_NUM_LEVELS + 1) +/* One more level for tc, and one more for promisc */ +#define KERNEL_MIN_LEVEL (KERNEL_NIC_PRIO_NUM_LEVELS + 2) + +#define KERNEL_NIC_PROMISC_NUM_PRIOS 1 +#define KERNEL_NIC_PROMISC_NUM_LEVELS 1#define KERNEL_NIC_TC_NUM_PRIOS 1#define KERNEL_NIC_TC_NUM_LEVELS 3
@@ -187,6 +190,8 @@ static struct init_tree_node {ADD_NS (MLX5_FLOW_TABLE_MISS_ACTION_DEF ,ADD_MULTIPLE_PRIO (KERNEL_NIC_TC_NUM_PRIOS ,KERNEL_NIC_TC_NUM_LEVELS ), +ADD_MULTIPLE_PRIO (KERNEL_NIC_PROMISC_NUM_PRIOS , +KERNEL_NIC_PROMISC_NUM_LEVELS ),ADD_MULTIPLE_PRIO (KERNEL_NIC_NUM_PRIOS , KERNEL_NIC_PRIO_NUM_LEVELS))), ADD_PRIO(0, BY_PASS_MIN_LEVEL, 0, FS_CHAINING_CAPS,
drivers/net/ethernet/microsoft/mana/gdma_main.c +3 -0
@@ -28,6 +28,9 @@ static void mana_gd_init_pf_regs(struct pci_dev *pdev) gc->db_page_base = gc->bar0_va +mana_gd_r64 (gc,GDMA_PF_REG_DB_PAGE_OFF ); + gc->phys_db_page_base = gc->bar0_pa + +mana_gd_r64 (gc,GDMA_PF_REG_DB_PAGE_OFF ); + sriov_base_off =mana_gd_r64 (gc,GDMA_SRIOV_REG_CFG_BASE_OFF ); sriov_base_va = gc->bar0_va + sriov_base_off;
drivers/net/ethernet/renesas/rtsn.c +5 -0
@@ -1259,7 +1259,12 @@ static int rtsn_probe(struct platform_device *pdev) priv =netdev_priv (ndev); priv->pdev = pdev; priv->ndev = ndev; + priv->ptp_priv =rcar_gen4_ptp_alloc (pdev); +if (!priv->ptp_priv) { + ret = -ENOMEM ; + goto error_free; + }spin_lock_init (&priv->lock);platform_set_drvdata (pdev, priv);
drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c +11 -13
@@ -364,19 +364,17 @@ static int dwxgmac2_dma_interrupt(struct stmmac_priv *priv, }/* TX/RX NORMAL interrupts */ -if (likely (intr_status &XGMAC_NIS )) { -if (likely (intr_status &XGMAC_RI )) { -u64_stats_update_begin (&stats->syncp); -u64_stats_inc (&stats->rx_normal_irq_n[chan]); -u64_stats_update_end (&stats->syncp); - ret |= handle_rx; - } -if (likely (intr_status & (XGMAC_TI |XGMAC_TBU ))) { -u64_stats_update_begin (&stats->syncp); -u64_stats_inc (&stats->tx_normal_irq_n[chan]); -u64_stats_update_end (&stats->syncp); - ret |= handle_tx; - } +if (likely (intr_status &XGMAC_RI )) { +u64_stats_update_begin (&stats->syncp); +u64_stats_inc (&stats->rx_normal_irq_n[chan]); +u64_stats_update_end (&stats->syncp); + ret |= handle_rx; + } +if (likely (intr_status & (XGMAC_TI |XGMAC_TBU ))) { +u64_stats_update_begin (&stats->syncp); +u64_stats_inc (&stats->tx_normal_irq_n[chan]); +u64_stats_update_end (&stats->syncp); + ret |= handle_tx; }/* Clear interrupts */
drivers/net/ethernet/ti/am65-cpsw-nuss.c +1 -3
@@ -612,8 +612,6 @@ static struct sk_buff *am65_cpsw_build_skb(void *page_addr, {struct sk_buff *skb; - len +=AM65_CPSW_HEADROOM ; - skb =build_skb (page_addr, len);if (unlikely (!skb))return NULL ;
@@ -1217,7 +1215,7 @@ static int am65_cpsw_nuss_rx_packets(struct am65_cpsw_rx_flow *flow, } skb =am65_cpsw_build_skb (page_addr, ndev, -AM65_CPSW_MAX_PACKET_SIZE , headroom); +PAGE_SIZE , headroom);if (unlikely (!skb)) { new_page = page; goto requeue;
drivers/net/ethernet/wangxun/libwx/wx_lib.c +8 -8
@@ -1624,7 +1624,7 @@ static void wx_set_num_queues(struct wx *wx)*/ static int wx_acquire_msix_vectors (struct wx *wx) { -struct irq_affinity affd = { .pre_vectors =1 }; +struct irq_affinity affd = { .post_vectors =1 };int nvecs, i;/* We start by asking for one vector per queue pair */
@@ -1661,16 +1661,17 @@ static int wx_acquire_msix_vectors(struct wx *wx)return nvecs; } - wx->msix_entry->entry =0 ; - wx->msix_entry->vector =pci_irq_vector (wx->pdev,0 ); nvecs -=1 ;for (i =0 ; i < nvecs; i++) { wx->msix_q_entries[i].entry = i; - wx->msix_q_entries[i].vector =pci_irq_vector (wx->pdev, i +1 ); + wx->msix_q_entries[i].vector =pci_irq_vector (wx->pdev, i); } wx->num_q_vectors = nvecs; + wx->msix_entry->entry = nvecs; + wx->msix_entry->vector =pci_irq_vector (wx->pdev, nvecs); +return 0 ; }
@@ -2120,7 +2121,6 @@ static void wx_set_ivar(struct wx *wx, s8 direction,wr32 (wx,WX_PX_MISC_IVAR , ivar); }else {/* tx or rx causes */ - msix_vector +=1 ;/* offset for queue vectors */ msix_vector |=WX_PX_IVAR_ALLOC_VAL ; index = ((16 * (queue &1 )) + (8 * direction)); ivar =rd32 (wx,WX_PX_IVAR (queue >>1 ));
@@ -2151,7 +2151,7 @@ void wx_write_eitr(struct wx_q_vector *q_vector) itr_reg |=WX_PX_ITR_CNT_WDIS ; -wr32 (wx,WX_PX_ITR (v_idx +1 ), itr_reg); +wr32 (wx,WX_PX_ITR (v_idx), itr_reg); }/**
@@ -2197,9 +2197,9 @@ void wx_configure_vectors(struct wx *wx)wx_write_eitr (q_vector); } -wx_set_ivar (wx,-1 ,0 ,0 ); +wx_set_ivar (wx,-1 ,0 , v_idx);if (pdev->msix_enabled) -wr32 (wx,WX_PX_ITR (0 ),1950 ); +wr32 (wx,WX_PX_ITR (v_idx),1950 ); }EXPORT_SYMBOL (wx_configure_vectors);
drivers/net/ethernet/wangxun/libwx/wx_type.h +1 -1
@@ -1136,7 +1136,7 @@ struct wx { };#define WX_INTR_ALL (~0ULL) -#define WX_INTR_Q (i) BIT((i) + 1) +#define WX_INTR_Q (i) BIT((i))/* register operations */ #define wr32 (a, reg, value) writel((value), ((a)->hw_addr + (reg)))
drivers/net/ethernet/wangxun/ngbe/ngbe_main.c +1 -1
@@ -154,7 +154,7 @@ static void ngbe_irq_enable(struct wx *wx, bool queues)if (queues)wx_intr_enable (wx,NGBE_INTR_ALL );else -wx_intr_enable (wx,NGBE_INTR_MISC ); +wx_intr_enable (wx,NGBE_INTR_MISC (wx)); }/**
drivers/net/ethernet/wangxun/ngbe/ngbe_type.h +1 -1
@@ -80,7 +80,7 @@ NGBE_PX_MISC_IEN_GPIO)#define NGBE_INTR_ALL 0x1FF -#define NGBE_INTR_MISC BIT(0) +#define NGBE_INTR_MISC (A ) BIT((A)->num_q_vectors)#define NGBE_PHY_CONFIG (reg_offset) (0x14000 + ((reg_offset) * 4))#define NGBE_CFG_LAN_SPEED 0x14440
drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c +2 -2
@@ -21,7 +21,7 @@ void txgbe_irq_enable(struct wx *wx, bool queues)wr32 (wx,WX_PX_MISC_IEN ,TXGBE_PX_MISC_IEN_MASK );/* unmask interrupt */ -wx_intr_enable (wx,TXGBE_INTR_MISC ); +wx_intr_enable (wx,TXGBE_INTR_MISC (wx));if (queues)wx_intr_enable (wx,TXGBE_INTR_QALL (wx)); }
@@ -147,7 +147,7 @@ static irqreturn_t txgbe_misc_irq_thread_fn(int irq, void *data) nhandled++; } -wx_intr_enable (wx,TXGBE_INTR_MISC ); +wx_intr_enable (wx,TXGBE_INTR_MISC (wx));return (nhandled >0 ?IRQ_HANDLED :IRQ_NONE ); }
drivers/net/ethernet/wangxun/txgbe/txgbe_type.h +2 -2
@@ -264,8 +264,8 @@ struct txgbe_fdir_filter {#define TXGBE_DEFAULT_RX_WORK 128#endif -#define TXGBE_INTR_MISC BIT(0) -#define TXGBE_INTR_QALL (A ) GENMASK((A)->num_q_vectors, 1) +#define TXGBE_INTR_MISC (A ) BIT((A)->num_q_vectors) +#define TXGBE_INTR_QALL (A ) (TXGBE_INTR_MISC(A) - 1)#define TXGBE_MAX_EITR GENMASK(11, 3)
drivers/net/ethernet/xilinx/ll_temac_main.c +1 -1
@@ -1309,7 +1309,7 @@ ll_temac_ethtools_set_ringparam(struct net_device *ndev,if (ering->rx_pending >RX_BD_NUM_MAX || ering->rx_mini_pending || ering->rx_jumbo_pending || - ering->rx_pending >TX_BD_NUM_MAX ) + ering->tx_pending >TX_BD_NUM_MAX )return -EINVAL ;if (netif_running (ndev))
drivers/net/phy/microchip.c +2 -1
@@ -332,7 +332,7 @@ static void lan88xx_link_change_notify(struct phy_device *phydev)* As workaround, set to 10 before setting to 100 * at forced 100 F/H mode. */ -if (!phydev->autoneg && phydev->speed ==100 ) { +if (phydev->state ==PHY_NOLINK && !phydev->autoneg && phydev->speed ==100 ) {/* disable phy interrupt */ temp =phy_read (phydev,LAN88XX_INT_MASK ); temp &= ~LAN88XX_INT_MASK_MDINTPIN_EN_ ;
@@ -486,6 +486,7 @@ static struct phy_driver microchip_phy_driver[] = { .config_init = lan88xx_config_init, .config_aneg = lan88xx_config_aneg, .link_change_notify = lan88xx_link_change_notify, + .soft_reset = genphy_soft_reset,/* Interrupt handling is broken, do not define related * functions to force polling.
drivers/net/phy/qcom/at803x.c +0 -27
@@ -26,9 +26,6 @@#define AT803X_LED_CONTROL 0x18 -#define AT803X_PHY_MMD3_WOL_CTRL 0x8012 -#define AT803X_WOL_EN BIT(5) -#define AT803X_REG_CHIP_CONFIG 0x1f#define AT803X_BT_BX_REG_SEL 0x8000
@@ -866,30 +863,6 @@ static int at8031_config_init(struct phy_device *phydev)return at803x_config_init (phydev); } -static int at8031_set_wol (struct phy_device *phydev, -struct ethtool_wolinfo *wol) -{ -int ret; - -/* First setup MAC address and enable WOL interrupt */ - ret =at803x_set_wol (phydev, wol); -if (ret) -return ret; - -if (wol->wolopts &WAKE_MAGIC ) -/* Enable WOL function for 1588 */ - ret =phy_modify_mmd (phydev,MDIO_MMD_PCS , -AT803X_PHY_MMD3_WOL_CTRL , -0 ,AT803X_WOL_EN ); -else -/* Disable WoL function for 1588 */ - ret =phy_modify_mmd (phydev,MDIO_MMD_PCS , -AT803X_PHY_MMD3_WOL_CTRL , -AT803X_WOL_EN ,0 ); - -return ret; -} -static int at8031_config_intr (struct phy_device *phydev) {struct at803x_priv *priv = phydev->priv;
drivers/net/phy/qcom/qca808x.c +1 -1
@@ -633,7 +633,7 @@ static struct phy_driver qca808x_driver[] = { .handle_interrupt = at803x_handle_interrupt, .get_tunable = at803x_get_tunable, .set_tunable = at803x_set_tunable, - .set_wol = at803x_set_wol, + .set_wol = at8031_set_wol, .get_wol = at803x_get_wol, .get_features = qca808x_get_features, .config_aneg = qca808x_config_aneg,
drivers/net/phy/qcom/qcom-phy-lib.c +25 -0
@@ -115,6 +115,31 @@ int at803x_set_wol(struct phy_device *phydev, }EXPORT_SYMBOL_GPL (at803x_set_wol); +int at8031_set_wol (struct phy_device *phydev, +struct ethtool_wolinfo *wol) +{ +int ret; + +/* First setup MAC address and enable WOL interrupt */ + ret =at803x_set_wol (phydev, wol); +if (ret) +return ret; + +if (wol->wolopts &WAKE_MAGIC ) +/* Enable WOL function for 1588 */ + ret =phy_modify_mmd (phydev,MDIO_MMD_PCS , +AT803X_PHY_MMD3_WOL_CTRL , +0 ,AT803X_WOL_EN ); +else +/* Disable WoL function for 1588 */ + ret =phy_modify_mmd (phydev,MDIO_MMD_PCS , +AT803X_PHY_MMD3_WOL_CTRL , +AT803X_WOL_EN ,0 ); + +return ret; +} +EXPORT_SYMBOL_GPL (at8031_set_wol); +void at803x_get_wol (struct phy_device *phydev,struct ethtool_wolinfo *wol) {
drivers/net/phy/qcom/qcom.h +5 -0
@@ -172,6 +172,9 @@#define AT803X_LOC_MAC_ADDR_16_31_OFFSET 0x804B#define AT803X_LOC_MAC_ADDR_32_47_OFFSET 0x804A +#define AT803X_PHY_MMD3_WOL_CTRL 0x8012 +#define AT803X_WOL_EN BIT(5) +#define AT803X_DEBUG_ADDR 0x1D#define AT803X_DEBUG_DATA 0x1E
@@ -215,6 +218,8 @@ int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,int at803x_debug_reg_write (struct phy_device *phydev,u16 reg,u16 data);int at803x_set_wol (struct phy_device *phydev,struct ethtool_wolinfo *wol); +int at8031_set_wol (struct phy_device *phydev, +struct ethtool_wolinfo *wol);void at803x_get_wol (struct phy_device *phydev,struct ethtool_wolinfo *wol);int at803x_ack_interrupt (struct phy_device *phydev);
drivers/net/phy/smsc.c +52 -5
89 lines not on this page · raw message
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1426,6 +1426,7 @@ static const struct usb_device_id products[] = { {QMI_QUIRK_SET_DTR(0x22de, 0x9051, 2)}, /* Hucom Wireless HM-211S/K */ {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */ {QMI_QUIRK_SET_DTR(0x1e0e, 0x9001, 5)}, /* SIMCom 7100E, 7230E, 7600E ++ */ + {QMI_QUIRK_SET_DTR(0x1e0e, 0x9071, 3)}, /* SIMCom 8230C ++ */ {QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */ {QMI_QUIRK_SET_DTR(0x2c7c, 0x0191, 4)}, /* Quectel EG91 */ {QMI_QUIRK_SET_DTR(0x2c7c, 0x0195, 4)}, /* Quectel EG95 */
drivers/net/wireless/marvell/mwifiex/util.c +3 -1
@@ -477,7 +477,9 @@ mwifiex_process_mgmt_packet(struct mwifiex_private *priv,"auth: receive authentication from %pM\n" , ieee_hdr->addr3); }else { -if (!priv->wdev.connected) +if (!priv->wdev.connected || + !ether_addr_equal (ieee_hdr->addr3, + priv->curr_bss_params.bss_descriptor.mac_address))return 0 ;if (ieee80211_is_deauth (ieee_hdr->frame_control)) {
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +2 -2
@@ -1696,8 +1696,8 @@ int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,if (!sreq->ssids[i].ssid_len)continue ; - req->ssids[i].ssid_len =cpu_to_le32 (sreq->ssids[i].ssid_len); -memcpy (req->ssids[i].ssid, sreq->ssids[i].ssid, + req->ssids[n_ssids].ssid_len =cpu_to_le32 (sreq->ssids[i].ssid_len); +memcpy (req->ssids[n_ssids].ssid, sreq->ssids[i].ssid, sreq->ssids[i].ssid_len); n_ssids++; }
drivers/net/wireless/mediatek/mt76/mt7921/main.c +3 -0
@@ -1173,6 +1173,9 @@ static void mt7921_sta_set_decap_offload(struct ieee80211_hw *hw,struct mt792x_sta *msta = (struct mt792x_sta *)sta->drv_priv;struct mt792x_dev *dev =mt792x_hw_dev (hw); +if (!msta->deflink.wcid.sta) +return ; +mt792x_mutex_acquire (dev);if (enabled)
drivers/net/wireless/mediatek/mt76/mt7925/init.c +2 -0
@@ -52,6 +52,8 @@ static int mt7925_thermal_init(struct mt792x_phy *phy) name =devm_kasprintf (&wiphy->dev,GFP_KERNEL ,"mt7925_%s" ,wiphy_name (wiphy)); +if (!name) +return -ENOMEM ; hwmon =devm_hwmon_device_register_with_groups (&wiphy->dev, name, phy, mt7925_hwmon_groups);
drivers/net/wireless/mediatek/mt76/mt7925/main.c +6 -0
@@ -1565,6 +1565,9 @@ static void mt7925_sta_set_decap_offload(struct ieee80211_hw *hw,unsigned long valid = mvif->valid_links;u8 i; +if (!msta->vif) +return ; +mt792x_mutex_acquire (dev); valid =ieee80211_vif_is_mld (vif) ? mvif->valid_links :BIT (0 );
@@ -1579,6 +1582,9 @@ static void mt7925_sta_set_decap_offload(struct ieee80211_hw *hw,else clear_bit (MT_WCID_FLAG_HDR_TRANS , &mlink->wcid.flags); +if (!mlink->wcid.sta) +continue ; +mt7925_mcu_wtbl_update_hdr_trans (dev, vif, sta, i); }
drivers/net/wireless/mediatek/mt76/mt7925/mcu.c +2 -2
@@ -2823,8 +2823,8 @@ int mt7925_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,if (!sreq->ssids[i].ssid_len)continue ; - ssid->ssids[i].ssid_len =cpu_to_le32 (sreq->ssids[i].ssid_len); -memcpy (ssid->ssids[i].ssid, sreq->ssids[i].ssid, + ssid->ssids[n_ssids].ssid_len =cpu_to_le32 (sreq->ssids[i].ssid_len); +memcpy (ssid->ssids[n_ssids].ssid, sreq->ssids[i].ssid, sreq->ssids[i].ssid_len); n_ssids++; }
drivers/net/wireless/mediatek/mt76/mt7925/regs.h +1 -1
@@ -58,7 +58,7 @@#define MT_INT_TX_DONE_MCU (MT_INT_TX_DONE_MCU_WM | \ MT_INT_TX_DONE_FWDL) -#define MT_INT_TX_DONE_ALL (MT_INT_TX_DONE_MCU_WM | \ +#define MT_INT_TX_DONE_ALL (MT_INT_TX_DONE_MCU | \ MT_INT_TX_DONE_BAND0 | \ GENMASK(18, 4))
drivers/net/wireless/ralink/rt2x00/rt2x00soc.c +1 -3
@@ -108,7 +108,7 @@ int rt2x00soc_probe(struct platform_device *pdev, const struct rt2x00_ops *ops) }EXPORT_SYMBOL_GPL (rt2x00soc_probe); -int rt2x00soc_remove (struct platform_device *pdev) +void rt2x00soc_remove (struct platform_device *pdev) {struct ieee80211_hw *hw =platform_get_drvdata (pdev);struct rt2x00_dev *rt2x00dev = hw->priv;
@@ -119,8 +119,6 @@ int rt2x00soc_remove(struct platform_device *pdev)rt2x00lib_remove_dev (rt2x00dev);rt2x00soc_free_reg (rt2x00dev);ieee80211_free_hw (hw); - -return 0 ; }EXPORT_SYMBOL_GPL (rt2x00soc_remove);
drivers/net/wireless/ralink/rt2x00/rt2x00soc.h +1 -1
@@ -17,7 +17,7 @@* SoC driver handlers. */ int rt2x00soc_probe (struct platform_device *pdev,const struct rt2x00_ops *ops); -int rt2x00soc_remove (struct platform_device *pdev); +void rt2x00soc_remove (struct platform_device *pdev);#ifdef CONFIG_PM int rt2x00soc_suspend (struct platform_device *pdev,pm_message_t state);int rt2x00soc_resume (struct platform_device *pdev);
drivers/net/wireless/zydas/zd1211rw/zd_mac.c +5 -1
@@ -583,7 +583,11 @@ void zd_mac_tx_to_dev(struct sk_buff *skb, int error)skb_queue_tail (q, skb);while (skb_queue_len (q) >ZD_MAC_MAX_ACK_WAITERS ) { -zd_mac_tx_status (hw,skb_dequeue (q), + skb =skb_dequeue (q); +if (!skb) +break ; + +zd_mac_tx_status (hw, skb, mac->ack_pending ? mac->ack_signal :0 ,NULL ); mac->ack_pending =0 ;
drivers/pci/pci-acpi.c +10 -13
@@ -1676,19 +1676,24 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)return NULL ; root_ops =kzalloc (sizeof (*root_ops),GFP_KERNEL ); -if (!root_ops) - goto free_ri; +if (!root_ops) { +kfree (ri); +return NULL ; + } ri->cfg =pci_acpi_setup_ecam_mapping (root); -if (!ri->cfg) - goto free_root_ops; +if (!ri->cfg) { +kfree (ri); +kfree (root_ops); +return NULL ; + } root_ops->release_info = pci_acpi_generic_release_info; root_ops->prepare_resources = pci_acpi_root_prepare_resources; root_ops->pci_ops = (struct pci_ops *)&ri->cfg->ops->pci_ops; bus =acpi_pci_root_create (root, root_ops, &ri->common, ri->cfg);if (!bus) - goto free_cfg; +return NULL ;/* If we must preserve the resource configuration, claim now */ host =pci_find_host_bridge (bus);
@@ -1705,14 +1710,6 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)pcie_bus_configure_settings (child);return bus; - -free_cfg: -pci_ecam_free (ri->cfg); -free_root_ops: -kfree (root_ops); -free_ri: -kfree (ri); -return NULL ; }void pcibios_add_bus (struct pci_bus *bus)
drivers/pinctrl/pinctrl-amd.c +11 -0
@@ -933,6 +933,17 @@ static int amd_gpio_suspend_hibernate_common(struct device *dev, bool is_suspend pin, is_suspend ? "suspend" : "hibernate"); } +/* +* debounce enabled over suspend has shown issues with a GPIO +* being unable to wake the system, as we're only interested in +* the actual wakeup event, clear it. +*/ +if (gpio_dev->saved_regs[i] & (DB_CNTRl_MASK <<DB_CNTRL_OFF )) { +amd_gpio_set_debounce (gpio_dev, pin,0 ); +pm_pr_dbg ("Clearing debounce for GPIO #%d during %s.\n" , + pin, is_suspend ?"suspend" :"hibernate" ); + } +raw_spin_unlock_irqrestore (&gpio_dev->lock, flags); }
drivers/pinctrl/qcom/pinctrl-msm.c +20 -0
@@ -1035,6 +1035,25 @@ static bool msm_gpio_needs_dual_edge_parent_workaround(struct irq_data *d,test_bit (d->hwirq, pctrl->skip_wake_irqs); } +static void msm_gpio_irq_init_valid_mask (struct gpio_chip *gc, +unsigned long *valid_mask, +unsigned int ngpios) +{ +struct msm_pinctrl *pctrl =gpiochip_get_data (gc); +const struct msm_pingroup *g; +int i; + +bitmap_fill (valid_mask, ngpios); + +for (i =0 ; i < ngpios; i++) { + g = &pctrl->soc->groups[i]; + +if (g->intr_detection_width !=1 && + g->intr_detection_width !=2 ) +clear_bit (i, valid_mask); + } +} +static int msm_gpio_irq_set_type (struct irq_data *d,unsigned int type) {struct gpio_chip *gc =irq_data_get_irq_chip_data (d);
@@ -1438,6 +1457,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl) girq->default_type =IRQ_TYPE_NONE ; girq->handler = handle_bad_irq; girq->parents[0 ] = pctrl->irq; + girq->init_valid_mask = msm_gpio_irq_init_valid_mask; ret =gpiochip_add_data (&pctrl->chip, pctrl);if (ret) {
drivers/pwm/core.c +1 -1
@@ -148,7 +148,7 @@ static bool pwm_state_valid(const struct pwm_state *state)* and supposed to be ignored. So also ignore any strange values and * consider the state ok. */ -if (state->enabled) +if (!state->enabled)return true;if (!state->period)
drivers/pwm/pwm-mediatek.c +8 -5
@@ -130,8 +130,10 @@ static int pwm_mediatek_config(struct pwm_chip *chip, struct pwm_device *pwm,return ret; clk_rate =clk_get_rate (pc->clk_pwms[pwm->hwpwm]); -if (!clk_rate) -return -EINVAL ; +if (!clk_rate) { + ret = -EINVAL ; + goto out; + }/* Make sure we use the bus clock and not the 26MHz clock */ if (pc->soc->has_ck_26m_sel)
@@ -150,9 +152,9 @@ static int pwm_mediatek_config(struct pwm_chip *chip, struct pwm_device *pwm, }if (clkdiv >PWM_CLK_DIV_MAX ) { -pwm_mediatek_clk_disable (chip, pwm);dev_err (pwmchip_parent (chip),"period of %d ns not supported\n" , period_ns); -return -EINVAL ; + ret = -EINVAL ; + goto out; }if (pc->soc->pwm45_fixup && pwm->hwpwm >2 ) {
@@ -169,9 +171,10 @@ static int pwm_mediatek_config(struct pwm_chip *chip, struct pwm_device *pwm,pwm_mediatek_writel (pc, pwm->hwpwm, reg_width, cnt_period);pwm_mediatek_writel (pc, pwm->hwpwm, reg_thres, cnt_duty); +out:pwm_mediatek_clk_disable (chip, pwm); -return 0 ; +return ret; }static int pwm_mediatek_enable (struct pwm_chip *chip,struct pwm_device *pwm)
drivers/tty/vt/vt.c +1 -0
@@ -4566,6 +4566,7 @@ void do_unblank_screen(int leaving_gfx)set_palette (vc);set_cursor (vc);vt_event_post (VT_EVENT_UNBLANK , vc->vc_num, vc->vc_num); +notify_update (vc); }EXPORT_SYMBOL (do_unblank_screen);
drivers/usb/gadget/function/u_serial.c +4 -8
@@ -294,8 +294,8 @@ __acquires(&port->port_lock)break ; } -if (do_tty_wake && port->port.tty) -tty_wakeup (port->port.tty); +if (do_tty_wake) +tty_port_tty_wakeup (&port->port);return status; }
@@ -543,20 +543,16 @@ static int gs_alloc_requests(struct usb_ep *ep, struct list_head *head,static int gs_start_io (struct gs_port *port) {struct list_head *head = &port->read_pool; -struct usb_ep *ep; +struct usb_ep *ep = port->port_usb->out;int status;unsigned started; -if (!port->port_usb || !port->port.tty) -return -EIO ; -/* Allocate RX and TX I/O buffers. We can't easily do this much * earlier (with GFP_KERNEL) because the requests are coupled to * endpoints, as are the packet sizes we'll be using. Different * configurations may use different endpoints with a given port; * and high speed vs full speed changes packet sizes too. */ - ep = port->port_usb->out; status =gs_alloc_requests (ep, head, gs_read_complete, &port->read_allocated);if (status)
@@ -577,7 +573,7 @@ static int gs_start_io(struct gs_port *port)gs_start_tx (port);/* Unblock any pending writes into our circular buffer, in case * we didn't in gs_start_tx() */ -tty_wakeup (port->port.tty); +tty_port_tty_wakeup (&port->port); }else {/* Free reqs only if we are still connected */ if (port->port_usb) {
fs/btrfs/free-space-tree.c +12 -4
@@ -1104,11 +1104,21 @@ static int populate_free_space_tree(struct btrfs_trans_handle *trans, ret =btrfs_search_slot_for_read (extent_root, &key, path,1 ,0 );if (ret <0 ) goto out_locked; -ASSERT (ret ==0 ); +/* +* If ret is 1 (no key found), it means this is an empty block group, +* without any extents allocated from it and there's no block group +* item (key BTRFS_BLOCK_GROUP_ITEM_KEY) located in the extent tree +* because we are using the block group tree feature, so block group +* items are stored in the block group tree. It also means there are no +* extents allocated for block groups with a start offset beyond this +* block group's end offset (this is the last, highest, block group). +*/ +if (!btrfs_fs_compat_ro (trans->fs_info,BLOCK_GROUP_TREE )) +ASSERT (ret ==0 ); start = block_group->start; end = block_group->start + block_group->length; -while (1 ) { +while (ret ==0 ) {btrfs_item_key_to_cpu (path->nodes[0 ], &key, path->slots[0 ]); if (key.type == BTRFS_EXTENT_ITEM_KEY ||
@@ -1138,8 +1148,6 @@ static int populate_free_space_tree(struct btrfs_trans_handle *trans, ret =btrfs_next_item (extent_root, path);if (ret <0 ) goto out_locked; -if (ret) -break ; }if (start < end) { ret = __add_to_free_space_tree(trans, block_group, path2,
fs/erofs/data.c +16 -5
@@ -240,9 +240,11 @@ int erofs_map_dev(struct super_block *sb, struct erofs_map_dev *map)/* * bit 30: I/O error occurred on this folio +* bit 29: CPU has dirty data in D-cache (needs aliasing handling); * bit 0 - 29: remaining parts to complete this folio */ -#define EROFS_ONLINEFOLIO_EIO (1 << 30) +#define EROFS_ONLINEFOLIO_EIO 30 +#define EROFS_ONLINEFOLIO_DIRTY 29void erofs_onlinefolio_init (struct folio *folio) {
@@ -259,19 +261,23 @@ void erofs_onlinefolio_split(struct folio *folio)atomic_inc ((atomic_t *)&folio->private); } -void erofs_onlinefolio_end (struct folio *folio,int err) +void erofs_onlinefolio_end (struct folio *folio,int err,bool dirty) {int orig, v;do { orig =atomic_read ((atomic_t *)&folio->private); - v = (orig -1 ) | (err ?EROFS_ONLINEFOLIO_EIO :0 ); +DBG_BUGON (orig <=0 ); + v = dirty <<EROFS_ONLINEFOLIO_DIRTY ; + v |= (orig -1 ) | (!!err <<EROFS_ONLINEFOLIO_EIO ); }while (atomic_cmpxchg ((atomic_t *)&folio->private, orig, v) != orig); -if (v & ~EROFS_ONLINEFOLIO_EIO ) +if (v & (BIT (EROFS_ONLINEFOLIO_DIRTY ) -1 ))return ; folio->private =0 ; -folio_end_read (folio, !(v &EROFS_ONLINEFOLIO_EIO )); +if (v &BIT (EROFS_ONLINEFOLIO_DIRTY )) +flush_dcache_folio (folio); +folio_end_read (folio, !(v &BIT (EROFS_ONLINEFOLIO_EIO ))); } static int erofs_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
@@ -378,11 +384,16 @@ int erofs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,*/ static int erofs_read_folio (struct file *file,struct folio *folio) { +trace_erofs_read_folio (folio, true); +return iomap_read_folio (folio, &erofs_iomap_ops); }static void erofs_readahead (struct readahead_control *rac) { +trace_erofs_readahead (rac->mapping->host,readahead_index (rac), +readahead_count (rac), true); +return iomap_readahead (rac, &erofs_iomap_ops); }
fs/erofs/decompressor.c +4 -8
@@ -331,13 +331,11 @@ static int z_erofs_transform_plain(struct z_erofs_decompress_req *rq, cur =min (cur, rq->outputsize);if (cur && rq->out[0 ]) { kin =kmap_local_page (rq->in[nrpages_in -1 ]); -if (rq->out[0 ] == rq->in[nrpages_in -1 ]) { +if (rq->out[0 ] == rq->in[nrpages_in -1 ])memmove (kin + rq->pageofs_out, kin + pi, cur); -flush_dcache_page (rq->out[0 ]); - }else { +else memcpy_to_page (rq->out[0 ], rq->pageofs_out, kin + pi, cur); - }kunmap_local (kin); } rq->outputsize -= cur;
@@ -355,14 +353,12 @@ static int z_erofs_transform_plain(struct z_erofs_decompress_req *rq, po = (rq->pageofs_out + cur + pi) & ~PAGE_MASK ;DBG_BUGON (no >= nrpages_out); cnt =min (insz - pi,PAGE_SIZE - po); -if (rq->out[no] == rq->in[ni]) { +if (rq->out[no] == rq->in[ni])memmove (kin + po, kin + rq->pageofs_in + pi, cnt); -flush_dcache_page (rq->out[no]); - }else if (rq->out[no]) { +else if (rq->out[no])memcpy_to_page (rq->out[no], po, kin + rq->pageofs_in + pi, cnt); - } pi += cnt; }while (pi < insz);kunmap_local (kin);
fs/erofs/fileio.c +3 -3
@@ -38,7 +38,7 @@ static void erofs_fileio_ki_complete(struct kiocb *iocb, long ret) }else {bio_for_each_folio_all (fi, &rq->bio) {DBG_BUGON (folio_test_uptodate (fi.folio)); -erofs_onlinefolio_end (fi.folio, ret); +erofs_onlinefolio_end (fi.folio, ret, false); } }bio_uninit (&rq->bio);
@@ -158,7 +158,7 @@ static int erofs_fileio_scan_folio(struct erofs_fileio *io, struct folio *folio) } cur += len; } -erofs_onlinefolio_end (folio, err); +erofs_onlinefolio_end (folio, err, false);return err; }
@@ -180,7 +180,7 @@ static void erofs_fileio_readahead(struct readahead_control *rac)struct folio *folio;int err; -trace_erofs_readpages (inode,readahead_index (rac), +trace_erofs_readahead (inode,readahead_index (rac),readahead_count (rac), true);while ((folio =readahead_folio (rac))) { err =erofs_fileio_scan_folio (&io, folio);
fs/erofs/internal.h +1 -1
@@ -405,7 +405,7 @@ int erofs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,int erofs_map_blocks (struct inode *inode,struct erofs_map_blocks *map);void erofs_onlinefolio_init (struct folio *folio);void erofs_onlinefolio_split (struct folio *folio); -void erofs_onlinefolio_end (struct folio *folio,int err); +void erofs_onlinefolio_end (struct folio *folio,int err,bool dirty);struct inode *erofs_iget (struct super_block *sb,erofs_nid_t nid); int erofs_getattr(struct mnt_idmap *idmap, const struct path *path, struct kstat *stat, u32 request_mask,
fs/erofs/zdata.c +111 -140
589 lines not on this page · raw message
include/linux/ieee80211.h +33 -12
45 lines not on this page · raw message
kernel/rseq.c +48 -12
60 lines not on this page · raw message
net/atm/clip.c +48 -16
64 lines not on this page · raw message
net/netlink/af_netlink.c +50 -32
82 lines not on this page · raw message
net/vmw_vsock/af_vsock.c +46 -11
57 lines not on this page · raw message
net/wireless/util.c +50 -2
52 lines not on this page · raw message
scripts/gdb/linux/mapletree.py new file +252 -0
252 lines not on this page · raw message
sound/soc/intel/common/soc-acpi-intel-arl-match.c +59 -7
66 lines not on this page · raw message
sound/soc/intel/common/sof-function-topology-lib.c new file +136 -0
136 lines not on this page · raw message
sound/soc/intel/common/sof-function-topology-lib.h new file +15 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/test_lru_map.c +53 -52
105 lines not on this page · raw message
tools/testing/selftests/net/forwarding/lib.sh +0 -113
113 lines not on this page · raw message
tools/testing/selftests/net/lib.sh +115 -0
115 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.