Linux 6.12.60
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.12.60 kernel.
All users of the 6.12 kernel series must upgrade.
The updated 6.12.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.12.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/pinctrl/toshiba,visconti-pinctrl.yaml | 26 +-- Documentation/wmi/driver-development-guide.rst | 1 Makefile | 2 arch/arm64/boot/dts/rockchip/rk3399-op1.dtsi | 2 arch/arm64/boot/dts/rockchip/rk3566-pinetab2.dtsi | 2 arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi | 4 arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dts | 4 arch/arm64/kvm/hyp/nvhe/ffa.c | 9 - arch/arm64/kvm/sys_regs.c | 61 +++---- arch/loongarch/include/uapi/asm/ptrace.h | 40 ++-- arch/loongarch/pci/pci.c | 8 arch/mips/mti-malta/malta-init.c | 20 +- arch/s390/include/asm/pgtable.h | 12 - arch/s390/mm/pgtable.c | 4 arch/x86/kernel/cpu/microcode/amd.c | 20 ++ block/blk-crypto.c | 2 drivers/ata/libata-scsi.c | 11 + drivers/bcma/main.c | 6 drivers/gpio/gpiolib-swnode.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c | 3 drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 4 drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 4 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 59 ++----- drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c | 20 +- drivers/gpu/drm/amd/display/dc/dccg/dcn35/dcn35_dccg.c | 60 +++++-- drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c | 8 drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c | 21 +- drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c | 11 - drivers/gpu/drm/i915/display/intel_psr.c | 4 drivers/gpu/drm/nouveau/nvkm/falcon/fw.c | 2 drivers/gpu/drm/radeon/radeon_fence.c | 7 drivers/gpu/drm/tegra/dc.c | 1 drivers/gpu/drm/tegra/dsi.c | 9 - drivers/gpu/drm/tegra/uapi.c | 7 drivers/gpu/drm/xe/xe_vm.c | 4 drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_init.c | 2 drivers/hid/hid-ids.h | 4 drivers/hid/hid-quirks.c | 13 + drivers/infiniband/hw/irdma/Kconfig | 7 drivers/input/keyboard/cros_ec_keyb.c | 6 drivers/input/keyboard/imx_sc_key.c | 2 drivers/input/tablet/pegasus_notetaker.c | 9 + drivers/input/touchscreen/goodix.c | 1 drivers/mtd/mtdchar.c | 6 drivers/mtd/nand/raw/cadence-nand-controller.c | 3 drivers/net/dsa/hirschmann/hellcreek_ptp.c | 14 + drivers/net/dsa/microchip/lan937x_main.c | 1 drivers/net/ethernet/emulex/benet/be_main.c | 7 drivers/net/ethernet/intel/ice/ice_ptp.c | 22 ++ drivers/net/ethernet/intel/idpf/idpf_main.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c | 9 - drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c | 6 drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | 2 drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c | 6 drivers/net/ethernet/qlogic/qede/qede_fp.c | 5 drivers/net/ethernet/ti/netcp_core.c | 10 - drivers/nvme/host/fc.c | 15 - drivers/nvme/host/multipath.c | 2 drivers/perf/riscv_pmu_sbi.c | 2 drivers/pinctrl/cirrus/pinctrl-cs42l43.c | 23 ++ drivers/pinctrl/nxp/pinctrl-s32cc.c | 3 drivers/pinctrl/realtek/Kconfig | 1 drivers/platform/x86/Kconfig | 1 drivers/platform/x86/intel/speed_select_if/isst_if_mmio.c | 4 drivers/platform/x86/msi-wmi-platform.c | 43 ++++- drivers/s390/net/ctcm_mpc.c | 1 drivers/scsi/hosts.c | 5 drivers/scsi/sg.c | 10 + drivers/soc/ti/knav_dma.c | 14 - drivers/target/loopback/tcm_loop.c | 3 drivers/tty/vt/vt_ioctl.c | 4 fs/exfat/super.c | 5 fs/isofs/inode.c | 5 fs/smb/client/cached_dir.c | 43 ++++- fs/smb/client/cifsfs.c | 2 fs/smb/client/fs_context.c | 4 fs/xfs/scrub/symlink_repair.c | 4 include/linux/ata.h | 1 include/net/tls.h | 25 +- include/net/xfrm.h | 3 kernel/time/timer.c | 7 lib/maple_tree.c | 30 +-- mm/mempool.c | 32 +++ mm/shmem.c | 15 - net/devlink/rate.c | 4 net/ipv4/esp4_offload.c | 6 net/ipv6/esp6_offload.c | 6 net/mptcp/options.c | 54 ++++++ net/mptcp/pm_netlink.c | 20 +- net/mptcp/protocol.c | 84 ++++++---- net/mptcp/protocol.h | 3 net/mptcp/subflow.c | 8 net/openvswitch/actions.c | 68 -------- net/openvswitch/flow_netlink.c | 64 ------- net/openvswitch/flow_netlink.h | 2 net/tls/tls_device.c | 4 net/unix/af_unix.c | 36 ++-- net/vmw_vsock/af_vsock.c | 40 +++- net/xfrm/xfrm_output.c | 6 net/xfrm/xfrm_state.c | 8 net/xfrm/xfrm_user.c | 5 scripts/kconfig/mconf.c | 3 scripts/kconfig/nconf.c | 3 sound/usb/endpoint.c | 3 sound/usb/mixer.c | 2 tools/arch/riscv/include/asm/csr.h | 5 tools/testing/selftests/net/bareudp.sh | 2 tools/testing/selftests/net/forwarding/lib_sh_test.sh | 7 tools/testing/selftests/net/lib.sh | 2 tools/testing/selftests/net/mptcp/mptcp_join.sh | 18 +- tools/tracing/latency/latency-collector.c | 2 112 files changed, 850 insertions(+), 522 deletions(-)
Aleksei Nikiforov (1):
s390/ctcm: Fix double-kfree
Andrey Vatoropin (1):
be2net: pass wrb_params in case of OS2BMC
Armin Wolf (2):
platform/x86: msi-wmi-platform: Only load on MSI devices platform/x86: msi-wmi-platform: Fix typo in WMI GUID
Bart Van Assche (2):
scsi: sg: Do not sleep in atomic context
scsi: core: Fix a regression triggered by scsi_host_busy()
Borislav Petkov (AMD) (1):
x86/microcode/AMD: Limit Entrysign signature checking to known generations
Carlos Llamas (1):
blk-crypto: use BLK_STS_INVAL for alignment errors
Charlene Liu (3):
drm/amd/display: avoid reset DTBCLK at clock init drm/amd/display: disable DPP RCG before DPP CLK enable drm/amd/display: Insert dccg log for easy debug
Charles Keepax (1):
Revert "gpio: swnode: don't use the swnode's name as the key for GPIO lookup"
Chen Pei (1):
tools: riscv: Fixed misalignment of CSR related definitions
Dan Carpenter (2):
mtdchar: fix integer overflow in read/write ioctls
Input: imx_sc_key - fix memory corruption on unload
Darrick J. Wong (1):
xfs: fix out of bounds memory read error in symlink repair
Diederik de Haas (1):
arm64: dts: rockchip: Fix vccio4-supply on rk3566-pinetab2
Diogo Ivo (1):
Revert "drm/tegra: dsi: Clear enable register if powered by bootloader"
Emil Tantilov (1):
idpf: fix possible vport_config NULL pointer deref in remove
Eric Dumazet (2):
mptcp: fix race condition in mptcp_schedule_work()
mptcp: fix a race in mptcp_pm_del_add_timer()
Ewan D. Milne (2):
nvme: nvme-fc: move tagset removal to nvme_fc_delete_ctrl()
nvme: nvme-fc: Ensure ->ioerr_work is cancelled in nvme_fc_delete_ctrl()
Fangzhi Zuo (2):
drm/amd/display: Fix pbn to kbps Conversion drm/amd/display: Prevent Gating DTBCLK before It Is Properly Latched
Greg Kroah-Hartman (1):
Linux 6.12.60
Grzegorz Nitka (1):
ice: fix PTP cleanup on driver removal in error path
Hamza Mahfooz (1):
scsi: target: tcm_loop: Fix segfault in tcm_loop_tpg_address_show()
Hans de Goede (1):
Input: goodix - add support for ACPI ID GDIX1003
Haotian Zhang (2):
pinctrl: cirrus: Fix fwnode leak in cs42l43_pin_probe() platform/x86/intel/speed_select_if: Convert PCIBIOS_* return codes to errnos
Heiko Carstens (1):
s390/mm: Fix __ptep_rdp() inline assembly
Henrique Carvalho (2):
smb: client: introduce close_cached_dir_locked()
smb: client: fix incomplete backport in cfids_invalidation_worker()
Huacai Chen (1):
LoongArch: Don't panic if no valid cache info for PCI
Ido Schimmel (1):
selftests: net: lib: Do not overwrite error messages
Ilya Maximets (1):
net: openvswitch: remove never-working support for setting nsh fields
Imre Deak (1):
drm/i915/dp_mst: Disable Panel Replay
Ivan Lipski (1):
drm/amd/display: Clear the CUR_ENABLE register on DCN20 on DPP5
Jakub Horký (2):
kconfig/mconf: Initialize the default locale at startup kconfig/nconf: Initialize the default locale at startup
Jared Kangas (2):
pinctrl: s32cc: fix uninitialized memory in s32_pinctrl_desc
pinctrl: s32cc: initialize gpio_pin_config::list after kmalloc()
Jari Ruusu (1):
tty/vt: fix up incorrect backport to stable releases
Jianbo Liu (2):
xfrm: Determine inner GSO type from packet inner protocol
xfrm: Prevent locally generated packets from direct output in tunnel mode
Jiayuan Chen (2):
mptcp: Disallow MPTCP subflows from sockmap
mptcp: Fix proto fallback detection with BPF
Krzysztof Kozlowski (1):
dt-bindings: pinctrl: toshiba,visconti: Fix number of items in groups
Kuniyuki Iwashima (2):
af_unix: Cache state->msg in unix_stream_read_generic().
af_unix: Read sk_peek_offset() again after sleeping in unix_stream_read_generic().
Ma Ke (1):
drm/tegra: dc: Fix reference leak in tegra_dc_couple()
Maciej W. Rozycki (1):
MIPS: Malta: Fix !EVA SOC-it PCI MMIO
Marc Zyngier (1):
KVM: arm64: Make all 32bit ID registers fully writable
Marcelo Moreira (1):
xfs: Replace strncpy with memcpy
Mario Limonciello (1):
drm/amd: Skip power ungate during suspend for VPE
Mario Limonciello (AMD) (3):
HID: amd_sfh: Stop sensor before starting drm/amd/display: Increase DPCD read retries drm/amd/display: Move sleep into each retry for retrieve_link_cap()
Martin Kaiser (1):
maple_tree: fix tracepoint string pointers
Matthieu Baerts (NGI0) (2):
selftests: mptcp: join: endpoints: longer timeout
selftests: mptcp: join: userspace: longer timeout
Michal Luczaj (1):
vsock: Ignore signal/timeout on connect() if already established
Mike Yuan (1):
shmem: fix tmpfs reconfiguration (remount) when noswap is set
Mykola Kvach (1):
arm64: dts: rockchip: fix PCIe 3.3V regulator voltage on orangepi-5
Nam Cao (1):
nouveau/firmware: Add missing kfree() of nvkm_falcon_fw::boot
Niklas Cassel (1):
ata: libata-scsi: Fix system suspend for a security locked drive
Niravkumar L Rabara (1):
mtd: rawnand: cadence: fix DMA device NULL pointer dereference
Nishanth Menon (1):
net: ethernet: ti: netcp: Standardize knav_dma_open_channel to return NULL on error
Oleksij Rempel (1):
net: dsa: microchip: lan937x: Fix RGMII delay tuning
Paolo Abeni (6):
mptcp: fix ack generation for fallback msk
mptcp: fix duplicate reset on fastclose
mptcp: fix premature close in case of fallback
mptcp: avoid unneeded subflow-level drops
mptcp: decouple mptcp fastclose from tcp close
mptcp: do not fallback when OoO is present
Pavel Zhigulin (3):
net: dsa: hellcreek: fix missing error handling in LED registration
net: mlxsw: linecards: fix missing error check in mlxsw_linecard_devlink_info_get()
net: qlogic/qede: fix potential out-of-bounds read in qede_tpa_cont() and qede_tpa_end()
Po-Hsu Lin (1):
selftests: net: use BASH for bareudp testing
Pradyumn Rahar (1):
net/mlx5: Clean up only new IRQ glue on request_irq() failure
Prateek Agarwal (1):
drm/tegra: Add call to put_pid()
Quentin Schulz (2):
arm64: dts: rockchip: include rk3399-base instead of rk3399 in rk3399-op1
arm64: dts: rockchip: disable HS400 on RK3588 Tiger
Rafał Miłecki (1):
bcma: don't register devices disabled in OF
René Rebe (1):
ALSA: usb-audio: fix uac2 clock source at terminal parser
Robert McClinton (1):
drm/radeon: delete radeon_fence_process in is_signaled, no deadlock
Sabrina Dubroca (2):
xfrm: drop SA reference in xfrm_state_update if dir doesn't match
xfrm: set err and extack on failure to create pcpu SA
Samuel Zhang (1):
drm/amdgpu: fix gpu page fault after hibernation on PF passthrough
Sebastian Ene (1):
KVM: arm64: Check the untrusted offset in FF-A memory share
Seungjin Bae (1):
Input: pegasus-notetaker - fix potential out-of-bounds access
Shahar Shitrit (2):
net: tls: Change async resync helpers argument
net: tls: Cancel RX async resync request on rcd_delta overflow
Shaurya Rane (1):
cifs: fix memory leak in smb3_fs_context_parse_param error path
Shay Drory (1):
devlink: rate: Unset parent pointer in devl_rate_nodes_destroy
Shin'ichiro Kawasaki (1):
nvme-multipath: fix lockdep WARN due to partition scan work
Shuicheng Lin (1):
drm/xe: Prevent BIT() overflow when handling invalid prefetch region
Steve French (1):
cifs: fix typo in enable_gcm_256 module parameter
Takashi Iwai (1):
ALSA: usb-audio: Fix missing unlock at error path of maxpacksize check
Thomas Weißschuh (1):
LoongArch: Use UAPI types in ptrace UAPI header
Tzung-Bi Shih (1):
Input: cros_ec_keyb - fix an invalid memory access
Vlastimil Babka (1):
mm/mempool: fix poisoning order>0 pages with HIGHMEM
Wentao Guan (1):
Revert "RDMA/irdma: Update Kconfig"
Yifan Zha (1):
drm/amdgpu: Skip emit de meta data on gfx11 with rs64 enabled
Yihang Li (1):
ata: libata-scsi: Add missing scsi_device_put() in ata_scsi_dev_rescan()
Yipeng Zou (1):
timers: Fix NULL function pointer race in timer_shutdown_sync()
Yongpeng Yang (2):
isofs: check the return value of sb_min_blocksize() in isofs_fill_super
exfat: check return value of sb_min_blocksize in exfat_read_boot_sector
Yu-Chun Lin (1):
pinctrl: realtek: Select REGMAP_MMIO for RTD driver
Zhang Chujun (1):
tracing/tools: Fix incorrcet short option in usage text for --threads
Zhang Heng (1):
HID: quirks: work around VID/PID conflict for 0x4c4a/0x4155
Zilin Guan (1):
mlxsw: spectrum: Fix memory leak in mlxsw_sp_flower_stats()
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/pinctrl/toshiba,visconti-pinctrl.yaml +14 -12
@@ -50,18 +50,20 @@ patternProperties: groups: description: Name of the pin group to use for the functions. - $ref: /schemas/types.yaml#/definitions/string - enum: [i2c0_grp, i2c1_grp, i2c2_grp, i2c3_grp, i2c4_grp, - i2c5_grp, i2c6_grp, i2c7_grp, i2c8_grp, - spi0_grp, spi0_cs0_grp, spi0_cs1_grp, spi0_cs2_grp, - spi1_grp, spi2_grp, spi3_grp, spi4_grp, spi5_grp, spi6_grp, - uart0_grp, uart1_grp, uart2_grp, uart3_grp, - pwm0_gpio4_grp, pwm0_gpio8_grp, pwm0_gpio12_grp, - pwm0_gpio16_grp, pwm1_gpio5_grp, pwm1_gpio9_grp, - pwm1_gpio13_grp, pwm1_gpio17_grp, pwm2_gpio6_grp, - pwm2_gpio10_grp, pwm2_gpio14_grp, pwm2_gpio18_grp, - pwm3_gpio7_grp, pwm3_gpio11_grp, pwm3_gpio15_grp, - pwm3_gpio19_grp, pcmif_out_grp, pcmif_in_grp] + items: + enum: [i2c0_grp, i2c1_grp, i2c2_grp, i2c3_grp, i2c4_grp, + i2c5_grp, i2c6_grp, i2c7_grp, i2c8_grp, + spi0_grp, spi0_cs0_grp, spi0_cs1_grp, spi0_cs2_grp, + spi1_grp, spi2_grp, spi3_grp, spi4_grp, spi5_grp, spi6_grp, + uart0_grp, uart1_grp, uart2_grp, uart3_grp, + pwm0_gpio4_grp, pwm0_gpio8_grp, pwm0_gpio12_grp, + pwm0_gpio16_grp, pwm1_gpio5_grp, pwm1_gpio9_grp, + pwm1_gpio13_grp, pwm1_gpio17_grp, pwm2_gpio6_grp, + pwm2_gpio10_grp, pwm2_gpio14_grp, pwm2_gpio18_grp, + pwm3_gpio7_grp, pwm3_gpio11_grp, pwm3_gpio15_grp, + pwm3_gpio19_grp, pcmif_out_grp, pcmif_in_grp] + minItems: 1 + maxItems: 8 drive-strength: enum: [2, 4, 6, 8, 16, 24, 32]
Documentation/wmi/driver-development-guide.rst +1 -0
@@ -50,6 +50,7 @@ to matching WMI devices using a struct wmi_device_id table: :: static const struct wmi_device_id foo_id_table[] = { + /* Only use uppercase letters! */ { "936DA01F-9ABD-4D9D-80C7-02AF85C822A8", NULL }, { } };
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 12 -SUBLEVEL = 59 +SUBLEVEL = 60 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm64/boot/dts/rockchip/rk3399-op1.dtsi +1 -1
@@ -3,7 +3,7 @@ * Copyright (c) 2016-2017 Fuzhou Rockchip Electronics Co., Ltd */ -#include "rk3399.dtsi" +#include "rk3399-base.dtsi" / { cluster0_opp: opp-table-0 {
arch/arm64/boot/dts/rockchip/rk3566-pinetab2.dtsi +1 -1
@@ -789,7 +789,7 @@ &pmu_io_domains { vccio1-supply = <&vccio_acodec>; vccio2-supply = <&vcc_1v8>; vccio3-supply = <&vccio_sd>; - vccio4-supply = <&vcc_1v8>; + vccio4-supply = <&vcca1v8_pmu>; vccio5-supply = <&vcc_1v8>; vccio6-supply = <&vcc1v8_dvp>; vccio7-supply = <&vcc_3v3>;
arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi +1 -3
@@ -359,14 +359,12 @@ &sdhci { cap-mmc-highspeed; mmc-ddr-1_8v; mmc-hs200-1_8v; - mmc-hs400-1_8v; - mmc-hs400-enhanced-strobe; mmc-pwrseq = <&emmc_pwrseq>; no-sdio; no-sd; non-removable; pinctrl-names = "default"; - pinctrl-0 = <&emmc_bus8 &emmc_cmd &emmc_clk &emmc_data_strobe>; + pinctrl-0 = <&emmc_bus8 &emmc_cmd &emmc_clk>; vmmc-supply = <&vcc_3v3_s3>; vqmmc-supply = <&vcc_1v8_s3>; status = "okay";
arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dts +2 -2
@@ -85,8 +85,8 @@ vcc3v3_pcie20: vcc3v3-pcie20-regulator { gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>; regulator-name = "vcc3v3_pcie20"; regulator-boot-on; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; startup-delay-us = <50000>; vin-supply = <&vcc5v0_sys>; };
arch/arm64/kvm/hyp/nvhe/ffa.c +7 -2
@@ -437,7 +437,7 @@ static void __do_ffa_mem_xfer(const u64 func_id,struct ffa_mem_region_attributes *ep_mem_access;struct ffa_composite_mem_region *reg;struct ffa_mem_region *buf; -u32 offset, nr_ranges; +u32 offset, nr_ranges, checked_offset;int ret =0 ; if (addr_mbz || npages_mbz || fraglen > len ||
@@ -474,7 +474,12 @@ static void __do_ffa_mem_xfer(const u64 func_id, goto out_unlock; } -if (fraglen < offset +sizeof (struct ffa_composite_mem_region )) { +if (check_add_overflow (offset,sizeof (struct ffa_composite_mem_region ), &checked_offset)) { + ret =FFA_RET_INVALID_PARAMETERS ; + goto out_unlock; + } + +if (fraglen < checked_offset) { ret =FFA_RET_INVALID_PARAMETERS ; goto out_unlock; }
arch/arm64/kvm/sys_regs.c +32 -29
94 lines not on this page · raw message
arch/loongarch/include/uapi/asm/ptrace.h +18 -22
@@ -10,10 +10,6 @@#include <linux/types.h> -#ifndef __KERNEL__ -#include <stdint.h> -#endif -/* * For PTRACE_{POKE,PEEK}USR. 0 - 31 are GPRs, * 32 is syscall's original ARG0, 33 is PC, 34 is BADVADDR.
@@ -41,44 +37,44 @@ struct user_pt_regs { } __attribute__((aligned(8)));struct user_fp_state { -uint64_t fpr[32 ]; -uint64_t fcc; -uint32_t fcsr; +__u64 fpr[32 ]; +__u64 fcc; +__u32 fcsr; };struct user_lsx_state {/* 32 registers, 128 bits width per register. */ -uint64_t vregs[32 *2 ]; +__u64 vregs[32 *2 ]; };struct user_lasx_state {/* 32 registers, 256 bits width per register. */ -uint64_t vregs[32 *4 ]; +__u64 vregs[32 *4 ]; };struct user_lbt_state { -uint64_t scr[4 ]; -uint32_t eflags; -uint32_t ftop; +__u64 scr[4 ]; +__u32 eflags; +__u32 ftop; };struct user_watch_state { -uint64_t dbg_info; +__u64 dbg_info;struct { -uint64_t addr; -uint64_t mask; -uint32_t ctrl; -uint32_t pad; +__u64 addr; +__u64 mask; +__u32 ctrl; +__u32 pad; } dbg_regs[8 ]; };struct user_watch_state_v2 { -uint64_t dbg_info; +__u64 dbg_info;struct { -uint64_t addr; -uint64_t mask; -uint32_t ctrl; -uint32_t pad; +__u64 addr; +__u64 mask; +__u32 ctrl; +__u32 pad; } dbg_regs[14 ]; };
arch/loongarch/pci/pci.c +4 -4
@@ -51,11 +51,11 @@ static int __init pcibios_init(void)*/ lsize =cpu_last_level_cache_line_size (); -BUG_ON (!lsize); +if (lsize) { + pci_dfl_cache_line_size = lsize >>2 ; - pci_dfl_cache_line_size = lsize >>2 ; - -pr_debug ("PCI: pci_cache_line_size set to %d bytes\n" , lsize); +pr_debug ("PCI: pci_cache_line_size set to %d bytes\n" , lsize); + }return 0 ; }
arch/mips/mti-malta/malta-init.c +13 -7
@@ -241,16 +241,22 @@ void __init prom_init(void)#endif /* -* Setup the Malta max (2GB) memory for PCI DMA in host bridge -* in transparent addressing mode. +* Set up memory mapping in host bridge for PCI DMA masters, +* in transparent addressing mode. For EVA use the Malta +* maximum of 2 GiB memory in the alias space at 0x80000000 +* as per PHYS_OFFSET. Otherwise use 256 MiB of memory in +* the regular space, avoiding mapping the PCI MMIO window +* for DMA as it seems to confuse the system controller's +* logic, causing PCI MMIO to stop working. */ - mask =PHYS_OFFSET |PCI_BASE_ADDRESS_MEM_PREFETCH ; -MSC_WRITE (MSC01_PCI_BAR0 , mask); -MSC_WRITE (MSC01_PCI_HEAD4 , mask); + mask =PHYS_OFFSET ?PHYS_OFFSET :0xf0000000 ; +MSC_WRITE (MSC01_PCI_BAR0 , + mask |PCI_BASE_ADDRESS_MEM_PREFETCH ); +MSC_WRITE (MSC01_PCI_HEAD4 , +PHYS_OFFSET |PCI_BASE_ADDRESS_MEM_PREFETCH ); - mask &=MSC01_PCI_BAR0_SIZE_MSK ;MSC_WRITE (MSC01_PCI_P2SCMSKL , mask); -MSC_WRITE (MSC01_PCI_P2SCMAPL , mask); +MSC_WRITE (MSC01_PCI_P2SCMAPL ,PHYS_OFFSET );/* Don't handle target retries indefinitely. */ if ((data & MSC01_PCI_CFG_MAXRTRY_MSK) ==
arch/s390/include/asm/pgtable.h +5 -7
@@ -1109,17 +1109,15 @@ static inline pte_t pte_mkhuge(pte_t pte)#define IPTE_NODAT 0x400#define IPTE_GUEST_ASCE 0x800 -static __always_inline void __ptep_rdp(unsigned long addr, pte_t *ptep, -unsigned long opt,unsigned long asce, -int local) +static __always_inline void __ptep_rdp(unsigned long addr, pte_t *ptep, int local) {unsigned long pto; pto =__pa (ptep) & ~(PTRS_PER_PTE *sizeof (pte_t) -1 ); - asmvolatile (".insn rrf,0xb98b0000,%[r1],%[r2],%[asce],%[m4]" + asmvolatile (".insn rrf,0xb98b0000,%[r1],%[r2],%%r0,%[m4]" :"+m" (*ptep) - : [r1]"a" (pto), [r2]"a" ((addr &PAGE_MASK ) | opt), - [asce]"a" (asce), [m4]"i" (local)); + : [r1]"a" (pto), [r2]"a" (addr &PAGE_MASK ), + [m4]"i" (local)); } static __always_inline void __ptep_ipte(unsigned long address, pte_t *ptep,
@@ -1303,7 +1301,7 @@ static inline void flush_tlb_fix_spurious_fault(struct vm_area_struct *vma,* A local RDP can be used to do the flush. */ if (MACHINE_HAS_RDP && !(pte_val (*ptep) & _PAGE_PROTECT)) -__ptep_rdp (address, ptep,0 ,0 ,1 ); +__ptep_rdp (address, ptep,1 ); }#define flush_tlb_fix_spurious_fault flush_tlb_fix_spurious_fault
arch/s390/mm/pgtable.c +2 -2
@@ -293,9 +293,9 @@ void ptep_reset_dat_prot(struct mm_struct *mm, unsigned long addr, pte_t *ptep,preempt_disable ();atomic_inc (&mm->context.flush_count);if (cpumask_equal (mm_cpumask (mm),cpumask_of (smp_processor_id ()))) -__ptep_rdp (addr, ptep,0 ,0 ,1 ); +__ptep_rdp (addr, ptep,1 );else -__ptep_rdp (addr, ptep,0 ,0 ,0 ); +__ptep_rdp (addr, ptep,0 );/* * PTE is not invalidated by RDP, only _PAGE_PROTECT is cleared. That * means it is still valid and active, and must not be changed according
arch/x86/kernel/cpu/microcode/amd.c +19 -1
@@ -224,6 +224,24 @@ static bool need_sha_check(u32 cur_rev)return true; } +static bool cpu_has_entrysign (void ) +{ +unsigned int fam =x86_family (bsp_cpuid_1_eax); +unsigned int model =x86_model (bsp_cpuid_1_eax); + +if (fam ==0x17 || fam ==0x19 ) +return true; + +if (fam ==0x1a ) { +if (model <=0x2f || + (0x40 <= model && model <=0x4f ) || + (0x60 <= model && model <=0x6f )) +return true; + } + +return false; +} +static bool verify_sha256_digest (u32 patch_id,u32 cur_rev,const u8 *data,unsigned int len) {struct patch_digest *pd =NULL ;
@@ -231,7 +249,7 @@ static bool verify_sha256_digest(u32 patch_id, u32 cur_rev, const u8 *data, unsistruct sha256_state s;int i; -if (x86_family (bsp_cpuid_1_eax) <0x17 ) +if (!cpu_has_entrysign ())return true;if (!need_sha_check (cur_rev))
block/blk-crypto.c +1 -1
@@ -282,7 +282,7 @@ bool __blk_crypto_bio_prep(struct bio **bio_ptr) }if (!bio_crypt_check_alignment (bio)) { - bio->bi_status =BLK_STS_IOERR ; + bio->bi_status =BLK_STS_INVAL ; goto fail; }
drivers/ata/libata-scsi.c +10 -1
@@ -991,6 +991,13 @@ static void ata_gen_ata_sense(struct ata_queued_cmd *qc)return ; } +if (ata_id_is_locked (dev->id)) { +/* Security locked */ +/* LOGICAL UNIT ACCESS NOT AUTHORIZED */ +ata_scsi_set_sense (dev, cmd,DATA_PROTECT ,0x74 ,0x71 ); +return ; + } +if (!(qc->flags &ATA_QCFLAG_RTF_FILLED )) {ata_dev_dbg (dev,"Missing result TF: reporting aborted command\n" );
@@ -4800,8 +4807,10 @@ void ata_scsi_dev_rescan(struct work_struct *work)spin_unlock_irqrestore (ap->lock, flags);if (do_resume) { ret =scsi_resume_device (sdev); -if (ret == -EWOULDBLOCK ) +if (ret == -EWOULDBLOCK ) { +scsi_device_put (sdev); goto unlock_scan; + } dev->flags &= ~ATA_DFLAG_RESUMING ; } ret =scsi_rescan_device (sdev);
drivers/bcma/main.c +6 -0
@@ -294,6 +294,8 @@ static int bcma_register_devices(struct bcma_bus *bus)int err;list_for_each_entry (core, &bus->cores, list) { +struct device_node *np; +/* We support that core ourselves */ switch (core->id.id) {case BCMA_CORE_4706_CHIPCOMMON :
@@ -311,6 +313,10 @@ static int bcma_register_devices(struct bcma_bus *bus)if (bcma_is_core_needed_early (core->id.id))continue ; + np = core->dev.of_node; +if (np && !of_device_is_available (np)) +continue ; +/* Only first GMAC core on BCM4706 is connected and working */ if (core->id.id ==BCMA_CORE_4706_MAC_GBIT && core->core_unit >0 )
drivers/gpio/gpiolib-swnode.c +1 -1
@@ -41,7 +41,7 @@ static struct gpio_device *swnode_get_gpio_device(struct fwnode_handle *fwnode) !strcmp(gdev_node->name, GPIOLIB_SWNODE_UNDEFINED_NAME))return ERR_PTR (-ENOENT ); - gdev =gpio_device_find_by_fwnode (fwnode); + gdev =gpio_device_find_by_label (gdev_node->name);return gdev ?:ERR_PTR (-EPROBE_DEFER ); }
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +2 -1
@@ -3090,10 +3090,11 @@ int amdgpu_device_set_pg_state(struct amdgpu_device *adev, (adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_GFX || adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SDMA)) continue; -/* skip CG for VCE/UVD, it's handled specially */ +/* skip CG for VCE/UVD/VPE, it's handled specially */ if (adev->ip_blocks[i].version->type !=AMD_IP_BLOCK_TYPE_UVD && adev->ip_blocks[i].version->type !=AMD_IP_BLOCK_TYPE_VCE && adev->ip_blocks[i].version->type !=AMD_IP_BLOCK_TYPE_VCN && + adev->ip_blocks[i].version->type !=AMD_IP_BLOCK_TYPE_VPE && adev->ip_blocks[i].version->type !=AMD_IP_BLOCK_TYPE_JPEG && adev->ip_blocks[i].version->funcs->set_powergating_state) {/* enable powergating to save power */
drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c +2 -1
@@ -555,7 +555,8 @@ static int aqua_vanjaram_switch_partition_mode(struct amdgpu_xcp_mgr *xcp_mgr,return -EINVAL ; } -if (adev->kfd.init_complete && !amdgpu_in_reset (adev)) +if (adev->kfd.init_complete && !amdgpu_in_reset (adev) && + !adev->in_suspend) flags |=AMDGPU_XCP_OPS_KFD ;if (flags &AMDGPU_XCP_OPS_KFD ) {
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c +2 -2
@@ -5642,9 +5642,9 @@ static void gfx_v11_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,if (flags &AMDGPU_IB_PREEMPTED ) control |=INDIRECT_BUFFER_PRE_RESUME (1 ); -if (vmid) +if (vmid && !ring->adev->gfx.rs64_enable)gfx_v11_0_ring_emit_de_meta (ring, - (!amdgpu_sriov_vf (ring->adev) && flags &AMDGPU_IB_PREEMPTED ) ? true : false); + !amdgpu_sriov_vf (ring->adev) && (flags &AMDGPU_IB_PREEMPTED )); }if (ring->is_mes_queue)
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c +3 -1
@@ -2297,7 +2297,9 @@ static int gfx_v9_4_3_cp_resume(struct amdgpu_device *adev) r =amdgpu_xcp_init (adev->xcp_mgr, num_xcp, mode); }else { -if (amdgpu_xcp_query_partition_mode (adev->xcp_mgr, +if (adev->in_suspend) +amdgpu_xcp_restore_partition_mode (adev->xcp_mgr); +else if (amdgpu_xcp_query_partition_mode (adev->xcp_mgr,AMDGPU_XCP_FL_NONE ) ==AMDGPU_UNKNOWN_COMPUTE_PARTITION_MODE ) r = amdgpu_xcp_switch_partition_mode(
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +23 -36
142 lines not on this page · raw message
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c +14 -6
@@ -377,6 +377,8 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base, display_count =dcn35_get_active_display_cnt_wa (dc, context, &all_active_disps);if (new_clocks->dtbclk_en && !new_clocks->ref_dtbclk_khz) new_clocks->ref_dtbclk_khz =600000 ; +else if (!new_clocks->dtbclk_en && new_clocks->ref_dtbclk_khz >590000 ) + new_clocks->ref_dtbclk_khz =0 ;/* * if it is safe to lower, but we are already in the lower state, we don't have to do anything
@@ -393,6 +395,7 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base,if (clk_mgr_base->clks.dtbclk_en && !new_clocks->dtbclk_en) {if (clk_mgr->base.ctx->dc->config.allow_0_dtb_clk)dcn35_smu_set_dtbclk (clk_mgr, false); + clk_mgr_base->clks.dtbclk_en = new_clocks->dtbclk_en; }/* check that we're not already in lower */
@@ -410,11 +413,17 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base, }if (!clk_mgr_base->clks.dtbclk_en && new_clocks->dtbclk_en) { -dcn35_smu_set_dtbclk (clk_mgr, true); - clk_mgr_base->clks.dtbclk_en = new_clocks->dtbclk_en; +int actual_dtbclk =0 ;dcn35_update_clocks_update_dtb_dto (clk_mgr, context, new_clocks->ref_dtbclk_khz); - clk_mgr_base->clks.ref_dtbclk_khz = new_clocks->ref_dtbclk_khz; +dcn35_smu_set_dtbclk (clk_mgr, true); + + actual_dtbclk =REG_READ (CLK1_CLK4_CURRENT_CNT ); + +if (actual_dtbclk >590000 ) { + clk_mgr_base->clks.ref_dtbclk_khz = new_clocks->ref_dtbclk_khz; + clk_mgr_base->clks.dtbclk_en = new_clocks->dtbclk_en; + } }/* check that we're not already in D0 */
@@ -581,12 +590,10 @@ static bool dcn35_is_spll_ssc_enabled(struct clk_mgr *clk_mgr_base)static void init_clk_states (struct clk_mgr *clk_mgr) { -struct clk_mgr_internal *clk_mgr_int =TO_CLK_MGR_INTERNAL (clk_mgr);uint32_t ref_dtbclk = clk_mgr->clks.ref_dtbclk_khz; +memset (&(clk_mgr->clks),0 ,sizeof (struct dc_clocks )); -if (clk_mgr_int->smu_ver >=SMU_VER_THRESHOLD ) - clk_mgr->clks.dtbclk_en = true;// request DTBCLK disable on first commit clk_mgr->clks.ref_dtbclk_khz = ref_dtbclk;// restore ref_dtbclk clk_mgr->clks.p_state_change_support = true; clk_mgr->clks.prev_p_state_change_support = true;
@@ -597,6 +604,7 @@ static void init_clk_states(struct clk_mgr *clk_mgr)void dcn35_init_clocks (struct clk_mgr *clk_mgr) {struct clk_mgr_internal *clk_mgr_int =TO_CLK_MGR_INTERNAL (clk_mgr); +init_clk_states (clk_mgr);// to adjust dp_dto reference clock if ssc is enable otherwise to apply dprefclk
drivers/gpu/drm/amd/display/dc/dccg/dcn35/dcn35_dccg.c +44 -16
217 lines not on this page · raw message
drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c +8 -0
@@ -604,6 +604,14 @@ void dcn20_dpp_pg_control(* DOMAIN11_PGFSM_PWR_STATUS, pwr_status, * 1, 1000); */ + +/* Force disable cursor on plane powerdown on DPP 5 using dpp_force_disable_cursor */ +if (!power_on) { +struct dpp *dpp5 = hws->ctx->dc->res_pool->dpps[dpp_inst]; +if (dpp5 && dpp5->funcs->dpp_force_disable_cursor) + dpp5->funcs->dpp_force_disable_cursor (dpp5); + } +break ;default :BREAK_TO_DEBUGGER ();
drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c +14 -7
@@ -241,11 +241,6 @@ void dcn35_init_hw(struct dc *dc) dc->res_pool->hubbub->funcs->allow_self_refresh_control (dc->res_pool->hubbub, !dc->res_pool->hubbub->ctx->dc->debug.disable_stutter); } -if (res_pool->dccg->funcs->dccg_root_gate_disable_control) { -for (i =0 ; i < res_pool->pipe_count; i++) - res_pool->dccg->funcs->dccg_root_gate_disable_control (res_pool->dccg, i,0 ); - } -for (i =0 ; i < res_pool->audio_count; i++) {struct audio *audio = res_pool->audios[i];
@@ -885,12 +880,18 @@ void dcn35_init_pipes(struct dc *dc, struct dc_state *context)void dcn35_enable_plane (struct dc *dc,struct pipe_ctx *pipe_ctx,struct dc_state *context) { +struct dpp *dpp = pipe_ctx->plane_res.dpp; +struct dccg *dccg = dc->res_pool->dccg; + +/* enable DCFCLK current DCHUB */ pipe_ctx->plane_res.hubp->funcs->hubp_clk_cntl (pipe_ctx->plane_res.hubp, true);/* initialize HUBP on power up */ pipe_ctx->plane_res.hubp->funcs->hubp_init (pipe_ctx->plane_res.hubp); - +/*make sure DPPCLK is on*/ + dccg->funcs->dccg_root_gate_disable_control (dccg, dpp->inst, true); + dpp->funcs->dpp_dppclk_control (dpp, false, true);/* make sure OPP_PIPE_CLOCK_EN = 1 */ pipe_ctx->stream_res.opp->funcs->opp_pipe_clock_control( pipe_ctx->stream_res.opp,
@@ -907,6 +908,7 @@ void dcn35_enable_plane(struct dc *dc, struct pipe_ctx *pipe_ctx,// Program system aperture settings pipe_ctx->plane_res.hubp->funcs->hubp_set_vm_system_aperture_settings (pipe_ctx->plane_res.hubp, &apt); } +//DC_LOG_DEBUG("%s: dpp_inst(%d) =\n", __func__, dpp->inst); if (!pipe_ctx->top_pipe && pipe_ctx->plane_state
@@ -922,6 +924,8 @@ void dcn35_plane_atomic_disable(struct dc *dc, struct pipe_ctx *pipe_ctx) {struct hubp *hubp = pipe_ctx->plane_res.hubp;struct dpp *dpp = pipe_ctx->plane_res.dpp; +struct dccg *dccg = dc->res_pool->dccg; + dc->hwss.wait_for_mpcc_disconnect (dc, dc->res_pool, pipe_ctx);
@@ -939,7 +943,8 @@ void dcn35_plane_atomic_disable(struct dc *dc, struct pipe_ctx *pipe_ctx) hubp->funcs->hubp_clk_cntl (hubp, false); dpp->funcs->dpp_dppclk_control (dpp, false, false); -/*to do, need to support both case*/ + dccg->funcs->dccg_root_gate_disable_control (dccg, dpp->inst, false); + hubp->power_gated = true; hubp->funcs->hubp_reset (hubp);
@@ -951,6 +956,8 @@ void dcn35_plane_atomic_disable(struct dc *dc, struct pipe_ctx *pipe_ctx) pipe_ctx->top_pipe =NULL ; pipe_ctx->bottom_pipe =NULL ; pipe_ctx->plane_state =NULL ; +//DC_LOG_DEBUG("%s: dpp_inst(%d)=\n", __func__, dpp->inst); + }void dcn35_disable_plane (struct dc *dc,struct dc_state *state,struct pipe_ctx *pipe_ctx)
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c +6 -5
@@ -1587,7 +1587,7 @@ static bool retrieve_link_cap(struct dc_link *link)union edp_configuration_cap edp_config_cap;union dp_downstream_port_present ds_port = {0 };enum dc_status status =DC_ERROR_UNEXPECTED ; -uint32_t read_dpcd_retry_cnt =3 ; +uint32_t read_dpcd_retry_cnt =20 ;int i;struct dp_sink_hw_fw_revision dp_hw_fw_revision;const uint32_t post_oui_delay =30 ;// 30ms
@@ -1633,12 +1633,13 @@ static bool retrieve_link_cap(struct dc_link *link) status =dpcd_get_tunneling_device_data (link);dpcd_set_source_specific_data (link); -/* Sink may need to configure internals based on vendor, so allow some -* time before proceeding with possibly vendor specific transactions -*/ -msleep (post_oui_delay);for (i =0 ; i < read_dpcd_retry_cnt; i++) { +/* +* Sink may need to configure internals based on vendor, so allow some +* time before proceeding with possibly vendor specific transactions +*/ +msleep (post_oui_delay); status = core_link_read_dpcd( link, DP_DPCD_REV,
drivers/gpu/drm/i915/display/intel_psr.c +4 -0
@@ -591,6 +591,10 @@ static void _panel_replay_init_dpcd(struct intel_dp *intel_dp) {struct intel_display *display =to_intel_display (intel_dp); +/* TODO: Enable Panel Replay on MST once it's properly implemented. */ +if (intel_dp->mst_detect ==DRM_DP_MST ) +return ; +if (intel_dp_is_edp (intel_dp)) {if (!intel_alpm_aux_less_wake_supported (intel_dp)) { drm_dbg_kms(display->drm,
drivers/gpu/drm/nouveau/nvkm/falcon/fw.c +2 -0
@@ -159,6 +159,8 @@ nvkm_falcon_fw_dtor(struct nvkm_falcon_fw *fw)nvkm_memory_unref (&fw->inst);nvkm_falcon_fw_dtor_sigs (fw);nvkm_firmware_dtor (&fw->fw); +kfree (fw->boot); + fw->boot =NULL ; } static const struct nvkm_firmware_func
drivers/gpu/drm/radeon/radeon_fence.c +0 -7
@@ -360,13 +360,6 @@ static bool radeon_fence_is_signaled(struct dma_fence *f)if (atomic64_read (&rdev->fence_drv[ring].last_seq) >= seq)return true; -if (down_read_trylock (&rdev->exclusive_lock)) { -radeon_fence_process (rdev, ring); -up_read (&rdev->exclusive_lock); - -if (atomic64_read (&rdev->fence_drv[ring].last_seq) >= seq) -return true; - }return false; }
drivers/gpu/drm/tegra/dc.c +1 -0
@@ -3147,6 +3147,7 @@ static int tegra_dc_couple(struct tegra_dc *dc) dc->client.parent = &parent->client;dev_dbg (dc->dev,"coupled to %s\n" ,dev_name (companion)); +put_device (companion); }return 0 ;
drivers/gpu/drm/tegra/dsi.c +0 -9
@@ -913,15 +913,6 @@ static void tegra_dsi_encoder_enable(struct drm_encoder *encoder)u32 value;int err; -/* If the bootloader enabled DSI it needs to be disabled -* in order for the panel initialization commands to be -* properly sent. -*/ - value =tegra_dsi_readl (dsi,DSI_POWER_CONTROL ); - -if (value &DSI_POWER_CONTROL_ENABLE ) -tegra_dsi_disable (dsi); - err =tegra_dsi_prepare (dsi);if (err <0 ) {dev_err (dsi->dev,"failed to prepare: %d\n" , err);
drivers/gpu/drm/tegra/uapi.c +5 -2
@@ -114,9 +114,12 @@ int tegra_drm_ioctl_channel_open(struct drm_device *drm, void *data, struct drm_if (err) goto put_channel; -if (supported) +if (supported) { +struct pid *pid =get_task_pid (current,PIDTYPE_TGID ); context->memory_context =host1x_memory_context_alloc ( - host, client->base.dev,get_task_pid (current,PIDTYPE_TGID )); + host, client->base.dev, pid); +put_pid (pid); + }if (IS_ERR (context->memory_context)) {if (PTR_ERR (context->memory_context) != -EOPNOTSUPP ) {
drivers/gpu/drm/xe/xe_vm.c +2 -2
@@ -2903,8 +2903,8 @@ static int vm_bind_ioctl_check_args(struct xe_device *xe, op == DRM_XE_VM_BIND_OP_PREFETCH) ||XE_IOCTL_DBG (xe, prefetch_region && op !=DRM_XE_VM_BIND_OP_PREFETCH ) || -XE_IOCTL_DBG (xe, !(BIT (prefetch_region) & - xe->info.mem_region_mask)) || +XE_IOCTL_DBG (xe, prefetch_region >= (sizeof (xe->info.mem_region_mask) *8 ) || + !(BIT (prefetch_region) & xe->info.mem_region_mask)) ||XE_IOCTL_DBG (xe, obj && op == DRM_XE_VM_BIND_OP_UNMAP)) { err = -EINVAL;
drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_init.c +2 -0
@@ -172,6 +172,8 @@ static int amd_sfh1_1_hid_client_init(struct amd_mp2_dev *privdata)if (rc) goto cleanup; + mp2_ops->stop (privdata, cl_data->sensor_idx[i]); +amd_sfh_wait_for_response (privdata, cl_data->sensor_idx[i],DISABLE_SENSOR );writel (0 , privdata->mmio +amd_get_p2c_val (privdata,0 )); mp2_ops->start (privdata, info); status = amd_sfh_wait_for_response
drivers/hid/hid-ids.h +2 -2
@@ -1528,7 +1528,7 @@#define USB_VENDOR_ID_SIGNOTEC 0x2133#define USB_DEVICE_ID_SIGNOTEC_VIEWSONIC_PD1011 0x0018 -#define USB_VENDOR_ID_SMARTLINKTECHNOLOGY 0x4c4a -#define USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155 0x4155 +#define USB_VENDOR_ID_JIELI_SDK_DEFAULT 0x4c4a +#define USB_DEVICE_ID_JIELI_SDK_4155 0x4155#endif
drivers/hid/hid-quirks.c +12 -1
@@ -900,7 +900,6 @@ static const struct hid_device_id hid_ignore_list[] = {#endif { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) }, { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_HP_5MP_CAMERA_5473) }, - { HID_USB_DEVICE(USB_VENDOR_ID_SMARTLINKTECHNOLOGY, USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155) }, { } };
@@ -1057,6 +1056,18 @@ bool hid_ignore(struct hid_device *hdev) strlen(elan_acpi_id[i].id)))return true;break ; +case USB_VENDOR_ID_JIELI_SDK_DEFAULT : +/* +* Multiple USB devices with identical IDs (mic & touchscreen). +* The touch screen requires hid core processing, but the +* microphone does not. They can be distinguished by manufacturer +* and serial number. +*/ +if (hdev->product ==USB_DEVICE_ID_JIELI_SDK_4155 && +strncmp (hdev->name,"SmartlinkTechnology" ,19 ) ==0 && +strncmp (hdev->uniq,"20201111000001" ,14 ) ==0 ) +return true; +break ; } if (hdev->type == HID_TYPE_USBMOUSE &&
drivers/infiniband/hw/irdma/Kconfig +3 -4
@@ -4,10 +4,9 @@ config INFINIBAND_IRDMA depends on INET depends on IPV6 || !IPV6 depends on PCI - depends on IDPF && ICE && I40E + depends on ICE && I40E select GENERIC_ALLOCATOR select AUXILIARY_BUS help - This is an Intel(R) Ethernet Protocol Driver for RDMA that - supports IPU E2000 (RoCEv2), E810 (iWARP/RoCEv2) and X722 (iWARP) - network devices. + This is an Intel(R) Ethernet Protocol Driver for RDMA driver + that support E810 (iWARP/RoCE) and X722 (iWARP) network devices.
drivers/input/keyboard/cros_ec_keyb.c +6 -0
@@ -261,6 +261,12 @@ static int cros_ec_keyb_work(struct notifier_block *nb,case EC_MKBP_EVENT_KEY_MATRIX :pm_wakeup_event (ckdev->dev,0 ); +if (!ckdev->idev) { +dev_warn_once (ckdev->dev, +"Unexpected key matrix event\n" ); +return NOTIFY_OK ; + } +if (ckdev->ec->event_size != ckdev->cols) {dev_err (ckdev->dev,"Discarded incomplete key matrix event.\n" );
drivers/input/keyboard/imx_sc_key.c +1 -1
@@ -158,7 +158,7 @@ static int imx_sc_key_probe(struct platform_device *pdev)return error; } - error =devm_add_action_or_reset (&pdev->dev, imx_sc_key_action, &priv); + error =devm_add_action_or_reset (&pdev->dev, imx_sc_key_action, priv);if (error)return error;
drivers/input/tablet/pegasus_notetaker.c +9 -0
@@ -63,6 +63,9 @@#define BUTTON_PRESSED 0xb5#define COMMAND_VERSION 0xa9 +/* 1 Status + 1 Color + 2 X + 2 Y = 6 bytes */ +#define NOTETAKER_PACKET_SIZE 6 +/* in xy data packet */ #define BATTERY_NO_REPORT 0x40#define BATTERY_LOW 0x41
@@ -303,6 +306,12 @@ static int pegasus_probe(struct usb_interface *intf, } pegasus->data_len =usb_maxpacket (dev, pipe); +if (pegasus->data_len <NOTETAKER_PACKET_SIZE ) { +dev_err (&intf->dev,"packet size is too small (%d)\n" , + pegasus->data_len); + error = -EINVAL ; + goto err_free_mem; + } pegasus->data =usb_alloc_coherent (dev, pegasus->data_len,GFP_KERNEL , &pegasus->data_dma);
drivers/input/touchscreen/goodix.c +1 -0
@@ -1519,6 +1519,7 @@ MODULE_DEVICE_TABLE(i2c, goodix_ts_id);static const struct acpi_device_id goodix_acpi_match[] = { {"GDIX1001" ,0 }, {"GDIX1002" ,0 }, + {"GDIX1003" ,0 }, {"GDX9110" ,0 }, { } };
drivers/mtd/mtdchar.c +4 -2
@@ -599,6 +599,7 @@ mtdchar_write_ioctl(struct mtd_info *mtd, struct mtd_write_req __user *argp)uint8_t *datbuf =NULL , *oobbuf =NULL ;size_t datbuf_len, oobbuf_len;int ret =0 ; +u64 end;if (copy_from_user (&req, argp,sizeof (req)))return -EFAULT ;
@@ -618,7 +619,7 @@ mtdchar_write_ioctl(struct mtd_info *mtd, struct mtd_write_req __user *argp) req.len &=0xffffffff ; req.ooblen &=0xffffffff ; -if (req.start + req.len > mtd->size) +if (check_add_overflow (req.start, req.len, &end) || end > mtd->size)return -EINVAL ; datbuf_len =min_t (size_t, req.len, mtd->erasesize);
@@ -698,6 +699,7 @@ mtdchar_read_ioctl(struct mtd_info *mtd, struct mtd_read_req __user *argp)size_t datbuf_len, oobbuf_len;size_t orig_len, orig_ooblen;int ret =0 ; +u64 end;if (copy_from_user (&req, argp,sizeof (req)))return -EFAULT ;
@@ -724,7 +726,7 @@ mtdchar_read_ioctl(struct mtd_info *mtd, struct mtd_read_req __user *argp) req.len &=0xffffffff ; req.ooblen &=0xffffffff ; -if (req.start + req.len > mtd->size) { +if (check_add_overflow (req.start, req.len, &end) || end > mtd->size) { ret = -EINVAL ; goto out; }
drivers/mtd/nand/raw/cadence-nand-controller.c +2 -1
@@ -2871,7 +2871,7 @@ cadence_nand_irq_cleanup(int irqnum, struct cdns_nand_ctrl *cdns_ctrl)static int cadence_nand_init (struct cdns_nand_ctrl *cdns_ctrl) {dma_cap_mask_t mask; -struct dma_device *dma_dev = cdns_ctrl->dmac->device; +struct dma_device *dma_dev;int ret; cdns_ctrl->cdma_desc = dma_alloc_coherent(cdns_ctrl->dev,
@@ -2915,6 +2915,7 @@ static int cadence_nand_init(struct cdns_nand_ctrl *cdns_ctrl) } } + dma_dev = cdns_ctrl->dmac->device; cdns_ctrl->io.iova_dma =dma_map_resource (dma_dev->dev, cdns_ctrl->io.dma, cdns_ctrl->io.size,DMA_BIDIRECTIONAL ,0 );
drivers/net/dsa/hirschmann/hellcreek_ptp.c +12 -2
@@ -376,8 +376,18 @@ static int hellcreek_led_setup(struct hellcreek *hellcreek)hellcreek_set_brightness (hellcreek,STATUS_OUT_IS_GM ,1 );/* Register both leds */ -led_classdev_register (hellcreek->dev, &hellcreek->led_sync_good); -led_classdev_register (hellcreek->dev, &hellcreek->led_is_gm); + ret =led_classdev_register (hellcreek->dev, &hellcreek->led_sync_good); +if (ret) { +dev_err (hellcreek->dev,"Failed to register sync_good LED\n" ); + goto out; + } + + ret =led_classdev_register (hellcreek->dev, &hellcreek->led_is_gm); +if (ret) { +dev_err (hellcreek->dev,"Failed to register is_gm LED\n" ); +led_classdev_unregister (&hellcreek->led_sync_good); + goto out; + } ret =0 ;
drivers/net/dsa/microchip/lan937x_main.c +1 -0
@@ -339,6 +339,7 @@ static void lan937x_set_tune_adj(struct ksz_device *dev, int port,ksz_pread16 (dev, port, reg, &data16);/* Update tune Adjust */ + data16 &= ~PORT_TUNE_ADJ ; data16 |=FIELD_PREP (PORT_TUNE_ADJ , val);ksz_pwrite16 (dev, port, reg, data16);
drivers/net/ethernet/emulex/benet/be_main.c +4 -3
@@ -1296,7 +1296,8 @@ static void be_xmit_flush(struct be_adapter *adapter, struct be_tx_obj *txo) (adapter->bmc_filt_mask & BMC_FILT_MULTICAST)static bool be_send_pkt_to_bmc (struct be_adapter *adapter, -struct sk_buff **skb) +struct sk_buff **skb, +struct be_wrb_params *wrb_params) {struct ethhdr *eh = (struct ethhdr *)(*skb)->data;bool os2bmc = false;
@@ -1360,7 +1361,7 @@ static bool be_send_pkt_to_bmc(struct be_adapter *adapter,* to BMC, asic expects the vlan to be inline in the packet. */ if (os2bmc) - *skb =be_insert_vlan_in_pkt (adapter, *skb,NULL ); + *skb =be_insert_vlan_in_pkt (adapter, *skb, wrb_params);return os2bmc; }
@@ -1387,7 +1388,7 @@ static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)/* if os2bmc is enabled and if the pkt is destined to bmc, * enqueue the pkt a 2nd time with mgmt bit set. */ -if (be_send_pkt_to_bmc (adapter, &skb)) { +if (be_send_pkt_to_bmc (adapter, &skb, &wrb_params)) {BE_WRB_F_SET (wrb_params.features,OS2BMC ,1 ); wrb_cnt =be_xmit_enqueue (adapter, txo, skb, &wrb_params);if (unlikely (!wrb_cnt))
drivers/net/ethernet/intel/ice/ice_ptp.c +19 -3
@@ -3409,7 +3409,7 @@ void ice_ptp_init(struct ice_pf *pf) err =ice_ptp_init_port (pf, &ptp->port);if (err) - goto err_exit; + goto err_clean_pf;/* Start the PHY timestamping block */ ice_ptp_reset_phy_timestamping (pf);
@@ -3426,13 +3426,19 @@ void ice_ptp_init(struct ice_pf *pf)dev_info (ice_pf_to_dev (pf),"PTP init successful\n" );return ; +err_clean_pf: +mutex_destroy (&ptp->port.ps_lock); +ice_ptp_cleanup_pf (pf); err_exit:/* If we registered a PTP clock, release it */ if (pf->ptp.clock) {ptp_clock_unregister (ptp->clock); pf->ptp.clock =NULL ; } - ptp->state =ICE_PTP_ERROR ; +/* Keep ICE_PTP_UNINIT state to avoid ambiguity at driver unload +* and to avoid duplicated resources release. +*/ + ptp->state =ICE_PTP_UNINIT ;dev_err (ice_pf_to_dev (pf),"PTP failed %d\n" , err); }
@@ -3445,9 +3451,19 @@ void ice_ptp_init(struct ice_pf *pf)*/ void ice_ptp_release (struct ice_pf *pf) { -if (pf->ptp.state !=ICE_PTP_READY ) +if (pf->ptp.state ==ICE_PTP_UNINIT )return ; +if (pf->ptp.state !=ICE_PTP_READY ) { +mutex_destroy (&pf->ptp.port.ps_lock); +ice_ptp_cleanup_pf (pf); +if (pf->ptp.clock) { +ptp_clock_unregister (pf->ptp.clock); + pf->ptp.clock =NULL ; + } +return ; + } + pf->ptp.state =ICE_PTP_UNINIT ;/* Disable timestamping for both Tx and Rx */
drivers/net/ethernet/intel/idpf/idpf_main.c +2 -0
@@ -62,6 +62,8 @@ static void idpf_remove(struct pci_dev *pdev)destroy_workqueue (adapter->vc_event_wq);for (i =0 ; i < adapter->max_vports; i++) { +if (!adapter->vport_config[i]) +continue ;kfree (adapter->vport_config[i]->user_config.q_coalesce);kfree (adapter->vport_config[i]); adapter->vport_config[i] =NULL ;
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c +7 -2
@@ -425,12 +425,14 @@ void mlx5e_ktls_handle_get_psv_completion(struct mlx5e_icosq_wqe_info *wi, {struct mlx5e_ktls_rx_resync_buf *buf = wi->tls_get_params.buf;struct mlx5e_ktls_offload_context_rx *priv_rx; +struct tls_offload_context_rx *rx_ctx;u8 tracker_state, auth_state, *ctx;struct device *dev;u32 hw_seq; priv_rx = buf->priv_rx; dev =mlx5_core_dma_dev (sq->channel->mdev); + rx_ctx =tls_offload_ctx_rx (tls_get_ctx (priv_rx->sk));if (unlikely (test_bit (MLX5E_PRIV_RX_FLAG_DELETING , priv_rx->flags))) goto out;
@@ -447,7 +449,8 @@ void mlx5e_ktls_handle_get_psv_completion(struct mlx5e_icosq_wqe_info *wi, } hw_seq =MLX5_GET (tls_progress_params, ctx, hw_resync_tcp_sn); -tls_offload_rx_resync_async_request_end (priv_rx->sk,cpu_to_be32 (hw_seq)); +tls_offload_rx_resync_async_request_end (rx_ctx->resync_async, +cpu_to_be32 (hw_seq)); priv_rx->rq_stats->tls_resync_req_end++; out:mlx5e_ktls_priv_rx_put (priv_rx);
@@ -482,6 +485,7 @@ static bool resync_queue_get_psv(struct sock *sk)static void resync_update_sn (struct mlx5e_rq *rq,struct sk_buff *skb) {struct ethhdr *eth = (struct ethhdr *)(skb->data); +struct tls_offload_resync_async *resync_async;struct net_device *netdev = rq->netdev;struct net *net =dev_net (netdev);struct sock *sk =NULL ;
@@ -528,7 +532,8 @@ static void resync_update_sn(struct mlx5e_rq *rq, struct sk_buff *skb) seq = th->seq; datalen = skb->len - depth; -tls_offload_rx_resync_async_request_start (sk, seq, datalen); + resync_async =tls_offload_ctx_rx (tls_get_ctx (sk))->resync_async; +tls_offload_rx_resync_async_request_start (resync_async, seq, datalen); rq->stats->tls_resync_req_start++; unref:
drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c +2 -4
@@ -324,10 +324,8 @@ struct mlx5_irq *mlx5_irq_alloc(struct mlx5_irq_pool *pool, int i,free_irq (irq->map.virq, &irq->nh); err_req_irq:#ifdef CONFIG_RFS_ACCEL -if (i && rmap && *rmap) { -free_irq_cpu_rmap (*rmap); - *rmap =NULL ; - } +if (i && rmap && *rmap) +irq_cpu_rmap_remove (*rmap, irq->map.virq); err_irq_rmap:#endif if (i &&pci_msix_can_alloc_dyn (dev->pdev))
drivers/net/ethernet/mellanox/mlxsw/core_linecards.c +2 -0
@@ -601,6 +601,8 @@ int mlxsw_linecard_devlink_info_get(struct mlxsw_linecard *linecard, err =devlink_info_version_fixed_put (req,DEVLINK_INFO_VERSION_GENERIC_FW_PSID , info->psid); +if (err) + goto unlock;sprintf (buf,"%u.%u.%u" , info->fw_major, info->fw_minor, info->fw_sub_minor);
drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c +4 -2
@@ -820,8 +820,10 @@ int mlxsw_sp_flower_stats(struct mlxsw_sp *mlxsw_sp,return -EINVAL ; rule =mlxsw_sp_acl_rule_lookup (mlxsw_sp, ruleset, f->cookie); -if (!rule) -return -EINVAL ; +if (!rule) { + err = -EINVAL ; + goto err_rule_get_stats; + } err =mlxsw_sp_acl_rule_get_stats (mlxsw_sp, rule, &packets, &bytes, &drops, &lastuse, &used_hw_stats);
drivers/net/ethernet/qlogic/qede/qede_fp.c +3 -2
@@ -4,6 +4,7 @@* Copyright (c) 2019-2020 Marvell International Ltd. */ +#include <linux/array_size.h> #include <linux/netdevice.h> #include <linux/etherdevice.h> #include <linux/skbuff.h>
@@ -960,7 +961,7 @@ static inline void qede_tpa_cont(struct qede_dev *edev, {int i; -for (i =0 ; cqe->len_list[i]; i++) +for (i =0 ; cqe->len_list[i] && i <ARRAY_SIZE (cqe->len_list); i++)qede_fill_frag_skb (edev, rxq, cqe->tpa_agg_index,le16_to_cpu (cqe->len_list[i]));
@@ -985,7 +986,7 @@ static int qede_tpa_end(struct qede_dev *edev,dma_unmap_page (rxq->dev, tpa_info->buffer.mapping,PAGE_SIZE , rxq->data_direction); -for (i =0 ; cqe->len_list[i]; i++) +for (i =0 ; cqe->len_list[i] && i <ARRAY_SIZE (cqe->len_list); i++)qede_fill_frag_skb (edev, rxq, cqe->tpa_agg_index,le16_to_cpu (cqe->len_list[i]));if (unlikely (i >1 ))
drivers/net/ethernet/ti/netcp_core.c +5 -5
@@ -1338,10 +1338,10 @@ int netcp_txpipe_open(struct netcp_tx_pipe *tx_pipe) tx_pipe->dma_channel =knav_dma_open_channel (dev, tx_pipe->dma_chan_name, &config); -if (IS_ERR (tx_pipe->dma_channel)) { +if (!tx_pipe->dma_channel) {dev_err (dev,"failed opening tx chan(%s)\n" , tx_pipe->dma_chan_name); - ret =PTR_ERR (tx_pipe->dma_channel); + ret = -EINVAL ; goto err; }
@@ -1359,7 +1359,7 @@ int netcp_txpipe_open(struct netcp_tx_pipe *tx_pipe)return 0 ; err: -if (!IS_ERR_OR_NULL (tx_pipe->dma_channel)) +if (tx_pipe->dma_channel)knav_dma_close_channel (tx_pipe->dma_channel); tx_pipe->dma_channel =NULL ;return ret;
@@ -1678,10 +1678,10 @@ static int netcp_setup_navigator_resources(struct net_device *ndev) netcp->rx_channel =knav_dma_open_channel (netcp->netcp_device->device, netcp->dma_chan_name, &config); -if (IS_ERR (netcp->rx_channel)) { +if (!netcp->rx_channel) {dev_err (netcp->ndev_dev,"failed opening rx chan(%s\n" , netcp->dma_chan_name); - ret =PTR_ERR (netcp->rx_channel); + ret = -EINVAL ; goto fail; }
drivers/nvme/host/fc.c +8 -7
@@ -2349,17 +2349,11 @@ nvme_fc_ctrl_free(struct kref *ref) container_of(ref, struct nvme_fc_ctrl, ref);unsigned long flags; -if (ctrl->ctrl.tagset) -nvme_remove_io_tag_set (&ctrl->ctrl); -/* remove from rport list */ spin_lock_irqsave (&ctrl->rport->lock, flags);list_del (&ctrl->ctrl_list);spin_unlock_irqrestore (&ctrl->rport->lock, flags); -nvme_unquiesce_admin_queue (&ctrl->ctrl); -nvme_remove_admin_tag_set (&ctrl->ctrl); -kfree (ctrl->queues);put_device (ctrl->dev);
@@ -3253,13 +3247,20 @@ nvme_fc_delete_ctrl(struct nvme_ctrl *nctrl) {struct nvme_fc_ctrl *ctrl =to_fc_ctrl (nctrl); -cancel_work_sync (&ctrl->ioerr_work);cancel_delayed_work_sync (&ctrl->connect_work); +/* * kill the association on the link side. this will block * waiting for io to terminate */ nvme_fc_delete_association (ctrl); +cancel_work_sync (&ctrl->ioerr_work); + +if (ctrl->ctrl.tagset) +nvme_remove_io_tag_set (&ctrl->ctrl); + +nvme_unquiesce_admin_queue (&ctrl->ctrl); +nvme_remove_admin_tag_set (&ctrl->ctrl); } static void
drivers/nvme/host/multipath.c +1 -1
@@ -687,7 +687,7 @@ static void nvme_mpath_set_live(struct nvme_ns *ns)return ; }nvme_add_ns_head_cdev (head); -kblockd_schedule_work (&head->partition_scan_work); +queue_work (nvme_wq, &head->partition_scan_work); }mutex_lock (&head->lock);
drivers/perf/riscv_pmu_sbi.c +1 -1
@@ -1016,7 +1016,7 @@ static irqreturn_t pmu_sbi_ovf_handler(int irq, void *dev)/* compute hardware counter index */ hidx = info->csr -CSR_CYCLE ; -/* check if the corresponding bit is set in sscountovf or overflow mask in shmem */ +/* check if the corresponding bit is set in scountovf or overflow mask in shmem */ if (!(overflow &BIT (hidx)))continue ;
drivers/pinctrl/cirrus/pinctrl-cs42l43.c +19 -4
@@ -527,6 +527,11 @@ static int cs42l43_gpio_add_pin_ranges(struct gpio_chip *chip)return ret; } +static void cs42l43_fwnode_put (void *data) +{ +fwnode_handle_put (data); +} +static int cs42l43_pin_probe (struct platform_device *pdev) {struct cs42l43 *cs42l43 =dev_get_drvdata (pdev->dev.parent);
@@ -558,10 +563,20 @@ static int cs42l43_pin_probe(struct platform_device *pdev) priv->gpio_chip.ngpio =CS42L43_NUM_GPIOS ;if (is_of_node (fwnode)) { - fwnode =fwnode_get_named_child_node (fwnode,"pinctrl" ); - -if (fwnode && !fwnode->dev) - fwnode->dev = priv->dev; +struct fwnode_handle *child; + + child =fwnode_get_named_child_node (fwnode,"pinctrl" ); +if (child) { + ret =devm_add_action_or_reset (&pdev->dev, + cs42l43_fwnode_put, child); +if (ret) { +fwnode_handle_put (child); +return ret; + } +if (!child->dev) + child->dev = priv->dev; + fwnode = child; + } } priv->gpio_chip.fwnode = fwnode;
drivers/pinctrl/nxp/pinctrl-s32cc.c +2 -1
@@ -392,6 +392,7 @@ static int s32_pmx_gpio_request_enable(struct pinctrl_dev *pctldev, gpio_pin->pin_id = offset; gpio_pin->config = config; +INIT_LIST_HEAD (&gpio_pin->list);spin_lock_irqsave (&ipctl->gpio_configs_lock, flags);list_add (&gpio_pin->list, &ipctl->gpio_configs);
@@ -951,7 +952,7 @@ int s32_pinctrl_probe(struct platform_device *pdev,spin_lock_init (&ipctl->gpio_configs_lock); s32_pinctrl_desc = -devm_kmalloc (&pdev->dev,sizeof (*s32_pinctrl_desc),GFP_KERNEL ); +devm_kzalloc (&pdev->dev,sizeof (*s32_pinctrl_desc),GFP_KERNEL );if (!s32_pinctrl_desc)return -ENOMEM ;
drivers/pinctrl/realtek/Kconfig +1 -0
@@ -6,6 +6,7 @@ config PINCTRL_RTD default y select PINMUX select GENERIC_PINCONF + select REGMAP_MMIO config PINCTRL_RTD1619B tristate "Realtek DHC 1619B pin controller driver"
drivers/platform/x86/Kconfig +1 -0
@@ -726,6 +726,7 @@ config MSI_WMI config MSI_WMI_PLATFORM tristate "MSI WMI Platform features" depends on ACPI_WMI + depends on DMI depends on HWMON help Say Y here if you want to have support for WMI-based platform features
drivers/platform/x86/intel/speed_select_if/isst_if_mmio.c +2 -2
@@ -108,11 +108,11 @@ static int isst_if_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ret =pci_read_config_dword (pdev,0xD0 , &mmio_base);if (ret) -return ret; +return pcibios_err_to_errno (ret); ret =pci_read_config_dword (pdev,0xFC , &pcu_base);if (ret) -return ret; +return pcibios_err_to_errno (ret); pcu_base &=GENMASK (10 ,0 ); base_addr = (u64 )mmio_base <<23 | (u64 ) pcu_base <<12 ;
drivers/platform/x86/msi-wmi-platform.c +41 -2
61 lines not on this page · raw message
drivers/s390/net/ctcm_mpc.c +0 -1
@@ -700,7 +700,6 @@ static void mpc_rcvd_sweep_req(struct mpcg_info *mpcginfo) grp->sweep_req_pend_num--;ctcmpc_send_sweep_resp (ch); -kfree (mpcginfo);return ; }
drivers/scsi/hosts.c +3 -2
@@ -607,8 +607,9 @@ int scsi_host_busy(struct Scsi_Host *shost) {int cnt =0 ; -blk_mq_tagset_busy_iter (&shost->tag_set, - scsi_host_check_in_flight, &cnt); +if (shost->tag_set.ops) +blk_mq_tagset_busy_iter (&shost->tag_set, + scsi_host_check_in_flight, &cnt);return cnt; }EXPORT_SYMBOL (scsi_host_busy);
drivers/scsi/sg.c +9 -1
@@ -2210,9 +2210,17 @@ sg_remove_sfp_usercontext(struct work_struct *work)write_lock_irqsave (&sfp->rq_list_lock, iflags);while (!list_empty (&sfp->rq_list)) { srp =list_first_entry (&sfp->rq_list, Sg_request, entry); -sg_finish_rem_req (srp);list_del (&srp->entry); +write_unlock_irqrestore (&sfp->rq_list_lock, iflags); + +sg_finish_rem_req (srp); +/* +* sg_rq_end_io() uses srp->parentfp. Hence, only clear +* srp->parentfp after blk_mq_free_request() has been called. +*/ srp->parentfp =NULL ; + +write_lock_irqsave (&sfp->rq_list_lock, iflags); }write_unlock_irqrestore (&sfp->rq_list_lock, iflags);
drivers/soc/ti/knav_dma.c +7 -7
@@ -402,7 +402,7 @@ static int of_channel_match_helper(struct device_node *np, const char *name,* @name: slave channel name * @config: dma configuration parameters * -* Returns pointer to appropriate DMA channel on success or error. +* Return: Pointer to appropriate DMA channel on success or NULL on error. */ void *knav_dma_open_channel (struct device *dev,const char *name,struct knav_dma_cfg *config)
@@ -414,13 +414,13 @@ void *knav_dma_open_channel(struct device *dev, const char *name,if (!kdev) {pr_err ("keystone-navigator-dma driver not registered\n" ); -return (void *)-EINVAL ; +return NULL ; } chan_num =of_channel_match_helper (dev->of_node, name, &instance);if (chan_num <0 ) {dev_err (kdev->dev,"No DMA instance with name %s\n" , name); -return (void *)-EINVAL ; +return NULL ; } dev_dbg(kdev->dev, "initializing %s channel %d from DMA %s\n",
@@ -431,7 +431,7 @@ void *knav_dma_open_channel(struct device *dev, const char *name,if (config->direction !=DMA_MEM_TO_DEV && config->direction !=DMA_DEV_TO_MEM ) {dev_err (kdev->dev,"bad direction\n" ); -return (void *)-EINVAL ; +return NULL ; }/* Look for correct dma instance */
@@ -443,7 +443,7 @@ void *knav_dma_open_channel(struct device *dev, const char *name, }if (!dma) {dev_err (kdev->dev,"No DMA instance with name %s\n" , instance); -return (void *)-EINVAL ; +return NULL ; }/* Look for correct dma channel from dma instance */
@@ -463,14 +463,14 @@ void *knav_dma_open_channel(struct device *dev, const char *name,if (!chan) {dev_err (kdev->dev,"channel %d is not in DMA %s\n" , chan_num, instance); -return (void *)-EINVAL ; +return NULL ; }if (atomic_read (&chan->ref_count) >=1 ) {if (!check_config (chan, config)) {dev_err (kdev->dev,"channel %d config miss-match\n" , chan_num); -return (void *)-EINVAL ; +return NULL ; } }
drivers/target/loopback/tcm_loop.c +3 -0
@@ -893,6 +893,9 @@ static ssize_t tcm_loop_tpg_address_show(struct config_item *item, struct tcm_loop_tpg, tl_se_tpg);struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba; +if (!tl_hba->sh) +return -ENODEV ; +return snprintf (page,PAGE_SIZE ,"%d:0:%d\n" , tl_hba->sh->host_no, tl_tpg->tl_tpgt); }
drivers/tty/vt/vt_ioctl.c +3 -1
@@ -924,8 +924,10 @@ int vt_ioctl(struct tty_struct *tty,if (vc) {/* FIXME: review v tty lock */ ret =__vc_resize (vc_cons[i].d, cc, ll, true); -if (ret) +if (ret) { +console_unlock ();return ret; + } } }console_unlock ();
fs/exfat/super.c +4 -1
@@ -452,7 +452,10 @@ static int exfat_read_boot_sector(struct super_block *sb)struct exfat_sb_info *sbi =EXFAT_SB (sb);/* set block size to read super block */ -sb_min_blocksize (sb,512 ); +if (!sb_min_blocksize (sb,512 )) { +exfat_err (sb,"unable to set blocksize" ); +return -EINVAL ; + }/* read boot sector */ sbi->boot_bh =sb_bread (sb,0 );
fs/isofs/inode.c +5 -0
@@ -610,6 +610,11 @@ static int isofs_fill_super(struct super_block *s, struct fs_context *fc) goto out_freesbi; } opt->blocksize =sb_min_blocksize (s, opt->blocksize); +if (!opt->blocksize) { +printk (KERN_ERR +"ISOFS: unable to set blocksize\n" ); + goto out_freesbi; + } sbi->s_high_sierra =0 ;/* default is iso9660 */ sbi->s_session = opt->session;
fs/smb/client/cached_dir.c +39 -4
77 lines not on this page · raw message
fs/smb/client/cifsfs.c +1 -1
@@ -134,7 +134,7 @@ module_param(enable_oplocks, bool, 0644);MODULE_PARM_DESC (enable_oplocks,"Enable or disable oplocks. Default: y/Y/1" );module_param (enable_gcm_256, bool,0644 ); -MODULE_PARM_DESC (enable_gcm_256,"Enable requesting strongest (256 bit) GCM encryption. Default: y/Y/0" ); +MODULE_PARM_DESC (enable_gcm_256,"Enable requesting strongest (256 bit) GCM encryption. Default: y/Y/1" );module_param (require_gcm_256, bool,0644 );MODULE_PARM_DESC (require_gcm_256,"Require strongest (256 bit) GCM encryption. Default: n/N/0" );
fs/smb/client/fs_context.c +4 -0
@@ -1764,6 +1764,10 @@ static int smb3_fs_context_parse_param(struct fs_context *fc, ctx->password =NULL ;kfree_sensitive (ctx->password2); ctx->password2 =NULL ; +kfree (ctx->source); + ctx->source =NULL ; +kfree (fc->source); + fc->source =NULL ;return -EINVAL ; }
fs/xfs/scrub/symlink_repair.c +2 -2
@@ -184,8 +184,8 @@ xrep_symlink_salvage_inline( sc->ip->i_disk_size == 1 && old_target[0] == '?')return 0 ; - nr =min (XFS_SYMLINK_MAXLEN ,xfs_inode_data_fork_size (ip)); -strncpy (target_buf, ifp->if_data, nr); + nr =min (XFS_SYMLINK_MAXLEN , ifp->if_bytes); +memcpy (target_buf, ifp->if_data, nr);return nr; }
include/linux/ata.h +1 -0
@@ -566,6 +566,7 @@ struct ata_bmdma_prd {#define ata_id_has_ncq (id) ((id)[ATA_ID_SATA_CAPABILITY] & (1 << 8))#define ata_id_queue_depth (id) (((id)[ATA_ID_QUEUE_DEPTH] & 0x1f) + 1)#define ata_id_removable (id) ((id)[ATA_ID_CONFIG] & (1 << 7)) +#define ata_id_is_locked (id) (((id)[ATA_ID_DLF] & 0x7) == 0x7)#define ata_id_has_atapi_AN (id) \ ((((id)[ATA_ID_SATA_CAPABILITY] != 0x0000) && \ ((id)[ATA_ID_SATA_CAPABILITY] != 0xffff)) && \
include/net/tls.h +13 -12
@@ -448,25 +448,26 @@ static inline void tls_offload_rx_resync_request(struct sock *sk, __be32 seq)/* Log all TLS record header TCP sequences in [seq, seq+len] */ static inline void -tls_offload_rx_resync_async_request_start (struct sock *sk,__be32 seq,u16 len) +tls_offload_rx_resync_async_request_start (struct tls_offload_resync_async *resync_async, +__be32 seq,u16 len) { -struct tls_context *tls_ctx =tls_get_ctx (sk); -struct tls_offload_context_rx *rx_ctx =tls_offload_ctx_rx (tls_ctx); - -atomic64_set (&rx_ctx->resync_async->req, ((u64 )ntohl (seq) <<32 ) | +atomic64_set (&resync_async->req, ((u64 )ntohl (seq) <<32 ) | ((u64 )len <<16 ) |RESYNC_REQ |RESYNC_REQ_ASYNC ); - rx_ctx->resync_async->loglen =0 ; - rx_ctx->resync_async->rcd_delta =0 ; + resync_async->loglen =0 ; + resync_async->rcd_delta =0 ; }static inline void -tls_offload_rx_resync_async_request_end (struct sock *sk,__be32 seq) +tls_offload_rx_resync_async_request_end (struct tls_offload_resync_async *resync_async, +__be32 seq) { -struct tls_context *tls_ctx =tls_get_ctx (sk); -struct tls_offload_context_rx *rx_ctx =tls_offload_ctx_rx (tls_ctx); +atomic64_set (&resync_async->req, ((u64 )ntohl (seq) <<32 ) |RESYNC_REQ ); +} -atomic64_set (&rx_ctx->resync_async->req, - ((u64 )ntohl (seq) <<32 ) |RESYNC_REQ ); +static inline void +tls_offload_rx_resync_async_request_cancel (struct tls_offload_resync_async *resync_async) +{ +atomic64_set (&resync_async->req,0 ); } static inline void
include/net/xfrm.h +2 -1
@@ -472,7 +472,8 @@ static inline int xfrm_af2proto(unsigned int family)static inline const struct xfrm_mode *xfrm_ip2inner_mode (struct xfrm_state *x,int ipproto) { -if ((ipproto ==IPPROTO_IPIP && x->props.family ==AF_INET ) || +if ((x->sel.family !=AF_UNSPEC ) || + (ipproto ==IPPROTO_IPIP && x->props.family ==AF_INET ) || (ipproto ==IPPROTO_IPV6 && x->props.family ==AF_INET6 ))return &x->inner_mode;else
kernel/time/timer.c +4 -3
@@ -1505,10 +1505,11 @@ static int __try_to_del_timer_sync(struct timer_list *timer, bool shutdown) base =lock_timer_base (timer, &flags); -if (base->running_timer != timer) +if (base->running_timer != timer) { ret =detach_if_pending (timer, base, true); -if (shutdown) - timer->function =NULL ; +if (shutdown) + timer->function =NULL ; + }raw_spin_unlock_irqrestore (&base->lock, flags);
lib/maple_tree.c +16 -14
@@ -64,6 +64,8 @@#define CREATE_TRACE_POINTS #include <trace/events/maple_tree.h> +#define TP_FCT tracepoint_string(__func__) +#define MA_ROOT_PARENT 1/*
@@ -2949,7 +2951,7 @@ static inline void mas_rebalance(struct ma_state *mas,MA_STATE (l_mas, mas->tree, mas->index, mas->last);MA_STATE (r_mas, mas->tree, mas->index, mas->last); -trace_ma_op (__func__, mas); +trace_ma_op (TP_FCT , mas);/* * Rebalancing occurs if a node is insufficient. Data is rebalanced
@@ -3314,7 +3316,7 @@ static void mas_split(struct ma_state *mas, struct maple_big_node *b_node)MA_STATE (prev_l_mas, mas->tree, mas->index, mas->last);MA_STATE (prev_r_mas, mas->tree, mas->index, mas->last); -trace_ma_op (__func__, mas); +trace_ma_op (TP_FCT , mas); mas->depth =mas_mt_height (mas); mast.l = &l_mas;
@@ -3487,7 +3489,7 @@ static bool mas_is_span_wr(struct ma_wr_state *wr_mas)return false; } -trace_ma_write (__func__, wr_mas->mas, wr_mas->r_max, entry); +trace_ma_write (TP_FCT , wr_mas->mas, wr_mas->r_max, entry);return true; }
@@ -3721,7 +3723,7 @@ static noinline void mas_wr_spanning_store(struct ma_wr_state *wr_mas)* of data may happen. */ mas = wr_mas->mas; -trace_ma_op (__func__, mas); +trace_ma_op (TP_FCT , mas);if (unlikely (!mas->index && mas->last ==ULONG_MAX ))return mas_new_root (mas, wr_mas->entry);
@@ -3858,7 +3860,7 @@ static inline void mas_wr_node_store(struct ma_wr_state *wr_mas, }else {memcpy (wr_mas->node, newnode,sizeof (struct maple_node )); } -trace_ma_write (__func__, mas,0 , wr_mas->entry); +trace_ma_write (TP_FCT , mas,0 , wr_mas->entry);mas_update_gap (mas); mas->end = new_end;return ;
@@ -3903,7 +3905,7 @@ static inline void mas_wr_slot_store(struct ma_wr_state *wr_mas)return ; } -trace_ma_write (__func__, mas,0 , wr_mas->entry); +trace_ma_write (TP_FCT , mas,0 , wr_mas->entry);/* * Only update gap when the new entry is empty or there is an empty * entry in the original two ranges.
@@ -4024,7 +4026,7 @@ static inline void mas_wr_append(struct ma_wr_state *wr_mas,mas_update_gap (mas); mas->end = new_end; -trace_ma_write (__func__, mas, new_end, wr_mas->entry); +trace_ma_write (TP_FCT , mas, new_end, wr_mas->entry);return ; }
@@ -4038,7 +4040,7 @@ static void mas_wr_bnode(struct ma_wr_state *wr_mas) {struct maple_big_node b_node; -trace_ma_write (__func__, wr_mas->mas,0 , wr_mas->entry); +trace_ma_write (TP_FCT , wr_mas->mas,0 , wr_mas->entry);memset (&b_node,0 ,sizeof (struct maple_big_node ));mas_store_b_node (wr_mas, &b_node, wr_mas->offset_end);mas_commit_b_node (wr_mas, &b_node);
@@ -5418,7 +5420,7 @@ void *mas_store(struct ma_state *mas, void *entry)int request;MA_WR_STATE (wr_mas, mas, entry); -trace_ma_write (__func__, mas,0 , entry); +trace_ma_write (TP_FCT , mas,0 , entry);#ifdef CONFIG_DEBUG_MAPLE_TREE if (MAS_WARN_ON (mas, mas->index > mas->last))pr_err ("Error %lX > %lX %p\n" , mas->index, mas->last, entry);
@@ -5518,7 +5520,7 @@ void mas_store_prealloc(struct ma_state *mas, void *entry) } store: -trace_ma_write (__func__, mas,0 , entry); +trace_ma_write (TP_FCT , mas,0 , entry);mas_wr_store_entry (&wr_mas);MAS_WR_BUG_ON (&wr_mas,mas_is_err (mas));mas_destroy (mas);
@@ -6320,7 +6322,7 @@ void *mtree_load(struct maple_tree *mt, unsigned long index)MA_STATE (mas, mt, index, index);void *entry; -trace_ma_read (__func__, &mas); +trace_ma_read (TP_FCT , &mas);rcu_read_lock (); retry: entry =mas_start (&mas);
@@ -6363,7 +6365,7 @@ int mtree_store_range(struct maple_tree *mt, unsigned long index,MA_STATE (mas, mt, index, last);int ret =0 ; -trace_ma_write (__func__, &mas,0 , entry); +trace_ma_write (TP_FCT , &mas,0 , entry);if (WARN_ON_ONCE (xa_is_advanced (entry)))return -EINVAL ;
@@ -6586,7 +6588,7 @@ void *mtree_erase(struct maple_tree *mt, unsigned long index)void *entry =NULL ;MA_STATE (mas, mt, index, index); -trace_ma_op (__func__, &mas); +trace_ma_op (TP_FCT , &mas);mtree_lock (mt); entry =mas_erase (&mas);
@@ -6924,7 +6926,7 @@ void *mt_find(struct maple_tree *mt, unsigned long *index, unsigned long max)unsigned long copy = *index;#endif -trace_ma_read (__func__, &mas); +trace_ma_read (TP_FCT , &mas);if ((*index) > max)return NULL ;
mm/mempool.c +26 -6
@@ -68,10 +68,20 @@ static void check_element(mempool_t *pool, void *element) }else if (pool->free == mempool_free_pages) {/* Mempools backed by page allocator */ int order = (int )(long )pool->pool_data; -void *addr =kmap_local_page ((struct page *)element); -__check_element (pool, addr,1UL << (PAGE_SHIFT + order)); -kunmap_local (addr); +#ifdef CONFIG_HIGHMEM +for (int i =0 ; i < (1 << order); i++) { +struct page *page = (struct page *)element; +void *addr =kmap_local_page (page + i); + +__check_element (pool, addr,PAGE_SIZE ); +kunmap_local (addr); + } +#else +void *addr =page_address ((struct page *)element); + +__check_element (pool, addr,PAGE_SIZE << order); +#endif } }
@@ -97,10 +107,20 @@ static void poison_element(mempool_t *pool, void *element) } else if (pool->alloc == mempool_alloc_pages) {/* Mempools backed by page allocator */ int order = (int )(long )pool->pool_data; -void *addr =kmap_local_page ((struct page *)element); -__poison_element (addr,1UL << (PAGE_SHIFT + order)); -kunmap_local (addr); +#ifdef CONFIG_HIGHMEM +for (int i =0 ; i < (1 << order); i++) { +struct page *page = (struct page *)element; +void *addr =kmap_local_page (page + i); + +__poison_element (addr,PAGE_SIZE ); +kunmap_local (addr); + } +#else +void *addr =page_address ((struct page *)element); + +__poison_element (addr,PAGE_SIZE << order); +#endif } }#else /* CONFIG_SLUB_DEBUG_ON */
mm/shmem.c +7 -8
@@ -127,8 +127,7 @@ struct shmem_options {#define SHMEM_SEEN_INODES 2#define SHMEM_SEEN_HUGE 4#define SHMEM_SEEN_INUMS 8 -#define SHMEM_SEEN_NOSWAP 16 -#define SHMEM_SEEN_QUOTA 32 +#define SHMEM_SEEN_QUOTA 16 };#ifdef CONFIG_TRANSPARENT_HUGEPAGE
@@ -4330,7 +4329,6 @@ static int shmem_parse_one(struct fs_context *fc, struct fs_parameter *param) "Turning off swap in unprivileged tmpfs mounts unsupported"); } ctx->noswap = true; - ctx->seen |=SHMEM_SEEN_NOSWAP ;break ;case Opt_quota:if (fc->user_ns != &init_user_ns)
@@ -4480,14 +4478,15 @@ static int shmem_reconfigure(struct fs_context *fc) err ="Current inum too high to switch to 32-bit inums" ; goto out; } -if ((ctx->seen &SHMEM_SEEN_NOSWAP ) && ctx->noswap && !sbinfo->noswap) { + +/* +* "noswap" doesn't use fsparam_flag_no, i.e. there's no "swap" +* counterpart for (re-)enabling swap. +*/ +if (ctx->noswap && !sbinfo->noswap) { err ="Cannot disable swap on remount" ; goto out; } -if (!(ctx->seen &SHMEM_SEEN_NOSWAP ) && !ctx->noswap && sbinfo->noswap) { - err ="Cannot enable swap on remount if it was disabled on first mount" ; - goto out; - }if (ctx->seen &SHMEM_SEEN_QUOTA && !sb_any_quota_loaded (fc->root->d_sb)) {
net/devlink/rate.c +3 -1
@@ -701,13 +701,15 @@ void devl_rate_nodes_destroy(struct devlink *devlink)if (!devlink_rate->parent)continue ; -refcount_dec (&devlink_rate->parent->refcnt);if (devlink_rate_is_leaf (devlink_rate)) ops->rate_leaf_parent_set (devlink_rate,NULL , devlink_rate->priv,NULL ,NULL );else if (devlink_rate_is_node (devlink_rate)) ops->rate_node_parent_set (devlink_rate,NULL , devlink_rate->priv,NULL ,NULL ); + +refcount_dec (&devlink_rate->parent->refcnt); + devlink_rate->parent =NULL ; }list_for_each_entry_safe (devlink_rate, tmp, &devlink->rate_list, list) {if (devlink_rate_is_node (devlink_rate)) {
net/ipv4/esp4_offload.c +4 -2
@@ -122,8 +122,10 @@ static struct sk_buff *xfrm4_tunnel_gso_segment(struct xfrm_state *x, struct sk_buff *skb, netdev_features_t features) { -__be16 type = x->inner_mode.family ==AF_INET6 ?htons (ETH_P_IPV6 ) - :htons (ETH_P_IP ); +const struct xfrm_mode *inner_mode =xfrm_ip2inner_mode (x, +XFRM_MODE_SKB_CB (skb)->protocol); +__be16 type = inner_mode->family ==AF_INET6 ?htons (ETH_P_IPV6 ) + :htons (ETH_P_IP );return skb_eth_gso_segment (skb, features, type); }
net/ipv6/esp6_offload.c +4 -2
@@ -158,8 +158,10 @@ static struct sk_buff *xfrm6_tunnel_gso_segment(struct xfrm_state *x, struct sk_buff *skb, netdev_features_t features) { -__be16 type = x->inner_mode.family ==AF_INET ?htons (ETH_P_IP ) - :htons (ETH_P_IPV6 ); +const struct xfrm_mode *inner_mode =xfrm_ip2inner_mode (x, +XFRM_MODE_SKB_CB (skb)->protocol); +__be16 type = inner_mode->family ==AF_INET ?htons (ETH_P_IP ) + :htons (ETH_P_IPV6 );return skb_eth_gso_segment (skb, features, type); }
net/mptcp/options.c +53 -1
91 lines not on this page · raw message
net/mptcp/pm_netlink.c +13 -7
@@ -24,6 +24,7 @@ struct mptcp_pm_add_entry {u8 retrans_times;struct timer_list add_timer;struct mptcp_sock *sock; +struct rcu_head rcu; };struct pm_nl_pernet {
@@ -343,22 +344,27 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, {struct mptcp_pm_add_entry *entry;struct sock *sk = (struct sock *)msk; -struct timer_list *add_timer =NULL ; +bool stop_timer = false; + +rcu_read_lock ();spin_lock_bh (&msk->pm.lock); entry =mptcp_lookup_anno_list_by_saddr (msk, addr);if (entry && (!check_id || entry->addr.id == addr->id)) { entry->retrans_times =ADD_ADDR_RETRANS_MAX ; - add_timer = &entry->add_timer; + stop_timer = true; }if (!check_id && entry)list_del (&entry->list);spin_unlock_bh (&msk->pm.lock); -/* no lock, because sk_stop_timer_sync() is calling del_timer_sync() */ -if (add_timer) -sk_stop_timer_sync (sk, add_timer); +/* Note: entry might have been removed by another thread. +* We hold rcu_read_lock() to ensure it is not freed under us. +*/ +if (stop_timer) +sk_stop_timer_sync (sk, &entry->add_timer); +rcu_read_unlock ();return entry; }
@@ -414,7 +420,7 @@ void mptcp_pm_free_anno_list(struct mptcp_sock *msk)list_for_each_entry_safe (entry, tmp, &free_list, list) {sk_stop_timer_sync (sk, &entry->add_timer); -kfree (entry); +kfree_rcu (entry, rcu); } }
@@ -1525,7 +1531,7 @@ static bool remove_anno_list_by_saddr(struct mptcp_sock *msk, entry =mptcp_pm_del_add_timer (msk, addr, false);if (entry) { -kfree (entry); +kfree_rcu (entry, rcu);return true; }
net/mptcp/protocol.c +57 -27
167 lines not on this page · raw message
net/mptcp/protocol.h +2 -1
@@ -508,6 +508,7 @@ struct mptcp_subflow_context {u64 remote_key;u64 idsn;u64 map_seq; +u64 rcv_wnd_sent;u32 snd_isn;u32 token;u32 rel_write_seq;
@@ -967,7 +968,7 @@ static inline void mptcp_propagate_sndbuf(struct sock *sk, struct sock *ssk)local_bh_enable (); } -void mptcp_destroy_common (struct mptcp_sock *msk,unsigned int flags); +void mptcp_destroy_common (struct mptcp_sock *msk);#define MPTCP_TOKEN_MAX_RETRIES 4
net/mptcp/subflow.c +8 -0
@@ -2150,6 +2150,10 @@ void __init mptcp_subflow_init(void) tcp_prot_override = tcp_prot; tcp_prot_override.release_cb = tcp_release_cb_override; tcp_prot_override.diag_destroy = tcp_abort_override; +#ifdef CONFIG_BPF_SYSCALL +/* Disable sockmap processing for subflows */ + tcp_prot_override.psock_update_sk_prot =NULL ; +#endif #if IS_ENABLED (CONFIG_MPTCP_IPV6 )/* In struct mptcp_subflow_request_sock, we assume the TCP request sock
@@ -2186,6 +2190,10 @@ void __init mptcp_subflow_init(void) tcpv6_prot_override = tcpv6_prot; tcpv6_prot_override.release_cb = tcp_release_cb_override; tcpv6_prot_override.diag_destroy = tcp_abort_override; +#ifdef CONFIG_BPF_SYSCALL +/* Disable sockmap processing for subflows */ + tcpv6_prot_override.psock_update_sk_prot =NULL ; +#endif #endif mptcp_diag_subflow_init (&subflow_ulp_ops);
net/openvswitch/actions.c +1 -67
86 lines not on this page · raw message
net/openvswitch/flow_netlink.c +8 -56
105 lines not on this page · raw message
net/openvswitch/flow_netlink.h +0 -2
@@ -65,8 +65,6 @@ int ovs_nla_put_actions(const struct nlattr *attr,void ovs_nla_free_flow_actions (struct sw_flow_actions *);void ovs_nla_free_flow_actions_rcu (struct sw_flow_actions *); -int nsh_key_from_nlattr (const struct nlattr *attr,struct ovs_key_nsh *nsh, -struct ovs_key_nsh *nsh_mask);int nsh_hdr_from_nlattr (const struct nlattr *attr,struct nshhdr *nh,size_t size);
net/tls/tls_device.c +3 -1
@@ -721,8 +721,10 @@ tls_device_rx_resync_async(struct tls_offload_resync_async *resync_async,/* shouldn't get to wraparound: * too long in async stage, something bad happened */ -if (WARN_ON_ONCE (resync_async->rcd_delta ==USHRT_MAX )) +if (WARN_ON_ONCE (resync_async->rcd_delta ==USHRT_MAX )) { +tls_offload_rx_resync_async_request_cancel (resync_async);return false; + }/* asynchronous stage: log all headers seq such that * req_seq <= seq <= end_seq, and wait for real resync request
net/unix/af_unix.c +18 -18
@@ -2769,20 +2769,21 @@ static int unix_stream_read_skb(struct sock *sk, skb_read_actor_t recv_actor)static int unix_stream_read_generic (struct unix_stream_read_state *state,bool freezable) { -struct scm_cookie scm; +int noblock = state->flags &MSG_DONTWAIT ;struct socket *sock = state->socket; +struct msghdr *msg = state->msg;struct sock *sk = sock->sk; -struct unix_sock *u =unix_sk (sk); -int copied =0 ; +size_t size = state->size;int flags = state->flags; -int noblock = flags &MSG_DONTWAIT ;bool check_creds = false; -int target; +struct scm_cookie scm; +unsigned int last_len; +struct unix_sock *u; +int copied =0 ;int err =0 ;long timeo; +int target;int skip; -size_t size = state->size; -unsigned int last_len;if (unlikely (READ_ONCE (sk->sk_state) !=TCP_ESTABLISHED )) { err = -EINVAL ;
@@ -2802,6 +2803,9 @@ static int unix_stream_read_generic(struct unix_stream_read_state *state,memset (&scm,0 ,sizeof (scm)); + u =unix_sk (sk); + +redo:/* Lock the socket to prevent queue disordering * while sleeps in memcpy_tomsg */
@@ -2813,7 +2817,6 @@ static int unix_stream_read_generic(struct unix_stream_read_state *state,struct sk_buff *skb, *last;int chunk; -redo:unix_state_lock (sk);if (sock_flag (sk,SOCK_DEAD )) { err = -ECONNRESET ;
@@ -2863,7 +2866,6 @@ static int unix_stream_read_generic(struct unix_stream_read_state *state, goto out; } -mutex_lock (&u->iolock); goto redo; unlock:unix_state_unlock (sk);
@@ -2894,14 +2896,12 @@ static int unix_stream_read_generic(struct unix_stream_read_state *state, }/* Copy address just once */ -if (state->msg && state->msg->msg_name) { - DECLARE_SOCKADDR(struct sockaddr_un *, sunaddr, - state->msg->msg_name); -unix_copy_addr (state->msg, skb->sk); +if (msg && msg->msg_name) { + DECLARE_SOCKADDR(struct sockaddr_un *, sunaddr, msg->msg_name); -BPF_CGROUP_RUN_PROG_UNIX_RECVMSG_LOCK (sk, - state->msg->msg_name, - &state->msg->msg_namelen); +unix_copy_addr (msg, skb->sk); +BPF_CGROUP_RUN_PROG_UNIX_RECVMSG_LOCK (sk, msg->msg_name, + &msg->msg_namelen); sunaddr =NULL ; }
@@ -2959,8 +2959,8 @@ static int unix_stream_read_generic(struct unix_stream_read_state *state, }while (size);mutex_unlock (&u->iolock); -if (state->msg) -scm_recv_unix (sock, state->msg, &scm, flags); +if (msg) +scm_recv_unix (sock, msg, &scm, flags);else scm_destroy (&scm); out:
net/vmw_vsock/af_vsock.c +31 -9
@@ -1616,18 +1616,40 @@ static int vsock_connect(struct socket *sock, struct sockaddr *addr, timeout =schedule_timeout (timeout);lock_sock (sk); -if (signal_pending (current)) { - err =sock_intr_errno (timeout); - sk->sk_state = sk->sk_state ==TCP_ESTABLISHED ?TCP_CLOSING :TCP_CLOSE ; - sock->state =SS_UNCONNECTED ; -vsock_transport_cancel_pkt (vsk); -vsock_remove_connected (vsk); - goto out_wait; - }else if ((sk->sk_state !=TCP_ESTABLISHED ) && (timeout ==0 )) { - err = -ETIMEDOUT ; +/* Connection established. Whatever happens to socket once we +* release it, that's not connect()'s concern. No need to go +* into signal and timeout handling. Call it a day. +* +* Note that allowing to "reset" an already established socket +* here is racy and insecure. +*/ +if (sk->sk_state ==TCP_ESTABLISHED ) +break ; + +/* If connection was _not_ established and a signal/timeout came +* to be, we want the socket's state reset. User space may want +* to retry. +* +* sk_state != TCP_ESTABLISHED implies that socket is not on +* vsock_connected_table. We keep the binding and the transport +* assigned. +*/ +if (signal_pending (current) || timeout ==0 ) { + err = timeout ==0 ? -ETIMEDOUT :sock_intr_errno (timeout); + +/* Listener might have already responded with +* VIRTIO_VSOCK_OP_RESPONSE. Its handling expects our +* sk_state == TCP_SYN_SENT, which hereby we break. +* In such case VIRTIO_VSOCK_OP_RST will follow. +*/ sk->sk_state =TCP_CLOSE ; sock->state =SS_UNCONNECTED ; + +/* Try to cancel VIRTIO_VSOCK_OP_REQUEST skb sent out by +* transport->connect(). +*/ vsock_transport_cancel_pkt (vsk); + goto out_wait; }
net/xfrm/xfrm_output.c +5 -1
@@ -766,8 +766,12 @@ int xfrm_output(struct sock *sk, struct sk_buff *skb)/* Exclusive direct xmit for tunnel mode, as * some filtering or matching rules may apply * in transport mode. +* Locally generated packets also require +* the normal XFRM path for L2 header setup, +* as the hardware needs the L2 header to match +* for encryption, so skip direct output as well. */ -if (x->props.mode ==XFRM_MODE_TUNNEL ) +if (x->props.mode ==XFRM_MODE_TUNNEL && !skb->sk)return xfrm_dev_direct_output (sk, x, skb);return xfrm_output_resume (sk, skb,0 );
net/xfrm/xfrm_state.c +6 -2
@@ -2117,14 +2117,18 @@ int xfrm_state_update(struct xfrm_state *x) }if (x1->km.state ==XFRM_STATE_ACQ ) { -if (x->dir && x1->dir != x->dir) +if (x->dir && x1->dir != x->dir) { + to_put = x1; goto out; + }__xfrm_state_insert (x); x =NULL ; }else { -if (x1->dir != x->dir) +if (x1->dir != x->dir) { + to_put = x1; goto out; + } } err =0 ;
net/xfrm/xfrm_user.c +4 -1
@@ -893,8 +893,11 @@ static struct xfrm_state *xfrm_state_construct(struct net *net,if (attrs[XFRMA_SA_PCPU ]) { x->pcpu_num =nla_get_u32 (attrs[XFRMA_SA_PCPU ]); -if (x->pcpu_num >=num_possible_cpus ()) +if (x->pcpu_num >=num_possible_cpus ()) { + err = -ERANGE ; +NL_SET_ERR_MSG (extack,"pCPU number too big" ); goto error; + } } err =__xfrm_init_state (x, false, attrs[XFRMA_OFFLOAD_DEV ], extack);
scripts/kconfig/mconf.c +3 -0
@@ -12,6 +12,7 @@#include <errno.h> #include <fcntl.h> #include <limits.h> +#include <locale.h> #include <stdarg.h> #include <stdlib.h> #include <string.h>
@@ -931,6 +932,8 @@ int main(int ac, char **av)signal (SIGINT , sig_handler); +setlocale (LC_ALL ,"" ); +if (ac >1 &&strcmp (av[1 ],"-s" ) ==0 ) { silent =1 ;/* Silence conf_read() until the real callback is set up */
scripts/kconfig/nconf.c +3 -0
@@ -7,6 +7,7 @@#ifndef _GNU_SOURCE#define _GNU_SOURCE#endif +#include <locale.h> #include <string.h> #include <strings.h> #include <stdlib.h>
@@ -1478,6 +1479,8 @@ int main(int ac, char **av)int lines, columns;char *mode; +setlocale (LC_ALL ,"" ); +if (ac >1 &&strcmp (av[1 ],"-s" ) ==0 ) {/* Silence conf_read() until the real callback is set up */ conf_set_message_callback (NULL );
sound/usb/endpoint.c +2 -1
@@ -1389,7 +1389,8 @@ int snd_usb_endpoint_set_params(struct snd_usb_audio *chip,if (ep->packsize[1 ] > ep->maxpacksize) {usb_audio_dbg (chip,"Too small maxpacksize %u for rate %u / pps %u\n" , ep->maxpacksize, ep->cur_rate, ep->pps); -return -EINVAL ; + err = -EINVAL ; + goto unlock; }/* calculate the frequency in 16.16 format */
sound/usb/mixer.c +1 -1
@@ -930,7 +930,7 @@ static int parse_term_uac2_clock_source(struct mixer_build *state, {struct uac_clock_source_descriptor *d = p1; - term->type =UAC3_CLOCK_SOURCE <<16 ;/* virtual type */ + term->type =UAC2_CLOCK_SOURCE <<16 ;/* virtual type */ term->id = id; term->name = d->iClockSource;return 0 ;
tools/arch/riscv/include/asm/csr.h +3 -2
@@ -167,7 +167,8 @@#define VSIP_TO_HVIP_SHIFT (IRQ_VS_SOFT - IRQ_S_SOFT)#define VSIP_VALID_MASK ((_AC(1, UL) << IRQ_S_SOFT) | \ (_AC(1, UL) << IRQ_S_TIMER) | \ - (_AC(1, UL) << IRQ_S_EXT)) + (_AC(1, UL) << IRQ_S_EXT) | \ + (_AC(1, UL) << IRQ_PMU_OVF))/* AIA CSR bits */ #define TOPI_IID_SHIFT 16
@@ -280,7 +281,7 @@#define CSR_HPMCOUNTER30H 0xc9e#define CSR_HPMCOUNTER31H 0xc9f -#define CSR_SSCOUNTOVF 0xda0 +#define CSR_SCOUNTOVF 0xda0#define CSR_SSTATUS 0x100
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/lib_sh_test.sh +7 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_join.sh +9 -9
Lines of this file are not shown. View the raw message.
tools/tracing/latency/latency-collector.c +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.