Linux 6.6.105
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.105 kernel.
All users of the 6.6 kernel series must upgrade.
The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.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/userspace-api/netlink/specs.rst | 18 Makefile | 2 arch/arm64/boot/dts/freescale/imx8mp-data-modul-edm-sbc.dts | 1 arch/arm64/boot/dts/freescale/imx8mp-dhcom-som.dtsi | 1 arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts | 1 arch/arm64/include/asm/module.h | 1 arch/arm64/include/asm/module.lds.h | 1 arch/arm64/kernel/ftrace.c | 13 arch/arm64/kernel/module-plts.c | 12 arch/arm64/kernel/module.c | 11 arch/loongarch/kernel/signal.c | 10 arch/riscv/include/asm/asm.h | 2 arch/x86/include/asm/pgtable_64_types.h | 3 arch/x86/mm/init_64.c | 18 drivers/acpi/arm64/iort.c | 4 drivers/bluetooth/hci_vhci.c | 57 - drivers/cpufreq/intel_pstate.c | 122 -- drivers/dma/mediatek/mtk-cqdma.c | 10 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 146 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 6 drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 5 drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 5 drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 5 drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 5 drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c | 8 drivers/gpu/drm/bridge/ti-sn65dsi86.c | 11 drivers/gpu/drm/mediatek/mtk_drm_drv.c | 42 drivers/gpu/drm/mediatek/mtk_drm_drv.h | 8 drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c | 2 drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga100.c | 23 drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga102.c | 1 drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h | 2 drivers/hwmon/mlxreg-fan.c | 5 drivers/iio/chemical/pms7003.c | 5 drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c | 2 drivers/iio/light/opt3001.c | 5 drivers/iio/pressure/mprls0025pa.c | 10 drivers/isdn/mISDN/dsp_hwec.c | 6 drivers/net/ethernet/cadence/macb_main.c | 28 drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 20 drivers/net/ethernet/intel/e1000e/ethtool.c | 10 drivers/net/ethernet/intel/i40e/i40e_client.c | 4 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 10 drivers/net/ethernet/xircom/xirc2ps_cs.c | 2 drivers/net/macsec.c | 8 drivers/net/pcs/pcs-rzn1-miic.c | 2 drivers/net/phy/mscc/mscc_ptp.c | 18 drivers/net/ppp/ppp_generic.c | 6 drivers/net/usb/cdc_ncm.c | 7 drivers/net/vmxnet3/vmxnet3_drv.c | 5 drivers/net/wireless/ath/ath11k/core.h | 7 drivers/net/wireless/ath/ath11k/debugfs.c | 4 drivers/net/wireless/ath/ath11k/debugfs_sta.c | 30 drivers/net/wireless/ath/ath11k/dp_rx.c | 8 drivers/net/wireless/ath/ath11k/dp_tx.c | 4 drivers/net/wireless/ath/ath11k/mac.c | 588 ++++++------ drivers/net/wireless/ath/ath11k/peer.c | 2 drivers/net/wireless/ath/ath11k/wmi.c | 6 drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c | 6 drivers/net/wireless/marvell/libertas/cfg.c | 9 drivers/net/wireless/marvell/mwifiex/cfg80211.c | 5 drivers/net/wireless/marvell/mwifiex/main.c | 4 drivers/net/wireless/mediatek/mt76/mt7996/mcu.c | 4 drivers/net/wireless/st/cw1200/sta.c | 2 drivers/pci/msi/msi.c | 3 drivers/pcmcia/omap_cf.c | 2 drivers/pcmcia/rsrc_iodyn.c | 3 drivers/pcmcia/rsrc_nonstatic.c | 4 drivers/platform/x86/amd/pmc/pmc-quirks.c | 14 drivers/scsi/lpfc/lpfc_nvmet.c | 10 drivers/soc/qcom/mdt_loader.c | 12 drivers/spi/spi-cadence-quadspi.c | 6 drivers/spi/spi-fsl-lpspi.c | 24 drivers/spi/spi-fsl-qspi.c | 36 drivers/tee/optee/ffa_abi.c | 4 drivers/tee/tee_shm.c | 6 drivers/thermal/mediatek/lvts_thermal.c | 50 - fs/btrfs/btrfs_inode.h | 2 fs/btrfs/extent_io.c | 2 fs/btrfs/inode.c | 1 fs/btrfs/tree-log.c | 78 + fs/fs-writeback.c | 9 fs/ocfs2/inode.c | 3 fs/proc/generic.c | 38 fs/smb/client/cifs_unicode.c | 3 include/linux/bpf-cgroup.h | 5 include/linux/bpf.h | 60 - include/linux/pci.h | 2 include/linux/pgtable.h | 16 include/linux/vmalloc.h | 16 include/net/netlink.h | 69 + include/uapi/linux/netlink.h | 5 kernel/bpf/core.c | 50 - kernel/bpf/syscall.c | 20 kernel/sched/topology.c | 2 lib/nlattr.c | 22 mm/slub.c | 66 - net/atm/resources.c | 6 net/ax25/ax25_in.c | 4 net/batman-adv/network-coding.c | 7 net/bluetooth/hci_sync.c | 2 net/bluetooth/l2cap_sock.c | 3 net/bridge/br_netfilter_hooks.c | 3 net/dsa/tag_ksz.c | 22 net/ipv4/devinet.c | 7 net/ipv4/icmp.c | 6 net/ipv6/ip6_icmp.c | 6 net/mctp/af_mctp.c | 2 net/netfilter/nf_conntrack_helper.c | 4 net/netlink/policy.c | 14 net/smc/smc_clc.c | 2 net/smc/smc_ib.c | 3 net/wireless/scan.c | 3 net/wireless/sme.c | 5 sound/pci/hda/patch_hdmi.c | 1 sound/pci/hda/patch_realtek.c | 5 sound/usb/mixer_quirks.c | 2 tools/gpio/Makefile | 4 tools/perf/util/bpf-event.c | 39 tools/power/cpupower/utils/cpupower-set.c | 4 tools/testing/selftests/net/bind_bhash.c | 4 121 files changed, 1354 insertions(+), 835 deletions(-)
Aaron Erhardt (1):
ALSA: hda/realtek: Fix headset mic for TongFang X6[AF]R5xxY
Alex Deucher (2):
drm/amdgpu: drop hw access in non-DC audio fini Revert "drm/amdgpu: Avoid extra evict-restore process."
Alok Tiwari (2):
xirc2ps_cs: fix register access when enabling FullDuplex
mctp: return -ENOPROTOOPT for unknown getsockopt options
Baochen Qiang (2):
wifi: ath11k: rename ath11k_start_vdev_delay()
wifi: ath11k: avoid forward declaration of ath11k_mac_start_vdev_delay()
Bjorn Andersson (1):
soc: qcom: mdt_loader: Deal with zero e_shentsize
Chen Ni (1):
pcmcia: omap: Add missing check for platform_get_resource
Chengming Zhou (1):
slub: Reflow ___slab_alloc()
Chris Chiu (1):
ALSA: hda/realtek - Add new HP ZBook laptop with micmute led fixup
Christian Loehle (1):
sched: Fix sched_numa_find_nth_cpu() if mask offline
Christoffer Sandberg (1):
platform/x86/amd/pmc: Add TUXEDO IB Pro Gen10 AMD to spurious 8042 quirks list
Colin Ian King (1):
drm/amd/amdgpu: Fix missing error return on kzalloc failure
Cryolitia PukNgae (1):
ALSA: usb-audio: Add mute TLV for playback volumes on some devices
Dan Carpenter (4):
wifi: cw1200: cap SSID length in cw1200_do_join()
wifi: libertas: cap SSID len in lbs_associate()
wifi: cfg80211: sme: cap SSID length in __cfg80211_connect_result()
ipv4: Fix NULL vs error pointer check in inet_blackhole_dev_init()
Daniel Borkmann (4):
bpf: Add cookie object to bpf maps
bpf: Move cgroup iterator helpers to bpf.h
bpf: Move bpf map owner out of common struct
bpf: Fix oob access in cgroup local storage
Dave Airlie (1):
nouveau: fix disabling the nonstall irq due to storm code
David Lechner (3):
iio: imu: inv_mpu6050: align buffer for timestamp
iio: chemical: pms7003: use aligned_s64 for timestamp
iio: pressure: mprls0025pa: use aligned_s64 for timestamp
Dmitry Antipov (1):
wifi: cfg80211: fix use-after-free in cmp_bss()
Duoming Zhou (1):
wifi: brcmfmac: fix use-after-free when rescheduling brcmf_btcoex_info work
Edward Adam Davis (1):
ocfs2: prevent release journal inode after journal shutdown
Eric Dumazet (1):
ax25: properly unshare skbs in ax25_kiss_rcv()
Fabian Bläse (1):
icmp: fix icmp_ndo_send address translation for reply direction
Felix Fietkau (1):
net: ethernet: mtk_eth_soc: fix tx vlan tag for llc packets
Filipe Manana (3):
btrfs: fix race between logging inode and checking if it was logged before
btrfs: fix race between setting last_dir_index_offset and inode logging
btrfs: avoid load/store tearing races when checking if an inode was logged
Greg Kroah-Hartman (1):
Linux 6.6.105
Han Xu (1):
spi: fsl-qspi: use devm function instead of driver remove
Harry Yoo (2):
x86/mm/64: define ARCH_PAGE_TABLE_SYNC_MASK and arch_sync_kernel_mappings()
mm: move page table sync declarations to linux/pgtable.h
Hawking Zhang (1):
drm/amdgpu: Replace DRM_* with dev_* in amdgpu_psp.c
Horatiu Vultur (1):
phy: mscc: Stop taking ts_lock for tx_queue and use its own lock
Huacai Chen (1):
LoongArch: Save LBT before FPU in setup_sigcontext()
Ian Rogers (1):
perf bpf-event: Fix use-after-free in synthesis
Ivan Pravdin (1):
Bluetooth: vhci: Prevent use-after-free by removing debugfs files early
Jakob Unterwurzacher (1):
net: dsa: microchip: linearize skb for tail-tagging switches
Jakub Kicinski (1):
netlink: add variable-length / auto integers
Jason-JH.Lin (2):
drm/mediatek: Add crtc path enum for all_drm_priv array drm/mediatek: Fix using wrong drm private data to bind mediatek-drm
Jeff Johnson (1):
wifi: ath11k: Introduce and use ath11k_sta_to_arsta()
Jinfeng Wang (2):
Revert "spi: cadence-quadspi: fix cleanup of rx_chan on failure paths" Revert "spi: spi-cadence-quadspi: Fix pm runtime unbalance"
Jiufei Xue (1):
fs: writeback: fix use-after-free in __mark_inode_dirty()
John Evans (1):
scsi: lpfc: Fix buffer free/clear order in deferred receive path
Jonathan Currier (1):
PCI/MSI: Add an option to write MSIX ENTRY_DATA before any reads
Josef Bacik (1):
btrfs: adjust subpage bit start based on sectorsize
Kevin Hao (1):
spi: fsl-qspi: Fix double cleanup in probe error path
Kuniyuki Iwashima (2):
Bluetooth: Fix use-after-free in l2cap_sock_cleanup_listen()
selftest: net: Fix weird setsockopt() in bind_bhash.c.
Lad Prabhakar (1):
net: pcs: rzn1-miic: Correct MODCTRL register offset
Larisa Grigore (4):
spi: spi-fsl-lpspi: Fix transmissions when using CONT
spi: spi-fsl-lpspi: Set correct chip-select polarity bit
spi: spi-fsl-lpspi: Reset FIFO and disable module on transfer abort
spi: spi-fsl-lpspi: Clear status register after disabling the module
Li Qiong (1):
mm/slub: avoid accessing metadata when pointer is invalid in object_err()
Liu Jian (1):
net/smc: fix one NULL pointer dereference in smc_ib_is_sg_need_sync()
Lubomir Rintel (1):
cdc_ncm: Flag Intel OEM version of Fibocom L850-GL as WWAN
Luca Ceresoli (1):
iio: light: opt3001: fix deadlock due to concurrent flag access
Ma Ke (2):
pcmcia: Fix a NULL pointer dereference in __iodyn_find_io_region() drm/mediatek: Fix device/node reference count leaks in mtk_drm_get_all_drm_priv
Mahanta Jambigi (1):
net/smc: Remove validation of reserved bits in CLC Decline message
Makar Semyonov (1):
cifs: prevent NULL pointer dereference in UTF16 conversion
Marek Vasut (2):
arm64: dts: imx8mp: Fix missing microSD slot vqmmc on DH electronics i.MX8M Plus DHCOM
arm64: dts: imx8mp: Fix missing microSD slot vqmmc on Data Modul i.MX8M Plus eDM SBC
Miaoqian Lin (2):
mISDN: Fix memory leak in dsp_hwec_enable() ACPI/IORT: Fix memory leak in iort_rmr_alloc_sids()
Michael Walle (1):
drm/bridge: ti-sn65dsi86: fix REFCLK setting
Nathan Chancellor (1):
wifi: mt76: mt7996: Initialize hdr before passing to skb_put_data()
Nícolas F. R. A. Prado (1):
thermal/drivers/mediatek/lvts: Disable low offset IRQ for minimum threshold
Pei Xiao (1):
tee: fix NULL pointer dereference in tee_shm_put
Peter Robinson (1):
arm64: dts: rockchip: Add vcc-supply to SPI flash on rk3399-pinebook-pro
Phil Sutter (1):
netfilter: conntrack: helper: Replace -EEXIST by -EBUSY
Pieter Van Trappen (1):
net: dsa: microchip: update tag_ksz masks for KSZ9477 family
Qianfeng Rong (1):
wifi: mwifiex: Initialize the chan_stats array to zero
Qingfang Deng (1):
ppp: fix memory leak in pad_compress_skb
Qiu-ji Chen (2):
dmaengine: mediatek: Fix a possible deadlock error in mtk_cqdma_tx_status()
dmaengine: mediatek: Fix a flag reuse error in mtk_cqdma_tx_status()
Radim Krčmář (1):
riscv: use lw when reading int cpu in asm_per_cpu
Rafael J. Wysocki (5):
cpufreq: intel_pstate: Fold intel_pstate_max_within_limits() into caller
cpufreq: intel_pstate: Do not update global.turbo_disabled after initialization
cpufreq: intel_pstate: Rearrange show_no_turbo() and store_no_turbo()
cpufreq: intel_pstate: Read global.no_turbo under READ_ONCE()
cpufreq: intel_pstate: Check turbo_is_disabled() in store_no_turbo()
Rameshkumar Sundaram (1):
wifi: ath11k: fix group data packet drops during rekey
Ronak Doshi (1):
vmxnet3: update MTU after device quiesce
Rosen Penev (2):
net: thunder_bgx: add a missing of_node_put
net: thunder_bgx: decrement cleanup index before use
Sabrina Dubroca (1):
macsec: read MACSEC_SA_ATTR_PN with nla_get_uint
Sean Anderson (1):
net: macb: Fix tx_ptr_lock locking
Shinji Nomoto (1):
cpupower: Fix a bug where the -t option of the set subcommand was not working.
Srinivas Pandruvada (2):
cpufreq: intel_pstate: Revise global turbo disable check
cpufreq: intel_pstate: Unchecked MSR aceess in legacy mode
Stanislav Fort (1):
batman-adv: fix OOB read/write in network-coding decode
Stefan Binding (1):
ALSA: hda/realtek: Add support for HP Agusta using CS35L41 HDA
Sungbae Yoo (1):
tee: optee: ffa: fix a typo of "optee_ffa_api_is_compatible"
Takashi Iwai (1):
ALSA: hda/hdmi: Add pin fix for another HP EliteDesk 800 G4 model
Timur Kristóf (1):
drm/amd/display: Don't warn when missing DCE encoder caps
Vadim Pasternak (1):
hwmon: mlxreg-fan: Prevent fans from getting stuck at 0 RPM
Vitaly Lifshits (1):
e1000e: fix heap overflow in e1000_set_eeprom
Wang Liang (2):
netfilter: br_netfilter: do not check confirmed bit in br_nf_local_in() after confirm
net: atm: fix memory leak in atm_register_sysfs when device_register fail
Wentao Liang (1):
pcmcia: Add error handling for add_interval() in do_validate_mem()
Yang Li (1):
Bluetooth: hci_sync: Avoid adding default advertising on startup
Zhen Ni (1):
i40e: Fix potential invalid access when MAC list is empty
panfan (1):
arm64: ftrace: fix unreachable PLT for ftrace_caller in init_module with CONFIG_DYNAMIC_FTRACE
wangzijie (1):
proc: fix missing pde_set_flags() for net proc files
yangshiguang (1):
mm: slub: avoid wake up kswapd in set_track_prepare
zhang jiao (1):
tools: gpio: remove the include directory on make clean
zhangjiao (1):
tools: gpio: rm .*.cmd on make clean
Greg Kroah-Hartman
maintainerDocumentation/userspace-api/netlink/specs.rst +16 -2
@@ -408,10 +408,21 @@ This section describes the attribute types supported by the ``genetlink`` compatibility level. Refer to documentation of different levels for additional attribute types. -Scalar integer types +Common integer types -------------------- -Fixed-width integer types: +``sint`` and ``uint`` represent signed and unsigned 64 bit integers. +If the value can fit on 32 bits only 32 bits are carried in netlink +messages, otherwise full 64 bits are carried. Note that the payload +is only aligned to 4B, so the full 64 bit value may be unaligned! + +Common integer types should be preferred over fix-width types in majority +of cases. + +Fix-width integer types +----------------------- + +Fixed-width integer types include: ``u8``, ``u16``, ``u32``, ``u64``, ``s8``, ``s16``, ``s32``, ``s64``. Note that types smaller than 32 bit should be avoided as using them
@@ -421,6 +432,9 @@ See :ref:`pad_type` for padding of 64 bit attributes. The payload of the attribute is the integer in host order unless ``byte-order`` specifies otherwise. +64 bit values are usually aligned by the kernel but it is recommended +that the user space is able to deal with unaligned values. + .. _pad_type: pad
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 104 +SUBLEVEL = 105 EXTRAVERSION = NAME = Pinguïn Aangedreven
arch/arm64/boot/dts/freescale/imx8mp-data-modul-edm-sbc.dts +1 -0
@@ -442,6 +442,7 @@ &usdhc2 { pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>; cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>; vmmc-supply = <®_usdhc2_vmmc>; + vqmmc-supply = <&ldo5>; bus-width = <4>; status = "okay"; };
arch/arm64/boot/dts/freescale/imx8mp-dhcom-som.dtsi +1 -0
@@ -571,6 +571,7 @@ &usdhc2 { pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>; cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>; vmmc-supply = <®_usdhc2_vmmc>; + vqmmc-supply = <&ldo5>; bus-width = <4>; status = "okay"; };
arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts +1 -0
@@ -967,6 +967,7 @@ spiflash: flash@0 { reg = <0>; m25p,fast-read; spi-max-frequency = <10000000>; + vcc-supply = <&vcc_3v0>; }; };
arch/arm64/include/asm/module.h +1 -0
@@ -19,6 +19,7 @@ struct mod_arch_specific {/* for CONFIG_DYNAMIC_FTRACE */ struct plt_entry *ftrace_trampolines; +struct plt_entry *init_ftrace_trampolines; }; u64 module_emit_plt_entry(struct module *mod, Elf64_Shdr *sechdrs,
arch/arm64/include/asm/module.lds.h +1 -0
@@ -2,6 +2,7 @@ SECTIONS { .plt 0 : { BYTE(0) } .init.plt 0 : { BYTE(0) } .text.ftrace_trampoline 0 : { BYTE(0) } + .init.text.ftrace_trampoline 0 : { BYTE(0) } #ifdef CONFIG_KASAN_SW_TAGS /*
arch/arm64/kernel/ftrace.c +10 -3
@@ -195,10 +195,17 @@ int ftrace_update_ftrace_func(ftrace_func_t func)return ftrace_modify_code (pc,0 , new, false); } -static struct plt_entry *get_ftrace_plt (struct module *mod) +static struct plt_entry *get_ftrace_plt (struct module *mod,unsigned long addr) {#ifdef CONFIG_MODULES -struct plt_entry *plt = mod->arch.ftrace_trampolines; +struct plt_entry *plt =NULL ; + +if (within_module_mem_type (addr, mod,MOD_INIT_TEXT )) + plt = mod->arch.init_ftrace_trampolines; +else if (within_module_mem_type (addr, mod,MOD_TEXT )) + plt = mod->arch.ftrace_trampolines; +else +return NULL ;return &plt[FTRACE_PLT_IDX ];#else
@@ -270,7 +277,7 @@ static bool ftrace_find_callable_addr(struct dyn_ftrace *rec,if (WARN_ON (!mod))return false; - plt =get_ftrace_plt (mod); + plt =get_ftrace_plt (mod, pc);if (!plt) {pr_err ("ftrace: no module PLT for %ps\n" , (void *)*addr);return false;
arch/arm64/kernel/module-plts.c +11 -1
@@ -284,7 +284,7 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,unsigned long core_plts =0 ;unsigned long init_plts =0 ;Elf64_Sym *syms =NULL ; -Elf_Shdr *pltsec, *tramp =NULL ; +Elf_Shdr *pltsec, *tramp =NULL , *init_tramp =NULL ;int i;/*
@@ -299,6 +299,9 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,else if (!strcmp (secstrings + sechdrs[i].sh_name,".text.ftrace_trampoline" )) tramp = sechdrs + i; +else if (!strcmp (secstrings + sechdrs[i].sh_name, +".init.text.ftrace_trampoline" )) + init_tramp = sechdrs + i;else if (sechdrs[i].sh_type ==SHT_SYMTAB ) syms = (Elf64_Sym *)sechdrs[i].sh_addr; }
@@ -364,5 +367,12 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, tramp->sh_size =NR_FTRACE_PLTS *sizeof (struct plt_entry ); } +if (init_tramp) { + init_tramp->sh_type =SHT_NOBITS ; + init_tramp->sh_flags =SHF_EXECINSTR |SHF_ALLOC ; + init_tramp->sh_addralign = __alignof__(struct plt_entry ); + init_tramp->sh_size =NR_FTRACE_PLTS *sizeof (struct plt_entry ); + } +return 0 ; }
arch/arm64/kernel/module.c +11 -0
@@ -579,6 +579,17 @@ static int module_init_ftrace_plt(const Elf_Ehdr *hdr,__init_plt (&plts[FTRACE_PLT_IDX ],FTRACE_ADDR ); mod->arch.ftrace_trampolines = plts; + + s =find_section (hdr, sechdrs,".init.text.ftrace_trampoline" ); +if (!s) +return -ENOEXEC ; + + plts = (void *)s->sh_addr; + +__init_plt (&plts[FTRACE_PLT_IDX ],FTRACE_ADDR ); + + mod->arch.init_ftrace_trampolines = plts; +#endif return 0 ; }
arch/loongarch/kernel/signal.c +5 -5
@@ -697,6 +697,11 @@ static int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,for (i =1 ; i <32 ; i++) err |=__put_user (regs->regs[i], &sc->sc_regs[i]); +#ifdef CONFIG_CPU_HAS_LBT +if (extctx->lbt.addr) + err |=protected_save_lbt_context (extctx); +#endif +if (extctx->lasx.addr) err |=protected_save_lasx_context (extctx);else if (extctx->lsx.addr)
@@ -704,11 +709,6 @@ static int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,else if (extctx->fpu.addr) err |=protected_save_fpu_context (extctx); -#ifdef CONFIG_CPU_HAS_LBT -if (extctx->lbt.addr) - err |=protected_save_lbt_context (extctx); -#endif -/* Set the "end" magic */ info = (struct sctx_info *)extctx->end.addr; err |=__put_user (0 , &info->magic);
arch/riscv/include/asm/asm.h +1 -1
@@ -90,7 +90,7 @@#endif .macro asm_per_cpu dst sym tmp - REG_L \tmp, TASK_TI_CPU_NUM(tp) + lw \tmp, TASK_TI_CPU_NUM(tp) slli \tmp, \tmp, PER_CPU_OFFSET_SHIFT la \dst, __per_cpu_offset add \dst, \dst, \tmp
arch/x86/include/asm/pgtable_64_types.h +3 -0
@@ -41,6 +41,9 @@ static inline bool pgtable_l5_enabled(void)#define pgtable_l5_enabled () 0#endif /* CONFIG_X86_5LEVEL */ +#define ARCH_PAGE_TABLE_SYNC_MASK \ + (pgtable_l5_enabled() ? PGTBL_PGD_MODIFIED : PGTBL_P4D_MODIFIED) +extern unsigned int pgdir_shift;extern unsigned int ptrs_per_p4d;
arch/x86/mm/init_64.c +18 -0
@@ -223,6 +223,24 @@ static void sync_global_pgds(unsigned long start, unsigned long end)sync_global_pgds_l4 (start, end); } +/* +* Make kernel mappings visible in all page tables in the system. +* This is necessary except when the init task populates kernel mappings +* during the boot process. In that case, all processes originating from +* the init task copies the kernel mappings, so there is no issue. +* Otherwise, missing synchronization could lead to kernel crashes due +* to missing page table entries for certain kernel mappings. +* +* Synchronization is performed at the top level, which is the PGD in +* 5-level paging systems. But in 4-level paging systems, however, +* pgd_populate() is a no-op, so synchronization is done at the P4D level. +* sync_global_pgds() handles this difference between paging levels. +*/ +void arch_sync_kernel_mappings (unsigned long start,unsigned long end) +{ +sync_global_pgds (start, end); +} +/* * NOTE: This function is marked __ref because it calls __init function * (alloc_bootmem_pages). It's safe to do it ONLY when after_bootmem == 0.
drivers/acpi/arm64/iort.c +3 -1
@@ -937,8 +937,10 @@ static u32 *iort_rmr_alloc_sids(u32 *sids, u32 count, u32 id_start, new_sids =krealloc_array (sids, count + new_count,sizeof (*new_sids),GFP_KERNEL ); -if (!new_sids) +if (!new_sids) { +kfree (sids);return NULL ; + }for (i = count; i < total_count; i++) new_sids[i] = id_start++;
drivers/bluetooth/hci_vhci.c +41 -16
81 lines not on this page · raw message
drivers/cpufreq/intel_pstate.c +44 -78
274 lines not on this page · raw message
drivers/dma/mediatek/mtk-cqdma.c +4 -6
@@ -420,15 +420,11 @@ static struct virt_dma_desc *mtk_cqdma_find_active_desc(struct dma_chan *c, {struct mtk_cqdma_vchan *cvc =to_cqdma_vchan (c);struct virt_dma_desc *vd; -unsigned long flags; -spin_lock_irqsave (&cvc->pc->lock, flags);list_for_each_entry (vd, &cvc->pc->queue, node)if (vd->tx.cookie == cookie) { -spin_unlock_irqrestore (&cvc->pc->lock, flags);return vd; } -spin_unlock_irqrestore (&cvc->pc->lock, flags);list_for_each_entry (vd, &cvc->vc.desc_issued, node)if (vd->tx.cookie == cookie)
@@ -452,9 +448,11 @@ static enum dma_status mtk_cqdma_tx_status(struct dma_chan *c,if (ret ==DMA_COMPLETE || !txstate)return ret; -spin_lock_irqsave (&cvc->vc.lock, flags); +spin_lock_irqsave (&cvc->pc->lock, flags); +spin_lock (&cvc->vc.lock); vd =mtk_cqdma_find_active_desc (c, cookie); -spin_unlock_irqrestore (&cvc->vc.lock, flags); +spin_unlock (&cvc->vc.lock); +spin_unlock_irqrestore (&cvc->pc->lock, flags);if (vd) { cvd =to_cqdma_vdesc (vd);
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +76 -70
491 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +4 -2
@@ -2125,11 +2125,13 @@ void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t min_vm_size,*/ long amdgpu_vm_wait_idle (struct amdgpu_vm *vm,long timeout) { - timeout =drm_sched_entity_flush (&vm->immediate, timeout); + timeout =dma_resv_wait_timeout (vm->root.bo->tbo.base.resv, +DMA_RESV_USAGE_BOOKKEEP , + true, timeout);if (timeout <=0 )return timeout; -return drm_sched_entity_flush (&vm->delayed, timeout); +return dma_fence_wait_timeout (vm->last_unlocked, true, timeout); }/**
drivers/gpu/drm/amd/amdgpu/dce_v10_0.c +0 -5
@@ -1459,17 +1459,12 @@ static int dce_v10_0_audio_init(struct amdgpu_device *adev)static void dce_v10_0_audio_fini (struct amdgpu_device *adev) { -int i; -if (!amdgpu_audio)return ;if (!adev->mode_info.audio.enabled)return ; -for (i =0 ; i < adev->mode_info.audio.num_pins; i++) -dce_v10_0_audio_enable (adev, &adev->mode_info.audio.pin[i], false); - adev->mode_info.audio.enabled = false; }
drivers/gpu/drm/amd/amdgpu/dce_v11_0.c +0 -5
@@ -1508,17 +1508,12 @@ static int dce_v11_0_audio_init(struct amdgpu_device *adev)static void dce_v11_0_audio_fini (struct amdgpu_device *adev) { -int i; -if (!amdgpu_audio)return ;if (!adev->mode_info.audio.enabled)return ; -for (i =0 ; i < adev->mode_info.audio.num_pins; i++) -dce_v11_0_audio_enable (adev, &adev->mode_info.audio.pin[i], false); - adev->mode_info.audio.enabled = false; }
drivers/gpu/drm/amd/amdgpu/dce_v6_0.c +0 -5
@@ -1377,17 +1377,12 @@ static int dce_v6_0_audio_init(struct amdgpu_device *adev)static void dce_v6_0_audio_fini (struct amdgpu_device *adev) { -int i; -if (!amdgpu_audio)return ;if (!adev->mode_info.audio.enabled)return ; -for (i =0 ; i < adev->mode_info.audio.num_pins; i++) -dce_v6_0_audio_enable (adev, &adev->mode_info.audio.pin[i], false); - adev->mode_info.audio.enabled = false; }
drivers/gpu/drm/amd/amdgpu/dce_v8_0.c +0 -5
@@ -1426,17 +1426,12 @@ static int dce_v8_0_audio_init(struct amdgpu_device *adev)static void dce_v8_0_audio_fini (struct amdgpu_device *adev) { -int i; -if (!amdgpu_audio)return ;if (!adev->mode_info.audio.enabled)return ; -for (i =0 ; i < adev->mode_info.audio.num_pins; i++) -dce_v8_0_audio_enable (adev, &adev->mode_info.audio.pin[i], false); - adev->mode_info.audio.enabled = false; }
drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c +4 -4
@@ -896,13 +896,13 @@ void dce110_link_encoder_construct( enc110->base.id, &bp_cap_info);/* Override features with DCE-specific values */ -if (BP_RESULT_OK == result) { +if (result ==BP_RESULT_OK ) { enc110->base.features.flags.bits.IS_HBR2_CAPABLE = bp_cap_info.DP_HBR2_EN; enc110->base.features.flags.bits.IS_HBR3_CAPABLE = bp_cap_info.DP_HBR3_EN; enc110->base.features.flags.bits.HDMI_6GB_EN = bp_cap_info.HDMI_6GB_EN; - }else { + }else if (result !=BP_RESULT_NORECORD ) {DC_LOG_WARNING ("%s: Failed to get encoder_cap_info from VBIOS with error code %d!\n" , __func__, result);
@@ -1795,13 +1795,13 @@ void dce60_link_encoder_construct( enc110->base.id, &bp_cap_info);/* Override features with DCE-specific values */ -if (BP_RESULT_OK == result) { +if (result ==BP_RESULT_OK ) { enc110->base.features.flags.bits.IS_HBR2_CAPABLE = bp_cap_info.DP_HBR2_EN; enc110->base.features.flags.bits.IS_HBR3_CAPABLE = bp_cap_info.DP_HBR3_EN; enc110->base.features.flags.bits.HDMI_6GB_EN = bp_cap_info.HDMI_6GB_EN; - }else { + }else if (result !=BP_RESULT_NORECORD ) {DC_LOG_WARNING ("%s: Failed to get encoder_cap_info from VBIOS with error code %d!\n" , __func__, result);
drivers/gpu/drm/bridge/ti-sn65dsi86.c +11 -0
@@ -375,6 +375,17 @@ static int __maybe_unused ti_sn65dsi86_resume(struct device *dev)gpiod_set_value_cansleep (pdata->enable_gpio,1 ); +/* +* After EN is deasserted and an external clock is detected, the bridge +* will sample GPIO3:1 to determine its frequency. The driver will +* overwrite this setting in ti_sn_bridge_set_refclk_freq(). But this is +* racy. Thus we have to wait a couple of us. According to the datasheet +* the GPIO lines has to be stable at least 5 us (td5) but it seems that +* is not enough and the refclk frequency value is still lost or +* overwritten by the bridge itself. Waiting for 20us seems to work. +*/ +usleep_range (20 ,30 ); +/* * If we have a reference clock we can enable communication w/ the * panel (including the aux channel) w/out any need for an input clock
drivers/gpu/drm/mediatek/mtk_drm_drv.c +30 -12
81 lines not on this page · raw message
drivers/gpu/drm/mediatek/mtk_drm_drv.h +7 -1
@@ -9,11 +9,17 @@#include <linux/io.h> #include "mtk_drm_ddp_comp.h" -#define MAX_CRTC 3#define MAX_CONNECTOR 2#define DDP_COMPONENT_DRM_OVL_ADAPTOR (DDP_COMPONENT_ID_MAX + 1)#define DDP_COMPONENT_DRM_ID_MAX (DDP_COMPONENT_DRM_OVL_ADAPTOR + 1) +enum mtk_drm_crtc_path { +CRTC_MAIN , +CRTC_EXT , +CRTC_THIRD , +MAX_CRTC , +}; +struct device ;struct device_node ;struct drm_crtc ;
drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +2 -0
@@ -348,6 +348,8 @@ nvkm_fifo_dtor(struct nvkm_engine *engine)nvkm_chid_unref (&fifo->chid);nvkm_event_fini (&fifo->nonstall.event); +if (fifo->func->nonstall_dtor) + fifo->func->nonstall_dtor (fifo);mutex_destroy (&fifo->mutex);return fifo; }
drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga100.c +15 -8
@@ -516,19 +516,11 @@ ga100_fifo_nonstall_intr(struct nvkm_inth *inth)static void ga100_fifo_nonstall_block (struct nvkm_event *event,int type,int index) { -struct nvkm_fifo *fifo =container_of (event,typeof (*fifo), nonstall.event); -struct nvkm_runl *runl =nvkm_runl_get (fifo, index,0 ); - -nvkm_inth_block (&runl->nonstall.inth); }static void ga100_fifo_nonstall_allow (struct nvkm_event *event,int type,int index) { -struct nvkm_fifo *fifo =container_of (event,typeof (*fifo), nonstall.event); -struct nvkm_runl *runl =nvkm_runl_get (fifo, index,0 ); - -nvkm_inth_allow (&runl->nonstall.inth); } const struct nvkm_event_func
@@ -559,12 +551,26 @@ ga100_fifo_nonstall_ctor(struct nvkm_fifo *fifo)if (ret)return ret; +nvkm_inth_allow (&runl->nonstall.inth); + nr =max (nr, runl->id +1 ); }return nr; } +void +ga100_fifo_nonstall_dtor (struct nvkm_fifo *fifo) +{ +struct nvkm_runl *runl; + + nvkm_runl_foreach(runl, fifo) { +if (runl->nonstall.vector <0 ) +continue ; +nvkm_inth_block (&runl->nonstall.inth); + } +} +int ga100_fifo_runl_ctor (struct nvkm_fifo *fifo) {
@@ -594,6 +600,7 @@ ga100_fifo = { .runl_ctor = ga100_fifo_runl_ctor, .mmu_fault = &tu102_fifo_mmu_fault, .nonstall_ctor = ga100_fifo_nonstall_ctor, + .nonstall_dtor = ga100_fifo_nonstall_dtor, .nonstall = &ga100_fifo_nonstall, .runl = &ga100_runl, .runq = &ga100_runq,
drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga102.c +1 -0
@@ -28,6 +28,7 @@ ga102_fifo = { .runl_ctor = ga100_fifo_runl_ctor, .mmu_fault = &tu102_fifo_mmu_fault, .nonstall_ctor = ga100_fifo_nonstall_ctor, + .nonstall_dtor = ga100_fifo_nonstall_dtor, .nonstall = &ga100_fifo_nonstall, .runl = &ga100_runl, .runq = &ga100_runq,
drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h +2 -0
@@ -38,6 +38,7 @@ struct nvkm_fifo_func {void (*start)(struct nvkm_fifo *,unsigned long *);int (*nonstall_ctor)(struct nvkm_fifo *); +void (*nonstall_dtor)(struct nvkm_fifo *);const struct nvkm_event_func *nonstall;const struct nvkm_runl_func *runl;
@@ -194,6 +195,7 @@ extern const struct nvkm_fifo_func_mmu_fault tu102_fifo_mmu_fault;int ga100_fifo_runl_ctor (struct nvkm_fifo *);int ga100_fifo_nonstall_ctor (struct nvkm_fifo *); +void ga100_fifo_nonstall_dtor (struct nvkm_fifo *);extern const struct nvkm_event_func ga100_fifo_nonstall;extern const struct nvkm_runl_func ga100_runl;extern const struct nvkm_runq_func ga100_runq;
drivers/hwmon/mlxreg-fan.c +2 -3
@@ -561,15 +561,14 @@ static int mlxreg_fan_cooling_config(struct device *dev, struct mlxreg_fan *fan)if (!pwm->connected)continue ; pwm->fan = fan; +/* Set minimal PWM speed. */ + pwm->last_hwmon_state =MLXREG_FAN_PWM_DUTY2STATE (MLXREG_FAN_MIN_DUTY ); pwm->cdev =devm_thermal_of_cooling_device_register (dev,NULL , mlxreg_fan_name[i], pwm, &mlxreg_fan_cooling_ops);if (IS_ERR (pwm->cdev)) {dev_err (dev,"Failed to register cooling device\n" );return PTR_ERR (pwm->cdev); } - -/* Set minimal PWM speed. */ - pwm->last_hwmon_state =MLXREG_FAN_PWM_DUTY2STATE (MLXREG_FAN_MIN_DUTY ); }return 0 ;
drivers/iio/chemical/pms7003.c +3 -2
@@ -5,7 +5,6 @@* Copyright (c) Tomasz Duszynski <[email protected]> */ -#include <asm/unaligned.h> #include <linux/completion.h> #include <linux/device.h> #include <linux/errno.h>
@@ -19,6 +18,8 @@#include <linux/module.h> #include <linux/mutex.h> #include <linux/serdev.h> +#include <linux/types.h> +#include <asm/unaligned.h> #define PMS7003_DRIVER_NAME "pms7003"
@@ -76,7 +77,7 @@ struct pms7003_state {/* Used to construct scan to push to the IIO buffer */ struct {u16 data[3 ];/* PM1, PM2P5, PM10 */ -s64 ts; +aligned_s64 ts; } scan; };
drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c +1 -1
@@ -52,7 +52,7 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)u16 fifo_count;u32 fifo_period;s64 timestamp; -u8 data[INV_MPU6050_OUTPUT_DATA_SIZE ]; +u8 data[INV_MPU6050_OUTPUT_DATA_SIZE ]__aligned(8) ;int int_status;size_t i, nb;
drivers/iio/light/opt3001.c +3 -2
@@ -692,8 +692,9 @@ static irqreturn_t opt3001_irq(int irq, void *_iio)struct opt3001 *opt =iio_priv (iio);int ret;bool wake_result_ready_queue = false; +bool ok_to_ignore_lock = opt->ok_to_ignore_lock; -if (!opt->ok_to_ignore_lock) +if (!ok_to_ignore_lock)mutex_lock (&opt->lock); ret =i2c_smbus_read_word_swapped (opt->client,OPT3001_CONFIGURATION );
@@ -730,7 +731,7 @@ static irqreturn_t opt3001_irq(int irq, void *_iio) } out: -if (!opt->ok_to_ignore_lock) +if (!ok_to_ignore_lock)mutex_unlock (&opt->lock);if (wake_result_ready_queue)
drivers/iio/pressure/mprls0025pa.c +4 -6
@@ -87,11 +87,6 @@ static const struct mpr_func_spec mpr_func_spec[] = { [MPR_FUNCTION_C] = {.output_min = 3355443, .output_max = 13421773}, }; -struct mpr_chan { -s32 pres;/* pressure value */ -s64 ts;/* timestamp */ -}; -struct mpr_data {struct i2c_client *client;struct mutex lock;/*
@@ -120,7 +115,10 @@ struct mpr_data {* loop until data is ready */ struct completion completion;/* handshake from irq to read */ -struct mpr_chan chan;/* +struct { +s32 pres;/* pressure value */ +aligned_s64 ts;/* timestamp */ + } chan;/* * channel values for buffered * mode */
drivers/isdn/mISDN/dsp_hwec.c +3 -3
@@ -51,14 +51,14 @@ void dsp_hwec_enable(struct dsp *dsp, const char *arg) goto _do; { -char *dup, *tok, *name, *val; +char *dup, *next, *tok, *name, *val;int tmp; - dup =kstrdup (arg,GFP_ATOMIC ); + dup = next =kstrdup (arg,GFP_ATOMIC );if (!dup)return ; -while ((tok =strsep (&dup,"," ))) { +while ((tok =strsep (&next,"," ))) {if (!strlen (tok))continue ; name =strsep (&tok,"=" );
drivers/net/ethernet/cadence/macb_main.c +16 -12
@@ -1234,11 +1234,12 @@ static int macb_tx_complete(struct macb_queue *queue, int budget) {struct macb *bp = queue->bp;u16 queue_index = queue - bp->queues; +unsigned long flags;unsigned int tail;unsigned int head;int packets =0 ; -spin_lock (&queue->tx_ptr_lock); +spin_lock_irqsave (&queue->tx_ptr_lock, flags); head = queue->tx_head;for (tail = queue->tx_tail; tail != head && packets < budget; tail++) {struct macb_tx_skb *tx_skb;
@@ -1297,7 +1298,7 @@ static int macb_tx_complete(struct macb_queue *queue, int budget) CIRC_CNT(queue->tx_head, queue->tx_tail, bp->tx_ring_size) <= MACB_TX_WAKEUP_THRESH(bp))netif_wake_subqueue (bp->dev, queue_index); -spin_unlock (&queue->tx_ptr_lock); +spin_unlock_irqrestore (&queue->tx_ptr_lock, flags);return packets; }
@@ -1713,8 +1714,9 @@ static void macb_tx_restart(struct macb_queue *queue) {struct macb *bp = queue->bp;unsigned int head_idx, tbqp; +unsigned long flags; -spin_lock (&queue->tx_ptr_lock); +spin_lock_irqsave (&queue->tx_ptr_lock, flags);if (queue->tx_head == queue->tx_tail) goto out_tx_ptr_unlock;
@@ -1726,19 +1728,20 @@ static void macb_tx_restart(struct macb_queue *queue)if (tbqp == head_idx) goto out_tx_ptr_unlock; -spin_lock_irq (&bp->lock); +spin_lock (&bp->lock);macb_writel (bp,NCR ,macb_readl (bp,NCR ) |MACB_BIT (TSTART )); -spin_unlock_irq (&bp->lock); +spin_unlock (&bp->lock); out_tx_ptr_unlock: -spin_unlock (&queue->tx_ptr_lock); +spin_unlock_irqrestore (&queue->tx_ptr_lock, flags); }static bool macb_tx_complete_pending (struct macb_queue *queue) {bool retval = false; +unsigned long flags; -spin_lock (&queue->tx_ptr_lock); +spin_lock_irqsave (&queue->tx_ptr_lock, flags);if (queue->tx_head != queue->tx_tail) {/* Make hw descriptor updates visible to CPU */ rmb ();
@@ -1746,7 +1749,7 @@ static bool macb_tx_complete_pending(struct macb_queue *queue)if (macb_tx_desc (queue, queue->tx_tail)->ctrl &MACB_BIT (TX_USED )) retval = true; } -spin_unlock (&queue->tx_ptr_lock); +spin_unlock_irqrestore (&queue->tx_ptr_lock, flags);return retval; }
@@ -2314,6 +2317,7 @@ static netdev_tx_t macb_start_xmit(struct sk_buff *skb, struct net_device *dev)struct macb_queue *queue = &bp->queues[queue_index];unsigned int desc_cnt, nr_frags, frag_size, f;unsigned int hdrlen; +unsigned long flags;bool is_lso;netdev_tx_t ret =NETDEV_TX_OK ;
@@ -2374,7 +2378,7 @@ static netdev_tx_t macb_start_xmit(struct sk_buff *skb, struct net_device *dev) desc_cnt +=DIV_ROUND_UP (frag_size, bp->max_tx_length); } -spin_lock_bh (&queue->tx_ptr_lock); +spin_lock_irqsave (&queue->tx_ptr_lock, flags);/* This is a hard error, log it. */ if (CIRC_SPACE(queue->tx_head, queue->tx_tail,
@@ -2396,15 +2400,15 @@ static netdev_tx_t macb_start_xmit(struct sk_buff *skb, struct net_device *dev)wmb ();skb_tx_timestamp (skb); -spin_lock_irq (&bp->lock); +spin_lock (&bp->lock);macb_writel (bp,NCR ,macb_readl (bp,NCR ) |MACB_BIT (TSTART )); -spin_unlock_irq (&bp->lock); +spin_unlock (&bp->lock);if (CIRC_SPACE (queue->tx_head, queue->tx_tail, bp->tx_ring_size) <1 )netif_stop_subqueue (dev, queue_index); unlock: -spin_unlock_bh (&queue->tx_ptr_lock); +spin_unlock_irqrestore (&queue->tx_ptr_lock, flags);return ret; }
drivers/net/ethernet/cavium/thunder/thunder_bgx.c +12 -8
@@ -1491,13 +1491,17 @@ static int bgx_init_of_phy(struct bgx *bgx)* this cortina phy, for which there is no driver * support, ignore it. */ -if (phy_np && - !of_device_is_compatible (phy_np,"cortina,cs4223-slice" )) { -/* Wait until the phy drivers are available */ - pd =of_phy_find_device (phy_np); -if (!pd) - goto defer; - bgx->lmac[lmac].phydev = pd; +if (phy_np) { +if (!of_device_is_compatible (phy_np,"cortina,cs4223-slice" )) { +/* Wait until the phy drivers are available */ + pd =of_phy_find_device (phy_np); +if (!pd) { +of_node_put (phy_np); + goto defer; + } + bgx->lmac[lmac].phydev = pd; + } +of_node_put (phy_np); } lmac++;
@@ -1513,11 +1517,11 @@ static int bgx_init_of_phy(struct bgx *bgx)* for phy devices we may have already found. */ while (lmac) { + lmac--;if (bgx->lmac[lmac].phydev) {put_device (&bgx->lmac[lmac].phydev->mdio.dev); bgx->lmac[lmac].phydev =NULL ; } - lmac--; }of_node_put (node);return -EPROBE_DEFER ;
drivers/net/ethernet/intel/e1000e/ethtool.c +7 -3
@@ -567,12 +567,12 @@ static int e1000_set_eeprom(struct net_device *netdev, {struct e1000_adapter *adapter =netdev_priv (netdev);struct e1000_hw *hw = &adapter->hw; +size_t total_len, max_len;u16 *eeprom_buff; -void *ptr; -int max_len; +int ret_val =0 ;int first_word;int last_word; -int ret_val =0 ; +void *ptr;u16 i;if (eeprom->len ==0 )
@@ -587,6 +587,10 @@ static int e1000_set_eeprom(struct net_device *netdev, max_len = hw->nvm.word_size *2 ; +if (check_add_overflow (eeprom->offset, eeprom->len, &total_len) || + total_len > max_len) +return -EFBIG ; + first_word = eeprom->offset >>1 ; last_word = (eeprom->offset + eeprom->len -1 ) >>1 ; eeprom_buff =kmalloc (max_len,GFP_KERNEL );
drivers/net/ethernet/intel/i40e/i40e_client.c +2 -2
@@ -361,8 +361,8 @@ static void i40e_client_add_instance(struct i40e_pf *pf)if (i40e_client_get_params (vsi, &cdev->lan_info.params)) goto free_cdev; - mac =list_first_entry (&cdev->lan_info.netdev->dev_addrs.list, - struct netdev_hw_addr, list); + mac =list_first_entry_or_null (&cdev->lan_info.netdev->dev_addrs.list, + struct netdev_hw_addr, list);if (mac)ether_addr_copy (cdev->lan_info.lanmac, mac->addr);else
drivers/net/ethernet/mediatek/mtk_eth_soc.c +9 -1
@@ -1586,6 +1586,13 @@ static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)bool gso = false;int tx_num; +if (skb_vlan_tag_present (skb) && + !eth_proto_is_802_3 (eth_hdr (skb)->h_proto)) { + skb =__vlan_hwaccel_push_inside (skb); +if (!skb) + goto dropped; + } +/* normally we can rely on the stack not calling this more than once, * however we have 2 queues running on the same ring so we need to lock * the ring access
@@ -1631,8 +1638,9 @@ static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev) drop:spin_unlock (ð->page_lock); - stats->tx_dropped++;dev_kfree_skb_any (skb); +dropped: + stats->tx_dropped++;return NETDEV_TX_OK ; }
drivers/net/ethernet/xircom/xirc2ps_cs.c +1 -1
@@ -1578,7 +1578,7 @@ do_reset(struct net_device *dev, int full)msleep (40 );/* wait 40 msec to let it complete */ }if (full_duplex) -PutByte (XIRCREG1_ECR ,GetByte (XIRCREG1_ECR | FullDuplex)); +PutByte (XIRCREG1_ECR ,GetByte (XIRCREG1_ECR ) | FullDuplex); }else {/* No MII */ SelectPage (0 ); value =GetByte (XIRCREG_ESR );/* read the ESR */
drivers/net/macsec.c +4 -4
@@ -1840,7 +1840,7 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info)if (tb_sa[MACSEC_SA_ATTR_PN ]) {spin_lock_bh (&rx_sa->lock); - rx_sa->next_pn =nla_get_u64 (tb_sa[MACSEC_SA_ATTR_PN ]); + rx_sa->next_pn =nla_get_uint (tb_sa[MACSEC_SA_ATTR_PN ]);spin_unlock_bh (&rx_sa->lock); }
@@ -2082,7 +2082,7 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info) }spin_lock_bh (&tx_sa->lock); - tx_sa->next_pn =nla_get_u64 (tb_sa[MACSEC_SA_ATTR_PN ]); + tx_sa->next_pn =nla_get_uint (tb_sa[MACSEC_SA_ATTR_PN ]);spin_unlock_bh (&tx_sa->lock);if (tb_sa[MACSEC_SA_ATTR_ACTIVE ])
@@ -2394,7 +2394,7 @@ static int macsec_upd_txsa(struct sk_buff *skb, struct genl_info *info)spin_lock_bh (&tx_sa->lock); prev_pn = tx_sa->next_pn_halves; - tx_sa->next_pn =nla_get_u64 (tb_sa[MACSEC_SA_ATTR_PN ]); + tx_sa->next_pn =nla_get_uint (tb_sa[MACSEC_SA_ATTR_PN ]);spin_unlock_bh (&tx_sa->lock); }
@@ -2492,7 +2492,7 @@ static int macsec_upd_rxsa(struct sk_buff *skb, struct genl_info *info)spin_lock_bh (&rx_sa->lock); prev_pn = rx_sa->next_pn_halves; - rx_sa->next_pn =nla_get_u64 (tb_sa[MACSEC_SA_ATTR_PN ]); + rx_sa->next_pn =nla_get_uint (tb_sa[MACSEC_SA_ATTR_PN ]);spin_unlock_bh (&rx_sa->lock); }
drivers/net/pcs/pcs-rzn1-miic.c +1 -1
@@ -19,7 +19,7 @@#define MIIC_PRCMD 0x0#define MIIC_ESID_CODE 0x4 -#define MIIC_MODCTRL 0x20 +#define MIIC_MODCTRL 0x8#define MIIC_MODCTRL_SW_MODE GENMASK(4, 0)#define MIIC_CONVCTRL (port) (0x100 + (port) * 4)
drivers/net/phy/mscc/mscc_ptp.c +8 -10
@@ -455,12 +455,12 @@ static void vsc85xx_dequeue_skb(struct vsc85xx_ptp *ptp) *p++ = (reg >>24 ) &0xff ; } - len =skb_queue_len (&ptp->tx_queue); + len =skb_queue_len_lockless (&ptp->tx_queue);if (len <1 )return ;while (len--) { - skb =__skb_dequeue (&ptp->tx_queue); + skb =skb_dequeue (&ptp->tx_queue);if (!skb)return ;
@@ -485,7 +485,7 @@ static void vsc85xx_dequeue_skb(struct vsc85xx_ptp *ptp)* packet in the FIFO right now, reschedule it for later * packets. */ -__skb_queue_tail (&ptp->tx_queue, skb); +skb_queue_tail (&ptp->tx_queue, skb); } }
@@ -1067,6 +1067,7 @@ static int vsc85xx_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr)case HWTSTAMP_TX_ON :break ;case HWTSTAMP_TX_OFF : +skb_queue_purge (&vsc8531->ptp->tx_queue);break ;default :return -ERANGE ;
@@ -1091,9 +1092,6 @@ static int vsc85xx_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr)mutex_lock (&vsc8531->ts_lock); -__skb_queue_purge (&vsc8531->ptp->tx_queue); -__skb_queue_head_init (&vsc8531->ptp->tx_queue); -/* Disable predictor while configuring the 1588 block */ val =vsc85xx_ts_read_csr (phydev,PROCESSOR ,MSCC_PHY_PTP_INGR_PREDICTOR );
@@ -1179,9 +1177,7 @@ static void vsc85xx_txtstamp(struct mii_timestamper *mii_ts,skb_shinfo (skb)->tx_flags |=SKBTX_IN_PROGRESS ; -mutex_lock (&vsc8531->ts_lock); -__skb_queue_tail (&vsc8531->ptp->tx_queue, skb); -mutex_unlock (&vsc8531->ts_lock); +skb_queue_tail (&vsc8531->ptp->tx_queue, skb);return ; out:
@@ -1547,6 +1543,7 @@ void vsc8584_ptp_deinit(struct phy_device *phydev)if (vsc8531->ptp->ptp_clock) {ptp_clock_unregister (vsc8531->ptp->ptp_clock);skb_queue_purge (&vsc8531->rx_skbs_list); +skb_queue_purge (&vsc8531->ptp->tx_queue); } }
@@ -1570,7 +1567,7 @@ irqreturn_t vsc8584_handle_ts_interrupt(struct phy_device *phydev)if (rc &VSC85XX_1588_INT_FIFO_ADD ) {vsc85xx_get_tx_ts (priv->ptp); }else if (rc &VSC85XX_1588_INT_FIFO_OVERFLOW ) { -__skb_queue_purge (&priv->ptp->tx_queue); +skb_queue_purge (&priv->ptp->tx_queue);vsc85xx_ts_reset_fifo (phydev); }
@@ -1590,6 +1587,7 @@ int vsc8584_ptp_probe(struct phy_device *phydev)mutex_init (&vsc8531->phc_lock);mutex_init (&vsc8531->ts_lock);skb_queue_head_init (&vsc8531->rx_skbs_list); +skb_queue_head_init (&vsc8531->ptp->tx_queue);/* Retrieve the shared load/save GPIO. Request it as non exclusive as * the same GPIO can be requested by all the PHYs of the same package.
drivers/net/ppp/ppp_generic.c +3 -3
@@ -1753,7 +1753,6 @@ pad_compress_skb(struct ppp *ppp, struct sk_buff *skb)*/ if (net_ratelimit ())netdev_err (ppp->dev,"ppp: compressor dropped pkt\n" ); -kfree_skb (skb);consume_skb (new_skb); new_skb =NULL ; }
@@ -1855,9 +1854,10 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb) "down - pkt dropped.\n"); goto drop; } - skb =pad_compress_skb (ppp, skb); -if (!skb) + new_skb =pad_compress_skb (ppp, skb); +if (!new_skb) goto drop; + skb = new_skb; }/*
drivers/net/usb/cdc_ncm.c +7 -0
@@ -2043,6 +2043,13 @@ static const struct usb_device_id cdc_devs[] = { .driver_info = (unsigned long)&wwan_info, }, +/* Intel modem (label from OEM reads Fibocom L850-GL) */ + {USB_DEVICE_AND_INTERFACE_INFO (0x8087 ,0x095a , +USB_CLASS_COMM , + USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE), + .driver_info = (unsigned long)&wwan_info, + }, + /* DisplayLink docking stations */ { .match_flags = USB_DEVICE_ID_MATCH_INT_INFO | USB_DEVICE_ID_MATCH_VENDOR,
drivers/net/vmxnet3/vmxnet3_drv.c +3 -2
@@ -3483,8 +3483,6 @@ vmxnet3_change_mtu(struct net_device *netdev, int new_mtu)struct vmxnet3_adapter *adapter =netdev_priv (netdev);int err =0 ; - netdev->mtu = new_mtu; -/* * Reset_work may be in the middle of resetting the device, wait for its * completion.
@@ -3498,6 +3496,7 @@ vmxnet3_change_mtu(struct net_device *netdev, int new_mtu)/* we need to re-create the rx queue based on the new mtu */ vmxnet3_rq_destroy_all (adapter); + netdev->mtu = new_mtu;vmxnet3_adjust_rx_ring_size (adapter); err =vmxnet3_rq_create_all (adapter);if (err) {
@@ -3514,6 +3513,8 @@ vmxnet3_change_mtu(struct net_device *netdev, int new_mtu) "Closing it\n", err); goto out; } + }else { + netdev->mtu = new_mtu; } out:
drivers/net/wireless/ath/ath11k/core.h +7 -0
@@ -365,6 +365,8 @@ struct ath11k_vif {struct ieee80211_chanctx_conf chanctx;struct ath11k_arp_ns_offload arp_ns_offload;struct ath11k_rekey_data rekey_data; +u32 num_stations; +bool reinstall_group_keys;#ifdef CONFIG_ATH11K_DEBUGFS struct dentry *debugfs_twt;
@@ -1234,6 +1236,11 @@ static inline struct ath11k_vif *ath11k_vif_to_arvif(struct ieee80211_vif *vif)return (struct ath11k_vif *)vif->drv_priv; } +static inline struct ath11k_sta *ath11k_sta_to_arsta (struct ieee80211_sta *sta) +{ +return (struct ath11k_sta *)sta->drv_priv; +} +static inline struct ath11k *ath11k_ab_to_ar (struct ath11k_base *ab,int mac_id) {
drivers/net/wireless/ath/ath11k/debugfs.c +2 -2
@@ -1452,7 +1452,7 @@ static void ath11k_reset_peer_ps_duration(void *data, struct ieee80211_sta *sta) {struct ath11k *ar = data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);spin_lock_bh (&ar->data_lock); arsta->ps_total_duration =0 ;
@@ -1503,7 +1503,7 @@ static void ath11k_peer_ps_state_disable(void *data, struct ieee80211_sta *sta) {struct ath11k *ar = data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);spin_lock_bh (&ar->data_lock); arsta->peer_ps_state =WMI_PEER_PS_STATE_DISABLED ;
drivers/net/wireless/ath/ath11k/debugfs_sta.c +15 -15
@@ -137,7 +137,7 @@ static ssize_t ath11k_dbg_sta_dump_tx_stats(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;struct ath11k_htt_data_stats *stats; static const char *str_name[ATH11K_STATS_TYPE_MAX] = {"succ", "fail",
@@ -244,7 +244,7 @@ static ssize_t ath11k_dbg_sta_dump_rx_stats(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;struct ath11k_rx_peer_stats *rx_stats = arsta->rx_stats;int len =0 , i, retval =0 ;
@@ -341,7 +341,7 @@ static int ath11k_dbg_sta_open_htt_peer_stats(struct inode *inode, struct file *file) { struct ieee80211_sta *sta = inode->i_private; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;struct debug_htt_stats_req *stats_req;int type = ar->debug.htt_stats.type;
@@ -377,7 +377,7 @@ static int ath11k_dbg_sta_release_htt_peer_stats(struct inode *inode, struct file *file) { struct ieee80211_sta *sta = inode->i_private; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;mutex_lock (&ar->conf_mutex);
@@ -414,7 +414,7 @@ static ssize_t ath11k_dbg_sta_write_peer_pktlog(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;int ret, enable;
@@ -454,7 +454,7 @@ static ssize_t ath11k_dbg_sta_read_peer_pktlog(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;char buf[32 ] = {0 };int len;
@@ -481,7 +481,7 @@ static ssize_t ath11k_dbg_sta_write_delba(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;u32 tid, initiator, reason;int ret;
@@ -532,7 +532,7 @@ static ssize_t ath11k_dbg_sta_write_addba_resp(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;u32 tid, status;int ret;
@@ -582,7 +582,7 @@ static ssize_t ath11k_dbg_sta_write_addba(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;u32 tid, buf_size;int ret;
@@ -633,7 +633,7 @@ static ssize_t ath11k_dbg_sta_read_aggr_mode(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;char buf[64 ];int len =0 ;
@@ -653,7 +653,7 @@ static ssize_t ath11k_dbg_sta_write_aggr_mode(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;u32 aggr_mode;int ret;
@@ -698,7 +698,7 @@ ath11k_write_htt_peer_stats_reset(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;struct htt_ext_stats_cfg_params cfg_params = {0 };int ret;
@@ -757,7 +757,7 @@ static ssize_t ath11k_dbg_sta_read_peer_ps_state(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;char buf[20 ];int len;
@@ -784,7 +784,7 @@ static ssize_t ath11k_dbg_sta_read_current_ps_duration(struct file *file, loff_t *ppos) {struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;u64 time_since_station_in_power_save;char buf[20 ];
@@ -818,7 +818,7 @@ static ssize_t ath11k_dbg_sta_read_total_ps_duration(struct file *file, size_t count, loff_t *ppos) { struct ieee80211_sta *sta = file->private_data; -struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (sta);struct ath11k *ar = arsta->arvif->ar;char buf[20 ];u64 power_save_duration;
drivers/net/wireless/ath/ath11k/dp_rx.c +4 -4
@@ -1100,7 +1100,7 @@ int ath11k_dp_rx_ampdu_start(struct ath11k *ar, struct ieee80211_ampdu_params *params) {struct ath11k_base *ab = ar->ab; -struct ath11k_sta *arsta = (void *)params->sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (params->sta);int vdev_id = arsta->arvif->vdev_id;int ret;
@@ -1118,7 +1118,7 @@ int ath11k_dp_rx_ampdu_stop(struct ath11k *ar, {struct ath11k_base *ab = ar->ab;struct ath11k_peer *peer; -struct ath11k_sta *arsta = (void *)params->sta->drv_priv; +struct ath11k_sta *arsta =ath11k_sta_to_arsta (params->sta);int vdev_id = arsta->arvif->vdev_id;dma_addr_t paddr;bool active;
@@ -1460,7 +1460,7 @@ ath11k_update_per_peer_tx_stats(struct ath11k *ar, } sta = peer->sta; - arsta = (struct ath11k_sta *)sta->drv_priv; + arsta =ath11k_sta_to_arsta (sta);memset (&arsta->txrate,0 ,sizeof (arsta->txrate));
@@ -5269,7 +5269,7 @@ int ath11k_dp_rx_process_mon_status(struct ath11k_base *ab, int mac_id, goto next_skb; } - arsta = (struct ath11k_sta *)peer->sta->drv_priv; + arsta =ath11k_sta_to_arsta (peer->sta);ath11k_dp_rx_update_peer_stats (arsta, ppdu_info);if (ath11k_debugfs_is_pktlog_peer_valid (ar, peer->addr))
drivers/net/wireless/ath/ath11k/dp_tx.c +2 -2
@@ -467,7 +467,7 @@ void ath11k_dp_tx_update_txcompl(struct ath11k *ar, struct hal_tx_status *ts) } sta = peer->sta; - arsta = (struct ath11k_sta *)sta->drv_priv; + arsta =ath11k_sta_to_arsta (sta);memset (&arsta->txrate,0 ,sizeof (arsta->txrate)); pkt_type = FIELD_GET(HAL_TX_RATE_STATS_INFO0_PKT_TYPE,
@@ -627,7 +627,7 @@ static void ath11k_dp_tx_complete_msdu(struct ath11k *ar,ieee80211_free_txskb (ar->hw, msdu);return ; } - arsta = (struct ath11k_sta *)peer->sta->drv_priv; + arsta =ath11k_sta_to_arsta (peer->sta); status.sta = peer->sta; status.skb = msdu; status.info = info;
drivers/net/wireless/ath/ath11k/mac.c +339 -249
685 lines not on this page · raw message
drivers/net/wireless/ath/ath11k/peer.c +1 -1
@@ -446,7 +446,7 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif, peer->sec_type_grp =HAL_ENCRYPT_TYPE_OPEN ;if (sta) { - arsta = (struct ath11k_sta *)sta->drv_priv; + arsta =ath11k_sta_to_arsta (sta); arsta->tcl_metadata |=FIELD_PREP (HTT_TCL_META_DATA_TYPE ,0 ) |FIELD_PREP (HTT_TCL_META_DATA_PEER_ID , peer->peer_id);
drivers/net/wireless/ath/ath11k/wmi.c +3 -3
@@ -6452,7 +6452,7 @@ static int ath11k_wmi_tlv_rssi_chain_parse(struct ath11k_base *ab, goto exit; } - arsta = (struct ath11k_sta *)sta->drv_priv; + arsta =ath11k_sta_to_arsta (sta);BUILD_BUG_ON (ARRAY_SIZE (arsta->chain_signal) >ARRAY_SIZE (stats_rssi->rssi_avg_beacon));
@@ -6540,7 +6540,7 @@ static int ath11k_wmi_tlv_fw_stats_data_parse(struct ath11k_base *ab, arvif->bssid, NULL);if (sta) { - arsta = (struct ath11k_sta *)sta->drv_priv; + arsta =ath11k_sta_to_arsta (sta); arsta->rssi_beacon = src->beacon_snr; ath11k_dbg(ab, ATH11K_DBG_WMI, "stats vdev id %d snr %d\n",
@@ -7469,7 +7469,7 @@ static void ath11k_wmi_event_peer_sta_ps_state_chg(struct ath11k_base *ab, goto exit; } - arsta = (struct ath11k_sta *)sta->drv_priv; + arsta =ath11k_sta_to_arsta (sta);spin_lock_bh (&ar->data_lock);
drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c +2 -4
@@ -392,10 +392,8 @@ void brcmf_btcoex_detach(struct brcmf_cfg80211_info *cfg)if (!cfg->btcoex)return ; -if (cfg->btcoex->timer_on) { - cfg->btcoex->timer_on = false; -timer_shutdown_sync (&cfg->btcoex->timer); - } +timer_shutdown_sync (&cfg->btcoex->timer); + cfg->btcoex->timer_on = false;cancel_work_sync (&cfg->btcoex->work);
drivers/net/wireless/marvell/libertas/cfg.c +6 -3
@@ -1150,10 +1150,13 @@ static int lbs_associate(struct lbs_private *priv,/* add SSID TLV */ rcu_read_lock (); ssid_eid =ieee80211_bss_get_ie (bss,WLAN_EID_SSID ); -if (ssid_eid) - pos +=lbs_add_ssid_tlv (pos, ssid_eid +2 , ssid_eid[1 ]); -else +if (ssid_eid) { +u32 ssid_len =min (ssid_eid[1 ],IEEE80211_MAX_SSID_LEN ); + + pos +=lbs_add_ssid_tlv (pos, ssid_eid +2 , ssid_len); + }else {lbs_deb_assoc ("no SSID\n" ); + }rcu_read_unlock ();/* add DS param TLV */
drivers/net/wireless/marvell/mwifiex/cfg80211.c +3 -2
@@ -4316,8 +4316,9 @@ int mwifiex_init_channel_scan_gap(struct mwifiex_adapter *adapter)* additional active scan request for hidden SSIDs on passive channels. */ adapter->num_in_chan_stats =2 * (n_channels_bg + n_channels_a); - adapter->chan_stats =vmalloc (array_size (sizeof (*adapter->chan_stats), - adapter->num_in_chan_stats)); + adapter->chan_stats =kcalloc (adapter->num_in_chan_stats, +sizeof (*adapter->chan_stats), +GFP_KERNEL );if (!adapter->chan_stats)return -ENOMEM ;
drivers/net/wireless/marvell/mwifiex/main.c +2 -2
@@ -664,7 +664,7 @@ static int _mwifiex_fw_dpc(const struct firmware *firmware, void *context) goto done; err_add_intf: -vfree (adapter->chan_stats); +kfree (adapter->chan_stats); err_init_chan_scan:wiphy_unregister (adapter->wiphy);wiphy_free (adapter->wiphy);
@@ -1481,7 +1481,7 @@ static void mwifiex_uninit_sw(struct mwifiex_adapter *adapter)wiphy_free (adapter->wiphy); adapter->wiphy =NULL ; -vfree (adapter->chan_stats); +kfree (adapter->chan_stats);mwifiex_free_cmd_buffers (adapter); }
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c +2 -2
@@ -1616,8 +1616,8 @@ mt7996_mcu_get_mmps_mode(enum ieee80211_smps_mode smps)int mt7996_mcu_set_fixed_rate_ctrl (struct mt7996_dev *dev,void *data,u16 version) { +struct uni_header hdr = {};struct ra_fixed_rate *req; -struct uni_header hdr;struct sk_buff *skb;struct tlv *tlv;int len;
@@ -2638,7 +2638,7 @@ int mt7996_mcu_set_hdr_trans(struct mt7996_dev *dev, bool hdr_trans) {struct {u8 __rsv[4 ]; - } __packed hdr; + } __packed hdr = {};struct hdr_trans_blacklist *req_blacklist;struct hdr_trans_en *req_en;struct sk_buff *skb;
drivers/net/wireless/st/cw1200/sta.c +1 -1
@@ -1290,7 +1290,7 @@ static void cw1200_do_join(struct cw1200_common *priv)rcu_read_lock (); ssidie =ieee80211_bss_get_ie (bss,WLAN_EID_SSID );if (ssidie) { - join.ssid_len = ssidie[1 ]; + join.ssid_len =min (ssidie[1 ],IEEE80211_MAX_SSID_LEN );memcpy (join.ssid, &ssidie[2 ], join.ssid_len); }rcu_read_unlock ();
drivers/pci/msi/msi.c +3 -0
@@ -610,6 +610,9 @@ void msix_prepare_msi_desc(struct pci_dev *dev, struct msi_desc *desc)if (desc->pci.msi_attrib.can_mask) {void __iomem *addr =pci_msix_desc_addr (desc); +/* Workaround for SUN NIU insanity, which requires write before read */ +if (dev->dev_flags &PCI_DEV_FLAGS_MSIX_TOUCH_ENTRY_DATA_FIRST ) +writel (0 , addr +PCI_MSIX_ENTRY_DATA ); desc->pci.msix_ctrl =readl (addr +PCI_MSIX_ENTRY_VECTOR_CTRL ); } }
drivers/pcmcia/omap_cf.c +2 -0
@@ -215,6 +215,8 @@ static int __init omap_cf_probe(struct platform_device *pdev)return -EINVAL ; res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); +if (!res) +return -EINVAL ; cf =kzalloc (sizeof *cf,GFP_KERNEL );if (!cf)
drivers/pcmcia/rsrc_iodyn.c +3 -0
@@ -62,6 +62,9 @@ static struct resource *__iodyn_find_io_region(struct pcmcia_socket *s,unsigned long min = base;int ret; +if (!res) +return NULL ; + data.mask = align -1 ; data.offset = base & data.mask;
drivers/pcmcia/rsrc_nonstatic.c +3 -1
@@ -375,7 +375,9 @@ static int do_validate_mem(struct pcmcia_socket *s,if (validate && !s->fake_cis) {/* move it to the validated data set */ -add_interval (&s_data->mem_db_valid, base, size); + ret =add_interval (&s_data->mem_db_valid, base, size); +if (ret) +return ret;sub_interval (&s_data->mem_db, base, size); }
drivers/platform/x86/amd/pmc/pmc-quirks.c +14 -0
@@ -242,6 +242,20 @@ static const struct dmi_system_id fwbug_list[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Lafite Pro V 14M"), } }, + { + .ident = "TUXEDO InfinityBook Pro 14/15 AMD Gen10", + .driver_data = &quirk_spurious_8042, + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "XxHP4NAx"), + } + }, + { + .ident = "TUXEDO InfinityBook Pro 14/15 AMD Gen10", + .driver_data = &quirk_spurious_8042, + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "XxKK4NAx_XxSP4NAx"), + } + }, {} };
drivers/scsi/lpfc/lpfc_nvmet.c +6 -4
@@ -1243,7 +1243,7 @@ lpfc_nvmet_defer_rcv(struct nvmet_fc_target_port *tgtport,struct lpfc_nvmet_tgtport *tgtp;struct lpfc_async_xchg_ctx *ctxp = container_of(rsp, struct lpfc_async_xchg_ctx, hdlrctx.fcp_req); -struct rqb_dmabuf *nvmebuf = ctxp->rqb_buffer; +struct rqb_dmabuf *nvmebuf;struct lpfc_hba *phba = ctxp->phba;unsigned long iflag;
@@ -1251,13 +1251,18 @@ lpfc_nvmet_defer_rcv(struct nvmet_fc_target_port *tgtport,lpfc_nvmeio_data (phba,"NVMET DEFERRCV: xri x%x sz %d CPU %02x\n" , ctxp->oxid, ctxp->size,raw_smp_processor_id ()); +spin_lock_irqsave (&ctxp->ctxlock, iflag); + nvmebuf = ctxp->rqb_buffer;if (!nvmebuf) { +spin_unlock_irqrestore (&ctxp->ctxlock, iflag);lpfc_printf_log (phba,KERN_INFO ,LOG_NVME_IOERR ,"6425 Defer rcv: no buffer oxid x%x: " "flg %x ste %x\n" , ctxp->oxid, ctxp->flag, ctxp->state);return ; } + ctxp->rqb_buffer =NULL ; +spin_unlock_irqrestore (&ctxp->ctxlock, iflag); tgtp = phba->targetport->private;if (tgtp)
@@ -1265,9 +1270,6 @@ lpfc_nvmet_defer_rcv(struct nvmet_fc_target_port *tgtport,/* Free the nvmebuf since a new buffer already replaced it */ nvmebuf->hrq->rqbp->rqb_free_buffer (phba, nvmebuf); -spin_lock_irqsave (&ctxp->ctxlock, iflag); - ctxp->rqb_buffer =NULL ; -spin_unlock_irqrestore (&ctxp->ctxlock, iflag); }/**
drivers/soc/qcom/mdt_loader.c +7 -5
@@ -38,12 +38,14 @@ static bool mdt_header_valid(const struct firmware *fw)if (phend > fw->size)return false; -if (ehdr->e_shentsize !=sizeof (struct elf32_shdr )) -return false; +if (ehdr->e_shentsize || ehdr->e_shnum) { +if (ehdr->e_shentsize !=sizeof (struct elf32_shdr )) +return false; - shend =size_add (size_mul (sizeof (struct elf32_shdr ), ehdr->e_shnum), ehdr->e_shoff); -if (shend > fw->size) -return false; + shend =size_add (size_mul (sizeof (struct elf32_shdr ), ehdr->e_shnum), ehdr->e_shoff); +if (shend > fw->size) +return false; + }return true; }
drivers/spi/spi-cadence-quadspi.c +1 -5
@@ -1868,8 +1868,6 @@ static int cqspi_probe(struct platform_device *pdev) goto probe_setup_failed; } -pm_runtime_enable (dev); - ret =spi_register_controller (host);if (ret) {dev_err (&pdev->dev,"failed to register SPI ctlr %d\n" , ret);
@@ -1879,7 +1877,6 @@ static int cqspi_probe(struct platform_device *pdev)return 0 ; probe_setup_failed:cqspi_controller_enable (cqspi,0 ); -pm_runtime_disable (dev); probe_reset_failed:if (cqspi->is_jh7110)cqspi_jh7110_disable_clk (pdev, cqspi);
@@ -1901,8 +1898,7 @@ static void cqspi_remove(struct platform_device *pdev)if (cqspi->rx_chan)
Lines of this file are not shown. View the raw message.
drivers/thermal/mediatek/lvts_thermal.c +36 -14
50 lines not on this page · raw message
fs/btrfs/tree-log.c +53 -25
78 lines not on this page · raw message
include/linux/bpf.h +40 -20
60 lines not on this page · raw message
include/net/netlink.h +67 -2
69 lines not on this page · raw message
kernel/bpf/core.c +33 -17
50 lines not on this page · raw message
mm/slub.c +40 -26
66 lines not on this page · raw message
tools/power/cpupower/utils/cpupower-set.c +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/bind_bhash.c +2 -2
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.