Linux 5.10.165
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.165 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
------------
Documentation/devicetree/bindings/phy/amlogic,g12a-usb2-phy.yaml | 78 +++ Documentation/devicetree/bindings/phy/amlogic,g12a-usb3-pcie-phy.yaml | 59 ++ Documentation/devicetree/bindings/phy/amlogic,meson-g12a-usb2-phy.yaml | 78 --- Documentation/devicetree/bindings/phy/amlogic,meson-g12a-usb3-pcie-phy.yaml | 59 -- Makefile | 2 arch/arm64/include/asm/efi.h | 3 arch/arm64/kernel/efi-rt-wrapper.S | 14 arch/arm64/kernel/efi.c | 27 + arch/x86/kernel/fpu/init.c | 7 arch/x86/lib/iomap_copy_64.S | 2 drivers/bluetooth/hci_qca.c | 68 ++ drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 6 drivers/dma/tegra210-adma.c | 2 drivers/firmware/efi/runtime-wrappers.c | 1 drivers/firmware/google/gsmi.c | 7 drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 3 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 drivers/gpu/drm/amd/display/dc/core/dc_hw_sequencer.c | 4 drivers/gpu/drm/i915/gt/intel_reset.c | 34 + drivers/gpu/drm/i915/i915_pci.c | 3 drivers/infiniband/ulp/srp/ib_srp.h | 8 drivers/misc/fastrpc.c | 26 - drivers/misc/mei/hw-me-regs.h | 2 drivers/misc/mei/pci-me.c | 2 drivers/mmc/host/sdhci-esdhc-imx.c | 22 drivers/mmc/host/sunxi-mmc.c | 8 drivers/net/ethernet/mellanox/mlx5/core/health.c | 1 drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 2 drivers/soc/qcom/apr.c | 3 drivers/staging/comedi/drivers/adv_pci1760.c | 2 drivers/staging/vc04_services/include/linux/raspberrypi/vchiq.h | 2 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h | 4 drivers/thunderbolt/tunnel.c | 2 drivers/tty/serial/atmel_serial.c | 8 drivers/tty/serial/pch_uart.c | 2 drivers/tty/serial/qcom_geni_serial.c | 18 drivers/usb/core/hub.c | 13 drivers/usb/core/usb-acpi.c | 65 ++ drivers/usb/gadget/function/f_ncm.c | 4 drivers/usb/gadget/legacy/inode.c | 28 - drivers/usb/gadget/legacy/webcam.c | 3 drivers/usb/host/ehci-fsl.c | 2 drivers/usb/host/xhci-pci.c | 45 + drivers/usb/host/xhci-ring.c | 5 drivers/usb/host/xhci.c | 18 drivers/usb/host/xhci.h | 5 drivers/usb/misc/iowarrior.c | 2 drivers/usb/serial/cp210x.c | 1 drivers/usb/serial/option.c | 17 drivers/usb/storage/uas-detect.h | 13 drivers/usb/storage/unusual_uas.h | 7 drivers/usb/typec/altmodes/displayport.c | 22 fs/btrfs/extent-tree.c | 7 fs/btrfs/qgroup.c | 25 - fs/cifs/smb2pdu.c | 15 fs/f2fs/extent_cache.c | 3 fs/nfs/filelayout/filelayout.c | 8 fs/nilfs2/btree.c | 15 fs/zonefs/super.c | 22 include/linux/usb.h | 3 include/trace/events/btrfs.h | 2 include/trace/trace_events.h | 2 io_uring/io-wq.c | 2 io_uring/io_uring.c | 250 +++++++--- kernel/sys.c | 2 mm/khugepaged.c | 14 net/ethtool/ioctl.c | 3 net/ipv4/tcp_ulp.c | 2 net/mac80211/agg-tx.c | 6 net/mac80211/driver-ops.c | 3 net/mac80211/iface.c | 1 sound/pci/hda/patch_realtek.c | 30 - tools/testing/selftests/bpf/prog_tests/jeq_infer_not_null.c | 9 tools/testing/selftests/bpf/progs/jeq_infer_not_null_fail.c | 42 + tools/virtio/vringh_test.c | 2 75 files changed, 943 insertions(+), 352 deletions(-)
Abel Vesa (1):
misc: fastrpc: Don't remove map on creater_process and device_release
Alan Stern (1):
USB: gadgetfs: Fix race between mounting and unmounting
Alex Deucher (1):
Revert "drm/amdgpu: make display pinning more flexible (v2)"
Alexander Stein (1):
usb: host: ehci-fsl: Fix module alias
Alexander Usyskin (1):
mei: me: add meteor lake point M DID
Alexander Wetzel (1):
wifi: mac80211: sdata can be NULL during AMPDU start
Ali Mirghasemi (1):
USB: serial: option: add Quectel EC200U modem
Alviro Iskandar Setiawan (1):
io_uring: Clean up a false-positive warning from GCC 9.3.0
Ard Biesheuvel (2):
arm64: efi: Execute runtime services from a dedicated stack
efi: rt-wrapper: Add missing include
Arend van Spriel (1):
wifi: brcmfmac: fix regression for Broadcom PCIe wifi devices
Arnd Bergmann (1):
staging: vchiq_arm: fix enum vchiq_status return types
Chris Wilson (1):
drm/i915/gt: Reset twice
Damien Le Moal (1):
zonefs: Detect append writes at invalid locations
Daniel Scally (1):
usb: gadget: g_webcam: Send color matching descriptor per frame
Daniil Tatianin (1):
net/ethtool/ioctl: return -EOPNOTSUPP if we have no phy stats
Ding Hui (1):
efi: fix userspace infinite retry read efivars after EFI runtime services page fault
Duke Xin(辛安文) (5):
USB: serial: option: add Quectel EM05-G (GR) modem
USB: serial: option: add Quectel EM05-G (CS) modem
USB: serial: option: add Quectel EM05-G (RS) modem
USB: serial: option: add Quectel EM05CN (SG) modem
USB: serial: option: add Quectel EM05CN modem
Dylan Yudaken (4):
io_uring: fix async accept on O_NONBLOCK sockets
io_uring: remove duplicated calls to io_kiocb_ppos
io_uring: update kiocb->ki_pos at execution time
io_uring: do not recalculate ppos unnecessarily
Enzo Matsumiya (1):
cifs: do not include page data when checking signature
Eric Dumazet (1):
Revert "wifi: mac80211: fix memory leak in ieee80211_if_add()"
Filipe Manana (1):
btrfs: fix race between quota rescan and disable leading to NULL pointer deref
Flavio Suligoi (1):
usb: core: hub: disable autosuspend for TI TUSB8041
Greg Kroah-Hartman (3):
prlimit: do_prlimit needs to have a speculation check
USB: misc: iowarrior: fix up header size for USB_DEVICE_ID_CODEMERCS_IOW100 Linux 5.10.165
Haibo Chen (1):
mmc: sdhci-esdhc-imx: correct the tuning start tap and step setting
Hao Sun (1):
selftests/bpf: check null propagation only neither reg is PTR_TO_BTF_ID
Heiner Kallweit (2):
dt-bindings: phy: g12a-usb2-phy: fix compatible string documentation
dt-bindings: phy: g12a-usb3-pcie-phy: fix compatible string documentation
Hugh Dickins (1):
mm/khugepaged: fix collapse_pte_mapped_thp() to allow anon_vma
Ian Abbott (1):
comedi: adv_pci1760: Fix PWM instruction handling
Ilpo Järvinen (1):
serial: pch_uart: Pass correct sg to dma_unmap_sg()
Jaegeuk Kim (1):
f2fs: let's avoid panic if extent_tree is not created
Jens Axboe (11):
io_uring: don't gate task_work run on TIF_NOTIFY_SIGNAL
io_uring: ensure recv and recvmsg handle MSG_WAITALL correctly
io_uring: add flag for disabling provided buffer recycling
io_uring: support MSG_WAITALL for IORING_OP_SEND(MSG)
io_uring: allow re-poll if we made progress
io_uring: check for valid register opcode earlier
io_uring: ensure that cached task references are always put on exit io_uring/rw: defer fsnotify calls to task context
io_uring: io_kiocb_update_pos() should not touch file for non -1 offset io_uring/rw: ensure kiocb_end_write() is always called io_uring/rw: remove leftover debug statement
Jimmy Hu (1):
usb: xhci: Check endpoint is valid before dereferencing it
Jiri Slaby (SUSE) (1):
RDMA/srp: Move large values to a new enum for gcc13
Joshua Ashton (2):
drm/amd/display: Calculate output_color_space after pixel encoding adjustment drm/amd/display: Fix COLOR_SPACE_YCBCR2020_TYPE matrix
Juhyung Park (1):
usb-storage: apply IGNORE_UAS only for HIKSEMI MD202 on RTL9210
Khazhismel Kumykov (1):
gsmi: fix null-deref in gsmi_get_variable
Krzysztof Kozlowski (2):
Bluetooth: hci_qca: Fix driver shutdown on closed serdev
tty: serial: qcom-geni-serial: fix slab-out-of-bounds on RX FIFO buffer
Maciej Żenczykowski (1):
usb: gadget: f_ncm: fix potential NULL ptr deref in ncm_bitrate()
Mathias Nyman (5):
xhci: Fix null pointer dereference when host dies
xhci: Add update_hub_device override for PCI xHCI hosts
xhci: Add a flag to disable USB3 lpm on a xhci root port level.
usb: acpi: add helper to check port lpm capability using acpi _DSM
xhci: Detect lpm incapable xHC USB3 roothub ports from ACPI tables
Michael Adler (1):
USB: serial: cp210x: add SCALANCE LPE-9000 device id
Mika Westerberg (1):
thunderbolt: Use correct function to calculate maximum USB3 link rate
Mikulas Patocka (1):
x86/asm: Fix an assembler warning with current binutils
Mohan Kumar (1):
dmaengine: tegra210-adma: fix global intr clear
Naohiro Aota (1):
btrfs: fix trace event name typo for FLUSH_DELAYED_REFS
Ola Jeppsson (1):
misc: fastrpc: Fix use-after-free race condition for maps
Olga Kornievskaia (1):
pNFS/filelayout: Fix coalescing test for single DS
Paolo Abeni (1):
net/ulp: use consistent error code when blocking ULP
Pavel Begunkov (4):
io_uring: improve send/recv error handling
io_uring: lock overflowing for IOPOLL
io_uring: fix CQ waiting timeout handling
io_uring: fix double poll leak on repolling
Prashant Malani (2):
usb: typec: altmodes/displayport: Add pin assignment helper
usb: typec: altmodes/displayport: Fix pin assignment calculation
Qu Wenruo (1):
btrfs: always report error in run_one_delayed_ref()
Ricardo Cañuelo (1):
tools/virtio: initialize spinlocks in vring_test.c
Ricardo Ribalda (1):
xhci-pci: set the dma max_seg_size
Ryusuke Konishi (1):
nilfs2: fix general protection fault in nilfs_btree_insert()
Samuel Holland (1):
mmc: sunxi-mmc: Fix clock refcount imbalance during unbind
Sasa Dragic (1):
drm/i915: re-disable RC6p on Sandy Bridge
Shawn.Shao (1):
Add exception protection processing for vd in axi_chan_handle_err function
Stefan Metzmacher (1):
io_uring/net: fix fast_iov assignment in io_setup_async_msg()
Stephan Gerhold (1):
soc: qcom: apr: Make qcom,protection-domain optional again
Steven Rostedt (Google) (1):
tracing: Use alignof__(struct {type b;}) instead of offsetof()
Tobias Schramm (1):
serial: atmel: fix incorrect baudrate setup
Venkata Lakshmi Narayana Gubba (4):
Bluetooth: hci_qca: Wait for timeout during suspend
Bluetooth: hci_qca: Wait for SSR completion during suspend
Bluetooth: hci_qca: check for SSR triggered flag while suspend
Bluetooth: hci_qca: Fixed issue during suspend
Yang Yingliang (1):
net/mlx5: fix missing mutex_unlock in mlx5_fw_fatal_reporter_err_work()
YingChi Long (1):
x86/fpu: Use _Alignof to avoid undefined behavior in TYPE_ALIGN
Yuchi Yang (1):
ALSA: hda/realtek - Turn on power early
hongao (1):
drm/amd/display: Fix set scaling doesn's work
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/phy/amlogic,g12a-usb2-phy.yaml new file +78 -0
@@ -0,0 +1,78 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +# Copyright 2019 BayLibre, SAS +%YAML 1.2 +--- +$id: "http://devicetree.org/schemas/phy/amlogic,g12a-usb2-phy.yaml#" +$schema: "http://devicetree.org/meta-schemas/core.yaml#" + +title: Amlogic G12A USB2 PHY + +maintainers: + - Neil Armstrong <[email protected]> + +properties: + compatible: + enum: + - amlogic,g12a-usb2-phy + - amlogic,a1-usb2-phy + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + clock-names: + items: + - const: xtal + + resets: + maxItems: 1 + + reset-names: + items: + - const: phy + + "#phy-cells": + const: 0 + + phy-supply: + description: + Phandle to a regulator that provides power to the PHY. This + regulator will be managed during the PHY power on/off sequence. + +required: + - compatible + - reg + - clocks + - clock-names + - resets + - reset-names + - "#phy-cells" + +if: + properties: + compatible: + enum: + - amlogic,meson-a1-usb-ctrl + +then: + properties: + power-domains: + maxItems: 1 + required: + - power-domains + +additionalProperties: false + +examples: + - | + phy@36000 { + compatible = "amlogic,g12a-usb2-phy"; + reg = <0x36000 0x2000>; + clocks = <&xtal>; + clock-names = "xtal"; + resets = <&phy_reset>; + reset-names = "phy"; + #phy-cells = <0>; + };
Documentation/devicetree/bindings/phy/amlogic,g12a-usb3-pcie-phy.yaml new file +59 -0
59 lines not on this page · raw message
Documentation/devicetree/bindings/phy/amlogic,meson-g12a-usb2-phy.yaml deleted +0 -78
78 lines not on this page · raw message
Documentation/devicetree/bindings/phy/amlogic,meson-g12a-usb3-pcie-phy.yaml deleted +0 -59
59 lines not on this page · raw message
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 164 +SUBLEVEL = 165 EXTRAVERSION = NAME = Dare mighty things
arch/arm64/include/asm/efi.h +3 -0
@@ -25,6 +25,7 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md); ({ \efi_virtmap_load (); \__efi_fpsimd_begin (); \ +spin_lock (&efi_rt_lock); \ }) #define arch_efi_call_virt(p, f, args...) \
@@ -36,10 +37,12 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md);#define arch_efi_call_virt_teardown () \ ({ \ + spin_unlock(&efi_rt_lock); \ __efi_fpsimd_end(); \ efi_virtmap_unload(); \ }) +extern spinlock_t efi_rt_lock;efi_status_t __efi_rt_asm_wrapper (void *,const char *, ...);#define ARCH_EFI_IRQ_FLAGS_MASK (PSR_D_BIT | PSR_A_BIT | PSR_I_BIT | PSR_F_BIT)
arch/arm64/kernel/efi-rt-wrapper.S +13 -1
@@ -4,6 +4,7 @@ */ #include <linux/linkage.h> +#include <asm/assembler.h> SYM_FUNC_START(__efi_rt_asm_wrapper) stp x29, x30, [sp, #-32]!
@@ -16,6 +17,12 @@ SYM_FUNC_START(__efi_rt_asm_wrapper) */ stp x1, x18, [sp, #16] + ldr_l x16, efi_rt_stack_top + mov sp, x16 +#ifdef CONFIG_SHADOW_CALL_STACK + str x18, [sp, #-16]! +#endif + /* * We are lucky enough that no EFI runtime services take more than * 5 arguments, so all are passed in registers rather than via the
@@ -29,6 +36,7 @@ SYM_FUNC_START(__efi_rt_asm_wrapper) mov x4, x6 blr x8 + mov sp, x29 ldp x1, x2, [sp, #16] cmp x2, x18 ldp x29, x30, [sp], #32
@@ -42,6 +50,10 @@ SYM_FUNC_START(__efi_rt_asm_wrapper) * called with preemption disabled and a separate shadow stack is used * for interrupts. */ - mov x18, x2 +#ifdef CONFIG_SHADOW_CALL_STACK + ldr_l x18, efi_rt_stack_top + ldr x18, [x18, #-16] +#endif + b efi_handle_corrupted_x18 // tail call SYM_FUNC_END(__efi_rt_asm_wrapper)
arch/arm64/kernel/efi.c +27 -0
@@ -143,3 +143,30 @@ asmlinkage efi_status_t efi_handle_corrupted_x18(efi_status_t s, const char *f)pr_err_ratelimited (FW_BUG "register x18 corrupted by EFI %s\n" , f);return s; } + +DEFINE_SPINLOCK (efi_rt_lock); + +asmlinkage u64 *efi_rt_stack_top __ro_after_init; + +/* EFI requires 8 KiB of stack space for runtime services */ +static_assert (THREAD_SIZE >=SZ_8K ); + +static int __init arm64_efi_rt_init (void ) +{ +void *p; + +if (!efi_enabled (EFI_RUNTIME_SERVICES )) +return 0 ; + + p =__vmalloc_node (THREAD_SIZE ,THREAD_ALIGN ,GFP_KERNEL , +NUMA_NO_NODE , &&l); +l:if (!p) { +pr_warn ("Failed to allocate EFI runtime stack\n" ); +clear_bit (EFI_RUNTIME_SERVICES , &efi.flags); +return -ENOMEM ; + } + + efi_rt_stack_top = p +THREAD_SIZE ; +return 0 ; +} +core_initcall (arm64_efi_rt_init);
arch/x86/kernel/fpu/init.c +2 -5
@@ -138,9 +138,6 @@ static void __init fpu__init_system_generic(void)unsigned int fpu_kernel_xstate_size;EXPORT_SYMBOL_GPL (fpu_kernel_xstate_size); -/* Get alignment of the TYPE. */ -#define TYPE_ALIGN (TYPE ) offsetof(struct { char x; TYPE test; }, test) -/* * Enforce that 'MEMBER' is the last field of 'TYPE'. *
@@ -148,8 +145,8 @@ EXPORT_SYMBOL_GPL(fpu_kernel_xstate_size);* because that's how C aligns structs. */ #define CHECK_MEMBER_AT_END_OF (TYPE ,MEMBER ) \ - BUILD_BUG_ON(sizeof(TYPE) != ALIGN(offsetofend(TYPE, MEMBER), \ - TYPE_ALIGN(TYPE))) + BUILD_BUG_ON(sizeof(TYPE) != \ + ALIGN(offsetofend(TYPE, MEMBER), _Alignof(TYPE)))/* * We append the 'struct fpu' to the task_struct:
arch/x86/lib/iomap_copy_64.S +1 -1
@@ -10,6 +10,6 @@ */ SYM_FUNC_START(__iowrite32_copy) movl %edx,%ecx - rep movsd + rep movsl RET SYM_FUNC_END(__iowrite32_copy)
drivers/bluetooth/hci_qca.c +59 -9
165 lines not on this page · raw message
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +6 -0
@@ -551,6 +551,11 @@ static noinline void axi_chan_handle_err(struct axi_dma_chan *chan, u32 status)/* The bad descriptor currently is in the head of vc list */ vd =vchan_next_desc (&chan->vc); +if (!vd) { +dev_err (chan2dev (chan),"BUG: %s, IRQ with no descriptors\n" , +axi_chan_name (chan)); + goto out; + }/* Remove the completed descriptor from issued list */ list_del (&vd->node);
@@ -565,6 +570,7 @@ static noinline void axi_chan_handle_err(struct axi_dma_chan *chan, u32 status)/* Try to restart the controller */ axi_chan_start_first_queued (chan); +out:spin_unlock_irqrestore (&chan->vc.lock, flags); }
drivers/dma/tegra210-adma.c +1 -1
@@ -224,7 +224,7 @@ static int tegra_adma_init(struct tegra_adma *tdma)int ret;/* Clear any interrupts */ -tdma_write (tdma, tdma->cdata->global_int_clear,0x1 ); +tdma_write (tdma, tdma->cdata->ch_base_offset + tdma->cdata->global_int_clear,0x1 );/* Assert soft reset */ tdma_write (tdma,ADMA_GLOBAL_SOFT_RESET ,0x1 );
drivers/firmware/efi/runtime-wrappers.c +1 -0
@@ -62,6 +62,7 @@ struct efi_runtime_work efi_rts_work; \if (!efi_enabled (EFI_RUNTIME_SERVICES )) { \pr_warn_once ("EFI Runtime Services are disabled!\n" ); \ + efi_rts_work.status =EFI_DEVICE_ERROR ; \ goto exit; \ } \ \
drivers/firmware/google/gsmi.c +4 -3
@@ -360,9 +360,10 @@ static efi_status_t gsmi_get_variable(efi_char16_t *name,memcpy (data, gsmi_dev.data_buf->start, *data_size);/* All variables are have the following attributes */ - *attr =EFI_VARIABLE_NON_VOLATILE | -EFI_VARIABLE_BOOTSERVICE_ACCESS | -EFI_VARIABLE_RUNTIME_ACCESS ; +if (attr) + *attr =EFI_VARIABLE_NON_VOLATILE | +EFI_VARIABLE_BOOTSERVICE_ACCESS | +EFI_VARIABLE_RUNTIME_ACCESS ; }spin_unlock_irqrestore (&gsmi_dev.lock, flags);
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +1 -2
@@ -1531,8 +1531,7 @@ u64 amdgpu_bo_gpu_offset_no_check(struct amdgpu_bo *bo)uint32_t amdgpu_bo_get_preferred_pin_domain (struct amdgpu_device *adev,uint32_t domain) { -if ((domain == (AMDGPU_GEM_DOMAIN_VRAM |AMDGPU_GEM_DOMAIN_GTT )) && - ((adev->asic_type ==CHIP_CARRIZO ) || (adev->asic_type ==CHIP_STONEY ))) { +if (domain == (AMDGPU_GEM_DOMAIN_VRAM |AMDGPU_GEM_DOMAIN_GTT )) { domain =AMDGPU_GEM_DOMAIN_VRAM ;if (adev->gmc.real_vram_size <=AMDGPU_SG_THRESHOLD ) domain =AMDGPU_GEM_DOMAIN_GTT ;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +4 -4
@@ -4567,8 +4567,6 @@ static void fill_stream_properties_from_drm_display_mode( timing_out->pix_clk_100hz = mode_in->crtc_clock *10 ; timing_out->aspect_ratio =get_aspect_ratio (mode_in); - stream->output_color_space =get_output_color_space (timing_out); - stream->out_transfer_func->type =TF_TYPE_PREDEFINED ; stream->out_transfer_func->tf =TRANSFER_FUNCTION_SRGB ;if (stream->signal ==SIGNAL_TYPE_HDMI_TYPE_A ) {
@@ -4579,6 +4577,8 @@ static void fill_stream_properties_from_drm_display_mode(adjust_colour_depth_from_display_info (timing_out, info); } } + + stream->output_color_space =get_output_color_space (timing_out); } static void fill_audio_info(struct audio_info *audio_info,
@@ -8783,8 +8783,8 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, goto fail; } -if (dm_old_con_state->abm_level != - dm_new_con_state->abm_level) +if (dm_old_con_state->abm_level != dm_new_con_state->abm_level || + dm_old_con_state->scaling != dm_new_con_state->scaling) new_crtc_state->connectors_changed = true; }
drivers/gpu/drm/amd/display/dc/core/dc_hw_sequencer.c +2 -2
@@ -92,8 +92,8 @@ static const struct out_csc_color_matrix_type output_csc_matrix[] = { {0xE00 ,0xF349 ,0xFEB7 ,0x1000 ,0x6CE ,0x16E3 , 0x24F, 0x200, 0xFCCB, 0xF535, 0xE00, 0x1000} }, { COLOR_SPACE_YCBCR2020_TYPE, - { 0x1000, 0xF149, 0xFEB7, 0x0000, 0x0868, 0x15B2, - 0x01E6, 0x0000, 0xFB88, 0xF478, 0x1000, 0x0000} }, + { 0x1000, 0xF149, 0xFEB7, 0x1004, 0x0868, 0x15B2, + 0x01E6, 0x201, 0xFB88, 0xF478, 0x1000, 0x1004} }, { COLOR_SPACE_YCBCR709_BLACK_TYPE, { 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0200, 0x0000, 0x0000, 0x0000, 0x1000} },
drivers/gpu/drm/i915/gt/intel_reset.c +28 -6
@@ -289,6 +289,7 @@ static int ilk_do_reset(struct intel_gt *gt, intel_engine_mask_t engine_mask,static int gen6_hw_domain_reset (struct intel_gt *gt,u32 hw_domain_mask) {struct intel_uncore *uncore = gt->uncore; +int loops =2 ;int err;/*
@@ -296,18 +297,39 @@ static int gen6_hw_domain_reset(struct intel_gt *gt, u32 hw_domain_mask)* for fifo space for the write or forcewake the chip for * the read */ -intel_uncore_write_fw (uncore,GEN6_GDRST , hw_domain_mask); +do { +intel_uncore_write_fw (uncore,GEN6_GDRST , hw_domain_mask); -/* Wait for the device to ack the reset requests */ - err =__intel_wait_for_register_fw (uncore, -GEN6_GDRST , hw_domain_mask,0 , -500 ,0 , -NULL ); +/* +* Wait for the device to ack the reset requests. +* +* On some platforms, e.g. Jasperlake, we see that the +* engine register state is not cleared until shortly after +* GDRST reports completion, causing a failure as we try +* to immediately resume while the internal state is still +* in flux. If we immediately repeat the reset, the second +* reset appears to serialise with the first, and since +* it is a no-op, the registers should retain their reset +* value. However, there is still a concern that upon +* leaving the second reset, the internal engine state +* is still in flux and not ready for resuming. +*/ + err =__intel_wait_for_register_fw (uncore,GEN6_GDRST , + hw_domain_mask,0 , +2000 ,0 , +NULL ); + }while (err ==0 && --loops);if (err)drm_dbg (>->i915->drm,"Wait for 0x%08x engines reset failed\n" , hw_domain_mask); +/* +* As we have observed that the engine state is still volatile +* after GDRST is acked, impose a small delay to let everything settle. +*/ +udelay (50 ); +return err; }
drivers/gpu/drm/i915/i915_pci.c +2 -1
@@ -403,7 +403,8 @@ static const struct intel_device_info ilk_m_info = { .has_coherent_ggtt = true, \ .has_llc = 1, \ .has_rc6 = 1, \ - .has_rc6p = 1, \ +/* snb does support rc6p, but enabling it causes various issues */ \ + .has_rc6p = 0, \ .has_rps = true, \ .dma_mask_size = 40, \ .ppgtt_type = INTEL_PPGTT_ALIASING, \
drivers/infiniband/ulp/srp/ib_srp.h +5 -3
@@ -62,9 +62,6 @@ enum {SRP_DEFAULT_CMD_SQ_SIZE =SRP_DEFAULT_QUEUE_SIZE -SRP_RSP_SQ_SIZE -SRP_TSK_MGMT_SQ_SIZE , -SRP_TAG_NO_REQ = ~0U , -SRP_TAG_TSK_MGMT =1U <<31 , -SRP_MAX_PAGES_PER_MR =512 , SRP_MAX_ADD_CDB_LEN = 16,
@@ -79,6 +76,11 @@ enum { sizeof(struct srp_imm_buf), }; +enum { +SRP_TAG_NO_REQ = ~0U , +SRP_TAG_TSK_MGMT =BIT (31 ), +}; +enum srp_target_state {SRP_TARGET_SCANNING ,SRP_TARGET_LIVE ,
drivers/misc/fastrpc.c +14 -12
@@ -247,6 +247,13 @@ static void fastrpc_free_map(struct kref *ref)dma_buf_put (map->buf); } +if (map->fl) { +spin_lock (&map->fl->lock); +list_del (&map->node); +spin_unlock (&map->fl->lock); + map->fl =NULL ; + } +kfree (map); }
@@ -256,10 +263,12 @@ static void fastrpc_map_put(struct fastrpc_map *map)kref_put (&map->refcount, fastrpc_free_map); } -static void fastrpc_map_get (struct fastrpc_map *map) +static int fastrpc_map_get (struct fastrpc_map *map) { -if (map) -kref_get (&map->refcount); +if (!map) +return -ENOENT ; + +return kref_get_unless_zero (&map->refcount) ?0 : -ENOENT ; } static int fastrpc_map_find(struct fastrpc_user *fl, int fd,
@@ -1112,12 +1121,7 @@ static int fastrpc_init_create_process(struct fastrpc_user *fl, fl->init_mem =NULL ;fastrpc_buf_free (imem); err_alloc: -if (map) { -spin_lock (&fl->lock); -list_del (&map->node); -spin_unlock (&fl->lock); -fastrpc_map_put (map); - } +fastrpc_map_put (map); err:kfree (args);
@@ -1194,10 +1198,8 @@ static int fastrpc_device_release(struct inode *inode, struct file *file)fastrpc_context_put (ctx); } -list_for_each_entry_safe (map, m, &fl->maps, node) { -list_del (&map->node); +list_for_each_entry_safe (map, m, &fl->maps, node)fastrpc_map_put (map); - }list_for_each_entry_safe (buf, b, &fl->mmaps, node) {list_del (&buf->node);
drivers/misc/mei/hw-me-regs.h +2 -0
@@ -111,6 +111,8 @@#define MEI_DEV_ID_RPL_S 0x7A68/* Raptor Lake Point S */ +#define MEI_DEV_ID_MTL_M 0x7E70/* Meteor Lake Point M */ +/* * MEI HW Section */
drivers/misc/mei/pci-me.c +2 -0
@@ -117,6 +117,8 @@ static const struct pci_device_id mei_me_pci_tbl[] = { {MEI_PCI_DEVICE(MEI_DEV_ID_RPL_S, MEI_ME_PCH15_CFG)}, + {MEI_PCI_DEVICE(MEI_DEV_ID_MTL_M, MEI_ME_PCH15_CFG)}, +/* required last entry */ {0, } };
drivers/mmc/host/sdhci-esdhc-imx.c +15 -7
@@ -103,6 +103,7 @@#define ESDHC_TUNING_START_TAP_DEFAULT 0x1#define ESDHC_TUNING_START_TAP_MASK 0x7f#define ESDHC_TUNING_CMD_CRC_CHECK_DISABLE (1 << 7) +#define ESDHC_TUNING_STEP_DEFAULT 0x1#define ESDHC_TUNING_STEP_MASK 0x00070000#define ESDHC_TUNING_STEP_SHIFT 16
@@ -1300,7 +1301,7 @@ static void sdhci_esdhc_imx_hwinit(struct sdhci_host *host)struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host);struct pltfm_imx_data *imx_data =sdhci_pltfm_priv (pltfm_host);struct cqhci_host *cq_host = host->mmc->cqe_private; -int tmp; +u32 tmp;if (esdhc_is_usdhc (imx_data)) {/*
@@ -1353,17 +1354,24 @@ static void sdhci_esdhc_imx_hwinit(struct sdhci_host *host)if (imx_data->socdata->flags &ESDHC_FLAG_STD_TUNING ) { tmp =readl (host->ioaddr +ESDHC_TUNING_CTRL ); - tmp |=ESDHC_STD_TUNING_EN | -ESDHC_TUNING_START_TAP_DEFAULT ; -if (imx_data->boarddata.tuning_start_tap) { - tmp &= ~ESDHC_TUNING_START_TAP_MASK ; + tmp |=ESDHC_STD_TUNING_EN ; + +/* +* ROM code or bootloader may config the start tap +* and step, unmask them first. +*/ + tmp &= ~(ESDHC_TUNING_START_TAP_MASK |ESDHC_TUNING_STEP_MASK ); +if (imx_data->boarddata.tuning_start_tap) tmp |= imx_data->boarddata.tuning_start_tap; - } +else + tmp |=ESDHC_TUNING_START_TAP_DEFAULT ;if (imx_data->boarddata.tuning_step) { - tmp &= ~ESDHC_TUNING_STEP_MASK ; tmp |= imx_data->boarddata.tuning_step <<ESDHC_TUNING_STEP_SHIFT ; + }else { + tmp |=ESDHC_TUNING_STEP_DEFAULT + <<ESDHC_TUNING_STEP_SHIFT ; }/* Disable the CMD CRC check for tuning, if not, need to
drivers/mmc/host/sunxi-mmc.c +5 -3
@@ -1459,9 +1459,11 @@ static int sunxi_mmc_remove(struct platform_device *pdev)struct sunxi_mmc_host *host =mmc_priv (mmc);mmc_remove_host (mmc); -pm_runtime_force_suspend (&pdev->dev); -disable_irq (host->irq); -sunxi_mmc_disable (host); +pm_runtime_disable (&pdev->dev); +if (!pm_runtime_status_suspended (&pdev->dev)) { +disable_irq (host->irq); +sunxi_mmc_disable (host); + }dma_free_coherent (&pdev->dev,PAGE_SIZE , host->sg_cpu, host->sg_dma);mmc_free_host (mmc);
drivers/net/ethernet/mellanox/mlx5/core/health.c +1 -0
@@ -621,6 +621,7 @@ static void mlx5_fw_fatal_reporter_err_work(struct work_struct *work)mutex_lock (&dev->intf_state_mutex);if (test_bit (MLX5_DROP_NEW_HEALTH_WORK , &health->flags)) {mlx5_core_err (dev,"health works are not permitted at this stage\n" ); +mutex_unlock (&dev->intf_state_mutex);return ; }mutex_unlock (&dev->intf_state_mutex);
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +1 -1
@@ -1109,7 +1109,7 @@ static int brcmf_pcie_init_ringbuffers(struct brcmf_pciedev_info *devinfo)BRCMF_NROF_H2D_COMMON_MSGRINGS ; max_completionrings =BRCMF_NROF_D2H_COMMON_MSGRINGS ; } -if (max_flowrings >256 ) { +if (max_flowrings >512 ) {brcmf_err (bus,"invalid max_flowrings(%d)\n" , max_flowrings);return -EIO ; }
drivers/soc/qcom/apr.c +2 -1
@@ -319,9 +319,10 @@ static int apr_add_device(struct device *dev, struct device_node *np, goto out; } +/* Protection domain is optional, it does not exist on older platforms */ ret =of_property_read_string_index (np,"qcom,protection-domain" ,1 , &adev->service_path); -if (ret <0 ) { +if (ret <0 && ret != -EINVAL ) {dev_err (dev,"Failed to read second value of qcom,protection-domain\n" ); goto out; }
drivers/staging/comedi/drivers/adv_pci1760.c +1 -1
@@ -59,7 +59,7 @@#define PCI1760_CMD_CLR_IMB2 0x00/* Clears IMB2 */ #define PCI1760_CMD_SET_DO 0x01/* Set output state */ #define PCI1760_CMD_GET_DO 0x02/* Read output status */ -#define PCI1760_CMD_GET_STATUS 0x03/* Read current status */ +#define PCI1760_CMD_GET_STATUS 0x07/* Read current status */ #define PCI1760_CMD_GET_FW_VER 0x0e/* Read firmware version */ #define PCI1760_CMD_GET_HW_VER 0x0f/* Read hardware version */ #define PCI1760_CMD_SET_PWM_HI (x) (0x10 + (x) * 2)/* Set "hi" period */
drivers/staging/vc04_services/include/linux/raspberrypi/vchiq.h +1 -1
@@ -82,7 +82,7 @@ struct vchiq_service_params_kernel {struct vchiq_instance ; -extern enum vchiq_status vchiq_initialise (struct vchiq_instance **pinstance); +extern int vchiq_initialise (struct vchiq_instance **pinstance);extern enum vchiq_status vchiq_shutdown (struct vchiq_instance *instance);extern enum vchiq_status vchiq_connect (struct vchiq_instance *instance); extern enum vchiq_status vchiq_open_service(struct vchiq_instance *instance,
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h +2 -2
@@ -89,10 +89,10 @@ extern struct vchiq_arm_state* vchiq_platform_get_arm_state(struct vchiq_state *state); -extern enum vchiq_status +extern int vchiq_use_internal (struct vchiq_state *state,struct vchiq_service *service,enum USE_TYPE_E use_type); -extern enum vchiq_status +extern int vchiq_release_internal (struct vchiq_state *state,struct vchiq_service *service);
drivers/thunderbolt/tunnel.c +1 -1
@@ -956,7 +956,7 @@ static void tb_usb3_reclaim_available_bandwidth(struct tb_tunnel *tunnel,return ; }else if (!ret) {/* Use maximum link rate if the link valid is not set */ - ret =usb4_usb3_port_max_link_rate (tunnel->src_port); + ret =tb_usb3_max_link_rate (tunnel->dst_port, tunnel->src_port);if (ret <0 ) {tb_tunnel_warn (tunnel,"failed to read maximum link rate\n" );return ;
drivers/tty/serial/atmel_serial.c +1 -7
@@ -2633,13 +2633,7 @@ static void __init atmel_console_get_options(struct uart_port *port, int *baud,else if (mr ==ATMEL_US_PAR_ODD ) *parity ='o' ; -/* -* The serial core only rounds down when matching this to a -* supported baud rate. Make sure we don't end up slightly -* lower than one of those, as it would make us fall through -* to a much lower baud rate than we really want. -*/ - *baud = port->uartclk / (16 * (quot -1 )); + *baud = port->uartclk / (16 * quot); }static int __init atmel_console_setup (struct console *co,char *options)
drivers/tty/serial/pch_uart.c +1 -1
@@ -769,7 +769,7 @@ static void pch_dma_tx_complete(void *arg) } xmit->tail &=UART_XMIT_SIZE -1 ;async_tx_ack (priv->desc_tx); -dma_unmap_sg (port->dev, sg, priv->orig_nent,DMA_TO_DEVICE ); +dma_unmap_sg (port->dev, priv->sg_tx_p, priv->orig_nent,DMA_TO_DEVICE ); priv->tx_dma_use =0 ; priv->nent =0 ; priv->orig_nent =0 ;
drivers/tty/serial/qcom_geni_serial.c +16 -2
@@ -866,9 +866,10 @@ static irqreturn_t qcom_geni_serial_isr(int isr, void *dev)return IRQ_HANDLED ; } -static void get_tx_fifo_size (struct qcom_geni_serial_port *port) +static int setup_fifos (struct qcom_geni_serial_port *port) {struct uart_port *uport; +u32 old_rx_fifo_depth = port->rx_fifo_depth; uport = &port->uport; port->tx_fifo_depth =geni_se_get_tx_fifo_depth (&port->se);
@@ -876,6 +877,16 @@ static void get_tx_fifo_size(struct qcom_geni_serial_port *port) port->rx_fifo_depth =geni_se_get_rx_fifo_depth (&port->se); uport->fifosize = (port->tx_fifo_depth * port->tx_fifo_width) /BITS_PER_BYTE ; + +if (port->rx_fifo && (old_rx_fifo_depth != port->rx_fifo_depth) && port->rx_fifo_depth) { + port->rx_fifo =devm_krealloc (uport->dev, port->rx_fifo, + port->rx_fifo_depth *sizeof (u32), +GFP_KERNEL ); +if (!port->rx_fifo) +return -ENOMEM ; + } + +return 0 ; }
@@ -890,6 +901,7 @@ static int qcom_geni_serial_port_setup(struct uart_port *uport)u32 rxstale =DEFAULT_BITS_PER_CHAR *STALE_TIMEOUT ;u32 proto;u32 pin_swap; +int ret; proto =geni_se_read_proto (&port->se);if (proto !=GENI_SE_UART ) {
@@ -899,7 +911,9 @@ static int qcom_geni_serial_port_setup(struct uart_port *uport)qcom_geni_serial_stop_rx (uport); -get_tx_fifo_size (port); + ret =setup_fifos (port); +if (ret) +return ret;writel (rxstale, uport->membase +SE_UART_RX_STALE_CNT );
drivers/usb/core/hub.c +13 -0
@@ -42,6 +42,9 @@#define USB_PRODUCT_USB5534B 0x5534#define USB_VENDOR_CYPRESS 0x04b4#define USB_PRODUCT_CY7C65632 0x6570 +#define USB_VENDOR_TEXAS_INSTRUMENTS 0x0451 +#define USB_PRODUCT_TUSB8041_USB3 0x8140 +#define USB_PRODUCT_TUSB8041_USB2 0x8142#define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND 0x01#define HUB_QUIRK_DISABLE_AUTOSUSPEND 0x02
@@ -5715,6 +5718,16 @@ static const struct usb_device_id hub_id_table[] = { .idVendor = USB_VENDOR_GENESYS_LOGIC, .bInterfaceClass = USB_CLASS_HUB, .driver_info = HUB_QUIRK_CHECK_PORT_AUTOSUSPEND}, + { .match_flags = USB_DEVICE_ID_MATCH_VENDOR + | USB_DEVICE_ID_MATCH_PRODUCT, + .idVendor = USB_VENDOR_TEXAS_INSTRUMENTS, + .idProduct = USB_PRODUCT_TUSB8041_USB2, + .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND}, + { .match_flags = USB_DEVICE_ID_MATCH_VENDOR + | USB_DEVICE_ID_MATCH_PRODUCT, + .idVendor = USB_VENDOR_TEXAS_INSTRUMENTS, + .idProduct = USB_PRODUCT_TUSB8041_USB3, + .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND}, { .match_flags = USB_DEVICE_ID_MATCH_DEV_CLASS, .bDeviceClass = USB_CLASS_HUB}, { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,
drivers/usb/core/usb-acpi.c +65 -0
71 lines not on this page · raw message
drivers/usb/gadget/function/f_ncm.c +3 -1
@@ -85,7 +85,9 @@ static inline struct f_ncm *func_to_ncm(struct usb_function *f)/* peak (theoretical) bulk transfer rate in bits-per-second */ static inline unsigned ncm_bitrate (struct usb_gadget *g) { -if (gadget_is_superspeed (g) && g->speed >=USB_SPEED_SUPER_PLUS ) +if (!g) +return 0 ; +else if (gadget_is_superspeed (g) && g->speed >=USB_SPEED_SUPER_PLUS )return 4250000000U ;else if (gadget_is_superspeed (g) && g->speed ==USB_SPEED_SUPER )return 3750000000U ;
drivers/usb/gadget/legacy/inode.c +21 -7
@@ -229,6 +229,7 @@ static void put_ep (struct ep_data *data)*/ static const char *CHIP ; +static DEFINE_MUTEX (sb_mutex);/* Serialize superblock operations */ /*----------------------------------------------------------------------*/
@@ -2012,13 +2013,20 @@ gadgetfs_fill_super (struct super_block *sb, struct fs_context *fc) {struct inode *inode;struct dev_data *dev; +int rc; -if (the_device) -return -ESRCH ; +mutex_lock (&sb_mutex); + +if (the_device) { + rc = -ESRCH ; + goto Done; + }CHIP =usb_get_gadget_udc_name (); -if (!CHIP ) -return -ENODEV ; +if (!CHIP ) { + rc = -ENODEV ; + goto Done; + }/* superblock */ sb->s_blocksize =PAGE_SIZE ;
@@ -2055,13 +2063,17 @@ gadgetfs_fill_super (struct super_block *sb, struct fs_context *fc)* from binding to a controller. */ the_device = dev; -return 0 ; + rc =0 ; + goto Done; -Enomem: + Enomem:kfree (CHIP );CHIP =NULL ; + rc = -ENOMEM ; -return -ENOMEM ; + Done: +mutex_unlock (&sb_mutex); +return rc; }/* "mount -t gadgetfs path /dev/gadget" ends up here */
@@ -2083,6 +2095,7 @@ static int gadgetfs_init_fs_context(struct fs_context *fc)static void gadgetfs_kill_sb (struct super_block *sb) { +mutex_lock (&sb_mutex);kill_litter_super (sb);if (the_device) {put_dev (the_device);
@@ -2090,6 +2103,7 @@ gadgetfs_kill_sb (struct super_block *sb) }kfree (CHIP );CHIP =NULL ; +mutex_unlock (&sb_mutex); }/*----------------------------------------------------------------------*/
drivers/usb/gadget/legacy/webcam.c +3 -0
@@ -293,6 +293,7 @@ static const struct uvc_descriptor_header * const uvc_fs_streaming_cls[] = { (const struct uvc_descriptor_header *) &uvc_format_yuv, (const struct uvc_descriptor_header *) &uvc_frame_yuv_360p, (const struct uvc_descriptor_header *) &uvc_frame_yuv_720p, + (const struct uvc_descriptor_header *) &uvc_color_matching, (const struct uvc_descriptor_header *) &uvc_format_mjpg, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_360p, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_720p,
@@ -305,6 +306,7 @@ static const struct uvc_descriptor_header * const uvc_hs_streaming_cls[] = { (const struct uvc_descriptor_header *) &uvc_format_yuv, (const struct uvc_descriptor_header *) &uvc_frame_yuv_360p, (const struct uvc_descriptor_header *) &uvc_frame_yuv_720p, + (const struct uvc_descriptor_header *) &uvc_color_matching, (const struct uvc_descriptor_header *) &uvc_format_mjpg, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_360p, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_720p,
@@ -317,6 +319,7 @@ static const struct uvc_descriptor_header * const uvc_ss_streaming_cls[] = { (const struct uvc_descriptor_header *) &uvc_format_yuv, (const struct uvc_descriptor_header *) &uvc_frame_yuv_360p, (const struct uvc_descriptor_header *) &uvc_frame_yuv_720p, + (const struct uvc_descriptor_header *) &uvc_color_matching, (const struct uvc_descriptor_header *) &uvc_format_mjpg, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_360p, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_720p,
drivers/usb/host/ehci-fsl.c +1 -1
@@ -29,7 +29,7 @@#include "ehci-fsl.h" #define DRIVER_DESC "Freescale EHCI Host controller driver" -#define DRV_NAME "ehci-fsl" +#define DRV_NAME "fsl-ehci"static struct hc_driver __read_mostly fsl_ehci_hc_driver;
drivers/usb/host/xhci-pci.c +45 -0
74 lines not on this page · raw message
drivers/usb/host/xhci-ring.c +4 -1
@@ -1044,7 +1044,10 @@ static void xhci_kill_endpoint_urbs(struct xhci_hcd *xhci,struct xhci_virt_ep *ep;struct xhci_ring *ring; - ep = &xhci->devs[slot_id]->eps[ep_index]; + ep =xhci_get_virt_ep (xhci, slot_id, ep_index); +if (!ep) +return ; +if ((ep->ep_state &EP_HAS_STREAMS ) || (ep->ep_state &EP_GETTING_NO_STREAMS )) {int stream_id;
drivers/usb/host/xhci.c +17 -1
@@ -3919,6 +3919,7 @@ static void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)struct xhci_hcd *xhci =hcd_to_xhci (hcd);struct xhci_virt_device *virt_dev;struct xhci_slot_ctx *slot_ctx; +unsigned long flags;int i, ret;/*
@@ -3947,7 +3948,11 @@ static void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev) } virt_dev->udev =NULL ;xhci_disable_slot (xhci, udev->slot_id); + +spin_lock_irqsave (&xhci->lock, flags);xhci_free_virt_device (xhci, udev->slot_id); +spin_unlock_irqrestore (&xhci->lock, flags); + }int xhci_disable_slot (struct xhci_hcd *xhci,u32 slot_id)
@@ -5004,6 +5009,7 @@ static int xhci_enable_usb3_lpm_timeout(struct usb_hcd *hcd, struct usb_device *udev, enum usb3_link_state state) { struct xhci_hcd *xhci; +struct xhci_port *port;u16 hub_encoded_timeout;int mel;int ret;
@@ -5017,6 +5023,13 @@ static int xhci_enable_usb3_lpm_timeout(struct usb_hcd *hcd, !xhci->devs[udev->slot_id])return USB3_LPM_DISABLED ; +/* If connected to root port then check port can handle lpm */ +if (udev->parent && !udev->parent->parent) { + port = xhci->usb3_rhub.ports[udev->portnum -1 ]; +if (port->lpm_incapable) +return USB3_LPM_DISABLED ; + } + hub_encoded_timeout =xhci_calculate_lpm_timeout (hcd, udev, state); mel =calculate_max_exit_latency (udev, state, hub_encoded_timeout);if (mel <0 ) {
@@ -5076,7 +5089,7 @@ static int xhci_disable_usb3_lpm_timeout(struct usb_hcd *hcd,/* Once a hub descriptor is fetched for a device, we need to update the xHC's * internal data structures for the device. */ -static int xhci_update_hub_device (struct usb_hcd *hcd,struct usb_device *hdev, +int xhci_update_hub_device (struct usb_hcd *hcd,struct usb_device *hdev,struct usb_tt *tt,gfp_t mem_flags) {struct xhci_hcd *xhci =hcd_to_xhci (hcd);
@@ -5176,6 +5189,7 @@ static int xhci_update_hub_device(struct usb_hcd *hcd, struct usb_device *hdev,xhci_free_command (xhci, config_cmd);return ret; } +EXPORT_SYMBOL_GPL (xhci_update_hub_device);static int xhci_get_frame (struct usb_hcd *hcd) {
@@ -5446,6 +5460,8 @@ void xhci_init_driver(struct hc_driver *drv, drv->check_bandwidth = over->check_bandwidth;if (over->reset_bandwidth) drv->reset_bandwidth = over->reset_bandwidth; +if (over->update_hub_device) + drv->update_hub_device = over->update_hub_device; } }EXPORT_SYMBOL_GPL (xhci_init_driver);
drivers/usb/host/xhci.h +5 -0
@@ -1728,6 +1728,7 @@ struct xhci_port {int hcd_portnum;struct xhci_hub *rhub;struct xhci_port_cap *port_cap; + unsigned int lpm_incapable:1; };struct xhci_hub {
@@ -1933,6 +1934,8 @@ struct xhci_driver_overrides {int (*start)(struct usb_hcd *hcd);int (*check_bandwidth)(struct usb_hcd *,struct usb_device *);void (*reset_bandwidth)(struct usb_hcd *,struct usb_device *); +int (*update_hub_device)(struct usb_hcd *hcd,struct usb_device *hdev, +struct usb_tt *tt,gfp_t mem_flags); };#define XHCI_CFC_DELAY 10
@@ -2089,6 +2092,8 @@ void xhci_init_driver(struct hc_driver *drv, const struct xhci_driver_overrides *over);int xhci_check_bandwidth (struct usb_hcd *hcd,struct usb_device *udev);void xhci_reset_bandwidth (struct usb_hcd *hcd,struct usb_device *udev); +int xhci_update_hub_device (struct usb_hcd *hcd,struct usb_device *hdev, +struct usb_tt *tt,gfp_t mem_flags);int xhci_disable_slot (struct xhci_hcd *xhci,u32 slot_id);int xhci_ext_cap_init (struct xhci_hcd *xhci);
drivers/usb/misc/iowarrior.c +1 -1
@@ -817,7 +817,7 @@ static int iowarrior_probe(struct usb_interface *interface,break ;case USB_DEVICE_ID_CODEMERCS_IOW100 : - dev->report_size =13 ; + dev->report_size =12 ;break ; } }
drivers/usb/serial/cp210x.c +1 -0
@@ -64,6 +64,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */ { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */ { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */ + { USB_DEVICE(0x0908, 0x0070) }, /* Siemens SCALANCE LPE-9000 USB Serial Console */ { USB_DEVICE(0x0908, 0x01FF) }, /* Siemens RUGGEDCOM USB Serial Console */ { USB_DEVICE(0x0988, 0x0578) }, /* Teraoka AD2000 */ { USB_DEVICE(0x0B00, 0x3070) }, /* Ingenico 3070 */
drivers/usb/serial/option.c +17 -0
@@ -255,10 +255,16 @@ static void option_instat_callback(struct urb *urb);#define QUECTEL_PRODUCT_EP06 0x0306#define QUECTEL_PRODUCT_EM05G 0x030a#define QUECTEL_PRODUCT_EM060K 0x030b +#define QUECTEL_PRODUCT_EM05G_CS 0x030c +#define QUECTEL_PRODUCT_EM05CN_SG 0x0310#define QUECTEL_PRODUCT_EM05G_SG 0x0311 +#define QUECTEL_PRODUCT_EM05CN 0x0312 +#define QUECTEL_PRODUCT_EM05G_GR 0x0313 +#define QUECTEL_PRODUCT_EM05G_RS 0x0314#define QUECTEL_PRODUCT_EM12 0x0512#define QUECTEL_PRODUCT_RM500Q 0x0800#define QUECTEL_PRODUCT_RM520N 0x0801 +#define QUECTEL_PRODUCT_EC200U 0x0901#define QUECTEL_PRODUCT_EC200S_CN 0x6002#define QUECTEL_PRODUCT_EC200T 0x6026#define QUECTEL_PRODUCT_RM500K 0x7001
@@ -1159,8 +1165,18 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff), .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0, 0) }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05CN, 0xff), + .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05CN_SG, 0xff), + .driver_info = RSVD(6) | ZLP }, { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G, 0xff), .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_GR, 0xff), + .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_CS, 0xff), + .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_RS, 0xff), + .driver_info = RSVD(6) | ZLP }, { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_SG, 0xff), .driver_info = RSVD(6) | ZLP }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0x00, 0x40) },
@@ -1180,6 +1196,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0xff, 0x30) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200U, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) },
drivers/usb/storage/uas-detect.h +13 -0
@@ -116,6 +116,19 @@ static int uas_use_uas_driver(struct usb_interface *intf,if (le16_to_cpu (udev->descriptor.idVendor) ==0x0bc2 ) flags |=US_FL_NO_ATA_1X ; +/* +* RTL9210-based enclosure from HIKSEMI, MD202 reportedly have issues +* with UAS. This isn't distinguishable with just idVendor and +* idProduct, use manufacturer and product too. +* +* Reported-by: Hongling Zeng <[email protected]> +*/ +if (le16_to_cpu (udev->descriptor.idVendor) ==0x0bda && +le16_to_cpu (udev->descriptor.idProduct) ==0x9210 && + (udev->manufacturer && !strcmp (udev->manufacturer,"HIKSEMI" )) && + (udev->product && !strcmp (udev->product,"MD202" ))) + flags |=US_FL_IGNORE_UAS ; +usb_stor_adjust_quirks (udev, &flags);if (flags &US_FL_IGNORE_UAS ) {
drivers/usb/storage/unusual_uas.h +0 -7
@@ -83,13 +83,6 @@ UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NO_REPORT_LUNS), -/* Reported-by: Hongling Zeng <[email protected]> */ -UNUSUAL_DEV (0x0bda ,0x9210 ,0x0000 ,0x9999 , -"Hiksemi" , -"External HDD" , -USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , -US_FL_IGNORE_UAS ), -/* Reported-by: Benjamin Tissoires <[email protected]> */ UNUSUAL_DEV(0x13fd, 0x3940, 0x0000, 0x9999, "Initio Corporation",
drivers/usb/typec/altmodes/displayport.c +14 -8
@@ -409,6 +409,18 @@ static const char * const pin_assignments[] = { [DP_PIN_ASSIGN_F] = "F", }; +/* +* Helper function to extract a peripheral's currently supported +* Pin Assignments from its DisplayPort alternate mode state. +*/ +static u8 get_current_pin_assignments (struct dp_altmode *dp) +{ +if (DP_CONF_CURRENTLY (dp->data.conf) ==DP_CONF_DFP_D ) +return DP_CAP_PIN_ASSIGN_DFP_D (dp->alt->vdo); +else +return DP_CAP_PIN_ASSIGN_UFP_D (dp->alt->vdo); +} +static ssize_t pin_assignment_store (struct device *dev,struct device_attribute *attr,const char *buf,size_t size)
@@ -435,10 +447,7 @@ pin_assignment_store(struct device *dev, struct device_attribute *attr, goto out_unlock; } -if (DP_CONF_CURRENTLY (dp->data.conf) ==DP_CONF_DFP_D ) - assignments =DP_CAP_UFP_D_PIN_ASSIGN (dp->alt->vdo); -else - assignments =DP_CAP_DFP_D_PIN_ASSIGN (dp->alt->vdo); + assignments =get_current_pin_assignments (dp);if (!(DP_CONF_GET_PIN_ASSIGN (conf) & assignments)) { ret = -EINVAL ;
@@ -475,10 +484,7 @@ static ssize_t pin_assignment_show(struct device *dev, cur =get_count_order (DP_CONF_GET_PIN_ASSIGN (dp->data.conf)); -if (DP_CONF_CURRENTLY (dp->data.conf) ==DP_CONF_DFP_D ) - assignments =DP_CAP_UFP_D_PIN_ASSIGN (dp->alt->vdo); -else - assignments =DP_CAP_DFP_D_PIN_ASSIGN (dp->alt->vdo); + assignments =get_current_pin_assignments (dp);for (i =0 ; assignments; assignments >>=1 , i++) {if (assignments &1 ) {
fs/btrfs/extent-tree.c +5 -2
@@ -1684,6 +1684,11 @@ static int run_one_delayed_ref(struct btrfs_trans_handle *trans,BUG ();if (ret && insert_reserved)btrfs_pin_extent (trans, node->bytenr, node->num_bytes,1 ); +if (ret <0 ) +btrfs_err (trans->fs_info, +"failed to run delayed ref for logical %llu num_bytes %llu type %u action %u ref_mod %d: %d" , + node->bytenr, node->num_bytes, node->type, + node->action, node->ref_mod, ret);return ret; }
@@ -1935,8 +1940,6 @@ static int btrfs_run_delayed_refs_for_head(struct btrfs_trans_handle *trans,if (ret) {unselect_delayed_ref_head (delayed_refs, locked_ref);btrfs_put_delayed_ref (ref); -btrfs_debug (fs_info,"run_one_delayed_ref returned %d" , - ret);return ret; }
fs/btrfs/qgroup.c +17 -8
@@ -3296,6 +3296,7 @@ static void btrfs_qgroup_rescan_worker(struct btrfs_work *work)int err = -ENOMEM ;int ret =0 ;bool stopped = false; +bool did_leaf_rescans = false; path =btrfs_alloc_path ();if (!path)
@@ -3316,6 +3317,7 @@ static void btrfs_qgroup_rescan_worker(struct btrfs_work *work) } err =qgroup_rescan_leaf (trans, path); + did_leaf_rescans = true;if (err >0 )btrfs_commit_transaction (trans);
@@ -3336,16 +3338,23 @@ static void btrfs_qgroup_rescan_worker(struct btrfs_work *work)mutex_unlock (&fs_info->qgroup_rescan_lock);/* -* only update status, since the previous part has already updated the -* qgroup info. +* Only update status, since the previous part has already updated the +* qgroup info, and only if we did any actual work. This also prevents +* race with a concurrent quota disable, which has already set +* fs_info->quota_root to NULL and cleared BTRFS_FS_QUOTA_ENABLED at +* btrfs_quota_disable(). */ - trans =btrfs_start_transaction (fs_info->quota_root,1 ); -if (IS_ERR (trans)) { - err =PTR_ERR (trans); +if (did_leaf_rescans) { + trans =btrfs_start_transaction (fs_info->quota_root,1 ); +if (IS_ERR (trans)) { + err =PTR_ERR (trans); + trans =NULL ; +btrfs_err (fs_info, +"fail to start transaction for status update: %d" , + err); + } + }else { trans =NULL ; -btrfs_err (fs_info, -"fail to start transaction for status update: %d" , - err); }mutex_lock (&fs_info->qgroup_rescan_lock);
fs/cifs/smb2pdu.c +9 -6
@@ -3925,12 +3925,15 @@ smb2_readv_callback(struct mid_q_entry *mid) (struct smb2_sync_hdr *)rdata->iov[0 ].iov_base;struct cifs_credits credits = { .value =0 , .instance =0 };struct smb_rqst rqst = { .rq_iov = &rdata->iov[1 ], - .rq_nvec =1 , - .rq_pages = rdata->pages, - .rq_offset = rdata->page_offset, - .rq_npages = rdata->nr_pages, - .rq_pagesz = rdata->pagesz, - .rq_tailsz = rdata->tailsz }; + .rq_nvec =1 , }; + +if (rdata->got_bytes) { + rqst.rq_pages = rdata->pages; + rqst.rq_offset = rdata->page_offset; + rqst.rq_npages = rdata->nr_pages; + rqst.rq_pagesz = rdata->pagesz; + rqst.rq_tailsz = rdata->tailsz; + } WARN_ONCE(rdata->server != mid->server, "rdata server %p != mid server %p",
fs/f2fs/extent_cache.c +2 -1
@@ -414,7 +414,8 @@ static bool f2fs_lookup_extent_tree(struct inode *inode, pgoff_t pgofs,struct extent_node *en;bool ret = false; -f2fs_bug_on (sbi, !et); +if (!et) +return false;trace_f2fs_lookup_extent_tree_start (inode, pgofs);
fs/nfs/filelayout/filelayout.c +8 -0
@@ -783,6 +783,12 @@ filelayout_alloc_lseg(struct pnfs_layout_hdr *layoutid,return &fl->generic_hdr; } +static bool +filelayout_lseg_is_striped (const struct nfs4_filelayout_segment *flseg) +{ +return flseg->num_fh >1 ; +} +/* * filelayout_pg_test(). Called by nfs_can_coalesce_requests() *
@@ -803,6 +809,8 @@ filelayout_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev, size =pnfs_generic_pg_test (pgio, prev, req);if (!size)return 0 ; +else if (!filelayout_lseg_is_striped (FILELAYOUT_LSEG (pgio->pg_lseg))) +return size;/* see if req and prev are in the same stripe */ if (prev) {
fs/nilfs2/btree.c +12 -3
@@ -480,9 +480,18 @@ static int __nilfs_btree_get_block(const struct nilfs_bmap *btree, __u64 ptr, ret =nilfs_btnode_submit_block (btnc, ptr,0 ,REQ_OP_READ ,0 , &bh, &submit_ptr);if (ret) { -if (ret != -EEXIST ) -return ret; - goto out_check; +if (likely (ret == -EEXIST )) + goto out_check; +if (ret == -ENOENT ) { +/* +* Block address translation failed due to invalid +* value of 'ptr'. In this case, return internal code +* -EINVAL (broken bmap) to notify bmap layer of fatal +* metadata corruption. +*/ + ret = -EINVAL ; + } +return ret; }if (ra) {
fs/zonefs/super.c +22 -0
@@ -394,6 +394,10 @@ static int zonefs_io_error_cb(struct blk_zone *zone, unsigned int idx, data_size =zonefs_check_zone_condition (inode, zone, false, false); } + }else if (sbi->s_mount_opts &ZONEFS_MNTOPT_ERRORS_RO && + data_size > isize) { +/* Do not expose garbage data */ + data_size = isize; }/*
@@ -772,6 +776,24 @@ static ssize_t zonefs_file_dio_append(struct kiocb *iocb, struct iov_iter *from) ret =submit_bio_wait (bio); +/* +* If the file zone was written underneath the file system, the zone +* write pointer may not be where we expect it to be, but the zone +* append write can still succeed. So check manually that we wrote where +* we intended to, that is, at zi->i_wpoffset. +*/ +if (!ret) { +sector_t wpsector = + zi->i_zsector + (zi->i_wpoffset >>SECTOR_SHIFT ); + +if (bio->bi_iter.bi_sector != wpsector) { +zonefs_warn (inode->i_sb, +"Corrupted write pointer %llu for zone at %llu\n" , + wpsector, zi->i_zsector); + ret = -EIO ; + } + } +zonefs_file_write_dio_end_io (iocb, size, ret,0 ); out_release:
include/linux/usb.h +3 -0
@@ -754,11 +754,14 @@ extern struct device *usb_intf_get_dma_device(struct usb_interface *intf);extern int usb_acpi_set_power_state (struct usb_device *hdev,int index,bool enable);extern bool usb_acpi_power_manageable (struct usb_device *hdev,int index); +extern int usb_acpi_port_lpm_incapable (struct usb_device *hdev,int index);#else static inline int usb_acpi_set_power_state (struct usb_device *hdev,int index,bool enable) {return 0 ; }static inline bool usb_acpi_power_manageable (struct usb_device *hdev,int index) {return true; } +static inline int usb_acpi_port_lpm_incapable (struct usb_device *hdev,int index) + {return 0 ; }#endif /* USB autosuspend and autoresume */
include/trace/events/btrfs.h +1 -1
@@ -95,7 +95,7 @@ struct btrfs_space_info; EM( FLUSH_DELALLOC, "FLUSH_DELALLOC") \ EM( FLUSH_DELALLOC_WAIT, "FLUSH_DELALLOC_WAIT") \ EM( FLUSH_DELAYED_REFS_NR, "FLUSH_DELAYED_REFS_NR") \ - EM( FLUSH_DELAYED_REFS, "FLUSH_ELAYED_REFS") \ + EM( FLUSH_DELAYED_REFS, "FLUSH_DELAYED_REFS") \ EM( ALLOC_CHUNK, "ALLOC_CHUNK") \ EM( ALLOC_CHUNK_FORCE, "ALLOC_CHUNK_FORCE") \EM (RUN_DELAYED_IPUTS ,"RUN_DELAYED_IPUTS" ) \
include/trace/trace_events.h +1 -1
@@ -400,7 +400,7 @@ static struct trace_event_functions trace_event_type_funcs_##call = { \#include TRACE_INCLUDE (TRACE_INCLUDE_FILE ) -#define ALIGN_STRUCTFIELD (type) ((int)(offsetof(struct {char a; type b;}, b))) +#define ALIGN_STRUCTFIELD (type) ((int)(__alignof__(struct {type b;})))#undef __field_ext#define __field_ext (_type, _item, _filter_type) { \
io_uring/io-wq.c +1 -1
@@ -513,7 +513,7 @@ static struct io_wq_work *io_get_next_work(struct io_wqe_acct *acct,static bool io_flush_signals (void ) { -if (unlikely (test_thread_flag (TIF_NOTIFY_SIGNAL ))) { +if (test_thread_flag (TIF_NOTIFY_SIGNAL ) || current->task_works) {__set_current_state (TASK_RUNNING );tracehook_notify_signal ();return true;
io_uring/io_uring.c +189 -61
504 lines not on this page · raw message
kernel/sys.c +2 -0
@@ -1548,6 +1548,8 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource,if (resource >=RLIM_NLIMITS )return -EINVAL ; + resource =array_index_nospec (resource,RLIM_NLIMITS ); +if (new_rlim) {if (new_rlim->rlim_cur > new_rlim->rlim_max)return -EINVAL ;
mm/khugepaged.c +6 -8
@@ -1459,14 +1459,6 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr)if (!hugepage_vma_check (vma, vma->vm_flags |VM_HUGEPAGE ))return ; -/* -* Symmetry with retract_page_tables(): Exclude MAP_PRIVATE mappings -* that got written to. Without this, we'd have to also lock the -* anon_vma if one exists. -*/ -if (vma->anon_vma) -return ; - hpage =find_lock_page (vma->vm_file->f_mapping,linear_page_index (vma, haddr));if (!hpage)
@@ -1538,6 +1530,10 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) }/* step 4: collapse pmd */ +/* we make no change to anon, but protect concurrent anon page lookup */ +if (vma->anon_vma) +anon_vma_lock_write (vma->anon_vma); +mmu_notifier_range_init (&range,MMU_NOTIFY_CLEAR ,0 ,NULL , mm, haddr, haddr +HPAGE_PMD_SIZE );mmu_notifier_invalidate_range_start (&range);
@@ -1547,6 +1543,8 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr)mmu_notifier_invalidate_range_end (&range);pte_free (mm,pmd_pgtable (_pmd)); +if (vma->anon_vma) +anon_vma_unlock_write (vma->anon_vma);i_mmap_unlock_write (vma->vm_file->f_mapping); drop_hpage:
net/ethtool/ioctl.c +2 -1
@@ -2052,7 +2052,8 @@ static int ethtool_get_phy_stats(struct net_device *dev, void __user *useraddr)return n_stats;if (n_stats >S32_MAX /sizeof (u64))return -ENOMEM ; -WARN_ON_ONCE (!n_stats); +if (WARN_ON_ONCE (!n_stats)) +return -EOPNOTSUPP ;if (copy_from_user (&stats, useraddr,sizeof (stats)))return -EFAULT ;
net/ipv4/tcp_ulp.c +1 -1
@@ -136,7 +136,7 @@ static int __tcp_set_ulp(struct sock *sk, const struct tcp_ulp_ops *ulp_ops)if (icsk->icsk_ulp_ops) goto out_err; - err = -EINVAL ; + err = -ENOTCONN ;if (!ulp_ops->clone && sk->sk_state ==TCP_LISTEN ) goto out_err;
net/mac80211/agg-tx.c +5 -1
@@ -491,7 +491,7 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid) {struct tid_ampdu_tx *tid_tx;struct ieee80211_local *local = sta->local; -struct ieee80211_sub_if_data *sdata = sta->sdata; +struct ieee80211_sub_if_data *sdata;struct ieee80211_ampdu_params params = { .sta = &sta->sta, .action =IEEE80211_AMPDU_TX_START ,
@@ -521,6 +521,7 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)*/ synchronize_net (); + sdata = sta->sdata; params.ssn = sta->tid_seq[tid] >>4 ; ret =drv_ampdu_action (local, sdata, ¶ms); tid_tx->ssn = params.ssn;
@@ -534,6 +535,9 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)*/ set_bit (HT_AGG_STATE_DRV_READY , &tid_tx->state); }else if (ret) { +if (!sdata) +return ; +ht_dbg (sdata,"BA request denied - HW unavailable for %pM tid %d\n" , sta->sta.addr, tid);
net/mac80211/driver-ops.c +3 -0
@@ -331,6 +331,9 @@ int drv_ampdu_action(struct ieee80211_local *local,might_sleep (); +if (!sdata) +return -EIO ; + sdata =get_bss_sdata (sdata);if (!check_sdata_in_driver (sdata))return -EIO ;
net/mac80211/iface.c +0 -1
@@ -2013,7 +2013,6 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name, ret =register_netdevice (ndev);if (ret) { -ieee80211_if_free (ndev);free_netdev (ndev);return ret; }
sound/pci/hda/patch_realtek.c +16 -14
@@ -3561,6 +3561,15 @@ static void alc256_init(struct hda_codec *codec)hda_nid_t hp_pin =alc_get_hp_pin (spec);bool hp_pin_sense; +if (spec->ultra_low_power) { +alc_update_coef_idx (codec,0x03 ,1 <<1 ,1 <<1 ); +alc_update_coef_idx (codec,0x08 ,3 <<2 ,3 <<2 ); +alc_update_coef_idx (codec,0x08 ,7 <<4 ,0 ); +alc_update_coef_idx (codec,0x3b ,1 <<15 ,0 ); +alc_update_coef_idx (codec,0x0e ,7 <<6 ,7 <<6 ); +msleep (30 ); + } +if (!hp_pin) hp_pin =0x21 ;
@@ -3572,14 +3581,6 @@ static void alc256_init(struct hda_codec *codec)msleep (2 );alc_update_coefex_idx (codec,0x57 ,0x04 ,0x0007 ,0x1 );/* Low power */ -if (spec->ultra_low_power) { -alc_update_coef_idx (codec,0x03 ,1 <<1 ,1 <<1 ); -alc_update_coef_idx (codec,0x08 ,3 <<2 ,3 <<2 ); -alc_update_coef_idx (codec,0x08 ,7 <<4 ,0 ); -alc_update_coef_idx (codec,0x3b ,1 <<15 ,0 ); -alc_update_coef_idx (codec,0x0e ,7 <<6 ,7 <<6 ); -msleep (30 ); - }snd_hda_codec_write (codec, hp_pin,0 ,AC_VERB_SET_AMP_GAIN_MUTE ,AMP_OUT_MUTE );
@@ -3661,6 +3662,13 @@ static void alc225_init(struct hda_codec *codec)hda_nid_t hp_pin =alc_get_hp_pin (spec);bool hp1_pin_sense, hp2_pin_sense; +if (spec->ultra_low_power) { +alc_update_coef_idx (codec,0x08 ,0x0f <<2 ,3 <<2 ); +alc_update_coef_idx (codec,0x0e ,7 <<6 ,7 <<6 ); +alc_update_coef_idx (codec,0x33 ,1 <<11 ,0 ); +msleep (30 ); + } +if (!hp_pin) hp_pin =0x21 ;msleep (30 );
@@ -3672,12 +3680,6 @@ static void alc225_init(struct hda_codec *codec)msleep (2 );alc_update_coefex_idx (codec,0x57 ,0x04 ,0x0007 ,0x1 );/* Low power */ -if (spec->ultra_low_power) { -alc_update_coef_idx (codec,0x08 ,0x0f <<2 ,3 <<2 ); -alc_update_coef_idx (codec,0x0e ,7 <<6 ,7 <<6 ); -alc_update_coef_idx (codec,0x33 ,1 <<11 ,0 ); -msleep (30 ); - }if (hp1_pin_sense || spec->ultra_low_power) snd_hda_codec_write(codec, hp_pin, 0,
tools/testing/selftests/bpf/prog_tests/jeq_infer_not_null.c new file +9 -0
@@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <test_progs.h> +#include "jeq_infer_not_null_fail.skel.h" + +void test_jeq_infer_not_null (void ) +{ +RUN_TESTS (jeq_infer_not_null_fail); +}
tools/testing/selftests/bpf/progs/jeq_infer_not_null_fail.c new file +42 -0
42 lines not on this page · raw message
tools/virtio/vringh_test.c +2 -0
@@ -308,6 +308,7 @@ static int parallel_test(u64 features, gvdev.vdev.features = features;INIT_LIST_HEAD (&gvdev.vdev.vqs); +spin_lock_init (&gvdev.vdev.vqs_list_lock); gvdev.to_host_fd = to_host[1 ]; gvdev.notifies =0 ;
@@ -455,6 +456,7 @@ int main(int argc, char *argv[]) getrange = getrange_iov; vdev.features =0 ;INIT_LIST_HEAD (&vdev.vqs); +spin_lock_init (&vdev.vqs_list_lock);while (argv[1 ]) {if (strcmp (argv[1 ],"--indirect" ) ==0 )