Linux 5.15.90
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.90 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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/riscv/boot/dts/sifive/fu740-c000.dtsi | 2 arch/x86/events/rapl.c | 2 arch/x86/kernel/fpu/init.c | 7 arch/x86/lib/iomap_copy_64.S | 2 block/mq-deadline.c | 4 drivers/accessibility/speakup/spk_ttyio.c | 3 drivers/acpi/prmt.c | 10 drivers/bluetooth/hci_qca.c | 7 drivers/comedi/drivers/adv_pci1760.c | 2 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 6 drivers/dma/idxd/device.c | 3 drivers/dma/lgm/lgm-dma.c | 10 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_device.c | 8 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 14 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 14 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/display/skl_universal_plane.c | 2 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/ethernet/realtek/r8169_main.c | 44 - drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 2 drivers/soc/qcom/apr.c | 3 drivers/staging/mt7621-dts/mt7621.dtsi | 12 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/amba-pl011.c | 8 drivers/tty/serial/atmel_serial.c | 8 drivers/tty/serial/pch_uart.c | 2 drivers/tty/serial/qcom_geni_serial.c | 18 drivers/usb/cdns3/cdns3-gadget.c | 12 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 drivers/usb/typec/tcpm/tcpm.c | 7 drivers/vdpa/vdpa_user/vduse_dev.c | 3 drivers/video/fbdev/omap2/omapfb/dss/dsi.c | 28 - drivers/virtio/virtio_pci_modern.c | 2 fs/btrfs/disk-io.c | 9 fs/btrfs/extent-tree.c | 7 fs/btrfs/qgroup.c | 25 - fs/btrfs/tree-log.c | 2 fs/cifs/smb2pdu.c | 15 fs/eventfd.c | 37 - fs/eventpoll.c | 18 fs/f2fs/extent_cache.c | 3 fs/nfs/filelayout/filelayout.c | 8 fs/nilfs2/btree.c | 15 fs/ntfs3/attrib.c | 2 fs/zonefs/super.c | 22 include/linux/eventfd.h | 7 include/linux/usb.h | 3 include/trace/events/btrfs.h | 2 include/trace/trace_events.h | 2 include/uapi/linux/eventpoll.h | 6 io_uring/io-wq.c | 2 io_uring/io_uring.c | 248 +++++++--- kernel/bpf/offload.c | 3 kernel/bpf/syscall.c | 6 kernel/sys.c | 2 mm/hugetlb.c | 44 + 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 | 3 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 103 files changed, 1058 insertions(+), 435 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 (2):
drm/amdgpu: drop experimental flag on aldebaran 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
Alon Zahavi (1):
fs/ntfs3: Fix attr_punch_hole() null pointer derenference
Alviro Iskandar Setiawan (1):
io_uring: Clean up a false-positive warning from GCC 9.3.0
Andy Chi (1):
ALSA: hda/realtek: fix mute/micmute LEDs for a HP ProBook
Angus Chen (1):
virtio_pci: modify ENOENT to EINVAL
Ard Biesheuvel (3):
ACPI: PRM: Check whether EFI runtime is available
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 (2):
fbdev: omapfb: avoid stack overflow warning
staging: vchiq_arm: fix enum vchiq_status return types
Ben Dooks (1):
riscv: dts: sifive: fu740: fix size of pcie 32bit memory
ChiYuan Huang (1):
usb: typec: tcpm: Fix altmode re-registration causes sysfs create fail
Chris Wilson (1):
perf/x86/rapl: Treat Tigerlake like Icelake
Chunhao Lin (1):
r8169: move rtl_wol_enable_rx() and rtl_prepare_power_down()
Damien Le Moal (2):
zonefs: Detect append writes at invalid locations
block: mq-deadline: Rename deadline_is_seq_writes()
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
Drew Davenport (1):
drm/i915/display: Check source height is > 0
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 (2):
btrfs: do not abort transaction on failure to write log tree when syncing log
btrfs: fix race between quota rescan and disable leading to NULL pointer deref
Flavio Suligoi (1):
usb: core: hub: disable autosuspend for TI TUSB8041
Gaosheng Cui (1):
tty: fix possible null-ptr-defer in spk_ttyio_release
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.15.90
Guchun Chen (1):
drm/amdgpu: disable runtime pm on several sienna cichlid cards(v2)
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
Harshit Mogalapalli (1):
vduse: Validate vq_num in vduse_validate_config()
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
James Houghton (1):
hugetlb: unshare some PMDs when splitting VMAs
Jens Axboe (13):
io_uring: don't gate task_work run on TIF_NOTIFY_SIGNAL
eventpoll: add EPOLL_URING_WAKE poll wakeup flag
eventfd: provide a eventfd_signal_mask() helper
io_uring: pass in EPOLL_URING_WAKE for eventfd signaling and wakeups
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: 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
Jeremy Szu (1):
ALSA: hda/realtek: fix mute/micmute LEDs don't work for a HP platform
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
Lino Sanfilippo (1):
serial: amba-pl011: fix high priority character transmission in rs486 mode
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
Paul Moore (1):
bpf: restore the ebpf program ID for BPF_AUDIT_UNLOAD and PERF_BPF_EVENT_PROG_UNLOAD
Pavel Begunkov (2):
io_uring: improve send/recv error handling
io_uring: fix double poll leak on repolling
Pawel Laszczak (1):
usb: cdns3: remove fetched trb from cache before dequeuing
Peter Harliman Liem (1):
dmaengine: lgm: Move DT parsing after initialization
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()
Reinette Chatre (1):
dmaengine: idxd: Let probe fail when workqueue cannot be enabled
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
Sasha Levin (1):
drm/amd: Delay removal of the firmware framebuffer
Sergio Paracuellos (1):
staging: mt7621-dts: change some node hex addresses to lower case
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
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
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 = 15 -SUBLEVEL = 89 +SUBLEVEL = 90 EXTRAVERSION = NAME = Trick or Treat
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
@@ -144,3 +144,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/riscv/boot/dts/sifive/fu740-c000.dtsi +1 -1
@@ -328,7 +328,7 @@ pcie@e00000000 { bus-range = <0x0 0xff>; ranges = <0x81000000 0x0 0x60080000 0x0 0x60080000 0x0 0x10000>, /* I/O */ <0x82000000 0x0 0x60090000 0x0 0x60090000 0x0 0xff70000>, /* mem */ - <0x82000000 0x0 0x70000000 0x0 0x70000000 0x0 0x1000000>, /* mem */ + <0x82000000 0x0 0x70000000 0x0 0x70000000 0x0 0x10000000>, /* mem */ <0xc3000000 0x20 0x00000000 0x20 0x00000000 0x20 0x00000000>; /* mem prefetchable */ num-lanes = <0x8>; interrupts = <56>, <57>, <58>, <59>, <60>, <61>, <62>, <63>, <64>;
arch/x86/events/rapl.c +2 -0
@@ -804,6 +804,8 @@ static const struct x86_cpu_id rapl_model_match[] __initconst = {X86_MATCH_INTEL_FAM6_MODEL (ICELAKE_X , &model_hsx),X86_MATCH_INTEL_FAM6_MODEL (COMETLAKE_L , &model_skl),X86_MATCH_INTEL_FAM6_MODEL (COMETLAKE , &model_skl), +X86_MATCH_INTEL_FAM6_MODEL (TIGERLAKE_L , &model_skl), +X86_MATCH_INTEL_FAM6_MODEL (TIGERLAKE , &model_skl),X86_MATCH_INTEL_FAM6_MODEL (ALDERLAKE , &model_skl),X86_MATCH_INTEL_FAM6_MODEL (ALDERLAKE_L , &model_skl), X86_MATCH_INTEL_FAM6_MODEL(SAPPHIRERAPIDS_X, &model_spr),
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__ro_after_init ;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)
block/mq-deadline.c +2 -2
@@ -305,7 +305,7 @@ static inline int deadline_check_fifo(struct dd_per_prio *per_prio,/* * Check if rq has a sequential request preceding it. */ -static bool deadline_is_seq_writes (struct deadline_data *dd,struct request *rq) +static bool deadline_is_seq_write (struct deadline_data *dd,struct request *rq) {struct request *prev =deadline_earlier_request (rq);
@@ -364,7 +364,7 @@ deadline_fifo_request(struct deadline_data *dd, struct dd_per_prio *per_prio,list_for_each_entry (rq, &per_prio->fifo_list[DD_WRITE ], queuelist) {if (blk_req_can_dispatch_to_zone (rq) && (blk_queue_nonrot (rq->q) || - !deadline_is_seq_writes (dd, rq))) + !deadline_is_seq_write (dd, rq))) goto out; } rq =NULL ;
drivers/accessibility/speakup/spk_ttyio.c +3 -0
@@ -354,6 +354,9 @@ void spk_ttyio_release(struct spk_synth *in_synth) {struct tty_struct *tty = in_synth->dev; +if (tty ==NULL ) +return ; +tty_lock (tty);if (tty->ops->close)
drivers/acpi/prmt.c +10 -0
@@ -219,6 +219,11 @@ static acpi_status acpi_platformrt_space_handler(u32 function,efi_status_t status;struct prm_context_buffer context; +if (!efi_enabled (EFI_RUNTIME_SERVICES )) { +pr_err_ratelimited ("PRM: EFI runtime services no longer available\n" ); +return AE_NO_HANDLER ; + } +/* * The returned acpi_status will always be AE_OK. Error values will be * saved in the first byte of the PRM message buffer to be used by ASL.
@@ -308,6 +313,11 @@ void __init init_prmt(void)pr_info ("PRM: found %u modules\n" , mc); +if (!efi_enabled (EFI_RUNTIME_SERVICES )) { +pr_err ("PRM: EFI runtime services unavailable\n" ); +return ; + } + status = acpi_install_address_space_handler(ACPI_ROOT_OBJECT, ACPI_ADR_SPACE_PLATFORM_RT, &acpi_platformrt_space_handler,
drivers/bluetooth/hci_qca.c +7 -0
@@ -2156,10 +2156,17 @@ static void qca_serdev_shutdown(struct device *dev)int timeout =msecs_to_jiffies (CMD_TRANS_TIMEOUT_MS );struct serdev_device *serdev =to_serdev_device (dev);struct qca_serdev *qcadev =serdev_device_get_drvdata (serdev); +struct hci_uart *hu = &qcadev->serdev_hu; +struct hci_dev *hdev = hu->hdev; +struct qca_data *qca = hu->priv;const u8 ibs_wake_cmd[] = {0xFD };const u8 edl_reset_soc_cmd[] = {0x01 ,0x00 ,0xFC ,0x01 ,0x05 };if (qcadev->btsoc_type ==QCA_QCA6390 ) { +if (test_bit (QCA_BT_OFF , &qca->flags) || + !test_bit (HCI_RUNNING , &hdev->flags)) +return ; +serdev_device_write_flush (serdev); ret =serdev_device_write_buf (serdev, ibs_wake_cmd,sizeof (ibs_wake_cmd));
drivers/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/dma/dw-axi-dmac/dw-axi-dmac-platform.c +6 -0
@@ -980,6 +980,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);
@@ -994,6 +999,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/idxd/device.c +1 -2
@@ -1248,8 +1248,7 @@ int __drv_enable_wq(struct idxd_wq *wq)return 0 ; err_map_portal: - rc =idxd_wq_disable (wq, false); -if (rc <0 ) +if (idxd_wq_disable (wq, false))dev_dbg (dev,"wq %s disable failed\n" ,dev_name (wq_confdev (wq))); err:return rc;
drivers/dma/lgm/lgm-dma.c +5 -5
@@ -914,7 +914,7 @@ static void ldma_dev_init(struct ldma_dev *d) } } -static int ldma_cfg_init (struct ldma_dev *d) +static int ldma_parse_dt (struct ldma_dev *d) {struct fwnode_handle *fwnode =dev_fwnode (d->dev);struct ldma_port *p;
@@ -1661,10 +1661,6 @@ static int intel_ldma_probe(struct platform_device *pdev) p->ldev = d; } - ret =ldma_cfg_init (d); -if (ret) -return ret; - dma_dev->dev = &pdev->dev; ch_mask = (unsigned long )d->channels_mask;
@@ -1675,6 +1671,10 @@ static int intel_ldma_probe(struct platform_device *pdev)ldma_dma_init_v3X (j, d); } + ret =ldma_parse_dt (d); +if (ret) +return ret; + dma_dev->device_alloc_chan_resources = ldma_alloc_chan_resources; dma_dev->device_free_chan_resources = ldma_free_chan_resources; dma_dev->device_terminate_all = ldma_terminate_all;
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
@@ -361,9 +361,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_device.c +8 -0
@@ -32,6 +32,7 @@#include <linux/slab.h> #include <linux/pci.h> +#include <drm/drm_aperture.h> #include <drm/drm_atomic_helper.h> #include <drm/drm_probe_helper.h> #include <drm/amdgpu_drm.h>
@@ -89,6 +90,8 @@ MODULE_FIRMWARE("amdgpu/yellow_carp_gpu_info.bin");#define AMDGPU_RESUME_MS 2000 +static const struct drm_driver amdgpu_kms_driver; +const char *amdgpu_asic_name[] = {"TAHITI" ,"PITCAIRN" ,
@@ -3637,6 +3640,11 @@ int amdgpu_device_init(struct amdgpu_device *adev,if (r)return r; +/* Get rid of things like offb */ + r =drm_aperture_remove_conflicting_pci_framebuffers (adev->pdev, &amdgpu_kms_driver); +if (r) +return r; +/* doorbell bar mapping and doorbell index init*/ amdgpu_device_doorbell_init (adev);
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +4 -10
@@ -23,7 +23,6 @@*/ #include <drm/amdgpu_drm.h> -#include <drm/drm_aperture.h> #include <drm/drm_drv.h> #include <drm/drm_gem.h> #include <drm/drm_vblank.h>
@@ -1936,10 +1935,10 @@ static const struct pci_device_id pciidlist[] = { {0x1002, 0x73FF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_DIMGREY_CAVEFISH},/* Aldebaran */ - {0x1002, 0x7408, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN|AMD_EXP_HW_SUPPORT}, - {0x1002, 0x740C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN|AMD_EXP_HW_SUPPORT}, - {0x1002, 0x740F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN|AMD_EXP_HW_SUPPORT}, - {0x1002, 0x7410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN|AMD_EXP_HW_SUPPORT}, + {0x1002, 0x7408, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN}, + {0x1002, 0x740C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN}, + {0x1002, 0x740F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN}, + {0x1002, 0x7410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN},/* CYAN_SKILLFISH */ {0x1002, 0x13FE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CYAN_SKILLFISH|AMD_IS_APU},
@@ -2067,11 +2066,6 @@ static int amdgpu_pci_probe(struct pci_dev *pdev, size =pci_resource_len (pdev,0 ); is_fw_fb =amdgpu_is_fw_framebuffer (base, size); -/* Get rid of things like offb */ - ret =drm_aperture_remove_conflicting_pci_framebuffers (pdev, &amdgpu_kms_driver); -if (ret) -return ret; - adev =devm_drm_dev_alloc (&pdev->dev, &amdgpu_kms_driver,typeof (*adev), ddev);if (IS_ERR (adev))return PTR_ERR (adev);
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +14 -0
@@ -43,6 +43,17 @@#include "amdgpu_display.h" #include "amdgpu_ras.h" +static void amdgpu_runtime_pm_quirk (struct amdgpu_device *adev) +{ +/* +* Add below quirk on several sienna_cichlid cards to disable +* runtime pm to fix EMI failures. +*/ +if (((adev->pdev->device ==0x73A1 ) && (adev->pdev->revision ==0x00 )) || + ((adev->pdev->device ==0x73BF ) && (adev->pdev->revision ==0xCF ))) + adev->runpm = false; +} +void amdgpu_unregister_gpu_instance (struct amdgpu_device *adev) {struct amdgpu_gpu_instance *gpu_instance;
@@ -201,6 +212,9 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)*/ if (adev->is_fw_fb) adev->runpm = false; + +amdgpu_runtime_pm_quirk (adev); +if (adev->runpm)dev_info (adev->dev,"Using BACO for runtime pm\n" ); }
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +1 -2
@@ -1510,8 +1510,7 @@ u64 amdgpu_bo_gpu_offset_no_check(struct amdgpu_bo *bo)uint32_t amdgpu_bo_get_preferred_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
@@ -5855,8 +5855,6 @@ static void fill_stream_properties_from_drm_display_mode( 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 ) {
@@ -5867,6 +5865,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,
@@ -10789,8 +10789,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/display/skl_universal_plane.c +1 -1
@@ -1473,7 +1473,7 @@ static int skl_check_main_surface(struct intel_plane_state *plane_state)u32 offset;int ret; -if (w > max_width || w < min_width || h > max_height) { +if (w > max_width || w < min_width || h > max_height || h <1 ) {drm_dbg_kms (&dev_priv->drm,"requested Y/RGB source size %dx%d outside limits (min: %dx1 max: %dx%d)\n" , w, h, min_width, max_width, max_height);
drivers/gpu/drm/i915/i915_pci.c +2 -1
@@ -401,7 +401,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,
@@ -1114,12 +1123,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);
@@ -1196,10 +1200,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
@@ -107,6 +107,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
@@ -1346,7 +1347,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)) {/*
@@ -1399,17 +1400,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
@@ -1483,9 +1483,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
@@ -617,6 +617,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/ethernet/realtek/r8169_main.c +22 -22
56 lines not on this page · raw message
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +1 -1
@@ -1118,7 +1118,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
@@ -317,9 +317,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/mt7621-dts/mt7621.dtsi +6 -6
@@ -47,10 +47,10 @@ mmc_fixed_1v8_io: fixedregulator@1 { regulator-always-on; }; - palmbus: palmbus@1E000000 { + palmbus: palmbus@1e000000 { compatible = "palmbus"; - reg = <0x1E000000 0x100000>; - ranges = <0x0 0x1E000000 0x0FFFFF>; + reg = <0x1e000000 0x100000>; + ranges = <0x0 0x1e000000 0x0fffff>; #address-cells = <1>; #size-cells = <1>;
@@ -301,11 +301,11 @@ rstctrl: rstctrl { #reset-cells = <1>; }; - sdhci: sdhci@1E130000 { + sdhci: sdhci@1e130000 { status = "disabled"; compatible = "mediatek,mt7620-mmc"; - reg = <0x1E130000 0x4000>; + reg = <0x1e130000 0x4000>; bus-width = <4>; max-frequency = <48000000>;
@@ -327,7 +327,7 @@ sdhci: sdhci@1E130000 { interrupts = <GIC_SHARED 20 IRQ_TYPE_LEVEL_HIGH>; }; - xhci: xhci@1E1C0000 { + xhci: xhci@1e1c0000 { status = "okay"; compatible = "mediatek,mt8173-xhci";
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
@@ -152,10 +152,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
@@ -1262,7 +1262,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/amba-pl011.c +4 -4
@@ -1472,6 +1472,10 @@ static bool pl011_tx_chars(struct uart_amba_port *uap, bool from_irq)struct circ_buf *xmit = &uap->port.state->xmit;int count = uap->fifosize >>1 ; +if ((uap->port.rs485.flags &SER_RS485_ENABLED ) && + !uap->rs485_tx_started) +pl011_rs485_tx_start (uap); +if (uap->port.x_char) {if (!pl011_tx_char (uap, uap->port.x_char, from_irq))return true;
@@ -1483,10 +1487,6 @@ static bool pl011_tx_chars(struct uart_amba_port *uap, bool from_irq)return false; } -if ((uap->port.rs485.flags &SER_RS485_ENABLED ) && - !uap->rs485_tx_started) -pl011_rs485_tx_start (uap); -/* If we are using DMA mode, try to send some characters. */ if (pl011_dma_tx_irq (uap))return true;
drivers/tty/serial/atmel_serial.c +1 -7
@@ -2615,13 +2615,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
@@ -765,7 +765,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/cdns3/cdns3-gadget.c +12 -0
@@ -2610,6 +2610,7 @@ int cdns3_gadget_ep_dequeue(struct usb_ep *ep,u8 req_on_hw_ring =0 ;unsigned long flags;int ret =0 ; +int val;if (!ep || !request || !ep->desc)return -EINVAL ;
@@ -2645,6 +2646,13 @@ int cdns3_gadget_ep_dequeue(struct usb_ep *ep,/* Update ring only if removed request is on pending_req_list list */ if (req_on_hw_ring && link_trb) { +/* Stop DMA */ +writel (EP_CMD_DFLUSH , &priv_dev->regs->ep_cmd); + +/* wait for DFLUSH cleared */ +readl_poll_timeout_atomic (&priv_dev->regs->ep_cmd, val, + !(val &EP_CMD_DFLUSH ),1 ,1000 ); + link_trb->buffer =cpu_to_le32 (TRB_BUFFER (priv_ep->trb_pool_dma + ((priv_req->end_trb +1 ) *TRB_SIZE ))); link_trb->control = cpu_to_le32((le32_to_cpu(link_trb->control) & TRB_CYCLE) |
@@ -2656,6 +2664,10 @@ int cdns3_gadget_ep_dequeue(struct usb_ep *ep,cdns3_gadget_giveback (priv_ep, priv_req, -ECONNRESET ); + req =cdns3_next_request (&priv_ep->pending_req_list); +if (req) +cdns3_rearm_transfer (priv_ep,1 ); + not_found:spin_unlock_irqrestore (&priv_dev->lock, flags);return ret;
drivers/usb/core/hub.c +13 -0
@@ -43,6 +43,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
@@ -5791,6 +5794,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
@@ -83,7 +83,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 */ /*----------------------------------------------------------------------*/
@@ -2013,13 +2014,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 ;
@@ -2056,13 +2064,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 */
@@ -2084,6 +2096,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);
@@ -2091,6 +2104,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
@@ -1178,7 +1178,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
@@ -3962,6 +3962,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;/*
@@ -3990,7 +3991,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)
@@ -5046,6 +5051,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;
@@ -5059,6 +5065,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 ) {
@@ -5118,7 +5131,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);
@@ -5218,6 +5231,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) {
@@ -5495,6 +5509,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
@@ -1737,6 +1737,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 {
@@ -1948,6 +1949,8 @@ struct xhci_driver_overrides { struct usb_host_endpoint *ep);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
@@ -2104,6 +2107,8 @@ int xhci_drop_endpoint(struct usb_hcd *hcd, struct usb_device *udev, struct usb_host_endpoint *ep);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
@@ -814,7 +814,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
@@ -60,6 +60,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
@@ -418,6 +418,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)
@@ -444,10 +456,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 ;
@@ -484,10 +493,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 ) {
drivers/usb/typec/tcpm/tcpm.c +3 -4
@@ -4527,14 +4527,13 @@ static void run_state_machine(struct tcpm_port *port)tcpm_set_state (port,ready_state (port),0 );break ;case DR_SWAP_CHANGE_DR : -if (port->data_role ==TYPEC_HOST ) { -tcpm_unregister_altmodes (port); +tcpm_unregister_altmodes (port); +if (port->data_role ==TYPEC_HOST )tcpm_set_roles (port, true, port->pwr_role,TYPEC_DEVICE ); - }else { +else tcpm_set_roles (port, true, port->pwr_role,TYPEC_HOST ); - }tcpm_ams_finish (port);tcpm_set_state (port,ready_state (port),0 );break ;
drivers/vdpa/vdpa_user/vduse_dev.c +3 -0
@@ -1251,6 +1251,9 @@ static bool vduse_validate_config(struct vduse_dev_config *config)if (config->config_size >PAGE_SIZE )return false; +if (config->vq_num >0xffff ) +return false; +if (!device_is_allowed (config->device_id))return false;
drivers/video/fbdev/omap2/omapfb/dss/dsi.c +18 -10
@@ -1538,22 +1538,28 @@ static void dsi_dump_dsidev_irqs(struct platform_device *dsidev, {struct dsi_data *dsi =dsi_get_dsidrv_data (dsidev);unsigned long flags; -struct dsi_irq_stats stats; +struct dsi_irq_stats *stats; + + stats =kzalloc (sizeof (*stats),GFP_KERNEL ); +if (!stats) { +seq_printf (s,"out of memory\n" ); +return ; + }spin_lock_irqsave (&dsi->irq_stats_lock, flags); - stats = dsi->irq_stats; + *stats = dsi->irq_stats;memset (&dsi->irq_stats,0 ,sizeof (dsi->irq_stats)); dsi->irq_stats.last_reset = jiffies;spin_unlock_irqrestore (&dsi->irq_stats_lock, flags);seq_printf (s,"period %u ms\n" , -jiffies_to_msecs (jiffies - stats.last_reset)); +jiffies_to_msecs (jiffies - stats->last_reset)); -seq_printf (s,"irqs %d\n" , stats.irq_count); +seq_printf (s,"irqs %d\n" , stats->irq_count);#define PIS (x) \ - seq_printf(s, "%-20s %10d\n", #x, stats.dsi_irqs[ffs(DSI_IRQ_##x)-1]) + seq_printf(s, "%-20s %10d\n", #x, stats->dsi_irqs[ffs(DSI_IRQ_##x)-1])seq_printf (s,"-- DSI%d interrupts --\n" , dsi->module_id +1 );PIS (VC0 );
@@ -1577,10 +1583,10 @@ static void dsi_dump_dsidev_irqs(struct platform_device *dsidev,#define PIS (x) \ seq_printf(s, "%-20s %10d %10d %10d %10d\n", #x, \ - stats.vc_irqs[0][ffs(DSI_VC_IRQ_##x)-1], \ - stats.vc_irqs[1][ffs(DSI_VC_IRQ_##x)-1], \ - stats.vc_irqs[2][ffs(DSI_VC_IRQ_##x)-1], \ - stats.vc_irqs[3][ffs(DSI_VC_IRQ_##x)-1]); + stats->vc_irqs[0][ffs(DSI_VC_IRQ_##x)-1], \ + stats->vc_irqs[1][ffs(DSI_VC_IRQ_##x)-1], \ + stats->vc_irqs[2][ffs(DSI_VC_IRQ_##x)-1], \ + stats->vc_irqs[3][ffs(DSI_VC_IRQ_##x)-1]);seq_printf (s,"-- VC interrupts --\n" );PIS (CS );
@@ -1596,7 +1602,7 @@ static void dsi_dump_dsidev_irqs(struct platform_device *dsidev,#define PIS (x) \ seq_printf(s, "%-20s %10d\n", #x, \ - stats.cio_irqs[ffs(DSI_CIO_IRQ_##x)-1]); + stats->cio_irqs[ffs(DSI_CIO_IRQ_##x)-1]);seq_printf (s,"-- CIO interrupts --\n" );PIS (ERRSYNCESC1 );
@@ -1620,6 +1626,8 @@ static void dsi_dump_dsidev_irqs(struct platform_device *dsidev,PIS (ULPSACTIVENOT_ALL0 );PIS (ULPSACTIVENOT_ALL1 );#undef PIS + +kfree (stats); }static void dsi1_dump_irqs (struct seq_file *s)
drivers/virtio/virtio_pci_modern.c +1 -1
@@ -196,7 +196,7 @@ static struct virtqueue *setup_vq(struct virtio_pci_device *vp_dev,int err;if (index >=vp_modern_get_num_queues (mdev)) -return ERR_PTR (-ENOENT ); +return ERR_PTR (-EINVAL );/* Check if queue is either not available or already active. */ num =vp_modern_get_queue_size (mdev, index);
fs/btrfs/disk-io.c +8 -1
@@ -380,7 +380,14 @@ static int csum_one_extent_buffer(struct extent_buffer *eb)btrfs_print_tree (eb,0 );btrfs_err (fs_info,"block=%llu write time tree block corruption detected" , eb->start); -WARN_ON (IS_ENABLED (CONFIG_BTRFS_DEBUG )); +/* +* Be noisy if this is an extent buffer from a log tree. We don't abort +* a transaction in case there's a bad log tree extent buffer, we just +* fallback to a transaction commit. Still we want to know when there is +* a bad log tree extent buffer, as that may signal a bug somewhere. +*/ +WARN_ON (IS_ENABLED (CONFIG_BTRFS_DEBUG ) || +btrfs_header_owner (eb) ==BTRFS_TREE_LOG_OBJECTID );return ret; }
fs/btrfs/extent-tree.c +5 -2
@@ -1717,6 +1717,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; }
@@ -1955,8 +1960,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
@@ -3286,6 +3286,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)
@@ -3306,6 +3307,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);
@@ -3326,16 +3328,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/btrfs/tree-log.c +0 -2
@@ -3141,7 +3141,6 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, ret =0 ;if (ret) {blk_finish_plug (&plug); -btrfs_abort_transaction (trans, ret);btrfs_set_log_full_commit (trans);mutex_unlock (&root->log_mutex); goto out;
@@ -3273,7 +3272,6 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, goto out_wake_log_root; }else if (ret) {btrfs_set_log_full_commit (trans); -btrfs_abort_transaction (trans, ret);mutex_unlock (&log_root_tree->log_mutex); goto out_wake_log_root; }
fs/cifs/smb2pdu.c +9 -6
@@ -3999,12 +3999,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/eventfd.c +21 -16
@@ -43,21 +43,7 @@ struct eventfd_ctx {int id; }; -/** -* eventfd_signal - Adds @n to the eventfd counter. -* @ctx: [in] Pointer to the eventfd context. -* @n: [in] Value of the counter to be added to the eventfd internal counter. -* The value cannot be negative. -* -* This function is supposed to be called by the kernel in paths that do not -* allow sleeping. In this function we allow the counter to reach the ULLONG_MAX -* value, and we signal this as overflow condition by returning a EPOLLERR -* to poll(2). -* -* Returns the amount by which the counter was incremented. This will be less -* than @n if the counter has overflowed. -*/ -__u64 eventfd_signal (struct eventfd_ctx *ctx,__u64 n) +__u64 eventfd_signal_mask (struct eventfd_ctx *ctx,__u64 n,unsigned mask) {unsigned long flags;
@@ -78,12 +64,31 @@ __u64 eventfd_signal(struct eventfd_ctx *ctx, __u64 n) n =ULLONG_MAX - ctx->count; ctx->count += n;if (waitqueue_active (&ctx->wqh)) -wake_up_locked_poll (&ctx->wqh,EPOLLIN ); +wake_up_locked_poll (&ctx->wqh,EPOLLIN | mask); current->in_eventfd =0 ;spin_unlock_irqrestore (&ctx->wqh.lock, flags);return n; } + +/** +* eventfd_signal - Adds @n to the eventfd counter. +* @ctx: [in] Pointer to the eventfd context. +* @n: [in] Value of the counter to be added to the eventfd internal counter. +* The value cannot be negative. +* +* This function is supposed to be called by the kernel in paths that do not +* allow sleeping. In this function we allow the counter to reach the ULLONG_MAX +* value, and we signal this as overflow condition by returning a EPOLLERR +* to poll(2). +* +* Returns the amount by which the counter was incremented. This will be less +* than @n if the counter has overflowed. +*/ +__u64 eventfd_signal (struct eventfd_ctx *ctx,__u64 n) +{ +return eventfd_signal_mask (ctx, n,0 ); +}EXPORT_SYMBOL_GPL (eventfd_signal);static void eventfd_free_ctx (struct eventfd_ctx *ctx)
fs/eventpoll.c +10 -8
@@ -484,7 +484,8 @@ static inline void ep_set_busy_poll_napi_id(struct epitem *epi)*/ #ifdef CONFIG_DEBUG_LOCK_ALLOC -static void ep_poll_safewake (struct eventpoll *ep,struct epitem *epi) +static void ep_poll_safewake (struct eventpoll *ep,struct epitem *epi, +unsigned pollflags) {struct eventpoll *ep_src;unsigned long flags;
@@ -515,16 +516,17 @@ static void ep_poll_safewake(struct eventpoll *ep, struct epitem *epi) }spin_lock_irqsave_nested (&ep->poll_wait.lock, flags, nests); ep->nests = nests +1 ; -wake_up_locked_poll (&ep->poll_wait,EPOLLIN ); +wake_up_locked_poll (&ep->poll_wait,EPOLLIN | pollflags); ep->nests =0 ;spin_unlock_irqrestore (&ep->poll_wait.lock, flags); }#else -static void ep_poll_safewake (struct eventpoll *ep,struct epitem *epi) +static void ep_poll_safewake (struct eventpoll *ep,struct epitem *epi, +unsigned pollflags) { -wake_up_poll (&ep->poll_wait,EPOLLIN ); +wake_up_poll (&ep->poll_wait,EPOLLIN | pollflags); }#endif
@@ -735,7 +737,7 @@ static void ep_free(struct eventpoll *ep)/* We need to release all tasks waiting for these file */ if (waitqueue_active (&ep->poll_wait)) -ep_poll_safewake (ep,NULL ); +ep_poll_safewake (ep,NULL ,0 );/* * We need to lock this because we could be hit by
@@ -1201,7 +1203,7 @@ static int ep_poll_callback(wait_queue_entry_t *wait, unsigned mode, int sync, v/* We have to call this outside the lock */ if (pwake) -ep_poll_safewake (ep, epi); +ep_poll_safewake (ep, epi, pollflags &EPOLL_URING_WAKE );if (!(epi->event.events &EPOLLEXCLUSIVE )) ewake =1 ;
@@ -1546,7 +1548,7 @@ static int ep_insert(struct eventpoll *ep, const struct epoll_event *event,/* We have to call this outside the lock */ if (pwake) -ep_poll_safewake (ep,NULL ); +ep_poll_safewake (ep,NULL ,0 );return 0 ; }
@@ -1622,7 +1624,7 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi,/* We have to call this outside the lock */ if (pwake) -ep_poll_safewake (ep,NULL ); +ep_poll_safewake (ep,NULL ,0 );return 0 ; }
fs/f2fs/extent_cache.c +2 -1
@@ -415,7 +415,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/ntfs3/attrib.c +1 -1
@@ -1967,7 +1967,7 @@ int attr_punch_hole(struct ntfs_inode *ni, u64 vbo, u64 bytes, u32 *frame_size)return -ENOENT ;if (!attr_b->non_res) { -u32 data_size =le32_to_cpu (attr->res.data_size); +u32 data_size =le32_to_cpu (attr_b->res.data_size);u32 from, to;if (vbo > data_size)
fs/zonefs/super.c +22 -0
@@ -402,6 +402,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; }/*
@@ -765,6 +769,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 );trace_zonefs_file_dio_append (inode, size, ret);
include/linux/eventfd.h +7 -0
@@ -40,6 +40,7 @@ struct file *eventfd_fget(int fd);struct eventfd_ctx *eventfd_ctx_fdget (int fd);struct eventfd_ctx *eventfd_ctx_fileget (struct file *file);__u64 eventfd_signal (struct eventfd_ctx *ctx,__u64 n); +__u64 eventfd_signal_mask (struct eventfd_ctx *ctx,__u64 n,unsigned mask);int eventfd_ctx_remove_wait_queue (struct eventfd_ctx *ctx,wait_queue_entry_t *wait,__u64 *cnt);void eventfd_ctx_do_read (struct eventfd_ctx *ctx,__u64 *cnt);
@@ -66,6 +67,12 @@ static inline int eventfd_signal(struct eventfd_ctx *ctx, __u64 n)return -ENOSYS ; } +static inline int eventfd_signal_mask (struct eventfd_ctx *ctx,__u64 n, +unsigned mask) +{ +return -ENOSYS ; +} +static inline void eventfd_ctx_put (struct eventfd_ctx *ctx) {
include/linux/usb.h +3 -0
@@ -749,11 +749,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
@@ -96,7 +96,7 @@ struct btrfs_space_info; EM( FLUSH_DELALLOC_WAIT, "FLUSH_DELALLOC_WAIT") \ EM( FLUSH_DELALLOC_FULL, "FLUSH_DELALLOC_FULL") \ 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
@@ -479,7 +479,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) { \
include/uapi/linux/eventpoll.h +6 -0
@@ -41,6 +41,12 @@#define EPOLLMSG (__force __poll_t)0x00000400#define EPOLLRDHUP (__force __poll_t)0x00002000 +/* +* Internal flag - wakeup generated by io_uring, used to detect recursion back +* into the io_uring poll handler. +*/ +#define EPOLL_URING_WAKE ((__force __poll_t)(1U << 27)) +/* Set exclusive wakeup mode for the target file descriptor */ #define EPOLLEXCLUSIVE ((__force __poll_t)(1U << 28))
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 +187 -61
488 lines not on this page · raw message
kernel/bpf/offload.c +0 -3
@@ -216,9 +216,6 @@ static void __bpf_prog_offload_destroy(struct bpf_prog *prog)if (offload->dev_state) offload->offdev->ops->destroy (prog); -/* Make sure BPF_PROG_GET_NEXT_ID can't find this dead program */ -bpf_prog_free_id (prog, true); -list_del_init (&offload->offloads);kfree (offload); prog->aux->offload =NULL ;
kernel/bpf/syscall.c +2 -4
@@ -1695,7 +1695,7 @@ static void bpf_audit_prog(const struct bpf_prog *prog, unsigned int op)return ;if (audit_enabled ==AUDIT_OFF )return ; -if (op ==BPF_AUDIT_LOAD ) +if (!in_irq () && !irqs_disabled ()) ctx =audit_context (); ab =audit_log_start (ctx,GFP_ATOMIC ,AUDIT_BPF );if (unlikely (!ab))
@@ -1790,6 +1790,7 @@ static void bpf_prog_put_deferred(struct work_struct *work) prog = aux->prog;perf_event_bpf_event (prog,PERF_BPF_EVENT_PROG_UNLOAD ,0 );bpf_audit_prog (prog,BPF_AUDIT_UNLOAD ); +bpf_prog_free_id (prog, true);__bpf_prog_put_noref (prog, true); }
@@ -1798,9 +1799,6 @@ static void __bpf_prog_put(struct bpf_prog *prog, bool do_idr_lock)struct bpf_prog_aux *aux = prog->aux;if (atomic64_dec_and_test (&aux->refcnt)) { -/* bpf_prog_free_id() must be called first */ -bpf_prog_free_id (prog, do_idr_lock); -if (in_irq () ||irqs_disabled ()) {INIT_WORK (&aux->work, bpf_prog_put_deferred);schedule_work (&aux->work);
kernel/sys.c +2 -0
@@ -1575,6 +1575,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/hugetlb.c +35 -9
79 lines not on this page · raw message
mm/khugepaged.c +6 -8
@@ -1458,14 +1458,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)
@@ -1537,6 +1529,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);
@@ -1546,6 +1542,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
@@ -2074,7 +2074,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
@@ -2059,7 +2059,6 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name, ret =cfg80211_register_netdevice (ndev);if (ret) { -ieee80211_if_free (ndev);free_netdev (ndev);return ret; }
sound/pci/hda/patch_realtek.c +3 -0
@@ -9076,6 +9076,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x103c ,0x8aa3 ,"HP ProBook 450 G9 (MB 8AA1)" ,ALC236_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8aa8 ,"HP EliteBook 640 G9 (MB 8AA6)" ,ALC236_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8aab ,"HP EliteBook 650 G9 (MB 8AA9)" ,ALC236_FIXUP_HP_GPIO_LED ), +SND_PCI_QUIRK (0x103c ,0x8b5d ,"HP" ,ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF ), +SND_PCI_QUIRK (0x103c ,0x8b5e ,"HP" ,ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF ), +SND_PCI_QUIRK (0x103c ,0x8bf0 ,"HP" ,ALC236_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x1043 ,0x103e ,"ASUS X540SA" ,ALC256_FIXUP_ASUS_MIC ),SND_PCI_QUIRK (0x1043 ,0x103f ,"ASUS TX300" ,ALC282_FIXUP_ASUS_TX300 ), SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
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 )