Linux 6.6.123
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.123 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
------------
Makefile | 2 arch/arm64/kernel/signal.c | 92 +++-- arch/riscv/include/asm/compat.h | 2 drivers/bluetooth/hci_ldisc.c | 4 drivers/gpio/gpio-pca953x.c | 2 drivers/gpio/gpio-rockchip.c | 8 drivers/gpio/gpiolib-acpi.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 10 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 3 drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 2 drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 2 drivers/gpu/drm/amd/amdgpu/soc21.c | 8 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 2 drivers/gpu/drm/imx/ipuv3/imx-tve.c | 13 drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 2 drivers/gpu/drm/radeon/radeon_fence.c | 8 drivers/misc/mei/mei-trace.h | 18 - drivers/net/bonding/bond_main.c | 18 - drivers/net/bonding/bond_options.c | 8 drivers/net/can/usb/gs_usb.c | 4 drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c | 5 drivers/net/ethernet/intel/ice/ice_main.c | 1 drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c | 2 drivers/net/ethernet/marvell/octeon_ep/octep_main.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 19 - drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 19 - drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c | 2 drivers/net/ethernet/rocker/rocker_main.c | 5 drivers/net/tap.c | 6 drivers/net/team/team.c | 23 - drivers/net/tun.c | 6 drivers/net/wireless/ath/ath11k/dp_rx.c | 10 drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c | 9 drivers/pinctrl/meson/pinctrl-meson.c | 2 drivers/pinctrl/pinctrl-rockchip.c | 9 drivers/pinctrl/qcom/Kconfig | 15 drivers/pinctrl/qcom/Makefile | 1 drivers/pinctrl/qcom/pinctrl-lpass-lpi.c | 17 + drivers/pinctrl/qcom/pinctrl-sc7280-lpass-lpi.c | 3 drivers/pinctrl/qcom/pinctrl-sm8350-lpass-lpi.c | 167 ---------- drivers/scsi/be2iscsi/be_mgmt.c | 1 drivers/scsi/qla2xxx/qla_os.c | 2 drivers/target/sbp/sbp_target.c | 4 fs/btrfs/relocation.c | 13 fs/efivarfs/vars.c | 2 fs/fs-writeback.c | 14 fs/smb/server/mgmt/user_session.c | 21 - fs/smb/server/smb2pdu.c | 9 fs/smb/server/transport_ipc.c | 12 fs/smb/server/transport_rdma.c | 15 include/linux/ptr_ring.h | 17 - include/linux/sched.h | 5 include/linux/skb_array.h | 14 include/net/bonding.h | 13 include/net/nfc/nfc.h | 2 include/net/xdp_sock.h | 3 include/net/xsk_buff_pool.h | 2 kernel/dma/pool.c | 7 kernel/events/callchain.c | 2 kernel/events/core.c | 6 lib/flex_proportions.c | 5 mm/kfence/core.c | 23 + net/bridge/br_input.c | 2 net/core/dev.c | 162 ++------- net/ipv6/icmp.c | 4 net/mac80211/ieee80211_i.h | 4 net/mac80211/mlme.c | 7 net/mac80211/tdls.c | 11 net/mptcp/protocol.c | 13 net/nfc/core.c | 27 + net/nfc/llcp_commands.c | 17 - net/nfc/llcp_core.c | 4 net/nfc/nci/core.c | 4 net/sched/act_ife.c | 6 net/sched/sch_generic.c | 4 net/xdp/xsk.c | 6 net/xdp/xsk_buff_pool.c | 1 scripts/Makefile.build | 2 scripts/generate_rust_analyzer.py | 2 sound/soc/amd/yc/acp6x-mach.c | 8 sound/soc/fsl/imx-card.c | 1 sound/soc/intel/boards/sof_es8336.c | 2 sound/usb/endpoint.c | 3 tools/testing/selftests/bpf/progs/test_select_reuseport_kern.c | 1 tools/testing/selftests/net/mptcp/mptcp_join.sh | 81 ++++ 88 files changed, 570 insertions(+), 537 deletions(-)
Alex Deucher (4):
drm/amdgpu/soc21: fix xclk for APUs drm/amdgpu/gfx10: fix wptr reset in KGQ init drm/amdgpu/gfx11: fix wptr reset in KGQ init drm/amd/display: use udelay rather than fsleep
Alexander Usyskin (1):
mei: trace: treat reg parameter as string
Alexis Lothoré (eBPF Foundation) (1):
bpf/selftests: test_select_reuseport_kern: Remove unused header
Bartosz Golaszewski (2):
pinctrl: meson: mark the GPIO controller as sleeping
pinctrl: lpass-lpi: implement .get_direction() for the GPIO driver
Chen Ni (1):
net/sched: act_ife: convert comma to semicolon
Denis Sergeev (1):
gpiolib: acpi: use BIT_ULL() for u64 mask in address space handler
Eric Dumazet (2):
bonding: annotate data-races around slave->last_rx
ptr_ring: do not block hard interrupts in ptr_ring_resize_multiple()
Fabio Estevam (1):
ASoC: fsl: imx-card: Do not force slot width to sample width
Fernando Fernandez Mancera (1):
ipv6: use the right ifindex when replying to icmpv6 from localhost
Gal Pressman (1):
net/mlx5e: Account for netdev stats in ndo_get_stats64
Greg Kroah-Hartman (3):
Revert "net: Allow to use SMP threads for backlog NAPI." Revert "net: Remove conditional threaded-NAPI wakeup based on task state." Linux 6.6.123
Han Gao (1):
riscv: compat: fix COMPAT_UTS_MACHINE definition
Haoxiang Li (1):
scsi: be2iscsi: Fix a memory leak in beiscsi_boot_get_sinfo()
JP Kobryn (1):
btrfs: prevent use-after-free on page private data in btrfs_subpage_clear_uptodate()
Jan Kara (1):
flex_proportions: make fprop_new_period() hardirq safe
Jesse Brandeburg (1):
ice: stop counting UDP csum mismatch as rx_errors
Jia-Hong Su (1):
Bluetooth: hci_uart: fix null-ptr-deref in hci_uart_write_work
Jianbo Liu (1):
net/mlx5e: Skip ESN replay window setup for IPsec crypto offload
Johan Hovold (2):
drm/imx/tve: fix probe device leak drm/msm/a6xx: fix bogus hwcg register updates
Johannes Berg (1):
wifi: mac80211: move TDLS work to wiphy work
Jon Doron (1):
drm/amdgpu: fix NULL pointer dereference in amdgpu_gmc_filter_faults_remove
Justin Chen (1):
net: bcmasp: fix early exit leak with fixed phy
Kang Yang (1):
wifi: ath11k: add srng->lock for ath11k_hal_srng_* in monitor mode
Kery Qi (3):
net: wwan: t7xx: fix potential skb->frags overflow in RX path
rocker: fix memory leak in rocker_world_port_post_fini()
scsi: firewire: sbp-target: Fix overflow in sbp_make_tpg()
Kohei Enju (1):
efivarfs: fix error propagation in efivar_entry_get()
Krzysztof Kozlowski (1):
pinctrl: qcom: sm8350-lpass-lpi: Merge with SC7280 to fix I2S2 and SWR TX pins
Kuniyuki Iwashima (2):
nfc: llcp: Fix memleak in nfc_llcp_send_ui_frame().
nfc: nci: Fix race between rfkill and nci_unregister_device().
Laveesh Bansal (1):
writeback: fix 100% CPU usage when dirtytime_expire_interval is 0
Marc Kleine-Budde (1):
can: gs_usb: gs_usb_receive_bulk_callback(): fix error message
Marios Makassikis (1):
ksmbd: fix recursive locking in RPC handle list access
Mark Bloch (1):
net/mlx5e: TC, delete flows only for existing peers
Mark Rutland (3):
arm64/fpsimd: signal: Mandate SVE payload for streaming-mode state arm64/fpsimd: signal: Consistently read FPSIMD context arm64/fpsimd: signal: Fix restoration of SVE context
Martin Kaiser (1):
net: bridge: fix static key check
Martin Larsson (1):
gpio: pca953x: mask interrupts in irq shutdown
Matthieu Baerts (NGI0) (5):
mptcp: only reset subflow errors when propagated
selftests: mptcp: check no dup close events after error
selftests: mptcp: check subflow errors in close events
selftests: mptcp: join: fix local endp not being tracked
mptcp: avoid dup SUB_CLOSED events after disconnect
Miguel Ojeda (1):
rust: kbuild: give --config-path to rustfmt in .rsi target
Nikola Z. Ivanov (1):
team: Move team device type change at the end of team_port_add
Philip Yang (1):
drm/amdkfd: Don't use sw fault filter if retry cam enabled
Pimyn Girgis (1):
mm/kfence: randomize the freelist on initialization
Robert McClinton (1):
drm/radeon: delete radeon_fence_process in is_signaled, no deadlock
Robin Murphy (1):
gpio: rockchip: Stop calling pinctrl for set_direction
Sai Sree Kartheek Adivi (1):
dma/pool: distinguish between missing and exhausted atomic pools
Srinivasan Shanmugam (1):
drm/amdgpu: Replace Mutex with Spinlock for RLCG register access to avoid Priority Inversion in SRIOV
Steven Rostedt (1):
perf: sched: Fix perf crash with new is_user_task() helper
Tagir Garaev (1):
ASoC: Intel: sof_es8336: fix headphone GPIO logic inversion
Takashi Iwai (1):
ALSA: usb-audio: Fix missing unlock at error path of maxpacksize check
Tamir Duberstein (1):
scripts: generate_rust_analyzer: Add compiler_builtins -> core dep
Thomas Fourier (2):
scsi: qla2xxx: edif: Fix dma_free_coherent() size
ksmbd: smbd: fix dma_unmap_sg() nents
Yafang Shao (1):
net/mlx5e: Report rx_discards_phy via rx_dropped
Yunseong Kim (1):
ksmbd: Fix race condition in RPC handle list access
Zhang Heng (1):
ASoC: amd: yc: Add DMI quirk for Acer TravelMate P216-41-TCO
Zilin Guan (3):
net/mlx5: Fix memory leak in esw_acl_ingress_lgcy_setup()
octeon_ep: Fix memory leak in octep_device_setup()
net: mvpp2: cls: Fix memory leak in mvpp2_ethtool_cls_rule_ins()
e.kubanski (1):
xsk: Fix race condition in AF_XDP generic RX path
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 122 +SUBLEVEL = 123 EXTRAVERSION = NAME = Pinguïn Aangedreven
arch/arm64/kernel/signal.c +57 -35
148 lines not on this page · raw message
arch/riscv/include/asm/compat.h +1 -1
@@ -2,7 +2,7 @@#ifndef __ASM_COMPAT_H#define __ASM_COMPAT_H -#define COMPAT_UTS_MACHINE "riscv\0\0" +#define COMPAT_UTS_MACHINE "riscv32\0\0"/* * Architecture specific compatibility types
drivers/bluetooth/hci_ldisc.c +2 -2
@@ -682,6 +682,8 @@ static int hci_uart_register_dev(struct hci_uart *hu)return err; } +set_bit (HCI_UART_PROTO_INIT , &hu->flags); +if (test_bit (HCI_UART_INIT_PENDING , &hu->hdev_flags))return 0 ;
@@ -709,8 +711,6 @@ static int hci_uart_set_proto(struct hci_uart *hu, int id) hu->proto = p; -set_bit (HCI_UART_PROTO_INIT , &hu->flags); - err =hci_uart_register_dev (hu);if (err) {return err;
drivers/gpio/gpio-pca953x.c +2 -0
@@ -811,6 +811,8 @@ static void pca953x_irq_shutdown(struct irq_data *d)clear_bit (hwirq, chip->irq_trig_fall);clear_bit (hwirq, chip->irq_trig_level_low);clear_bit (hwirq, chip->irq_trig_level_high); + +pca953x_irq_mask (d); }static void pca953x_irq_print_chip (struct irq_data *data,struct seq_file *p)
drivers/gpio/gpio-rockchip.c +0 -8
@@ -18,7 +18,6 @@#include <linux/of.h> #include <linux/of_address.h> #include <linux/of_irq.h> -#include <linux/pinctrl/consumer.h> #include <linux/pinctrl/pinconf-generic.h> #include <linux/platform_device.h> #include <linux/regmap.h>
@@ -157,12 +156,6 @@ static int rockchip_gpio_set_direction(struct gpio_chip *chip,unsigned long flags;u32 data = input ?0 :1 ; - -if (input) -pinctrl_gpio_direction_input (bank->pin_base + offset); -else -pinctrl_gpio_direction_output (bank->pin_base + offset); -raw_spin_lock_irqsave (&bank->slock, flags);rockchip_gpio_writel_bit (bank, offset, data, bank->gpio_regs->port_ddr);raw_spin_unlock_irqrestore (&bank->slock, flags);
@@ -584,7 +577,6 @@ static int rockchip_gpiolib_register(struct rockchip_pin_bank *bank) gc->ngpio = bank->nr_pins; gc->label = bank->name; gc->parent = bank->dev; - gc->can_sleep = true; ret =gpiochip_add_data (gc, bank);if (ret) {
drivers/gpio/gpiolib-acpi.c +1 -1
@@ -1228,7 +1228,7 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,mutex_unlock (&achip->conn_lock);if (function ==ACPI_WRITE ) -gpiod_set_raw_value_cansleep (desc, !!(*value &BIT (i))); +gpiod_set_raw_value_cansleep (desc, !!(*value &BIT_ULL (i)));else *value |= (u64 )gpiod_get_raw_value_cansleep (desc) << i; }
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +1 -1
@@ -3582,7 +3582,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);
@@ -3604,6 +3603,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);INIT_LIST_HEAD (&adev->shadow_list);mutex_init (&adev->shadow_list_lock);
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c +9 -1
@@ -452,7 +452,15 @@ void amdgpu_gmc_filter_faults_remove(struct amdgpu_device *adev, uint64_t addr,uint32_t hash;uint64_t tmp; - ih = adev->irq.retry_cam_enabled ? &adev->irq.ih_soft : &adev->irq.ih1; +if (adev->irq.retry_cam_enabled) +return ; +else if (adev->irq.ih1.ring_size) + ih = &adev->irq.ih1; +else if (adev->irq.ih_soft.enabled) + ih = &adev->irq.ih_soft; +else +return ; +/* Get the WPTR of the last entry in IH ring */ last_wptr =amdgpu_ih_get_wptr (adev, ih);/* Order wptr with ring data. */
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +3 -2
@@ -1007,6 +1007,7 @@ static u32 amdgpu_virt_rlcg_reg_rw(struct amdgpu_device *adev, u32 offset, u32 vvoid *scratch_reg2;void *scratch_reg3;void *spare_int; +unsigned long flags;if (!adev->gfx.rlc.rlcg_reg_access_supported) { dev_err(adev->dev,
@@ -1028,7 +1029,7 @@ static u32 amdgpu_virt_rlcg_reg_rw(struct amdgpu_device *adev, u32 offset, u32 v 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;
@@ -1086,7 +1087,7 @@ static u32 amdgpu_virt_rlcg_reg_rw(struct amdgpu_device *adev, u32 offset, u32 v 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
@@ -267,7 +267,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/amdgpu/gfx_v10_0.c +1 -1
@@ -6459,7 +6459,7 @@ static int gfx_v10_0_gfx_init_queue(struct amdgpu_ring *ring)memcpy_toio (mqd, adev->gfx.me.mqd_backup[mqd_idx],sizeof (*mqd));/* reset the ring */ ring->wptr =0 ; - *ring->wptr_cpu_addr =0 ; +atomic64_set ((atomic64_t *)ring->wptr_cpu_addr,0 );amdgpu_ring_clear_ring (ring); }
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c +1 -1
@@ -3699,7 +3699,7 @@ static int gfx_v11_0_gfx_init_queue(struct amdgpu_ring *ring)memcpy_toio (mqd, adev->gfx.me.mqd_backup[mqd_idx],sizeof (*mqd));/* reset the ring */ ring->wptr =0 ; - *ring->wptr_cpu_addr =0 ; +atomic64_set ((atomic64_t *)ring->wptr_cpu_addr,0 );amdgpu_ring_clear_ring (ring); }
drivers/gpu/drm/amd/amdgpu/soc21.c +7 -1
@@ -218,7 +218,13 @@ static u32 soc21_get_config_memsize(struct amdgpu_device *adev)static u32 soc21_get_xclk (struct amdgpu_device *adev) { -return adev->clock.spll.reference_freq; +u32 reference_clock = adev->clock.spll.reference_freq; + +/* reference clock is actually 99.81 Mhz rather than 100 Mhz */ +if ((adev->flags &AMD_IS_APU ) && reference_clock ==10000 ) +return 9981 ; + +return reference_clock; }
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +1 -1
@@ -781,7 +781,7 @@ enum dc_status dcn20_enable_stream_timing(return DC_ERROR_UNEXPECTED ; } -fsleep (stream->timing.v_total * (stream->timing.h_total *10000u / stream->timing.pix_clk_100hz)); +udelay (stream->timing.v_total * (stream->timing.h_total *10000u / stream->timing.pix_clk_100hz)); params.vertical_total_min = stream->adjust.v_total_min; params.vertical_total_max = stream->adjust.v_total_max;
drivers/gpu/drm/imx/ipuv3/imx-tve.c +13 -0
@@ -521,6 +521,13 @@ static const struct component_ops imx_tve_ops = { .bind = imx_tve_bind, }; +static void imx_tve_put_device (void *_dev) +{ +struct device *dev = _dev; + +put_device (dev); +} +static int imx_tve_probe (struct platform_device *pdev) {struct device *dev = &pdev->dev;
@@ -542,6 +549,12 @@ static int imx_tve_probe(struct platform_device *pdev)if (ddc_node) { tve->ddc =of_find_i2c_adapter_by_node (ddc_node);of_node_put (ddc_node); +if (tve->ddc) { + ret =devm_add_action_or_reset (dev, imx_tve_put_device, + &tve->ddc->dev); +if (ret) +return ret; + } } tve->mode =of_get_tve_mode (np);
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +0 -2
@@ -690,8 +690,6 @@ const struct adreno_reglist a690_hwcg[] = { {REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111}, {REG_A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555}, {REG_A6XX_GPU_GMU_AO_GMU_CGC_MODE_CNTL, 0x20200}, - {REG_A6XX_GPU_GMU_AO_GMU_CGC_DELAY_CNTL, 0x10111}, - {REG_A6XX_GPU_GMU_AO_GMU_CGC_HYST_CNTL, 0x5555}, {} };
drivers/gpu/drm/radeon/radeon_fence.c +0 -8
@@ -362,14 +362,6 @@ static bool radeon_fence_is_signaled(struct dma_fence *f)return true; } -if (down_read_trylock (&rdev->exclusive_lock)) { -radeon_fence_process (rdev, ring); -up_read (&rdev->exclusive_lock); - -if (atomic64_read (&rdev->fence_drv[ring].last_seq) >= seq) { -return true; - } - }return false; }
drivers/misc/mei/mei-trace.h +9 -9
@@ -21,18 +21,18 @@ TRACE_EVENT(mei_reg_read, TP_ARGS(dev, reg, offs, val),TP_STRUCT__entry (__string (dev ,dev_name (dev )) - __field(const char *, reg) +__string (reg, reg)__field (u32, offs)__field (u32, val) ),TP_fast_assign ( __assign_str(dev, dev_name(dev)); - __entry->reg = reg; +__assign_str (reg, reg); __entry->offs = offs; __entry->val = val; ),TP_printk ("[%s] read %s:[%#x] = %#x" , -__get_str (dev), __entry->reg, __entry->offs, __entry->val) +__get_str (dev),__get_str (reg), __entry->offs, __entry->val) ); TRACE_EVENT(mei_reg_write,
@@ -40,18 +40,18 @@ TRACE_EVENT(mei_reg_write, TP_ARGS(dev, reg, offs, val),TP_STRUCT__entry (__string (dev ,dev_name (dev )) - __field(const char *, reg) +__string (reg, reg)__field (u32, offs)__field (u32, val) ),TP_fast_assign ( __assign_str(dev, dev_name(dev)); - __entry->reg = reg; +__assign_str (reg, reg); __entry->offs = offs; __entry->val = val; ),TP_printk ("[%s] write %s[%#x] = %#x" , -__get_str (dev), __entry->reg, __entry->offs, __entry->val) +__get_str (dev),__get_str (reg), __entry->offs, __entry->val) ); TRACE_EVENT(mei_pci_cfg_read,
@@ -59,18 +59,18 @@ TRACE_EVENT(mei_pci_cfg_read,TP_ARGS (dev, reg, offs, val),TP_STRUCT__entry ( __string(dev, dev_name(dev)) - __field(const char *, reg) + __string(reg, reg) __field(u32, offs)__field (u32, val) ),TP_fast_assign ( __assign_str(dev, dev_name(dev)); - __entry->reg = reg; +__assign_str (reg, reg); __entry->offs = offs; __entry->val = val; ),TP_printk ("[%s] pci cfg read %s:[%#x] = %#x" , -__get_str (dev), __entry->reg, __entry->offs, __entry->val) +__get_str (dev),__get_str (reg), __entry->offs, __entry->val) );#endif /* _MEI_TRACE_H_ */
drivers/net/bonding/bond_main.c +10 -8
@@ -3137,8 +3137,8 @@ static void bond_validate_arp(struct bonding *bond, struct slave *slave, __be32 __func__, &sip);return ; } - slave->last_rx = jiffies; - slave->target_last_arp_rx[i] = jiffies; +WRITE_ONCE (slave->last_rx, jiffies); +WRITE_ONCE (slave->target_last_arp_rx[i], jiffies); } static int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond,
@@ -3357,8 +3357,8 @@ static void bond_validate_na(struct bonding *bond, struct slave *slave, __func__, saddr);return ; } - slave->last_rx = jiffies; - slave->target_last_arp_rx[i] = jiffies; +WRITE_ONCE (slave->last_rx, jiffies); +WRITE_ONCE (slave->target_last_arp_rx[i], jiffies); } static int bond_na_rcv(const struct sk_buff *skb, struct bonding *bond,
@@ -3428,7 +3428,7 @@ int bond_rcv_validate(const struct sk_buff *skb, struct bonding *bond, (slave_do_arp_validate_only(bond) && is_ipv6) || #endif !slave_do_arp_validate_only(bond)) - slave->last_rx = jiffies; +WRITE_ONCE (slave->last_rx, jiffies); return RX_HANDLER_ANOTHER; }else if (is_arp) {return bond_arp_rcv (skb, bond, slave);
@@ -3496,7 +3496,7 @@ static void bond_loadbalance_arp_mon(struct bonding *bond)if (slave->link !=BOND_LINK_UP ) {if (bond_time_in_interval (bond, last_tx,1 ) && -bond_time_in_interval (bond, slave->last_rx,1 )) { +bond_time_in_interval (bond,READ_ONCE (slave->last_rx),1 )) {bond_propose_link_state (slave,BOND_LINK_UP ); slave_state_changed =1 ;
@@ -3520,8 +3520,10 @@ static void bond_loadbalance_arp_mon(struct bonding *bond)* when the source ip is 0, so don't take the link down * if we don't know our ip yet */ -if (!bond_time_in_interval (bond, last_tx, bond->params.missed_max) || - !bond_time_in_interval (bond, slave->last_rx, bond->params.missed_max)) { +if (!bond_time_in_interval (bond, last_tx, + bond->params.missed_max) || + !bond_time_in_interval (bond,READ_ONCE (slave->last_rx), + bond->params.missed_max)) {bond_propose_link_state (slave,BOND_LINK_DOWN ); slave_state_changed =1 ;
drivers/net/bonding/bond_options.c +4 -4
@@ -1124,7 +1124,7 @@ static void _bond_options_arp_ip_target_set(struct bonding *bond, int slot,if (slot >=0 && slot <BOND_MAX_ARP_TARGETS ) {bond_for_each_slave (bond, slave, iter) - slave->target_last_arp_rx[slot] = last_rx; +WRITE_ONCE (slave->target_last_arp_rx[slot], last_rx); targets[slot] = target; } }
@@ -1193,8 +1193,8 @@ static int bond_option_arp_ip_target_rem(struct bonding *bond, __be32 target)bond_for_each_slave (bond, slave, iter) { targets_rx = slave->target_last_arp_rx;for (i = ind; (i <BOND_MAX_ARP_TARGETS -1 ) && targets[i+1 ]; i++) - targets_rx[i] = targets_rx[i+1 ]; - targets_rx[i] =0 ; +WRITE_ONCE (targets_rx[i],READ_ONCE (targets_rx[i+1 ])); +WRITE_ONCE (targets_rx[i],0 ); }for (i = ind; (i <BOND_MAX_ARP_TARGETS -1 ) && targets[i+1 ]; i++) targets[i] = targets[i+1 ];
@@ -1349,7 +1349,7 @@ static void _bond_options_ns_ip6_target_set(struct bonding *bond, int slot,if (slot >=0 && slot <BOND_MAX_NS_TARGETS ) {bond_for_each_slave (bond, slave, iter) { - slave->target_last_arp_rx[slot] = last_rx; +WRITE_ONCE (slave->target_last_arp_rx[slot], last_rx);slave_set_ns_maddr (bond, slave, target, &targets[slot]); } targets[slot] = *target;
drivers/net/can/usb/gs_usb.c +2 -2
@@ -607,7 +607,7 @@ static void gs_usb_receive_bulk_callback(struct urb *urb) {struct gs_usb *parent = urb->context;struct gs_can *dev; -struct net_device *netdev; +struct net_device *netdev =NULL ;int rc;struct net_device_stats *stats;struct gs_host_frame *hf = urb->transfer_buffer;
@@ -765,7 +765,7 @@ static void gs_usb_receive_bulk_callback(struct urb *urb) } }else if (rc != -ESHUTDOWN &&net_ratelimit ()) {netdev_info (netdev,"failed to re-submit IN URB: %pe\n" , -ERR_PTR (urb->status)); +ERR_PTR (rc)); } }
drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c +4 -1
@@ -1272,7 +1272,7 @@ struct bcmasp_intf *bcmasp_interface_create(struct bcmasp_priv *priv,netdev_err (intf->ndev,"invalid PHY mode: %s for port %d\n" ,phy_modes (intf->phy_interface), intf->port); ret = -EINVAL ; - goto err_free_netdev; + goto err_deregister_fixed_link; } ret =of_get_ethdev_address (ndev_dn, ndev);
@@ -1295,6 +1295,9 @@ struct bcmasp_intf *bcmasp_interface_create(struct bcmasp_priv *priv,return intf; +err_deregister_fixed_link: +if (of_phy_is_fixed_link (ndev_dn)) +of_phy_deregister_fixed_link (ndev_dn); err_free_netdev:free_netdev (ndev); err:
drivers/net/ethernet/intel/ice/ice_main.c +0 -1
@@ -6711,7 +6711,6 @@ void ice_update_vsi_stats(struct ice_vsi *vsi) pf->stats.illegal_bytes + pf->stats.rx_len_errors + pf->stats.rx_undersize + - pf->hw_csum_rx_error + pf->stats.rx_jabber + pf->stats.rx_fragments + pf->stats.rx_oversize;
drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c +1 -1
@@ -1389,7 +1389,7 @@ int mvpp2_ethtool_cls_rule_ins(struct mvpp2_port *port, efs->rule.flow_type =mvpp2_cls_ethtool_flow_to_type (info->fs.flow_type);if (efs->rule.flow_type <0 ) { ret = efs->rule.flow_type; - goto clean_rule; + goto clean_eth_rule; } ret =mvpp2_cls_rfs_parse_rule (&efs->rule);
drivers/net/ethernet/marvell/octeon_ep/octep_main.c +1 -1
@@ -998,7 +998,7 @@ int octep_device_setup(struct octep_device *oct) ret =octep_ctrl_net_init (oct);if (ret) -return ret; + goto unsupported_dev;atomic_set (&oct->hb_miss_cnt,0 );INIT_DELAYED_WORK (&oct->hb_task, octep_hb_timeout_task);
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c +2 -1
@@ -350,7 +350,8 @@ void mlx5e_ipsec_build_accel_xfrm_attrs(struct mlx5e_ipsec_sa_entry *sa_entry, attrs->replay_esn.esn = sa_entry->esn_state.esn; attrs->replay_esn.esn_msb = sa_entry->esn_state.esn_msb; attrs->replay_esn.overlap = sa_entry->esn_state.overlap; -if (attrs->dir ==XFRM_DEV_OFFLOAD_OUT ) +if (attrs->dir ==XFRM_DEV_OFFLOAD_OUT || + x->xso.type !=XFRM_DEV_OFFLOAD_PACKET ) goto skip_replay_window;switch (x->replay_esn->replay_window) {
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +11 -8
@@ -3743,6 +3743,8 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)mlx5e_queue_update_stats (priv); } +netdev_stats_to_stats64 (stats, &dev->stats); +if (mlx5e_is_uplink_rep (priv)) {struct mlx5e_vport_stats *vstats = &priv->stats.vport;
@@ -3759,20 +3761,21 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)mlx5e_fold_sw_stats64 (priv, stats); } - stats->rx_missed_errors = priv->stats.qcnt.rx_out_of_buffer; + stats->rx_missed_errors += priv->stats.qcnt.rx_out_of_buffer; + stats->rx_dropped +=PPORT_2863_GET (pstats, if_in_discards); - stats->rx_length_errors = + stats->rx_length_errors +=PPORT_802_3_GET (pstats, a_in_range_length_errors) +PPORT_802_3_GET (pstats, a_out_of_range_length_field) +PPORT_802_3_GET (pstats, a_frame_too_long_errors) +VNIC_ENV_GET (&priv->stats.vnic, eth_wqe_too_small); - stats->rx_crc_errors = + stats->rx_crc_errors +=PPORT_802_3_GET (pstats, a_frame_check_sequence_errors); - stats->rx_frame_errors =PPORT_802_3_GET (pstats, a_alignment_errors); - stats->tx_aborted_errors =PPORT_2863_GET (pstats, if_out_discards); - stats->rx_errors = stats->rx_length_errors + stats->rx_crc_errors + - stats->rx_frame_errors; - stats->tx_errors = stats->tx_aborted_errors + stats->tx_carrier_errors; + stats->rx_frame_errors +=PPORT_802_3_GET (pstats, a_alignment_errors); + stats->tx_aborted_errors +=PPORT_2863_GET (pstats, if_out_discards); + stats->rx_errors += stats->rx_length_errors + stats->rx_crc_errors + + stats->rx_frame_errors; + stats->tx_errors += stats->tx_aborted_errors + stats->tx_carrier_errors; }static void mlx5e_nic_set_rx_mode (struct mlx5e_priv *priv)
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +13 -6
@@ -2025,11 +2025,14 @@ static void mlx5e_tc_del_fdb_peer_flow(struct mlx5e_tc_flow *flow,static void mlx5e_tc_del_fdb_peers_flow (struct mlx5e_tc_flow *flow) { +struct mlx5_devcom_comp_dev *devcom; +struct mlx5_devcom_comp_dev *pos; +struct mlx5_eswitch *peer_esw;int i; -for (i =0 ; i <MLX5_MAX_PORTS ; i++) { -if (i ==mlx5_get_dev_index (flow->priv->mdev)) -continue ; + devcom = flow->priv->mdev->priv.eswitch->devcom; +mlx5_devcom_for_each_peer_entry (devcom, peer_esw, pos) { + i =mlx5_get_dev_index (peer_esw->dev);mlx5e_tc_del_fdb_peer_flow (flow, i); } }
@@ -5404,12 +5407,16 @@ int mlx5e_tc_num_filters(struct mlx5e_priv *priv, unsigned long flags)void mlx5e_tc_clean_fdb_peer_flows (struct mlx5_eswitch *esw) { +struct mlx5_devcom_comp_dev *devcom; +struct mlx5_devcom_comp_dev *pos;struct mlx5e_tc_flow *flow, *tmp; +struct mlx5_eswitch *peer_esw;int i; -for (i =0 ; i <MLX5_MAX_PORTS ; i++) { -if (i ==mlx5_get_dev_index (esw->dev)) -continue ; + devcom = esw->devcom; + +mlx5_devcom_for_each_peer_entry (devcom, peer_esw, pos) { + i =mlx5_get_dev_index (peer_esw->dev);list_for_each_entry_safe (flow, tmp, &esw->offloads.peer_flows[i], peer[i])mlx5e_tc_del_fdb_peers_flow (flow); }
drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c +1 -1
@@ -188,7 +188,7 @@ int esw_acl_ingress_lgcy_setup(struct mlx5_eswitch *esw,if (IS_ERR (vport->ingress.acl)) { err =PTR_ERR (vport->ingress.acl); vport->ingress.acl =NULL ; -return err; + goto out; } err =esw_acl_ingress_lgcy_groups_create (esw, vport);
drivers/net/ethernet/rocker/rocker_main.c +2 -3
@@ -1525,9 +1525,8 @@ static void rocker_world_port_post_fini(struct rocker_port *rocker_port) {struct rocker_world_ops *wops = rocker_port->rocker->wops; -if (!wops->port_post_fini) -return ; - wops->port_post_fini (rocker_port); +if (wops->port_post_fini) + wops->port_post_fini (rocker_port);kfree (rocker_port->wpriv); }
drivers/net/tap.c +3 -3
@@ -1330,9 +1330,9 @@ int tap_queue_resize(struct tap_dev *tap)list_for_each_entry (q, &tap->queue_list, next) rings[i++] = &q->ring; - ret =ptr_ring_resize_multiple (rings, n, - dev->tx_queue_len,GFP_KERNEL , - __skb_array_destroy_skb); + ret =ptr_ring_resize_multiple_bh (rings, n, + dev->tx_queue_len,GFP_KERNEL , + __skb_array_destroy_skb);kfree (rings);return ret;
drivers/net/team/team.c +15 -8
@@ -1184,10 +1184,6 @@ static int team_port_add(struct team *team, struct net_device *port_dev,return -EPERM ; } - err =team_dev_type_check_change (dev, port_dev); -if (err) -return err; -if (port_dev->flags &IFF_UP ) {NL_SET_ERR_MSG (extack,"Device is up. Set it down before adding it as a team port" ); netdev_err(dev, "Device %s is up. Set it down before adding it as a team port\n",
@@ -1205,10 +1201,16 @@ static int team_port_add(struct team *team, struct net_device *port_dev,INIT_LIST_HEAD (&port->qom_list); port->orig.mtu = port_dev->mtu; - err =dev_set_mtu (port_dev, dev->mtu); -if (err) { -netdev_dbg (dev,"Error %d calling dev_set_mtu\n" , err); - goto err_set_mtu; +/* +* MTU assignment will be handled in team_dev_type_check_change +* if dev and port_dev are of different types +*/ +if (dev->type == port_dev->type) { + err =dev_set_mtu (port_dev, dev->mtu); +if (err) { +netdev_dbg (dev,"Error %d calling dev_set_mtu\n" , err); + goto err_set_mtu; + } }memcpy (port->orig.dev_addr, port_dev->dev_addr, port_dev->addr_len);
@@ -1283,6 +1285,10 @@ static int team_port_add(struct team *team, struct net_device *port_dev, } } + err =team_dev_type_check_change (dev, port_dev); +if (err) + goto err_set_dev_type; +if (dev->flags &IFF_UP ) {netif_addr_lock_bh (dev);dev_uc_sync_multiple (port_dev, dev);
@@ -1301,6 +1307,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev,return 0 ; +err_set_dev_type: err_set_slave_promisc:__team_option_inst_del_port (team, port);
drivers/net/tun.c +3 -3
@@ -3682,9 +3682,9 @@ static int tun_queue_resize(struct tun_struct *tun)list_for_each_entry (tfile, &tun->disabled, next) rings[i++] = &tfile->tx_ring; - ret =ptr_ring_resize_multiple (rings, n, - dev->tx_queue_len,GFP_KERNEL , - tun_ptr_free); + ret =ptr_ring_resize_multiple_bh (rings, n, + dev->tx_queue_len,GFP_KERNEL , + tun_ptr_free);kfree (rings);return ret;
drivers/net/wireless/ath/ath11k/dp_rx.c +8 -2
@@ -5093,7 +5093,7 @@ static void ath11k_dp_rx_mon_dest_process(struct ath11k *ar, int mac_id,struct ath11k_mon_data *pmon = (struct ath11k_mon_data *)&dp->mon_data;const struct ath11k_hw_hal_params *hal_params;void *ring_entry; -void *mon_dst_srng; +struct hal_srng *mon_dst_srng;u32 ppdu_id;u32 rx_bufs_used;u32 ring_id;
@@ -5117,6 +5117,7 @@ static void ath11k_dp_rx_mon_dest_process(struct ath11k *ar, int mac_id,spin_lock_bh (&pmon->mon_lock); +spin_lock_bh (&mon_dst_srng->lock);ath11k_hal_srng_access_begin (ar->ab, mon_dst_srng); ppdu_id = pmon->mon_ppdu_info.ppdu_id;
@@ -5175,6 +5176,7 @@ static void ath11k_dp_rx_mon_dest_process(struct ath11k *ar, int mac_id, mon_dst_srng); }ath11k_hal_srng_access_end (ar->ab, mon_dst_srng); +spin_unlock_bh (&mon_dst_srng->lock);spin_unlock_bh (&pmon->mon_lock);
@@ -5564,7 +5566,7 @@ static int ath11k_dp_full_mon_process_rx(struct ath11k_base *ab, int mac_id,struct hal_sw_mon_ring_entries *sw_mon_entries;struct ath11k_pdev_mon_stats *rx_mon_stats;struct sk_buff *head_msdu, *tail_msdu; -void *mon_dst_srng = &ar->ab->hal.srng_list[dp->rxdma_mon_dst_ring.ring_id]; +struct hal_srng *mon_dst_srng;void *ring_entry;u32 rx_bufs_used =0 , mpdu_rx_bufs_used;int quota =0 , ret;
@@ -5580,6 +5582,9 @@ static int ath11k_dp_full_mon_process_rx(struct ath11k_base *ab, int mac_id, goto reap_status_ring; } + mon_dst_srng = &ar->ab->hal.srng_list[dp->rxdma_mon_dst_ring.ring_id]; +spin_lock_bh (&mon_dst_srng->lock); +ath11k_hal_srng_access_begin (ar->ab, mon_dst_srng);while ((ring_entry =ath11k_hal_srng_dst_peek (ar->ab, mon_dst_srng))) { head_msdu =NULL ;
@@ -5623,6 +5628,7 @@ static int ath11k_dp_full_mon_process_rx(struct ath11k_base *ab, int mac_id, }ath11k_hal_srng_access_end (ar->ab, mon_dst_srng); +spin_unlock_bh (&mon_dst_srng->lock);spin_unlock_bh (&pmon->mon_lock);if (rx_bufs_used) {
drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c +7 -2
@@ -394,6 +394,7 @@ static int t7xx_dpmaif_set_frag_to_skb(const struct dpmaif_rx_queue *rxq, struct sk_buff *skb) {unsigned long long data_bus_addr, data_base_addr; +struct skb_shared_info *shinfo =skb_shinfo (skb);struct device *dev = rxq->dpmaif_ctrl->dev;struct dpmaif_bat_page *page_info;unsigned int data_len;
@@ -401,18 +402,22 @@ static int t7xx_dpmaif_set_frag_to_skb(const struct dpmaif_rx_queue *rxq, page_info = rxq->bat_frag->bat_skb; page_info +=t7xx_normal_pit_bid (pkt_info); -dma_unmap_page (dev, page_info->data_bus_addr, page_info->data_len,DMA_FROM_DEVICE );if (!page_info->page)return -EINVAL ; +if (shinfo->nr_frags >=MAX_SKB_FRAGS ) +return -EINVAL ; + +dma_unmap_page (dev, page_info->data_bus_addr, page_info->data_len,DMA_FROM_DEVICE ); + data_bus_addr =le32_to_cpu (pkt_info->pd.data_addr_h); data_bus_addr = (data_bus_addr <<32 ) +le32_to_cpu (pkt_info->pd.data_addr_l); data_base_addr = page_info->data_bus_addr; data_offset = data_bus_addr - data_base_addr; data_offset += page_info->offset; data_len =FIELD_GET (PD_PIT_DATA_LEN ,le32_to_cpu (pkt_info->header)); -skb_add_rx_frag (skb,skb_shinfo (skb)->nr_frags, page_info->page, +skb_add_rx_frag (skb, shinfo->nr_frags, page_info->page, data_offset, data_len, page_info->data_len); page_info->page =NULL ;
drivers/pinctrl/meson/pinctrl-meson.c +1 -1
@@ -618,7 +618,7 @@ static int meson_gpiolib_register(struct meson_pinctrl *pc) pc->chip.set = meson_gpio_set; pc->chip.base =-1 ; pc->chip.ngpio = pc->data->num_pins; - pc->chip.can_sleep = false; + pc->chip.can_sleep = true; ret =gpiochip_add_data (&pc->chip, pc);if (ret) {
drivers/pinctrl/pinctrl-rockchip.c +4 -5
@@ -2749,10 +2749,9 @@ static int rockchip_pmx_set(struct pinctrl_dev *pctldev, unsigned selector,return 0 ; } -static int rockchip_pmx_gpio_set_direction (struct pinctrl_dev *pctldev, -struct pinctrl_gpio_range *range, -unsigned offset, -bool input) +static int rockchip_pmx_gpio_request_enable (struct pinctrl_dev *pctldev, +struct pinctrl_gpio_range *range, +unsigned int offset) {struct rockchip_pinctrl *info =pinctrl_dev_get_drvdata (pctldev);struct rockchip_pin_bank *bank;
@@ -2766,7 +2765,7 @@ static const struct pinmux_ops rockchip_pmx_ops = { .get_function_name = rockchip_pmx_get_func_name, .get_function_groups = rockchip_pmx_get_groups, .set_mux = rockchip_pmx_set, - .gpio_set_direction = rockchip_pmx_gpio_set_direction, + .gpio_request_enable = rockchip_pmx_gpio_request_enable, };/*
drivers/pinctrl/qcom/Kconfig +3 -12
@@ -60,13 +60,14 @@ config PINCTRL_LPASS_LPI (Low Power Island) found on the Qualcomm Technologies Inc SoCs. config PINCTRL_SC7280_LPASS_LPI - tristate "Qualcomm Technologies Inc SC7280 LPASS LPI pin controller driver" + tristate "Qualcomm Technologies Inc SC7280 and SM8350 LPASS LPI pin controller driver" depends on ARM64 || COMPILE_TEST depends on PINCTRL_LPASS_LPI help This is the pinctrl, pinmux, pinconf and gpiolib driver for the Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI - (Low Power Island) found on the Qualcomm Technologies Inc SC7280 platform. + (Low Power Island) found on the Qualcomm Technologies Inc SC7280 + and SM8350 platforms. config PINCTRL_SM6115_LPASS_LPI tristate "Qualcomm Technologies Inc SM6115 LPASS LPI pin controller driver"
@@ -86,16 +87,6 @@ config PINCTRL_SM8250_LPASS_LPI Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI (Low Power Island) found on the Qualcomm Technologies Inc SM8250 platform. -config PINCTRL_SM8350_LPASS_LPI - tristate "Qualcomm Technologies Inc SM8350 LPASS LPI pin controller driver" - depends on ARM64 || COMPILE_TEST - depends on PINCTRL_LPASS_LPI - help - This is the pinctrl, pinmux, pinconf and gpiolib driver for the - Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI - (Low Power Island) found on the Qualcomm Technologies Inc SM8350 - platform. - config PINCTRL_SM8450_LPASS_LPI tristate "Qualcomm Technologies Inc SM8450 LPASS LPI pin controller driver" depends on ARM64 || COMPILE_TEST
drivers/pinctrl/qcom/Makefile +0 -1
@@ -53,7 +53,6 @@ obj-$(CONFIG_PINCTRL_SM8150) += pinctrl-sm8150.o obj-$(CONFIG_PINCTRL_SM8250) += pinctrl-sm8250.o obj-$(CONFIG_PINCTRL_SM8250_LPASS_LPI) += pinctrl-sm8250-lpass-lpi.o obj-$(CONFIG_PINCTRL_SM8350) += pinctrl-sm8350.o -obj-$(CONFIG_PINCTRL_SM8350_LPASS_LPI) += pinctrl-sm8350-lpass-lpi.o obj-$(CONFIG_PINCTRL_SM8450) += pinctrl-sm8450.o obj-$(CONFIG_PINCTRL_SM8450_LPASS_LPI) += pinctrl-sm8450-lpass-lpi.o obj-$(CONFIG_PINCTRL_SM8550) += pinctrl-sm8550.o
drivers/pinctrl/qcom/pinctrl-lpass-lpi.c +17 -0
@@ -279,6 +279,22 @@ static const struct pinconf_ops lpi_gpio_pinconf_ops = { .pin_config_group_set = lpi_config_set, }; +static int lpi_gpio_get_direction (struct gpio_chip *chip,unsigned int pin) +{ +unsigned long config =pinconf_to_config_packed (PIN_CONFIG_OUTPUT ,0 ); +struct lpi_pinctrl *state =gpiochip_get_data (chip); +unsigned long arg; +int ret; + + ret =lpi_config_get (state->ctrl, pin, &config); +if (ret) +return ret; + + arg =pinconf_to_config_argument (config); + +return arg ?GPIO_LINE_DIRECTION_OUT :GPIO_LINE_DIRECTION_IN ; +} +static int lpi_gpio_direction_input (struct gpio_chip *chip,unsigned int pin) {struct lpi_pinctrl *state =gpiochip_get_data (chip);
@@ -377,6 +393,7 @@ static void lpi_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)#endif static const struct gpio_chip lpi_gpio_template = { + .get_direction = lpi_gpio_get_direction, .direction_input = lpi_gpio_direction_input, .direction_output = lpi_gpio_direction_output, .get = lpi_gpio_get,
drivers/pinctrl/qcom/pinctrl-sc7280-lpass-lpi.c +3 -0
@@ -147,6 +147,9 @@ static const struct of_device_id lpi_pinctrl_of_match[] = { { .compatible = "qcom,sc7280-lpass-lpi-pinctrl", .data = &sc7280_lpi_data, + }, { + .compatible = "qcom,sm8350-lpass-lpi-pinctrl", + .data = &sc7280_lpi_data, }, { } };
drivers/pinctrl/qcom/pinctrl-sm8350-lpass-lpi.c deleted +0 -167
167 lines not on this page · raw message
drivers/scsi/be2iscsi/be_mgmt.c +1 -0
@@ -1025,6 +1025,7 @@ unsigned int beiscsi_boot_get_sinfo(struct beiscsi_hba *phba) &nonemb_cmd->dma, GFP_KERNEL);if (!nonemb_cmd->va) { +free_mcc_wrb (ctrl, tag);mutex_unlock (&ctrl->mbox_lock);return 0 ; }
drivers/scsi/qla2xxx/qla_os.c +1 -1
@@ -4482,7 +4482,7 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len, fail_elsrej:dma_pool_destroy (ha->purex_dma_pool); fail_flt: -dma_free_coherent (&ha->pdev->dev,SFP_DEV_SIZE , +dma_free_coherent (&ha->pdev->dev,sizeof (struct qla_flt_header ) +FLT_REGIONS_SIZE , ha->flt, ha->flt_dma); fail_flt_buffer:
drivers/target/sbp/sbp_target.c +2 -2
@@ -1961,12 +1961,12 @@ static struct se_portal_group *sbp_make_tpg(struct se_wwn *wwn, container_of(wwn, struct sbp_tport, tport_wwn);struct sbp_tpg *tpg; -unsigned long tpgt; +u16 tpgt;int ret;if (strstr (name,"tpgt_" ) != name)return ERR_PTR (-EINVAL ); -if (kstrtoul (name +5 ,10 , &tpgt) || tpgt >UINT_MAX ) +if (kstrtou16 (name +5 ,10 , &tpgt))return ERR_PTR (-EINVAL );if (tport->tpg) {
fs/btrfs/relocation.c +13 -0
@@ -2847,6 +2847,19 @@ static noinline_for_stack int prealloc_file_extent_cluster(* will re-read the whole page anyway. */ if (page) { +/* +* releasepage() could have cleared the page private data while +* we were not holding the lock. Reset the mapping if needed so +* subpage operations can access a valid private page state. +*/ + ret =set_page_extent_mapped (page); +if (ret) { +unlock_page (page); +put_page (page); + +return ret; + } +btrfs_subpage_clear_uptodate (fs_info, page, i_size,round_up (i_size,PAGE_SIZE ) - i_size);unlock_page (page);
fs/efivarfs/vars.c +1 -1
@@ -609,7 +609,7 @@ int efivar_entry_get(struct efivar_entry *entry, u32 *attributes, err =__efivar_entry_get (entry, attributes, size, data);efivar_unlock (); -return 0 ; +return err; }/**
fs/fs-writeback.c +10 -4
@@ -2382,12 +2382,14 @@ static void wakeup_dirtytime_writeback(struct work_struct *w)wb_wakeup (wb); }rcu_read_unlock (); -schedule_delayed_work (&dirtytime_work, dirtytime_expire_interval *HZ ); +if (dirtytime_expire_interval) +schedule_delayed_work (&dirtytime_work, dirtytime_expire_interval *HZ ); }static int __init start_dirtytime_writeback (void ) { -schedule_delayed_work (&dirtytime_work, dirtytime_expire_interval *HZ ); +if (dirtytime_expire_interval) +schedule_delayed_work (&dirtytime_work, dirtytime_expire_interval *HZ );return 0 ; }__initcall (start_dirtytime_writeback);
@@ -2398,8 +2400,12 @@ int dirtytime_interval_handler(struct ctl_table *table, int write,int ret; ret =proc_dointvec_minmax (table, write, buffer, lenp, ppos); -if (ret ==0 && write) -mod_delayed_work (system_wq, &dirtytime_work,0 ); +if (ret ==0 && write) { +if (dirtytime_expire_interval) +mod_delayed_work (system_wq, &dirtytime_work,0 ); +else +cancel_delayed_work_sync (&dirtytime_work); + }return ret; }
fs/smb/server/mgmt/user_session.c +13 -8
@@ -104,29 +104,32 @@ int ksmbd_session_rpc_open(struct ksmbd_session *sess, char *rpc_name)if (!entry)return -ENOMEM ; -down_read (&sess->rpc_lock); entry->method = method; entry->id = id =ksmbd_ipc_id_alloc ();if (id <0 ) goto free_entry; + +down_write (&sess->rpc_lock); old =xa_store (&sess->rpc_handle_list, id, entry,GFP_KERNEL ); -if (xa_is_err (old)) +if (xa_is_err (old)) { +up_write (&sess->rpc_lock); goto free_id; + } resp =ksmbd_rpc_open (sess, id); -if (!resp) - goto erase_xa; +if (!resp) { +xa_erase (&sess->rpc_handle_list, entry->id); +up_write (&sess->rpc_lock); + goto free_id; + } -up_read (&sess->rpc_lock); +up_write (&sess->rpc_lock);kvfree (resp);return id; -erase_xa: -xa_erase (&sess->rpc_handle_list, entry->id); free_id:ksmbd_rpc_id_free (entry->id); free_entry:kfree (entry); -up_read (&sess->rpc_lock);return -EINVAL ; }
@@ -145,7 +148,9 @@ int ksmbd_session_rpc_method(struct ksmbd_session *sess, int id) {struct ksmbd_session_rpc *entry; +lockdep_assert_held (&sess->rpc_lock); entry =xa_load (&sess->rpc_handle_list, id); +return entry ? entry->method :0 ; }
fs/smb/server/smb2pdu.c +8 -1
@@ -4614,8 +4614,15 @@ static int smb2_get_info_file_pipe(struct ksmbd_session *sess,* pipe without opening it, checking error condition here */ id = req->VolatileFileId; -if (!ksmbd_session_rpc_method (sess, id)) + +lockdep_assert_not_held (&sess->rpc_lock); + +down_read (&sess->rpc_lock); +if (!ksmbd_session_rpc_method (sess, id)) { +up_read (&sess->rpc_lock);return -ENOENT ; + } +up_read (&sess->rpc_lock);ksmbd_debug (SMB ,"FileInfoClass %u, FileId 0x%llx\n" , req->FileInfoClass, req->VolatileFileId);
fs/smb/server/transport_ipc.c +12 -0
@@ -778,6 +778,9 @@ struct ksmbd_rpc_command *ksmbd_rpc_write(struct ksmbd_session *sess, int handleif (!msg)return NULL ; +lockdep_assert_not_held (&sess->rpc_lock); + +down_read (&sess->rpc_lock); msg->type =KSMBD_EVENT_RPC_REQUEST ; req = (struct ksmbd_rpc_command *)msg->payload; req->handle = handle;
@@ -786,6 +789,7 @@ struct ksmbd_rpc_command *ksmbd_rpc_write(struct ksmbd_session *sess, int handle req->flags |=KSMBD_RPC_WRITE_METHOD ; req->payload_sz = payload_sz;memcpy (req->payload, payload, payload_sz); +up_read (&sess->rpc_lock); resp =ipc_msg_send_request (msg, req->handle);ipc_msg_free (msg);
@@ -802,6 +806,9 @@ struct ksmbd_rpc_command *ksmbd_rpc_read(struct ksmbd_session *sess, int handle)if (!msg)return NULL ; +lockdep_assert_not_held (&sess->rpc_lock); + +down_read (&sess->rpc_lock); msg->type =KSMBD_EVENT_RPC_REQUEST ; req = (struct ksmbd_rpc_command *)msg->payload; req->handle = handle;
@@ -809,6 +816,7 @@ struct ksmbd_rpc_command *ksmbd_rpc_read(struct ksmbd_session *sess, int handle) req->flags |=rpc_context_flags (sess); req->flags |=KSMBD_RPC_READ_METHOD ; req->payload_sz =0 ; +up_read (&sess->rpc_lock); resp =ipc_msg_send_request (msg, req->handle);ipc_msg_free (msg);
@@ -829,6 +837,9 @@ struct ksmbd_rpc_command *ksmbd_rpc_ioctl(struct ksmbd_session *sess, int handleif (!msg)return NULL ; +lockdep_assert_not_held (&sess->rpc_lock); + +down_read (&sess->rpc_lock); msg->type =KSMBD_EVENT_RPC_REQUEST ; req = (struct ksmbd_rpc_command *)msg->payload; req->handle = handle;
@@ -837,6 +848,7 @@ struct ksmbd_rpc_command *ksmbd_rpc_ioctl(struct ksmbd_session *sess, int handle req->flags |=KSMBD_RPC_IOCTL_METHOD ; req->payload_sz = payload_sz;memcpy (req->payload, payload, payload_sz); +up_read (&sess->rpc_lock); resp =ipc_msg_send_request (msg, req->handle);ipc_msg_free (msg);
fs/smb/server/transport_rdma.c +7 -8
@@ -1108,14 +1108,12 @@ static int get_sg_list(void *buf, int size, struct scatterlist *sg_list, int nenstatic int get_mapped_sg_list (struct ib_device *device,void *buf,int size,struct scatterlist *sg_list,int nentries, -enum dma_data_direction dir) +enum dma_data_direction dir,int *npages) { -int npages; - - npages =get_sg_list (buf, size, sg_list, nentries); -if (npages <0 ) + *npages =get_sg_list (buf, size, sg_list, nentries); +if (*npages <0 )return -EINVAL ; -return ib_dma_map_sg (device, sg_list, npages, dir); +return ib_dma_map_sg (device, sg_list, *npages, dir); } static int post_sendmsg(struct smb_direct_transport *t,
@@ -1184,12 +1182,13 @@ static int smb_direct_post_send_data(struct smb_direct_transport *t,for (i =0 ; i < niov; i++) {struct ib_sge *sge;int sg_cnt; +int npages;sg_init_table (sg,SMB_DIRECT_MAX_SEND_SGES -1 ); sg_cnt =get_mapped_sg_list (t->cm_id->device, iov[i].iov_base, iov[i].iov_len, sg,SMB_DIRECT_MAX_SEND_SGES -1 , -DMA_TO_DEVICE ); +DMA_TO_DEVICE , &npages);if (sg_cnt <=0 ) {pr_err ("failed to map buffer\n" ); ret = -ENOMEM ;
@@ -1197,7 +1196,7 @@ static int smb_direct_post_send_data(struct smb_direct_transport *t, }else if (sg_cnt + msg->num_sge >SMB_DIRECT_MAX_SEND_SGES ) {pr_err ("buffer not fitted into sges\n" ); ret = -E2BIG ; -ib_dma_unmap_sg (t->cm_id->device, sg, sg_cnt, +ib_dma_unmap_sg (t->cm_id->device, sg, npages,DMA_TO_DEVICE ); goto err; }
include/linux/ptr_ring.h +8 -9
@@ -613,15 +613,14 @@ static inline int ptr_ring_resize(struct ptr_ring *r, int size, gfp_t gfp,/* * Note: producer lock is nested within consumer lock, so if you * resize you must make sure all uses nest correctly. -* In particular if you consume ring in interrupt or BH context, you must -* disable interrupts/BH when doing so. +* In particular if you consume ring in BH context, you must +* disable BH when doing so. */ -static inline int ptr_ring_resize_multiple (struct ptr_ring **rings, -unsigned int nrings, -int size, -gfp_t gfp,void (*destroy)(void *)) +static inline int ptr_ring_resize_multiple_bh (struct ptr_ring **rings, +unsigned int nrings, +int size,gfp_t gfp, +void (*destroy)(void *)) { -unsigned long flags;void ***queues;int i;
@@ -636,12 +635,12 @@ static inline int ptr_ring_resize_multiple(struct ptr_ring **rings, }for (i =0 ; i < nrings; ++i) { -spin_lock_irqsave (&(rings[i])->consumer_lock, flags); +spin_lock_bh (&(rings[i])->consumer_lock);spin_lock (&(rings[i])->producer_lock); queues[i] =__ptr_ring_swap_queue (rings[i], queues[i], size, gfp, destroy);spin_unlock (&(rings[i])->producer_lock); -spin_unlock_irqrestore (&(rings[i])->consumer_lock, flags); +spin_unlock_bh (&(rings[i])->consumer_lock); }for (i =0 ; i < nrings; ++i)
include/linux/sched.h +5 -0
@@ -1800,6 +1800,11 @@ static __always_inline bool is_percpu_thread(void)#endif } +static __always_inline bool is_user_task(struct task_struct *task) +{ +return task->mm && !(task->flags & (PF_KTHREAD |PF_USER_WORKER )); +} +/* Per-process atomic flags. */ #define PFA_NO_NEW_PRIVS 0/* May not gain new privileges. */ #define PFA_SPREAD_PAGE 1/* Spread page cache over cpuset */
include/linux/skb_array.h +8 -6
@@ -198,16 +198,18 @@ static inline int skb_array_resize(struct skb_array *a, int size, gfp_t gfp)return ptr_ring_resize (&a->ring, size, gfp, __skb_array_destroy_skb); } -static inline int skb_array_resize_multiple (struct skb_array **rings, -int nrings,unsigned int size, -gfp_t gfp) +static inline int skb_array_resize_multiple_bh (struct skb_array **rings, +int nrings, +unsigned int size, +gfp_t gfp) {BUILD_BUG_ON (offsetof(struct skb_array , ring)); -return ptr_ring_resize_multiple ((struct ptr_ring **)rings, - nrings, size, gfp, - __skb_array_destroy_skb); +return ptr_ring_resize_multiple_bh ((struct ptr_ring **)rings, + nrings, size, gfp, + __skb_array_destroy_skb); } +static inline void skb_array_cleanup (struct skb_array *a) {ptr_ring_cleanup (&a->ring, __skb_array_destroy_skb);
include/net/bonding.h +7 -6
@@ -519,13 +519,14 @@ static inline int bond_is_ip6_target_ok(struct in6_addr *addr)static inline unsigned long slave_oldest_target_arp_rx (struct bonding *bond,struct slave *slave) { +unsigned long tmp, ret =READ_ONCE (slave->target_last_arp_rx[0 ]);int i =1 ; -unsigned long ret = slave->target_last_arp_rx[0 ]; - -for (; (i <BOND_MAX_ARP_TARGETS ) && bond->params.arp_targets[i]; i++) -if (time_before (slave->target_last_arp_rx[i], ret)) - ret = slave->target_last_arp_rx[i]; +for (; (i <BOND_MAX_ARP_TARGETS ) && bond->params.arp_targets[i]; i++) { + tmp =READ_ONCE (slave->target_last_arp_rx[i]); +if (time_before (tmp, ret)) + ret = tmp; + }return ret; }
@@ -535,7 +536,7 @@ static inline unsigned long slave_last_rx(struct bonding *bond,if (bond->params.arp_all_targets ==BOND_ARP_TARGETS_ALL )return slave_oldest_target_arp_rx (bond, slave); -return slave->last_rx; +return READ_ONCE (slave->last_rx); }static inline void slave_update_last_tx (struct slave *slave)
include/net/nfc/nfc.h +2 -0
@@ -215,6 +215,8 @@ static inline void nfc_free_device(struct nfc_dev *dev)int nfc_register_device (struct nfc_dev *dev); +void nfc_unregister_rfkill (struct nfc_dev *dev); +void nfc_remove_device (struct nfc_dev *dev);void nfc_unregister_device (struct nfc_dev *dev);/**
include/net/xdp_sock.h +0 -3
@@ -63,9 +63,6 @@ struct xdp_sock {struct xsk_queue *tx____cacheline_aligned_in_smp ;struct list_head tx_list; -/* Protects generic receive. */ -spinlock_t rx_lock; -/* Statistics */ u64 rx_dropped;u64 rx_queue_full;
include/net/xsk_buff_pool.h +2 -0
@@ -54,6 +54,8 @@ struct xsk_buff_pool {refcount_t users;struct xdp_umem *umem;struct work_struct work; +/* Protects generic receive in shared and non-shared umem mode. */ +spinlock_t rx_lock;struct list_head free_list;struct list_head xskb_list;u32 heads_cnt;
kernel/dma/pool.c +6 -1
@@ -268,15 +268,20 @@ struct page *dma_alloc_from_pool(struct device *dev, size_t size, {struct gen_pool *pool =NULL ;struct page *page; +bool pool_found = false;while ((pool =dma_guess_pool (pool, gfp))) { + pool_found = true; page =__dma_alloc_from_pool (dev, size, pool, cpu_addr, phys_addr_ok);if (page)return page; } -WARN (1 ,"Failed to get suitable pool for %s\n" ,dev_name (dev)); +if (pool_found) +WARN (!(gfp & __GFP_NOWARN),"DMA pool exhausted for %s\n" ,dev_name (dev)); +else +WARN (1 ,"Failed to get suitable pool for %s\n" ,dev_name (dev));return NULL ; }
kernel/events/callchain.c +1 -1
@@ -206,7 +206,7 @@ get_perf_callchain(struct pt_regs *regs, u32 init_nr, bool kernel, bool user,if (user && !crosstask) {if (!user_mode (regs)) { -if (current->flags & (PF_KTHREAD |PF_USER_WORKER )) +if (!is_user_task (current)) regs =NULL ;else regs =task_pt_regs (current);
kernel/events/core.c +3 -3
@@ -6985,7 +6985,7 @@ static void perf_sample_regs_user(struct perf_regs *regs_user,if (user_mode (regs)) { regs_user->abi =perf_reg_abi (current); regs_user->regs = regs; - }else if (!(current->flags & (PF_KTHREAD |PF_USER_WORKER ))) { + }else if (is_user_task (current)) {perf_get_regs_user (regs_user, regs); }else { regs_user->abi =PERF_SAMPLE_REGS_ABI_NONE ;
@@ -7612,7 +7612,7 @@ static u64 perf_virt_to_phys(u64 virt)* Try IRQ-safe get_user_page_fast_only first. * If failed, leave phys_addr as 0. */ -if (!(current->flags & (PF_KTHREAD |PF_USER_WORKER ))) { +if (is_user_task (current)) {struct page *p;pagefault_disable ();
@@ -7725,7 +7725,7 @@ perf_callchain(struct perf_event *event, struct pt_regs *regs) {bool kernel = !event->attr.exclude_callchain_kernel;bool user = !event->attr.exclude_callchain_user && - !(current->flags & (PF_KTHREAD |PF_USER_WORKER )); +is_user_task (current);/* Disallow cross-task user callchains. */ bool crosstask = event->ctx->task && event->ctx->task != current;const u32 max_stack = event->attr.sample_max_stack;
lib/flex_proportions.c +3 -2
@@ -64,13 +64,14 @@ void fprop_global_destroy(struct fprop_global *p)bool fprop_new_period (struct fprop_global *p,int periods) {s64 events =percpu_counter_sum (&p->events); +unsigned long flags;/* * Don't do anything if there are no events. */ if (events <=1 )return false; -preempt_disable_nested (); +local_irq_save (flags);write_seqcount_begin (&p->sequence);if (periods <64 ) events -= events >> periods;
@@ -78,7 +79,7 @@ bool fprop_new_period(struct fprop_global *p, int periods)percpu_counter_add (&p->events, -events); p->period += periods;write_seqcount_end (&p->sequence); -preempt_enable_nested (); +local_irq_restore (flags);return true; }
mm/kfence/core.c +19 -4
@@ -577,7 +577,7 @@ static unsigned long kfence_init_pool(void) {unsigned long addr;struct page *pages; -int i; +int i, rand;if (!arch_kfence_init_pool ())return (unsigned long )__kfence_pool;
@@ -626,13 +626,27 @@ static unsigned long kfence_init_pool(void)INIT_LIST_HEAD (&meta->list);raw_spin_lock_init (&meta->lock); meta->state =KFENCE_OBJECT_UNUSED ; - meta->addr = addr;/* Initialize for validation in metadata_to_pageaddr(). */ -list_add_tail (&meta->list, &kfence_freelist); +/* Use addr to randomize the freelist. */ + meta->addr = i;/* Protect the right redzone. */ -if (unlikely (!kfence_protect (addr +PAGE_SIZE ))) +if (unlikely (!kfence_protect (addr +2 * i *PAGE_SIZE +PAGE_SIZE ))) goto reset_slab; + } + +for (i =CONFIG_KFENCE_NUM_OBJECTS ; i >0 ; i--) { + rand =get_random_u32_below (i); +swap (kfence_metadata_init[i -1 ].addr, kfence_metadata_init[rand].addr); + } +for (i =0 ; i <CONFIG_KFENCE_NUM_OBJECTS ; i++) { +struct kfence_metadata *meta_1 = &kfence_metadata_init[i]; +struct kfence_metadata *meta_2 = &kfence_metadata_init[meta_1->addr]; + +list_add_tail (&meta_2->list, &kfence_freelist); + } +for (i =0 ; i <CONFIG_KFENCE_NUM_OBJECTS ; i++) { + kfence_metadata_init[i].addr = addr; addr +=2 *PAGE_SIZE ; }
@@ -645,6 +659,7 @@ static unsigned long kfence_init_pool(void)return 0 ; reset_slab: + addr +=2 * i *PAGE_SIZE ;for (i =0 ; i <KFENCE_POOL_SIZE /PAGE_SIZE ; i++) {struct slab *slab =page_slab (nth_page (pages, i));
net/bridge/br_input.c +1 -1
@@ -260,7 +260,7 @@ static int nf_hook_bridge_pre(struct sk_buff *skb, struct sk_buff **pskb)int ret; net =dev_net (skb->dev); -#ifdef HAVE_JUMP_LABEL +#ifdef CONFIG_JUMP_LABEL if (!static_key_false (&nf_hooks_needed[NFPROTO_BRIDGE ][NF_BR_PRE_ROUTING ])) goto frame_finish;#endif
net/core/dev.c +47 -115
276 lines not on this page · raw message
net/ipv6/icmp.c +3 -1
@@ -768,7 +768,9 @@ static enum skb_drop_reason icmpv6_echo_reply(struct sk_buff *skb) fl6.daddr =ipv6_hdr (skb)->saddr;if (saddr) fl6.saddr = *saddr; - fl6.flowi6_oif =icmp6_iif (skb); + fl6.flowi6_oif =ipv6_addr_loopback (&fl6.daddr) ? + skb->dev->ifindex : +icmp6_iif (skb); fl6.fl6_icmp_type = type; fl6.flowi6_mark = mark; fl6.flowi6_uid =sock_net_uid (net,NULL );
net/mac80211/ieee80211_i.h +2 -2
@@ -530,7 +530,7 @@ struct ieee80211_if_managed {/* TDLS support */ u8 tdls_peer[ETH_ALEN ]__aligned(2) ; -struct delayed_work tdls_peer_del_work; +struct wiphy_delayed_work tdls_peer_del_work;struct sk_buff *orig_teardown_skb;/* The original teardown skb */ struct sk_buff *teardown_skb;/* A copy to send through the AP */ spinlock_t teardown_lock;/* To lock changing teardown_skb */
@@ -2599,7 +2599,7 @@ int ieee80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *dev, const u8 *extra_ies, size_t extra_ies_len);int ieee80211_tdls_oper (struct wiphy *wiphy,struct net_device *dev,const u8 *peer,enum nl80211_tdls_operation oper); -void ieee80211_tdls_peer_del_work (struct work_struct *wk); +void ieee80211_tdls_peer_del_work (struct wiphy *wiphy,struct wiphy_work *wk);int ieee80211_tdls_channel_switch (struct wiphy *wiphy,struct net_device *dev,const u8 *addr,u8 oper_class,struct cfg80211_chan_def *chandef);
net/mac80211/mlme.c +4 -3
@@ -6866,8 +6866,8 @@ void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata) ieee80211_beacon_connection_loss_work);wiphy_work_init (&ifmgd->csa_connection_drop_work, ieee80211_csa_connection_drop_work); -INIT_DELAYED_WORK (&ifmgd->tdls_peer_del_work, - ieee80211_tdls_peer_del_work); +wiphy_delayed_work_init (&ifmgd->tdls_peer_del_work, + ieee80211_tdls_peer_del_work);wiphy_delayed_work_init (&ifmgd->ml_reconf_work, ieee80211_ml_reconf_work);timer_setup (&ifmgd->timer, ieee80211_sta_timer,0 );
@@ -7881,7 +7881,8 @@ void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata) &ifmgd->beacon_connection_loss_work);wiphy_work_cancel (sdata->local->hw.wiphy, &ifmgd->csa_connection_drop_work); -cancel_delayed_work_sync (&ifmgd->tdls_peer_del_work); +wiphy_delayed_work_cancel (sdata->local->hw.wiphy, + &ifmgd->tdls_peer_del_work);wiphy_delayed_work_cancel (sdata->local->hw.wiphy, &ifmgd->ml_reconf_work);
net/mac80211/tdls.c +6 -5
@@ -21,7 +21,7 @@/* give usermode some time for retries in setting up the TDLS session */ #define TDLS_PEER_SETUP_TIMEOUT (15 * HZ) -void ieee80211_tdls_peer_del_work (struct work_struct *wk) +void ieee80211_tdls_peer_del_work (struct wiphy *wiphy,struct wiphy_work *wk) {struct ieee80211_sub_if_data *sdata;struct ieee80211_local *local;
@@ -1224,9 +1224,9 @@ ieee80211_tdls_mgmt_setup(struct wiphy *wiphy, struct net_device *dev,return ret; } -ieee80211_queue_delayed_work (&sdata->local->hw, - &sdata->u.mgd.tdls_peer_del_work, -TDLS_PEER_SETUP_TIMEOUT ); +wiphy_delayed_work_queue (sdata->local->hw.wiphy, + &sdata->u.mgd.tdls_peer_del_work, +TDLS_PEER_SETUP_TIMEOUT );return 0 ; out_unlock:
@@ -1526,7 +1526,8 @@ int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev, }if (ret ==0 &ðer_addr_equal (sdata->u.mgd.tdls_peer, peer)) { -cancel_delayed_work (&sdata->u.mgd.tdls_peer_del_work); +wiphy_delayed_work_cancel (sdata->local->hw.wiphy, + &sdata->u.mgd.tdls_peer_del_work);eth_zero_addr (sdata->u.mgd.tdls_peer); }
net/mptcp/protocol.c +7 -6
@@ -796,11 +796,8 @@ static bool __mptcp_ofo_queue(struct mptcp_sock *msk)static bool __mptcp_subflow_error_report (struct sock *sk,struct sock *ssk) { -int err =sock_error (ssk);int ssk_state; - -if (!err) -return false; +int err;/* only propagate errors on fallen-back sockets or * on MPC connect
@@ -808,6 +805,10 @@ static bool __mptcp_subflow_error_report(struct sock *sk, struct sock *ssk)if (sk->sk_state !=TCP_SYN_SENT && !__mptcp_check_fallback (mptcp_sk (sk)))return false; + err =sock_error (ssk); +if (!err) +return false; +/* We need to propagate only transition to CLOSE state. * Orphaned socket will see such state change via * subflow_sched_work_if_closed() and that path will properly
@@ -2553,8 +2554,8 @@ static void __mptcp_close_ssk(struct sock *sk, struct sock *ssk,void mptcp_close_ssk (struct sock *sk,struct sock *ssk,struct mptcp_subflow_context *subflow) { -/* The first subflow can already be closed and still in the list */ -if (subflow->close_event_done) +/* The first subflow can already be closed or disconnected */ +if (subflow->close_event_done ||READ_ONCE (subflow->local_id) <0 )return ; subflow->close_event_done = true;
net/nfc/core.c +24 -3
@@ -1147,14 +1147,14 @@ int nfc_register_device(struct nfc_dev *dev)EXPORT_SYMBOL (nfc_register_device);/** -* nfc_unregister_device - unregister a nfc device in the nfc subsystem +* nfc_unregister_rfkill - unregister a nfc device in the rfkill subsystem * * @dev: The nfc device to unregister */ -void nfc_unregister_device (struct nfc_dev *dev) +void nfc_unregister_rfkill (struct nfc_dev *dev) { -int rc;struct rfkill *rfk =NULL ; +int rc;pr_debug ("dev_name=%s\n" ,dev_name (&dev->dev));
@@ -1175,7 +1175,16 @@ void nfc_unregister_device(struct nfc_dev *dev)rfkill_unregister (rfk);rfkill_destroy (rfk); } +} +EXPORT_SYMBOL (nfc_unregister_rfkill); +/** +* nfc_remove_device - remove a nfc device in the nfc subsystem +* +* @dev: The nfc device to remove +*/ +void nfc_remove_device (struct nfc_dev *dev) +{if (dev->ops->check_presence) {del_timer_sync (&dev->check_pres_timer);cancel_work_sync (&dev->check_pres_work);
@@ -1188,6 +1197,18 @@ void nfc_unregister_device(struct nfc_dev *dev)device_del (&dev->dev);mutex_unlock (&nfc_devlist_mutex); } +EXPORT_SYMBOL (nfc_remove_device); + +/** +* nfc_unregister_device - unregister a nfc device in the nfc subsystem +* +* @dev: The nfc device to unregister +*/ +void nfc_unregister_device (struct nfc_dev *dev) +{ +nfc_unregister_rfkill (dev); +nfc_remove_device (dev); +}EXPORT_SYMBOL (nfc_unregister_device);static int __init nfc_init (void )
net/nfc/llcp_commands.c +16 -1
@@ -778,8 +778,23 @@ int nfc_llcp_send_ui_frame(struct nfc_llcp_sock *sock, u8 ssap, u8 dsap,if (likely (frag_len >0 ))skb_put_data (pdu, msg_ptr, frag_len); +spin_lock (&local->tx_queue.lock); + +if (list_empty (&local->list)) { +spin_unlock (&local->tx_queue.lock); + +kfree_skb (pdu); + + len -= remaining_len; +if (len ==0 ) + len = -ENXIO ; +break ; + } +/* No need to check for the peer RW for UI frames */ -skb_queue_tail (&local->tx_queue, pdu); +__skb_queue_tail (&local->tx_queue, pdu); + +spin_unlock (&local->tx_queue.lock); remaining_len -= frag_len; msg_ptr += frag_len;
net/nfc/llcp_core.c +3 -1
@@ -314,7 +314,9 @@ static struct nfc_llcp_local *nfc_llcp_remove_local(struct nfc_dev *dev)spin_lock (&llcp_devices_lock);list_for_each_entry_safe (local, tmp, &llcp_devices, list)if (local->dev == dev) { -list_del (&local->list); +spin_lock (&local->tx_queue.lock); +list_del_init (&local->list); +spin_unlock (&local->tx_queue.lock);spin_unlock (&llcp_devices_lock);return local; }
net/nfc/nci/core.c +3 -1
@@ -1292,6 +1292,8 @@ void nci_unregister_device(struct nci_dev *ndev) {struct nci_conn_info *conn_info, *n; +nfc_unregister_rfkill (ndev->nfc_dev); +/* This set_bit is not protected with specialized barrier, * However, it is fine because the mutex_lock(&ndev->req_lock); * in nci_close_device() will help to emit one.
@@ -1309,7 +1311,7 @@ void nci_unregister_device(struct nci_dev *ndev)/* conn_info is allocated with devm_kzalloc */ } -nfc_unregister_device (ndev->nfc_dev); +nfc_remove_device (ndev->nfc_dev); }EXPORT_SYMBOL (nci_unregister_device);
net/sched/act_ife.c +3 -3
@@ -649,9 +649,9 @@ static int tcf_ife_dump(struct sk_buff *skb, struct tc_action *a, int bind,memset (&opt,0 ,sizeof (opt)); - opt.index = ife->tcf_index, - opt.refcnt =refcount_read (&ife->tcf_refcnt) - ref, - opt.bindcnt =atomic_read (&ife->tcf_bindcnt) - bind, + opt.index = ife->tcf_index; + opt.refcnt =refcount_read (&ife->tcf_refcnt) - ref; + opt.bindcnt =atomic_read (&ife->tcf_bindcnt) - bind;spin_lock_bh (&ife->tcf_lock); opt.action = ife->tcf_action;
net/sched/sch_generic.c +2 -2
@@ -910,8 +910,8 @@ static int pfifo_fast_change_tx_queue_len(struct Qdisc *sch, bands[prio] = q; } -return skb_array_resize_multiple (bands,PFIFO_FAST_BANDS , new_len, -GFP_KERNEL ); +return skb_array_resize_multiple_bh (bands,PFIFO_FAST_BANDS , new_len, +GFP_KERNEL ); }struct Qdisc_ops pfifo_fast_ops__read_mostly = {
net/xdp/xsk.c +3 -3
@@ -339,13 +339,14 @@ int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp)u32 len =xdp_get_buff_len (xdp);int err; -spin_lock_bh (&xs->rx_lock); err =xsk_rcv_check (xs, xdp, len);if (!err) { +spin_lock_bh (&xs->pool->rx_lock); err =__xsk_rcv (xs, xdp, len);xsk_flush (xs); +spin_unlock_bh (&xs->pool->rx_lock); } -spin_unlock_bh (&xs->rx_lock); +return err; }
@@ -1647,7 +1648,6 @@ static int xsk_create(struct net *net, struct socket *sock, int protocol, xs =xdp_sk (sk); xs->state =XSK_READY ;mutex_init (&xs->mutex); -spin_lock_init (&xs->rx_lock);INIT_LIST_HEAD (&xs->map_list);spin_lock_init (&xs->map_list_lock);
net/xdp/xsk_buff_pool.c +1 -0
@@ -85,6 +85,7 @@ struct xsk_buff_pool *xp_create_and_assign_umem(struct xdp_sock *xs,XDP_PACKET_HEADROOM ; pool->umem = umem; pool->addrs = umem->addrs; +spin_lock_init (&pool->rx_lock);INIT_LIST_HEAD (&pool->free_list);INIT_LIST_HEAD (&pool->xskb_list);INIT_LIST_HEAD (&pool->xsk_tx_list);
scripts/Makefile.build +1 -1
@@ -294,7 +294,7 @@ $(obj)/%.o: $(src)/%.rs FORCE quiet_cmd_rustc_rsi_rs = $(RUSTC_OR_CLIPPY_QUIET) $(quiet_modtag) $@ cmd_rustc_rsi_rs = \ $(rust_common_cmd) -Zunpretty=expanded $< >$@; \ - command -v $(RUSTFMT) >/dev/null && $(RUSTFMT) $@ + command -v $(RUSTFMT) >/dev/null && $(RUSTFMT) --config-path $(srctree)/.rustfmt.toml $@ $(obj)/%.rsi: $(src)/%.rs FORCE $(call if_changed_dep,rustc_rsi_rs)
scripts/generate_rust_analyzer.py +1 -1
@@ -73,7 +73,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs): append_crate( "compiler_builtins", srctree / "rust" / "compiler_builtins.rs", - [], + ["core"], ) append_crate(
sound/soc/amd/yc/acp6x-mach.c +8 -0
@@ -661,6 +661,14 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "GOH-X"), } }, + { + .driver_data = &acp6x_card, + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "RB"), + DMI_MATCH(DMI_BOARD_NAME, "XyloD5_RBU"), + } + }, + {} };
sound/soc/fsl/imx-card.c +0 -1
@@ -314,7 +314,6 @@ static int imx_aif_hw_params(struct snd_pcm_substream *substream,SND_SOC_DAIFMT_PDM ; }else { slots =2 ; - slot_width =params_physical_width (params); fmt = (rtd->dai_link->dai_fmt & ~SND_SOC_DAIFMT_FORMAT_MASK ) |SND_SOC_DAIFMT_I2S ; }
sound/soc/intel/boards/sof_es8336.c +1 -1
@@ -120,7 +120,7 @@ static void pcm_pop_work_events(struct work_struct *work)gpiod_set_value_cansleep (priv->gpio_speakers, priv->speaker_en);if (quirk &SOF_ES8336_HEADPHONE_GPIO ) -gpiod_set_value_cansleep (priv->gpio_headphone, priv->speaker_en); +gpiod_set_value_cansleep (priv->gpio_headphone, !priv->speaker_en); }
sound/usb/endpoint.c +2 -1
@@ -1386,7 +1386,8 @@ int snd_usb_endpoint_set_params(struct snd_usb_audio *chip,if (ep->packsize[1 ] > ep->maxpacksize) {usb_audio_dbg (chip,"Too small maxpacksize %u for rate %u / pps %u\n" , ep->maxpacksize, ep->cur_rate, ep->pps); -return -EINVAL ; + err = -EINVAL ; + goto unlock; }/* calculate the frequency in 16.16 format */
tools/testing/selftests/bpf/progs/test_select_reuseport_kern.c +0 -1
@@ -1,7 +1,6 @@// SPDX-License-Identifier: GPL-2.0 /* Copyright (c) 2018 Facebook */ -#include <stdlib.h> #include <linux/in.h> #include <linux/ip.h> #include <linux/ipv6.h>
tools/testing/selftests/net/mptcp/mptcp_join.sh +74 -7
129 lines not on this page · raw message