Linux 6.1.117
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.117 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/rk3036-kylin.dts | 4 arch/arm/boot/dts/rk3036.dtsi | 14 - arch/arm64/Kconfig | 1 arch/arm64/boot/dts/freescale/imx8-ss-vpu.dtsi | 4 arch/arm64/boot/dts/freescale/imx8mp.dtsi | 6 arch/arm64/boot/dts/freescale/imx8qxp-ss-vpu.dtsi | 25 ++ arch/arm64/boot/dts/freescale/imx8qxp.dtsi | 6 arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts | 4 arch/arm64/boot/dts/rockchip/rk3328.dtsi | 3 arch/arm64/boot/dts/rockchip/rk3368-lion.dtsi | 1 arch/arm64/boot/dts/rockchip/rk3399-eaidk-610.dts | 2 arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi | 2 arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator.dts | 2 arch/arm64/boot/dts/rockchip/rk3566-pinenote.dtsi | 4 arch/riscv/purgatory/entry.S | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 4 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 8 drivers/hid/hid-core.c | 2 drivers/infiniband/hw/bnxt_re/qplib_fp.c | 3 drivers/irqchip/irq-gic-v3.c | 7 drivers/md/dm-cache-target.c | 59 +++--- drivers/md/dm-unstripe.c | 4 drivers/media/cec/usb/pulse8/pulse8-cec.c | 2 drivers/media/common/v4l2-tpg/v4l2-tpg-core.c | 3 drivers/media/dvb-core/dvb_frontend.c | 4 drivers/media/dvb-core/dvbdev.c | 17 + drivers/media/dvb-frontends/cx24116.c | 7 drivers/media/dvb-frontends/stb0899_algo.c | 2 drivers/media/i2c/adv7604.c | 26 +- drivers/media/i2c/ar0521.c | 4 drivers/media/platform/amphion/vpu_core.c | 2 drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c | 17 + drivers/media/usb/uvc/uvc_driver.c | 2 drivers/media/v4l2-core/v4l2-ctrls-api.c | 17 + drivers/net/can/c_can/c_can_main.c | 7 drivers/net/can/spi/mcp251xfd/mcp251xfd-ring.c | 8 drivers/net/can/spi/mcp251xfd/mcp251xfd-tef.c | 10 - drivers/net/ethernet/arc/emac_main.c | 27 +- drivers/net/ethernet/arc/emac_mdio.c | 9 drivers/net/ethernet/freescale/enetc/enetc_vf.c | 9 drivers/net/ethernet/hisilicon/hns3/hnae3.c | 5 drivers/net/ethernet/intel/i40e/i40e.h | 1 drivers/net/ethernet/intel/i40e/i40e_debugfs.c | 1 drivers/net/ethernet/intel/i40e/i40e_main.c | 12 + drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c | 3 drivers/net/ethernet/intel/ice/ice_fdir.h | 4 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 1 drivers/net/ethernet/vertexcom/mse102x.c | 5 drivers/net/phy/dp83848.c | 2 drivers/net/virtio_net.c | 6 drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c | 2 drivers/platform/x86/amd/pmc.c | 5 drivers/pwm/pwm-imx-tpm.c | 4 drivers/scsi/sd_zbc.c | 3 drivers/thermal/qcom/lmh.c | 7 drivers/thermal/thermal_of.c | 21 +- drivers/usb/dwc3/core.c | 25 +- drivers/usb/musb/sunxi.c | 2 drivers/usb/serial/io_edgeport.c | 8 drivers/usb/serial/option.c | 6 drivers/usb/serial/qcserial.c | 2 drivers/usb/typec/ucsi/ucsi_ccg.c | 2 fs/btrfs/delayed-ref.c | 2 fs/nfs/inode.c | 125 +++++++++++-- fs/nfs/super.c | 10 - fs/ocfs2/xattr.c | 3 fs/proc/vmcore.c | 9 fs/smb/server/mgmt/user_session.c | 15 + fs/smb/server/server.c | 4 include/linux/nfs_fs.h | 47 ++++ include/linux/tick.h | 8 include/linux/user_namespace.h | 3 kernel/fork.c | 2 kernel/signal.c | 3 kernel/ucount.c | 9 mm/filemap.c | 2 net/core/dst.c | 17 + net/mac80211/chan.c | 4 net/mac80211/mlme.c | 2 net/mac80211/scan.c | 2 net/mac80211/util.c | 4 net/mptcp/pm_userspace.c | 3 net/sched/sch_taprio.c | 18 + net/sctp/sm_statefuns.c | 2 net/sunrpc/xprtsock.c | 1 net/vmw_vsock/hyperv_transport.c | 1 net/vmw_vsock/virtio_transport_common.c | 1 security/keys/keyring.c | 7 sound/firewire/tascam/amdtp-tascam.c | 2 sound/pci/hda/patch_conexant.c | 2 sound/pci/hda/patch_realtek.c | 1 sound/soc/amd/yc/acp6x-mach.c | 7 sound/soc/stm/stm32_spdifrx.c | 2 sound/usb/mixer.c | 1 sound/usb/quirks.c | 2 tools/lib/thermal/sampling.c | 2 tools/testing/selftests/arm64/signal/test_signals.c | 4 98 files changed, 569 insertions(+), 228 deletions(-)
Aleksandr Loktionov (1):
i40e: fix race condition by adding filter's intermediate sync state
Alex Deucher (2):
drm/amdgpu: Adjust debugfs eviction and IB access permissions drm/amdgpu: add missing size check in amdgpu_debugfs_gprwave_read()
Alexander Stein (4):
arm64: dts: imx8qm: Fix VPU core alias name
arm64: dts: imx8qxp: Add VPU subsystem file
arm64: dts: imx8-ss-vpu: Fix imx8qm VPU IRQs
media: amphion: Fix VPU core alias name
Amelie Delaunay (1):
ASoC: stm32: spdifrx: fix dma channel release in stm32_spdifrx_remove
Andrei Vagin (1):
ucounts: fix counter leak in inc_rlimit_get_ucounts()
Andrew Kanner (1):
ocfs2: remove entry once instead of null-ptr-dereference in ocfs2_xa_remove()
Antonio Quartulli (1):
drm/amdgpu: prevent NULL pointer dereference if ATIF is not supported
Benjamin Segall (1):
posix-cpu-timers: Clear TICK_DEP_BIT_POSIX_TIMER on clone
Benoit Sevens (1):
media: uvcvideo: Skip parsing frames of type UVC_VS_UNDEFINED in uvc_parse_format
Benoît Monin (1):
USB: serial: option: add Quectel RG650V
Chen Ridong (1):
security/keys: fix slab-out-of-bounds in key_task_permission
Christoffer Sandberg (1):
ALSA: hda/realtek: Fix headset mic on TUXEDO Gemini 17 Gen3
Corey Hickey (1):
platform/x86/amd/pmc: Detect when STB is not available
Dan Carpenter (2):
usb: typec: fix potential out of bounds in ucsi_ccg_update_set_new_cam_cmd()
USB: serial: io_edgeport: fix use after free in debug printk
Daniel Maslowski (1):
riscv/purgatory: align riscv_kernel_entry
Dario Binacchi (1):
can: c_can: fix {rx,tx}_errors statistics
Diederik de Haas (2):
arm64: dts: rockchip: Remove hdmi's 2nd interrupt on rk3328
arm64: dts: rockchip: Fix wakeup prop names on PineNote BT node
Diogo Silva (1):
net: phy: ti: add PHY_RST_AFTER_CLK_EN flag
Dmitry Antipov (1):
net: sched: use RCU read-side critical section in taprio_dump()
Dmitry Baryshkov (1):
thermal/drivers/qcom/lmh: Remove false lockdep backtrace
Emil Dahl Juhl (1):
tools/lib/thermal: Fix sampling handler context ptr
Eric Dumazet (1):
net: do not delay dst_entries_add() in dst_release()
Erik Schumacher (1):
pwm: imx-tpm: Use correct MODULO value for EPWM mode
Filipe Manana (1):
btrfs: reinitialize delayed ref list after deleting it from the list
Geert Uytterhoeven (2):
arm64: dts: rockchip: Fix rt5651 compatible value on rk3399-eaidk-610
arm64: dts: rockchip: Fix rt5651 compatible value on rk3399-sapphire-excavator
Geliang Tang (1):
mptcp: use sock_kfree_s instead of kfree
Greg Kroah-Hartman (2):
Revert "wifi: mac80211: fix RCU list iterations" Linux 6.1.117
Heiko Stuebner (7):
arm64: dts: rockchip: Fix bluetooth properties on Rock960 boards
arm64: dts: rockchip: Remove #cooling-cells from fan on Theobroma lion
arm64: dts: rockchip: Fix LED triggers on rk3308-roc-cc
ARM: dts: rockchip: fix rk3036 acodec node
ARM: dts: rockchip: drop grf reference from rk3036 hdmi
ARM: dts: rockchip: Fix the spi controller on rk3036
ARM: dts: rockchip: Fix the realtek audio codec on rk3036-kylin
Hyunwoo Kim (2):
hv_sock: Initializing vsk->trans to NULL to prevent a dangling pointer
vsock/virtio: Initialization of the dangling pointer occurring in vsk->transIcenowy Zheng (1):
thermal/of: support thermal zones w/o trips subnode
Jack Wu (1):
USB: serial: qcserial: add support for Sierra Wireless EM86xx
Jarosław Janik (1):
Revert "ALSA: hda/conexant: Mute speakers at suspend / shutdown"
Jinjie Ruan (2):
ksmbd: Fix the missing xa_store error check
net: wwan: t7xx: Fix off-by-one error in t7xx_dpmaif_rx_buf_alloc()
Jiri Kosina (1):
HID: core: zero-initialize the report buffer
Johan Jonker (2):
net: arc: fix the device for dma_map_single/dma_unmap_single
net: arc: rockchip: fix emac mdio node support
Johannes Thumshirn (1):
scsi: sd_zbc: Use kvzalloc() to allocate REPORT ZONES buffer
Marc Kleine-Budde (2):
can: mcp251xfd: mcp251xfd_get_tef_len(): fix length calculation
can: mcp251xfd: mcp251xfd_ring_alloc(): fix coalescing configuration when switching CAN modes
Marc Zyngier (1):
irqchip/gic-v3: Force propagation of the active state with a read-back
Mark Brown (1):
kselftest/arm64: Initialise current at build time in signal tests
Mark Rutland (1):
arm64: Kconfig: Make SME depend on BROKEN for now
Mateusz Polchlopek (1):
ice: change q_index variable type to s16 to store -1 value
Mauro Carvalho Chehab (10):
media: stb0899_algo: initialize cfr before using it
media: dvbdev: prevent the risk of out of memory access
media: dvb_frontend: don't play tricks with underflow values
media: adv7604: prevent underflow condition when reporting colorspace
media: ar0521: don't overflow when checking PLL values
media: s5p-jpeg: prevent buffer overflows
media: cx24116: prevent overflows on SNR calculus
media: pulse8-cec: fix data timestamp at pulse8_setup()
media: v4l2-tpg: prevent the risk of a division by zero
media: v4l2-ctrls-api: fix error handling for v4l2_g_ctrl()
Michal Schmidt (1):
bnxt_re: avoid shift undefined behavior in bnxt_qplib_alloc_init_hwq
Mike Snitzer (1):
nfs: avoid i_lock contention in nfs_clear_invalid_mapping
Ming-Hung Tsai (5):
dm cache: correct the number of origin blocks to match the target length dm cache: fix flushing uninitialized delayed_work on cache_ctr error dm cache: fix out-of-bounds access to the dirty bitset when resizing dm cache: optimize dirty bit checking with find_next_bit when resizing dm cache: fix potential out-of-bounds access on the first resume
Mingcong Bai (1):
ASoC: amd: yc: fix internal mic on Xiaomi Book Pro 14 2022
Murad Masimov (1):
ALSA: firewire-lib: fix return value on fail in amdtp_tscm_init()
Namjae Jeon (2):
ksmbd: fix slab-use-after-free in ksmbd_smb2_session_create
ksmbd: fix slab-use-after-free in smb3_preauth_hash_rsp
NeilBrown (3):
sunrpc: handle -ENOTCONN in xs_tcp_setup_socket()
NFSv3: only use NFS timeout for MOUNT when protocols are compatible
NFSv3: handle out-of-order write replies.
Nícolas F. R. A. Prado (1):
net: stmmac: Fix unbalanced IRQ wake disable warning on single irq case
Peiyang Wang (1):
net: hns3: fix kernel crash when uninstalling driver
Peng Fan (1):
arm64: dts: imx8mp: correct sdhc ipg clk
Philo Lu (1):
virtio_net: Add hash_key_length check
Qi Xi (1):
fs/proc: fix compile warning about variable 'vmcore_mmap_ops'
Reinhard Speyerer (1):
USB: serial: option: add Fibocom FG132 0x0112 composition
Roberto Sassu (1):
nfs: Fix KMSAN warning in decode_getfattr_attrs()
Roger Quadros (1):
usb: dwc3: fix fault at system suspend if device was already runtime suspended
Roman Gushchin (1):
signal: restore the override_rlimit logic
Stefan Wahren (1):
net: vertexcom: mse102x: Fix possible double free of TX skb
Takashi Iwai (1):
ALSA: usb-audio: Add quirk for HP 320 FHD Webcam
Trond Myklebust (1):
filemap: Fix bounds checking in filemap_read()
Wei Fang (1):
net: enetc: set MAC address to the VF net_device
Xin Long (1):
sctp: properly validate chunk size in sctp_sf_ootb()
Zichen Xie (1):
dm-unstriped: cast an operand to sector_t to prevent potential uint32_t overflow
Zijun Hu (1):
usb: musb: sunxi: Fix accessing an released usb phy
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 116 +SUBLEVEL = 117 EXTRAVERSION = NAME = Curry Ramen
arch/arm/boot/dts/rk3036-kylin.dts +2 -2
@@ -304,8 +304,8 @@ regulator-state-mem { &i2c2 { status = "okay"; - rt5616: rt5616@1b { - compatible = "rt5616"; + rt5616: audio-codec@1b { + compatible = "realtek,rt5616"; reg = <0x1b>; clocks = <&cru SCLK_I2S_OUT>; clock-names = "mclk";
arch/arm/boot/dts/rk3036.dtsi +7 -7
@@ -382,12 +382,13 @@ reboot-mode { }; }; - acodec: acodec-ana@20030000 { - compatible = "rk3036-codec"; + acodec: audio-codec@20030000 { + compatible = "rockchip,rk3036-codec"; reg = <0x20030000 0x4000>; - rockchip,grf = <&grf>; clock-names = "acodec_pclk"; clocks = <&cru PCLK_ACODEC>; + rockchip,grf = <&grf>; + #sound-dai-cells = <0>; status = "disabled"; };
@@ -397,7 +398,6 @@ hdmi: hdmi@20034000 { interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cru PCLK_HDMI>; clock-names = "pclk"; - rockchip,grf = <&grf>; pinctrl-names = "default"; pinctrl-0 = <&hdmi_ctl>; status = "disabled";
@@ -550,11 +550,11 @@ i2c0: i2c@20072000 { }; spi: spi@20074000 { - compatible = "rockchip,rockchip-spi"; + compatible = "rockchip,rk3036-spi"; reg = <0x20074000 0x1000>; interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&cru PCLK_SPI>, <&cru SCLK_SPI>; - clock-names = "apb-pclk","spi_pclk"; + clocks = <&cru SCLK_SPI>, <&cru PCLK_SPI>; + clock-names = "spiclk", "apb_pclk"; dmas = <&pdma 8>, <&pdma 9>; dma-names = "tx", "rx"; pinctrl-names = "default";
arch/arm64/Kconfig +1 -0
@@ -2113,6 +2113,7 @@ config ARM64_SME bool "ARM Scalable Matrix Extension support" default y depends on ARM64_SVE + depends on BROKEN help The Scalable Matrix Extension (SME) is an extension to the AArch64 execution state which utilises a substantial subset of the SVE
arch/arm64/boot/dts/freescale/imx8-ss-vpu.dtsi +2 -2
@@ -15,7 +15,7 @@ vpu: vpu@2c000000 { mu_m0: mailbox@2d000000 { compatible = "fsl,imx6sx-mu"; reg = <0x2d000000 0x20000>; - interrupts = <GIC_SPI 469 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 472 IRQ_TYPE_LEVEL_HIGH>; #mbox-cells = <2>; power-domains = <&pd IMX_SC_R_VPU_MU_0>; status = "disabled";
@@ -24,7 +24,7 @@ mu_m0: mailbox@2d000000 { mu1_m0: mailbox@2d020000 { compatible = "fsl,imx6sx-mu"; reg = <0x2d020000 0x20000>; - interrupts = <GIC_SPI 470 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 473 IRQ_TYPE_LEVEL_HIGH>; #mbox-cells = <2>; power-domains = <&pd IMX_SC_R_VPU_MU_1>; status = "disabled";
arch/arm64/boot/dts/freescale/imx8mp.dtsi +3 -3
@@ -934,7 +934,7 @@ usdhc1: mmc@30b40000 { compatible = "fsl,imx8mp-usdhc", "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc"; reg = <0x30b40000 0x10000>; interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&clk IMX8MP_CLK_DUMMY>, + clocks = <&clk IMX8MP_CLK_IPG_ROOT>, <&clk IMX8MP_CLK_NAND_USDHC_BUS>, <&clk IMX8MP_CLK_USDHC1_ROOT>; clock-names = "ipg", "ahb", "per";
@@ -948,7 +948,7 @@ usdhc2: mmc@30b50000 { compatible = "fsl,imx8mp-usdhc", "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc"; reg = <0x30b50000 0x10000>; interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&clk IMX8MP_CLK_DUMMY>, + clocks = <&clk IMX8MP_CLK_IPG_ROOT>, <&clk IMX8MP_CLK_NAND_USDHC_BUS>, <&clk IMX8MP_CLK_USDHC2_ROOT>; clock-names = "ipg", "ahb", "per";
@@ -962,7 +962,7 @@ usdhc3: mmc@30b60000 { compatible = "fsl,imx8mp-usdhc", "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc"; reg = <0x30b60000 0x10000>; interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&clk IMX8MP_CLK_DUMMY>, + clocks = <&clk IMX8MP_CLK_IPG_ROOT>, <&clk IMX8MP_CLK_NAND_USDHC_BUS>, <&clk IMX8MP_CLK_USDHC3_ROOT>; clock-names = "ipg", "ahb", "per";
arch/arm64/boot/dts/freescale/imx8qxp-ss-vpu.dtsi new file +25 -0
@@ -0,0 +1,25 @@ +// SPDX-License-Identifier: (GPL-2.0-or-later OR X11) +/* + * Copyright 2023 TQ-Systems GmbH <[email protected]>, + * D-82229 Seefeld, Germany. + * Author: Alexander Stein + */ + +&mu_m0 { + interrupts = <GIC_SPI 469 IRQ_TYPE_LEVEL_HIGH>; +}; + +&mu1_m0 { + interrupts = <GIC_SPI 470 IRQ_TYPE_LEVEL_HIGH>; +}; + +&vpu_core0 { + reg = <0x2d040000 0x10000>; +}; + +&vpu_core1 { + reg = <0x2d050000 0x10000>; +}; + +/delete-node/ &mu2_m0; +/delete-node/ &vpu_core2;
arch/arm64/boot/dts/freescale/imx8qxp.dtsi +3 -3
@@ -46,9 +46,8 @@ aliases { serial1 = &lpuart1; serial2 = &lpuart2; serial3 = &lpuart3; - vpu_core0 = &vpu_core0; - vpu_core1 = &vpu_core1; - vpu_core2 = &vpu_core2; + vpu-core0 = &vpu_core0; + vpu-core1 = &vpu_core1; }; cpus {
@@ -316,6 +315,7 @@ map0 { }; #include "imx8qxp-ss-img.dtsi" +#include "imx8qxp-ss-vpu.dtsi" #include "imx8qxp-ss-adma.dtsi" #include "imx8qxp-ss-conn.dtsi" #include "imx8qxp-ss-lsio.dtsi"
arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts +2 -2
@@ -36,14 +36,14 @@ leds { power_led: led-0 { label = "firefly:red:power"; - linux,default-trigger = "ir-power-click"; + linux,default-trigger = "default-on"; default-state = "on"; gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>; }; user_led: led-1 { label = "firefly:blue:user"; - linux,default-trigger = "ir-user-click"; + linux,default-trigger = "rc-feedback"; default-state = "off"; gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_HIGH>; };
arch/arm64/boot/dts/rockchip/rk3328.dtsi +1 -2
@@ -724,8 +724,7 @@ hdmi: hdmi@ff3c0000 { compatible = "rockchip,rk3328-dw-hdmi"; reg = <0x0 0xff3c0000 0x0 0x20000>; reg-io-width = <4>; - interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cru PCLK_HDMI>, <&cru SCLK_HDMI_SFC>, <&cru SCLK_RTC32K>;
arch/arm64/boot/dts/rockchip/rk3368-lion.dtsi +0 -1
@@ -60,7 +60,6 @@ i2c_lvds_blc: i2c@0 { fan: fan@18 { compatible = "ti,amc6821"; reg = <0x18>; - #cooling-cells = <2>; }; rtc_twi: rtc@6f {
arch/arm64/boot/dts/rockchip/rk3399-eaidk-610.dts +1 -1
@@ -541,7 +541,7 @@ &i2c1 { status = "okay"; rt5651: audio-codec@1a { - compatible = "rockchip,rt5651"; + compatible = "realtek,rt5651"; reg = <0x1a>; clocks = <&cru SCLK_I2S_8CH_OUT>; clock-names = "mclk";
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi +1 -1
@@ -575,7 +575,7 @@ &uart0 { bluetooth { compatible = "brcm,bcm43438-bt"; clocks = <&rk808 1>; - clock-names = "ext_clock"; + clock-names = "txco"; device-wakeup-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>; host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>; shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;
arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator.dts +1 -1
@@ -163,7 +163,7 @@ &i2c1 { status = "okay"; rt5651: rt5651@1a { - compatible = "rockchip,rt5651"; + compatible = "realtek,rt5651"; reg = <0x1a>; clocks = <&cru SCLK_I2S_8CH_OUT>; clock-names = "mclk";
arch/arm64/boot/dts/rockchip/rk3566-pinenote.dtsi +2 -2
@@ -685,8 +685,8 @@ bluetooth { compatible = "brcm,bcm43438-bt"; clocks = <&rk817 1>; clock-names = "lpo"; - device-wake-gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>; - host-wake-gpios = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>; + device-wakeup-gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>; + host-wakeup-gpios = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>; reset-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_LOW>; pinctrl-0 = <&bt_enable_h>, <&bt_host_wake_l>, <&bt_wake_h>; pinctrl-names = "default";
arch/riscv/purgatory/entry.S +3 -0
@@ -11,6 +11,8 @@ .macro size, sym:req .size \sym, . - \sym .endm +#include <asm/asm.h> +#include <linux/linkage.h> .text
@@ -39,6 +41,7 @@ size purgatory_start .data +.align LGREG .globl riscv_kernel_entry riscv_kernel_entry: .quad 0
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +2 -2
@@ -132,8 +132,8 @@ static union acpi_object *amdgpu_atif_call(struct amdgpu_atif *atif, &buffer); obj = (union acpi_object *)buffer.pointer; -/* Fail if calling the method fails and ATIF is supported */ -if (ACPI_FAILURE (status) && status !=AE_NOT_FOUND ) { +/* Fail if calling the method fails */ +if (ACPI_FAILURE (status)) {DRM_DEBUG_DRIVER ("failed to evaluate ATIF got %s\n" ,acpi_format_exception (status));kfree (obj);
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c +4 -4
@@ -419,7 +419,7 @@ static ssize_t amdgpu_debugfs_regs_pcie_write(struct file *f, const char __userssize_t result =0 ;int r; -if (size &0x3 || *pos &0x3 ) +if (size >4096 || size &0x3 || *pos &0x3 )return -EINVAL ; r =pm_runtime_get_sync (adev_to_drm (adev)->dev);
@@ -2009,11 +2009,11 @@ int amdgpu_debugfs_init(struct amdgpu_device *adev)amdgpu_securedisplay_debugfs_init (adev);amdgpu_fw_attestation_debugfs_init (adev); -debugfs_create_file ("amdgpu_evict_vram" ,0444 , root, adev, +debugfs_create_file ("amdgpu_evict_vram" ,0400 , root, adev, &amdgpu_evict_vram_fops); -debugfs_create_file ("amdgpu_evict_gtt" ,0444 , root, adev, +debugfs_create_file ("amdgpu_evict_gtt" ,0400 , root, adev, &amdgpu_evict_gtt_fops); -debugfs_create_file ("amdgpu_test_ib" ,0444 , root, adev, +debugfs_create_file ("amdgpu_test_ib" ,0400 , root, adev, &amdgpu_debugfs_test_ib_fops);debugfs_create_file ("amdgpu_vm_info" ,0444 , root, adev, &amdgpu_debugfs_vm_info_fops);
drivers/hid/hid-core.c +1 -1
@@ -1878,7 +1878,7 @@ u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags)u32 len =hid_report_len (report) +7 ; -return kmalloc (len, flags); +return kzalloc (len, flags); }EXPORT_SYMBOL_GPL (hid_alloc_report_buf);
drivers/infiniband/hw/bnxt_re/qplib_fp.c +2 -1
@@ -1014,7 +1014,8 @@ int bnxt_qplib_create_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp) hwq_attr.stride =sizeof (struct sq_sge ); hwq_attr.depth =bnxt_qplib_get_depth (sq); hwq_attr.aux_stride = psn_sz; - hwq_attr.aux_depth =bnxt_qplib_set_sq_size (sq, qp->wqe_mode); + hwq_attr.aux_depth = psn_sz ?bnxt_qplib_set_sq_size (sq, qp->wqe_mode) + :0 ; hwq_attr.type =HWQ_TYPE_QUEUE ; rc =bnxt_qplib_alloc_init_hwq (&sq->hwq, &hwq_attr);if (rc)
drivers/irqchip/irq-gic-v3.c +7 -0
@@ -473,6 +473,13 @@ static int gic_irq_set_irqchip_state(struct irq_data *d, }gic_poke_irq (d, reg); + +/* +* Force read-back to guarantee that the active state has taken +* effect, and won't race with a guest-driven deactivation. +*/ +if (reg ==GICD_ISACTIVER ) +gic_peek_irq (d, reg);return 0 ; }
drivers/md/dm-cache-target.c +30 -29
140 lines not on this page · raw message
drivers/md/dm-unstripe.c +2 -2
@@ -84,8 +84,8 @@ static int unstripe_ctr(struct dm_target *ti, unsigned int argc, char **argv) } uc->physical_start = start; - uc->unstripe_offset = uc->unstripe * uc->chunk_size; - uc->unstripe_width = (uc->stripes -1 ) * uc->chunk_size; + uc->unstripe_offset = (sector_t )uc->unstripe * uc->chunk_size; + uc->unstripe_width = (sector_t)(uc->stripes -1 ) * uc->chunk_size; uc->chunk_shift =is_power_of_2 (uc->chunk_size) ?fls (uc->chunk_size) -1 :0 ; tmp_len = ti->len;
drivers/media/cec/usb/pulse8/pulse8-cec.c +1 -1
@@ -685,7 +685,7 @@ static int pulse8_setup(struct pulse8 *pulse8, struct serio *serio, err =pulse8_send_and_wait (pulse8, cmd,1 , cmd[0 ],4 );if (err)return err; - date = (data[0 ] <<24 ) | (data[1 ] <<16 ) | (data[2 ] <<8 ) | data[3 ]; + date = ((unsigned )data[0 ] <<24 ) | (data[1 ] <<16 ) | (data[2 ] <<8 ) | data[3 ];dev_info (pulse8->dev,"Firmware build date %ptT\n" , &date);dev_dbg (pulse8->dev,"Persistent config:\n" );
drivers/media/common/v4l2-tpg/v4l2-tpg-core.c +3 -0
@@ -1795,6 +1795,9 @@ static void tpg_precalculate_line(struct tpg_data *tpg)unsigned p;unsigned x; +if (WARN_ON_ONCE (!tpg->src_width || !tpg->scaled_width)) +return ; +switch (tpg->pattern) {case TPG_PAT_GREEN : contrast =TPG_COLOR_100_RED ;
drivers/media/dvb-core/dvb_frontend.c +2 -2
@@ -443,8 +443,8 @@ static int dvb_frontend_swzigzag_autotune(struct dvb_frontend *fe, int check_wradefault : fepriv->auto_step++; - fepriv->auto_sub_step =-1 ;/* it'll be incremented to 0 in a moment */ -break ; + fepriv->auto_sub_step =0 ; +continue ; }if (!ready) fepriv->auto_sub_step++;
drivers/media/dvb-core/dvbdev.c +15 -2
@@ -86,10 +86,15 @@ static DECLARE_RWSEM(minor_rwsem);static int dvb_device_open (struct inode *inode,struct file *file) {struct dvb_device *dvbdev; +unsigned int minor =iminor (inode); + +if (minor >=MAX_DVB_MINORS ) +return -ENODEV ;mutex_lock (&dvbdev_mutex);down_read (&minor_rwsem); - dvbdev = dvb_minors[iminor (inode)]; + + dvbdev = dvb_minors[minor];if (dvbdev && dvbdev->fops) {int err =0 ;
@@ -529,7 +534,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,for (minor =0 ; minor <MAX_DVB_MINORS ; minor++)if (dvb_minors[minor] ==NULL )break ; -if (minor ==MAX_DVB_MINORS ) { +if (minor >=MAX_DVB_MINORS ) {if (new_node) {list_del (&new_node->list_head);kfree (dvbdevfops);
@@ -544,6 +549,14 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev, }#else minor =nums2minor (adap->num, type, id); +if (minor >=MAX_DVB_MINORS ) { +dvb_media_device_free (dvbdev); +list_del (&dvbdev->list_head); +kfree (dvbdev); + *pdvbdev =NULL ; +mutex_unlock (&dvbdev_register_lock); +return ret; + }#endif dvbdev->minor = minor; dvb_minors[minor] =dvb_device_get (dvbdev);
drivers/media/dvb-frontends/cx24116.c +6 -1
@@ -741,6 +741,7 @@ static int cx24116_read_snr_pct(struct dvb_frontend *fe, u16 *snr) {struct cx24116_state *state = fe->demodulator_priv;u8 snr_reading; +int ret;static const u32 snr_tab[] = {/* 10 x Table (rounded up) */ 0x00000 ,0x0199A ,0x03333 ,0x04ccD ,0x06667 ,0x08000 ,0x0999A ,0x0b333 ,0x0cccD ,0x0e667 ,
@@ -749,7 +750,11 @@ static int cx24116_read_snr_pct(struct dvb_frontend *fe, u16 *snr)dprintk ("%s()\n" , __func__); - snr_reading =cx24116_readreg (state,CX24116_REG_QUALITY0 ); + ret =cx24116_readreg (state,CX24116_REG_QUALITY0 ); +if (ret <0 ) +return ret; + + snr_reading = ret;if (snr_reading >=0xa0 /* 100% */ ) *snr =0xffff ;
drivers/media/dvb-frontends/stb0899_algo.c +1 -1
@@ -269,7 +269,7 @@ static enum stb0899_status stb0899_search_carrier(struct stb0899_state *state)short int derot_freq =0 , last_derot_freq =0 , derot_limit, next_loop =3 ;int index =0 ; -u8 cfr[2 ]; +u8 cfr[2 ] = {0 };u8 reg; internal->status =NOCARRIER ;
drivers/media/i2c/adv7604.c +17 -9
@@ -2516,10 +2516,10 @@ static int adv76xx_log_status(struct v4l2_subdev *sd)const struct adv76xx_chip_info *info = state->info;struct v4l2_dv_timings timings;struct stdi_readback stdi; -u8 reg_io_0x02 =io_read (sd,0x02 ); +int ret; +u8 reg_io_0x02;u8 edid_enabled;u8 cable_det; -static const char *const csc_coeff_sel_rb[16 ] = {"bypassed" ,"YPbPr601 -> RGB" ,"reserved" ,"YPbPr709 -> RGB" ,"reserved" ,"RGB -> YPbPr601" ,"reserved" ,"RGB -> YPbPr709" ,
@@ -2618,13 +2618,21 @@ static int adv76xx_log_status(struct v4l2_subdev *sd)v4l2_info (sd,"-----Color space-----\n" );v4l2_info (sd,"RGB quantization range ctrl: %s\n" , rgb_quantization_range_txt[state->rgb_quantization_range]); -v4l2_info (sd,"Input color space: %s\n" , - input_color_space_txt[reg_io_0x02 >>4 ]); -v4l2_info (sd,"Output color space: %s %s, alt-gamma %s\n" , - (reg_io_0x02 &0x02 ) ?"RGB" :"YCbCr" , - (((reg_io_0x02 >>2 ) &0x01 ) ^ (reg_io_0x02 &0x01 )) ? -"(16-235)" :"(0-255)" , - (reg_io_0x02 &0x08 ) ?"enabled" :"disabled" ); + + ret =io_read (sd,0x02 ); +if (ret <0 ) { +v4l2_info (sd,"Can't read Input/Output color space\n" ); + }else { + reg_io_0x02 = ret; + +v4l2_info (sd,"Input color space: %s\n" , + input_color_space_txt[reg_io_0x02 >>4 ]); +v4l2_info (sd,"Output color space: %s %s, alt-gamma %s\n" , + (reg_io_0x02 &0x02 ) ?"RGB" :"YCbCr" , + (((reg_io_0x02 >>2 ) &0x01 ) ^ (reg_io_0x02 &0x01 )) ? +"(16-235)" :"(0-255)" , + (reg_io_0x02 &0x08 ) ?"enabled" :"disabled" ); + }v4l2_info (sd,"Color space conversion: %s\n" , csc_coeff_sel_rb[cp_read (sd, info->cp_csc) >>4 ]);
drivers/media/i2c/ar0521.c +2 -2
@@ -223,10 +223,10 @@ static u32 calc_pll(struct ar0521_dev *sensor, int num, u32 freq, u16 *pre_ptr,continue ;/* Minimum value */ if (new_mult >254 )break ;/* Maximum, larger pre won't work either */ -if (sensor->extclk_freq * (u64 )new_mult <AR0521_PLL_MIN * +if (sensor->extclk_freq * (u64 )new_mult < (u64 )AR0521_PLL_MIN * new_pre)continue ; -if (sensor->extclk_freq * (u64 )new_mult >AR0521_PLL_MAX * +if (sensor->extclk_freq * (u64 )new_mult > (u64 )AR0521_PLL_MAX * new_pre)break ;/* Larger pre won't work either */ new_pll = div64_round_up(sensor->extclk_freq * (u64)new_mult,
drivers/media/platform/amphion/vpu_core.c +1 -1
@@ -642,7 +642,7 @@ static int vpu_core_probe(struct platform_device *pdev)return -ENODEV ; core->type = core->res->type; - core->id =of_alias_get_id (dev->of_node,"vpu_core" ); + core->id =of_alias_get_id (dev->of_node,"vpu-core" );if (core->id <0 ) {dev_err (dev,"can't get vpu core id\n" );return core->id;
drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c +11 -6
@@ -775,11 +775,14 @@ static void exynos4_jpeg_parse_decode_h_tbl(struct s5p_jpeg_ctx *ctx) (unsigned long )vb2_plane_vaddr (&vb->vb2_buf,0 ) + ctx->out_q.sos +2 ; jpeg_buffer.curr =0 ; - word =0 ; -if (get_word_be (&jpeg_buffer, &word))return ; - jpeg_buffer.size = (long )word -2 ; + +if (word <2 ) + jpeg_buffer.size =0 ; +else + jpeg_buffer.size = (long )word -2 ; + jpeg_buffer.data +=2 ; jpeg_buffer.curr =0 ;
@@ -1058,6 +1061,7 @@ static int get_word_be(struct s5p_jpeg_buffer *buf, unsigned int *word)if (byte ==-1 )return -1 ; *word = (unsigned int )byte | temp; +return 0 ; }
@@ -1145,7 +1149,7 @@ static bool s5p_jpeg_parse_hdr(struct s5p_jpeg_q_data *result,if (get_word_be (&jpeg_buffer, &word))break ; length = (long )word -2 ; -if (!length) +if (length <=0 )return false; sof = jpeg_buffer.curr;/* after 0xffc0 */ sof_len = length;
@@ -1176,7 +1180,7 @@ static bool s5p_jpeg_parse_hdr(struct s5p_jpeg_q_data *result,if (get_word_be (&jpeg_buffer, &word))break ; length = (long )word -2 ; -if (!length) +if (length <=0 )return false;if (n_dqt >=S5P_JPEG_MAX_MARKER )return false;
@@ -1189,7 +1193,7 @@ static bool s5p_jpeg_parse_hdr(struct s5p_jpeg_q_data *result,if (get_word_be (&jpeg_buffer, &word))break ; length = (long )word -2 ; -if (!length) +if (length <=0 )return false;if (n_dht >=S5P_JPEG_MAX_MARKER )return false;
@@ -1214,6 +1218,7 @@ static bool s5p_jpeg_parse_hdr(struct s5p_jpeg_q_data *result,if (get_word_be (&jpeg_buffer, &word))break ; length = (long )word -2 ; +/* No need to check underflows as skip() does it */ skip (&jpeg_buffer, length);break ; }
drivers/media/usb/uvc/uvc_driver.c +1 -1
@@ -368,7 +368,7 @@ static int uvc_parse_format(struct uvc_device *dev,* Parse the frame descriptors. Only uncompressed, MJPEG and frame * based formats have frame descriptors. */ -while (buflen >2 && buffer[1 ] ==USB_DT_CS_INTERFACE && +while (ftype && buflen >2 && buffer[1 ] ==USB_DT_CS_INTERFACE && buffer[2 ] == ftype) { frame = &format->frame[format->nframes];if (ftype !=UVC_VS_FRAME_FRAME_BASED )
drivers/media/v4l2-core/v4l2-ctrls-api.c +11 -6
@@ -753,9 +753,10 @@ static int get_ctrl(struct v4l2_ctrl *ctrl, struct v4l2_ext_control *c)for (i =0 ; i < master->ncontrols; i++)cur_to_new (master->cluster[i]); ret =call_op (master, g_volatile_ctrl); -new_to_user (c, ctrl); +if (!ret) + ret =new_to_user (c, ctrl); }else { -cur_to_user (c, ctrl); + ret =cur_to_user (c, ctrl); }v4l2_ctrl_unlock (master);return ret;
@@ -770,7 +771,10 @@ int v4l2_g_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_control *control)if (!ctrl || !ctrl->is_int)return -EINVAL ; ret =get_ctrl (ctrl, &c); - control->value = c.value; + +if (!ret) + control->value = c.value; +return ret; }EXPORT_SYMBOL (v4l2_g_ctrl);
@@ -811,10 +815,11 @@ static int set_ctrl_lock(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl,int ret;v4l2_ctrl_lock (ctrl); -user_to_new (c, ctrl); - ret =set_ctrl (fh, ctrl,0 ); + ret =user_to_new (c, ctrl); +if (!ret) + ret =set_ctrl (fh, ctrl,0 );if (!ret) -cur_to_user (c, ctrl); + ret =cur_to_user (c, ctrl);v4l2_ctrl_unlock (ctrl);return ret; }
drivers/net/can/c_can/c_can_main.c +6 -1
@@ -1011,7 +1011,6 @@ static int c_can_handle_bus_err(struct net_device *dev,/* common for all type of bus errors */ priv->can.can_stats.bus_error++; - stats->rx_errors++;/* propagate the error condition to the CAN stack */ skb =alloc_can_err_skb (dev, &cf);
@@ -1027,26 +1026,32 @@ static int c_can_handle_bus_err(struct net_device *dev,case LEC_STUFF_ERROR :netdev_dbg (dev,"stuff error\n" ); cf->data[2 ] |=CAN_ERR_PROT_STUFF ; + stats->rx_errors++;break ;case LEC_FORM_ERROR :netdev_dbg (dev,"form error\n" ); cf->data[2 ] |=CAN_ERR_PROT_FORM ; + stats->rx_errors++;break ;case LEC_ACK_ERROR :netdev_dbg (dev,"ack error\n" ); cf->data[3 ] =CAN_ERR_PROT_LOC_ACK ; + stats->tx_errors++;break ;case LEC_BIT1_ERROR :netdev_dbg (dev,"bit1 error\n" ); cf->data[2 ] |=CAN_ERR_PROT_BIT1 ; + stats->tx_errors++;break ;case LEC_BIT0_ERROR :netdev_dbg (dev,"bit0 error\n" ); cf->data[2 ] |=CAN_ERR_PROT_BIT0 ; + stats->tx_errors++;break ;case LEC_CRC_ERROR :netdev_dbg (dev,"CRC error\n" ); cf->data[3 ] =CAN_ERR_PROT_LOC_CRC_SEQ ; + stats->rx_errors++;break ;default :break ;
drivers/net/can/spi/mcp251xfd/mcp251xfd-ring.c +5 -3
@@ -2,7 +2,7 @@// // mcp251xfd - Microchip MCP251xFD Family CAN controller driver // -// Copyright (c) 2019, 2020, 2021 Pengutronix, +// Copyright (c) 2019, 2020, 2021, 2024 Pengutronix, // Marc Kleine-Budde <[email protected]> // // Based on:
@@ -473,9 +473,11 @@ int mcp251xfd_ring_alloc(struct mcp251xfd_priv *priv) };const struct ethtool_coalesce ec = { .rx_coalesce_usecs_irq = priv->rx_coalesce_usecs_irq, - .rx_max_coalesced_frames_irq = priv->rx_obj_num_coalesce_irq, + .rx_max_coalesced_frames_irq = priv->rx_obj_num_coalesce_irq ==0 ? +1 : priv->rx_obj_num_coalesce_irq, .tx_coalesce_usecs_irq = priv->tx_coalesce_usecs_irq, - .tx_max_coalesced_frames_irq = priv->tx_obj_num_coalesce_irq, + .tx_max_coalesced_frames_irq = priv->tx_obj_num_coalesce_irq ==0 ? +1 : priv->tx_obj_num_coalesce_irq, };struct can_ram_layout layout;
drivers/net/can/spi/mcp251xfd/mcp251xfd-tef.c +7 -3
@@ -16,9 +16,9 @@#include "mcp251xfd.h" -static inline bool mcp251xfd_tx_fifo_sta_full (u32 fifo_sta) +static inline bool mcp251xfd_tx_fifo_sta_empty (u32 fifo_sta) { -return !(fifo_sta &MCP251XFD_REG_FIFOSTA_TFNRFNIF ); +return fifo_sta &MCP251XFD_REG_FIFOSTA_TFERFFIF ; } static inline int
@@ -122,7 +122,11 @@ mcp251xfd_get_tef_len(struct mcp251xfd_priv *priv, u8 *len_p)if (err)return err; -if (mcp251xfd_tx_fifo_sta_full (fifo_sta)) { +/* If the chip says the TX-FIFO is empty, but there are no TX +* buffers free in the ring, we assume all have been sent. +*/ +if (mcp251xfd_tx_fifo_sta_empty (fifo_sta) && +mcp251xfd_get_tx_free (tx_ring) ==0 ) { *len_p = tx_ring->obj_num;return 0 ; }
drivers/net/ethernet/arc/emac_main.c +16 -11
@@ -111,6 +111,7 @@ static void arc_emac_tx_clean(struct net_device *ndev) {struct arc_emac_priv *priv =netdev_priv (ndev);struct net_device_stats *stats = &ndev->stats; +struct device *dev = ndev->dev.parent;unsigned int i;for (i =0 ; i <TX_BD_NUM ; i++) {
@@ -140,7 +141,7 @@ static void arc_emac_tx_clean(struct net_device *ndev) stats->tx_bytes += skb->len; } -dma_unmap_single (&ndev->dev,dma_unmap_addr (tx_buff, addr), +dma_unmap_single (dev,dma_unmap_addr (tx_buff, addr),dma_unmap_len (tx_buff, len),DMA_TO_DEVICE );/* return the sk_buff to system */
@@ -174,6 +175,7 @@ static void arc_emac_tx_clean(struct net_device *ndev)static int arc_emac_rx (struct net_device *ndev,int budget) {struct arc_emac_priv *priv =netdev_priv (ndev); +struct device *dev = ndev->dev.parent;unsigned int work_done;for (work_done =0 ; work_done < budget; work_done++) {
@@ -223,9 +225,9 @@ static int arc_emac_rx(struct net_device *ndev, int budget)continue ; } - addr =dma_map_single (&ndev->dev, (void *)skb->data, + addr =dma_map_single (dev, (void *)skb->data,EMAC_BUFFER_SIZE ,DMA_FROM_DEVICE ); -if (dma_mapping_error (&ndev->dev, addr)) { +if (dma_mapping_error (dev, addr)) {if (net_ratelimit ())netdev_err (ndev,"cannot map dma buffer\n" );dev_kfree_skb (skb);
@@ -237,7 +239,7 @@ static int arc_emac_rx(struct net_device *ndev, int budget) }/* unmap previosly mapped skb */ -dma_unmap_single (&ndev->dev,dma_unmap_addr (rx_buff, addr), +dma_unmap_single (dev,dma_unmap_addr (rx_buff, addr),dma_unmap_len (rx_buff, len),DMA_FROM_DEVICE ); pktlen = info &LEN_MASK ;
@@ -423,6 +425,7 @@ static int arc_emac_open(struct net_device *ndev) {struct arc_emac_priv *priv =netdev_priv (ndev);struct phy_device *phy_dev = ndev->phydev; +struct device *dev = ndev->dev.parent;int i; phy_dev->autoneg =AUTONEG_ENABLE ;
@@ -445,9 +448,9 @@ static int arc_emac_open(struct net_device *ndev)if (unlikely (!rx_buff->skb))return -ENOMEM ; - addr =dma_map_single (&ndev->dev, (void *)rx_buff->skb->data, + addr =dma_map_single (dev, (void *)rx_buff->skb->data,EMAC_BUFFER_SIZE ,DMA_FROM_DEVICE ); -if (dma_mapping_error (&ndev->dev, addr)) { +if (dma_mapping_error (dev, addr)) {netdev_err (ndev,"cannot dma map\n" );dev_kfree_skb (rx_buff->skb);return -ENOMEM ;
@@ -548,6 +551,7 @@ static void arc_emac_set_rx_mode(struct net_device *ndev)static void arc_free_tx_queue (struct net_device *ndev) {struct arc_emac_priv *priv =netdev_priv (ndev); +struct device *dev = ndev->dev.parent;unsigned int i;for (i =0 ; i <TX_BD_NUM ; i++) {
@@ -555,7 +559,7 @@ static void arc_free_tx_queue(struct net_device *ndev)struct buffer_state *tx_buff = &priv->tx_buff[i];if (tx_buff->skb) { -dma_unmap_single (&ndev->dev, +dma_unmap_single (dev,dma_unmap_addr (tx_buff, addr),dma_unmap_len (tx_buff, len),DMA_TO_DEVICE );
@@ -579,6 +583,7 @@ static void arc_free_tx_queue(struct net_device *ndev)static void arc_free_rx_queue (struct net_device *ndev) {struct arc_emac_priv *priv =netdev_priv (ndev); +struct device *dev = ndev->dev.parent;unsigned int i;for (i =0 ; i <RX_BD_NUM ; i++) {
@@ -586,7 +591,7 @@ static void arc_free_rx_queue(struct net_device *ndev)struct buffer_state *rx_buff = &priv->rx_buff[i];if (rx_buff->skb) { -dma_unmap_single (&ndev->dev, +dma_unmap_single (dev,dma_unmap_addr (rx_buff, addr),dma_unmap_len (rx_buff, len),DMA_FROM_DEVICE );
@@ -679,6 +684,7 @@ static netdev_tx_t arc_emac_tx(struct sk_buff *skb, struct net_device *ndev)unsigned int len, *txbd_curr = &priv->txbd_curr;struct net_device_stats *stats = &ndev->stats;__le32 *info = &priv->txbd[*txbd_curr].info; +struct device *dev = ndev->dev.parent;dma_addr_t addr;if (skb_padto (skb,ETH_ZLEN ))
@@ -692,10 +698,9 @@ static netdev_tx_t arc_emac_tx(struct sk_buff *skb, struct net_device *ndev)return NETDEV_TX_BUSY ; } - addr =dma_map_single (&ndev->dev, (void *)skb->data, len, -DMA_TO_DEVICE ); + addr =dma_map_single (dev, (void *)skb->data, len,DMA_TO_DEVICE ); -if (unlikely (dma_mapping_error (&ndev->dev, addr))) { +if (unlikely (dma_mapping_error (dev, addr))) { stats->tx_dropped++; stats->tx_errors++;dev_kfree_skb_any (skb);
drivers/net/ethernet/arc/emac_mdio.c +8 -1
@@ -133,6 +133,7 @@ int arc_mdio_probe(struct arc_emac_priv *priv)struct arc_emac_mdio_bus_data *data = &priv->bus_data;struct device_node *np = priv->dev->of_node;const char *name ="Synopsys MII Bus" ; +struct device_node *mdio_node;struct mii_bus *bus;int error;
@@ -164,7 +165,13 @@ int arc_mdio_probe(struct arc_emac_priv *priv)snprintf (bus->id,MII_BUS_ID_SIZE ,"%s" , bus->name); - error =of_mdiobus_register (bus, priv->dev->of_node); +/* Backwards compatibility for EMAC nodes without MDIO subnode. */ + mdio_node =of_get_child_by_name (np,"mdio" ); +if (!mdio_node) + mdio_node =of_node_get (np); + + error =of_mdiobus_register (bus, mdio_node); +of_node_put (mdio_node);if (error) {mdiobus_free (bus); return dev_err_probe(priv->dev, error,
drivers/net/ethernet/freescale/enetc/enetc_vf.c +8 -1
@@ -78,11 +78,18 @@ static int enetc_vf_set_mac_addr(struct net_device *ndev, void *addr) {struct enetc_ndev_priv *priv =netdev_priv (ndev);struct sockaddr *saddr = addr; +int err;if (!is_valid_ether_addr (saddr->sa_data))return -EADDRNOTAVAIL ; -return enetc_msg_vsi_set_primary_mac_addr (priv, saddr); + err =enetc_msg_vsi_set_primary_mac_addr (priv, saddr); +if (err) +return err; + +eth_hw_addr_set (ndev, saddr->sa_data); + +return 0 ; } static int enetc_vf_set_features(struct net_device *ndev,
drivers/net/ethernet/hisilicon/hns3/hnae3.c +4 -1
@@ -25,8 +25,11 @@ void hnae3_unregister_ae_algo_prepare(struct hnae3_ae_algo *ae_algo) pci_id =pci_match_id (ae_algo->pdev_id_table, ae_dev->pdev);if (!pci_id)continue ; -if (IS_ENABLED (CONFIG_PCI_IOV )) +if (IS_ENABLED (CONFIG_PCI_IOV )) { +device_lock (&ae_dev->pdev->dev);pci_disable_sriov (ae_dev->pdev); +device_unlock (&ae_dev->pdev->dev); + } } }EXPORT_SYMBOL (hnae3_unregister_ae_algo_prepare);
drivers/net/ethernet/intel/i40e/i40e.h +1 -0
@@ -790,6 +790,7 @@ enum i40e_filter_state {I40E_FILTER_ACTIVE ,/* Added to switch by FW */ I40E_FILTER_FAILED ,/* Rejected by FW */ I40E_FILTER_REMOVE ,/* To be removed */ + I40E_FILTER_NEW_SYNC, /* New, not sent yet, is in i40e_sync_vsi_filters() */ /* There is no 'removed' state; the filter struct is freed */ }; struct i40e_mac_filter {
drivers/net/ethernet/intel/i40e/i40e_debugfs.c +1 -0
@@ -105,6 +105,7 @@ static char *i40e_filter_state_string[] = {"ACTIVE" ,"FAILED" ,"REMOVE" , + "NEW_SYNC", };/**
drivers/net/ethernet/intel/i40e/i40e_main.c +10 -2
@@ -1251,6 +1251,7 @@ int i40e_count_filters(struct i40e_vsi *vsi)hash_for_each_safe (vsi->mac_filter_hash, bkt, h, f, hlist) {if (f->state ==I40E_FILTER_NEW || + f->state ==I40E_FILTER_NEW_SYNC || f->state ==I40E_FILTER_ACTIVE ) ++cnt; }
@@ -1437,6 +1438,8 @@ static int i40e_correct_mac_vlan_filters(struct i40e_vsi *vsi, new->f = add_head; new->state = add_head->state; +if (add_head->state ==I40E_FILTER_NEW ) + add_head->state =I40E_FILTER_NEW_SYNC ;/* Add the new filter to the tmp list */ hlist_add_head (&new->hlist, tmp_add_list);
@@ -1546,6 +1549,8 @@ static int i40e_correct_vf_mac_vlan_filters(struct i40e_vsi *vsi,return -ENOMEM ; new_mac->f = add_head; new_mac->state = add_head->state; +if (add_head->state ==I40E_FILTER_NEW ) + add_head->state =I40E_FILTER_NEW_SYNC ;/* Add the new filter to the tmp list */ hlist_add_head (&new_mac->hlist, tmp_add_list);
@@ -2437,7 +2442,8 @@ static int i40e_aqc_broadcast_filter(struct i40e_vsi *vsi, const char *vsi_name, struct i40e_mac_filter *f) { - bool enable = f->state == I40E_FILTER_NEW; + bool enable = f->state == I40E_FILTER_NEW || + f->state ==I40E_FILTER_NEW_SYNC ;struct i40e_hw *hw = &vsi->back->hw;int aq_ret;
@@ -2611,6 +2617,7 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi)/* Add it to the hash list */ hlist_add_head (&new->hlist, &tmp_add_list); + f->state =I40E_FILTER_NEW_SYNC ; }/* Count the number of active (current and new) VLAN
@@ -2762,7 +2769,8 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi)spin_lock_bh (&vsi->mac_filter_hash_lock);hlist_for_each_entry_safe (new, h, &tmp_add_list, hlist) {/* Only update the state if we're still NEW */ -if (new->f->state ==I40E_FILTER_NEW ) +if (new->f->state ==I40E_FILTER_NEW || + new->f->state ==I40E_FILTER_NEW_SYNC ) new->f->state = new->state;hlist_del (&new->hlist);netdev_hw_addr_refcnt (new->f, vsi->netdev,-1 );
drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c +2 -1
@@ -1694,11 +1694,12 @@ static int ice_set_fdir_input_set(struct ice_vsi *vsi, struct ethtool_rx_flow_spec *fsp, struct ice_fdir_fltr *input) { - u16 dest_vsi, q_index = 0; + s16 q_index = ICE_FDIR_NO_QUEUE_IDX;u16 orig_q_index =0 ;struct ice_pf *pf;struct ice_hw *hw;int flow_type; +u16 dest_vsi;u8 dest_ctl;if (!vsi || !fsp || !input)
drivers/net/ethernet/intel/ice/ice_fdir.h +3 -1
@@ -50,6 +50,8 @@*/ #define ICE_FDIR_IPV4_PKT_FLAG_MF 0x20 +#define ICE_FDIR_NO_QUEUE_IDX -1 +enum ice_fltr_prgm_desc_dest {ICE_FLTR_PRGM_DESC_DEST_DROP_PKT ,ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QINDEX ,
@@ -181,7 +183,7 @@ struct ice_fdir_fltr {u16 flex_fltr;/* filter control */ -u16 q_index; +s16 q_index;u16 orig_q_index;u16 dest_vsi;u8 dest_ctl;
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +1 -0
@@ -3665,6 +3665,7 @@ static int stmmac_request_irq_single(struct net_device *dev)/* Request the Wake IRQ in case of another line * is used for WoL */ + priv->wol_irq_disabled = true;if (priv->wol_irq >0 && priv->wol_irq != dev->irq) { ret =request_irq (priv->wol_irq, stmmac_interrupt,IRQF_SHARED , dev->name, dev);
drivers/net/ethernet/vertexcom/mse102x.c +3 -2
@@ -222,7 +222,7 @@ static int mse102x_tx_frame_spi(struct mse102x_net *mse, struct sk_buff *txp,struct mse102x_net_spi *mses =to_mse102x_spi (mse);struct spi_transfer *xfer = &mses->spi_xfer;struct spi_message *msg = &mses->spi_msg; -struct sk_buff *tskb; +struct sk_buff *tskb =NULL ;int ret; netif_dbg(mse, tx_queued, mse->ndev, "%s: skb %p, %d@%p\n",
@@ -235,7 +235,6 @@ static int mse102x_tx_frame_spi(struct mse102x_net *mse, struct sk_buff *txp,if (!tskb)return -ENOMEM ; -dev_kfree_skb (txp); txp = tskb; }
@@ -257,6 +256,8 @@ static int mse102x_tx_frame_spi(struct mse102x_net *mse, struct sk_buff *txp, mse->stats.xfer_err++; } +dev_kfree_skb (tskb); +return ret; }
drivers/net/phy/dp83848.c +2 -0
@@ -147,6 +147,8 @@ MODULE_DEVICE_TABLE(mdio, dp83848_tbl);/* IRQ related */ \ .config_intr = dp83848_config_intr, \ .handle_interrupt = dp83848_handle_interrupt, \ + \ + .flags = PHY_RST_AFTER_CLK_EN, \ }static struct phy_driver dp83848_driver[] = {
drivers/net/virtio_net.c +6 -0
@@ -3887,6 +3887,12 @@ static int virtnet_probe(struct virtio_device *vdev)if (vi->has_rss || vi->has_rss_hash_report) { vi->rss_key_size =virtio_cread8 (vdev, offsetof(struct virtio_net_config , rss_max_key_size)); +if (vi->rss_key_size >VIRTIO_NET_RSS_MAX_KEY_SIZE ) { +dev_err (&vdev->dev,"rss_max_key_size=%u exceeds the limit %u.\n" , + vi->rss_key_size,VIRTIO_NET_RSS_MAX_KEY_SIZE ); + err = -EINVAL ; + goto free; + } vi->rss_hash_types_supported =virtio_cread32 (vdev, offsetof(struct virtio_net_config , supported_hash_types));
drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c +1 -1
@@ -262,7 +262,7 @@ int t7xx_dpmaif_rx_buf_alloc(struct dpmaif_ctrl *dpmaif_ctrl,return 0 ; err_unmap_skbs: -while (--i >0 ) +while (i--)t7xx_unmap_bat_skb (dpmaif_ctrl->dev, bat_req->bat_skb, i);return ret;
drivers/platform/x86/amd/pmc.c +5 -0
@@ -878,6 +878,11 @@ static int amd_pmc_s2d_init(struct amd_pmc_dev *dev)amd_pmc_send_cmd (dev,S2D_PHYS_ADDR_LOW , &phys_addr_low,STB_SPILL_TO_DRAM ,1 );amd_pmc_send_cmd (dev,S2D_PHYS_ADDR_HIGH , &phys_addr_hi,STB_SPILL_TO_DRAM ,1 ); +if (!phys_addr_hi && !phys_addr_low) { +dev_err (dev->dev,"STB is not enabled on the system; disable enable_stb or contact system vendor\n" ); +return -EINVAL ; + } + stb_phys_addr = ((u64 )phys_addr_hi <<32 | phys_addr_low);/* Clear msg_port for other SMU operation */
drivers/pwm/pwm-imx-tpm.c +3 -1
@@ -106,7 +106,9 @@ static int pwm_imx_tpm_round_state(struct pwm_chip *chip, p->prescale = prescale; period_count = (clock_unit + ((1 << prescale) >>1 )) >> prescale; - p->mod = period_count; +if (period_count ==0 ) +return -EINVAL ; + p->mod = period_count -1 ;/* calculate real period HW can support */ tmp = (u64 )period_count << prescale;
drivers/scsi/sd_zbc.c +1 -2
@@ -216,8 +216,7 @@ static void *sd_zbc_alloc_report_buffer(struct scsi_disk *sdkp, bufsize =min_t (size_t, bufsize,queue_max_segments (q) <<PAGE_SHIFT );while (bufsize >=SECTOR_SIZE ) { - buf =__vmalloc (bufsize, -GFP_KERNEL | __GFP_ZERO | __GFP_NORETRY); + buf =kvzalloc (bufsize,GFP_KERNEL | __GFP_NORETRY);if (buf) { *buflen = bufsize;return buf;
drivers/thermal/qcom/lmh.c +7 -0
@@ -73,7 +73,14 @@ static struct irq_chip lmh_irq_chip = {static int lmh_irq_map (struct irq_domain *d,unsigned int irq,irq_hw_number_t hw) {struct lmh_hw_data *lmh_data = d->host_data; +static struct lock_class_key lmh_lock_key; +static struct lock_class_key lmh_request_key; +/* +* This lock class tells lockdep that GPIO irqs are in a different +* category than their parents, so it won't report false recursion. +*/ +irq_set_lockdep_class (irq, &lmh_lock_key, &lmh_request_key);irq_set_chip_and_handler (irq, &lmh_irq_chip, handle_simple_irq);irq_set_chip_data (irq, lmh_data);
drivers/thermal/thermal_of.c +10 -11
@@ -238,18 +238,15 @@ static struct thermal_trip *thermal_of_trips_init(struct device_node *np, int *nstruct device_node *trips;int ret, count; + *ntrips =0 ; + trips =of_get_child_by_name (np,"trips" ); -if (!trips) { -pr_err ("Failed to find 'trips' node\n" ); -return ERR_PTR (-EINVAL ); - } +if (!trips) +return NULL ; count =of_get_child_count (trips); -if (!count) { -pr_err ("No trip point defined\n" ); - ret = -EINVAL ; - goto out_of_node_put; - } +if (!count) +return NULL ; tt =kzalloc (sizeof (*tt) * count,GFP_KERNEL );if (!tt) {
@@ -272,7 +269,6 @@ static struct thermal_trip *thermal_of_trips_init(struct device_node *np, int *n out_kfree:kfree (tt); - *ntrips =0 ; out_of_node_put:of_node_put (trips);
@@ -619,11 +615,14 @@ struct thermal_zone_device *thermal_of_zone_register(struct device_node *sensor, trips =thermal_of_trips_init (np, &ntrips);if (IS_ERR (trips)) { -pr_err ("Failed to find trip points for %pOFn id=%d\n" , sensor, id); +pr_err ("Failed to parse trip points for %pOFn id=%d\n" , sensor, id); ret =PTR_ERR (trips); goto out_kfree_of_ops; } +if (!trips) +pr_info ("No trip points found for %pOFn id=%d\n" , sensor, id); + ret =thermal_of_monitor_init (np, &delay, &pdelay);if (ret) {pr_err ("Failed to initialize monitoring delays from %pOFn\n" , np);
drivers/usb/dwc3/core.c +12 -13
@@ -2131,10 +2131,18 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg) {u32 reg; - dwc->susphy_state = (dwc3_readl (dwc->regs,DWC3_GUSB2PHYCFG (0 )) & -DWC3_GUSB2PHYCFG_SUSPHY ) || - (dwc3_readl (dwc->regs,DWC3_GUSB3PIPECTL (0 )) & -DWC3_GUSB3PIPECTL_SUSPHY ); +if (!pm_runtime_suspended (dwc->dev) && !PMSG_IS_AUTO (msg)) { + dwc->susphy_state = (dwc3_readl (dwc->regs,DWC3_GUSB2PHYCFG (0 )) & +DWC3_GUSB2PHYCFG_SUSPHY ) || + (dwc3_readl (dwc->regs,DWC3_GUSB3PIPECTL (0 )) & +DWC3_GUSB3PIPECTL_SUSPHY ); +/* +* TI AM62 platform requires SUSPHY to be +* enabled for system suspend to work. +*/ +if (!dwc->susphy_state) +dwc3_enable_susphy (dwc, true); + }switch (dwc->current_dr_role) {case DWC3_GCTL_PRTCAP_DEVICE :
@@ -2183,15 +2191,6 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)break ; } -if (!PMSG_IS_AUTO (msg)) { -/* -* TI AM62 platform requires SUSPHY to be -* enabled for system suspend to work. -*/ -if (!dwc->susphy_state) -dwc3_enable_susphy (dwc, true); - } -return 0 ; }
drivers/usb/musb/sunxi.c +0 -2
@@ -286,8 +286,6 @@ static int sunxi_musb_exit(struct musb *musb)if (test_bit (SUNXI_MUSB_FL_HAS_SRAM , &glue->flags))sunxi_sram_release (musb->controller->parent); -devm_usb_put_phy (glue->dev, glue->xceiv); -return 0 ; }
drivers/usb/serial/io_edgeport.c +4 -4
@@ -770,11 +770,12 @@ static void edge_bulk_out_data_callback(struct urb *urb)static void edge_bulk_out_cmd_callback (struct urb *urb) {struct edgeport_port *edge_port = urb->context; +struct device *dev = &urb->dev->dev;int status = urb->status;atomic_dec (&CmdUrbs); -dev_dbg (&urb->dev->dev,"%s - FREE URB %p (outstanding %d)\n" , - __func__, urb,atomic_read (&CmdUrbs)); +dev_dbg (dev,"%s - FREE URB %p (outstanding %d)\n" , __func__, urb, +atomic_read (&CmdUrbs));/* clean up the transfer buffer */
@@ -784,8 +785,7 @@ static void edge_bulk_out_cmd_callback(struct urb *urb)usb_free_urb (urb);if (status) { -dev_dbg (&urb->dev->dev, -"%s - nonzero write bulk status received: %d\n" , +dev_dbg (dev,"%s - nonzero write bulk status received: %d\n" , __func__, status);return ; }
drivers/usb/serial/option.c +6 -0
@@ -251,6 +251,7 @@ static void option_instat_callback(struct urb *urb);#define QUECTEL_VENDOR_ID 0x2c7c/* These Quectel products use Quectel's vendor ID */ #define QUECTEL_PRODUCT_EC21 0x0121 +#define QUECTEL_PRODUCT_RG650V 0x0122#define QUECTEL_PRODUCT_EM061K_LTA 0x0123#define QUECTEL_PRODUCT_EM061K_LMS 0x0124#define QUECTEL_PRODUCT_EC25 0x0125
@@ -1273,6 +1274,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG912Y, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG916Q, 0xff, 0x00, 0x00) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG650V, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG650V, 0xff, 0, 0) }, { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
@@ -2320,6 +2323,9 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0111, 0xff) }, /* Fibocom FM160 (MBIM mode) */ + { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x0112, 0xff, 0xff, 0x30) }, /* Fibocom FG132 Diag */ + { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x0112, 0xff, 0xff, 0x40) }, /* Fibocom FG132 AT */ + { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x0112, 0xff, 0, 0) }, /* Fibocom FG132 NMEA */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0115, 0xff), /* Fibocom FM135 (laptop MBIM) */ .driver_info = RSVD(5) }, { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */
drivers/usb/serial/qcserial.c +2 -0
@@ -166,6 +166,8 @@ static const struct usb_device_id id_table[] = { {DEVICE_SWI(0x1199, 0x9090)}, /* Sierra Wireless EM7565 QDL */ {DEVICE_SWI(0x1199, 0x9091)}, /* Sierra Wireless EM7565 */ {DEVICE_SWI(0x1199, 0x90d2)}, /* Sierra Wireless EM9191 QDL */ + {DEVICE_SWI(0x1199, 0x90e4)}, /* Sierra Wireless EM86xx QDL*/ + {DEVICE_SWI(0x1199, 0x90e5)}, /* Sierra Wireless EM86xx */ {DEVICE_SWI(0x1199, 0xc080)}, /* Sierra Wireless EM7590 QDL */ {DEVICE_SWI(0x1199, 0xc081)}, /* Sierra Wireless EM7590 */ {DEVICE_SWI(0x413c, 0x81a2)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
drivers/usb/typec/ucsi/ucsi_ccg.c +2 -0
@@ -441,6 +441,8 @@ static void ucsi_ccg_update_set_new_cam_cmd(struct ucsi_ccg *uc, port = uc->orig; new_cam =UCSI_SET_NEW_CAM_GET_AM (*cmd); +if (new_cam >=ARRAY_SIZE (uc->updated)) +return ; new_port = &uc->updated[new_cam]; cam = new_port->linked_idx; enter_new_mode =UCSI_SET_NEW_CAM_ENTER (*cmd);
fs/btrfs/delayed-ref.c +1 -1
@@ -622,7 +622,7 @@ static int insert_delayed_ref(struct btrfs_trans_handle *trans, &href->ref_add_list); else if (ref->action == BTRFS_DROP_DELAYED_REF) {ASSERT (!list_empty (&exist->add_list)); -list_del (&exist->add_list); +list_del_init (&exist->add_list); } else {ASSERT (0 ); }
fs/nfs/inode.c +109 -16
204 lines not on this page · raw message
fs/nfs/super.c +9 -1
@@ -866,7 +866,15 @@ static int nfs_request_mount(struct fs_context *fc,* Now ask the mount server to map our export path * to a file handle. */ - status =nfs_mount (&request, ctx->timeo, ctx->retrans); +if ((request.protocol ==XPRT_TRANSPORT_UDP ) == + !(ctx->flags &NFS_MOUNT_TCP )) +/* +* NFS protocol and mount protocol are both UDP or neither UDP +* so timeouts are compatible. Use NFS timeouts for MOUNT +*/ + status =nfs_mount (&request, ctx->timeo, ctx->retrans); +else + status =nfs_mount (&request,NFS_UNSPEC_TIMEO ,NFS_UNSPEC_RETRANS );if (status !=0 ) {dfprintk (MOUNT ,"NFS: unable to mount server %s, error %d\n" , request.hostname, status);
fs/ocfs2/xattr.c +1 -2
@@ -2040,8 +2040,7 @@ static int ocfs2_xa_remove(struct ocfs2_xa_loc *loc, rc =0 ;ocfs2_xa_cleanup_value_truncate (loc,"removing" , orig_clusters); -if (rc) - goto out; + goto out; } }
fs/proc/vmcore.c +5 -4
@@ -457,10 +457,6 @@ static vm_fault_t mmap_vmcore_fault(struct vm_fault *vmf)#endif } -static const struct vm_operations_struct vmcore_mmap_ops = { - .fault = mmap_vmcore_fault, -}; -/** * vmcore_alloc_buf - allocate buffer in vmalloc memory * @size: size of buffer
@@ -488,6 +484,11 @@ static inline char *vmcore_alloc_buf(size_t size)* virtually contiguous user-space in ELF layout. */ #ifdef CONFIG_MMU + +static const struct vm_operations_struct vmcore_mmap_ops = { + .fault = mmap_vmcore_fault, +}; +/* * remap_oldmem_pfn_checked - do remap_oldmem_pfn_range replacing all pages * reported as not being ram with the zero page.
fs/smb/server/mgmt/user_session.c +10 -5
@@ -90,7 +90,7 @@ static int __rpc_method(char *rpc_name)int ksmbd_session_rpc_open (struct ksmbd_session *sess,char *rpc_name) { -struct ksmbd_session_rpc *entry; +struct ksmbd_session_rpc *entry, *old;struct ksmbd_rpc_command *resp;int method;
@@ -106,16 +106,19 @@ int ksmbd_session_rpc_open(struct ksmbd_session *sess, char *rpc_name) entry->id =ksmbd_ipc_id_alloc ();if (entry->id <0 ) goto free_entry; -xa_store (&sess->rpc_handle_list, entry->id, entry,GFP_KERNEL ); + old =xa_store (&sess->rpc_handle_list, entry->id, entry,GFP_KERNEL ); +if (xa_is_err (old)) + goto free_id; resp =ksmbd_rpc_open (sess, entry->id);if (!resp) - goto free_id; + goto erase_xa;kvfree (resp);return entry->id; -free_id: +erase_xa:xa_erase (&sess->rpc_handle_list, entry->id); +free_id:ksmbd_rpc_id_free (entry->id); free_entry:kfree (entry);
@@ -174,6 +177,7 @@ static void ksmbd_expire_session(struct ksmbd_conn *conn)unsigned long id;struct ksmbd_session *sess; +down_write (&sessions_table_lock);down_write (&conn->session_lock);xa_for_each (&conn->sessions, id, sess) { if (atomic_read(&sess->refcnt) == 0 &&
@@ -187,6 +191,7 @@ static void ksmbd_expire_session(struct ksmbd_conn *conn) } }up_write (&conn->session_lock); +up_write (&sessions_table_lock); } int ksmbd_session_register(struct ksmbd_conn *conn,
@@ -228,7 +233,6 @@ void ksmbd_sessions_deregister(struct ksmbd_conn *conn) } } } -up_write (&sessions_table_lock);down_write (&conn->session_lock);xa_for_each (&conn->sessions, id, sess) {
@@ -248,6 +252,7 @@ void ksmbd_sessions_deregister(struct ksmbd_conn *conn) } }up_write (&conn->session_lock); +up_write (&sessions_table_lock); } struct ksmbd_session *ksmbd_session_lookup(struct ksmbd_conn *conn,
fs/smb/server/server.c +2 -2
@@ -238,11 +238,11 @@ static void __handle_ksmbd_work(struct ksmbd_work *work, }while (is_chained == true); send: -if (work->sess) -ksmbd_user_session_put (work->sess);if (work->tcon)ksmbd_tree_connect_put (work->tcon);smb3_preauth_hash_rsp (work); +if (work->sess) +ksmbd_user_session_put (work->sess);if (work->sess && work->sess->enc && work->encrypted && conn->ops->encrypt_resp) { rc = conn->ops->encrypt_resp (work);
include/linux/nfs_fs.h +47 -0
59 lines not on this page · raw message
include/linux/tick.h +8 -0
@@ -252,12 +252,19 @@ static inline void tick_dep_set_task(struct task_struct *tsk,if (tick_nohz_full_enabled ())tick_nohz_dep_set_task (tsk, bit); } +static inline void tick_dep_clear_task (struct task_struct *tsk,enum tick_dep_bits bit) {if (tick_nohz_full_enabled ())tick_nohz_dep_clear_task (tsk, bit); } + +static inline void tick_dep_init_task (struct task_struct *tsk) +{ +atomic_set (&tsk->tick_dep_mask,0 ); +} +static inline void tick_dep_set_signal (struct task_struct *tsk,enum tick_dep_bits bit) {
@@ -291,6 +298,7 @@ static inline void tick_dep_set_task(struct task_struct *tsk, enum tick_dep_bits bit) { }static inline void tick_dep_clear_task (struct task_struct *tsk,enum tick_dep_bits bit) { } +static inline void tick_dep_init_task (struct task_struct *tsk) { }static inline void tick_dep_set_signal (struct task_struct *tsk,enum tick_dep_bits bit) { } static inline void tick_dep_clear_signal(struct signal_struct *signal,
include/linux/user_namespace.h +2 -1
@@ -131,7 +131,8 @@ static inline long get_rlimit_value(struct ucounts *ucounts, enum rlimit_type tylong inc_rlimit_ucounts (struct ucounts *ucounts,enum rlimit_type type,long v);bool dec_rlimit_ucounts (struct ucounts *ucounts,enum rlimit_type type,long v); -long inc_rlimit_get_ucounts (struct ucounts *ucounts,enum rlimit_type type); +long inc_rlimit_get_ucounts (struct ucounts *ucounts,enum rlimit_type type, +bool override_rlimit);void dec_rlimit_put_ucounts (struct ucounts *ucounts,enum rlimit_type type);bool is_rlimit_overlimit (struct ucounts *ucounts,enum rlimit_type type,unsigned long max);
kernel/fork.c +2 -0
@@ -97,6 +97,7 @@#include <linux/scs.h> #include <linux/io_uring.h> #include <linux/bpf.h> +#include <linux/tick.h> #include <asm/pgalloc.h> #include <linux/uaccess.h>
@@ -2183,6 +2184,7 @@ static __latent_entropy struct task_struct *copy_process(acct_clear_integrals (p);posix_cputimers_init (&p->posix_cputimers); +tick_dep_init_task (p); p->io_context =NULL ;audit_set_context (p,NULL );
kernel/signal.c +2 -1
@@ -426,7 +426,8 @@ __sigqueue_alloc(int sig, struct task_struct *t, gfp_t gfp_flags,*/ rcu_read_lock (); ucounts =task_ucounts (t); - sigpending =inc_rlimit_get_ucounts (ucounts,UCOUNT_RLIMIT_SIGPENDING ); + sigpending =inc_rlimit_get_ucounts (ucounts,UCOUNT_RLIMIT_SIGPENDING , + override_rlimit);rcu_read_unlock ();if (!sigpending)return NULL ;
kernel/ucount.c +5 -4
@@ -307,7 +307,8 @@ void dec_rlimit_put_ucounts(struct ucounts *ucounts, enum rlimit_type type)do_dec_rlimit_put_ucounts (ucounts,NULL , type); } -long inc_rlimit_get_ucounts (struct ucounts *ucounts,enum rlimit_type type) +long inc_rlimit_get_ucounts (struct ucounts *ucounts,enum rlimit_type type, +bool override_rlimit) {/* Caller must hold a reference to ucounts */ struct ucounts *iter;
@@ -317,10 +318,11 @@ long inc_rlimit_get_ucounts(struct ucounts *ucounts, enum rlimit_type type)for (iter = ucounts; iter; iter = iter->ns->ucounts) {long new =atomic_long_add_return (1 , &iter->rlimit[type]);if (new <0 || new > max) - goto unwind; + goto dec_unwind;if (iter == ucounts) ret = new; - max =get_userns_rlimit_max (iter->ns, type); +if (!override_rlimit) + max =get_userns_rlimit_max (iter->ns, type);/* * Grab an extra ucount reference for the caller when * the rlimit count was previously 0.
@@ -334,7 +336,6 @@ long inc_rlimit_get_ucounts(struct ucounts *ucounts, enum rlimit_type type) dec_unwind: dec =atomic_long_sub_return (1 , &iter->rlimit[type]);WARN_ON_ONCE (dec <0 ); -unwind:do_dec_rlimit_put_ucounts (ucounts, iter, type);return 0 ; }
mm/filemap.c +1 -1
@@ -2738,7 +2738,7 @@ ssize_t filemap_read(struct kiocb *iocb, struct iov_iter *iter,if (unlikely (!iov_iter_count (iter)))return 0 ; -iov_iter_truncate (iter, inode->i_sb->s_maxbytes); +iov_iter_truncate (iter, inode->i_sb->s_maxbytes - iocb->ki_pos);folio_batch_init (&fbatch); do {
net/core/dst.c +12 -5
@@ -108,9 +108,6 @@ struct dst_entry *dst_destroy(struct dst_entry * dst) child = xdst->child; }#endif -if (!(dst->flags &DST_NOCOUNT )) -dst_entries_add (dst->ops,-1 ); -if (dst->ops->destroy) dst->ops->destroy (dst);netdev_put (dst->dev, &dst->dev_tracker);
@@ -160,6 +157,12 @@ void dst_dev_put(struct dst_entry *dst) }EXPORT_SYMBOL (dst_dev_put); +static void dst_count_dec (struct dst_entry *dst) +{ +if (!(dst->flags &DST_NOCOUNT )) +dst_entries_add (dst->ops,-1 ); +} +void dst_release (struct dst_entry *dst) {if (dst) {
@@ -169,8 +172,10 @@ void dst_release(struct dst_entry *dst)if (WARN_ONCE (newrefcnt <0 ,"dst_release underflow" ))net_warn_ratelimited ("%s: dst:%p refcnt:%d\n" , __func__, dst, newrefcnt); -if (!newrefcnt) +if (!newrefcnt){ +dst_count_dec (dst);call_rcu (&dst->rcu_head, dst_destroy_rcu); + } } }EXPORT_SYMBOL (dst_release);
@@ -184,8 +189,10 @@ void dst_release_immediate(struct dst_entry *dst)if (WARN_ONCE (newrefcnt <0 ,"dst_release_immediate underflow" ))net_warn_ratelimited ("%s: dst:%p refcnt:%d\n" , __func__, dst, newrefcnt); -if (!newrefcnt) +if (!newrefcnt){ +dst_count_dec (dst);dst_destroy (dst); + } } }EXPORT_SYMBOL (dst_release_immediate);
net/mac80211/chan.c +1 -3
@@ -245,9 +245,7 @@ ieee80211_get_max_required_bw(struct ieee80211_sub_if_data *sdata,enum nl80211_chan_width max_bw =NL80211_CHAN_WIDTH_20_NOHT ;struct sta_info *sta; -lockdep_assert_wiphy (sdata->local->hw.wiphy); - -list_for_each_entry (sta, &sdata->local->sta_list, list) { +list_for_each_entry_rcu (sta, &sdata->local->sta_list, list) {if (sdata != sta->sdata && !(sta->sdata->bss && sta->sdata->bss == sdata->bss))continue ;
net/mac80211/mlme.c +1 -1
@@ -660,7 +660,7 @@ static bool ieee80211_add_vht_ie(struct ieee80211_sub_if_data *sdata,bool disable_mu_mimo = false;struct ieee80211_sub_if_data *other; -list_for_each_entry (other, &local->interfaces, list) { +list_for_each_entry_rcu (other, &local->interfaces, list) {if (other->vif.bss_conf.mu_mimo_owner) { disable_mu_mimo = true;break ;
net/mac80211/scan.c +1 -1
@@ -501,7 +501,7 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)* the scan was in progress; if there was none this will * just be a no-op for the particular interface. */ -list_for_each_entry (sdata, &local->interfaces, list) { +list_for_each_entry_rcu (sdata, &local->interfaces, list) {if (ieee80211_sdata_running (sdata))ieee80211_queue_work (&sdata->local->hw, &sdata->work); }
net/mac80211/util.c +1 -3
@@ -767,9 +767,7 @@ static void __iterate_interfaces(struct ieee80211_local *local,struct ieee80211_sub_if_data *sdata;bool active_only = iter_flags &IEEE80211_IFACE_ITER_ACTIVE ; -list_for_each_entry_rcu (sdata, &local->interfaces, list, -lockdep_is_held (&local->iflist_mtx) || -lockdep_is_held (&local->hw.wiphy->mtx)) { +list_for_each_entry_rcu (sdata, &local->interfaces, list) {switch (sdata->vif.type) {case NL80211_IFTYPE_MONITOR :if (!(sdata->u.mntr.flags &MONITOR_FLAG_ACTIVE ))
net/mptcp/pm_userspace.c +2 -1
@@ -89,6 +89,7 @@ static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk, struct mptcp_pm_addr_entry *addr) {struct mptcp_pm_addr_entry *entry, *tmp; +struct sock *sk = (struct sock *)msk;list_for_each_entry_safe (entry, tmp, &msk->pm.userspace_pm_local_addr_list, list) {if (mptcp_addresses_equal (&entry->addr, &addr->addr, false)) {
@@ -96,7 +97,7 @@ static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk,* be used multiple times (e.g. fullmesh mode). */ list_del_rcu (&entry->list); -kfree (entry); +sock_kfree_s (sk, entry,sizeof (*entry)); msk->pm.local_addr_used--;return 0 ; }
net/sched/sch_taprio.c +12 -6
@@ -1995,9 +1995,6 @@ static int taprio_dump(struct Qdisc *sch, struct sk_buff *skb)struct nlattr *nest, *sched_nest;unsigned int i; - oper =rtnl_dereference (q->oper_sched); - admin =rtnl_dereference (q->admin_sched); - opt.num_tc =netdev_get_num_tc (dev);memcpy (opt.prio_tc_map, dev->prio_tc_map,sizeof (opt.prio_tc_map));
@@ -2024,18 +2021,23 @@ static int taprio_dump(struct Qdisc *sch, struct sk_buff *skb) nla_put_u32(skb, TCA_TAPRIO_ATTR_TXTIME_DELAY, q->txtime_delay)) goto options_error; +rcu_read_lock (); + + oper =rtnl_dereference (q->oper_sched); + admin =rtnl_dereference (q->admin_sched); +if (taprio_dump_tc_entries (q, skb)) - goto options_error; + goto options_error_rcu;if (oper &&dump_schedule (skb, oper)) - goto options_error; + goto options_error_rcu;if (!admin) goto done; sched_nest =nla_nest_start_noflag (skb,TCA_TAPRIO_ATTR_ADMIN_SCHED );if (!sched_nest) - goto options_error; + goto options_error_rcu;if (dump_schedule (skb, admin)) goto admin_error;
@@ -2043,11 +2045,15 @@ static int taprio_dump(struct Qdisc *sch, struct sk_buff *skb)nla_nest_end (skb, sched_nest); done: +rcu_read_unlock ();return nla_nest_end (skb, nest); admin_error:nla_nest_cancel (skb, sched_nest); +options_error_rcu: +rcu_read_unlock (); + options_error:nla_nest_cancel (skb, nest);
net/sctp/sm_statefuns.c +1 -1
@@ -3752,7 +3752,7 @@ enum sctp_disposition sctp_sf_ootb(struct net *net, } ch = (struct sctp_chunkhdr *)ch_end; - }while (ch_end <skb_tail_pointer (skb)); + }while (ch_end +sizeof (*ch) <skb_tail_pointer (skb));if (ootb_shut_ack)return sctp_sf_shut_8_4_5 (net, ep, asoc, type, arg, commands);
net/sunrpc/xprtsock.c +1 -0
@@ -2351,6 +2351,7 @@ static void xs_tcp_setup_socket(struct work_struct *work)case -EHOSTUNREACH :case -EADDRINUSE :case -ENOBUFS : +case -ENOTCONN :break ;default : printk("%s: connect returned unhandled error %d\n",
net/vmw_vsock/hyperv_transport.c +1 -0
@@ -549,6 +549,7 @@ static void hvs_destruct(struct vsock_sock *vsk)vmbus_hvsock_device_unregister (chan);kfree (hvs); + vsk->trans =NULL ; }static int hvs_dgram_bind (struct vsock_sock *vsk,struct sockaddr_vm *addr)
net/vmw_vsock/virtio_transport_common.c +1 -0
@@ -827,6 +827,7 @@ void virtio_transport_destruct(struct vsock_sock *vsk)struct virtio_vsock_sock *vvs = vsk->trans;kfree (vvs); + vsk->trans =NULL ; }EXPORT_SYMBOL_GPL (virtio_transport_destruct);
security/keys/keyring.c +5 -2
@@ -772,8 +772,11 @@ static bool search_nested_keyrings(struct key *keyring,for (; slot <ASSOC_ARRAY_FAN_OUT ; slot++) { ptr =READ_ONCE (node->slots[slot]); -if (assoc_array_ptr_is_meta (ptr) && node->back_pointer) - goto descend_to_node; +if (assoc_array_ptr_is_meta (ptr)) { +if (node->back_pointer || +assoc_array_ptr_is_shortcut (ptr)) + goto descend_to_node; + }if (!keyring_ptr_is_keyring (ptr))continue ;
sound/firewire/tascam/amdtp-tascam.c +1 -1
@@ -244,7 +244,7 @@ int amdtp_tscm_init(struct amdtp_stream *s, struct fw_unit *unit, err =amdtp_stream_init (s, unit, dir, flags, fmt, process_ctx_payloads,sizeof (struct amdtp_tscm ));if (err <0 ) -return 0 ; +return err;if (dir ==AMDTP_OUT_STREAM ) {// Use fixed value for FDF field.
sound/pci/hda/patch_conexant.c +0 -2
@@ -205,8 +205,6 @@ static void cx_auto_shutdown(struct hda_codec *codec) {struct conexant_spec *spec = codec->spec; -snd_hda_gen_shutup_speakers (codec); -/* Turn the problematic codec into D3 to avoid spurious noises from the internal speaker during (and after) reboot */ cx_auto_turn_eapd (codec, spec->num_eapds, spec->eapds, false);
sound/pci/hda/patch_realtek.c +1 -0
@@ -10015,6 +10015,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x1558 ,0x1403 ,"Clevo N140CU" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1558 ,0x1404 ,"Clevo N150CU" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1558 ,0x14a1 ,"Clevo L141MU" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ), +SND_PCI_QUIRK (0x1558 ,0x28c1 ,"Clevo V370VND" ,ALC2XX_FIXUP_HEADSET_MIC ),SND_PCI_QUIRK (0x1558 ,0x4018 ,"Clevo NV40M[BE]" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1558 ,0x4019 ,"Clevo NV40MZ" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ), SND_PCI_QUIRK(0x1558, 0x4020, "Clevo NV40MB", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
sound/soc/amd/yc/acp6x-mach.c +7 -0
@@ -339,6 +339,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Redmi Book Pro 15 2022"), } }, + { + .driver_data = &acp6x_card, + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"TIMI" ), + DMI_MATCH(DMI_PRODUCT_NAME, "Xiaomi Book Pro 14 2022"), + } + }, { .driver_data = &acp6x_card, .matches = {
sound/soc/stm/stm32_spdifrx.c +1 -1
@@ -943,7 +943,7 @@ static int stm32_spdifrx_remove(struct platform_device *pdev) {struct stm32_spdifrx_data *spdifrx =platform_get_drvdata (pdev); -if (spdifrx->ctrl_chan) +if (!IS_ERR (spdifrx->ctrl_chan))dma_release_channel (spdifrx->ctrl_chan);if (spdifrx->dmab)
sound/usb/mixer.c +1 -0
@@ -1205,6 +1205,7 @@ static void volume_control_quirks(struct usb_mixer_elem_info *cval, }break ;case USB_ID (0x1bcf ,0x2283 ):/* NexiGo N930AF FHD Webcam */ +case USB_ID (0x03f0 ,0x654a ):/* HP 320 FHD Webcam */ if (!strcmp (kctl->id.name,"Mic Capture Volume" )) {usb_audio_info (chip,"set resolution quirk: cval->res = 16\n" );
sound/usb/quirks.c +2 -0
@@ -2014,6 +2014,8 @@ struct usb_audio_quirk_flags_table {static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {/* Device matches */ +DEVICE_FLG (0x03f0 ,0x654a ,/* HP 320 FHD Webcam */ +QUIRK_FLAG_GET_SAMPLE_RATE ),DEVICE_FLG (0x041e ,0x3000 ,/* Creative SB Extigy */ QUIRK_FLAG_IGNORE_CTL_ERROR ), DEVICE_FLG(0x041e, 0x4080, /* Creative Live Cam VF0610 */
tools/lib/thermal/sampling.c +2 -0
@@ -16,6 +16,8 @@ static int handle_thermal_sample(struct nl_msg *n, void *arg)struct thermal_handler_param *thp = arg;struct thermal_handler *th = thp->th; + arg = thp->arg; +genlmsg_parse (nlh,0 , attrs,THERMAL_GENL_ATTR_MAX ,NULL );switch (genlhdr->cmd) {
tools/testing/selftests/arm64/signal/test_signals.c +1 -3
@@ -12,12 +12,10 @@#include "test_signals.h" #include "test_signals_utils.h" -struct tdescr *current; +struct tdescr *current = &tde;int main (int argc,char *argv[]) { - current = &tde; -ksft_print_msg ("%s :: %s\n" , current->name, current->descr);if (test_setup (current) &&test_init (current)) {test_run (current);