Linux 6.5.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.5.11 kernel.
All users of the 6.5 kernel series must upgrade.
The updated 6.5.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.5.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/serial/rs485.yaml | 4 Makefile | 2 arch/arm64/boot/dts/freescale/imx93.dtsi | 4 arch/loongarch/include/asm/io.h | 5 arch/loongarch/include/asm/linkage.h | 8 arch/loongarch/include/asm/pgtable-bits.h | 4 arch/loongarch/kernel/entry.S | 4 arch/loongarch/kernel/genex.S | 16 arch/loongarch/kernel/setup.c | 10 arch/loongarch/mm/init.c | 9 arch/loongarch/mm/tlbex.S | 36 - arch/powerpc/kernel/head_85xx.S | 2 arch/powerpc/kernel/setup-common.c | 2 arch/powerpc/mm/mem.c | 1 arch/riscv/boot/dts/thead/th1520.dtsi | 1 arch/s390/boot/vmem.c | 7 drivers/ata/pata_parport/fit3.c | 14 drivers/ata/pata_parport/pata_parport.c | 68 ++ drivers/bluetooth/hci_bcm4377.c | 5 drivers/dma/ste_dma40.c | 1 drivers/firmware/efi/efi.c | 8 drivers/firmware/efi/libstub/x86-stub.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 5 drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c | 3 drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c | 3 drivers/gpu/drm/ttm/ttm_device.c | 8 drivers/hwtracing/coresight/coresight-tmc-etr.c | 3 drivers/input/mouse/synaptics.c | 1 drivers/input/rmi4/rmi_smbus.c | 50 +- drivers/irqchip/irq-riscv-intc.c | 10 drivers/irqchip/irq-stm32-exti.c | 1 drivers/media/i2c/ov8858.c | 10 drivers/misc/pci_endpoint_test.c | 4 drivers/net/can/flexcan/flexcan-core.c | 46 - drivers/net/can/flexcan/flexcan.h | 2 drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c | 11 drivers/net/ethernet/mellanox/mlx5/core/esw/bridge.c | 25 + drivers/net/ethernet/mellanox/mlx5/core/esw/bridge.h | 3 drivers/net/ethernet/mellanox/mlx5/core/esw/bridge_priv.h | 1 drivers/net/usb/r8152.c | 7 drivers/pci/quirks.c | 8 drivers/platform/mellanox/mlxbf-tmfifo.c | 21 drivers/power/supply/power_supply_core.c | 8 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 4 drivers/spi/spi-npcm-fiu.c | 5 drivers/tty/n_gsm.c | 2 drivers/tty/serial/8250/8250_pci.c | 327 +++++++++++++- drivers/tty/serial/serial_core.c | 2 drivers/usb/gadget/legacy/raw_gadget.c | 26 - drivers/usb/storage/unusual_cypress.h | 2 drivers/usb/typec/tcpm/tcpm.c | 5 drivers/video/fbdev/aty/atyfb_base.c | 4 drivers/video/fbdev/omap/omapfb_main.c | 4 drivers/video/fbdev/uvesafb.c | 2 fs/ceph/mds_client.c | 2 fs/ntfs3/attrib.c | 6 fs/ntfs3/attrlist.c | 15 fs/ntfs3/bitmap.c | 3 fs/ntfs3/dir.c | 6 fs/ntfs3/frecord.c | 8 fs/ntfs3/fslog.c | 6 fs/ntfs3/fsntfs.c | 13 fs/ntfs3/record.c | 68 ++ fs/ntfs3/super.c | 33 + include/drm/gpu_scheduler.h | 3 include/linux/pci_ids.h | 1 include/linux/power_supply.h | 2 include/sound/soc-dapm.h | 1 include/sound/soc.h | 2 io_uring/rw.c | 2 mm/mmap.c | 40 + net/netfilter/nf_tables_api.c | 50 +- net/netfilter/nfnetlink_log.c | 2 net/sched/cls_u32.c | 2 rust/kernel/types.rs | 21 sound/hda/intel-dsp-config.c | 6 sound/soc/codecs/da7219-aad.c | 11 sound/soc/codecs/rt5645.c | 2 sound/soc/codecs/tas2780.c | 2 sound/soc/codecs/tlv320adc3xxx.c | 4 sound/soc/fsl/fsl-asoc-card.c | 12 sound/soc/generic/simple-card.c | 6 sound/soc/intel/boards/sof_sdw.c | 10 sound/soc/soc-component.c | 1 sound/soc/soc-core.c | 20 sound/soc/soc-dapm.c | 12 sound/soc/sof/sof-pci-dev.c | 7 sound/usb/quirks.c | 2 tools/perf/util/evlist.c | 5 tools/testing/selftests/netfilter/nft_audit.sh | 46 + 92 files changed, 972 insertions(+), 296 deletions(-)
Al Viro (2):
io_uring: kiocb_done() should *not* trust ->ki_pos if ->{read,write}_iter() failed
ceph_wait_on_conflict_unlink(): grab reference before dropping ->d_lockAlice Ryhl (1):
rust: make UnsafeCell the outer type in Opaque
Amadeusz Sławiński (1):
ASoC: core: Do not call link_exit() on uninitialized rtd objects
Andrey Konovalov (1):
usb: raw-gadget: properly handle interrupted requests
Antoine Gennart (1):
ASoC: tlv320adc3xxx: BUG: Correct micbias setting
Anup Patel (1):
irqchip/riscv-intc: Mark all INTC nodes as initialized
Arnd Bergmann (1):
fbdev: atyfb: only use ioremap_uc() on i386 and ia64
Badhri Jagan Sridharan (1):
usb: typec: tcpm: Add additional checks for contaminant
Ben Wolsieffer (1):
irqchip/stm32-exti: add missing DT IRQ flag translation
Benno Lossin (1):
rust: types: make Opaque be !Unpin
Cameron Williams (9):
tty: 8250: Remove UC-257 and UC-431
tty: 8250: Add support for additional Brainboxes UC cards
tty: 8250: Add support for Brainboxes UP cards
tty: 8250: Add support for Intashield IS-100
tty: 8250: Fix port count of PX-257
tty: 8250: Fix up PX-803/PX-857
tty: 8250: Add support for additional Brainboxes PX cards
tty: 8250: Add support for Intashield IX cards
tty: 8250: Add Brainboxes Oxford Semiconductor-based quirks
Christophe Leroy (1):
powerpc/85xx: Fix math emulation exception
Dan Carpenter (1):
fbdev: omapfb: fix some error codes
Daniel Starke (1):
tty: n_gsm: fix race condition in status line change on dead connections
David Rau (1):
ASoC: da7219: Correct the process of setting up Gnd switch in AAD
Dmitry Torokhov (1):
Input: synaptics-rmi4 - handle reset delay when using SMBus trsnsport
Douglas Anderson (2):
r8152: Check for unplug in rtl_phy_patch_request()
r8152: Check for unplug in r8153b_ups_en() / r8153c_ups_en()
Felix Kuehling (1):
drm/amdgpu: Reserve fences for VM update
Florian Westphal (1):
netfilter: nfnetlink_log: silence bogus compiler warning
Francesco Dolcini (1):
dt-bindings: serial: rs485: Add rs485-rts-active-high
Gabriel Marcano (1):
fs/ntfs3: Fix directory element type detection
Greg Kroah-Hartman (1):
Linux 6.5.11
Gustavo A. R. Silva (1):
net: sched: cls_u32: Fix allocation size in u32_init()
Haibo Chen (2):
arm64: dts: imx93: add the Flex-CAN stop mode by GPR
can: flexcan: remove the auto stop mode for IMX93
Huacai Chen (2):
LoongArch: Export symbol invalid_pud_table for modules building
LoongArch: Replace kmap_atomic() with kmap_local_page() in copy_user_highpage()
Ian Rogers (1):
perf evlist: Avoid frequency mode for the dummy event
Icenowy Zheng (1):
LoongArch: Disable WUC for pgprot_writecombine() like ioremap_wc()
Janne Grunau (1):
Bluetooth: hci_bcm4377: Mark bcm4378/bcm4387 as BROKEN_LE_CODED
Jimmy Hu (1):
usb: typec: tcpm: Fix NULL pointer dereference in tcpm_pd_svdm()
Jisheng Zhang (1):
riscv: dts: thead: set dma-noncoherent to soc bus
Jorge Maidana (1):
fbdev: uvesafb: Call cn_del_callback() at the end of uvesafb_exit()
Kai-Heng Feng (1):
power: supply: core: Use blocking_notifier_call_chain to avoid RCU complaint
Karolina Stolarek (1):
drm/ttm: Reorder sys manager cleanup step
Konstantin Komarov (9):
fs/ntfs3: Add ckeck in ni_update_parent()
fs/ntfs3: Write immediately updated ntfs state
fs/ntfs3: Use kvmalloc instead of kmalloc(... __GFP_NOWARN) fs/ntfs3: Add more attributes checks in mi_enum_attr() fs/ntfs3: Fix alternative boot searching
fs/ntfs3: Add more info into /proc/fs/ntfs3/<dev>/volinfo fs/ntfs3: Do not allow to change label if volume is read-only fs/ntfs3: Fix possible NULL-ptr-deref in ni_readpage_cmpr() fs/ntfs3: Fix NULL pointer dereference on error in attr_allocate_frame()
Krzysztof Kozlowski (1):
ASoC: soc-dapm: Add helper for comparing widget name
Kuan-Wei Chiu (1):
efi: fix memory leak in krealloc failure handling
Kuninori Morimoto (1):
ASoC: simple-card: fixup asoc_simple_probe() error handling
Liam R. Howlett (2):
mmap: fix vma_iterator in error path of vma_merge()
mmap: fix error paths with dup_anon_vma()
LihaSika (1):
usb: storage: set 1.50 as the lower bcdDevice for older "Super Top" compatibility
Liming Sun (1):
platform/mellanox: mlxbf-tmfifo: Fix a warning message
Luben Tuikov (2):
drm/amdgpu: Unset context priority is now invalid gpu/drm: Eliminate DRM_SCHED_PRIORITY_UNSET
Mark Hasemeyer (2):
ALSA: hda: intel-dsp-config: Fix JSL Chromebook quirk detection
ASoC: SOF: sof-pci-dev: Fix community key quirk detection
Max McCarthy (1):
ALSA: usb-audio: add quirk flag to enable native DSD for McIntosh devices
Michael Ellerman (1):
powerpc/mm: Fix boot crash with FLATMEM
Nicholas Kazlauskas (1):
drm/amd/display: Don't use fsleep for PSR exit waits
Nikolay Borisov (1):
x86/efistub: Don't try to print after ExitBootService()
Ondrej Jirman (1):
media: i2c: ov8858: Don't set fwnode in the driver
Ondrej Zary (2):
ata: pata_parport: add custom version of wait_after_reset
ata: pata_parport: fit3: implement IDE command set registers
Phil Sutter (1):
netfilter: nf_tables: audit log object reset once per table
Pierre-Louis Bossart (1):
ASoC: Intel: sof_sdw: add support for SKU 0B14
Roy Chateau (1):
ASoC: codecs: tas2780: Fix log of failed reset via I2C.
Shengjiu Wang (1):
ASoC: fsl-asoc-card: use integer type for fll_id and pll_id
Shuming Fan (1):
ASoC: rt5650: fix the wrong result of key button
Siddharth Vadapalli (1):
misc: pci_endpoint_test: Add deviceID for J721S2 PCIe EP device support
Su Hui (2):
fs/ntfs3: Avoid possible memory leak
net: chelsio: cxgb4: add an error code check in t4_load_phy_fw
Suzuki K Poulose (1):
coresight: tmc-etr: Disable warnings for allocation failures
Tiezhu Yang (1):
LoongArch: Use SYM_CODE_* to annotate exception handlers
Tomas Henzl (1):
scsi: mpt3sas: Fix in error path
Tony Lindgren (1):
serial: core: Fix runtime PM handling for pending tx
Vasily Gorbik (1):
s390/kasan: handle DCSS mapping in memory holes
Vicki Pfau (1):
PCI: Prevent xHCI driver from claiming AMD VanGogh USB3 DRD device
Vlad Buslov (1):
net/mlx5: Bridge, fix peer entry ageing in LAG mode
William A. Kennington III (1):
spi: npcm-fiu: Fix UMA reads when dummy.nbytes == 0
Zhang Shurong (1):
dmaengine: ste_dma40: Fix PM disable depth imbalance in d40_probe
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/serial/rs485.yaml +4 -0
@@ -29,6 +29,10 @@ properties: default: 0 maximum: 100 + rs485-rts-active-high: + description: drive RTS high when sending (this is the default). + $ref: /schemas/types.yaml#/definitions/flag + rs485-rts-active-low: description: drive RTS low when sending (default is high). $ref: /schemas/types.yaml#/definitions/flag
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 5 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm64/boot/dts/freescale/imx93.dtsi +3 -1
@@ -146,7 +146,7 @@ aips1: bus@44000000 { #size-cells = <1>; ranges; - anomix_ns_gpr: syscon@44210000 { + aonmix_ns_gpr: syscon@44210000 { compatible = "fsl,imx93-aonmix-ns-syscfg", "syscon"; reg = <0x44210000 0x1000>; };
@@ -280,6 +280,7 @@ flexcan1: can@443a0000 { assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>; assigned-clock-rates = <40000000>; fsl,clk-source = /bits/ 8 <0>; + fsl,stop-mode = <&aonmix_ns_gpr 0x14 0>; status = "disabled"; };
@@ -532,6 +533,7 @@ flexcan2: can@425b0000 { assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>; assigned-clock-rates = <40000000>; fsl,clk-source = /bits/ 8 <0>; + fsl,stop-mode = <&wakeupmix_gpr 0x0c 2>; status = "disabled"; };
arch/loongarch/include/asm/io.h +2 -3
@@ -54,10 +54,9 @@ static inline void __iomem *ioremap_prot(phys_addr_t offset, unsigned long size,* @offset: bus address of the memory * @size: size of the resource to map */ -extern pgprot_t pgprot_wc; -#define ioremap_wc (offset, size) \ - ioremap_prot((offset), (size), pgprot_val(pgprot_wc)) + ioremap_prot((offset), (size), \ + pgprot_val(wc_enabled ? PAGE_KERNEL_WUC : PAGE_KERNEL_SUC))#define ioremap_cache (offset, size) \ ioremap_prot((offset), (size), pgprot_val(PAGE_KERNEL))
arch/loongarch/include/asm/linkage.h +8 -0
@@ -33,4 +33,12 @@ .cfi_endproc; \ SYM_END(name, SYM_T_FUNC) +#define SYM_CODE_START (name) \ + SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN) \ + .cfi_startproc; + +#define SYM_CODE_END (name) \ + .cfi_endproc; \ + SYM_END(name, SYM_T_NONE) +#endif
arch/loongarch/include/asm/pgtable-bits.h +3 -1
@@ -105,13 +105,15 @@ static inline pgprot_t pgprot_noncached(pgprot_t _prot)return __pgprot (prot); } +extern bool wc_enabled; +#define pgprot_writecombine pgprot_writecombinestatic inline pgprot_t pgprot_writecombine (pgprot_t _prot) {unsigned long prot =pgprot_val (_prot); - prot = (prot & ~_CACHE_MASK) | _CACHE_WUC; + prot = (prot & ~_CACHE_MASK) | (wc_enabled ? _CACHE_WUC : _CACHE_SUC);return __pgprot (prot); }
arch/loongarch/kernel/entry.S +2 -2
@@ -18,7 +18,7 @@ .text .cfi_sections .debug_frame .align 5 -SYM_FUNC_START(handle_syscall) +SYM_CODE_START(handle_syscall) csrrd t0, PERCPU_BASE_KS la.pcrel t1, kernelsp add.d t1, t1, t0
@@ -66,7 +66,7 @@ SYM_FUNC_START(handle_syscall) bl do_syscall RESTORE_ALL_AND_RET -SYM_FUNC_END(handle_syscall) +SYM_CODE_END(handle_syscall) _ASM_NOKPROBE(handle_syscall) SYM_CODE_START(ret_from_fork)
arch/loongarch/kernel/genex.S +8 -8
@@ -31,7 +31,7 @@ SYM_FUNC_START(__arch_cpu_idle) 1: jr ra SYM_FUNC_END(__arch_cpu_idle) -SYM_FUNC_START(handle_vint) +SYM_CODE_START(handle_vint) BACKUP_T0T1 SAVE_ALL la_abs t1, __arch_cpu_idle
@@ -46,11 +46,11 @@ SYM_FUNC_START(handle_vint) la_abs t0, do_vint jirl ra, t0, 0 RESTORE_ALL_AND_RET -SYM_FUNC_END(handle_vint) +SYM_CODE_END(handle_vint) -SYM_FUNC_START(except_vec_cex) +SYM_CODE_START(except_vec_cex) b cache_parity_error -SYM_FUNC_END(except_vec_cex) +SYM_CODE_END(except_vec_cex) .macro build_prep_badv csrrd t0, LOONGARCH_CSR_BADV
@@ -66,7 +66,7 @@ SYM_FUNC_END(except_vec_cex) .macro BUILD_HANDLER exception handler prep .align 5 - SYM_FUNC_START(handle_\exception) + SYM_CODE_START(handle_\exception) 666: BACKUP_T0T1 SAVE_ALL
@@ -76,7 +76,7 @@ SYM_FUNC_END(except_vec_cex) jirl ra, t0, 0 668: RESTORE_ALL_AND_RET - SYM_FUNC_END(handle_\exception) + SYM_CODE_END(handle_\exception) SYM_DATA(unwind_hint_\exception, .word 668b - 666b) .endm
@@ -93,7 +93,7 @@ SYM_FUNC_END(except_vec_cex) BUILD_HANDLER watch watch none BUILD_HANDLER reserved reserved none /* others */ -SYM_FUNC_START(handle_sys) +SYM_CODE_START(handle_sys) la_abs t0, handle_syscall jr t0 -SYM_FUNC_END(handle_sys) +SYM_CODE_END(handle_sys)
arch/loongarch/kernel/setup.c +5 -5
@@ -161,19 +161,19 @@ static void __init smbios_parse(void) }#ifdef CONFIG_ARCH_WRITECOMBINE -pgprot_t pgprot_wc =PAGE_KERNEL_WUC ; +bool wc_enabled = true;#else -pgprot_t pgprot_wc =PAGE_KERNEL_SUC ; +bool wc_enabled = false;#endif -EXPORT_SYMBOL (pgprot_wc); +EXPORT_SYMBOL (wc_enabled);static int __init setup_writecombine (char *p) {if (!strcmp (p,"on" )) - pgprot_wc =PAGE_KERNEL_WUC ; + wc_enabled = true;else if (!strcmp (p,"off" )) - pgprot_wc =PAGE_KERNEL_SUC ; + wc_enabled = false;else pr_warn ("Unknown writecombine setting \"%s\".\n" , p);
arch/loongarch/mm/init.c +5 -4
@@ -68,11 +68,11 @@ void copy_user_highpage(struct page *to, struct page *from, {void *vfrom, *vto; - vto =kmap_atomic (to); - vfrom =kmap_atomic (from); + vfrom =kmap_local_page (from); + vto =kmap_local_page (to);copy_page (vto, vfrom); -kunmap_atomic (vfrom); -kunmap_atomic (vto); +kunmap_local (vfrom); +kunmap_local (vto);/* Make sure this page is cleared on other CPU's too before using it */ smp_wmb (); }
@@ -267,6 +267,7 @@ pgd_t swapper_pg_dir[_PTRS_PER_PGD] __section(".bss..swapper_pg_dir"); pgd_t invalid_pg_dir[_PTRS_PER_PGD] __page_aligned_bss;#ifndef __PAGETABLE_PUD_FOLDED pud_t invalid_pud_table[PTRS_PER_PUD] __page_aligned_bss; +EXPORT_SYMBOL (invalid_pud_table);#endif #ifndef __PAGETABLE_PMD_FOLDED pmd_t invalid_pmd_table[PTRS_PER_PMD] __page_aligned_bss;
arch/loongarch/mm/tlbex.S +18 -18
@@ -17,7 +17,7 @@ #define PTRS_PER_PTE_BITS (PAGE_SHIFT - 3) .macro tlb_do_page_fault, write - SYM_FUNC_START(tlb_do_page_fault_\write) + SYM_CODE_START(tlb_do_page_fault_\write) SAVE_ALL csrrd a2, LOONGARCH_CSR_BADV move a0, sp
@@ -25,13 +25,13 @@ li.w a1, \write bl do_page_fault RESTORE_ALL_AND_RET - SYM_FUNC_END(tlb_do_page_fault_\write) + SYM_CODE_END(tlb_do_page_fault_\write) .endm tlb_do_page_fault 0 tlb_do_page_fault 1 -SYM_FUNC_START(handle_tlb_protect) +SYM_CODE_START(handle_tlb_protect) BACKUP_T0T1 SAVE_ALL move a0, sp
@@ -41,9 +41,9 @@ SYM_FUNC_START(handle_tlb_protect) la_abs t0, do_page_fault jirl ra, t0, 0 RESTORE_ALL_AND_RET -SYM_FUNC_END(handle_tlb_protect) +SYM_CODE_END(handle_tlb_protect) -SYM_FUNC_START(handle_tlb_load) +SYM_CODE_START(handle_tlb_load) csrwr t0, EXCEPTION_KS0 csrwr t1, EXCEPTION_KS1 csrwr ra, EXCEPTION_KS2
@@ -187,16 +187,16 @@ nopage_tlb_load: csrrd ra, EXCEPTION_KS2 la_abs t0, tlb_do_page_fault_0 jr t0 -SYM_FUNC_END(handle_tlb_load) +SYM_CODE_END(handle_tlb_load) -SYM_FUNC_START(handle_tlb_load_ptw) +SYM_CODE_START(handle_tlb_load_ptw) csrwr t0, LOONGARCH_CSR_KS0 csrwr t1, LOONGARCH_CSR_KS1 la_abs t0, tlb_do_page_fault_0 jr t0 -SYM_FUNC_END(handle_tlb_load_ptw) +SYM_CODE_END(handle_tlb_load_ptw) -SYM_FUNC_START(handle_tlb_store) +SYM_CODE_START(handle_tlb_store) csrwr t0, EXCEPTION_KS0 csrwr t1, EXCEPTION_KS1 csrwr ra, EXCEPTION_KS2
@@ -343,16 +343,16 @@ nopage_tlb_store: csrrd ra, EXCEPTION_KS2 la_abs t0, tlb_do_page_fault_1 jr t0 -SYM_FUNC_END(handle_tlb_store) +SYM_CODE_END(handle_tlb_store) -SYM_FUNC_START(handle_tlb_store_ptw) +SYM_CODE_START(handle_tlb_store_ptw) csrwr t0, LOONGARCH_CSR_KS0 csrwr t1, LOONGARCH_CSR_KS1 la_abs t0, tlb_do_page_fault_1 jr t0 -SYM_FUNC_END(handle_tlb_store_ptw) +SYM_CODE_END(handle_tlb_store_ptw) -SYM_FUNC_START(handle_tlb_modify) +SYM_CODE_START(handle_tlb_modify) csrwr t0, EXCEPTION_KS0 csrwr t1, EXCEPTION_KS1 csrwr ra, EXCEPTION_KS2
@@ -497,16 +497,16 @@ nopage_tlb_modify: csrrd ra, EXCEPTION_KS2 la_abs t0, tlb_do_page_fault_1 jr t0 -SYM_FUNC_END(handle_tlb_modify) +SYM_CODE_END(handle_tlb_modify) -SYM_FUNC_START(handle_tlb_modify_ptw) +SYM_CODE_START(handle_tlb_modify_ptw) csrwr t0, LOONGARCH_CSR_KS0 csrwr t1, LOONGARCH_CSR_KS1 la_abs t0, tlb_do_page_fault_1 jr t0 -SYM_FUNC_END(handle_tlb_modify_ptw) +SYM_CODE_END(handle_tlb_modify_ptw) -SYM_FUNC_START(handle_tlb_refill) +SYM_CODE_START(handle_tlb_refill) csrwr t0, LOONGARCH_CSR_TLBRSAVE csrrd t0, LOONGARCH_CSR_PGD lddir t0, t0, 3
@@ -521,4 +521,4 @@ SYM_FUNC_START(handle_tlb_refill) tlbfill csrrd t0, LOONGARCH_CSR_TLBRSAVE ertn -SYM_FUNC_END(handle_tlb_refill) +SYM_CODE_END(handle_tlb_refill)
arch/powerpc/kernel/head_85xx.S +1 -1
@@ -396,7 +396,7 @@ interrupt_base: #ifdef CONFIG_PPC_FPU FP_UNAVAILABLE_EXCEPTION #else - EXCEPTION(0x0800, FP_UNAVAIL, FloatingPointUnavailable, unknown_exception) + EXCEPTION(0x0800, FP_UNAVAIL, FloatingPointUnavailable, emulation_assist_interrupt) #endif /* System Call Interrupt */
arch/powerpc/kernel/setup-common.c +2 -0
@@ -948,6 +948,8 @@ void __init setup_arch(char **cmdline_p)/* Parse memory topology */ mem_topology_setup (); +/* Set max_mapnr before paging_init() */ +set_max_mapnr (max_pfn);/* * Release secondary cpus out of their spinloops at 0x60 now that
arch/powerpc/mm/mem.c +0 -1
@@ -288,7 +288,6 @@ void __init mem_init(void)#endif high_memory = (void *)__va (max_low_pfn *PAGE_SIZE ); -set_max_mapnr (max_pfn);kasan_late_init ();
arch/riscv/boot/dts/thead/th1520.dtsi +1 -0
@@ -139,6 +139,7 @@ soc { interrupt-parent = <&plic>; #address-cells = <2>; #size-cells = <2>; + dma-noncoherent; ranges; plic: interrupt-controller@ffd8000000 {
arch/s390/boot/vmem.c +6 -1
@@ -57,6 +57,7 @@ static void kasan_populate_shadow(void)pmd_t pmd_z =__pmd (__pa (kasan_early_shadow_pte) | _SEGMENT_ENTRY);pud_t pud_z =__pud (__pa (kasan_early_shadow_pmd) | _REGION3_ENTRY);p4d_t p4d_z =__p4d (__pa (kasan_early_shadow_pud) | _REGION2_ENTRY); +unsigned long memgap_start =0 ;unsigned long untracked_end;unsigned long start, end;int i;
@@ -101,8 +102,12 @@ static void kasan_populate_shadow(void)* +- shadow end ----+---------+- shadow end ---+ */ -for_each_physmem_usable_range (i, &start, &end) +for_each_physmem_usable_range (i, &start, &end) {kasan_populate (start, end,POPULATE_KASAN_MAP_SHADOW ); +if (memgap_start && physmem_info.info_source ==MEM_DETECT_DIAG260 ) +kasan_populate (memgap_start, start,POPULATE_KASAN_ZERO_SHADOW ); + memgap_start = end; + }if (IS_ENABLED (CONFIG_KASAN_VMALLOC )) { untracked_end =VMALLOC_START ;/* shallowly populate kasan shadow for vmalloc and modules */
drivers/ata/pata_parport/fit3.c +2 -12
@@ -9,11 +9,6 @@* * The TD-2000 and certain older devices use a different protocol. * Try the fit2 protocol module with them. -* -* NB: The FIT adapters do not appear to support the control -* registers. So, we map ALT_STATUS to STATUS and NO-OP writes -* to the device control register - this means that IDE reset -* will not work on these devices. */ #include <linux/module.h>
@@ -37,8 +32,7 @@static void fit3_write_regr (struct pi_adapter *pi,int cont,int regr,int val) { -if (cont ==1 ) -return ; + regr += cont <<3 ;switch (pi->mode) {case 0 :
@@ -59,11 +53,7 @@ static int fit3_read_regr(struct pi_adapter *pi, int cont, int regr) {int a, b; -if (cont) { -if (regr !=6 ) -return 0xff ; - regr =7 ; - } + regr += cont <<3 ;switch (pi->mode) {case 0 :
drivers/ata/pata_parport/pata_parport.c +67 -1
80 lines not on this page · raw message
drivers/bluetooth/hci_bcm4377.c +5 -0
@@ -512,6 +512,7 @@ struct bcm4377_hw { unsigned long disable_aspm : 1; unsigned long broken_ext_scan : 1; unsigned long broken_mws_transport_config : 1; + unsigned long broken_le_coded : 1;int (*send_calibration)(struct bcm4377_data *bcm4377); int (*send_ptb)(struct bcm4377_data *bcm4377,
@@ -2372,6 +2373,8 @@ static int bcm4377_probe(struct pci_dev *pdev, const struct pci_device_id *id)set_bit (HCI_QUIRK_BROKEN_MWS_TRANSPORT_CONFIG , &hdev->quirks);if (bcm4377->hw->broken_ext_scan)set_bit (HCI_QUIRK_BROKEN_EXT_SCAN , &hdev->quirks); +if (bcm4377->hw->broken_le_coded) +set_bit (HCI_QUIRK_BROKEN_LE_CODED , &hdev->quirks);pci_set_drvdata (pdev, bcm4377);hci_set_drvdata (hdev, bcm4377);
@@ -2461,6 +2464,7 @@ static const struct bcm4377_hw bcm4377_hw_variants[] = { .bar0_core2_window2 = 0x18107000, .has_bar0_core2_window2 = true, .broken_mws_transport_config = true, + .broken_le_coded = true, .send_calibration = bcm4378_send_calibration, .send_ptb = bcm4378_send_ptb, },
@@ -2474,6 +2478,7 @@ static const struct bcm4377_hw bcm4377_hw_variants[] = { .has_bar0_core2_window2 = true, .clear_pciecfg_subsystem_ctrl_bit19 = true, .broken_mws_transport_config = true, + .broken_le_coded = true, .send_calibration = bcm4387_send_calibration, .send_ptb = bcm4378_send_ptb, },
drivers/dma/ste_dma40.c +1 -0
@@ -3668,6 +3668,7 @@ static int __init d40_probe(struct platform_device *pdev)regulator_disable (base->lcpa_regulator);regulator_put (base->lcpa_regulator); } +pm_runtime_disable (base->dev); report_failure:d40_err (dev,"probe failed\n" );
drivers/firmware/efi/efi.c +6 -2
@@ -273,9 +273,13 @@ static __init int efivar_ssdt_load(void)if (status ==EFI_NOT_FOUND ) {break ; }else if (status ==EFI_BUFFER_TOO_SMALL ) { - name =krealloc (name, name_size,GFP_KERNEL ); -if (!name) +efi_char16_t *name_tmp = +krealloc (name, name_size,GFP_KERNEL ); +if (!name_tmp) { +kfree (name);return -ENOMEM ; + } + name = name_tmp;continue ; }
drivers/firmware/efi/libstub/x86-stub.c +1 -4
@@ -648,11 +648,8 @@ setup_e820(struct boot_params *params, struct setup_data *e820ext, u32 e820ext_sbreak ;case EFI_UNACCEPTED_MEMORY : -if (!IS_ENABLED (CONFIG_UNACCEPTED_MEMORY )) { -efi_warn_once ( -"The system has unaccepted memory, but kernel does not support it\nConsider enabling CONFIG_UNACCEPTED_MEMORY\n" ); +if (!IS_ENABLED (CONFIG_UNACCEPTED_MEMORY ))continue ; - } e820_type =E820_TYPE_RAM ;process_unaccepted_memory (d->phys_addr, d->phys_addr +PAGE_SIZE * d->num_pages);
drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c +3 -2
@@ -47,7 +47,6 @@ const unsigned int amdgpu_ctx_num_entities[AMDGPU_HW_IP_NUM] = {bool amdgpu_ctx_priority_is_valid (int32_t ctx_prio) {switch (ctx_prio) { -case AMDGPU_CTX_PRIORITY_UNSET :case AMDGPU_CTX_PRIORITY_VERY_LOW :case AMDGPU_CTX_PRIORITY_LOW :case AMDGPU_CTX_PRIORITY_NORMAL :
@@ -55,6 +54,7 @@ bool amdgpu_ctx_priority_is_valid(int32_t ctx_prio)case AMDGPU_CTX_PRIORITY_VERY_HIGH :return true;default : +case AMDGPU_CTX_PRIORITY_UNSET :return false; } }
@@ -64,7 +64,8 @@ amdgpu_ctx_to_drm_sched_prio(int32_t ctx_prio) {switch (ctx_prio) {case AMDGPU_CTX_PRIORITY_UNSET : -return DRM_SCHED_PRIORITY_UNSET ; +pr_warn_once ("AMD-->DRM context priority value UNSET-->NORMAL" ); +return DRM_SCHED_PRIORITY_NORMAL ;case AMDGPU_CTX_PRIORITY_VERY_LOW :return DRM_SCHED_PRIORITY_MIN ;
drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c +4 -1
@@ -403,7 +403,10 @@ amdgpu_dma_buf_move_notify(struct dma_buf_attachment *attach)continue ; } - r =amdgpu_vm_clear_freed (adev, vm,NULL ); +/* Reserve fences for two SDMA page table updates */ + r =dma_resv_reserve_fences (resv,2 ); +if (!r) + r =amdgpu_vm_clear_freed (adev, vm,NULL );if (!r) r =amdgpu_vm_handle_moved (adev, vm);
drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c +2 -1
@@ -586,7 +586,8 @@ static void dcn10_dmcu_set_psr_enable(struct dmcu *dmcu, bool enable, bool wait)if (state ==PSR_STATE0 )break ; } -fsleep (500 ); +/* must *not* be fsleep - this can be called from high irq levels */ +udelay (500 ); }/* assert if max retry hit */
drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c +2 -1
@@ -216,7 +216,8 @@ static void dmub_psr_enable(struct dmub_psr *dmub, bool enable, bool wait, uint8break ; } -fsleep (500 ); +/* must *not* be fsleep - this can be called from high irq levels */ +udelay (500 ); }/* assert if max retry hit */
drivers/gpu/drm/ttm/ttm_device.c +4 -4
@@ -232,10 +232,6 @@ void ttm_device_fini(struct ttm_device *bdev)struct ttm_resource_manager *man;unsigned i; - man =ttm_manager_type (bdev,TTM_PL_SYSTEM ); -ttm_resource_manager_set_used (man, false); -ttm_set_driver_manager (bdev,TTM_PL_SYSTEM ,NULL ); -mutex_lock (&ttm_global_mutex);list_del (&bdev->device_list);mutex_unlock (&ttm_global_mutex);
@@ -243,6 +239,10 @@ void ttm_device_fini(struct ttm_device *bdev)drain_workqueue (bdev->wq);destroy_workqueue (bdev->wq); + man =ttm_manager_type (bdev,TTM_PL_SYSTEM ); +ttm_resource_manager_set_used (man, false); +ttm_set_driver_manager (bdev,TTM_PL_SYSTEM ,NULL ); +spin_lock (&bdev->lru_lock);for (i =0 ; i <TTM_MAX_BO_PRIORITY ; ++i)if (list_empty (&man->lru[0 ]))
drivers/hwtracing/coresight/coresight-tmc-etr.c +2 -1
@@ -610,7 +610,8 @@ static int tmc_etr_alloc_flat_buf(struct tmc_drvdata *drvdata, flat_buf->vaddr =dma_alloc_noncoherent (real_dev, etr_buf->size, &flat_buf->daddr, -DMA_FROM_DEVICE ,GFP_KERNEL ); +DMA_FROM_DEVICE , +GFP_KERNEL | __GFP_NOWARN);if (!flat_buf->vaddr) {kfree (flat_buf);return -ENOMEM ;
drivers/input/mouse/synaptics.c +1 -0
@@ -1753,6 +1753,7 @@ static int synaptics_create_intertouch(struct psmouse *psmouse,psmouse_matches_pnp_id (psmouse, topbuttonpad_pnp_ids) && !SYN_CAP_EXT_BUTTONS_STICK (info->ext_cap_10);const struct rmi_device_platform_data pdata = { + .reset_delay_ms =30 , .sensor_pdata = { .sensor_type = rmi_sensor_touchpad, .axis_align.flip_y = true,
drivers/input/rmi4/rmi_smbus.c +28 -22
76 lines not on this page · raw message
drivers/irqchip/irq-riscv-intc.c +9 -1
@@ -155,8 +155,16 @@ static int __init riscv_intc_init(struct device_node *node,* for each INTC DT node. We only need to do INTC initialization * for the INTC DT node belonging to boot CPU (or boot HART). */ -if (riscv_hartid_to_cpuid (hartid) !=smp_processor_id ()) +if (riscv_hartid_to_cpuid (hartid) !=smp_processor_id ()) { +/* +* The INTC nodes of each CPU are suppliers for downstream +* interrupt controllers (such as PLIC, IMSIC and APLIC +* direct-mode) so we should mark an INTC node as initialized +* if we are not creating IRQ domain for it. +*/ +fwnode_dev_initialized (of_fwnode_handle (node), true);return 0 ; + }return riscv_intc_init_common (of_node_to_fwnode (node)); }
drivers/irqchip/irq-stm32-exti.c +1 -0
@@ -459,6 +459,7 @@ static const struct irq_domain_ops irq_exti_domain_ops = { .map = irq_map_generic_chip, .alloc = stm32_exti_alloc, .free = stm32_exti_free, + .xlate = irq_domain_xlate_twocell, };static void stm32_irq_ack (struct irq_data *d)
drivers/media/i2c/ov8858.c +2 -8
@@ -1850,9 +1850,9 @@ static int ov8858_parse_of(struct ov8858 *ov8858) } ret =v4l2_fwnode_endpoint_parse (endpoint, &vep); +fwnode_handle_put (endpoint);if (ret) {dev_err (dev,"Failed to parse endpoint: %d\n" , ret); -fwnode_handle_put (endpoint);return ret; }
@@ -1864,12 +1864,9 @@ static int ov8858_parse_of(struct ov8858 *ov8858)default :dev_err (dev,"Unsupported number of data lanes %u\n" , ov8858->num_lanes); -fwnode_handle_put (endpoint);return -EINVAL ; } - ov8858->subdev.fwnode = endpoint; -return 0 ; }
@@ -1913,7 +1910,7 @@ static int ov8858_probe(struct i2c_client *client) ret =ov8858_init_ctrls (ov8858);if (ret) - goto err_put_fwnode; +return ret; sd = &ov8858->subdev; sd->flags |=V4L2_SUBDEV_FL_HAS_DEVNODE |V4L2_SUBDEV_FL_HAS_EVENTS ;
@@ -1964,8 +1961,6 @@ static int ov8858_probe(struct i2c_client *client)media_entity_cleanup (&sd->entity); err_free_handler:v4l2_ctrl_handler_free (&ov8858->ctrl_handler); -err_put_fwnode: -fwnode_handle_put (ov8858->subdev.fwnode);return ret; }
@@ -1978,7 +1973,6 @@ static void ov8858_remove(struct i2c_client *client)v4l2_async_unregister_subdev (sd);media_entity_cleanup (&sd->entity);v4l2_ctrl_handler_free (&ov8858->ctrl_handler); -fwnode_handle_put (ov8858->subdev.fwnode);pm_runtime_disable (&client->dev);if (!pm_runtime_status_suspended (&client->dev))
drivers/misc/pci_endpoint_test.c +4 -0
@@ -71,6 +71,7 @@#define PCI_DEVICE_ID_TI_AM654 0xb00c#define PCI_DEVICE_ID_TI_J7200 0xb00f#define PCI_DEVICE_ID_TI_AM64 0xb010 +#define PCI_DEVICE_ID_TI_J721S2 0xb013#define PCI_DEVICE_ID_LS1088A 0x80c0#define PCI_DEVICE_ID_IMX8 0x0808
@@ -999,6 +1000,9 @@ static const struct pci_device_id pci_endpoint_test_tbl[] = { { PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_AM64), .driver_data = (kernel_ulong_t)&j721e_data, }, + { PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_J721S2), + .driver_data = (kernel_ulong_t)&j721e_data, + }, { } };MODULE_DEVICE_TABLE (pci, pci_endpoint_test_tbl);
drivers/net/can/flexcan/flexcan-core.c +13 -33
87 lines not on this page · raw message
drivers/net/can/flexcan/flexcan.h +0 -2
@@ -68,8 +68,6 @@#define FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR BIT(15)/* Device supports RX via FIFO */ #define FLEXCAN_QUIRK_SUPPORT_RX_FIFO BIT(16) -/* auto enter stop mode to support wakeup */ -#define FLEXCAN_QUIRK_AUTO_STOP_MODE BIT(17)struct flexcan_devtype_data {u32 quirks;/* quirks needed for different IP cores */
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +2 -0
@@ -3816,6 +3816,8 @@ int t4_load_phy_fw(struct adapter *adap, int win, FW_PARAMS_PARAM_Z_V(FW_PARAMS_PARAM_DEV_PHYFW_DOWNLOAD)); ret =t4_set_params_timeout (adap, adap->mbox, adap->pf,0 ,1 , ¶m, &val,30000 ); +if (ret) +return ret;/* If we have version number support, then check to see that the new * firmware got loaded properly.
drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c +11 -0
@@ -463,6 +463,17 @@ static int mlx5_esw_bridge_switchdev_event(struct notifier_block *nb,/* only handle the event on peers */ if (mlx5_esw_bridge_is_local (dev, rep, esw))break ; + + fdb_info =container_of (info, + struct switchdev_notifier_fdb_info, + info); +/* Mark for deletion to prevent the update wq task from +* spuriously refreshing the entry which would mark it again as +* offloaded in SW bridge. After this fallthrough to regular +* async delete code. +*/ +mlx5_esw_bridge_fdb_mark_deleted (dev, vport_num, esw_owner_vhca_id, br_offloads, + fdb_info); fallthrough;case SWITCHDEV_FDB_ADD_TO_DEVICE :case SWITCHDEV_FDB_DEL_TO_DEVICE :
drivers/net/ethernet/mellanox/mlx5/core/esw/bridge.c +24 -1
@@ -1748,6 +1748,28 @@ void mlx5_esw_bridge_fdb_update_used(struct net_device *dev, u16 vport_num, u16 entry->lastuse = jiffies; } +void mlx5_esw_bridge_fdb_mark_deleted (struct net_device *dev,u16 vport_num,u16 esw_owner_vhca_id, +struct mlx5_esw_bridge_offloads *br_offloads, +struct switchdev_notifier_fdb_info *fdb_info) +{ +struct mlx5_esw_bridge_fdb_entry *entry; +struct mlx5_esw_bridge *bridge; + + bridge =mlx5_esw_bridge_from_port_lookup (vport_num, esw_owner_vhca_id, br_offloads); +if (!bridge) +return ; + + entry =mlx5_esw_bridge_fdb_lookup (bridge, fdb_info->addr, fdb_info->vid); +if (!entry) { +esw_debug (br_offloads->esw->dev, +"FDB mark deleted entry with specified key not found (MAC=%pM,vid=%u,vport=%u)\n" , + fdb_info->addr, fdb_info->vid, vport_num); +return ; + } + + entry->flags |=MLX5_ESW_BRIDGE_FLAG_DELETED ; +} +void mlx5_esw_bridge_fdb_create (struct net_device *dev,u16 vport_num,u16 esw_owner_vhca_id,struct mlx5_esw_bridge_offloads *br_offloads,struct switchdev_notifier_fdb_info *fdb_info)
@@ -1810,7 +1832,8 @@ void mlx5_esw_bridge_update(struct mlx5_esw_bridge_offloads *br_offloads)unsigned long lastuse = (unsigned long )mlx5_fc_query_lastuse (entry->ingress_counter); -if (entry->flags &MLX5_ESW_BRIDGE_FLAG_ADDED_BY_USER ) +if (entry->flags & (MLX5_ESW_BRIDGE_FLAG_ADDED_BY_USER | +MLX5_ESW_BRIDGE_FLAG_DELETED ))continue ;if (time_after (lastuse, entry->lastuse))
drivers/net/ethernet/mellanox/mlx5/core/esw/bridge.h +3 -0
@@ -62,6 +62,9 @@ int mlx5_esw_bridge_vport_peer_unlink(struct net_device *br_netdev, u16 vport_nuvoid mlx5_esw_bridge_fdb_update_used (struct net_device *dev,u16 vport_num,u16 esw_owner_vhca_id,struct mlx5_esw_bridge_offloads *br_offloads,struct switchdev_notifier_fdb_info *fdb_info); +void mlx5_esw_bridge_fdb_mark_deleted (struct net_device *dev,u16 vport_num,u16 esw_owner_vhca_id, +struct mlx5_esw_bridge_offloads *br_offloads, +struct switchdev_notifier_fdb_info *fdb_info);void mlx5_esw_bridge_fdb_create (struct net_device *dev,u16 vport_num,u16 esw_owner_vhca_id,struct mlx5_esw_bridge_offloads *br_offloads,struct switchdev_notifier_fdb_info *fdb_info);
drivers/net/ethernet/mellanox/mlx5/core/esw/bridge_priv.h +1 -0
@@ -133,6 +133,7 @@ struct mlx5_esw_bridge_mdb_key {enum {MLX5_ESW_BRIDGE_FLAG_ADDED_BY_USER =BIT (0 ),MLX5_ESW_BRIDGE_FLAG_PEER =BIT (1 ), +MLX5_ESW_BRIDGE_FLAG_DELETED =BIT (2 ), };enum {
drivers/net/usb/r8152.c +7 -0
@@ -3656,6 +3656,8 @@ static void r8153b_ups_en(struct r8152 *tp, bool enable)int i;for (i =0 ; i <500 ; i++) { +if (test_bit (RTL8152_UNPLUG , &tp->flags)) +return ;if (ocp_read_word (tp,MCU_TYPE_PLA ,PLA_BOOT_CTRL ) &AUTOLOAD_DONE )break ;
@@ -3696,6 +3698,8 @@ static void r8153c_ups_en(struct r8152 *tp, bool enable)int i;for (i =0 ; i <500 ; i++) { +if (test_bit (RTL8152_UNPLUG , &tp->flags)) +return ;if (ocp_read_word (tp,MCU_TYPE_PLA ,PLA_BOOT_CTRL ) &AUTOLOAD_DONE )break ;
@@ -4059,6 +4063,9 @@ static int rtl_phy_patch_request(struct r8152 *tp, bool request, bool wait)for (i =0 ; wait && i <5000 ; i++) {u32 ocp_data; +if (test_bit (RTL8152_UNPLUG , &tp->flags)) +break ; +usleep_range (1000 ,2000 ); ocp_data =ocp_reg_read (tp,OCP_PHY_PATCH_STAT );if ((ocp_data &PATCH_READY ) ^ check)
drivers/pci/quirks.c +5 -3
@@ -688,7 +688,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS100, quirk_ati_/* * In the AMD NL platform, this device ([1022:7912]) has a class code of * PCI_CLASS_SERIAL_USB_XHCI (0x0c0330), which means the xhci driver will -* claim it. +* claim it. The same applies on the VanGogh platform device ([1022:163a]). * * But the dwc3 driver is a more specific driver for this device, and we'd * prefer to use it instead of xhci. To prevent xhci from claiming the
@@ -696,7 +696,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS100, quirk_ati_* defines as "USB device (not host controller)". The dwc3 driver can then * claim it based on its Vendor and Device ID. */ -static void quirk_amd_nl_class (struct pci_dev *pdev) +static void quirk_amd_dwc_class (struct pci_dev *pdev) {u32 class = pdev->class;
@@ -706,7 +706,9 @@ static void quirk_amd_nl_class(struct pci_dev *pdev) class, pdev->class); }DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_AMD ,PCI_DEVICE_ID_AMD_NL_USB , - quirk_amd_nl_class); + quirk_amd_dwc_class); +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_AMD ,PCI_DEVICE_ID_AMD_VANGOGH_USB , + quirk_amd_dwc_class);/* * Synopsys USB 3.x host HAPS platform has a class code of
drivers/platform/mellanox/mlxbf-tmfifo.c +11 -10
@@ -607,24 +607,25 @@ static void mlxbf_tmfifo_rxtx_word(struct mlxbf_tmfifo_vring *vring,if (vring->cur_len +sizeof (u64) <= len) {/* The whole word. */ -if (!IS_VRING_DROP (vring)) { -if (is_rx) +if (is_rx) { +if (!IS_VRING_DROP (vring))memcpy (addr + vring->cur_len, &data,sizeof (u64)); -else -memcpy (&data, addr + vring->cur_len, -sizeof (u64)); + }else { +memcpy (&data, addr + vring->cur_len, +sizeof (u64)); } vring->cur_len +=sizeof (u64); }else {/* Leftover bytes. */ -if (!IS_VRING_DROP (vring)) { -if (is_rx) +if (is_rx) { +if (!IS_VRING_DROP (vring))memcpy (addr + vring->cur_len, &data, len - vring->cur_len); -else -memcpy (&data, addr + vring->cur_len, - len - vring->cur_len); + }else { + data =0 ; +memcpy (&data, addr + vring->cur_len, + len - vring->cur_len); } vring->cur_len = len; }
drivers/power/supply/power_supply_core.c +4 -4
@@ -29,7 +29,7 @@struct class *power_supply_class;EXPORT_SYMBOL_GPL (power_supply_class); -ATOMIC_NOTIFIER_HEAD (power_supply_notifier); +BLOCKING_NOTIFIER_HEAD (power_supply_notifier);EXPORT_SYMBOL_GPL (power_supply_notifier);static struct device_type power_supply_dev_type;
@@ -97,7 +97,7 @@ static void power_supply_changed_work(struct work_struct *work)class_for_each_device (power_supply_class,NULL , psy, __power_supply_changed_work);power_supply_update_leds (psy); -atomic_notifier_call_chain (&power_supply_notifier, +blocking_notifier_call_chain (&power_supply_notifier,PSY_EVENT_PROP_CHANGED , psy);kobject_uevent (&psy->dev.kobj,KOBJ_CHANGE );spin_lock_irqsave (&psy->changed_lock, flags);
@@ -1262,13 +1262,13 @@ static void power_supply_dev_release(struct device *dev)int power_supply_reg_notifier (struct notifier_block *nb) { -return atomic_notifier_chain_register (&power_supply_notifier, nb); +return blocking_notifier_chain_register (&power_supply_notifier, nb); }EXPORT_SYMBOL_GPL (power_supply_reg_notifier);void power_supply_unreg_notifier (struct notifier_block *nb) { -atomic_notifier_chain_unregister (&power_supply_notifier, nb); +blocking_notifier_chain_unregister (&power_supply_notifier, nb); }EXPORT_SYMBOL_GPL (power_supply_unreg_notifier);
drivers/scsi/mpt3sas/mpt3sas_scsih.c +3 -1
@@ -12913,8 +12913,10 @@ _mpt3sas_init(void)mpt3sas_ctl_init (hbas_to_enumerate); error =pci_register_driver (&mpt3sas_driver); -if (error) +if (error) { +mpt3sas_ctl_exit (hbas_to_enumerate);scsih_exit (); + }return error; }
drivers/spi/spi-npcm-fiu.c +3 -2
@@ -353,8 +353,9 @@ static int npcm_fiu_uma_read(struct spi_mem *mem, uma_cfg |=ilog2 (op->cmd.buswidth); uma_cfg |=ilog2 (op->addr.buswidth) <<NPCM_FIU_UMA_CFG_ADBPCK_SHIFT ; - uma_cfg |=ilog2 (op->dummy.buswidth) - <<NPCM_FIU_UMA_CFG_DBPCK_SHIFT ; +if (op->dummy.nbytes) + uma_cfg |=ilog2 (op->dummy.buswidth) + <<NPCM_FIU_UMA_CFG_DBPCK_SHIFT ; uma_cfg |=ilog2 (op->data.buswidth) <<NPCM_FIU_UMA_CFG_RDBPCK_SHIFT ; uma_cfg |= op->dummy.nbytes <<NPCM_FIU_UMA_CFG_DBSIZ_SHIFT ;
drivers/tty/n_gsm.c +2 -0
@@ -4058,6 +4058,8 @@ static int gsm_modem_upd_via_msc(struct gsm_dlci *dlci, u8 brk)static int gsm_modem_update (struct gsm_dlci *dlci,u8 brk) { +if (dlci->gsm->dead) +return -EL2HLT ;if (dlci->adaption ==2 ) {/* Send convergence layer type 2 empty data frame. */ gsm_modem_upd_via_data (dlci, brk);
drivers/tty/serial/8250/8250_pci.c +320 -7
413 lines not on this page · raw message
drivers/tty/serial/serial_core.c +1 -1
@@ -147,7 +147,7 @@ static void __uart_start(struct tty_struct *tty)/* Increment the runtime PM usage count for the active check below */ err =pm_runtime_get (&port_dev->dev); -if (err <0 ) { +if (err <0 && err != -EINPROGRESS ) {pm_runtime_put_noidle (&port_dev->dev);return ; }
drivers/usb/gadget/legacy/raw_gadget.c +16 -10
@@ -663,12 +663,12 @@ static int raw_process_ep0_io(struct raw_dev *dev, struct usb_raw_ep_io *io,if (WARN_ON (in && dev->ep0_out_pending)) { ret = -ENODEV ; dev->state =STATE_DEV_FAILED ; - goto out_done; + goto out_unlock; }if (WARN_ON (!in && dev->ep0_in_pending)) { ret = -ENODEV ; dev->state =STATE_DEV_FAILED ; - goto out_done; + goto out_unlock; } dev->req->buf = data;
@@ -683,7 +683,7 @@ static int raw_process_ep0_io(struct raw_dev *dev, struct usb_raw_ep_io *io, "fail, usb_ep_queue returned %d\n", ret);spin_lock_irqsave (&dev->lock, flags); dev->state =STATE_DEV_FAILED ; - goto out_done; + goto out_queue_failed; } ret =wait_for_completion_interruptible (&dev->ep0_done);
@@ -692,13 +692,16 @@ static int raw_process_ep0_io(struct raw_dev *dev, struct usb_raw_ep_io *io,usb_ep_dequeue (dev->gadget->ep0, dev->req);wait_for_completion (&dev->ep0_done);spin_lock_irqsave (&dev->lock, flags); - goto out_done; +if (dev->ep0_status == -ECONNRESET ) + dev->ep0_status = -EINTR ; + goto out_interrupted; }spin_lock_irqsave (&dev->lock, flags); - ret = dev->ep0_status; -out_done: +out_interrupted: + ret = dev->ep0_status; +out_queue_failed: dev->ep0_urb_queued = false; out_unlock:spin_unlock_irqrestore (&dev->lock, flags);
@@ -1067,7 +1070,7 @@ static int raw_process_ep_io(struct raw_dev *dev, struct usb_raw_ep_io *io, "fail, usb_ep_queue returned %d\n", ret);spin_lock_irqsave (&dev->lock, flags); dev->state =STATE_DEV_FAILED ; - goto out_done; + goto out_queue_failed; } ret =wait_for_completion_interruptible (&done);
@@ -1076,13 +1079,16 @@ static int raw_process_ep_io(struct raw_dev *dev, struct usb_raw_ep_io *io,usb_ep_dequeue (ep->ep, ep->req);wait_for_completion (&done);spin_lock_irqsave (&dev->lock, flags); - goto out_done; +if (ep->status == -ECONNRESET ) + ep->status = -EINTR ; + goto out_interrupted; }spin_lock_irqsave (&dev->lock, flags); - ret = ep->status; -out_done: +out_interrupted: + ret = ep->status; +out_queue_failed: ep->urb_queued = false; out_unlock:spin_unlock_irqrestore (&dev->lock, flags);
drivers/usb/storage/unusual_cypress.h +1 -1
@@ -19,7 +19,7 @@ UNUSUAL_DEV( 0x04b4, 0x6831, 0x0000, 0x9999, "Cypress ISD-300LP", USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0), -UNUSUAL_DEV (0x14cd ,0x6116 ,0x0160 ,0x0160 , +UNUSUAL_DEV (0x14cd ,0x6116 ,0x0150 ,0x0160 ,"Super Top" ,"USB 2.0 SATA BRIDGE" , USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
drivers/usb/typec/tcpm/tcpm.c +5 -0
@@ -1625,6 +1625,9 @@ static int tcpm_pd_svdm(struct tcpm_port *port, struct typec_altmode *adev,if (PD_VDO_VID (p[0 ]) !=USB_SID_PD )break ; +if (IS_ERR_OR_NULL (port->partner)) +break ; +if (PD_VDO_SVDM_VER (p[0 ]) < svdm_version) {typec_partner_set_svdm_version (port->partner,PD_VDO_SVDM_VER (p[0 ]));
@@ -3970,6 +3973,8 @@ static void run_state_machine(struct tcpm_port *port) port->potential_contaminant = ((port->enter_state ==SRC_ATTACH_WAIT && port->state ==SRC_UNATTACHED ) || (port->enter_state ==SNK_ATTACH_WAIT && + port->state ==SNK_UNATTACHED ) || + (port->enter_state ==SNK_DEBOUNCED && port->state ==SNK_UNATTACHED )); port->enter_state = port->state;
drivers/video/fbdev/aty/atyfb_base.c +4 -0
@@ -3440,11 +3440,15 @@ static int atyfb_setup_generic(struct pci_dev *pdev, struct fb_info *info, } info->fix.mmio_start = raddr; +#if defined(__i386__) || defined(__ia64__)/* * By using strong UC we force the MTRR to never have an * effect on the MMIO region on both non-PAT and PAT systems. */ par->ati_regbase =ioremap_uc (info->fix.mmio_start,0x1000 ); +#else + par->ati_regbase =ioremap (info->fix.mmio_start,0x1000 ); +#endif if (par->ati_regbase ==NULL )return -ENOMEM ;
drivers/video/fbdev/omap/omapfb_main.c +2 -2
@@ -1648,13 +1648,13 @@ static int omapfb_do_probe(struct platform_device *pdev, } fbdev->int_irq =platform_get_irq (pdev,0 );if (fbdev->int_irq <0 ) { - r =ENXIO ; + r = -ENXIO ; goto cleanup; } fbdev->ext_irq =platform_get_irq (pdev,1 );if (fbdev->ext_irq <0 ) { - r =ENXIO ; + r = -ENXIO ; goto cleanup; }
drivers/video/fbdev/uvesafb.c +1 -1
@@ -1931,10 +1931,10 @@ static void uvesafb_exit(void) } } -cn_del_callback (&uvesafb_cn_id);driver_remove_file (&uvesafb_driver.driver, &driver_attr_v86d);platform_device_unregister (uvesafb_device);platform_driver_unregister (&uvesafb_driver); +cn_del_callback (&uvesafb_cn_id); }module_exit (uvesafb_exit);
fs/ceph/mds_client.c +1 -1
@@ -709,8 +709,8 @@ int ceph_wait_on_conflict_unlink(struct dentry *dentry)if (!d_same_name (udentry, pdentry, &dname)) goto next; + found =dget_dlock (udentry);spin_unlock (&udentry->d_lock); - found =dget (udentry);break ; next:spin_unlock (&udentry->d_lock);
fs/ntfs3/attrib.c +2 -4
@@ -1736,10 +1736,8 @@ int attr_allocate_frame(struct ntfs_inode *ni, CLST frame, size_t compr_size, le_b =NULL ; attr_b =ni_find_attr (ni,NULL , &le_b,ATTR_DATA ,NULL ,0 ,NULL , &mi_b); -if (!attr_b) { - err = -ENOENT ; - goto out; - } +if (!attr_b) +return -ENOENT ; attr = attr_b; le = le_b;
fs/ntfs3/attrlist.c +13 -2
@@ -52,7 +52,8 @@ int ntfs_load_attr_list(struct ntfs_inode *ni, struct ATTRIB *attr)if (!attr->non_res) { lsize =le32_to_cpu (attr->res.data_size); - le =kmalloc (al_aligned (lsize),GFP_NOFS | __GFP_NOWARN); +/* attr is resident: lsize < record_size (1K or 4K) */ + le =kvmalloc (al_aligned (lsize),GFP_KERNEL );if (!le) { err = -ENOMEM ; goto out;
@@ -80,7 +81,17 @@ int ntfs_load_attr_list(struct ntfs_inode *ni, struct ATTRIB *attr)if (err <0 ) goto out; - le =kmalloc (al_aligned (lsize),GFP_NOFS | __GFP_NOWARN); +/* attr is nonresident. +* The worst case: +* 1T (2^40) extremely fragmented file. +* cluster = 4K (2^12) => 2^28 fragments +* 2^9 fragments per one record => 2^19 records +* 2^5 bytes of ATTR_LIST_ENTRY per one record => 2^24 bytes. +* +* the result is 16M bytes per attribute list. +* Use kvmalloc to allocate in range [several Kbytes - dozen Mbytes] +*/ + le =kvmalloc (al_aligned (lsize),GFP_KERNEL );if (!le) { err = -ENOMEM ; goto out;
fs/ntfs3/bitmap.c +2 -1
@@ -659,7 +659,8 @@ int wnd_init(struct wnd_bitmap *wnd, struct super_block *sb, size_t nbits) wnd->bits_last = wbits; wnd->free_bits = -kcalloc (wnd->nwnd,sizeof (u16),GFP_NOFS | __GFP_NOWARN); +kvmalloc_array (wnd->nwnd,sizeof (u16),GFP_KERNEL | __GFP_ZERO); +if (!wnd->free_bits)return -ENOMEM ;
fs/ntfs3/dir.c +5 -1
@@ -309,7 +309,11 @@ static inline int ntfs_filldir(struct ntfs_sb_info *sbi, struct ntfs_inode *ni,return 0 ; } - dt_type = (fname->dup.fa &FILE_ATTRIBUTE_DIRECTORY ) ?DT_DIR :DT_REG ; +/* NTFS: symlinks are "dir + reparse" or "file + reparse" */ +if (fname->dup.fa &FILE_ATTRIBUTE_REPARSE_POINT ) + dt_type =DT_LNK ; +else + dt_type = (fname->dup.fa &FILE_ATTRIBUTE_DIRECTORY ) ?DT_DIR :DT_REG ;return !dir_emit (ctx, (s8 *)name, name_len, ino, dt_type); }
fs/ntfs3/frecord.c +7 -1
@@ -2148,7 +2148,7 @@ int ni_readpage_cmpr(struct ntfs_inode *ni, struct page *page)for (i =0 ; i < pages_per_frame; i++) { pg = pages[i]; -if (i == idx) +if (i == idx || !pg)continue ;unlock_page (pg);put_page (pg);
@@ -3208,6 +3208,12 @@ static bool ni_update_parent(struct ntfs_inode *ni, struct NTFS_DUP_INFO *dup,if (!fname || !memcmp (&fname->dup, dup,sizeof (fname->dup)))continue ; +/* Check simple case when parent inode equals current inode. */ +if (ino_get (&fname->home) == ni->vfs_inode.i_ino) { +ntfs_set_state (sbi,NTFS_DIRTY_ERROR ); +continue ; + } +/* ntfs_iget5 may sleep. */ dir =ntfs_iget5 (sb, &fname->home,NULL );if (IS_ERR (dir)) {
fs/ntfs3/fslog.c +4 -2
@@ -2168,8 +2168,10 @@ static int last_log_lsn(struct ntfs_log *log)if (!page) { page =kmalloc (log->page_size,GFP_NOFS ); -if (!page) -return -ENOMEM ; +if (!page) { + err = -ENOMEM ; + goto out; + } }/*
fs/ntfs3/fsntfs.c +3 -10
@@ -983,18 +983,11 @@ int ntfs_set_state(struct ntfs_sb_info *sbi, enum NTFS_DIRTY_FLAGS dirty)if (err)return err; -mark_inode_dirty (&ni->vfs_inode); +mark_inode_dirty_sync (&ni->vfs_inode);/* verify(!ntfs_update_mftmirr()); */ -/* -* If we used wait=1, sync_inode_metadata waits for the io for the -* inode to finish. It hangs when media is removed. -* So wait=0 is sent down to sync_inode_metadata -* and filemap_fdatawrite is used for the data blocks. -*/ - err =sync_inode_metadata (&ni->vfs_inode,0 ); -if (!err) - err =filemap_fdatawrite (ni->vfs_inode.i_mapping); +/* write mft record on disk. */ + err =_ni_write_inode (&ni->vfs_inode,1 );return err; }
fs/ntfs3/record.c +52 -16
121 lines not on this page · raw message
fs/ntfs3/super.c +25 -8
@@ -453,15 +453,23 @@ static struct proc_dir_entry *proc_info_root;* ntfs3.1 * cluster size * number of clusters +* total number of mft records +* number of used mft records ~= number of files + folders +* real state of ntfs "dirty"/"clean" +* current state of ntfs "dirty"/"clean" */ static int ntfs3_volinfo (struct seq_file *m,void *o) {struct super_block *sb = m->private;struct ntfs_sb_info *sbi = sb->s_fs_info; -seq_printf (m,"ntfs%d.%d\n%u\n%zu\n" , sbi->volume.major_ver, - sbi->volume.minor_ver, sbi->cluster_size, - sbi->used.bitmap.nbits); +seq_printf (m,"ntfs%d.%d\n%u\n%zu\n\%zu\n%zu\n%s\n%s\n" , + sbi->volume.major_ver, sbi->volume.minor_ver, + sbi->cluster_size, sbi->used.bitmap.nbits, + sbi->mft.bitmap.nbits, + sbi->mft.bitmap.nbits -wnd_zeroes (&sbi->mft.bitmap), + sbi->volume.real_dirty ?"dirty" :"clean" , + (sbi->volume.flags &VOLUME_FLAG_DIRTY ) ?"dirty" :"clean" );return 0 ; }
@@ -490,7 +498,12 @@ static ssize_t ntfs3_label_write(struct file *file, const char __user *buffer,struct super_block *sb =pde_data (file_inode (file));struct ntfs_sb_info *sbi = sb->s_fs_info;ssize_t ret = count; -u8 *label =kmalloc (count,GFP_NOFS ); +u8 *label; + +if (sb_rdonly (sb)) +return -EROFS ; + + label =kmalloc (count,GFP_NOFS );if (!label)return -ENOMEM ;
@@ -838,7 +851,7 @@ static int ntfs_init_from_boot(struct super_block *sb, u32 sector_size,struct ntfs_sb_info *sbi = sb->s_fs_info;int err;u32 mb, gb, boot_sector_size, sct_per_clst, record_size; -u64 sectors, clusters, mlcn, mlcn2; +u64 sectors, clusters, mlcn, mlcn2, dev_size0;struct NTFS_BOOT *boot;struct buffer_head *bh;struct MFT_REC *rec;
@@ -847,6 +860,9 @@ static int ntfs_init_from_boot(struct super_block *sb, u32 sector_size,u32 boot_off =0 ;const char *hint ="Primary boot" ; +/* Save original dev_size. Used with alternative boot. */ + dev_size0 = dev_size; + sbi->volume.blocks = dev_size >>PAGE_SHIFT ; bh =ntfs_bread (sb,0 );
@@ -1084,9 +1100,9 @@ static int ntfs_init_from_boot(struct super_block *sb, u32 sector_size, } out: -if (err == -EINVAL && !bh->b_blocknr && dev_size >PAGE_SHIFT ) { +if (err == -EINVAL && !bh->b_blocknr && dev_size0 >PAGE_SHIFT ) {u32 block_size =min_t (u32, sector_size,PAGE_SIZE ); -u64 lbo = dev_size -sizeof (*boot); +u64 lbo = dev_size0 -sizeof (*boot);/* * Try alternative boot (last sector)
@@ -1100,6 +1116,7 @@ static int ntfs_init_from_boot(struct super_block *sb, u32 sector_size, boot_off = lbo & (block_size -1 ); hint ="Alternative boot" ; + dev_size = dev_size0;/* restore original size. */ goto check_boot; }brelse (bh);
@@ -1388,7 +1405,7 @@ static int ntfs_fill_super(struct super_block *sb, struct fs_context *fc) } bytes = inode->i_size; - sbi->def_table = t =kmalloc (bytes,GFP_NOFS | __GFP_NOWARN); + sbi->def_table = t =kvmalloc (bytes,GFP_KERNEL );if (!t) { err = -ENOMEM ; goto put_inode_out;
include/drm/gpu_scheduler.h +1 -2
@@ -68,8 +68,7 @@ enum drm_sched_priority {DRM_SCHED_PRIORITY_HIGH ,DRM_SCHED_PRIORITY_KERNEL , -DRM_SCHED_PRIORITY_COUNT , - DRM_SCHED_PRIORITY_UNSET = -2 + DRM_SCHED_PRIORITY_COUNT };/* Used to chose between FIFO and RR jobs scheduling */
include/linux/pci_ids.h +1 -0
@@ -579,6 +579,7 @@#define PCI_DEVICE_ID_AMD_1AH_M00H_DF_F3 0x12c3#define PCI_DEVICE_ID_AMD_1AH_M20H_DF_F3 0x16fb#define PCI_DEVICE_ID_AMD_MI200_DF_F3 0x14d3 +#define PCI_DEVICE_ID_AMD_VANGOGH_USB 0x163a#define PCI_DEVICE_ID_AMD_CNB17H_F3 0x1703#define PCI_DEVICE_ID_AMD_LANCE 0x2000#define PCI_DEVICE_ID_AMD_LANCE_HOME 0x2001
include/linux/power_supply.h +1 -1
@@ -767,7 +767,7 @@ struct power_supply_battery_info {int bti_resistance_tolerance; }; -extern struct atomic_notifier_head power_supply_notifier; +extern struct blocking_notifier_head power_supply_notifier;extern int power_supply_reg_notifier (struct notifier_block *nb);extern void power_supply_unreg_notifier (struct notifier_block *nb);#if IS_ENABLED (CONFIG_POWER_SUPPLY )
include/sound/soc-dapm.h +1 -0
@@ -423,6 +423,7 @@ void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card);int snd_soc_dapm_update_dai (struct snd_pcm_substream *substream,struct snd_pcm_hw_params *params,struct snd_soc_dai *dai); +int snd_soc_dapm_widget_name_cmp (struct snd_soc_dapm_widget *widget,const char *s);/* dapm path setup */ int snd_soc_dapm_new_widgets (struct snd_soc_card *card);
include/sound/soc.h +2 -0
@@ -1125,6 +1125,8 @@ struct snd_soc_pcm_runtime { unsigned int pop_wait:1; unsigned int fe_compr:1; /* for Dynamic PCM */ +bool initialized; +int num_components;struct snd_soc_component *components[];/* CPU/Codec/Platform */ };
io_uring/rw.c +1 -1
@@ -332,7 +332,7 @@ static int kiocb_done(struct io_kiocb *req, ssize_t ret, struct io_rw *rw = io_kiocb_to_cmd(req, struct io_rw);unsigned final_ret =io_fixup_rw_res (req, ret); -if (req->flags &REQ_F_CUR_POS ) +if (ret >=0 && req->flags &REQ_F_CUR_POS ) req->file->f_pos = rw->kiocb.ki_pos;if (ret >=0 && (rw->kiocb.ki_complete == io_complete_rw)) {if (!__io_complete_rw_common (req, ret)) {
mm/mmap.c +30 -10
@@ -603,11 +603,12 @@ static inline void vma_complete(struct vma_prepare *vp,* dup_anon_vma() - Helper function to duplicate anon_vma * @dst: The destination VMA * @src: The source VMA +* @dup: Pointer to the destination VMA when successful. * * Returns: 0 on success. */ static inline int dup_anon_vma (struct vm_area_struct *dst, -struct vm_area_struct *src) +struct vm_area_struct *src,struct vm_area_struct **dup) {/* * Easily overlooked: when mprotect shifts the boundary, make sure the
@@ -615,9 +616,15 @@ static inline int dup_anon_vma(struct vm_area_struct *dst,* anon pages imported. */ if (src->anon_vma && !dst->anon_vma) { +int ret; +vma_start_write (dst); dst->anon_vma = src->anon_vma; -return anon_vma_clone (dst, src); + ret =anon_vma_clone (dst, src); +if (ret) +return ret; + + *dup = dst; }return 0 ;
@@ -644,6 +651,7 @@ int vma_expand(struct vma_iterator *vmi, struct vm_area_struct *vma, unsigned long start, unsigned long end, pgoff_t pgoff, struct vm_area_struct *next) { + struct vm_area_struct *anon_dup = NULL;bool remove_next = false;struct vma_prepare vp;
@@ -651,7 +659,7 @@ int vma_expand(struct vma_iterator *vmi, struct vm_area_struct *vma,int ret; remove_next = true; - ret =dup_anon_vma (vma, next); + ret =dup_anon_vma (vma, next, &anon_dup);if (ret)return ret; }
@@ -683,6 +691,8 @@ int vma_expand(struct vma_iterator *vmi, struct vm_area_struct *vma,return 0 ; nomem: +if (anon_dup) +unlink_anon_vmas (anon_dup);return -ENOMEM ; }
@@ -881,6 +891,7 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, {struct vm_area_struct *curr, *next, *res;struct vm_area_struct *vma, *adjust, *remove, *remove2; +struct vm_area_struct *anon_dup =NULL ;struct vma_prepare vp;pgoff_t vma_pgoff;int err =0 ;
@@ -945,16 +956,16 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, is_mergeable_anon_vma(prev->anon_vma, next->anon_vma, NULL)) { remove = next;/* case 1 */ vma_end = next->vm_end; - err =dup_anon_vma (prev, next); + err =dup_anon_vma (prev, next, &anon_dup);if (curr) {/* case 6 */ remove = curr; remove2 = next;if (!next->anon_vma) - err =dup_anon_vma (prev, curr); + err =dup_anon_vma (prev, curr, &anon_dup); } } else if (merge_prev) { /* case 2 */if (curr) { - err =dup_anon_vma (prev, curr); + err =dup_anon_vma (prev, curr, &anon_dup);if (end == curr->vm_end) {/* case 7 */ remove = curr; }else {/* case 5 */
@@ -968,7 +979,7 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, vma_end = addr; adjust = next; adj_start = -(prev->vm_end - addr); - err =dup_anon_vma (next, prev); + err =dup_anon_vma (next, prev, &anon_dup); }else {/* * Note that cases 3 and 8 are the ONLY ones where prev
@@ -981,17 +992,17 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm,if (curr) {/* case 8 */ vma_pgoff = curr->vm_pgoff; remove = curr; - err =dup_anon_vma (next, curr); + err =dup_anon_vma (next, curr, &anon_dup); } } }/* Error in anon_vma clone. */ if (err) -return NULL ; + goto anon_vma_fail;if (vma_iter_prealloc (vmi)) -return NULL ; + goto prealloc_fail;init_multi_vma_prep (&vp, vma, adjust, remove, remove2); VM_WARN_ON(vp.anon_vma && adjust && adjust->anon_vma &&
@@ -1024,6 +1035,15 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm,khugepaged_enter_vma (res, vm_flags);return res; + +prealloc_fail: +if (anon_dup) +unlink_anon_vmas (anon_dup); + +anon_vma_fail: +vma_iter_set (vmi, addr); +vma_iter_load (vmi); +return NULL ; }/*
net/netfilter/nf_tables_api.c +28 -22
89 lines not on this page · raw message
net/netfilter/nfnetlink_log.c +1 -1
@@ -700,8 +700,8 @@ nfulnl_log_packet(struct net *net,unsigned int plen =0 ;struct nfnl_log_net *log =nfnl_log_pernet (net);const struct nfnl_ct_hook *nfnl_ct =NULL ; +enum ip_conntrack_info ctinfo =0 ;struct nf_conn *ct =NULL ; -enum ip_conntrack_info ctinfo;if (li_user && li_user->type ==NF_LOG_TYPE_ULOG ) li = li_user;
net/sched/cls_u32.c +1 -1
@@ -366,7 +366,7 @@ static int u32_init(struct tcf_proto *tp)idr_init (&root_ht->handle_idr);if (tp_c ==NULL ) { - tp_c =kzalloc (struct_size (tp_c, hlist->ht,1 ),GFP_KERNEL ); + tp_c =kzalloc (sizeof (*tp_c),GFP_KERNEL );if (tp_c ==NULL ) {kfree (root_ht);return -ENOBUFS ;
rust/kernel/types.rs +15 -6
@@ -6,7 +6,7 @@use alloc::boxed::Box ;use core::{ cell::UnsafeCell , - marker::PhantomData , + marker::{PhantomData ,PhantomPinned }, mem::MaybeUninit , ops::{Deref ,DerefMut }, ptr::NonNull ,
@@ -206,17 +206,26 @@ fn drop(&mut self) {/// /// This is meant to be used with FFI objects that are never interpreted by Rust code. #[repr(transparent)] -pub struct Opaque <T >(MaybeUninit <UnsafeCell <T >>); +pub struct Opaque <T > { + value:UnsafeCell <MaybeUninit <T >>, + _pin:PhantomPinned , +}impl <T >Opaque <T > {/// Creates a new opaque value. pub const fn new (value:T ) ->Self { -Self (MaybeUninit ::new (UnsafeCell ::new (value))) +Self { + value:UnsafeCell ::new (MaybeUninit ::new (value)), + _pin:PhantomPinned , + } }/// Creates an uninitialised value. pub const fn uninit () ->Self { -Self (MaybeUninit ::uninit ()) +Self { + value:UnsafeCell ::new (MaybeUninit ::uninit ()), + _pin:PhantomPinned , + } }/// Creates a pin-initializer from the given initializer closure.
@@ -240,7 +249,7 @@ pub fn ffi_init(init_func: impl FnOnce(*mut T)) -> impl PinInit<Self> {/// Returns a raw pointer to the opaque data. pub fn get (&self) -> *mut T { -UnsafeCell ::raw_get (self.0 .as_ptr ()) +UnsafeCell ::get (&self.value).cast ::<T >() }/// Gets the value behind `this`.
@@ -248,7 +257,7 @@ pub fn get(&self) -> *mut T {/// This function is useful to get access to the value without creating intermediate /// references. pub const fn raw_get (this: *const Self ) -> *mut T { -UnsafeCell ::raw_get (this.cast ::<UnsafeCell <T >>()) +UnsafeCell ::raw_get (this.cast ::<UnsafeCell <MaybeUninit <T >>>()).cast ::<T >() } }
sound/hda/intel-dsp-config.c +6 -0
@@ -343,6 +343,12 @@ static const struct config_entry config_table[] = { DMI_MATCH(DMI_SYS_VENDOR, "Google"), } }, + { + .ident = "Google firmware", + .matches = { + DMI_MATCH(DMI_BIOS_VERSION, "Google"), + } + }, {} } },
sound/soc/codecs/da7219-aad.c +5 -6
@@ -59,9 +59,6 @@ static void da7219_aad_btn_det_work(struct work_struct *work)bool micbias_up = false;int retries =0 ; -/* Disable ground switch */ -snd_soc_component_update_bits (component,0xFB ,0x01 ,0x00 ); -/* Drive headphones/lineout */ snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, DA7219_HP_L_AMP_OE_MASK,
@@ -155,9 +152,6 @@ static void da7219_aad_hptest_work(struct work_struct *work) tonegen_freq_hptest =cpu_to_le16 (DA7219_AAD_HPTEST_RAMP_FREQ_INT_OSC ); } -/* Disable ground switch */ -snd_soc_component_update_bits (component,0xFB ,0x01 ,0x00 ); -/* Ensure gain ramping at fastest rate */ gain_ramp_ctrl =snd_soc_component_read (component,DA7219_GAIN_RAMP_CTRL );snd_soc_component_write (component,DA7219_GAIN_RAMP_CTRL ,DA7219_GAIN_RAMP_RATE_X8 );
@@ -421,6 +415,11 @@ static irqreturn_t da7219_aad_irq_thread(int irq, void *data)* handle a removal, and we can check at the end of * hptest if we have a valid result or not. */ + +cancel_delayed_work_sync (&da7219_aad->jack_det_work); +/* Disable ground switch */ +snd_soc_component_update_bits (component,0xFB ,0x01 ,0x00 ); +if (statusa &DA7219_JACK_TYPE_STS_MASK ) { report |=SND_JACK_HEADSET ; mask |=SND_JACK_HEADSET |SND_JACK_LINEOUT ;
sound/soc/codecs/rt5645.c +2 -0
@@ -3251,6 +3251,8 @@ int rt5645_set_jack_detect(struct snd_soc_component *component, RT5645_GP1_PIN_IRQ, RT5645_GP1_PIN_IRQ);regmap_update_bits (rt5645->regmap,RT5645_GEN_CTRL1 ,RT5645_DIG_GATE_CTRL ,RT5645_DIG_GATE_CTRL ); +regmap_update_bits (rt5645->regmap,RT5645_DEPOP_M1 , +RT5645_HP_CB_MASK ,RT5645_HP_CB_PU ); }rt5645_irq (0 , rt5645);
sound/soc/codecs/tas2780.c +1 -1
@@ -39,7 +39,7 @@ static void tas2780_reset(struct tas2780_priv *tas2780)usleep_range (2000 ,2050 ); } -snd_soc_component_write (tas2780->component,TAS2780_SW_RST , + ret =snd_soc_component_write (tas2780->component,TAS2780_SW_RST ,TAS2780_RST );if (ret) dev_err(tas2780->dev, "%s:errCode:0x%x Reset error!\n",
sound/soc/codecs/tlv320adc3xxx.c +2 -2
@@ -293,7 +293,7 @@#define ADC3XXX_BYPASS_RPGA 0x80/* MICBIAS control bits */ -#define ADC3XXX_MICBIAS_MASK 0x2 +#define ADC3XXX_MICBIAS_MASK 0x3#define ADC3XXX_MICBIAS1_SHIFT 5#define ADC3XXX_MICBIAS2_SHIFT 3
@@ -1099,7 +1099,7 @@ static int adc3xxx_parse_dt_micbias(struct adc3xxx *adc3xxx,unsigned int val;if (!of_property_read_u32 (np, propname, &val)) { -if (val >=ADC3XXX_MICBIAS_AVDD ) { +if (val >ADC3XXX_MICBIAS_AVDD ) {dev_err (dev,"Invalid property value for '%s'\n" , propname);return -EINVAL ; }
sound/soc/fsl/fsl-asoc-card.c +8 -4
@@ -52,8 +52,8 @@ struct codec_priv {unsigned long mclk_freq;unsigned long free_freq;u32 mclk_id; -u32 fll_id; -u32 pll_id; +int fll_id; +int pll_id; };/**
@@ -206,7 +206,7 @@ static int fsl_asoc_card_hw_params(struct snd_pcm_substream *substream, }/* Specific configuration for PLL */ -if (codec_priv->pll_id && codec_priv->fll_id) { +if (codec_priv->pll_id >=0 && codec_priv->fll_id >=0 ) {if (priv->sample_format ==SNDRV_PCM_FORMAT_S24_LE ) pll_out = priv->sample_rate *384 ;else
@@ -248,7 +248,7 @@ static int fsl_asoc_card_hw_free(struct snd_pcm_substream *substream) priv->streams &= ~BIT (substream->stream); -if (!priv->streams && codec_priv->pll_id && codec_priv->fll_id) { +if (!priv->streams && codec_priv->pll_id >=0 && codec_priv->fll_id >=0 ) {/* Force freq to be free_freq to avoid error message in codec */ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0), codec_priv->mclk_id,
@@ -621,6 +621,10 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) priv->card.dapm_routes = audio_map; priv->card.num_dapm_routes =ARRAY_SIZE (audio_map); priv->card.driver_name =DRIVER_NAME ; + + priv->codec_priv.fll_id =-1 ; + priv->codec_priv.pll_id =-1 ; +/* Diversify the card configurations */ if (of_device_is_compatible (np,"fsl,imx-audio-cs42888" )) { codec_dai_name ="cs42888" ;
sound/soc/generic/simple-card.c +4 -2
@@ -701,10 +701,12 @@ static int asoc_simple_probe(struct platform_device *pdev)struct snd_soc_dai_link *dai_link = priv->dai_link;struct simple_dai_props *dai_props = priv->dai_props; + ret = -EINVAL ; + cinfo = dev->platform_data;if (!cinfo) {dev_err (dev,"no info for asoc-simple-card\n" ); -return -EINVAL ; + goto err; } if (!cinfo->name ||
@@ -713,7 +715,7 @@ static int asoc_simple_probe(struct platform_device *pdev) !cinfo->platform || !cinfo->cpu_dai.name) {dev_err (dev,"insufficient asoc_simple_card_info settings\n" ); -return -EINVAL ; + goto err; } cpus = dai_link->cpus;
sound/soc/intel/boards/sof_sdw.c +10 -0
@@ -366,6 +366,16 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {/* No Jack */ .driver_data = (void *)SOF_SDW_TGL_HDMI, }, + { + .callback = sof_sdw_quirk_cb, + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Inc" ), + DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0B14"), + }, +/* No Jack */ + .driver_data = (void *)SOF_SDW_TGL_HDMI, + }, + { .callback = sof_sdw_quirk_cb, .matches = {
sound/soc/soc-component.c +1 -0
@@ -242,6 +242,7 @@ int snd_soc_component_notify_control(struct snd_soc_component *component,char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN ];struct snd_kcontrol *kctl; +/* When updating, change also snd_soc_dapm_widget_name_cmp() */ if (component->name_prefix)snprintf (name,ARRAY_SIZE (name),"%s %s" , component->name_prefix, ctl);else
sound/soc/soc-core.c +15 -5
@@ -1259,7 +1259,7 @@ static int soc_init_pcm_runtime(struct snd_soc_card *card,snd_soc_runtime_get_dai_fmt (rtd); ret =snd_soc_runtime_set_dai_fmt (rtd, dai_link->dai_fmt);if (ret) -return ret; + goto err;/* add DPCM sysfs entries */ soc_dpcm_debugfs_add (rtd);
@@ -1284,17 +1284,26 @@ static int soc_init_pcm_runtime(struct snd_soc_card *card,/* create compress_device if possible */ ret =snd_soc_dai_compress_new (cpu_dai, rtd, num);if (ret != -ENOTSUPP ) -return ret; + goto err;/* create the pcm */ ret =soc_new_pcm (rtd, num);if (ret <0 ) {dev_err (card->dev,"ASoC: can't create pcm %s :%d\n" , dai_link->stream_name, ret); -return ret; + goto err; } -return snd_soc_pcm_dai_new (rtd); + ret =snd_soc_pcm_dai_new (rtd); +if (ret <0 ) + goto err; + + rtd->initialized = true; + +return 0 ; +err: +snd_soc_link_exit (rtd); +return ret; } static void soc_set_name_prefix(struct snd_soc_card *card,
@@ -1892,7 +1901,8 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card)/* release machine specific resources */ for_each_card_rtds (card, rtd) -snd_soc_link_exit (rtd); +if (rtd->initialized) +snd_soc_link_exit (rtd);/* remove and free each DAI */ soc_remove_link_dais (card);soc_remove_link_components (card);
sound/soc/soc-dapm.c +12 -0
@@ -2726,6 +2726,18 @@ int snd_soc_dapm_update_dai(struct snd_pcm_substream *substream, }EXPORT_SYMBOL_GPL (snd_soc_dapm_update_dai); +int snd_soc_dapm_widget_name_cmp (struct snd_soc_dapm_widget *widget,const char *s) +{ +struct snd_soc_component *component =snd_soc_dapm_to_component (widget->dapm); +const char *wname = widget->name; + +if (component->name_prefix) + wname +=strlen (component->name_prefix) +1 ;/* plus space */ + +return strcmp (wname, s); +} +EXPORT_SYMBOL_GPL (snd_soc_dapm_widget_name_cmp); +/* * dapm_update_widget_flags() - Re-compute widget sink and source flags * @w: The widget for which to update the flags
sound/soc/sof/sof-pci-dev.c +7 -0
@@ -145,6 +145,13 @@ static const struct dmi_system_id community_key_platforms[] = { DMI_MATCH(DMI_PRODUCT_FAMILY, "Google"), } }, + { + .ident = "Google firmware", + .callback = chromebook_use_community_key, + .matches = { + DMI_MATCH(DMI_BIOS_VERSION, "Google"), + } + }, {}, };
sound/usb/quirks.c +2 -0
@@ -2220,6 +2220,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = { QUIRK_FLAG_DSD_RAW),VENDOR_FLG (0x2ab6 ,/* T+A devices */ QUIRK_FLAG_DSD_RAW ), +VENDOR_FLG (0x2afd ,/* McIntosh Laboratory, Inc. */ +QUIRK_FLAG_DSD_RAW ),VENDOR_FLG (0x2d87 ,/* Cayin device */ QUIRK_FLAG_DSD_RAW ), VENDOR_FLG(0x3336, /* HEM devices */
tools/perf/util/evlist.c +3 -2
@@ -251,6 +251,9 @@ static struct evsel *evlist__dummy_event(struct evlist *evlist) .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_DUMMY, .size = sizeof(attr), /* to capture ABI version */ + /* Avoid frequency mode for dummy events to avoid associated timers. */ + .freq = 0, + .sample_period = 1, };return evsel__new_idx (&attr, evlist->core.nr_entries);
@@ -277,8 +280,6 @@ struct evsel *evlist__add_aux_dummy(struct evlist *evlist, bool system_wide) evsel->core.attr.exclude_kernel =1 ; evsel->core.attr.exclude_guest =1 ; evsel->core.attr.exclude_hv =1 ; - evsel->core.attr.freq =0 ; - evsel->core.attr.sample_period =1 ; evsel->core.system_wide = system_wide; evsel->no_aux_samples = true; evsel->name =strdup ("dummy:u" );
tools/testing/selftests/netfilter/nft_audit.sh +46 -0
64 lines not on this page · raw message