Linux 5.10.230
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.230 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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/boot/dts/freescale/imx8mp.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-rock960.dtsi | 2 arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator.dts | 2 arch/powerpc/platforms/powernv/opal-irqchip.c | 1 drivers/crypto/marvell/cesa/hash.c | 12 drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 4 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 2 drivers/hid/hid-core.c | 2 drivers/hid/hid-multitouch.c | 5 drivers/irqchip/irq-gic-v3.c | 7 drivers/md/dm-cache-target.c | 35 +- drivers/md/dm-unstripe.c | 4 drivers/md/raid10.c | 23 - 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/platform/s5p-jpeg/jpeg-core.c | 17 - drivers/media/usb/uvc/uvc_driver.c | 2 drivers/net/can/c_can/c_can.c | 7 drivers/net/ethernet/arc/emac_main.c | 27 +- drivers/net/ethernet/freescale/enetc/enetc_vf.c | 9 drivers/net/ethernet/hisilicon/hns3/hnae3.c | 5 drivers/net/phy/dp83640.c | 27 ++ drivers/net/phy/dp83822.c | 38 ++ drivers/net/phy/dp83848.c | 35 ++ drivers/net/phy/dp83867.c | 25 + drivers/net/phy/dp83869.c | 25 + drivers/net/phy/dp83tc811.c | 45 +++ drivers/net/phy/phy.c | 6 drivers/net/usb/qmi_wwan.c | 1 drivers/pwm/pwm-imx-tpm.c | 4 drivers/scsi/sd_zbc.c | 3 drivers/spi/spi.c | 27 -- 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 drivers/vdpa/ifcvf/ifcvf_base.c | 2 fs/btrfs/delayed-ref.c | 2 fs/nfs/inode.c | 1 fs/ocfs2/file.c | 9 fs/ocfs2/xattr.c | 3 fs/proc/vmcore.c | 9 fs/splice.c | 9 include/linux/fs.h | 35 ++ include/linux/phy.h | 2 include/linux/spi/spi.h | 3 io_uring/io_uring.c | 55 ++-- kernel/bpf/verifier.c | 4 mm/slab_common.c | 2 net/9p/client.c | 12 net/bridge/br_device.c | 5 net/core/dst.c | 17 - net/sctp/sm_statefuns.c | 2 net/vmw_vsock/hyperv_transport.c | 1 net/vmw_vsock/virtio_transport_common.c | 1 security/keys/keyring.c | 7 sound/Kconfig | 2 sound/firewire/tascam/amdtp-tascam.c | 2 sound/pci/hda/patch_conexant.c | 2 sound/soc/stm/stm32_spdifrx.c | 2 sound/usb/mixer_quirks.c | 170 +++++++++++++ tools/perf/util/hist.c | 10 tools/perf/util/session.c | 5 75 files changed, 702 insertions(+), 189 deletions(-)
Alessandro Zanni (1):
fs: Fix uninitialized value issue in from_kuid and from_kgid
Alex Deucher (1):
drm/amdgpu: add missing size check in amdgpu_debugfs_gprwave_read()
Amelie Delaunay (1):
ASoC: stm32: spdifrx: fix dma channel release in stm32_spdifrx_remove
Amir Goldstein (3):
io_uring: rename kiocb_end_write() local helper
fs: create kiocb_{start,end}_write() helpers
io_uring: use kiocb_{start,end}_write() helpers
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
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
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
Dario Binacchi (1):
can: c_can: fix {rx,tx}_errors statistics
Diederik de Haas (1):
arm64: dts: rockchip: Remove hdmi's 2nd interrupt on rk3328
Diogo Silva (1):
net: phy: ti: add PHY_RST_AFTER_CLK_EN flag
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 (1):
arm64: dts: rockchip: Fix rt5651 compatible value on rk3399-sapphire-excavator
Greg Kroah-Hartman (1):
Linux 5.10.230
Hagar Hemdan (1):
io_uring: fix possible deadlock in io_register_iowq_max_workers()
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
Herbert Xu (1):
crypto: marvell/cesa - Disable hash algorithms
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->transIoana Ciornei (3):
net: phy: export phy_error and phy_trigger_machine
net: phy: ti: implement generic .handle_interrupt() callback
net: phy: ti: take into account all possible interrupt sources
Jack Wu (1):
USB: serial: qcserial: add support for Sierra Wireless EM86xx
Jan Schär (3):
ALSA: usb-audio: Support jack detection on Dell dock
ALSA: usb-audio: Add quirks for Dell WD19 dock
ALSA: usb-audio: Add endianness annotations
Jarosław Janik (1):
Revert "ALSA: hda/conexant: Mute speakers at suspend / shutdown"
Jens Axboe (1):
io_uring/rw: fix missing NOWAIT check for O_DIRECT start write
Jiri Kosina (1):
HID: core: zero-initialize the report buffer
Johan Jonker (1):
net: arc: fix the device for dma_map_single/dma_unmap_single
Johannes Thumshirn (1):
scsi: sd_zbc: Use kvzalloc() to allocate REPORT ZONES buffer
Julian Vetter (1):
sound: Make CONFIG_SND depend on INDIRECT_IOMEM instead of UML
Li Nan (1):
md/raid10: improve code of mrdev in raid10_sync_request
Linus Torvalds (1):
9p: fix slab cache name creation for real
Marc Zyngier (1):
irqchip/gic-v3: Force propagation of the active state with a read-back
Mark Brown (1):
spi: Fix deadlock when adding SPI controllers on SPI buses
Mauro Carvalho Chehab (8):
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: 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
Michael Ellerman (1):
powerpc/powernv: Free name on error in opal_event_init()
Michael Walle (1):
spi: fix use-after-free of the add_lock mutex
Ming-Hung Tsai (4):
dm cache: correct the number of origin blocks to match the target length 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
Murad Masimov (1):
ALSA: firewire-lib: fix return value on fail in amdtp_tscm_init()
Nikolay Aleksandrov (1):
net: bridge: xmit: make sure we have at least eth header len bytes
Pavel Begunkov (1):
splice: don't generate zero-len segement bvecs
Pedro Falcato (1):
9p: Avoid creating multiple slab caches with the same name
Peiyang Wang (1):
net: hns3: fix kernel crash when uninstalling driver
Peng Fan (1):
arm64: dts: imx8mp: correct sdhc ipg clk
Qi Xi (1):
fs/proc: fix compile warning about variable 'vmcore_mmap_ops'
Qun-Wei Lin (1):
mm: krealloc: Fix MTE false alarm in __do_krealloc
Reinhard Speyerer (2):
USB: serial: option: add Fibocom FG132 0x0112 composition
net: usb: qmi_wwan: add Fibocom FG132 0x0112 compositionRiccardo Mancini (1):
perf session: Add missing evlist__delete when deleting a session
Rik van Riel (1):
bpf: use kvzmalloc to allocate BPF verifier environment
Roberto Sassu (1):
nfs: Fix KMSAN warning in decode_getfattr_attrs()
Shuai Xue (1):
Revert "perf hist: Add missing puts to hist__account_cycles"
WangYuli (1):
HID: multitouch: Add quirk for HONOR MagicBook Art 14 touchpad
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()
Yuan Can (1):
vDPA/ifcvf: Fix pci_read_config_byte() return code handling
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 = 5 PATCHLEVEL = 10 -SUBLEVEL = 229 +SUBLEVEL = 230 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/rk3036-kylin.dts +2 -2
@@ -300,8 +300,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
@@ -316,12 +316,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"; };
@@ -331,7 +332,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";
@@ -488,11 +488,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/boot/dts/freescale/imx8mp.dtsi +3 -3
@@ -659,7 +659,7 @@ usdhc1: mmc@30b40000 { compatible = "fsl,imx8mp-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";
@@ -673,7 +673,7 @@ usdhc2: mmc@30b50000 { compatible = "fsl,imx8mp-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";
@@ -687,7 +687,7 @@ usdhc3: mmc@30b60000 { compatible = "fsl,imx8mp-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/rockchip/rk3308-roc-cc.dts +2 -2
@@ -30,14 +30,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
@@ -715,8 +715,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
@@ -56,7 +56,6 @@ i2c@0 { fan: fan@18 { compatible = "ti,amc6821"; reg = <0x18>; - #cooling-cells = <2>; }; rtc_twi: rtc@6f {
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi +1 -1
@@ -568,7 +568,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
@@ -159,7 +159,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/powerpc/platforms/powernv/opal-irqchip.c +1 -0
@@ -285,6 +285,7 @@ int __init opal_event_init(void) name, NULL);if (rc) {pr_warn ("Error %d requesting OPAL irq %d\n" , rc, (int )r->start); +kfree (name);continue ; } }
drivers/crypto/marvell/cesa/hash.c +6 -6
@@ -923,7 +923,7 @@ struct ahash_alg mv_md5_alg = { .base = { .cra_name = "md5", .cra_driver_name = "mv-md5", - .cra_priority = 300, + .cra_priority = 0, .cra_flags =CRYPTO_ALG_ASYNC |CRYPTO_ALG_ALLOCATES_MEMORY | CRYPTO_ALG_KERN_DRIVER_ONLY,
@@ -994,7 +994,7 @@ struct ahash_alg mv_sha1_alg = { .base = { .cra_name = "sha1", .cra_driver_name = "mv-sha1", - .cra_priority = 300, + .cra_priority = 0, .cra_flags =CRYPTO_ALG_ASYNC |CRYPTO_ALG_ALLOCATES_MEMORY | CRYPTO_ALG_KERN_DRIVER_ONLY,
@@ -1068,7 +1068,7 @@ struct ahash_alg mv_sha256_alg = { .base = { .cra_name = "sha256", .cra_driver_name = "mv-sha256", - .cra_priority = 300, + .cra_priority = 0, .cra_flags =CRYPTO_ALG_ASYNC |CRYPTO_ALG_ALLOCATES_MEMORY | CRYPTO_ALG_KERN_DRIVER_ONLY,
@@ -1303,7 +1303,7 @@ struct ahash_alg mv_ahmac_md5_alg = { .base = { .cra_name = "hmac(md5)", .cra_driver_name = "mv-hmac-md5", - .cra_priority = 300, + .cra_priority = 0, .cra_flags =CRYPTO_ALG_ASYNC |CRYPTO_ALG_ALLOCATES_MEMORY | CRYPTO_ALG_KERN_DRIVER_ONLY,
@@ -1374,7 +1374,7 @@ struct ahash_alg mv_ahmac_sha1_alg = { .base = { .cra_name = "hmac(sha1)", .cra_driver_name = "mv-hmac-sha1", - .cra_priority = 300, + .cra_priority = 0, .cra_flags =CRYPTO_ALG_ASYNC |CRYPTO_ALG_ALLOCATES_MEMORY | CRYPTO_ALG_KERN_DRIVER_ONLY,
@@ -1445,7 +1445,7 @@ struct ahash_alg mv_ahmac_sha256_alg = { .base = { .cra_name = "hmac(sha256)", .cra_driver_name = "mv-hmac-sha256", - .cra_priority = 300, + .cra_priority = 0, .cra_flags =CRYPTO_ALG_ASYNC |CRYPTO_ALG_ALLOCATES_MEMORY | CRYPTO_ALG_KERN_DRIVER_ONLY,
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +2 -2
@@ -112,8 +112,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 +1 -1
@@ -396,7 +396,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);
drivers/hid/hid-core.c +1 -1
@@ -1664,7 +1664,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/hid/hid-multitouch.c +5 -0
@@ -1967,6 +1967,11 @@ static const struct hid_device_id mt_devices[] = { HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, 0x347d, 0x7853) }, +/* HONOR MagicBook Art 14 touchpad */ + { .driver_data = MT_CLS_VTL, +HID_DEVICE (BUS_I2C ,HID_GROUP_MULTITOUCH_WIN_8 , + 0x35cc, 0x0104) }, + /* Ilitek dual touch panel */ { .driver_data = MT_CLS_NSMU, MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
drivers/irqchip/irq-gic-v3.c +7 -0
@@ -429,6 +429,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 +15 -20
@@ -2058,7 +2058,6 @@ struct cache_args {sector_t cache_sectors;struct dm_dev *origin_dev; -sector_t origin_sectors;uint32_t block_size;
@@ -2140,6 +2139,7 @@ static int parse_cache_dev(struct cache_args *ca, struct dm_arg_set *as,static int parse_origin_dev (struct cache_args *ca,struct dm_arg_set *as,char **error) { +sector_t origin_sectors;int r;if (!at_least_one_arg (as, error))
@@ -2152,8 +2152,8 @@ static int parse_origin_dev(struct cache_args *ca, struct dm_arg_set *as,return r; } - ca->origin_sectors =get_dev_size (ca->origin_dev); -if (ca->ti->len > ca->origin_sectors) { + origin_sectors =get_dev_size (ca->origin_dev); +if (ca->ti->len > origin_sectors) { *error ="Device size larger than cached device" ;return -EINVAL ; }
@@ -2462,7 +2462,7 @@ static int cache_create(struct cache_args *ca, struct cache **result) ca->metadata_dev = ca->origin_dev = ca->cache_dev =NULL ; - origin_blocks = cache->origin_sectors = ca->origin_sectors; + origin_blocks = cache->origin_sectors = ti->len; origin_blocks =block_div (origin_blocks, ca->block_size); cache->origin_blocks =to_oblock (origin_blocks);
@@ -2955,19 +2955,19 @@ static dm_cblock_t get_cache_dev_size(struct cache *cache)static bool can_resize (struct cache *cache,dm_cblock_t new_size) {if (from_cblock (new_size) >from_cblock (cache->cache_size)) { -if (cache->sized) { -DMERR ("%s: unable to extend cache due to missing cache table reload" , -cache_device_name (cache)); -return false; - } +DMERR ("%s: unable to extend cache due to missing cache table reload" , +cache_device_name (cache)); +return false; }/* * We can't drop a dirty block when shrinking the cache. */ -while (from_cblock (new_size) <from_cblock (cache->cache_size)) { - new_size =to_cblock (from_cblock (new_size) +1 ); -if (is_dirty (cache, new_size)) { +if (cache->loaded_mappings) { + new_size =to_cblock (find_next_bit (cache->dirty_bitset, +from_cblock (cache->cache_size), +from_cblock (new_size))); +if (new_size != cache->cache_size) {DMERR ("%s: unable to shrink cache; cache block %llu is dirty" ,cache_device_name (cache), (unsigned long long )from_cblock (new_size));
@@ -3003,20 +3003,15 @@ static int cache_preresume(struct dm_target *ti)/* * Check to see if the cache has resized. */ -if (!cache->sized) { - r =resize_cache_dev (cache, csize); -if (r) -return r; - - cache->sized = true; - - }else if (csize != cache->cache_size) { +if (!cache->sized || csize != cache->cache_size) {if (!can_resize (cache, csize))return -EINVAL ; r =resize_cache_dev (cache, csize);if (r)return r; + + cache->sized = true; }if (!cache->loaded_mappings) {
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/md/raid10.c +12 -11
@@ -3052,7 +3052,6 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,sector_t sect;int must_sync;int any_working; -int need_recover =0 ;struct raid10_info *mirror = &conf->mirrors[i];struct md_rdev *mrdev, *mreplace;
@@ -3060,14 +3059,13 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr, mrdev =rcu_dereference (mirror->rdev); mreplace =rcu_dereference (mirror->replacement); -if (mrdev !=NULL && - !test_bit (Faulty, &mrdev->flags) && - !test_bit (In_sync, &mrdev->flags)) - need_recover =1 ; +if (mrdev && (test_bit (Faulty, &mrdev->flags) || +test_bit (In_sync, &mrdev->flags))) + mrdev =NULL ;if (mreplace &&test_bit (Faulty, &mreplace->flags)) mreplace =NULL ; -if (!need_recover && !mreplace) { +if (!mrdev && !mreplace) {rcu_read_unlock ();continue ; }
@@ -3101,7 +3099,8 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,rcu_read_unlock ();continue ; } -atomic_inc (&mrdev->nr_pending); +if (mrdev) +atomic_inc (&mrdev->nr_pending);if (mreplace)atomic_inc (&mreplace->nr_pending);rcu_read_unlock ();
@@ -3188,7 +3187,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr, r10_bio->devs[1 ].devnum = i; r10_bio->devs[1 ].addr = to_addr; -if (need_recover) { +if (mrdev) { bio = r10_bio->devs[1 ].bio; bio->bi_next = biolist; biolist = bio;
@@ -3233,7 +3232,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,for (k =0 ; k < conf->copies; k++)if (r10_bio->devs[k].devnum == i)break ; -if (!test_bit (In_sync, +if (mrdev && !test_bit (In_sync, &mrdev->flags) && !rdev_set_badblocks( mrdev,
@@ -3259,12 +3258,14 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,if (rb2)atomic_dec (&rb2->remaining); r10_bio = rb2; -rdev_dec_pending (mrdev, mddev); +if (mrdev) +rdev_dec_pending (mrdev, mddev);if (mreplace)rdev_dec_pending (mreplace, mddev);break ; } -rdev_dec_pending (mrdev, mddev); +if (mrdev) +rdev_dec_pending (mrdev, mddev);if (mreplace)rdev_dec_pending (mreplace, mddev);if (r10_bio->devs[0 ].bio->bi_opf &MD_FAILFAST ) {
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
@@ -1789,6 +1789,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
@@ -442,8 +442,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
@@ -96,10 +96,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 ;
@@ -539,7 +544,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);
@@ -554,6 +559,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
@@ -2487,10 +2487,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" ,
@@ -2589,13 +2589,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/platform/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
@@ -661,7 +661,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/net/can/c_can/c_can.c +6 -1
@@ -992,7 +992,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);
@@ -1009,26 +1008,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/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/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/phy/dp83640.c +27 -0
@@ -50,6 +50,14 @@#define MII_DP83640_MISR_LINK_INT_EN 0x20#define MII_DP83640_MISR_ED_INT_EN 0x40#define MII_DP83640_MISR_LQ_INT_EN 0x80 +#define MII_DP83640_MISR_ANC_INT 0x400 +#define MII_DP83640_MISR_DUP_INT 0x800 +#define MII_DP83640_MISR_SPD_INT 0x1000 +#define MII_DP83640_MISR_LINK_INT 0x2000 +#define MII_DP83640_MISR_INT_MASK (MII_DP83640_MISR_ANC_INT |\ + MII_DP83640_MISR_DUP_INT |\ + MII_DP83640_MISR_SPD_INT |\ + MII_DP83640_MISR_LINK_INT)/* phyter seems to miss the mark by 16 ns */ #define ADJTIME_FIX 16
@@ -1193,6 +1201,24 @@ static int dp83640_config_intr(struct phy_device *phydev) } } +static irqreturn_t dp83640_handle_interrupt (struct phy_device *phydev) +{ +int irq_status; + + irq_status =phy_read (phydev,MII_DP83640_MISR ); +if (irq_status <0 ) { +phy_error (phydev); +return IRQ_NONE ; + } + +if (!(irq_status &MII_DP83640_MISR_INT_MASK )) +return IRQ_NONE ; + +phy_trigger_machine (phydev); + +return IRQ_HANDLED ; +} +static int dp83640_hwtstamp (struct mii_timestamper *mii_ts,struct ifreq *ifr) { struct dp83640_private *dp83640 =
@@ -1517,6 +1543,7 @@ static struct phy_driver dp83640_driver = { .config_init = dp83640_config_init, .ack_interrupt = dp83640_ack_interrupt, .config_intr = dp83640_config_intr, + .handle_interrupt = dp83640_handle_interrupt, };static int __init dp83640_init (void )
drivers/net/phy/dp83822.c +38 -0
@@ -303,6 +303,42 @@ static int dp83822_config_intr(struct phy_device *phydev)return phy_write (phydev,MII_DP83822_PHYSCR , physcr_status); } +static irqreturn_t dp83822_handle_interrupt (struct phy_device *phydev) +{ +bool trigger_machine = false; +int irq_status; + +/* The MISR1 and MISR2 registers are holding the interrupt status in +* the upper half (15:8), while the lower half (7:0) is used for +* controlling the interrupt enable state of those individual interrupt +* sources. To determine the possible interrupt sources, just read the +* MISR* register and use it directly to know which interrupts have +* been enabled previously or not. +*/ + irq_status =phy_read (phydev,MII_DP83822_MISR1 ); +if (irq_status <0 ) { +phy_error (phydev); +return IRQ_NONE ; + } +if (irq_status & ((irq_status &GENMASK (7 ,0 )) <<8 )) + trigger_machine = true; + + irq_status =phy_read (phydev,MII_DP83822_MISR2 ); +if (irq_status <0 ) { +phy_error (phydev); +return IRQ_NONE ; + } +if (irq_status & ((irq_status &GENMASK (7 ,0 )) <<8 )) + trigger_machine = true; + +if (!trigger_machine) +return IRQ_NONE ; + +phy_trigger_machine (phydev); + +return IRQ_HANDLED ; +} +static int dp8382x_disable_wol (struct phy_device *phydev) { return phy_clear_bits_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG,
@@ -586,6 +622,7 @@ static int dp83822_resume(struct phy_device *phydev) .set_wol = dp83822_set_wol, \ .ack_interrupt = dp83822_ack_interrupt, \ .config_intr = dp83822_config_intr, \ + .handle_interrupt = dp83822_handle_interrupt, \ .suspend = dp83822_suspend, \ .resume = dp83822_resume, \ }
@@ -601,6 +638,7 @@ static int dp83822_resume(struct phy_device *phydev) .set_wol = dp83822_set_wol, \ .ack_interrupt = dp83822_ack_interrupt, \ .config_intr = dp83822_config_intr, \ + .handle_interrupt = dp83822_handle_interrupt, \ .suspend = dp83822_suspend, \ .resume = dp83822_resume, \ }
drivers/net/phy/dp83848.c +35 -0
@@ -37,6 +37,20 @@ DP83848_MISR_SPD_INT_EN | \ DP83848_MISR_LINK_INT_EN) +#define DP83848_MISR_RHF_INT BIT(8) +#define DP83848_MISR_FHF_INT BIT(9) +#define DP83848_MISR_ANC_INT BIT(10) +#define DP83848_MISR_DUP_INT BIT(11) +#define DP83848_MISR_SPD_INT BIT(12) +#define DP83848_MISR_LINK_INT BIT(13) +#define DP83848_MISR_ED_INT BIT(14) + +#define DP83848_INT_MASK \ + (DP83848_MISR_ANC_INT | \ + DP83848_MISR_DUP_INT | \ + DP83848_MISR_SPD_INT | \ + DP83848_MISR_LINK_INT) +static int dp83848_ack_interrupt (struct phy_device *phydev) {int err =phy_read (phydev,DP83848_MISR );
@@ -66,6 +80,24 @@ static int dp83848_config_intr(struct phy_device *phydev)return phy_write (phydev,DP83848_MICR , control); } +static irqreturn_t dp83848_handle_interrupt (struct phy_device *phydev) +{ +int irq_status; + + irq_status =phy_read (phydev,DP83848_MISR ); +if (irq_status <0 ) { +phy_error (phydev); +return IRQ_NONE ; + } + +if (!(irq_status &DP83848_INT_MASK )) +return IRQ_NONE ; + +phy_trigger_machine (phydev); + +return IRQ_HANDLED ; +} +static int dp83848_config_init (struct phy_device *phydev) {int val;
@@ -104,6 +136,9 @@ MODULE_DEVICE_TABLE(mdio, dp83848_tbl);/* IRQ related */ \ .ack_interrupt = dp83848_ack_interrupt, \ .config_intr = dp83848_config_intr, \ + .handle_interrupt = dp83848_handle_interrupt, \ + \ + .flags = PHY_RST_AFTER_CLK_EN, \ }static struct phy_driver dp83848_driver[] = {
drivers/net/phy/dp83867.c +25 -0
@@ -312,6 +312,30 @@ static int dp83867_config_intr(struct phy_device *phydev)return phy_write (phydev,MII_DP83867_MICR , micr_status); } +static irqreturn_t dp83867_handle_interrupt (struct phy_device *phydev) +{ +int irq_status, irq_enabled; + + irq_status =phy_read (phydev,MII_DP83867_ISR ); +if (irq_status <0 ) { +phy_error (phydev); +return IRQ_NONE ; + } + + irq_enabled =phy_read (phydev,MII_DP83867_MICR ); +if (irq_enabled <0 ) { +phy_error (phydev); +return IRQ_NONE ; + } + +if (!(irq_status & irq_enabled)) +return IRQ_NONE ; + +phy_trigger_machine (phydev); + +return IRQ_HANDLED ; +} +static int dp83867_read_status (struct phy_device *phydev) {int status =phy_read (phydev,MII_DP83867_PHYSTS );
@@ -878,6 +902,7 @@ static struct phy_driver dp83867_driver[] = {/* IRQ related */ .ack_interrupt = dp83867_ack_interrupt, .config_intr = dp83867_config_intr, + .handle_interrupt = dp83867_handle_interrupt, .suspend = genphy_suspend, .resume = genphy_resume,
drivers/net/phy/dp83869.c +25 -0
@@ -207,6 +207,30 @@ static int dp83869_config_intr(struct phy_device *phydev)return phy_write (phydev,MII_DP83869_MICR , micr_status); } +static irqreturn_t dp83869_handle_interrupt (struct phy_device *phydev) +{ +int irq_status, irq_enabled; + + irq_status =phy_read (phydev,MII_DP83869_ISR ); +if (irq_status <0 ) { +phy_error (phydev); +return IRQ_NONE ; + } + + irq_enabled =phy_read (phydev,MII_DP83869_MICR ); +if (irq_enabled <0 ) { +phy_error (phydev); +return IRQ_NONE ; + } + +if (!(irq_status & irq_enabled)) +return IRQ_NONE ; + +phy_trigger_machine (phydev); + +return IRQ_HANDLED ; +} +static int dp83869_set_wol (struct phy_device *phydev,struct ethtool_wolinfo *wol) {
@@ -853,6 +877,7 @@ static struct phy_driver dp83869_driver[] = {/* IRQ related */ .ack_interrupt = dp83869_ack_interrupt, .config_intr = dp83869_config_intr, + .handle_interrupt = dp83869_handle_interrupt, .read_status = dp83869_read_status, .get_tunable = dp83869_get_tunable,
drivers/net/phy/dp83tc811.c +45 -0
57 lines not on this page · raw message
drivers/net/phy/phy.c +4 -2
@@ -461,10 +461,11 @@ EXPORT_SYMBOL(phy_queue_state_machine);* * @phydev: the phy_device struct */ -static void phy_trigger_machine (struct phy_device *phydev) +void phy_trigger_machine (struct phy_device *phydev) {phy_queue_state_machine (phydev,0 ); } +EXPORT_SYMBOL (phy_trigger_machine);static void phy_abort_cable_test (struct phy_device *phydev) {
@@ -970,7 +971,7 @@ void phy_stop_machine(struct phy_device *phydev)* Must not be called from interrupt context, or while the * phydev->lock is held. */ -static void phy_error (struct phy_device *phydev) +void phy_error (struct phy_device *phydev) {WARN_ON (1 );
@@ -980,6 +981,7 @@ static void phy_error(struct phy_device *phydev)phy_trigger_machine (phydev); } +EXPORT_SYMBOL (phy_error);/** * phy_disable_interrupts - Disable the PHY interrupts from the PHY side
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1360,6 +1360,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x2c7c, 0x0296, 4)}, /* Quectel BG96 */ {QMI_QUIRK_SET_DTR(0x2c7c, 0x030e, 4)}, /* Quectel EM05GV2 */ {QMI_QUIRK_SET_DTR(0x2cb7, 0x0104, 4)}, /* Fibocom NL678 series */ + {QMI_QUIRK_SET_DTR(0x2cb7, 0x0112, 0)}, /* Fibocom FG132 */ {QMI_FIXED_INTF(0x0489, 0xe0b4, 0)}, /* Foxconn T77W968 LTE */ {QMI_FIXED_INTF(0x0489, 0xe0b5, 0)}, /* Foxconn T77W968 LTE with eSIM support*/ {QMI_FIXED_INTF(0x2692, 0x9025, 4)}, /* Cellient MPL200 (rebranded Qualcomm 05c6:9025) */
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
@@ -169,8 +169,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/spi/spi.c +11 -16
@@ -472,12 +472,6 @@ static LIST_HEAD(spi_controller_list);*/ static DEFINE_MUTEX (board_lock); -/* -* Prevents addition of devices with same chip select and -* addition of devices below an unregistering controller. -*/ -static DEFINE_MUTEX (spi_add_lock); -/** * spi_alloc_device - Allocate a new SPI device * @ctlr: Controller to which device is connected
@@ -581,7 +575,7 @@ int spi_add_device(struct spi_device *spi)* chipselect **BEFORE** we call setup(), else we'll trash * its configuration. Lock against concurrent add() calls. */ -mutex_lock (&spi_add_lock); +mutex_lock (&ctlr->add_lock); status =bus_for_each_dev (&spi_bus_type,NULL , spi, spi_dev_check);if (status) {
@@ -625,7 +619,7 @@ int spi_add_device(struct spi_device *spi) } done: -mutex_unlock (&spi_add_lock); +mutex_unlock (&ctlr->add_lock);return status; }EXPORT_SYMBOL_GPL (spi_add_device);
@@ -2734,6 +2728,7 @@ int spi_register_controller(struct spi_controller *ctlr)spin_lock_init (&ctlr->bus_lock_spinlock);mutex_init (&ctlr->bus_lock_mutex);mutex_init (&ctlr->io_mutex); +mutex_init (&ctlr->add_lock); ctlr->bus_lock_flag =0 ;init_completion (&ctlr->xfer_completion);if (!ctlr->max_dma_len)
@@ -2879,7 +2874,7 @@ void spi_unregister_controller(struct spi_controller *ctlr)/* Prevent addition of new devices, unregister existing ones */ if (IS_ENABLED (CONFIG_SPI_DYNAMIC )) -mutex_lock (&spi_add_lock); +mutex_lock (&ctlr->add_lock);device_for_each_child (&ctlr->dev,NULL , __unregister);
@@ -2897,12 +2892,6 @@ void spi_unregister_controller(struct spi_controller *ctlr)device_del (&ctlr->dev); -/* Release the last reference on the controller if its driver -* has not yet been converted to devm_spi_alloc_master/slave(). -*/ -if (!ctlr->devm_allocated) -put_device (&ctlr->dev); -/* free bus id */ mutex_lock (&board_lock);if (found == ctlr)
@@ -2910,7 +2899,13 @@ void spi_unregister_controller(struct spi_controller *ctlr)mutex_unlock (&board_lock);if (IS_ENABLED (CONFIG_SPI_DYNAMIC )) -mutex_unlock (&spi_add_lock); +mutex_unlock (&ctlr->add_lock); + +/* Release the last reference on the controller if its driver +* has not yet been converted to devm_spi_alloc_master/slave(). +*/ +if (!ctlr->devm_allocated) +put_device (&ctlr->dev); }EXPORT_SYMBOL_GPL (spi_unregister_controller);
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
@@ -846,11 +846,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 */
@@ -860,8 +861,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
@@ -436,6 +436,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);
drivers/vdpa/ifcvf/ifcvf_base.c +1 -1
@@ -105,7 +105,7 @@ int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev *pdev)u32 i; ret =pci_read_config_byte (pdev,PCI_CAPABILITY_LIST , &pos); -if (ret <0 ) { +if (ret) {IFCVF_ERR (pdev,"Failed to read PCI capability list\n" );return -EIO ; }
fs/btrfs/delayed-ref.c +1 -1
@@ -620,7 +620,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 +1 -0
@@ -1532,6 +1532,7 @@ void nfs_fattr_init(struct nfs_fattr *fattr) fattr->gencount =nfs_inc_attr_generation_counter (); fattr->owner_name =NULL ; fattr->group_name =NULL ; + fattr->mdsthreshold =NULL ; }EXPORT_SYMBOL_GPL (nfs_fattr_init);
fs/ocfs2/file.c +6 -3
@@ -1133,9 +1133,12 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)trace_ocfs2_setattr (inode, dentry, (unsigned long long )OCFS2_I (inode)->ip_blkno, dentry->d_name.len, dentry->d_name.name, - attr->ia_valid, attr->ia_mode, -from_kuid (&init_user_ns, attr->ia_uid), -from_kgid (&init_user_ns, attr->ia_gid)); + attr->ia_valid, + attr->ia_valid &ATTR_MODE ? attr->ia_mode :0 , + attr->ia_valid &ATTR_UID ? +from_kuid (&init_user_ns, attr->ia_uid) :0 , + attr->ia_valid &ATTR_GID ? +from_kgid (&init_user_ns, attr->ia_gid) :0 );/* ensuring we don't even attempt to truncate a symlink */ if (S_ISLNK (inode->i_mode))
fs/ocfs2/xattr.c +1 -2
@@ -2042,8 +2042,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
@@ -446,10 +446,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 * @sizez: size of buffer
@@ -477,6 +473,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/splice.c +6 -3
@@ -662,12 +662,14 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out,/* build the vector */ left = sd.total_len; -for (n =0 ; !pipe_empty (head, tail) && left && n < nbufs; tail++, n++) { +for (n =0 ; !pipe_empty (head, tail) && left && n < nbufs; tail++) {struct pipe_buffer *buf = &pipe->bufs[tail & mask];size_t this_len = buf->len; -if (this_len > left) - this_len = left; +/* zero-length bvecs are not supported, skip them */ +if (!this_len) +continue ; + this_len =min (this_len, left); ret =pipe_buf_confirm (pipe, buf);if (unlikely (ret)) {
@@ -680,6 +682,7 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out, array[n].bv_len = this_len; array[n].bv_offset = buf->offset; left -= this_len; + n++; }iov_iter_bvec (&from,WRITE , array, n, sd.total_len - left);
include/linux/fs.h +35 -0
@@ -1797,6 +1797,41 @@ static inline bool sb_start_intwrite_trylock(struct super_block *sb)return __sb_start_write_trylock (sb,SB_FREEZE_FS ); } +/** +* kiocb_start_write - get write access to a superblock for async file io +* @iocb: the io context we want to submit the write with +* +* This is a variant of sb_start_write() for async io submission. +* Should be matched with a call to kiocb_end_write(). +*/ +static inline void kiocb_start_write (struct kiocb *iocb) +{ +struct inode *inode =file_inode (iocb->ki_filp); + +sb_start_write (inode->i_sb); +/* +* Fool lockdep by telling it the lock got released so that it +* doesn't complain about the held lock when we return to userspace. +*/ +__sb_writers_release (inode->i_sb,SB_FREEZE_WRITE ); +} + +/** +* kiocb_end_write - drop write access to a superblock after async file io +* @iocb: the io context we sumbitted the write with +* +* Should be matched with a call to kiocb_start_write(). +*/ +static inline void kiocb_end_write (struct kiocb *iocb) +{ +struct inode *inode =file_inode (iocb->ki_filp); + +/* +* Tell lockdep we inherited freeze protection from submission thread. +*/ +__sb_writers_acquired (inode->i_sb,SB_FREEZE_WRITE ); +sb_end_write (inode->i_sb); +}extern bool inode_owner_or_capable (const struct inode *inode);
include/linux/phy.h +2 -0
@@ -1542,8 +1542,10 @@ void phy_drivers_unregister(struct phy_driver *drv, int n);int phy_driver_register (struct phy_driver *new_driver,struct module *owner);int phy_drivers_register (struct phy_driver *new_driver,int n,struct module *owner); +void phy_error (struct phy_device *phydev);void phy_state_machine (struct work_struct *work);void phy_queue_state_machine (struct phy_device *phydev,unsigned long jiffies); +void phy_trigger_machine (struct phy_device *phydev);void phy_mac_interrupt (struct phy_device *phydev);void phy_start_machine (struct phy_device *phydev);void phy_stop_machine (struct phy_device *phydev);
include/linux/spi/spi.h +3 -0
@@ -528,6 +528,9 @@ struct spi_controller {/* I/O mutex */ struct mutex io_mutex; +/* Used to avoid adding the same CS twice */ +struct mutex add_lock; +/* lock and mutex for SPI bus locking */ spinlock_t bus_lock_spinlock;struct mutex bus_lock_mutex;
io_uring/io_uring.c +32 -23
110 lines not on this page · raw message
kernel/bpf/verifier.c +2 -2
@@ -12564,7 +12564,7 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr,/* 'struct bpf_verifier_env' can be global, but since it's not small, * allocate/free it every time bpf_check() is called */ - env =kzalloc (sizeof (struct bpf_verifier_env ),GFP_KERNEL ); + env =kvzalloc (sizeof (struct bpf_verifier_env ),GFP_KERNEL );if (!env)return -ENOMEM ; log = &env->log;
@@ -12755,6 +12755,6 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr,mutex_unlock (&bpf_verifier_lock);vfree (env->insn_aux_data); err_free_env: -kfree (env); +kvfree (env);return ret; }
mm/slab_common.c +1 -1
@@ -1075,7 +1075,7 @@ static __always_inline void *__do_krealloc(const void *p, size_t new_size,/* Zero out spare memory. */ if (want_init_on_alloc (flags)) {kasan_disable_current (); -memset ((void *)p + new_size,0 , ks - new_size); +memset (kasan_reset_tag (p) + new_size,0 , ks - new_size);kasan_enable_current (); }
net/9p/client.c +11 -1
@@ -1004,8 +1004,10 @@ static int p9_client_version(struct p9_client *c)struct p9_client *p9_client_create (const char *dev_name,char *options) {int err; +static atomic_t seqno =ATOMIC_INIT (0 );struct p9_client *clnt;char *client_id; +char *cache_name; err =0 ; clnt =kmalloc (sizeof (struct p9_client ),GFP_KERNEL );
@@ -1058,15 +1060,23 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)if (err) goto close_trans; + cache_name =kasprintf (GFP_KERNEL , +"9p-fcall-cache-%u" ,atomic_inc_return (&seqno)); +if (!cache_name) { + err = -ENOMEM ; + goto close_trans; + } +/* P9_HDRSZ + 4 is the smallest packet header we can have that is * followed by data accessed from userspace by read */ clnt->fcall_cache = -kmem_cache_create_usercopy ("9p-fcall-cache" , clnt->msize, +kmem_cache_create_usercopy (cache_name, clnt->msize,0 ,0 ,P9_HDRSZ +4 , clnt->msize - (P9_HDRSZ +4 ),NULL ); +kfree (cache_name);return clnt; close_trans:
net/bridge/br_device.c +5 -0
@@ -36,6 +36,11 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)const unsigned char *dest;u16 vid =0 ; +if (unlikely (!pskb_may_pull (skb,ETH_HLEN ))) { +kfree_skb (skb); +return NETDEV_TX_OK ; + } +memset (skb->cb,0 ,sizeof (struct br_input_skb_cb ));rcu_read_lock ();
net/core/dst.c +12 -5
@@ -109,9 +109,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);if (dst->dev)
@@ -162,6 +159,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) {
@@ -171,8 +174,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);
@@ -186,8 +191,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/sctp/sm_statefuns.c +1 -1
@@ -3637,7 +3637,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/vmw_vsock/hyperv_transport.c +1 -0
@@ -538,6 +538,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
@@ -687,6 +687,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/Kconfig +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only menuconfig SOUND tristate "Sound card support" - depends on HAS_IOMEM || UML + depends on HAS_IOMEM || INDIRECT_IOMEM help If you have a sound card in your computer, i.e. if it can say more than an occasional beep, say Y.
sound/firewire/tascam/amdtp-tascam.c +1 -1
@@ -244,7 +244,7 @@ int amdtp_tscm_init(struct amdtp_stream *s, struct fw_unit *unit,CIP_NONBLOCKING |CIP_SKIP_DBC_ZERO_CHECK , 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
@@ -181,8 +181,6 @@ static void cx_auto_reboot_notify(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/soc/stm/stm32_spdifrx.c +1 -1
@@ -948,7 +948,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_quirks.c +170 -0
190 lines not on this page · raw message
tools/perf/util/hist.c +3 -7
@@ -2624,6 +2624,8 @@ void hist__account_cycles(struct branch_stack *bs, struct addr_location *al,/* If we have branch cycles always annotate them. */ if (bs && bs->nr && entries[0 ].flags.cycles) { +int i; + bi =sample__resolve_bstack (sample, al);if (bi) {struct addr_map_symbol *prev =NULL ;
@@ -2638,7 +2640,7 @@ void hist__account_cycles(struct branch_stack *bs, struct addr_location *al,* Note that perf stores branches reversed from * program order! */ -for (int i = bs->nr -1 ; i >=0 ; i--) { +for (i = bs->nr -1 ; i >=0 ; i--) {addr_map_symbol__account_cycles (&bi[i].from, nonany_branch_mode ?NULL : prev, bi[i].flags.cycles);
@@ -2647,12 +2649,6 @@ void hist__account_cycles(struct branch_stack *bs, struct addr_location *al,if (total_cycles) *total_cycles += bi[i].flags.cycles; } -for (unsigned int i =0 ; i < bs->nr; i++) { -map__put (bi[i].to.ms.map); -maps__put (bi[i].to.ms.maps); -map__put (bi[i].from.ms.map); -maps__put (bi[i].from.ms.maps); - }free (bi); } }
tools/perf/util/session.c +4 -1
@@ -299,8 +299,11 @@ void perf_session__delete(struct perf_session *session)perf_session__release_decomp_events (session);perf_env__exit (&session->header.env);machines__exit (&session->machines); -if (session->data) +if (session->data) { +if (perf_data__is_read (session->data)) +evlist__delete (session->evlist);perf_data__close (session->data); + }free (session); }