diff --git a/linux/0001-rcn-linux-5.10.168-ti-r72.patch b/linux/0001-rcn-linux-5.10.168-ti-rt-r72.patch similarity index 94% rename from linux/0001-rcn-linux-5.10.168-ti-r72.patch rename to linux/0001-rcn-linux-5.10.168-ti-rt-r72.patch index f308684..6144f0b 100644 --- a/linux/0001-rcn-linux-5.10.168-ti-r72.patch +++ b/linux/0001-rcn-linux-5.10.168-ti-rt-r72.patch @@ -1,6 +1,39 @@ +diff -Naur --no-dereference a/arch/alpha/include/asm/kmap_types.h b/arch/alpha/include/asm/kmap_types.h +--- a/arch/alpha/include/asm/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/alpha/include/asm/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,15 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef _ASM_KMAP_TYPES_H +-#define _ASM_KMAP_TYPES_H +- +-/* Dummy header just to define km_type. */ +- +-#ifdef CONFIG_DEBUG_HIGHMEM +-#define __WITH_KM_FENCE +-#endif +- +-#include +- +-#undef __WITH_KM_FENCE +- +-#endif +diff -Naur --no-dereference a/arch/alpha/include/asm/spinlock_types.h b/arch/alpha/include/asm/spinlock_types.h +--- a/arch/alpha/include/asm/spinlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/alpha/include/asm/spinlock_types.h 2024-11-24 20:19:38.092228681 -0500 +@@ -2,10 +2,6 @@ + #ifndef _ALPHA_SPINLOCK_TYPES_H + #define _ALPHA_SPINLOCK_TYPES_H + +-#ifndef __LINUX_SPINLOCK_TYPES_H +-# error "please don't include this file directly" +-#endif +- + typedef struct { + volatile unsigned int lock; + } arch_spinlock_t; diff -Naur --no-dereference a/arch/alpha/include/uapi/asm/socket.h b/arch/alpha/include/uapi/asm/socket.h --- a/arch/alpha/include/uapi/asm/socket.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/alpha/include/uapi/asm/socket.h 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/alpha/include/uapi/asm/socket.h 2024-11-24 20:19:38.092228681 -0500 @@ -148,4 +148,10 @@ #endif @@ -12,9 +45,169 @@ diff -Naur --no-dereference a/arch/alpha/include/uapi/asm/socket.h b/arch/alpha/ +#define SCM_RED_TIMESTAMPING SO_RED_TIMESTAMPING + #endif /* _UAPI_ASM_SOCKET_H */ +diff -Naur --no-dereference a/arch/arc/include/asm/highmem.h b/arch/arc/include/asm/highmem.h +--- a/arch/arc/include/asm/highmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arc/include/asm/highmem.h 2024-11-24 20:19:38.092228681 -0500 +@@ -9,17 +9,29 @@ + #ifdef CONFIG_HIGHMEM + + #include +-#include ++#include ++ ++#define FIXMAP_SIZE PGDIR_SIZE ++#define PKMAP_SIZE PGDIR_SIZE + + /* start after vmalloc area */ + #define FIXMAP_BASE (PAGE_OFFSET - FIXMAP_SIZE - PKMAP_SIZE) +-#define FIXMAP_SIZE PGDIR_SIZE /* only 1 PGD worth */ +-#define KM_TYPE_NR ((FIXMAP_SIZE >> PAGE_SHIFT)/NR_CPUS) +-#define FIXMAP_ADDR(nr) (FIXMAP_BASE + ((nr) << PAGE_SHIFT)) ++ ++#define FIX_KMAP_SLOTS (KM_MAX_IDX * NR_CPUS) ++#define FIX_KMAP_BEGIN (0UL) ++#define FIX_KMAP_END ((FIX_KMAP_BEGIN + FIX_KMAP_SLOTS) - 1) ++ ++#define FIXADDR_TOP (FIXMAP_BASE + (FIX_KMAP_END << PAGE_SHIFT)) ++ ++/* ++ * This should be converted to the asm-generic version, but of course this ++ * is needlessly different from all other architectures. Sigh - tglx ++ */ ++#define __fix_to_virt(x) (FIXADDR_TOP - ((x) << PAGE_SHIFT)) ++#define __virt_to_fix(x) (((FIXADDR_TOP - ((x) & PAGE_MASK))) >> PAGE_SHIFT) + + /* start after fixmap area */ + #define PKMAP_BASE (FIXMAP_BASE + FIXMAP_SIZE) +-#define PKMAP_SIZE PGDIR_SIZE + #define LAST_PKMAP (PKMAP_SIZE >> PAGE_SHIFT) + #define LAST_PKMAP_MASK (LAST_PKMAP - 1) + #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) +@@ -29,11 +41,13 @@ + + extern void kmap_init(void); + ++#define arch_kmap_local_post_unmap(vaddr) \ ++ local_flush_tlb_kernel_range(vaddr, vaddr + PAGE_SIZE) ++ + static inline void flush_cache_kmaps(void) + { + flush_cache_all(); + } +- + #endif + + #endif +diff -Naur --no-dereference a/arch/arc/include/asm/kmap_types.h b/arch/arc/include/asm/kmap_types.h +--- a/arch/arc/include/asm/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arc/include/asm/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,14 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0-only */ +-/* +- * Copyright (C) 2015 Synopsys, Inc. (www.synopsys.com) +- */ +- +-#ifndef _ASM_KMAP_TYPES_H +-#define _ASM_KMAP_TYPES_H +- +-/* +- * We primarily need to define KM_TYPE_NR here but that in turn +- * is a function of PGDIR_SIZE etc. +- * To avoid circular deps issue, put everything in asm/highmem.h +- */ +-#endif +diff -Naur --no-dereference a/arch/arc/Kconfig b/arch/arc/Kconfig +--- a/arch/arc/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arc/Kconfig 2024-11-24 20:19:38.092228681 -0500 +@@ -507,6 +507,7 @@ + config HIGHMEM + bool "High Memory Support" + select ARCH_DISCONTIGMEM_ENABLE ++ select KMAP_LOCAL + help + With ARC 2G:2G address split, only upper 2G is directly addressable by + kernel. Enable this to potentially allow access to rest of 2G and PAE +diff -Naur --no-dereference a/arch/arc/mm/highmem.c b/arch/arc/mm/highmem.c +--- a/arch/arc/mm/highmem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arc/mm/highmem.c 2024-11-24 20:19:38.092228681 -0500 +@@ -36,9 +36,8 @@ + * This means each only has 1 PGDIR_SIZE worth of kvaddr mappings, which means + * 2M of kvaddr space for typical config (8K page and 11:8:13 traversal split) + * +- * - fixmap anyhow needs a limited number of mappings. So 2M kvaddr == 256 PTE +- * slots across NR_CPUS would be more than sufficient (generic code defines +- * KM_TYPE_NR as 20). ++ * - The fixed KMAP slots for kmap_local/atomic() require KM_MAX_IDX slots per ++ * CPU. So the number of CPUs sharing a single PTE page is limited. + * + * - pkmap being preemptible, in theory could do with more than 256 concurrent + * mappings. However, generic pkmap code: map_new_virtual(), doesn't traverse +@@ -47,48 +46,6 @@ + */ + + extern pte_t * pkmap_page_table; +-static pte_t * fixmap_page_table; +- +-void *kmap_atomic_high_prot(struct page *page, pgprot_t prot) +-{ +- int idx, cpu_idx; +- unsigned long vaddr; +- +- cpu_idx = kmap_atomic_idx_push(); +- idx = cpu_idx + KM_TYPE_NR * smp_processor_id(); +- vaddr = FIXMAP_ADDR(idx); +- +- set_pte_at(&init_mm, vaddr, fixmap_page_table + idx, +- mk_pte(page, prot)); +- +- return (void *)vaddr; +-} +-EXPORT_SYMBOL(kmap_atomic_high_prot); +- +-void kunmap_atomic_high(void *kv) +-{ +- unsigned long kvaddr = (unsigned long)kv; +- +- if (kvaddr >= FIXMAP_BASE && kvaddr < (FIXMAP_BASE + FIXMAP_SIZE)) { +- +- /* +- * Because preemption is disabled, this vaddr can be associated +- * with the current allocated index. +- * But in case of multiple live kmap_atomic(), it still relies on +- * callers to unmap in right order. +- */ +- int cpu_idx = kmap_atomic_idx(); +- int idx = cpu_idx + KM_TYPE_NR * smp_processor_id(); +- +- WARN_ON(kvaddr != FIXMAP_ADDR(idx)); +- +- pte_clear(&init_mm, kvaddr, fixmap_page_table + idx); +- local_flush_tlb_kernel_range(kvaddr, kvaddr + PAGE_SIZE); +- +- kmap_atomic_idx_pop(); +- } +-} +-EXPORT_SYMBOL(kunmap_atomic_high); + + static noinline pte_t * __init alloc_kmap_pgtable(unsigned long kvaddr) + { +@@ -108,10 +65,9 @@ + { + /* Due to recursive include hell, we can't do this in processor.h */ + BUILD_BUG_ON(PAGE_OFFSET < (VMALLOC_END + FIXMAP_SIZE + PKMAP_SIZE)); ++ BUILD_BUG_ON(LAST_PKMAP > PTRS_PER_PTE); ++ BUILD_BUG_ON(FIX_KMAP_SLOTS > PTRS_PER_PTE); + +- BUILD_BUG_ON(KM_TYPE_NR > PTRS_PER_PTE); + pkmap_page_table = alloc_kmap_pgtable(PKMAP_BASE); +- +- BUILD_BUG_ON(LAST_PKMAP > PTRS_PER_PTE); +- fixmap_page_table = alloc_kmap_pgtable(FIXMAP_BASE); ++ alloc_kmap_pgtable(FIXMAP_BASE); + } diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-baltos.dtsi b/arch/arm/boot/dts/am335x-baltos.dtsi --- a/arch/arm/boot/dts/am335x-baltos.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-baltos.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-baltos.dtsi 2024-11-24 20:19:38.093228683 -0500 @@ -168,7 +168,7 @@ AM33XX_PADCONF(AM335X_PIN_GPMC_AD6, PIN_INPUT_PULLUP, MUX_MODE0) /* gpmc_ad6.gpmc_ad6 */ AM33XX_PADCONF(AM335X_PIN_GPMC_AD7, PIN_INPUT_PULLUP, MUX_MODE0) /* gpmc_ad7.gpmc_ad7 */ @@ -26,7 +219,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-baltos.dtsi b/arch/arm/bo AM33XX_PADCONF(AM335X_PIN_GPMC_OEN_REN, PIN_OUTPUT, MUX_MODE0) /* gpmc_oen_ren.gpmc_oen_ren */ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bbb-bone-buses.dtsi b/arch/arm/boot/dts/am335x-bbb-bone-buses.dtsi --- a/arch/arm/boot/dts/am335x-bbb-bone-buses.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bbb-bone-buses.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bbb-bone-buses.dtsi 2024-11-24 20:19:38.093228683 -0500 @@ -0,0 +1,179 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -209,7 +402,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bbb-bone-buses.dtsi b/arc +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-common.dtsi b/arch/arm/boot/dts/am335x-boneblack-common.dtsi --- a/arch/arm/boot/dts/am335x-boneblack-common.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-boneblack-common.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-boneblack-common.dtsi 2024-11-24 20:19:38.093228683 -0500 @@ -3,9 +3,6 @@ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/ */ @@ -368,7 +561,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-common.dtsi b/a }; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts --- a/arch/arm/boot/dts/am335x-boneblack.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-boneblack.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-boneblack.dts 2024-11-24 20:19:38.094228685 -0500 @@ -7,10 +7,16 @@ #include "am33xx.dtsi" #include "am335x-bone-common.dtsi" @@ -576,7 +769,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/ }; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-hdmi.dtsi b/arch/arm/boot/dts/am335x-boneblack-hdmi.dtsi --- a/arch/arm/boot/dts/am335x-boneblack-hdmi.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-boneblack-hdmi.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-boneblack-hdmi.dtsi 2024-11-24 20:19:38.093228683 -0500 @@ -0,0 +1,141 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -721,7 +914,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-hdmi.dtsi b/arc +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-pps.dts b/arch/arm/boot/dts/am335x-boneblack-pps.dts --- a/arch/arm/boot/dts/am335x-boneblack-pps.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-boneblack-pps.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-boneblack-pps.dts 2024-11-24 20:19:38.093228683 -0500 @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -748,7 +941,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-pps.dts b/arch/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-pruswuart.dts b/arch/arm/boot/dts/am335x-boneblack-pruswuart.dts --- a/arch/arm/boot/dts/am335x-boneblack-pruswuart.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-boneblack-pruswuart.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-boneblack-pruswuart.dts 2024-11-24 20:19:38.093228683 -0500 @@ -0,0 +1,178 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -930,7 +1123,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-pruswuart.dts b +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-uboot.dts b/arch/arm/boot/dts/am335x-boneblack-uboot.dts --- a/arch/arm/boot/dts/am335x-boneblack-uboot.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-boneblack-uboot.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-boneblack-uboot.dts 2024-11-24 20:19:38.094228685 -0500 @@ -0,0 +1,193 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -1127,7 +1320,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-uboot.dts b/arc +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-uboot-univ.dts b/arch/arm/boot/dts/am335x-boneblack-uboot-univ.dts --- a/arch/arm/boot/dts/am335x-boneblack-uboot-univ.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-boneblack-uboot-univ.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-boneblack-uboot-univ.dts 2024-11-24 20:19:38.093228683 -0500 @@ -0,0 +1,185 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -1316,7 +1509,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-uboot-univ.dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-wireless.dts b/arch/arm/boot/dts/am335x-boneblack-wireless.dts --- a/arch/arm/boot/dts/am335x-boneblack-wireless.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-boneblack-wireless.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-boneblack-wireless.dts 2024-11-24 20:19:38.094228685 -0500 @@ -7,12 +7,18 @@ #include "am33xx.dtsi" #include "am335x-bone-common.dtsi" @@ -1347,7 +1540,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblack-wireless.dts b/ output-high; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblue.dts b/arch/arm/boot/dts/am335x-boneblue.dts --- a/arch/arm/boot/dts/am335x-boneblue.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-boneblue.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-boneblue.dts 2024-11-24 20:19:38.094228685 -0500 @@ -14,6 +14,8 @@ chosen { @@ -1584,7 +1777,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-boneblue.dts b/arch/arm/b +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi --- a/arch/arm/boot/dts/am335x-bone-common.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bone-common.dtsi 2024-11-24 20:19:38.093228683 -0500 @@ -4,6 +4,11 @@ */ @@ -1728,7 +1921,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/a }; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bone-common-univ.dtsi b/arch/arm/boot/dts/am335x-bone-common-univ.dtsi --- a/arch/arm/boot/dts/am335x-bone-common-univ.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bone-common-univ.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bone-common-univ.dtsi 2024-11-24 20:19:38.093228683 -0500 @@ -0,0 +1,2289 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -4021,7 +4214,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bone-common-univ.dtsi b/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bone.dts b/arch/arm/boot/dts/am335x-bone.dts --- a/arch/arm/boot/dts/am335x-bone.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bone.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bone.dts 2024-11-24 20:19:38.093228683 -0500 @@ -10,6 +10,11 @@ / { model = "TI AM335x BeagleBone"; @@ -4036,7 +4229,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bone.dts b/arch/arm/boot/ &ldo3_reg { diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen-common.dtsi b/arch/arm/boot/dts/am335x-bonegreen-common.dtsi --- a/arch/arm/boot/dts/am335x-bonegreen-common.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bonegreen-common.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bonegreen-common.dtsi 2024-11-24 20:19:38.094228685 -0500 @@ -34,6 +34,7 @@ pinctrl-names = "default"; pinctrl-0 = <&uart2_pins>; @@ -4047,7 +4240,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen-common.dtsi b/a &rtc { diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen.dts b/arch/arm/boot/dts/am335x-bonegreen.dts --- a/arch/arm/boot/dts/am335x-bonegreen.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bonegreen.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bonegreen.dts 2024-11-24 20:19:38.094228685 -0500 @@ -11,4 +11,9 @@ / { model = "TI AM335x BeagleBone Green"; @@ -4060,7 +4253,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen.dts b/arch/arm/ }; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen-gateway.dts b/arch/arm/boot/dts/am335x-bonegreen-gateway.dts --- a/arch/arm/boot/dts/am335x-bonegreen-gateway.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bonegreen-gateway.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bonegreen-gateway.dts 2024-11-24 20:19:38.094228685 -0500 @@ -0,0 +1,260 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -4324,7 +4517,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen-gateway.dts b/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen-wireless-common-univ.dtsi b/arch/arm/boot/dts/am335x-bonegreen-wireless-common-univ.dtsi --- a/arch/arm/boot/dts/am335x-bonegreen-wireless-common-univ.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bonegreen-wireless-common-univ.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bonegreen-wireless-common-univ.dtsi 2024-11-24 20:19:38.094228685 -0500 @@ -0,0 +1,2197 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -6525,7 +6718,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen-wireless-common +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen-wireless.dts b/arch/arm/boot/dts/am335x-bonegreen-wireless.dts --- a/arch/arm/boot/dts/am335x-bonegreen-wireless.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bonegreen-wireless.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bonegreen-wireless.dts 2024-11-24 20:19:38.094228685 -0500 @@ -13,6 +13,12 @@ model = "TI AM335x BeagleBone Green Wireless"; compatible = "ti,am335x-bone-green-wireless", "ti,am335x-bone-green", "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx"; @@ -6636,7 +6829,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen-wireless.dts b/ output-low; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen-wireless-uboot-univ.dts b/arch/arm/boot/dts/am335x-bonegreen-wireless-uboot-univ.dts --- a/arch/arm/boot/dts/am335x-bonegreen-wireless-uboot-univ.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bonegreen-wireless-uboot-univ.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bonegreen-wireless-uboot-univ.dts 2024-11-24 20:19:38.094228685 -0500 @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -6696,7 +6889,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bonegreen-wireless-uboot- +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bone-jtag.dtsi b/arch/arm/boot/dts/am335x-bone-jtag.dtsi --- a/arch/arm/boot/dts/am335x-bone-jtag.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bone-jtag.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bone-jtag.dtsi 2024-11-24 20:19:38.093228683 -0500 @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -6715,7 +6908,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bone-jtag.dtsi b/arch/arm +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bone-uboot-univ.dts b/arch/arm/boot/dts/am335x-bone-uboot-univ.dts --- a/arch/arm/boot/dts/am335x-bone-uboot-univ.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-bone-uboot-univ.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-bone-uboot-univ.dts 2024-11-24 20:19:38.093228683 -0500 @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -6748,7 +6941,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-bone-uboot-univ.dts b/arc +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-cm-t335.dts b/arch/arm/boot/dts/am335x-cm-t335.dts --- a/arch/arm/boot/dts/am335x-cm-t335.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-cm-t335.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-cm-t335.dts 2024-11-24 20:19:38.094228685 -0500 @@ -122,7 +122,7 @@ AM33XX_PADCONF(AM335X_PIN_GPMC_AD6, PIN_INPUT_PULLUP, MUX_MODE0) AM33XX_PADCONF(AM335X_PIN_GPMC_AD7, PIN_INPUT_PULLUP, MUX_MODE0) @@ -6769,7 +6962,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-cm-t335.dts b/arch/arm/bo pinctrl-0 = <&ecap0_pins>; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts --- a/arch/arm/boot/dts/am335x-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-evm.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-evm.dts 2024-11-24 20:19:38.094228685 -0500 @@ -229,7 +229,7 @@ AM33XX_PADCONF(AM335X_PIN_GPMC_AD6, PIN_INPUT_PULLUP, MUX_MODE0) AM33XX_PADCONF(AM335X_PIN_GPMC_AD7, PIN_INPUT_PULLUP, MUX_MODE0) @@ -6839,7 +7032,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/d +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-evmsk.dts b/arch/arm/boot/dts/am335x-evmsk.dts --- a/arch/arm/boot/dts/am335x-evmsk.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-evmsk.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-evmsk.dts 2024-11-24 20:19:38.094228685 -0500 @@ -441,6 +441,22 @@ AM33XX_PADCONF(AM335X_PIN_GPMC_CSN0, PIN_OUTPUT_PULLUP, MUX_MODE7) /* gpmc_csn0.gpio1_29 */ >; @@ -6935,7 +7128,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-evmsk.dts b/arch/arm/boot +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-icev2.dts b/arch/arm/boot/dts/am335x-icev2.dts --- a/arch/arm/boot/dts/am335x-icev2.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-icev2.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-icev2.dts 2024-11-24 20:19:38.094228685 -0500 @@ -474,31 +474,29 @@ }; }; @@ -6984,7 +7177,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-icev2.dts b/arch/arm/boot +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-icev2-prueth.dts b/arch/arm/boot/dts/am335x-icev2-prueth.dts --- a/arch/arm/boot/dts/am335x-icev2-prueth.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-icev2-prueth.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-icev2-prueth.dts 2024-11-24 20:19:38.094228685 -0500 @@ -0,0 +1,150 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + @@ -7138,7 +7331,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-icev2-prueth.dts b/arch/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-igep0033.dtsi b/arch/arm/boot/dts/am335x-igep0033.dtsi --- a/arch/arm/boot/dts/am335x-igep0033.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-igep0033.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-igep0033.dtsi 2024-11-24 20:19:38.095228687 -0500 @@ -70,7 +70,7 @@ AM33XX_PADCONF(AM335X_PIN_GPMC_AD6, PIN_INPUT_PULLUP, MUX_MODE0) AM33XX_PADCONF(AM335X_PIN_GPMC_AD7, PIN_INPUT_PULLUP, MUX_MODE0) @@ -7150,7 +7343,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-igep0033.dtsi b/arch/arm/ AM33XX_PADCONF(AM335X_PIN_GPMC_OEN_REN, PIN_OUTPUT, MUX_MODE0) diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-osd3358-sm-red.dts b/arch/arm/boot/dts/am335x-osd3358-sm-red.dts --- a/arch/arm/boot/dts/am335x-osd3358-sm-red.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-osd3358-sm-red.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-osd3358-sm-red.dts 2024-11-24 20:19:38.095228687 -0500 @@ -10,13 +10,16 @@ #include "am33xx.dtsi" @@ -7431,7 +7624,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-osd3358-sm-red.dts b/arch }; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-osd335x-common.dtsi b/arch/arm/boot/dts/am335x-osd335x-common.dtsi --- a/arch/arm/boot/dts/am335x-osd335x-common.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-osd335x-common.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-osd335x-common.dtsi 2024-11-24 20:19:38.095228687 -0500 @@ -48,6 +48,7 @@ status = "okay"; @@ -7442,7 +7635,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-osd335x-common.dtsi b/arc reg = <0x24>; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-pocketbeagle.dts b/arch/arm/boot/dts/am335x-pocketbeagle.dts --- a/arch/arm/boot/dts/am335x-pocketbeagle.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-pocketbeagle.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-pocketbeagle.dts 2024-11-24 20:19:38.095228687 -0500 @@ -8,6 +8,7 @@ #include "am33xx.dtsi" @@ -9486,7 +9679,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-pocketbeagle.dts b/arch/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-common.dtsi b/arch/arm/boot/dts/am335x-sancloud-bbe-common.dtsi --- a/arch/arm/boot/dts/am335x-sancloud-bbe-common.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-sancloud-bbe-common.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-sancloud-bbe-common.dtsi 2024-11-24 20:19:38.095228687 -0500 @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -9557,7 +9750,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-common.dtsi +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe.dts b/arch/arm/boot/dts/am335x-sancloud-bbe.dts --- a/arch/arm/boot/dts/am335x-sancloud-bbe.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-sancloud-bbe.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-sancloud-bbe.dts 2024-11-24 20:19:38.095228687 -0500 @@ -7,74 +7,21 @@ #include "am33xx.dtsi" #include "am335x-bone-common.dtsi" @@ -9696,7 +9889,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe.dts b/arch/a }; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi.dts b/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi.dts --- a/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi.dts 2024-11-24 20:19:38.095228687 -0500 @@ -0,0 +1,94 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -9794,7 +9987,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wif +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi-uboot.dts b/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi-uboot.dts --- a/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi-uboot.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi-uboot.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi-uboot.dts 2024-11-24 20:19:38.095228687 -0500 @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -9901,7 +10094,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wif +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi-uboot-univ.dts b/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi-uboot-univ.dts --- a/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi-uboot-univ.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi-uboot-univ.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wifi-uboot-univ.dts 2024-11-24 20:19:38.095228687 -0500 @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -10024,7 +10217,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-extended-wif +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-lite.dts b/arch/arm/boot/dts/am335x-sancloud-bbe-lite.dts --- a/arch/arm/boot/dts/am335x-sancloud-bbe-lite.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-sancloud-bbe-lite.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-sancloud-bbe-lite.dts 2024-11-24 20:19:38.095228687 -0500 @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -10084,7 +10277,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-lite.dts b/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot.dts b/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot.dts --- a/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot.dts 2024-11-24 20:19:38.095228687 -0500 @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -10154,7 +10347,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot.d +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot-univ.dts b/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot-univ.dts --- a/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot-univ.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot-univ.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot-univ.dts 2024-11-24 20:19:38.095228687 -0500 @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -10234,7 +10427,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-lite-uboot-u +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-uboot.dts b/arch/arm/boot/dts/am335x-sancloud-bbe-uboot.dts --- a/arch/arm/boot/dts/am335x-sancloud-bbe-uboot.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-sancloud-bbe-uboot.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-sancloud-bbe-uboot.dts 2024-11-24 20:19:38.095228687 -0500 @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -10304,7 +10497,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-uboot.dts b/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-uboot-univ.dts b/arch/arm/boot/dts/am335x-sancloud-bbe-uboot-univ.dts --- a/arch/arm/boot/dts/am335x-sancloud-bbe-uboot-univ.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am335x-sancloud-bbe-uboot-univ.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am335x-sancloud-bbe-uboot-univ.dts 2024-11-24 20:19:38.095228687 -0500 @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -10375,7 +10568,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am335x-sancloud-bbe-uboot-univ.d +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi --- a/arch/arm/boot/dts/am33xx.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am33xx.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am33xx.dtsi 2024-11-24 20:19:38.095228687 -0500 @@ -592,6 +592,13 @@ * Closed source PowerVR driver, no child device * binding or driver in mainline @@ -10392,7 +10585,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/ }; diff -Naur --no-dereference a/arch/arm/boot/dts/am33xx-l4.dtsi b/arch/arm/boot/dts/am33xx-l4.dtsi --- a/arch/arm/boot/dts/am33xx-l4.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am33xx-l4.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am33xx-l4.dtsi 2024-11-24 20:19:38.095228687 -0500 @@ -252,22 +252,22 @@ ranges = <0x00000000 0x0000d000 0x00001000>, <0x00001000 0x0000e000 0x00001000>; @@ -10724,7 +10917,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am33xx-l4.dtsi b/arch/arm/boot/d clocks = <&ehrpwm2_tbclk>, <&l4ls_gclk>; diff -Naur --no-dereference a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi --- a/arch/arm/boot/dts/am4372.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am4372.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am4372.dtsi 2024-11-24 20:19:38.095228687 -0500 @@ -432,6 +432,202 @@ #address-cells = <1>; #size-cells = <1>; @@ -10945,7 +11138,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/ }; diff -Naur --no-dereference a/arch/arm/boot/dts/am437x-gp-evm.dts b/arch/arm/boot/dts/am437x-gp-evm.dts --- a/arch/arm/boot/dts/am437x-gp-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am437x-gp-evm.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am437x-gp-evm.dts 2024-11-24 20:19:38.096228688 -0500 @@ -1118,3 +1118,8 @@ &cpu { cpu0-supply = <&dcdc2>; @@ -10957,7 +11150,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am437x-gp-evm.dts b/arch/arm/boo +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am437x-gp-evm-hdmi.dts b/arch/arm/boot/dts/am437x-gp-evm-hdmi.dts --- a/arch/arm/boot/dts/am437x-gp-evm-hdmi.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am437x-gp-evm-hdmi.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am437x-gp-evm-hdmi.dts 2024-11-24 20:19:38.096228688 -0500 @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -11073,7 +11266,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am437x-gp-evm-hdmi.dts b/arch/ar +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am437x-idk-evm.dts b/arch/arm/boot/dts/am437x-idk-evm.dts --- a/arch/arm/boot/dts/am437x-idk-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am437x-idk-evm.dts 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am437x-idk-evm.dts 2024-11-24 20:19:38.096228688 -0500 @@ -19,6 +19,11 @@ stdout-path = &uart0; }; @@ -11203,7 +11396,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am437x-idk-evm.dts b/arch/arm/bo +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am437x-l4.dtsi b/arch/arm/boot/dts/am437x-l4.dtsi --- a/arch/arm/boot/dts/am437x-l4.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am437x-l4.dtsi 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/am437x-l4.dtsi 2024-11-24 20:19:38.096228688 -0500 @@ -1149,7 +1149,7 @@ #mbox-cells = <1>; ti,mbox-num-users = <4>; @@ -11332,7 +11525,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am437x-l4.dtsi b/arch/arm/boot/d , diff -Naur --no-dereference a/arch/arm/boot/dts/am437x-sk-evm.dts b/arch/arm/boot/dts/am437x-sk-evm.dts --- a/arch/arm/boot/dts/am437x-sk-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am437x-sk-evm.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am437x-sk-evm.dts 2024-11-24 20:19:38.096228688 -0500 @@ -892,3 +892,7 @@ }; }; @@ -11343,7 +11536,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am437x-sk-evm.dts b/arch/arm/boo +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am43x-epos-evm.dts b/arch/arm/boot/dts/am43x-epos-evm.dts --- a/arch/arm/boot/dts/am43x-epos-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am43x-epos-evm.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am43x-epos-evm.dts 2024-11-24 20:19:38.096228688 -0500 @@ -1018,3 +1018,7 @@ &cpu { cpu0-supply = <&dcdc2>; @@ -11354,7 +11547,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am43x-epos-evm.dts b/arch/arm/bo +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am43x-epos-evm-hdmi.dts b/arch/arm/boot/dts/am43x-epos-evm-hdmi.dts --- a/arch/arm/boot/dts/am43x-epos-evm-hdmi.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am43x-epos-evm-hdmi.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am43x-epos-evm-hdmi.dts 2024-11-24 20:19:38.096228688 -0500 @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -11478,7 +11671,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am43x-epos-evm-hdmi.dts b/arch/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am571x-idk.dts b/arch/arm/boot/dts/am571x-idk.dts --- a/arch/arm/boot/dts/am571x-idk.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am571x-idk.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am571x-idk.dts 2024-11-24 20:19:38.096228688 -0500 @@ -16,6 +16,11 @@ model = "TI AM5718 IDK"; compatible = "ti,am5718-idk", "ti,am5718", "ti,dra7"; @@ -11575,7 +11768,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am571x-idk.dts b/arch/arm/boot/d +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am5729-beagleboneai.dts b/arch/arm/boot/dts/am5729-beagleboneai.dts --- a/arch/arm/boot/dts/am5729-beagleboneai.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am5729-beagleboneai.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am5729-beagleboneai.dts 2024-11-24 20:19:38.096228688 -0500 @@ -5,13 +5,14 @@ /dts-v1/; @@ -11822,7 +12015,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am5729-beagleboneai.dts b/arch/a &cpu0_opp_table { diff -Naur --no-dereference a/arch/arm/boot/dts/am572x-bone-common-univ.dtsi b/arch/arm/boot/dts/am572x-bone-common-univ.dtsi --- a/arch/arm/boot/dts/am572x-bone-common-univ.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/am572x-bone-common-univ.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am572x-bone-common-univ.dtsi 2024-11-24 20:19:38.096228688 -0500 @@ -0,0 +1,2236 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -14062,7 +14255,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am572x-bone-common-univ.dtsi b/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am572x-idk.dts b/arch/arm/boot/dts/am572x-idk.dts --- a/arch/arm/boot/dts/am572x-idk.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am572x-idk.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am572x-idk.dts 2024-11-24 20:19:38.097228690 -0500 @@ -27,3 +27,13 @@ pinctrl-1 = <&mmc2_pins_hs>; pinctrl-2 = <&mmc2_pins_ddr_rev20>; @@ -14079,7 +14272,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am572x-idk.dts b/arch/arm/boot/d +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am5748.dtsi b/arch/arm/boot/dts/am5748.dtsi --- a/arch/arm/boot/dts/am5748.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am5748.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am5748.dtsi 2024-11-24 20:19:38.097228690 -0500 @@ -3,7 +3,7 @@ * Copyright (C) 2019 Texas Instruments Incorporated - https://www.ti.com/ */ @@ -14102,7 +14295,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am5748.dtsi b/arch/arm/boot/dts/ }; diff -Naur --no-dereference a/arch/arm/boot/dts/am574x-idk.dts b/arch/arm/boot/dts/am574x-idk.dts --- a/arch/arm/boot/dts/am574x-idk.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am574x-idk.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am574x-idk.dts 2024-11-24 20:19:38.097228690 -0500 @@ -36,6 +36,16 @@ pinctrl-2 = <&mmc2_pins_default>; }; @@ -14124,7 +14317,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am574x-idk.dts b/arch/arm/boot/d }; diff -Naur --no-dereference a/arch/arm/boot/dts/am57-pruss.dtsi b/arch/arm/boot/dts/am57-pruss.dtsi --- a/arch/arm/boot/dts/am57-pruss.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am57-pruss.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am57-pruss.dtsi 2024-11-24 20:19:38.096228688 -0500 @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* @@ -14360,7 +14553,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am57-pruss.dtsi b/arch/arm/boot/ }; diff -Naur --no-dereference a/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi b/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi --- a/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi 2024-11-24 20:19:38.097228690 -0500 @@ -637,3 +637,15 @@ status = "okay"; memory-region = <&dsp2_memory_region>; @@ -14379,7 +14572,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi b/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm/boot/dts/am57xx-beagle-x15.dts --- a/arch/arm/boot/dts/am57xx-beagle-x15.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts 2024-11-24 20:19:38.097228690 -0500 @@ -8,6 +8,11 @@ / { /* NOTE: This describes the "original" pre-production A2 revision */ @@ -14394,7 +14587,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm &tpd12s015 { diff -Naur --no-dereference a/arch/arm/boot/dts/am57xx-beagle-x15-revb1.dts b/arch/arm/boot/dts/am57xx-beagle-x15-revb1.dts --- a/arch/arm/boot/dts/am57xx-beagle-x15-revb1.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am57xx-beagle-x15-revb1.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am57xx-beagle-x15-revb1.dts 2024-11-24 20:19:38.097228690 -0500 @@ -7,6 +7,11 @@ / { @@ -14409,7 +14602,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am57xx-beagle-x15-revb1.dts b/ar &tpd12s015 { diff -Naur --no-dereference a/arch/arm/boot/dts/am57xx-beagle-x15-revc.dts b/arch/arm/boot/dts/am57xx-beagle-x15-revc.dts --- a/arch/arm/boot/dts/am57xx-beagle-x15-revc.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am57xx-beagle-x15-revc.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am57xx-beagle-x15-revc.dts 2024-11-24 20:19:38.097228690 -0500 @@ -7,6 +7,11 @@ / { @@ -14424,7 +14617,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am57xx-beagle-x15-revc.dts b/arc &tpd12s015 { diff -Naur --no-dereference a/arch/arm/boot/dts/am57xx-idk-common.dtsi b/arch/arm/boot/dts/am57xx-idk-common.dtsi --- a/arch/arm/boot/dts/am57xx-idk-common.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/am57xx-idk-common.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/am57xx-idk-common.dtsi 2024-11-24 20:19:38.097228690 -0500 @@ -10,6 +10,8 @@ rtc0 = &tps659038_rtc; rtc1 = &rtc; @@ -14504,7 +14697,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/am57xx-idk-common.dtsi b/arch/ar +}; diff -Naur --no-dereference a/arch/arm/boot/dts/bbai-bone-buses.dtsi b/arch/arm/boot/dts/bbai-bone-buses.dtsi --- a/arch/arm/boot/dts/bbai-bone-buses.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/bbai-bone-buses.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/bbai-bone-buses.dtsi 2024-11-24 20:19:38.097228690 -0500 @@ -0,0 +1,646 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -15154,7 +15347,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/bbai-bone-buses.dtsi b/arch/arm/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/bbb-bone-buses.dtsi b/arch/arm/boot/dts/bbb-bone-buses.dtsi --- a/arch/arm/boot/dts/bbb-bone-buses.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/bbb-bone-buses.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/bbb-bone-buses.dtsi 2024-11-24 20:19:38.097228690 -0500 @@ -0,0 +1,315 @@ +// SPDX-License-Identifier: GPL-2.0-only + @@ -15473,7 +15666,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/bbb-bone-buses.dtsi b/arch/arm/b +// }; diff -Naur --no-dereference a/arch/arm/boot/dts/da850.dtsi b/arch/arm/boot/dts/da850.dtsi --- a/arch/arm/boot/dts/da850.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/da850.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/da850.dtsi 2024-11-24 20:19:38.097228690 -0500 @@ -9,7 +9,9 @@ #address-cells = <1>; #size-cells = <1>; @@ -15543,7 +15736,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/da850.dtsi b/arch/arm/boot/dts/d clocks = <&psc1 20>; diff -Naur --no-dereference a/arch/arm/boot/dts/da850-lego-ev3.dts b/arch/arm/boot/dts/da850-lego-ev3.dts --- a/arch/arm/boot/dts/da850-lego-ev3.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/da850-lego-ev3.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/da850-lego-ev3.dts 2024-11-24 20:19:38.097228690 -0500 @@ -412,14 +412,14 @@ status = "okay"; @@ -15586,7 +15779,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/da850-lego-ev3.dts b/arch/arm/bo input; diff -Naur --no-dereference a/arch/arm/boot/dts/dra71-evm.dts b/arch/arm/boot/dts/dra71-evm.dts --- a/arch/arm/boot/dts/dra71-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/dra71-evm.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/dra71-evm.dts 2024-11-24 20:19:38.098228692 -0500 @@ -112,6 +112,8 @@ regulator-name = "lp8733-ldo0"; regulator-min-microvolt = <3300000>; @@ -15598,7 +15791,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/dra71-evm.dts b/arch/arm/boot/dt lp8733_ldo1_reg: ldo1 { diff -Naur --no-dereference a/arch/arm/boot/dts/dra72-evm-common.dtsi b/arch/arm/boot/dts/dra72-evm-common.dtsi --- a/arch/arm/boot/dts/dra72-evm-common.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/dra72-evm-common.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/dra72-evm-common.dtsi 2024-11-24 20:19:38.098228692 -0500 @@ -180,6 +180,12 @@ }; }; @@ -15691,7 +15884,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/dra72-evm-common.dtsi b/arch/arm <&atl_clkctrl DRA7_ATL_ATL_CLKCTRL 26>, diff -Naur --no-dereference a/arch/arm/boot/dts/dra72x.dtsi b/arch/arm/boot/dts/dra72x.dtsi --- a/arch/arm/boot/dts/dra72x.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/dra72x.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/dra72x.dtsi 2024-11-24 20:19:38.098228692 -0500 @@ -65,6 +65,17 @@ }; }; @@ -15712,7 +15905,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/dra72x.dtsi b/arch/arm/boot/dts/ <0x4054 0x4>, diff -Naur --no-dereference a/arch/arm/boot/dts/dra74x.dtsi b/arch/arm/boot/dts/dra74x.dtsi --- a/arch/arm/boot/dts/dra74x.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/dra74x.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/dra74x.dtsi 2024-11-24 20:19:38.098228692 -0500 @@ -229,4 +229,117 @@ }; }; @@ -15833,7 +16026,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/dra74x.dtsi b/arch/arm/boot/dts/ }; diff -Naur --no-dereference a/arch/arm/boot/dts/dra74x-p.dtsi b/arch/arm/boot/dts/dra74x-p.dtsi --- a/arch/arm/boot/dts/dra74x-p.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/dra74x-p.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/dra74x-p.dtsi 2024-11-24 20:19:38.098228692 -0500 @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/ @@ -15864,7 +16057,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/dra74x-p.dtsi b/arch/arm/boot/dt +}; diff -Naur --no-dereference a/arch/arm/boot/dts/dra76-evm.dts b/arch/arm/boot/dts/dra76-evm.dts --- a/arch/arm/boot/dts/dra76-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/dra76-evm.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/dra76-evm.dts 2024-11-24 20:19:38.098228692 -0500 @@ -158,12 +158,6 @@ regulator-max-microvolt = <1800000>; }; @@ -15937,7 +16130,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/dra76-evm.dts b/arch/arm/boot/dt +}; diff -Naur --no-dereference a/arch/arm/boot/dts/dra76x.dtsi b/arch/arm/boot/dts/dra76x.dtsi --- a/arch/arm/boot/dts/dra76x.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/dra76x.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/dra76x.dtsi 2024-11-24 20:19:38.098228692 -0500 @@ -83,9 +83,12 @@ }; }; @@ -15989,7 +16182,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/dra76x.dtsi b/arch/arm/boot/dts/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi --- a/arch/arm/boot/dts/dra7.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/dra7.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/dra7.dtsi 2024-11-24 20:19:38.098228692 -0500 @@ -759,6 +759,18 @@ #address-cells = <1>; #size-cells = <1>; @@ -16083,7 +16276,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dr diff -Naur --no-dereference a/arch/arm/boot/dts/dra7-evm-common.dtsi b/arch/arm/boot/dts/dra7-evm-common.dtsi --- a/arch/arm/boot/dts/dra7-evm-common.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/dra7-evm-common.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/dra7-evm-common.dtsi 2024-11-24 20:19:38.097228690 -0500 @@ -102,6 +102,12 @@ gpios = <&pcf_lcd 3 GPIO_ACTIVE_LOW>; }; @@ -16099,7 +16292,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/dra7-evm-common.dtsi b/arch/arm/ &i2c3 { diff -Naur --no-dereference a/arch/arm/boot/dts/dra7-evm.dts b/arch/arm/boot/dts/dra7-evm.dts --- a/arch/arm/boot/dts/dra7-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/dra7-evm.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/dra7-evm.dts 2024-11-24 20:19:38.097228690 -0500 @@ -373,6 +373,51 @@ output-low; line-name = "vin6_sel_s0"; @@ -16171,7 +16364,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/dra7-evm.dts b/arch/arm/boot/dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/dra7-l4.dtsi b/arch/arm/boot/dts/dra7-l4.dtsi --- a/arch/arm/boot/dts/dra7-l4.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/dra7-l4.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/dra7-l4.dtsi 2024-11-24 20:19:38.097228690 -0500 @@ -2530,7 +2530,7 @@ status = "disabled"; ranges = <0 0 0x1000>; @@ -16251,7 +16444,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/dra7-l4.dtsi b/arch/arm/boot/dts target-module@190000 { /* 0x48990000, ap 23 2e.0 */ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone.dtsi b/arch/arm/boot/dts/keystone.dtsi --- a/arch/arm/boot/dts/keystone.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/keystone.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/keystone.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -217,8 +217,8 @@ dma-ranges; status = "disabled"; @@ -16265,7 +16458,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone.dtsi b/arch/arm/boot/dt usb-phy = <&usb_phy>, <&usb_phy>; diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2e.dtsi b/arch/arm/boot/dts/keystone-k2e.dtsi --- a/arch/arm/boot/dts/keystone-k2e.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/keystone-k2e.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/keystone-k2e.dtsi 2024-11-24 20:19:38.098228692 -0500 @@ -52,7 +52,7 @@ usb: usb@2680000 { @@ -16300,7 +16493,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2e.dtsi b/arch/arm/boo }; diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2e-evm.dts b/arch/arm/boot/dts/keystone-k2e-evm.dts --- a/arch/arm/boot/dts/keystone-k2e-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/keystone-k2e-evm.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/keystone-k2e-evm.dts 2024-11-24 20:19:38.098228692 -0500 @@ -24,6 +24,13 @@ reusable; status = "okay"; @@ -16317,7 +16510,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2e-evm.dts b/arch/arm/ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2g.dtsi b/arch/arm/boot/dts/keystone-k2g.dtsi --- a/arch/arm/boot/dts/keystone-k2g.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/keystone-k2g.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/keystone-k2g.dtsi 2024-11-24 20:19:38.098228692 -0500 @@ -2,7 +2,7 @@ /* * Device Tree Source for K2G SOC @@ -16568,7 +16761,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2g.dtsi b/arch/arm/boo }; diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2g-evm.dts b/arch/arm/boot/dts/keystone-k2g-evm.dts --- a/arch/arm/boot/dts/keystone-k2g-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/keystone-k2g-evm.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/keystone-k2g-evm.dts 2024-11-24 20:19:38.098228692 -0500 @@ -22,6 +22,13 @@ #size-cells = <2>; ranges; @@ -16736,7 +16929,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2g-evm.dts b/arch/arm/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2g-ice.dts b/arch/arm/boot/dts/keystone-k2g-ice.dts --- a/arch/arm/boot/dts/keystone-k2g-ice.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/keystone-k2g-ice.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/keystone-k2g-ice.dts 2024-11-24 20:19:38.098228692 -0500 @@ -23,6 +23,13 @@ #size-cells = <2>; ranges; @@ -16753,7 +16946,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2g-ice.dts b/arch/arm/ reg = <0x00000008 0x1f800000 0x00000000 0x800000>; diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2hk.dtsi b/arch/arm/boot/dts/keystone-k2hk.dtsi --- a/arch/arm/boot/dts/keystone-k2hk.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/keystone-k2hk.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/keystone-k2hk.dtsi 2024-11-24 20:19:38.098228692 -0500 @@ -64,6 +64,11 @@ #address-cells = <1>; #size-cells = <1>; @@ -16768,7 +16961,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2hk.dtsi b/arch/arm/bo }; diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2hk-evm.dts b/arch/arm/boot/dts/keystone-k2hk-evm.dts --- a/arch/arm/boot/dts/keystone-k2hk-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/keystone-k2hk-evm.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/keystone-k2hk-evm.dts 2024-11-24 20:19:38.098228692 -0500 @@ -24,6 +24,13 @@ reusable; status = "okay"; @@ -16785,7 +16978,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2hk-evm.dts b/arch/arm leds { diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2l.dtsi b/arch/arm/boot/dts/keystone-k2l.dtsi --- a/arch/arm/boot/dts/keystone-k2l.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/keystone-k2l.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/keystone-k2l.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -262,6 +262,11 @@ #address-cells = <1>; #size-cells = <1>; @@ -16800,7 +16993,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2l.dtsi b/arch/arm/boo }; diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2l-evm.dts b/arch/arm/boot/dts/keystone-k2l-evm.dts --- a/arch/arm/boot/dts/keystone-k2l-evm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/keystone-k2l-evm.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/keystone-k2l-evm.dts 2024-11-24 20:19:38.099228694 -0500 @@ -24,6 +24,13 @@ reusable; status = "okay"; @@ -16817,7 +17010,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/keystone-k2l-evm.dts b/arch/arm/ diff -Naur --no-dereference a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile --- a/arch/arm/boot/dts/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/Makefile 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/boot/dts/Makefile 2024-11-24 20:19:38.093228683 -0500 @@ -1,4 +1,9 @@ # SPDX-License-Identifier: GPL-2.0 + @@ -16883,7 +17076,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Mak +subdir-y := overlays diff -Naur --no-dereference a/arch/arm/boot/dts/motorola-mapphone-common.dtsi b/arch/arm/boot/dts/motorola-mapphone-common.dtsi --- a/arch/arm/boot/dts/motorola-mapphone-common.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/motorola-mapphone-common.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/motorola-mapphone-common.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -113,32 +113,9 @@ enable-active-high; }; @@ -17057,7 +17250,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/motorola-mapphone-common.dtsi b/ &mcbsp2 { diff -Naur --no-dereference a/arch/arm/boot/dts/omap2420.dtsi b/arch/arm/boot/dts/omap2420.dtsi --- a/arch/arm/boot/dts/omap2420.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap2420.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap2420.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -192,16 +192,15 @@ compatible = "ti,omap2-mailbox"; reg = <0x48094000 0x200>; @@ -17079,7 +17272,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap2420.dtsi b/arch/arm/boot/dt }; diff -Naur --no-dereference a/arch/arm/boot/dts/omap2430.dtsi b/arch/arm/boot/dts/omap2430.dtsi --- a/arch/arm/boot/dts/omap2430.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap2430.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap2430.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -284,7 +284,7 @@ #mbox-cells = <1>; ti,mbox-num-users = <4>; @@ -17091,7 +17284,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap2430.dtsi b/arch/arm/boot/dt }; diff -Naur --no-dereference a/arch/arm/boot/dts/omap2430-sdp.dts b/arch/arm/boot/dts/omap2430-sdp.dts --- a/arch/arm/boot/dts/omap2430-sdp.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap2430-sdp.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap2430-sdp.dts 2024-11-24 20:19:38.099228694 -0500 @@ -43,8 +43,8 @@ gpmc,sync-clk-ps = <0>; gpmc,mux-add-data = <2>; @@ -17105,7 +17298,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap2430-sdp.dts b/arch/arm/boot gpmc,cs-wr-off-ns = <187>; diff -Naur --no-dereference a/arch/arm/boot/dts/omap3-beagle-xm.dts b/arch/arm/boot/dts/omap3-beagle-xm.dts --- a/arch/arm/boot/dts/omap3-beagle-xm.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap3-beagle-xm.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap3-beagle-xm.dts 2024-11-24 20:19:38.099228694 -0500 @@ -34,26 +34,26 @@ clock-frequency = <26000000>; }; @@ -17140,7 +17333,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap3-beagle-xm.dts b/arch/arm/b max-brightness = <127>; diff -Naur --no-dereference a/arch/arm/boot/dts/omap3-devkit8000-common.dtsi b/arch/arm/boot/dts/omap3-devkit8000-common.dtsi --- a/arch/arm/boot/dts/omap3-devkit8000-common.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap3-devkit8000-common.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap3-devkit8000-common.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -285,8 +285,8 @@ gpmc,mux-add-data = <0>; gpmc,device-width = <1>; @@ -17154,7 +17347,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap3-devkit8000-common.dtsi b/a gpmc,cs-rd-off-ns = <180>; diff -Naur --no-dereference a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi --- a/arch/arm/boot/dts/omap3.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap3.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap3.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -440,7 +440,7 @@ #mbox-cells = <1>; ti,mbox-num-users = <2>; @@ -17166,7 +17359,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/o }; diff -Naur --no-dereference a/arch/arm/boot/dts/omap3-gta04.dtsi b/arch/arm/boot/dts/omap3-gta04.dtsi --- a/arch/arm/boot/dts/omap3-gta04.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap3-gta04.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap3-gta04.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -490,8 +490,8 @@ }; @@ -17180,7 +17373,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap3-gta04.dtsi b/arch/arm/boot }; diff -Naur --no-dereference a/arch/arm/boot/dts/omap3-overo-base.dtsi b/arch/arm/boot/dts/omap3-overo-base.dtsi --- a/arch/arm/boot/dts/omap3-overo-base.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap3-overo-base.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap3-overo-base.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -14,10 +14,10 @@ reg = <0 0>; }; @@ -17196,7 +17389,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap3-overo-base.dtsi b/arch/arm max-brightness = <127>; diff -Naur --no-dereference a/arch/arm/boot/dts/omap3-sb-t35.dtsi b/arch/arm/boot/dts/omap3-sb-t35.dtsi --- a/arch/arm/boot/dts/omap3-sb-t35.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap3-sb-t35.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap3-sb-t35.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -108,8 +108,8 @@ reg = <4 0 0xff>; bank-width = <2>; @@ -17210,7 +17403,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap3-sb-t35.dtsi b/arch/arm/boo gpmc,cs-wr-off-ns = <150>; diff -Naur --no-dereference a/arch/arm/boot/dts/omap4-droid4-xt894.dts b/arch/arm/boot/dts/omap4-droid4-xt894.dts --- a/arch/arm/boot/dts/omap4-droid4-xt894.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap4-droid4-xt894.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap4-droid4-xt894.dts 2024-11-24 20:19:38.099228694 -0500 @@ -4,6 +4,149 @@ #include "motorola-mapphone-common.dtsi" @@ -17363,7 +17556,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap4-droid4-xt894.dts b/arch/ar +}; diff -Naur --no-dereference a/arch/arm/boot/dts/omap4-droid-bionic-xt875.dts b/arch/arm/boot/dts/omap4-droid-bionic-xt875.dts --- a/arch/arm/boot/dts/omap4-droid-bionic-xt875.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap4-droid-bionic-xt875.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap4-droid-bionic-xt875.dts 2024-11-24 20:19:38.099228694 -0500 @@ -7,3 +7,49 @@ model = "Motorola Droid Bionic XT875"; compatible = "motorola,droid-bionic", "ti,omap4430", "ti,omap4"; @@ -17416,7 +17609,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap4-droid-bionic-xt875.dts b/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/omap4-kc1.dts b/arch/arm/boot/dts/omap4-kc1.dts --- a/arch/arm/boot/dts/omap4-kc1.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap4-kc1.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap4-kc1.dts 2024-11-24 20:19:38.100228696 -0500 @@ -15,16 +15,16 @@ reg = <0x80000000 0x20000000>; /* 512 MB */ }; @@ -17439,7 +17632,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap4-kc1.dts b/arch/arm/boot/dt max-brightness = <127>; diff -Naur --no-dereference a/arch/arm/boot/dts/omap4-panda-es.dts b/arch/arm/boot/dts/omap4-panda-es.dts --- a/arch/arm/boot/dts/omap4-panda-es.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap4-panda-es.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap4-panda-es.dts 2024-11-24 20:19:38.100228696 -0500 @@ -49,6 +49,22 @@ OMAP4_IOPAD(0x0fc, PIN_INPUT_PULLUP | MUX_MODE3) /* gpio_113 */ >; @@ -17485,7 +17678,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap4-panda-es.dts b/arch/arm/bo +}; diff -Naur --no-dereference a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts --- a/arch/arm/boot/dts/omap4-sdp.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap4-sdp.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap4-sdp.dts 2024-11-24 20:19:38.100228696 -0500 @@ -45,58 +45,60 @@ regulator-boot-on; }; @@ -17561,7 +17754,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dt max-brightness = <255>; diff -Naur --no-dereference a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi --- a/arch/arm/boot/dts/omap5.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap5.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap5.dtsi 2024-11-24 20:19:38.100228696 -0500 @@ -522,6 +522,9 @@ clocks = <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 8>, <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 10>; @@ -17584,7 +17777,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/o diff -Naur --no-dereference a/arch/arm/boot/dts/omap5-l4.dtsi b/arch/arm/boot/dts/omap5-l4.dtsi --- a/arch/arm/boot/dts/omap5-l4.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap5-l4.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap5-l4.dtsi 2024-11-24 20:19:38.100228696 -0500 @@ -194,7 +194,7 @@ #size-cells = <1>; utmi-mode = <2>; @@ -17596,7 +17789,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap5-l4.dtsi b/arch/arm/boot/dt interrupts = , diff -Naur --no-dereference a/arch/arm/boot/dts/omap-gpmc-smsc911x.dtsi b/arch/arm/boot/dts/omap-gpmc-smsc911x.dtsi --- a/arch/arm/boot/dts/omap-gpmc-smsc911x.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap-gpmc-smsc911x.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap-gpmc-smsc911x.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -25,8 +25,8 @@ compatible = "smsc,lan9221", "smsc,lan9115"; bank-width = <2>; @@ -17610,7 +17803,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap-gpmc-smsc911x.dtsi b/arch/a gpmc,cs-wr-off-ns = <150>; diff -Naur --no-dereference a/arch/arm/boot/dts/omap-zoom-common.dtsi b/arch/arm/boot/dts/omap-zoom-common.dtsi --- a/arch/arm/boot/dts/omap-zoom-common.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/boot/dts/omap-zoom-common.dtsi 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/omap-zoom-common.dtsi 2024-11-24 20:19:38.099228694 -0500 @@ -27,8 +27,8 @@ gpmc,mux-add-data = <0>; gpmc,device-width = <1>; @@ -17624,7 +17817,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/omap-zoom-common.dtsi b/arch/arm gpmc,cs-wr-off-ns = <155>; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/AM335X-PRU-UIO-00A0.dts b/arch/arm/boot/dts/overlays/AM335X-PRU-UIO-00A0.dts --- a/arch/arm/boot/dts/overlays/AM335X-PRU-UIO-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/AM335X-PRU-UIO-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/AM335X-PRU-UIO-00A0.dts 2024-11-24 20:19:38.100228696 -0500 @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -17656,7 +17849,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/AM335X-PRU-UIO-00A0.dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/AM57XX-PRU-UIO-00A0.dts b/arch/arm/boot/dts/overlays/AM57XX-PRU-UIO-00A0.dts --- a/arch/arm/boot/dts/overlays/AM57XX-PRU-UIO-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/AM57XX-PRU-UIO-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/AM57XX-PRU-UIO-00A0.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -17715,7 +17908,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/AM57XX-PRU-UIO-00A0.dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-ADC-00A0.dts b/arch/arm/boot/dts/overlays/BB-ADC-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-ADC-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-ADC-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-ADC-00A0.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -17831,7 +18024,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-ADC-00A0.dts b/arch/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BBBW-WL1835-00A0.dts b/arch/arm/boot/dts/overlays/BB-BBBW-WL1835-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-BBBW-WL1835-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-BBBW-WL1835-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-BBBW-WL1835-00A0.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -17955,7 +18148,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BBBW-WL1835-00A0.dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BBGG-WL1835-00A0.dts b/arch/arm/boot/dts/overlays/BB-BBGG-WL1835-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-BBGG-WL1835-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-BBGG-WL1835-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-BBGG-WL1835-00A0.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,246 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -18205,7 +18398,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BBGG-WL1835-00A0.dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BBGW-WL1835-00A0.dts b/arch/arm/boot/dts/overlays/BB-BBGW-WL1835-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-BBGW-WL1835-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-BBGW-WL1835-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-BBGW-WL1835-00A0.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,214 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -18423,7 +18616,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BBGW-WL1835-00A0.dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BONE-4D4C-01-00A1.dts b/arch/arm/boot/dts/overlays/BB-BONE-4D4C-01-00A1.dts --- a/arch/arm/boot/dts/overlays/BB-BONE-4D4C-01-00A1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-BONE-4D4C-01-00A1.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-BONE-4D4C-01-00A1.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,224 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -18651,7 +18844,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BONE-4D4C-01-00A1.dt +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BONE-4D5R-01-00A1.dts b/arch/arm/boot/dts/overlays/BB-BONE-4D5R-01-00A1.dts --- a/arch/arm/boot/dts/overlays/BB-BONE-4D5R-01-00A1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-BONE-4D5R-01-00A1.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-BONE-4D5R-01-00A1.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,224 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -18879,7 +19072,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BONE-4D5R-01-00A1.dt +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BONE-eMMC1-01-00A0.dts b/arch/arm/boot/dts/overlays/BB-BONE-eMMC1-01-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-BONE-eMMC1-01-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-BONE-eMMC1-01-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-BONE-eMMC1-01-00A0.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -18944,7 +19137,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BONE-eMMC1-01-00A0.d +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BONE-LCD4-01-00A1.dts b/arch/arm/boot/dts/overlays/BB-BONE-LCD4-01-00A1.dts --- a/arch/arm/boot/dts/overlays/BB-BONE-LCD4-01-00A1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-BONE-LCD4-01-00A1.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-BONE-LCD4-01-00A1.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,276 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -19224,7 +19417,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BONE-LCD4-01-00A1.dt +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BONE-NH7C-01-A0.dts b/arch/arm/boot/dts/overlays/BB-BONE-NH7C-01-A0.dts --- a/arch/arm/boot/dts/overlays/BB-BONE-NH7C-01-A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-BONE-NH7C-01-A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-BONE-NH7C-01-A0.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,232 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -19460,7 +19653,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-BONE-NH7C-01-A0.dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-CAPE-DISP-CT4-00A0.dts b/arch/arm/boot/dts/overlays/BB-CAPE-DISP-CT4-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-CAPE-DISP-CT4-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-CAPE-DISP-CT4-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-CAPE-DISP-CT4-00A0.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,210 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -19674,7 +19867,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-CAPE-DISP-CT4-00A0.d +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-HDMI-TDA998x-00A0.dts b/arch/arm/boot/dts/overlays/BB-HDMI-TDA998x-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-HDMI-TDA998x-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-HDMI-TDA998x-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-HDMI-TDA998x-00A0.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,188 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -19866,7 +20059,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-HDMI-TDA998x-00A0.dt +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-I2C1-MCP7940X-00A0.dts b/arch/arm/boot/dts/overlays/BB-I2C1-MCP7940X-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-I2C1-MCP7940X-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-I2C1-MCP7940X-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-I2C1-MCP7940X-00A0.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -19951,7 +20144,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-I2C1-MCP7940X-00A0.d +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-I2C1-RTC-DS3231.dts b/arch/arm/boot/dts/overlays/BB-I2C1-RTC-DS3231.dts --- a/arch/arm/boot/dts/overlays/BB-I2C1-RTC-DS3231.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-I2C1-RTC-DS3231.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-I2C1-RTC-DS3231.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20024,7 +20217,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-I2C1-RTC-DS3231.dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-I2C1-RTC-PCF8563.dts b/arch/arm/boot/dts/overlays/BB-I2C1-RTC-PCF8563.dts --- a/arch/arm/boot/dts/overlays/BB-I2C1-RTC-PCF8563.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-I2C1-RTC-PCF8563.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-I2C1-RTC-PCF8563.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20089,7 +20282,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-I2C1-RTC-PCF8563.dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-I2C2-BME680.dts b/arch/arm/boot/dts/overlays/BB-I2C2-BME680.dts --- a/arch/arm/boot/dts/overlays/BB-I2C2-BME680.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-I2C2-BME680.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-I2C2-BME680.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20124,7 +20317,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-I2C2-BME680.dts b/ar +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-I2C2-MPU6050.dts b/arch/arm/boot/dts/overlays/BB-I2C2-MPU6050.dts --- a/arch/arm/boot/dts/overlays/BB-I2C2-MPU6050.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-I2C2-MPU6050.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-I2C2-MPU6050.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20181,7 +20374,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-I2C2-MPU6050.dts b/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-LCD-ADAFRUIT-24-SPI1-00A0.dts b/arch/arm/boot/dts/overlays/BB-LCD-ADAFRUIT-24-SPI1-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-LCD-ADAFRUIT-24-SPI1-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-LCD-ADAFRUIT-24-SPI1-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-LCD-ADAFRUIT-24-SPI1-00A0.dts 2024-11-24 20:19:38.101228697 -0500 @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20365,7 +20558,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-LCD-ADAFRUIT-24-SPI1 +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-NHDMI-TDA998x-00A0.dts b/arch/arm/boot/dts/overlays/BB-NHDMI-TDA998x-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-NHDMI-TDA998x-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-NHDMI-TDA998x-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-NHDMI-TDA998x-00A0.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20494,7 +20687,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-NHDMI-TDA998x-00A0.d +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BBORG_COMMS-00A2.dts b/arch/arm/boot/dts/overlays/BBORG_COMMS-00A2.dts --- a/arch/arm/boot/dts/overlays/BBORG_COMMS-00A2.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BBORG_COMMS-00A2.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BBORG_COMMS-00A2.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20561,7 +20754,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BBORG_COMMS-00A2.dts b/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BBORG_FAN-A000.dts b/arch/arm/boot/dts/overlays/BBORG_FAN-A000.dts --- a/arch/arm/boot/dts/overlays/BBORG_FAN-A000.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BBORG_FAN-A000.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BBORG_FAN-A000.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20592,7 +20785,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BBORG_FAN-A000.dts b/ar +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BBORG_RELAY-00A2.dts b/arch/arm/boot/dts/overlays/BBORG_RELAY-00A2.dts --- a/arch/arm/boot/dts/overlays/BBORG_RELAY-00A2.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BBORG_RELAY-00A2.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BBORG_RELAY-00A2.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20645,7 +20838,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BBORG_RELAY-00A2.dts b/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-SPIDEV0-00A0.dts b/arch/arm/boot/dts/overlays/BB-SPIDEV0-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-SPIDEV0-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-SPIDEV0-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-SPIDEV0-00A0.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20730,7 +20923,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-SPIDEV0-00A0.dts b/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-SPIDEV1-00A0.dts b/arch/arm/boot/dts/overlays/BB-SPIDEV1-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-SPIDEV1-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-SPIDEV1-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-SPIDEV1-00A0.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20815,7 +21008,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-SPIDEV1-00A0.dts b/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-UART1-00A0.dts b/arch/arm/boot/dts/overlays/BB-UART1-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-UART1-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-UART1-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-UART1-00A0.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20864,7 +21057,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-UART1-00A0.dts b/arc +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-UART2-00A0.dts b/arch/arm/boot/dts/overlays/BB-UART2-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-UART2-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-UART2-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-UART2-00A0.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20913,7 +21106,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-UART2-00A0.dts b/arc +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-UART4-00A0.dts b/arch/arm/boot/dts/overlays/BB-UART4-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-UART4-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-UART4-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-UART4-00A0.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -20960,7 +21153,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-UART4-00A0.dts b/arc +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-W1-P9.12-00A0.dts b/arch/arm/boot/dts/overlays/BB-W1-P9.12-00A0.dts --- a/arch/arm/boot/dts/overlays/BB-W1-P9.12-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BB-W1-P9.12-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BB-W1-P9.12-00A0.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -21010,7 +21203,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BB-W1-P9.12-00A0.dts b/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BONE-ADC.dts b/arch/arm/boot/dts/overlays/BONE-ADC.dts --- a/arch/arm/boot/dts/overlays/BONE-ADC.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/BONE-ADC.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/BONE-ADC.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -21042,7 +21235,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/BONE-ADC.dts b/arch/arm +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/LED_P8_03.dts b/arch/arm/boot/dts/overlays/LED_P8_03.dts --- a/arch/arm/boot/dts/overlays/LED_P8_03.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/LED_P8_03.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/LED_P8_03.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,12 @@ +/dts-v1/; +/plugin/; @@ -21058,7 +21251,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/LED_P8_03.dts b/arch/ar +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/LED_P8_04.dts b/arch/arm/boot/dts/overlays/LED_P8_04.dts --- a/arch/arm/boot/dts/overlays/LED_P8_04.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/LED_P8_04.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/LED_P8_04.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,17 @@ +/dts-v1/; +/plugin/; @@ -21079,7 +21272,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/LED_P8_04.dts b/arch/ar +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile --- a/arch/arm/boot/dts/overlays/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/Makefile 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/overlays/Makefile 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,46 @@ +# Overlays for the BeagleBone platform + @@ -21129,7 +21322,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boo +clean-files := *.dtbo diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/M-BB-BBG-00A0.dts b/arch/arm/boot/dts/overlays/M-BB-BBG-00A0.dts --- a/arch/arm/boot/dts/overlays/M-BB-BBG-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/M-BB-BBG-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/M-BB-BBG-00A0.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -21154,7 +21347,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/M-BB-BBG-00A0.dts b/arc +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/M-BB-BBGG-00A0.dts b/arch/arm/boot/dts/overlays/M-BB-BBGG-00A0.dts --- a/arch/arm/boot/dts/overlays/M-BB-BBGG-00A0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/M-BB-BBGG-00A0.dts 2024-08-28 19:44:05.596037882 -0400 ++++ b/arch/arm/boot/dts/overlays/M-BB-BBGG-00A0.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -21182,7 +21375,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/M-BB-BBGG-00A0.dts b/ar +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/PB-HACKADAY-2021.dts b/arch/arm/boot/dts/overlays/PB-HACKADAY-2021.dts --- a/arch/arm/boot/dts/overlays/PB-HACKADAY-2021.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/PB-HACKADAY-2021.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/overlays/PB-HACKADAY-2021.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -21293,7 +21486,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/PB-HACKADAY-2021.dts b/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/PB-MIKROBUS-0.dts b/arch/arm/boot/dts/overlays/PB-MIKROBUS-0.dts --- a/arch/arm/boot/dts/overlays/PB-MIKROBUS-0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/PB-MIKROBUS-0.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/overlays/PB-MIKROBUS-0.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -21404,7 +21597,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/PB-MIKROBUS-0.dts b/arc +}; diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/PB-MIKROBUS-1.dts b/arch/arm/boot/dts/overlays/PB-MIKROBUS-1.dts --- a/arch/arm/boot/dts/overlays/PB-MIKROBUS-1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/overlays/PB-MIKROBUS-1.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/overlays/PB-MIKROBUS-1.dts 2024-11-24 20:19:38.102228699 -0500 @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -21516,7 +21709,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/overlays/PB-MIKROBUS-1.dts b/arc +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/am571x-idk-touchscreen.dts b/arch/arm/boot/dts/ti/am571x-idk-touchscreen.dts --- a/arch/arm/boot/dts/ti/am571x-idk-touchscreen.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/am571x-idk-touchscreen.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/am571x-idk-touchscreen.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -21545,7 +21738,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/am571x-idk-touchscreen.dts b/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/am572x-idk-touchscreen.dts b/arch/arm/boot/dts/ti/am572x-idk-touchscreen.dts --- a/arch/arm/boot/dts/ti/am572x-idk-touchscreen.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/am572x-idk-touchscreen.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/am572x-idk-touchscreen.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -21562,7 +21755,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/am572x-idk-touchscreen.dts b/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/am57xx-evm-common.dts b/arch/arm/boot/dts/ti/am57xx-evm-common.dts --- a/arch/arm/boot/dts/ti/am57xx-evm-common.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/am57xx-evm-common.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/am57xx-evm-common.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,175 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -21741,7 +21934,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/am57xx-evm-common.dts b/arch/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/am57xx-evm-reva3.dts b/arch/arm/boot/dts/ti/am57xx-evm-reva3.dts --- a/arch/arm/boot/dts/ti/am57xx-evm-reva3.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/am57xx-evm-reva3.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/am57xx-evm-reva3.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; @@ -21757,7 +21950,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/am57xx-evm-reva3.dts b/arch/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/am57xx-idk-osd-lcd-common.dts b/arch/arm/boot/dts/ti/am57xx-idk-osd-lcd-common.dts --- a/arch/arm/boot/dts/ti/am57xx-idk-osd-lcd-common.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/am57xx-idk-osd-lcd-common.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/am57xx-idk-osd-lcd-common.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -21822,7 +22015,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/am57xx-idk-osd-lcd-common.dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra71-evm-lcd-auo-g101evn01.0.dts b/arch/arm/boot/dts/ti/dra71-evm-lcd-auo-g101evn01.0.dts --- a/arch/arm/boot/dts/ti/dra71-evm-lcd-auo-g101evn01.0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/dra71-evm-lcd-auo-g101evn01.0.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/dra71-evm-lcd-auo-g101evn01.0.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,115 @@ +/dts-v1/; +/plugin/; @@ -21941,7 +22134,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra71-evm-lcd-auo-g101evn01.0 +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra71-evm-nand.dts b/arch/arm/boot/dts/ti/dra71-evm-nand.dts --- a/arch/arm/boot/dts/ti/dra71-evm-nand.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/dra71-evm-nand.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/dra71-evm-nand.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,6 @@ +/dts-v1/; +/plugin/; @@ -21951,7 +22144,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra71-evm-nand.dts b/arch/arm +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra72-evm-touchscreen.dts b/arch/arm/boot/dts/ti/dra72-evm-touchscreen.dts --- a/arch/arm/boot/dts/ti/dra72-evm-touchscreen.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/dra72-evm-touchscreen.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/dra72-evm-touchscreen.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -21968,7 +22161,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra72-evm-touchscreen.dts b/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra74-evm-touchscreen.dts b/arch/arm/boot/dts/ti/dra74-evm-touchscreen.dts --- a/arch/arm/boot/dts/ti/dra74-evm-touchscreen.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/dra74-evm-touchscreen.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/dra74-evm-touchscreen.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -21985,7 +22178,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra74-evm-touchscreen.dts b/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra76-evm-tfp410.dts b/arch/arm/boot/dts/ti/dra76-evm-tfp410.dts --- a/arch/arm/boot/dts/ti/dra76-evm-tfp410.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/dra76-evm-tfp410.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/dra76-evm-tfp410.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -22109,7 +22302,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra76-evm-tfp410.dts b/arch/a +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra7x-evm-osd-lcd-common.dts b/arch/arm/boot/dts/ti/dra7x-evm-osd-lcd-common.dts --- a/arch/arm/boot/dts/ti/dra7x-evm-osd-lcd-common.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/dra7x-evm-osd-lcd-common.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/dra7x-evm-osd-lcd-common.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -22237,14 +22430,14 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dra7x-evm-osd-lcd-common.dts +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/dtb-merge.cfg b/arch/arm/boot/dts/ti/dtb-merge.cfg --- a/arch/arm/boot/dts/ti/dtb-merge.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/dtb-merge.cfg 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/dtb-merge.cfg 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,3 @@ +am57xx-evm: am57xx-beagle-x15.dtb am57xx-evm-common.dtbo +am57xx-evm-reva3: am57xx-beagle-x15-revc.dtb am57xx-evm-common.dtbo am57xx-evm-reva3.dtbo +dra71-evm-nand: dra71-evm.dtb dra71-evm-nand.dtb diff -Naur --no-dereference a/arch/arm/boot/dts/ti/lcd-osd101t2045.dts b/arch/arm/boot/dts/ti/lcd-osd101t2045.dts --- a/arch/arm/boot/dts/ti/lcd-osd101t2045.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/lcd-osd101t2045.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/lcd-osd101t2045.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -22287,7 +22480,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/lcd-osd101t2045.dts b/arch/ar +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/lcd-osd101t2587.dts b/arch/arm/boot/dts/ti/lcd-osd101t2587.dts --- a/arch/arm/boot/dts/ti/lcd-osd101t2587.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/lcd-osd101t2587.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/lcd-osd101t2587.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -22330,7 +22523,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/lcd-osd101t2587.dts b/arch/ar +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/Makefile b/arch/arm/boot/dts/ti/Makefile --- a/arch/arm/boot/dts/ti/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/Makefile 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/Makefile 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,52 @@ +# SPDX-License-Identifier: GPL-2.0 +# @@ -22386,7 +22579,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/Makefile b/arch/arm/boot/dts/ +always-y := $(dtb-y) diff -Naur --no-dereference a/arch/arm/boot/dts/ti/ov10635.dts b/arch/arm/boot/dts/ti/ov10635.dts --- a/arch/arm/boot/dts/ti/ov10635.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/ov10635.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/ov10635.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -22460,7 +22653,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/ov10635.dts b/arch/arm/boot/d +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/ov2659-am571x.dts b/arch/arm/boot/dts/ti/ov2659-am571x.dts --- a/arch/arm/boot/dts/ti/ov2659-am571x.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/ov2659-am571x.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/ov2659-am571x.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -22478,7 +22671,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/ov2659-am571x.dts b/arch/arm/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/ov2659-am572x.dts b/arch/arm/boot/dts/ti/ov2659-am572x.dts --- a/arch/arm/boot/dts/ti/ov2659-am572x.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/ov2659-am572x.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/ov2659-am572x.dts 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -22505,7 +22698,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/ov2659-am572x.dts b/arch/arm/ +}; diff -Naur --no-dereference a/arch/arm/boot/dts/ti/ov2659.dtsi b/arch/arm/boot/dts/ti/ov2659.dtsi --- a/arch/arm/boot/dts/ti/ov2659.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/boot/dts/ti/ov2659.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/boot/dts/ti/ov2659.dtsi 2024-11-24 20:19:38.103228701 -0500 @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -22540,7 +22733,7 @@ diff -Naur --no-dereference a/arch/arm/boot/dts/ti/ov2659.dtsi b/arch/arm/boot/d +}; diff -Naur --no-dereference a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig --- a/arch/arm/configs/multi_v7_defconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/configs/multi_v7_defconfig 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/configs/multi_v7_defconfig 2024-11-24 20:19:38.104228703 -0500 @@ -154,6 +154,7 @@ CONFIG_IPV6_MIP6=m CONFIG_IPV6_TUNNEL=m @@ -22572,7 +22765,7 @@ diff -Naur --no-dereference a/arch/arm/configs/multi_v7_defconfig b/arch/arm/con CONFIG_PINCTRL_STMFX=y diff -Naur --no-dereference a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig --- a/arch/arm/configs/omap2plus_defconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/configs/omap2plus_defconfig 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/configs/omap2plus_defconfig 2024-11-24 20:19:38.104228703 -0500 @@ -279,6 +279,7 @@ CONFIG_SERIAL_DEV_BUS=y CONFIG_I2C_CHARDEV=y @@ -22617,15 +22810,15 @@ diff -Naur --no-dereference a/arch/arm/configs/omap2plus_defconfig b/arch/arm/co CONFIG_EXT4_FS_SECURITY=y diff -Naur --no-dereference a/arch/arm/configs/rcn-ee_defconfig b/arch/arm/configs/rcn-ee_defconfig --- a/arch/arm/configs/rcn-ee_defconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm/configs/rcn-ee_defconfig 2024-08-28 19:44:05.600037905 -0400 -@@ -0,0 +1,2834 @@ ++++ b/arch/arm/configs/rcn-ee_defconfig 2024-11-24 20:19:38.104228703 -0500 +@@ -0,0 +1,2830 @@ +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_KERNEL_LZ4=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_NO_HZ_IDLE=y +CONFIG_HIGH_RES_TIMERS=y -+CONFIG_PREEMPT=y ++CONFIG_PREEMPT_RT=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y @@ -22640,7 +22833,6 @@ diff -Naur --no-dereference a/arch/arm/configs/rcn-ee_defconfig b/arch/arm/confi +CONFIG_MEMCG=y +CONFIG_BLK_CGROUP=y +CONFIG_CFS_BANDWIDTH=y -+CONFIG_RT_GROUP_SCHED=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_RDMA=y +CONFIG_CGROUP_FREEZER=y @@ -22728,9 +22920,7 @@ diff -Naur --no-dereference a/arch/arm/configs/rcn-ee_defconfig b/arch/arm/confi +CONFIG_CRYPTO_POLY1305_ARM=y +CONFIG_CRYPTO_NHPOLY1305_NEON=m +CONFIG_CRYPTO_CURVE25519_NEON=y -+CONFIG_OPROFILE=m +CONFIG_KPROBES=y -+CONFIG_JUMP_LABEL=y +CONFIG_MODULES=y +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y @@ -24686,7 +24876,6 @@ diff -Naur --no-dereference a/arch/arm/configs/rcn-ee_defconfig b/arch/arm/confi +CONFIG_LEDS_TRIGGER_MTD=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y -+CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_ACTIVITY=y +CONFIG_LEDS_TRIGGER_GPIO=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y @@ -25453,9 +25642,133 @@ diff -Naur --no-dereference a/arch/arm/configs/rcn-ee_defconfig b/arch/arm/confi +CONFIG_BUG_ON_DATA_CORRUPTION=y +# CONFIG_STRICT_DEVMEM is not set +# CONFIG_RUNTIME_TESTING_MENU is not set +diff -Naur --no-dereference a/arch/arm/include/asm/fixmap.h b/arch/arm/include/asm/fixmap.h +--- a/arch/arm/include/asm/fixmap.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/include/asm/fixmap.h 2024-11-24 20:19:38.104228703 -0500 +@@ -7,14 +7,14 @@ + #define FIXADDR_TOP (FIXADDR_END - PAGE_SIZE) + + #include +-#include ++#include + + enum fixed_addresses { + FIX_EARLYCON_MEM_BASE, + __end_of_permanent_fixed_addresses, + + FIX_KMAP_BEGIN = __end_of_permanent_fixed_addresses, +- FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * NR_CPUS) - 1, ++ FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_MAX_IDX * NR_CPUS) - 1, + + /* Support writing RO kernel text via kprobes, jump labels, etc. */ + FIX_TEXT_POKE0, +diff -Naur --no-dereference a/arch/arm/include/asm/hardirq.h b/arch/arm/include/asm/hardirq.h +--- a/arch/arm/include/asm/hardirq.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/include/asm/hardirq.h 2024-11-24 20:19:38.104228703 -0500 +@@ -2,16 +2,11 @@ + #ifndef __ASM_HARDIRQ_H + #define __ASM_HARDIRQ_H + +-#include +-#include + #include + +-typedef struct { +- unsigned int __softirq_pending; +-} ____cacheline_aligned irq_cpustat_t; +- +-#include /* Standard mappings for irq_cpustat_t above */ +- + #define __ARCH_IRQ_EXIT_IRQS_DISABLED 1 ++#define ack_bad_irq ack_bad_irq ++ ++#include + + #endif /* __ASM_HARDIRQ_H */ +diff -Naur --no-dereference a/arch/arm/include/asm/highmem.h b/arch/arm/include/asm/highmem.h +--- a/arch/arm/include/asm/highmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/include/asm/highmem.h 2024-11-24 20:19:38.104228703 -0500 +@@ -2,7 +2,8 @@ + #ifndef _ASM_HIGHMEM_H + #define _ASM_HIGHMEM_H + +-#include ++#include ++#include + + #define PKMAP_BASE (PAGE_OFFSET - PMD_SIZE) + #define LAST_PKMAP PTRS_PER_PTE +@@ -46,19 +47,32 @@ + + #ifdef ARCH_NEEDS_KMAP_HIGH_GET + extern void *kmap_high_get(struct page *page); +-#else ++ ++static inline void *arch_kmap_local_high_get(struct page *page) ++{ ++ if (IS_ENABLED(CONFIG_DEBUG_HIGHMEM) && !cache_is_vivt()) ++ return NULL; ++ return kmap_high_get(page); ++} ++#define arch_kmap_local_high_get arch_kmap_local_high_get ++ ++#else /* ARCH_NEEDS_KMAP_HIGH_GET */ + static inline void *kmap_high_get(struct page *page) + { + return NULL; + } +-#endif ++#endif /* !ARCH_NEEDS_KMAP_HIGH_GET */ + +-/* +- * The following functions are already defined by +- * when CONFIG_HIGHMEM is not set. +- */ +-#ifdef CONFIG_HIGHMEM +-extern void *kmap_atomic_pfn(unsigned long pfn); +-#endif ++#define arch_kmap_local_post_map(vaddr, pteval) \ ++ local_flush_tlb_kernel_page(vaddr) ++ ++#define arch_kmap_local_pre_unmap(vaddr) \ ++do { \ ++ if (cache_is_vivt()) \ ++ __cpuc_flush_dcache_area((void *)vaddr, PAGE_SIZE); \ ++} while (0) ++ ++#define arch_kmap_local_post_unmap(vaddr) \ ++ local_flush_tlb_kernel_page(vaddr) + + #endif +diff -Naur --no-dereference a/arch/arm/include/asm/irq.h b/arch/arm/include/asm/irq.h +--- a/arch/arm/include/asm/irq.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/include/asm/irq.h 2024-11-24 20:19:38.104228703 -0500 +@@ -31,6 +31,8 @@ + void init_IRQ(void); + + #ifdef CONFIG_SMP ++#include ++ + extern void arch_trigger_cpumask_backtrace(const cpumask_t *mask, + bool exclude_self); + #define arch_trigger_cpumask_backtrace arch_trigger_cpumask_backtrace +diff -Naur --no-dereference a/arch/arm/include/asm/kmap_types.h b/arch/arm/include/asm/kmap_types.h +--- a/arch/arm/include/asm/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/include/asm/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,10 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef __ARM_KMAP_TYPES_H +-#define __ARM_KMAP_TYPES_H +- +-/* +- * This is the "bare minimum". AIO seems to require this. +- */ +-#define KM_TYPE_NR 16 +- +-#endif diff -Naur --no-dereference a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h --- a/arch/arm/include/asm/pgtable-3level.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/include/asm/pgtable-3level.h 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/include/asm/pgtable-3level.h 2024-11-24 20:19:38.104228703 -0500 @@ -68,7 +68,12 @@ #define L_PTE_VALID (_AT(pteval_t, 1) << 0) /* Valid */ #define L_PTE_PRESENT (_AT(pteval_t, 3) << 0) /* Present */ @@ -25471,7 +25784,7 @@ diff -Naur --no-dereference a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/i #define L_PTE_DIRTY (_AT(pteval_t, 1) << 55) diff -Naur --no-dereference a/arch/arm/include/asm/pgtable-3level-hwdef.h b/arch/arm/include/asm/pgtable-3level-hwdef.h --- a/arch/arm/include/asm/pgtable-3level-hwdef.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/include/asm/pgtable-3level-hwdef.h 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/include/asm/pgtable-3level-hwdef.h 2024-11-24 20:19:38.104228703 -0500 @@ -32,7 +32,11 @@ #define PMD_SECT_CACHEABLE (_AT(pmdval_t, 1) << 3) #define PMD_SECT_USER (_AT(pmdval_t, 1) << 6) /* AP[1] */ @@ -25497,9 +25810,62 @@ diff -Naur --no-dereference a/arch/arm/include/asm/pgtable-3level-hwdef.h b/arch #define PTE_EXT_AF (_AT(pteval_t, 1) << 10) /* Access Flag */ #define PTE_EXT_NG (_AT(pteval_t, 1) << 11) /* nG */ #define PTE_EXT_PXN (_AT(pteval_t, 1) << 53) /* PXN */ +diff -Naur --no-dereference a/arch/arm/include/asm/spinlock_types.h b/arch/arm/include/asm/spinlock_types.h +--- a/arch/arm/include/asm/spinlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/include/asm/spinlock_types.h 2024-11-24 20:19:38.104228703 -0500 +@@ -2,10 +2,6 @@ + #ifndef __ASM_SPINLOCK_TYPES_H + #define __ASM_SPINLOCK_TYPES_H + +-#ifndef __LINUX_SPINLOCK_TYPES_H +-# error "please don't include this file directly" +-#endif +- + #define TICKET_SHIFT 16 + + typedef struct { +diff -Naur --no-dereference a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h +--- a/arch/arm/include/asm/thread_info.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/include/asm/thread_info.h 2024-11-24 20:19:38.104228703 -0500 +@@ -46,6 +46,7 @@ + struct thread_info { + unsigned long flags; /* low level flags */ + int preempt_count; /* 0 => preemptable, <0 => bug */ ++ int preempt_lazy_count; /* 0 => preemptable, <0 => bug */ + mm_segment_t addr_limit; /* address limit */ + struct task_struct *task; /* main task structure */ + __u32 cpu; /* cpu */ +@@ -134,6 +135,7 @@ + #define TIF_NOTIFY_RESUME 2 /* callback before returning to user */ + #define TIF_UPROBE 3 /* breakpointed or singlestepping */ + #define TIF_NOTIFY_SIGNAL 4 /* signal notifications exist */ ++#define TIF_NEED_RESCHED_LAZY 5 + + #define TIF_USING_IWMMXT 17 + #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ +@@ -143,10 +145,10 @@ + #define TIF_SYSCALL_TRACEPOINT 22 /* syscall tracepoint instrumentation */ + #define TIF_SECCOMP 23 /* seccomp syscall filtering active */ + +- + #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) + #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) + #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) ++#define _TIF_NEED_RESCHED_LAZY (1 << TIF_NEED_RESCHED_LAZY) + #define _TIF_UPROBE (1 << TIF_UPROBE) + #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) + #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) +@@ -164,6 +166,7 @@ + */ + #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \ + _TIF_NOTIFY_RESUME | _TIF_UPROBE | \ ++ _TIF_NEED_RESCHED_LAZY | \ + _TIF_NOTIFY_SIGNAL) + + #endif /* __KERNEL__ */ diff -Naur --no-dereference a/arch/arm/include/asm/xor.h b/arch/arm/include/asm/xor.h --- a/arch/arm/include/asm/xor.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/include/asm/xor.h 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/include/asm/xor.h 2024-11-24 20:19:38.104228703 -0500 @@ -209,3 +209,9 @@ #else #define NEON_TEMPLATES @@ -25510,9 +25876,141 @@ diff -Naur --no-dereference a/arch/arm/include/asm/xor.h b/arch/arm/include/asm/ +#else +#define XOR_SELECT_TEMPLATE(FASTEST) (&xor_block_arm4regs) +#endif +diff -Naur --no-dereference a/arch/arm/Kconfig b/arch/arm/Kconfig +--- a/arch/arm/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/Kconfig 2024-11-24 20:19:38.092228681 -0500 +@@ -31,6 +31,7 @@ + select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX + select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT if CPU_V7 + select ARCH_SUPPORTS_ATOMIC_RMW ++ select ARCH_SUPPORTS_RT if HAVE_POSIX_CPU_TIMERS_TASK_WORK + select ARCH_USE_BUILTIN_BSWAP + select ARCH_USE_CMPXCHG_LOCKREF + select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU +@@ -66,7 +67,7 @@ + select HARDIRQS_SW_RESEND + select HAVE_ARCH_AUDITSYSCALL if AEABI && !OABI_COMPAT + select HAVE_ARCH_BITREVERSE if (CPU_32v7M || CPU_32v7) && !CPU_32v6 +- select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU ++ select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU && !PREEMPT_RT + select HAVE_ARCH_KGDB if !CPU_ENDIAN_BE32 && MMU + select HAVE_ARCH_MMAP_RND_BITS if MMU + select HAVE_ARCH_SECCOMP +@@ -106,6 +107,7 @@ + select HAVE_PERF_EVENTS + select HAVE_PERF_REGS + select HAVE_PERF_USER_STACK_DUMP ++ select HAVE_PREEMPT_LAZY + select MMU_GATHER_RCU_TABLE_FREE if SMP && ARM_LPAE + select HAVE_REGS_AND_STACK_ACCESS_API + select HAVE_RSEQ +@@ -121,6 +123,7 @@ + select OLD_SIGSUSPEND3 + select PCI_SYSCALL if PCI + select PERF_USE_VMALLOC ++ select HAVE_POSIX_CPU_TIMERS_TASK_WORK if !KVM + select RTC_LIB + select SET_FS + select SYS_SUPPORTS_APM_EMULATION +@@ -1496,6 +1499,7 @@ + config HIGHMEM + bool "High Memory Support" + depends on MMU ++ select KMAP_LOCAL + help + The address space of ARM processors is only 4 Gigabytes large + and it has to accommodate user address space, kernel address +diff -Naur --no-dereference a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c +--- a/arch/arm/kernel/asm-offsets.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/kernel/asm-offsets.c 2024-11-24 20:19:38.104228703 -0500 +@@ -43,6 +43,7 @@ + BLANK(); + DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); + DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); ++ DEFINE(TI_PREEMPT_LAZY, offsetof(struct thread_info, preempt_lazy_count)); + DEFINE(TI_ADDR_LIMIT, offsetof(struct thread_info, addr_limit)); + DEFINE(TI_TASK, offsetof(struct thread_info, task)); + DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); +diff -Naur --no-dereference a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S +--- a/arch/arm/kernel/entry-armv.S 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/kernel/entry-armv.S 2024-11-24 20:19:38.105228705 -0500 +@@ -206,11 +206,18 @@ + + #ifdef CONFIG_PREEMPTION + ldr r8, [tsk, #TI_PREEMPT] @ get preempt count +- ldr r0, [tsk, #TI_FLAGS] @ get flags + teq r8, #0 @ if preempt count != 0 ++ bne 1f @ return from exeption ++ ldr r0, [tsk, #TI_FLAGS] @ get flags ++ tst r0, #_TIF_NEED_RESCHED @ if NEED_RESCHED is set ++ blne svc_preempt @ preempt! ++ ++ ldr r8, [tsk, #TI_PREEMPT_LAZY] @ get preempt lazy count ++ teq r8, #0 @ if preempt lazy count != 0 + movne r0, #0 @ force flags to 0 +- tst r0, #_TIF_NEED_RESCHED ++ tst r0, #_TIF_NEED_RESCHED_LAZY + blne svc_preempt ++1: + #endif + + svc_exit r5, irq = 1 @ return from exception +@@ -225,8 +232,14 @@ + 1: bl preempt_schedule_irq @ irq en/disable is done inside + ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS + tst r0, #_TIF_NEED_RESCHED ++ bne 1b ++ tst r0, #_TIF_NEED_RESCHED_LAZY + reteq r8 @ go again +- b 1b ++ ldr r0, [tsk, #TI_PREEMPT_LAZY] @ get preempt lazy count ++ teq r0, #0 @ if preempt lazy count != 0 ++ beq 1b ++ ret r8 @ go again ++ + #endif + + __und_fault: +diff -Naur --no-dereference a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S +--- a/arch/arm/kernel/entry-common.S 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/kernel/entry-common.S 2024-11-24 20:19:38.105228705 -0500 +@@ -92,6 +92,7 @@ + ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing + movs r1, r1, lsl #16 + beq no_work_pending ++do_slower_path: + UNWIND(.fnend ) + ENDPROC(ret_fast_syscall) + +diff -Naur --no-dereference a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c +--- a/arch/arm/kernel/signal.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/kernel/signal.c 2024-11-24 20:19:38.105228705 -0500 +@@ -649,7 +649,8 @@ + */ + trace_hardirqs_off(); + do { +- if (likely(thread_flags & _TIF_NEED_RESCHED)) { ++ if (likely(thread_flags & (_TIF_NEED_RESCHED | ++ _TIF_NEED_RESCHED_LAZY))) { + schedule(); + } else { + if (unlikely(!user_mode(regs))) +diff -Naur --no-dereference a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c +--- a/arch/arm/kernel/smp.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/kernel/smp.c 2024-11-24 20:19:38.105228705 -0500 +@@ -671,9 +671,7 @@ + break; + + case IPI_CPU_BACKTRACE: +- printk_nmi_enter(); + nmi_cpu_backtrace(get_irq_regs()); +- printk_nmi_exit(); + break; + + default: diff -Naur --no-dereference a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig --- a/arch/arm/mach-keystone/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/mach-keystone/Kconfig 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/mach-keystone/Kconfig 2024-11-24 20:19:38.105228705 -0500 @@ -12,6 +12,10 @@ select ZONE_DMA if ARM_LPAE select PINCTRL @@ -25526,7 +26024,7 @@ diff -Naur --no-dereference a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-key + bool diff -Naur --no-dereference a/arch/arm/mach-omap1/clock.c b/arch/arm/mach-omap1/clock.c --- a/arch/arm/mach-omap1/clock.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/mach-omap1/clock.c 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/mach-omap1/clock.c 2024-11-24 20:19:38.105228705 -0500 @@ -612,7 +612,7 @@ unsigned long flags; int ret; @@ -25592,7 +26090,7 @@ diff -Naur --no-dereference a/arch/arm/mach-omap1/clock.c b/arch/arm/mach-omap1/ mutex_lock(&clocks_mutex); diff -Naur --no-dereference a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c --- a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c 2024-11-24 20:19:38.105228705 -0500 @@ -235,7 +235,7 @@ hw = kzalloc(sizeof(*hw), GFP_KERNEL); @@ -25620,7 +26118,7 @@ diff -Naur --no-dereference a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c b/arc #endif diff -Naur --no-dereference a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c --- a/arch/arm/mach-omap2/display.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/mach-omap2/display.c 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/mach-omap2/display.c 2024-11-24 20:19:38.105228705 -0500 @@ -388,8 +388,7 @@ } @@ -25643,7 +26141,7 @@ diff -Naur --no-dereference a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap diff -Naur --no-dereference a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig --- a/arch/arm/mach-omap2/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/mach-omap2/Kconfig 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/mach-omap2/Kconfig 2024-11-24 20:19:38.105228705 -0500 @@ -101,6 +101,7 @@ select MACH_OMAP_GENERIC select MEMORY @@ -25662,7 +26160,7 @@ diff -Naur --no-dereference a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/ diff -Naur --no-dereference a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c --- a/arch/arm/mach-omap2/omap_device.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/mach-omap2/omap_device.c 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm/mach-omap2/omap_device.c 2024-11-24 20:19:38.105228705 -0500 @@ -336,10 +336,9 @@ struct omap_hwmod **hwmods; @@ -25678,7 +26176,7 @@ diff -Naur --no-dereference a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach- hwmods = kmemdup(ohs, sizeof(struct omap_hwmod *) * oh_cnt, GFP_KERNEL); diff -Naur --no-dereference a/arch/arm/Makefile b/arch/arm/Makefile --- a/arch/arm/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm/Makefile 2024-08-28 19:44:05.592037860 -0400 ++++ b/arch/arm/Makefile 2024-11-24 20:19:38.093228683 -0500 @@ -56,6 +56,9 @@ # KBUILD_CFLAGS += $(call cc-option,-fno-ipa-sra) @@ -25698,9 +26196,213 @@ diff -Naur --no-dereference a/arch/arm/Makefile b/arch/arm/Makefile KBUILD_AFLAGS +=$(CFLAGS_ABI) $(AFLAGS_ISA) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float CHECKFLAGS += -D__arm__ +diff -Naur --no-dereference a/arch/arm/mm/cache-feroceon-l2.c b/arch/arm/mm/cache-feroceon-l2.c +--- a/arch/arm/mm/cache-feroceon-l2.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/mm/cache-feroceon-l2.c 2024-11-24 20:19:38.105228705 -0500 +@@ -49,9 +49,9 @@ + * we simply install a virtual mapping for it only for the + * TLB lookup to occur, hence no need to flush the untouched + * memory mapping afterwards (note: a cache flush may happen +- * in some circumstances depending on the path taken in kunmap_atomic). ++ * in some circumstances depending on the path taken in kunmap_local). + */ +- void *vaddr = kmap_atomic_pfn(paddr >> PAGE_SHIFT); ++ void *vaddr = kmap_local_pfn(paddr >> PAGE_SHIFT); + return (unsigned long)vaddr + (paddr & ~PAGE_MASK); + #else + return __phys_to_virt(paddr); +@@ -61,7 +61,7 @@ + static inline void l2_put_va(unsigned long vaddr) + { + #ifdef CONFIG_HIGHMEM +- kunmap_atomic((void *)vaddr); ++ kunmap_local((void *)vaddr); + #endif + } + +diff -Naur --no-dereference a/arch/arm/mm/cache-xsc3l2.c b/arch/arm/mm/cache-xsc3l2.c +--- a/arch/arm/mm/cache-xsc3l2.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/mm/cache-xsc3l2.c 2024-11-24 20:19:38.105228705 -0500 +@@ -59,7 +59,7 @@ + { + #ifdef CONFIG_HIGHMEM + if (va != -1) +- kunmap_atomic((void *)va); ++ kunmap_local((void *)va); + #endif + } + +@@ -75,7 +75,7 @@ + * in place for it. + */ + l2_unmap_va(prev_va); +- va = (unsigned long)kmap_atomic_pfn(pa >> PAGE_SHIFT); ++ va = (unsigned long)kmap_local_pfn(pa >> PAGE_SHIFT); + } + return va + (pa_offset >> (32 - PAGE_SHIFT)); + #else +diff -Naur --no-dereference a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c +--- a/arch/arm/mm/fault.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/mm/fault.c 2024-11-24 20:19:38.105228705 -0500 +@@ -400,6 +400,9 @@ + if (addr < TASK_SIZE) + return do_page_fault(addr, fsr, regs); + ++ if (interrupts_enabled(regs)) ++ local_irq_enable(); ++ + if (user_mode(regs)) + goto bad_area; + +@@ -470,6 +473,9 @@ + static int + do_sect_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs) + { ++ if (interrupts_enabled(regs)) ++ local_irq_enable(); ++ + do_bad_area(addr, fsr, regs); + return 0; + } +diff -Naur --no-dereference a/arch/arm/mm/highmem.c b/arch/arm/mm/highmem.c +--- a/arch/arm/mm/highmem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/mm/highmem.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1,121 +0,0 @@ +-// SPDX-License-Identifier: GPL-2.0-only +-/* +- * arch/arm/mm/highmem.c -- ARM highmem support +- * +- * Author: Nicolas Pitre +- * Created: september 8, 2008 +- * Copyright: Marvell Semiconductors Inc. +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include "mm.h" +- +-static inline void set_fixmap_pte(int idx, pte_t pte) +-{ +- unsigned long vaddr = __fix_to_virt(idx); +- pte_t *ptep = virt_to_kpte(vaddr); +- +- set_pte_ext(ptep, pte, 0); +- local_flush_tlb_kernel_page(vaddr); +-} +- +-static inline pte_t get_fixmap_pte(unsigned long vaddr) +-{ +- pte_t *ptep = virt_to_kpte(vaddr); +- +- return *ptep; +-} +- +-void *kmap_atomic_high_prot(struct page *page, pgprot_t prot) +-{ +- unsigned int idx; +- unsigned long vaddr; +- void *kmap; +- int type; +- +-#ifdef CONFIG_DEBUG_HIGHMEM +- /* +- * There is no cache coherency issue when non VIVT, so force the +- * dedicated kmap usage for better debugging purposes in that case. +- */ +- if (!cache_is_vivt()) +- kmap = NULL; +- else +-#endif +- kmap = kmap_high_get(page); +- if (kmap) +- return kmap; +- +- type = kmap_atomic_idx_push(); +- +- idx = FIX_KMAP_BEGIN + type + KM_TYPE_NR * smp_processor_id(); +- vaddr = __fix_to_virt(idx); +-#ifdef CONFIG_DEBUG_HIGHMEM +- /* +- * With debugging enabled, kunmap_atomic forces that entry to 0. +- * Make sure it was indeed properly unmapped. +- */ +- BUG_ON(!pte_none(get_fixmap_pte(vaddr))); +-#endif +- /* +- * When debugging is off, kunmap_atomic leaves the previous mapping +- * in place, so the contained TLB flush ensures the TLB is updated +- * with the new mapping. +- */ +- set_fixmap_pte(idx, mk_pte(page, prot)); +- +- return (void *)vaddr; +-} +-EXPORT_SYMBOL(kmap_atomic_high_prot); +- +-void kunmap_atomic_high(void *kvaddr) +-{ +- unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; +- int idx, type; +- +- if (kvaddr >= (void *)FIXADDR_START) { +- type = kmap_atomic_idx(); +- idx = FIX_KMAP_BEGIN + type + KM_TYPE_NR * smp_processor_id(); +- +- if (cache_is_vivt()) +- __cpuc_flush_dcache_area((void *)vaddr, PAGE_SIZE); +-#ifdef CONFIG_DEBUG_HIGHMEM +- BUG_ON(vaddr != __fix_to_virt(idx)); +- set_fixmap_pte(idx, __pte(0)); +-#else +- (void) idx; /* to kill a warning */ +-#endif +- kmap_atomic_idx_pop(); +- } else if (vaddr >= PKMAP_ADDR(0) && vaddr < PKMAP_ADDR(LAST_PKMAP)) { +- /* this address was obtained through kmap_high_get() */ +- kunmap_high(pte_page(pkmap_page_table[PKMAP_NR(vaddr)])); +- } +-} +-EXPORT_SYMBOL(kunmap_atomic_high); +- +-void *kmap_atomic_pfn(unsigned long pfn) +-{ +- unsigned long vaddr; +- int idx, type; +- struct page *page = pfn_to_page(pfn); +- +- preempt_disable(); +- pagefault_disable(); +- if (!PageHighMem(page)) +- return page_address(page); +- +- type = kmap_atomic_idx_push(); +- idx = FIX_KMAP_BEGIN + type + KM_TYPE_NR * smp_processor_id(); +- vaddr = __fix_to_virt(idx); +-#ifdef CONFIG_DEBUG_HIGHMEM +- BUG_ON(!pte_none(get_fixmap_pte(vaddr))); +-#endif +- set_fixmap_pte(idx, pfn_pte(pfn, kmap_prot)); +- +- return (void *)vaddr; +-} +diff -Naur --no-dereference a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile +--- a/arch/arm/mm/Makefile 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm/mm/Makefile 2024-11-24 20:19:38.105228705 -0500 +@@ -19,7 +19,6 @@ + obj-$(CONFIG_DEBUG_VIRTUAL) += physaddr.o + + obj-$(CONFIG_ALIGNMENT_TRAP) += alignment.o +-obj-$(CONFIG_HIGHMEM) += highmem.o + obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o + obj-$(CONFIG_ARM_PV_FIXUP) += pv-fixup-asm.o + diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625.dtsi b/arch/arm64/boot/dts/ti/k3-am625.dtsi --- a/arch/arm64/boot/dts/ti/k3-am625.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625.dtsi 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -25858,7 +26560,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625.dtsi b/arch/arm64/ +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-ov5640.dts b/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-ov5640.dts --- a/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-ov5640.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-ov5640.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-ov5640.dts 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -25938,7 +26640,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-ov5640.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-tevi-ov5640.dts b/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-tevi-ov5640.dts --- a/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-tevi-ov5640.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-tevi-ov5640.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-tevi-ov5640.dts 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -26018,7 +26720,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-csi2-tevi-ov564 +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk.dts b/arch/arm64/boot/dts/ti/k3-am625-sk.dts --- a/arch/arm64/boot/dts/ti/k3-am625-sk.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-sk.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-sk.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,188 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -26210,7 +26912,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk.dts b/arch/arm6 +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-ecap-capture.dts b/arch/arm64/boot/dts/ti/k3-am625-sk-ecap-capture.dts --- a/arch/arm64/boot/dts/ti/k3-am625-sk-ecap-capture.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-sk-ecap-capture.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-sk-ecap-capture.dts 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -26243,7 +26945,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-ecap-capture.dt +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-skeleton.dts b/arch/arm64/boot/dts/ti/k3-am625-skeleton.dts --- a/arch/arm64/boot/dts/ti/k3-am625-skeleton.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-skeleton.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-skeleton.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,342 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -26589,7 +27291,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-skeleton.dts b/arc +/* a53_timer0 */ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-hdmi-audio.dts b/arch/arm64/boot/dts/ti/k3-am625-sk-hdmi-audio.dts --- a/arch/arm64/boot/dts/ti/k3-am625-sk-hdmi-audio.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-sk-hdmi-audio.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-sk-hdmi-audio.dts 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -26633,7 +27335,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-hdmi-audio.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-lpmdemo.dts b/arch/arm64/boot/dts/ti/k3-am625-sk-lpmdemo.dts --- a/arch/arm64/boot/dts/ti/k3-am625-sk-lpmdemo.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-sk-lpmdemo.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-sk-lpmdemo.dts 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -26689,7 +27391,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-lpmdemo.dts b/a +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-mcan.dts b/arch/arm64/boot/dts/ti/k3-am625-sk-mcan.dts --- a/arch/arm64/boot/dts/ti/k3-am625-sk-mcan.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-sk-mcan.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-sk-mcan.dts 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -26733,7 +27435,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-mcan.dts b/arch +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-oldi-panel.dts b/arch/arm64/boot/dts/ti/k3-am625-sk-oldi-panel.dts --- a/arch/arm64/boot/dts/ti/k3-am625-sk-oldi-panel.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-sk-oldi-panel.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-sk-oldi-panel.dts 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -26850,7 +27552,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-oldi-panel.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-qspi-flash.dts b/arch/arm64/boot/dts/ti/k3-am625-sk-qspi-flash.dts --- a/arch/arm64/boot/dts/ti/k3-am625-sk-qspi-flash.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-sk-qspi-flash.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-sk-qspi-flash.dts 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -26870,7 +27572,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-qspi-flash.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-pwm.dts b/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-pwm.dts --- a/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-pwm.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-pwm.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-pwm.dts 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -26933,7 +27635,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-pwm.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-spi.dts b/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-spi.dts --- a/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-spi.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-spi.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-spi.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -26997,7 +27699,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am625-sk-rpi-hdr-spi.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7.dtsi b/arch/arm64/boot/dts/ti/k3-am62a7.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62a7.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a7.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a7.dtsi 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -27104,7 +27806,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7.dtsi b/arch/arm64 +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-0.dts b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-0.dts --- a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-0.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-0.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -27198,7 +27900,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-1.dts b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-1.dts --- a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-1.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-1.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -27292,7 +27994,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-2.dts b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-2.dts --- a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-2.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-2.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-2.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -27386,7 +28088,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-3.dts b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-3.dts --- a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-3.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-3.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0-3.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -27480,7 +28182,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-ov2312-0- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-sk-fusion.dts b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-sk-fusion.dts --- a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-sk-fusion.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-sk-fusion.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-sk-fusion.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -27581,7 +28283,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-fpdlink-sk-fusion +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-sk-csi2-imx219.dts b/arch/arm64/boot/dts/ti/k3-am62a7-sk-csi2-imx219.dts --- a/arch/arm64/boot/dts/ti/k3-am62a7-sk-csi2-imx219.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk-csi2-imx219.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk-csi2-imx219.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -27658,7 +28360,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-sk-csi2-imx219.dt +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts --- a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,782 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -28444,7 +29146,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts b/arch/arm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-sk-ethernet-dc01.dts b/arch/arm64/boot/dts/ti/k3-am62a7-sk-ethernet-dc01.dts --- a/arch/arm64/boot/dts/ti/k3-am62a7-sk-ethernet-dc01.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk-ethernet-dc01.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk-ethernet-dc01.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -28515,7 +29217,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a7-sk-ethernet-dc01. +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a.dtsi b/arch/arm64/boot/dts/ti/k3-am62a.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62a.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a.dtsi 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -28643,7 +29345,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a.dtsi b/arch/arm64/ +#include "k3-am62a-wakeup.dtsi" diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62a-main.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62a-main.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a-main.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a-main.dtsi 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,927 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -29574,7 +30276,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a-main.dtsi b/arch/a +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a-mcu.dtsi b/arch/arm64/boot/dts/ti/k3-am62a-mcu.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62a-mcu.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a-mcu.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a-mcu.dtsi 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,127 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -29705,7 +30407,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a-mcu.dtsi b/arch/ar +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a-thermal.dtsi b/arch/arm64/boot/dts/ti/k3-am62a-thermal.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62a-thermal.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a-thermal.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a-thermal.dtsi 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0 + @@ -29756,7 +30458,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a-thermal.dtsi b/arc +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-am62a-wakeup.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62a-wakeup.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62a-wakeup.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62a-wakeup.dtsi 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -29846,7 +30548,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62a-wakeup.dtsi b/arch +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62.dtsi b/arch/arm64/boot/dts/ti/k3-am62.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62.dtsi 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -29967,7 +30669,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62.dtsi b/arch/arm64/b +#include "k3-am62-wakeup.dtsi" diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,1132 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -31103,7 +31805,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi b/arch/ar +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi b/arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,150 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -31257,7 +31959,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi b/arch/arm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62-thermal.dtsi b/arch/arm64/boot/dts/ti/k3-am62-thermal.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62-thermal.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62-thermal.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62-thermal.dtsi 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0 + @@ -31294,7 +31996,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62-thermal.dtsi b/arch +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-am62-wakeup.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62-wakeup.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62-wakeup.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62-wakeup.dtsi 2024-11-24 20:19:38.106228706 -0500 @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -31391,7 +32093,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62-wakeup.dtsi b/arch/ +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62x-lp-sk.dts b/arch/arm64/boot/dts/ti/k3-am62x-lp-sk.dts --- a/arch/arm64/boot/dts/ti/k3-am62x-lp-sk.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62x-lp-sk.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62x-lp-sk.dts 2024-11-24 20:19:38.108228710 -0500 @@ -0,0 +1,201 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -31596,7 +32298,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62x-lp-sk.dts b/arch/a +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-nand.dts b/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-nand.dts --- a/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-nand.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-nand.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-nand.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -31712,7 +32414,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-nand.dts b/a +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-oldi-panel.dts b/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-oldi-panel.dts --- a/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-oldi-panel.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-oldi-panel.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-oldi-panel.dts 2024-11-24 20:19:38.107228708 -0500 @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -31830,7 +32532,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62x-lp-sk-oldi-panel.d +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62x-sk-common.dtsi b/arch/arm64/boot/dts/ti/k3-am62x-sk-common.dtsi --- a/arch/arm64/boot/dts/ti/k3-am62x-sk-common.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am62x-sk-common.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am62x-sk-common.dtsi 2024-11-24 20:19:38.108228710 -0500 @@ -0,0 +1,781 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -32615,7 +33317,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am62x-sk-common.dtsi b/a +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642.dtsi b/arch/arm64/boot/dts/ti/k3-am642.dtsi --- a/arch/arm64/boot/dts/ti/k3-am642.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am642.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am642.dtsi 2024-11-24 20:19:38.110228714 -0500 @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -32684,7 +33386,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642.dtsi b/arch/arm64/ +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642-evm.dts b/arch/arm64/boot/dts/ti/k3-am642-evm.dts --- a/arch/arm64/boot/dts/ti/k3-am642-evm.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am642-evm.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am642-evm.dts 2024-11-24 20:19:38.110228714 -0500 @@ -0,0 +1,787 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -33475,7 +34177,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642-evm.dts b/arch/arm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualemac.dts b/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualemac.dts --- a/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualemac.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualemac.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualemac.dts 2024-11-24 20:19:38.110228714 -0500 @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -33562,7 +34264,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualema +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualemac-mii.dts b/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualemac-mii.dts --- a/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualemac-mii.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualemac-mii.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualemac-mii.dts 2024-11-24 20:19:38.108228710 -0500 @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -33674,7 +34376,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642-evm-icssg1-dualema +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642-evm-nand.dts b/arch/arm64/boot/dts/ti/k3-am642-evm-nand.dts --- a/arch/arm64/boot/dts/ti/k3-am642-evm-nand.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am642-evm-nand.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am642-evm-nand.dts 2024-11-24 20:19:38.110228714 -0500 @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -33813,7 +34515,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642-evm-nand.dts b/arc +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm64/boot/dts/ti/k3-am642-sk.dts --- a/arch/arm64/boot/dts/ti/k3-am642-sk.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts 2024-11-24 20:19:38.110228714 -0500 @@ -0,0 +1,742 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -34559,7 +35261,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm6 +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am64.dtsi b/arch/arm64/boot/dts/ti/k3-am64.dtsi --- a/arch/arm64/boot/dts/ti/k3-am64.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am64.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am64.dtsi 2024-11-24 20:19:38.108228710 -0500 @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -34675,7 +35377,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am64.dtsi b/arch/arm64/b +#include "k3-am64-mcu.dtsi" diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am64-main.dtsi b/arch/arm64/boot/dts/ti/k3-am64-main.dtsi --- a/arch/arm64/boot/dts/ti/k3-am64-main.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am64-main.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am64-main.dtsi 2024-11-24 20:19:38.108228710 -0500 @@ -0,0 +1,1444 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -36123,7 +36825,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am64-main.dtsi b/arch/ar +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am64-mcu.dtsi b/arch/arm64/boot/dts/ti/k3-am64-mcu.dtsi --- a/arch/arm64/boot/dts/ti/k3-am64-mcu.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am64-mcu.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am64-mcu.dtsi 2024-11-24 20:19:38.108228710 -0500 @@ -0,0 +1,132 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -36259,7 +36961,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am64-mcu.dtsi b/arch/arm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am64-thermal.dtsi b/arch/arm64/boot/dts/ti/k3-am64-thermal.dtsi --- a/arch/arm64/boot/dts/ti/k3-am64-thermal.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am64-thermal.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am64-thermal.dtsi 2024-11-24 20:19:38.108228710 -0500 @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0 + @@ -36296,7 +36998,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am64-thermal.dtsi b/arch +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-base-board.dts b/arch/arm64/boot/dts/ti/k3-am654-base-board.dts --- a/arch/arm64/boot/dts/ti/k3-am654-base-board.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am654-base-board.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am654-base-board.dts 2024-11-24 20:19:38.110228714 -0500 @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* @@ -36651,7 +37353,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-base-board.dts b/a +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-base-board-sr1.dts b/arch/arm64/boot/dts/ti/k3-am654-base-board-sr1.dts --- a/arch/arm64/boot/dts/ti/k3-am654-base-board-sr1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am654-base-board-sr1.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am654-base-board-sr1.dts 2024-11-24 20:19:38.110228714 -0500 @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -36690,7 +37392,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-base-board-sr1.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-evm-oldi-lcd1evm.dts b/arch/arm64/boot/dts/ti/k3-am654-evm-oldi-lcd1evm.dts --- a/arch/arm64/boot/dts/ti/k3-am654-evm-oldi-lcd1evm.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am654-evm-oldi-lcd1evm.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am654-evm-oldi-lcd1evm.dts 2024-11-24 20:19:38.110228714 -0500 @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -36771,7 +37473,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-evm-oldi-lcd1evm.d +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-evm-ov5640.dts b/arch/arm64/boot/dts/ti/k3-am654-evm-ov5640.dts --- a/arch/arm64/boot/dts/ti/k3-am654-evm-ov5640.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am654-evm-ov5640.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am654-evm-ov5640.dts 2024-11-24 20:19:38.110228714 -0500 @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -36825,7 +37527,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-evm-ov5640.dts b/a +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-evm-tc358876.dts b/arch/arm64/boot/dts/ti/k3-am654-evm-tc358876.dts --- a/arch/arm64/boot/dts/ti/k3-am654-evm-tc358876.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am654-evm-tc358876.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am654-evm-tc358876.dts 2024-11-24 20:19:38.110228714 -0500 @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -36942,7 +37644,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-evm-tc358876.dts b +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-gp.dts b/arch/arm64/boot/dts/ti/k3-am654-gp.dts --- a/arch/arm64/boot/dts/ti/k3-am654-gp.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am654-gp.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am654-gp.dts 2024-11-24 20:19:38.110228714 -0500 @@ -0,0 +1,129 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -37075,7 +37777,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-gp.dts b/arch/arm6 +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-idk.dts b/arch/arm64/boot/dts/ti/k3-am654-idk.dts --- a/arch/arm64/boot/dts/ti/k3-am654-idk.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am654-idk.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am654-idk.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,352 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -37431,7 +38133,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-idk.dts b/arch/arm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-idk-sr1.dts b/arch/arm64/boot/dts/ti/k3-am654-idk-sr1.dts --- a/arch/arm64/boot/dts/ti/k3-am654-idk-sr1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am654-idk-sr1.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am654-idk-sr1.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -37493,7 +38195,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-idk-sr1.dts b/arch +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-pcie-usb2.dts b/arch/arm64/boot/dts/ti/k3-am654-pcie-usb2.dts --- a/arch/arm64/boot/dts/ti/k3-am654-pcie-usb2.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am654-pcie-usb2.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am654-pcie-usb2.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -37558,7 +38260,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-pcie-usb2.dts b/ar +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-pcie-usb3.dts b/arch/arm64/boot/dts/ti/k3-am654-pcie-usb3.dts --- a/arch/arm64/boot/dts/ti/k3-am654-pcie-usb3.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am654-pcie-usb3.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am654-pcie-usb3.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -37628,7 +38330,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-pcie-usb3.dts b/ar +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-sr1.dts b/arch/arm64/boot/dts/ti/k3-am654-sr1.dts --- a/arch/arm64/boot/dts/ti/k3-am654-sr1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am654-sr1.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am654-sr1.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -37665,7 +38367,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am654-sr1.dts b/arch/arm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am65.dtsi b/arch/arm64/boot/dts/ti/k3-am65.dtsi --- a/arch/arm64/boot/dts/ti/k3-am65.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am65.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am65.dtsi 2024-11-24 20:19:38.110228714 -0500 @@ -56,7 +56,7 @@ }; @@ -37685,7 +38387,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am65.dtsi b/arch/arm64/b <0x00 0x70000000 0x00 0x70000000 0x00 0x00200000>, /* MSMC SRAM */ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am65-main.dtsi b/arch/arm64/boot/dts/ti/k3-am65-main.dtsi --- a/arch/arm64/boot/dts/ti/k3-am65-main.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am65-main.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am65-main.dtsi 2024-11-24 20:19:38.110228714 -0500 @@ -118,14 +118,13 @@ crypto: crypto@4e00000 { compatible = "ti,am654-sa2ul"; @@ -38398,7 +39100,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am65-main.dtsi b/arch/ar }; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi b/arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi --- a/arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi 2024-11-24 20:19:38.110228714 -0500 @@ -2,7 +2,7 @@ /* * Device Tree Source for AM6 SoC Family MCU Domain peripherals @@ -38512,7 +39214,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi b/arch/arm }; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-base-board.dts b/arch/arm64/boot/dts/ti/k3-am68-sk-base-board.dts --- a/arch/arm64/boot/dts/ti/k3-am68-sk-base-board.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am68-sk-base-board.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am68-sk-base-board.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,837 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -39353,7 +40055,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-base-board.dts b +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-bb-csi2-ov5640.dts b/arch/arm64/boot/dts/ti/k3-am68-sk-bb-csi2-ov5640.dts --- a/arch/arm64/boot/dts/ti/k3-am68-sk-bb-csi2-ov5640.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am68-sk-bb-csi2-ov5640.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am68-sk-bb-csi2-ov5640.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -39463,7 +40165,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-bb-csi2-ov5640.d +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-bb-rpi-cam-imx219.dts b/arch/arm64/boot/dts/ti/k3-am68-sk-bb-rpi-cam-imx219.dts --- a/arch/arm64/boot/dts/ti/k3-am68-sk-bb-rpi-cam-imx219.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am68-sk-bb-rpi-cam-imx219.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am68-sk-bb-rpi-cam-imx219.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,144 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -39611,7 +40313,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-bb-rpi-cam-imx21 +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-fpdlink-fusion.dts b/arch/arm64/boot/dts/ti/k3-am68-sk-fpdlink-fusion.dts --- a/arch/arm64/boot/dts/ti/k3-am68-sk-fpdlink-fusion.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am68-sk-fpdlink-fusion.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am68-sk-fpdlink-fusion.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,144 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -39759,7 +40461,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-fpdlink-fusion.d +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-rpi-hdr-ehrpwm.dts b/arch/arm64/boot/dts/ti/k3-am68-sk-rpi-hdr-ehrpwm.dts --- a/arch/arm64/boot/dts/ti/k3-am68-sk-rpi-hdr-ehrpwm.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am68-sk-rpi-hdr-ehrpwm.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am68-sk-rpi-hdr-ehrpwm.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -39828,7 +40530,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-rpi-hdr-ehrpwm.d +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-som-ddr_mem_carveout.dts b/arch/arm64/boot/dts/ti/k3-am68-sk-som-ddr_mem_carveout.dts --- a/arch/arm64/boot/dts/ti/k3-am68-sk-som-ddr_mem_carveout.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am68-sk-som-ddr_mem_carveout.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am68-sk-som-ddr_mem_carveout.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,248 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -40080,7 +40782,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-som-ddr_mem_carv +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-som.dtsi b/arch/arm64/boot/dts/ti/k3-am68-sk-som.dtsi --- a/arch/arm64/boot/dts/ti/k3-am68-sk-som.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am68-sk-som.dtsi 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am68-sk-som.dtsi 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,167 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -40251,7 +40953,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am68-sk-som.dtsi b/arch/ +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk-csi2-ov5640.dts b/arch/arm64/boot/dts/ti/k3-am69-sk-csi2-ov5640.dts --- a/arch/arm64/boot/dts/ti/k3-am69-sk-csi2-ov5640.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am69-sk-csi2-ov5640.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am69-sk-csi2-ov5640.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -40391,7 +41093,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk-csi2-ov5640.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk-ddr-mem-carveout.dts b/arch/arm64/boot/dts/ti/k3-am69-sk-ddr-mem-carveout.dts --- a/arch/arm64/boot/dts/ti/k3-am69-sk-ddr-mem-carveout.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am69-sk-ddr-mem-carveout.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am69-sk-ddr-mem-carveout.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,420 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -40815,7 +41517,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk-ddr-mem-carveout +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk.dts b/arch/arm64/boot/dts/ti/k3-am69-sk.dts --- a/arch/arm64/boot/dts/ti/k3-am69-sk.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am69-sk.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am69-sk.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,893 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -41712,7 +42414,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk.dts b/arch/arm64 +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk-fpdlink-fusion.dts b/arch/arm64/boot/dts/ti/k3-am69-sk-fpdlink-fusion.dts --- a/arch/arm64/boot/dts/ti/k3-am69-sk-fpdlink-fusion.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am69-sk-fpdlink-fusion.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am69-sk-fpdlink-fusion.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,129 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -41845,7 +42547,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk-fpdlink-fusion.d +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-cam-imx219.dts b/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-cam-imx219.dts --- a/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-cam-imx219.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-cam-imx219.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-cam-imx219.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -41974,7 +42676,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-cam-imx219.d +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-hdr-ehrpwm.dts b/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-hdr-ehrpwm.dts --- a/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-hdr-ehrpwm.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-hdr-ehrpwm.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-hdr-ehrpwm.dts 2024-11-24 20:19:38.111228716 -0500 @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -42048,7 +42750,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-am69-sk-rpi-hdr-ehrpwm.d +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts --- a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts 2024-11-24 20:19:38.112228717 -0500 @@ -6,17 +6,128 @@ /dts-v1/; @@ -42372,7 +43074,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board. +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board-sr1.dts b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board-sr1.dts --- a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board-sr1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board-sr1.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board-sr1.dts 2024-11-24 20:19:38.112228717 -0500 @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -42384,7 +43086,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board- +#include "k3-j7200-sr1.dts" diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board-uarts.dts b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board-uarts.dts --- a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board-uarts.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board-uarts.dts 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board-uarts.dts 2024-11-24 20:19:38.112228717 -0500 @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -42446,7 +43148,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200.dtsi b/arch/arm64/boot/dts/ti/k3-j7200.dtsi --- a/arch/arm64/boot/dts/ti/k3-j7200.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j7200.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j7200.dtsi 2024-11-24 20:19:38.112228717 -0500 @@ -62,6 +62,10 @@ d-cache-line-size = <64>; d-cache-sets = <256>; @@ -42509,7 +43211,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200.dtsi b/arch/arm64/ /* Now include the peripherals for each bus segments */ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-main.dtsi b/arch/arm64/boot/dts/ti/k3-j7200-main.dtsi --- a/arch/arm64/boot/dts/ti/k3-j7200-main.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j7200-main.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j7200-main.dtsi 2024-11-24 20:19:38.112228717 -0500 @@ -2,9 +2,18 @@ /* * Device Tree Source for J7200 SoC Family Main Domain peripherals @@ -43142,7 +43844,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-main.dtsi b/arch/a }; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-mcspi-loopback.dts b/arch/arm64/boot/dts/ti/k3-j7200-mcspi-loopback.dts --- a/arch/arm64/boot/dts/ti/k3-j7200-mcspi-loopback.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j7200-mcspi-loopback.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j7200-mcspi-loopback.dts 2024-11-24 20:19:38.112228717 -0500 @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -43187,7 +43889,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-mcspi-loopback.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi --- a/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi 2024-11-24 20:19:38.112228717 -0500 @@ -2,7 +2,7 @@ /* * Device Tree Source for J7200 SoC Family MCU/WAKEUP Domain peripherals @@ -43424,7 +44126,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi b/ }; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-quad-port-eth-exp.dts b/arch/arm64/boot/dts/ti/k3-j7200-quad-port-eth-exp.dts --- a/arch/arm64/boot/dts/ti/k3-j7200-quad-port-eth-exp.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j7200-quad-port-eth-exp.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j7200-quad-port-eth-exp.dts 2024-11-24 20:19:38.112228717 -0500 @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -43537,7 +44239,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-quad-port-eth-exp. +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-som-p0.dtsi b/arch/arm64/boot/dts/ti/k3-j7200-som-p0.dtsi --- a/arch/arm64/boot/dts/ti/k3-j7200-som-p0.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j7200-som-p0.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j7200-som-p0.dtsi 2024-11-24 20:19:38.112228717 -0500 @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* @@ -43863,7 +44565,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-som-p0.dtsi b/arch }; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-sr1.dts b/arch/arm64/boot/dts/ti/k3-j7200-sr1.dts --- a/arch/arm64/boot/dts/ti/k3-j7200-sr1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j7200-sr1.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j7200-sr1.dts 2024-11-24 20:19:38.112228717 -0500 @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -43925,7 +44627,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-sr1.dts b/arch/arm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-thermal.dtsi b/arch/arm64/boot/dts/ti/k3-j7200-thermal.dtsi --- a/arch/arm64/boot/dts/ti/k3-j7200-thermal.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j7200-thermal.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j7200-thermal.dtsi 2024-11-24 20:19:38.112228717 -0500 @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0 + @@ -43990,7 +44692,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j7200-thermal.dtsi b/arc +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board.dts b/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board.dts 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board.dts 2024-11-24 20:19:38.112228717 -0500 @@ -9,6 +9,7 @@ #include #include @@ -44619,7 +45321,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board. +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board-infotainment.dts b/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board-infotainment.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board-infotainment.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board-infotainment.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board-infotainment.dts 2024-11-24 20:19:38.112228717 -0500 @@ -0,0 +1,174 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -44797,7 +45499,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board-uarts.dts b/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board-uarts.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board-uarts.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board-uarts.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board-uarts.dts 2024-11-24 20:19:38.112228717 -0500 @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -44863,7 +45565,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-cpb-csi2-ov5640.dts b/arch/arm64/boot/dts/ti/k3-j721e-cpb-csi2-ov5640.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-cpb-csi2-ov5640.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-cpb-csi2-ov5640.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-cpb-csi2-ov5640.dts 2024-11-24 20:19:38.112228717 -0500 @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -44925,7 +45627,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-cpb-csi2-ov5640.dt +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e.dtsi b/arch/arm64/boot/dts/ti/k3-j721e.dtsi --- a/arch/arm64/boot/dts/ti/k3-j721e.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e.dtsi 2024-11-24 20:19:38.114228721 -0500 @@ -115,7 +115,7 @@ }; @@ -44954,7 +45656,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e.dtsi b/arch/arm64/ /* Now include the peripherals for each bus segments */ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-cpb-fusion.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-cpb-fusion.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-cpb-fusion.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-cpb-fusion.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-cpb-fusion.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -45074,7 +45776,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-cpb-fusion +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-0.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-0.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-0.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-0.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -45168,7 +45870,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-1.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-1.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-1.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-1.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -45262,7 +45964,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-2.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-2.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-2.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-2.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-2.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -45356,7 +46058,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-3.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-3.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-3.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-3.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-0-3.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -45450,7 +46152,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-0.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-0.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-0.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-0.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -45544,7 +46246,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-1.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-1.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-1.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-1.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -45638,7 +46340,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-2.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-2.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-2.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-2.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-2.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -45732,7 +46434,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-3.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-3.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-3.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-3.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm-1-3.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -45826,7 +46528,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-cm- +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-0.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-0.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-0.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-0.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -45920,7 +46622,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-1.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-1.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-1.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-1.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -46014,7 +46716,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-2.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-2.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-2.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-2.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-2.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -46108,7 +46810,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-3.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-3.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-3.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-3.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-0-3.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -46202,7 +46904,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-0.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-0.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-0.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-0.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-0.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -46296,7 +46998,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-1.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-1.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-1.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-1.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-1.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -46390,7 +47092,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-2.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-2.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-2.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-2.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-2.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -46484,7 +47186,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-3.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-3.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-3.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-3.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm-1-3.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -46578,7 +47280,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-imx390-rcm +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-sk-fusion.dts b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-sk-fusion.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-sk-fusion.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-sk-fusion.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-sk-fusion.dts 2024-11-24 20:19:38.113228719 -0500 @@ -0,0 +1,129 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -46711,7 +47413,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-fpdlink-sk-fusion. +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-gesi-exp-board.dts b/arch/arm64/boot/dts/ti/k3-j721e-gesi-exp-board.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-gesi-exp-board.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-gesi-exp-board.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-gesi-exp-board.dts 2024-11-24 20:19:38.114228721 -0500 @@ -0,0 +1,216 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -46931,7 +47633,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-gesi-exp-board.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-main.dtsi b/arch/arm64/boot/dts/ti/k3-j721e-main.dtsi --- a/arch/arm64/boot/dts/ti/k3-j721e-main.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-main.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-main.dtsi 2024-11-24 20:19:38.114228721 -0500 @@ -2,7 +2,7 @@ /* * Device Tree Source for J721E SoC Family Main Domain peripherals @@ -48675,7 +49377,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-main.dtsi b/arch/a }; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi --- a/arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi 2024-11-24 20:19:38.114228721 -0500 @@ -2,7 +2,7 @@ /* * Device Tree Source for J721E SoC Family MCU/WAKEUP Domain peripherals @@ -48799,7 +49501,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi b/ }; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-proc-board-tps65917.dts b/arch/arm64/boot/dts/ti/k3-j721e-proc-board-tps65917.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-proc-board-tps65917.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-proc-board-tps65917.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-proc-board-tps65917.dts 2024-11-24 20:19:38.114228721 -0500 @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -48857,7 +49559,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-proc-board-tps6591 +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-quad-port-eth-exp.dts b/arch/arm64/boot/dts/ti/k3-j721e-quad-port-eth-exp.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-quad-port-eth-exp.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-quad-port-eth-exp.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-quad-port-eth-exp.dts 2024-11-24 20:19:38.114228721 -0500 @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -48985,7 +49687,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-quad-port-eth-exp. +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-sk-csi2-ov5640.dts b/arch/arm64/boot/dts/ti/k3-j721e-sk-csi2-ov5640.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-sk-csi2-ov5640.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-sk-csi2-ov5640.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-sk-csi2-ov5640.dts 2024-11-24 20:19:38.114228721 -0500 @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -49078,7 +49780,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-sk-csi2-ov5640.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-sk.dts b/arch/arm64/boot/dts/ti/k3-j721e-sk.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-sk.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-sk.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-sk.dts 2024-11-24 20:19:38.114228721 -0500 @@ -0,0 +1,1393 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -50475,7 +51177,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-sk.dts b/arch/arm6 +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-cam-imx219.dts b/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-cam-imx219.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-cam-imx219.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-cam-imx219.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-cam-imx219.dts 2024-11-24 20:19:38.114228721 -0500 @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -50627,7 +51329,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-cam-imx219. +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-hdr-ehrpwm.dts b/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-hdr-ehrpwm.dts --- a/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-hdr-ehrpwm.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-hdr-ehrpwm.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-hdr-ehrpwm.dts 2024-11-24 20:19:38.114228721 -0500 @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -50696,7 +51398,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-sk-rpi-hdr-ehrpwm. +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-som-p0.dtsi b/arch/arm64/boot/dts/ti/k3-j721e-som-p0.dtsi --- a/arch/arm64/boot/dts/ti/k3-j721e-som-p0.dtsi 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-som-p0.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-som-p0.dtsi 2024-11-24 20:19:38.114228721 -0500 @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* @@ -50915,7 +51617,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-som-p0.dtsi b/arch memory-region = <&c66_0_dma_memory_region>, diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-thermal.dtsi b/arch/arm64/boot/dts/ti/k3-j721e-thermal.dtsi --- a/arch/arm64/boot/dts/ti/k3-j721e-thermal.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721e-thermal.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721e-thermal.dtsi 2024-11-24 20:19:38.114228721 -0500 @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: GPL-2.0 + @@ -50994,7 +51696,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721e-thermal.dtsi b/arc +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board.dts b/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board.dts --- a/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board.dts 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,832 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -51830,7 +52532,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board-uarts.dts b/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board-uarts.dts --- a/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board-uarts.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board-uarts.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board-uarts.dts 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -51892,7 +52594,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-common-proc-board +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-cpb-csi2-ov5640.dts b/arch/arm64/boot/dts/ti/k3-j721s2-cpb-csi2-ov5640.dts --- a/arch/arm64/boot/dts/ti/k3-j721s2-cpb-csi2-ov5640.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721s2-cpb-csi2-ov5640.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721s2-cpb-csi2-ov5640.dts 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -51954,7 +52656,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-cpb-csi2-ov5640.d +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2.dtsi b/arch/arm64/boot/dts/ti/k3-j721s2.dtsi --- a/arch/arm64/boot/dts/ti/k3-j721s2.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721s2.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721s2.dtsi 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,171 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -52129,7 +52831,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2.dtsi b/arch/arm64 +#include "k3-j721s2-mcu-wakeup.dtsi" diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-fpdlink-cpb-fusion.dts b/arch/arm64/boot/dts/ti/k3-j721s2-fpdlink-cpb-fusion.dts --- a/arch/arm64/boot/dts/ti/k3-j721s2-fpdlink-cpb-fusion.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721s2-fpdlink-cpb-fusion.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721s2-fpdlink-cpb-fusion.dts 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -52243,7 +52945,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-fpdlink-cpb-fusio +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-gesi-exp-board.dts b/arch/arm64/boot/dts/ti/k3-j721s2-gesi-exp-board.dts --- a/arch/arm64/boot/dts/ti/k3-j721s2-gesi-exp-board.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721s2-gesi-exp-board.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721s2-gesi-exp-board.dts 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -52320,7 +53022,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-gesi-exp-board.dt +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi b/arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi --- a/arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,1707 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -54031,7 +54733,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi b/arch/ +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-mcu-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-j721s2-mcu-wakeup.dtsi --- a/arch/arm64/boot/dts/ti/k3-j721s2-mcu-wakeup.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721s2-mcu-wakeup.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721s2-mcu-wakeup.dtsi 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,461 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -54496,7 +55198,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-mcu-wakeup.dtsi b +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-som-p0.dtsi b/arch/arm64/boot/dts/ti/k3-j721s2-som-p0.dtsi --- a/arch/arm64/boot/dts/ti/k3-j721s2-som-p0.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721s2-som-p0.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721s2-som-p0.dtsi 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,471 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -54971,7 +55673,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-som-p0.dtsi b/arc +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-thermal.dtsi b/arch/arm64/boot/dts/ti/k3-j721s2-thermal.dtsi --- a/arch/arm64/boot/dts/ti/k3-j721s2-thermal.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j721s2-thermal.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j721s2-thermal.dtsi 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: GPL-2.0 + @@ -55076,7 +55778,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j721s2-thermal.dtsi b/ar +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4.dtsi b/arch/arm64/boot/dts/ti/k3-j784s4.dtsi --- a/arch/arm64/boot/dts/ti/k3-j784s4.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4.dtsi 2024-11-24 20:19:38.116228725 -0500 @@ -0,0 +1,295 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -55375,7 +56077,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4.dtsi b/arch/arm64 +#include "k3-j784s4-mcu-wakeup.dtsi" diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-evm-csi2-ov5640.dts b/arch/arm64/boot/dts/ti/k3-j784s4-evm-csi2-ov5640.dts --- a/arch/arm64/boot/dts/ti/k3-j784s4-evm-csi2-ov5640.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-evm-csi2-ov5640.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4-evm-csi2-ov5640.dts 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -55440,7 +56142,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-evm-csi2-ov5640.d +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts b/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts --- a/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,1261 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -56705,7 +57407,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts b/arch/ar +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-evm-uarts.dts b/arch/arm64/boot/dts/ti/k3-j784s4-evm-uarts.dts --- a/arch/arm64/boot/dts/ti/k3-j784s4-evm-uarts.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-evm-uarts.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4-evm-uarts.dts 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -56767,7 +57469,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-evm-uarts.dts b/a +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-exp1-exp2-usxgmii.dts b/arch/arm64/boot/dts/ti/k3-j784s4-exp1-exp2-usxgmii.dts --- a/arch/arm64/boot/dts/ti/k3-j784s4-exp1-exp2-usxgmii.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-exp1-exp2-usxgmii.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4-exp1-exp2-usxgmii.dts 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -56878,7 +57580,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-exp1-exp2-usxgmii +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-exp1-usxgmii.dts b/arch/arm64/boot/dts/ti/k3-j784s4-exp1-usxgmii.dts --- a/arch/arm64/boot/dts/ti/k3-j784s4-exp1-usxgmii.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-exp1-usxgmii.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4-exp1-usxgmii.dts 2024-11-24 20:19:38.115228723 -0500 @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -56981,7 +57683,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-exp1-usxgmii.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-exp2-usxgmii.dts b/arch/arm64/boot/dts/ti/k3-j784s4-exp2-usxgmii.dts --- a/arch/arm64/boot/dts/ti/k3-j784s4-exp2-usxgmii.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-exp2-usxgmii.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4-exp2-usxgmii.dts 2024-11-24 20:19:38.116228725 -0500 @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -57084,7 +57786,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-exp2-usxgmii.dts +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-fpdlink-fusion.dts b/arch/arm64/boot/dts/ti/k3-j784s4-fpdlink-fusion.dts --- a/arch/arm64/boot/dts/ti/k3-j784s4-fpdlink-fusion.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-fpdlink-fusion.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4-fpdlink-fusion.dts 2024-11-24 20:19:38.116228725 -0500 @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -57204,7 +57906,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-fpdlink-fusion.dt +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-main.dtsi b/arch/arm64/boot/dts/ti/k3-j784s4-main.dtsi --- a/arch/arm64/boot/dts/ti/k3-j784s4-main.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-main.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4-main.dtsi 2024-11-24 20:19:38.116228725 -0500 @@ -0,0 +1,2316 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -59524,7 +60226,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-main.dtsi b/arch/ +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-mcu-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-j784s4-mcu-wakeup.dtsi --- a/arch/arm64/boot/dts/ti/k3-j784s4-mcu-wakeup.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-mcu-wakeup.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4-mcu-wakeup.dtsi 2024-11-24 20:19:38.116228725 -0500 @@ -0,0 +1,482 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -60010,7 +60712,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-mcu-wakeup.dtsi b +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-quad-port-eth1-exp.dts b/arch/arm64/boot/dts/ti/k3-j784s4-quad-port-eth1-exp.dts --- a/arch/arm64/boot/dts/ti/k3-j784s4-quad-port-eth1-exp.dts 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-quad-port-eth1-exp.dts 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4-quad-port-eth1-exp.dts 2024-11-24 20:19:38.116228725 -0500 @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -60168,7 +60870,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-quad-port-eth1-ex +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-thermal.dtsi b/arch/arm64/boot/dts/ti/k3-j784s4-thermal.dtsi --- a/arch/arm64/boot/dts/ti/k3-j784s4-thermal.dtsi 1969-12-31 19:00:00.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-thermal.dtsi 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/boot/dts/ti/k3-j784s4-thermal.dtsi 2024-11-24 20:19:38.116228725 -0500 @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: GPL-2.0 + @@ -60273,7 +60975,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/k3-j784s4-thermal.dtsi b/ar +}; diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/Makefile b/arch/arm64/boot/dts/ti/Makefile --- a/arch/arm64/boot/dts/ti/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/boot/dts/ti/Makefile 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/boot/dts/ti/Makefile 2024-11-24 20:19:38.106228706 -0500 @@ -3,11 +3,117 @@ # Make file to build device tree binaries for boards based on # Texas Instruments Inc processors @@ -60395,7 +61097,7 @@ diff -Naur --no-dereference a/arch/arm64/boot/dts/ti/Makefile b/arch/arm64/boot/ +dtb-$(CONFIG_ARCH_K3) += k3-am62a7-sk-ethernet-dc01.dtbo diff -Naur --no-dereference a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig --- a/arch/arm64/configs/defconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/configs/defconfig 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/arm64/configs/defconfig 2024-11-24 20:19:38.116228725 -0500 @@ -438,6 +438,7 @@ CONFIG_I2C_IMX_LPI2C=y CONFIG_I2C_MESON=y @@ -60421,9 +61123,161 @@ diff -Naur --no-dereference a/arch/arm64/configs/defconfig b/arch/arm64/configs/ CONFIG_TI_SCI_PM_DOMAINS=y CONFIG_EXTCON_PTN5150=m CONFIG_EXTCON_USB_GPIO=y +diff -Naur --no-dereference a/arch/arm64/include/asm/hardirq.h b/arch/arm64/include/asm/hardirq.h +--- a/arch/arm64/include/asm/hardirq.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm64/include/asm/hardirq.h 2024-11-24 20:19:38.116228725 -0500 +@@ -13,11 +13,8 @@ + #include + #include + +-typedef struct { +- unsigned int __softirq_pending; +-} ____cacheline_aligned irq_cpustat_t; +- +-#include /* Standard mappings for irq_cpustat_t above */ ++#define ack_bad_irq ack_bad_irq ++#include + + #define __ARCH_IRQ_EXIT_IRQS_DISABLED 1 + +diff -Naur --no-dereference a/arch/arm64/include/asm/preempt.h b/arch/arm64/include/asm/preempt.h +--- a/arch/arm64/include/asm/preempt.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm64/include/asm/preempt.h 2024-11-24 20:19:38.116228725 -0500 +@@ -70,17 +70,43 @@ + * interrupt occurring between the non-atomic READ_ONCE/WRITE_ONCE + * pair. + */ +- return !pc || !READ_ONCE(ti->preempt_count); ++ if (!pc || !READ_ONCE(ti->preempt_count)) ++ return true; ++#ifdef CONFIG_PREEMPT_LAZY ++ if ((pc & ~PREEMPT_NEED_RESCHED)) ++ return false; ++ if (current_thread_info()->preempt_lazy_count) ++ return false; ++ return test_thread_flag(TIF_NEED_RESCHED_LAZY); ++#else ++ return false; ++#endif + } + + static inline bool should_resched(int preempt_offset) + { ++#ifdef CONFIG_PREEMPT_LAZY ++ u64 pc = READ_ONCE(current_thread_info()->preempt_count); ++ if (pc == preempt_offset) ++ return true; ++ ++ if ((pc & ~PREEMPT_NEED_RESCHED) != preempt_offset) ++ return false; ++ ++ if (current_thread_info()->preempt_lazy_count) ++ return false; ++ return test_thread_flag(TIF_NEED_RESCHED_LAZY); ++#else + u64 pc = READ_ONCE(current_thread_info()->preempt_count); + return pc == preempt_offset; ++#endif + } + + #ifdef CONFIG_PREEMPTION + void preempt_schedule(void); ++#ifdef CONFIG_PREEMPT_RT ++void preempt_schedule_lock(void); ++#endif + #define __preempt_schedule() preempt_schedule() + void preempt_schedule_notrace(void); + #define __preempt_schedule_notrace() preempt_schedule_notrace() +diff -Naur --no-dereference a/arch/arm64/include/asm/spinlock_types.h b/arch/arm64/include/asm/spinlock_types.h +--- a/arch/arm64/include/asm/spinlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm64/include/asm/spinlock_types.h 2024-11-24 20:19:38.116228725 -0500 +@@ -5,10 +5,6 @@ + #ifndef __ASM_SPINLOCK_TYPES_H + #define __ASM_SPINLOCK_TYPES_H + +-#if !defined(__LINUX_SPINLOCK_TYPES_H) && !defined(__ASM_SPINLOCK_H) +-# error "please don't include this file directly" +-#endif +- + #include + #include + +diff -Naur --no-dereference a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h +--- a/arch/arm64/include/asm/thread_info.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm64/include/asm/thread_info.h 2024-11-24 20:19:38.116228725 -0500 +@@ -29,6 +29,7 @@ + #ifdef CONFIG_ARM64_SW_TTBR0_PAN + u64 ttbr0; /* saved TTBR0_EL1 */ + #endif ++ int preempt_lazy_count; /* 0 => preemptable, <0 => bug */ + union { + u64 preempt_count; /* 0 => preemptible, <0 => bug */ + struct { +@@ -69,11 +70,12 @@ + #define TIF_FSCHECK 5 /* Check FS is USER_DS on return */ + #define TIF_MTE_ASYNC_FAULT 6 /* MTE Asynchronous Tag Check Fault */ + #define TIF_NOTIFY_SIGNAL 7 /* signal notifications exist */ +-#define TIF_SYSCALL_TRACE 8 /* syscall trace active */ +-#define TIF_SYSCALL_AUDIT 9 /* syscall auditing */ +-#define TIF_SYSCALL_TRACEPOINT 10 /* syscall tracepoint for ftrace */ +-#define TIF_SECCOMP 11 /* syscall secure computing */ +-#define TIF_SYSCALL_EMU 12 /* syscall emulation active */ ++#define TIF_NEED_RESCHED_LAZY 8 ++#define TIF_SYSCALL_TRACE 9 /* syscall trace active */ ++#define TIF_SYSCALL_AUDIT 10 /* syscall auditing */ ++#define TIF_SYSCALL_TRACEPOINT 11 /* syscall tracepoint for ftrace */ ++#define TIF_SECCOMP 12 /* syscall secure computing */ ++#define TIF_SYSCALL_EMU 13 /* syscall emulation active */ + #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ + #define TIF_FREEZE 19 + #define TIF_RESTORE_SIGMASK 20 +@@ -99,13 +101,15 @@ + #define _TIF_32BIT (1 << TIF_32BIT) + #define _TIF_SVE (1 << TIF_SVE) + #define _TIF_MTE_ASYNC_FAULT (1 << TIF_MTE_ASYNC_FAULT) ++#define _TIF_NEED_RESCHED_LAZY (1 << TIF_NEED_RESCHED_LAZY) + #define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL) + + #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \ + _TIF_NOTIFY_RESUME | _TIF_FOREIGN_FPSTATE | \ + _TIF_UPROBE | _TIF_FSCHECK | _TIF_MTE_ASYNC_FAULT | \ +- _TIF_NOTIFY_SIGNAL) ++ _TIF_NEED_RESCHED_LAZY | _TIF_NOTIFY_SIGNAL) + ++#define _TIF_NEED_RESCHED_MASK (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY) + #define _TIF_SYSCALL_WORK (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \ + _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP | \ + _TIF_SYSCALL_EMU) +diff -Naur --no-dereference a/arch/arm64/Kconfig b/arch/arm64/Kconfig +--- a/arch/arm64/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm64/Kconfig 2024-11-24 20:19:38.105228705 -0500 +@@ -76,6 +76,7 @@ + select ARCH_SUPPORTS_ATOMIC_RMW + select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 && (GCC_VERSION >= 50000 || CC_IS_CLANG) + select ARCH_SUPPORTS_NUMA_BALANCING ++ select ARCH_SUPPORTS_RT if HAVE_POSIX_CPU_TIMERS_TASK_WORK + select ARCH_WANT_COMPAT_IPC_PARSE_VERSION if COMPAT + select ARCH_WANT_DEFAULT_BPF_JIT + select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT +@@ -173,6 +174,7 @@ + select HAVE_PERF_EVENTS + select HAVE_PERF_REGS + select HAVE_PERF_USER_STACK_DUMP ++ select HAVE_PREEMPT_LAZY + select HAVE_REGS_AND_STACK_ACCESS_API + select HAVE_FUNCTION_ARG_ACCESS_API + select HAVE_FUTEX_CMPXCHG if FUTEX +@@ -194,6 +196,7 @@ + select PCI_DOMAINS_GENERIC if PCI + select PCI_ECAM if (ACPI && PCI) + select PCI_SYSCALL if PCI ++ select HAVE_POSIX_CPU_TIMERS_TASK_WORK if !KVM + select POWER_RESET + select POWER_SUPPLY + select SET_FS diff -Naur --no-dereference a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms --- a/arch/arm64/Kconfig.platforms 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/arm64/Kconfig.platforms 2024-08-28 19:44:05.600037905 -0400 ++++ b/arch/arm64/Kconfig.platforms 2024-11-24 20:19:38.106228706 -0500 @@ -108,10 +108,8 @@ select PM_GENERIC_DOMAINS if PM select MAILBOX @@ -60437,9 +61291,630 @@ diff -Naur --no-dereference a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig. select TI_K3_SOCINFO help This enables support for Texas Instruments' K3 multicore SoC +diff -Naur --no-dereference a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c +--- a/arch/arm64/kernel/asm-offsets.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm64/kernel/asm-offsets.c 2024-11-24 20:19:38.116228725 -0500 +@@ -30,6 +30,7 @@ + BLANK(); + DEFINE(TSK_TI_FLAGS, offsetof(struct task_struct, thread_info.flags)); + DEFINE(TSK_TI_PREEMPT, offsetof(struct task_struct, thread_info.preempt_count)); ++ DEFINE(TSK_TI_PREEMPT_LAZY, offsetof(struct task_struct, thread_info.preempt_lazy_count)); + DEFINE(TSK_TI_ADDR_LIMIT, offsetof(struct task_struct, thread_info.addr_limit)); + #ifdef CONFIG_ARM64_SW_TTBR0_PAN + DEFINE(TSK_TI_TTBR0, offsetof(struct task_struct, thread_info.ttbr0)); +diff -Naur --no-dereference a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S +--- a/arch/arm64/kernel/entry.S 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm64/kernel/entry.S 2024-11-24 20:19:38.116228725 -0500 +@@ -527,9 +527,18 @@ + mrs x0, daif + orr x24, x24, x0 + alternative_else_nop_endif +- cbnz x24, 1f // preempt count != 0 || NMI return path +- bl arm64_preempt_schedule_irq // irq en/disable is done inside ++ ++ cbz x24, 1f // (need_resched + count) == 0 ++ cbnz w24, 2f // count != 0 ++ ++ ldr w24, [tsk, #TSK_TI_PREEMPT_LAZY] // get preempt lazy count ++ cbnz w24, 2f // preempt lazy count != 0 ++ ++ ldr x0, [tsk, #TSK_TI_FLAGS] // get flags ++ tbz x0, #TIF_NEED_RESCHED_LAZY, 2f // needs rescheduling? + 1: ++ bl arm64_preempt_schedule_irq // irq en/disable is done inside ++2: + #endif + + mov x0, sp +diff -Naur --no-dereference a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c +--- a/arch/arm64/kernel/fpsimd.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm64/kernel/fpsimd.c 2024-11-24 20:19:38.117228726 -0500 +@@ -226,6 +226,16 @@ + __sve_free(task); + } + ++static void *sve_free_atomic(struct task_struct *task) ++{ ++ void *sve_state = task->thread.sve_state; ++ ++ WARN_ON(test_tsk_thread_flag(task, TIF_SVE)); ++ ++ task->thread.sve_state = NULL; ++ return sve_state; ++} ++ + /* + * TIF_SVE controls whether a task can use SVE without trapping while + * in userspace, and also the way a task's FPSIMD/SVE state is stored +@@ -1022,6 +1032,7 @@ + void fpsimd_flush_thread(void) + { + int vl, supported_vl; ++ void *mem = NULL; + + if (!system_supports_fpsimd()) + return; +@@ -1034,7 +1045,7 @@ + + if (system_supports_sve()) { + clear_thread_flag(TIF_SVE); +- sve_free(current); ++ mem = sve_free_atomic(current); + + /* + * Reset the task vector length as required. +@@ -1068,6 +1079,7 @@ + } + + put_cpu_fpsimd_context(); ++ kfree(mem); + } + + /* +diff -Naur --no-dereference a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c +--- a/arch/arm64/kernel/signal.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm64/kernel/signal.c 2024-11-24 20:19:38.117228726 -0500 +@@ -921,7 +921,7 @@ + /* Check valid user FS if needed */ + addr_limit_user_check(); + +- if (thread_flags & _TIF_NEED_RESCHED) { ++ if (thread_flags & _TIF_NEED_RESCHED_MASK) { + /* Unmask Debug and SError for the next task */ + local_daif_restore(DAIF_PROCCTX_NOIRQ); + +diff -Naur --no-dereference a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c +--- a/arch/arm64/kvm/arm.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/arm64/kvm/arm.c 2024-11-24 20:19:38.117228726 -0500 +@@ -708,7 +708,7 @@ + * involves poking the GIC, which must be done in a + * non-preemptible context. + */ +- preempt_disable(); ++ migrate_disable(); + + kvm_pmu_flush_hwstate(vcpu); + +@@ -757,7 +757,7 @@ + kvm_timer_sync_user(vcpu); + kvm_vgic_sync_hwstate(vcpu); + local_irq_enable(); +- preempt_enable(); ++ migrate_enable(); + continue; + } + +@@ -829,7 +829,7 @@ + /* Exit types that need handling before we can be preempted */ + handle_exit_early(vcpu, ret); + +- preempt_enable(); ++ migrate_enable(); + + /* + * The ARMv8 architecture doesn't give the hypervisor +diff -Naur --no-dereference a/arch/csky/include/asm/fixmap.h b/arch/csky/include/asm/fixmap.h +--- a/arch/csky/include/asm/fixmap.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/csky/include/asm/fixmap.h 2024-11-24 20:19:38.117228726 -0500 +@@ -8,7 +8,7 @@ + #include + #ifdef CONFIG_HIGHMEM + #include +-#include ++#include + #endif + + enum fixed_addresses { +@@ -17,7 +17,7 @@ + #endif + #ifdef CONFIG_HIGHMEM + FIX_KMAP_BEGIN, +- FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * NR_CPUS) - 1, ++ FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_MAX_IDX * NR_CPUS) - 1, + #endif + __end_of_fixed_addresses + }; +diff -Naur --no-dereference a/arch/csky/include/asm/highmem.h b/arch/csky/include/asm/highmem.h +--- a/arch/csky/include/asm/highmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/csky/include/asm/highmem.h 2024-11-24 20:19:38.117228726 -0500 +@@ -9,7 +9,7 @@ + #include + #include + #include +-#include ++#include + #include + + /* undef for production */ +@@ -32,10 +32,12 @@ + + #define ARCH_HAS_KMAP_FLUSH_TLB + extern void kmap_flush_tlb(unsigned long addr); +-extern void *kmap_atomic_pfn(unsigned long pfn); + + #define flush_cache_kmaps() do {} while (0) + ++#define arch_kmap_local_post_map(vaddr, pteval) kmap_flush_tlb(vaddr) ++#define arch_kmap_local_post_unmap(vaddr) kmap_flush_tlb(vaddr) ++ + extern void kmap_init(void); + + #endif /* __KERNEL__ */ +diff -Naur --no-dereference a/arch/csky/Kconfig b/arch/csky/Kconfig +--- a/arch/csky/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/csky/Kconfig 2024-11-24 20:19:38.117228726 -0500 +@@ -286,6 +286,7 @@ + config HIGHMEM + bool "High Memory Support" + depends on !CPU_CK610 ++ select KMAP_LOCAL + default y + + config FORCE_MAX_ZONEORDER +diff -Naur --no-dereference a/arch/csky/mm/highmem.c b/arch/csky/mm/highmem.c +--- a/arch/csky/mm/highmem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/csky/mm/highmem.c 2024-11-24 20:19:38.117228726 -0500 +@@ -9,8 +9,6 @@ + #include + #include + +-static pte_t *kmap_pte; +- + unsigned long highstart_pfn, highend_pfn; + + void kmap_flush_tlb(unsigned long addr) +@@ -19,67 +17,7 @@ + } + EXPORT_SYMBOL(kmap_flush_tlb); + +-void *kmap_atomic_high_prot(struct page *page, pgprot_t prot) +-{ +- unsigned long vaddr; +- int idx, type; +- +- type = kmap_atomic_idx_push(); +- idx = type + KM_TYPE_NR*smp_processor_id(); +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +-#ifdef CONFIG_DEBUG_HIGHMEM +- BUG_ON(!pte_none(*(kmap_pte - idx))); +-#endif +- set_pte(kmap_pte-idx, mk_pte(page, prot)); +- flush_tlb_one((unsigned long)vaddr); +- +- return (void *)vaddr; +-} +-EXPORT_SYMBOL(kmap_atomic_high_prot); +- +-void kunmap_atomic_high(void *kvaddr) +-{ +- unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; +- int idx; +- +- if (vaddr < FIXADDR_START) +- return; +- +-#ifdef CONFIG_DEBUG_HIGHMEM +- idx = KM_TYPE_NR*smp_processor_id() + kmap_atomic_idx(); +- +- BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); +- +- pte_clear(&init_mm, vaddr, kmap_pte - idx); +- flush_tlb_one(vaddr); +-#else +- (void) idx; /* to kill a warning */ +-#endif +- kmap_atomic_idx_pop(); +-} +-EXPORT_SYMBOL(kunmap_atomic_high); +- +-/* +- * This is the same as kmap_atomic() but can map memory that doesn't +- * have a struct page associated with it. +- */ +-void *kmap_atomic_pfn(unsigned long pfn) +-{ +- unsigned long vaddr; +- int idx, type; +- +- pagefault_disable(); +- +- type = kmap_atomic_idx_push(); +- idx = type + KM_TYPE_NR*smp_processor_id(); +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +- set_pte(kmap_pte-idx, pfn_pte(pfn, PAGE_KERNEL)); +- flush_tlb_one(vaddr); +- +- return (void *) vaddr; +-} +- +-static void __init kmap_pages_init(void) ++void __init kmap_init(void) + { + unsigned long vaddr; + pgd_t *pgd; +@@ -96,14 +34,3 @@ + pte = pte_offset_kernel(pmd, vaddr); + pkmap_page_table = pte; + } +- +-void __init kmap_init(void) +-{ +- unsigned long vaddr; +- +- kmap_pages_init(); +- +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN); +- +- kmap_pte = pte_offset_kernel((pmd_t *)pgd_offset_k(vaddr), vaddr); +-} +diff -Naur --no-dereference a/arch/hexagon/include/asm/spinlock_types.h b/arch/hexagon/include/asm/spinlock_types.h +--- a/arch/hexagon/include/asm/spinlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/hexagon/include/asm/spinlock_types.h 2024-11-24 20:19:38.117228726 -0500 +@@ -8,10 +8,6 @@ + #ifndef _ASM_SPINLOCK_TYPES_H + #define _ASM_SPINLOCK_TYPES_H + +-#ifndef __LINUX_SPINLOCK_TYPES_H +-# error "please don't include this file directly" +-#endif +- + typedef struct { + volatile unsigned int lock; + } arch_spinlock_t; +diff -Naur --no-dereference a/arch/ia64/include/asm/kmap_types.h b/arch/ia64/include/asm/kmap_types.h +--- a/arch/ia64/include/asm/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/ia64/include/asm/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,13 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef _ASM_IA64_KMAP_TYPES_H +-#define _ASM_IA64_KMAP_TYPES_H +- +-#ifdef CONFIG_DEBUG_HIGHMEM +-#define __WITH_KM_FENCE +-#endif +- +-#include +- +-#undef __WITH_KM_FENCE +- +-#endif /* _ASM_IA64_KMAP_TYPES_H */ +diff -Naur --no-dereference a/arch/ia64/include/asm/spinlock_types.h b/arch/ia64/include/asm/spinlock_types.h +--- a/arch/ia64/include/asm/spinlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/ia64/include/asm/spinlock_types.h 2024-11-24 20:19:38.117228726 -0500 +@@ -2,10 +2,6 @@ + #ifndef _ASM_IA64_SPINLOCK_TYPES_H + #define _ASM_IA64_SPINLOCK_TYPES_H + +-#ifndef __LINUX_SPINLOCK_TYPES_H +-# error "please don't include this file directly" +-#endif +- + typedef struct { + volatile unsigned int lock; + } arch_spinlock_t; +diff -Naur --no-dereference a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c +--- a/arch/ia64/kernel/time.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/ia64/kernel/time.c 2024-11-24 20:19:38.117228726 -0500 +@@ -138,12 +138,8 @@ + struct thread_info *ti = task_thread_info(tsk); + __u64 stime = vtime_delta(tsk); + +- if ((tsk->flags & PF_VCPU) && !irq_count()) ++ if (tsk->flags & PF_VCPU) + ti->gtime += stime; +- else if (hardirq_count()) +- ti->hardirq_time += stime; +- else if (in_serving_softirq()) +- ti->softirq_time += stime; + else + ti->stime += stime; + } +@@ -156,6 +152,20 @@ + ti->idle_time += vtime_delta(tsk); + } + ++void vtime_account_softirq(struct task_struct *tsk) ++{ ++ struct thread_info *ti = task_thread_info(tsk); ++ ++ ti->softirq_time += vtime_delta(tsk); ++} ++ ++void vtime_account_hardirq(struct task_struct *tsk) ++{ ++ struct thread_info *ti = task_thread_info(tsk); ++ ++ ti->hardirq_time += vtime_delta(tsk); ++} ++ + #endif /* CONFIG_VIRT_CPU_ACCOUNTING_NATIVE */ + + static irqreturn_t +diff -Naur --no-dereference a/arch/Kconfig b/arch/Kconfig +--- a/arch/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/Kconfig 2024-11-24 20:19:38.092228681 -0500 +@@ -37,6 +37,7 @@ + tristate "OProfile system profiling" + depends on PROFILING + depends on HAVE_OPROFILE ++ depends on !PREEMPT_RT + select RING_BUFFER + select RING_BUFFER_ALLOW_SWAP + help +@@ -643,6 +644,12 @@ + config HAVE_VIRT_CPU_ACCOUNTING + bool + ++config HAVE_VIRT_CPU_ACCOUNTING_IDLE ++ bool ++ help ++ Architecture has its own way to account idle CPU time and therefore ++ doesn't implement vtime_account_idle(). ++ + config ARCH_HAS_SCALED_CPUTIME + bool + +@@ -657,7 +664,6 @@ + some 32-bit arches may require multiple accesses, so proper + locking is needed to protect against concurrent accesses. + +- + config HAVE_IRQ_TIME_ACCOUNTING + bool + help +diff -Naur --no-dereference a/arch/microblaze/include/asm/fixmap.h b/arch/microblaze/include/asm/fixmap.h +--- a/arch/microblaze/include/asm/fixmap.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/microblaze/include/asm/fixmap.h 2024-11-24 20:19:38.117228726 -0500 +@@ -20,7 +20,7 @@ + #include + #ifdef CONFIG_HIGHMEM + #include +-#include ++#include + #endif + + #define FIXADDR_TOP ((unsigned long)(-PAGE_SIZE)) +@@ -47,7 +47,7 @@ + FIX_HOLE, + #ifdef CONFIG_HIGHMEM + FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ +- FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * num_possible_cpus()) - 1, ++ FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_MAX_IDX * num_possible_cpus()) - 1, + #endif + __end_of_fixed_addresses + }; +diff -Naur --no-dereference a/arch/microblaze/include/asm/highmem.h b/arch/microblaze/include/asm/highmem.h +--- a/arch/microblaze/include/asm/highmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/microblaze/include/asm/highmem.h 2024-11-24 20:19:38.117228726 -0500 +@@ -25,7 +25,6 @@ + #include + #include + +-extern pte_t *kmap_pte; + extern pte_t *pkmap_page_table; + + /* +@@ -52,6 +51,11 @@ + + #define flush_cache_kmaps() { flush_icache(); flush_dcache(); } + ++#define arch_kmap_local_post_map(vaddr, pteval) \ ++ local_flush_tlb_page(NULL, vaddr); ++#define arch_kmap_local_post_unmap(vaddr) \ ++ local_flush_tlb_page(NULL, vaddr); ++ + #endif /* __KERNEL__ */ + + #endif /* _ASM_HIGHMEM_H */ +diff -Naur --no-dereference a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig +--- a/arch/microblaze/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/microblaze/Kconfig 2024-11-24 20:19:38.117228726 -0500 +@@ -155,6 +155,7 @@ + config HIGHMEM + bool "High memory support" + depends on MMU ++ select KMAP_LOCAL + help + The address space of Microblaze processors is only 4 Gigabytes large + and it has to accommodate user address space, kernel address +diff -Naur --no-dereference a/arch/microblaze/mm/highmem.c b/arch/microblaze/mm/highmem.c +--- a/arch/microblaze/mm/highmem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/microblaze/mm/highmem.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1,78 +0,0 @@ +-// SPDX-License-Identifier: GPL-2.0 +-/* +- * highmem.c: virtual kernel memory mappings for high memory +- * +- * PowerPC version, stolen from the i386 version. +- * +- * Used in CONFIG_HIGHMEM systems for memory pages which +- * are not addressable by direct kernel virtual addresses. +- * +- * Copyright (C) 1999 Gerhard Wichert, Siemens AG +- * Gerhard.Wichert@pdb.siemens.de +- * +- * +- * Redesigned the x86 32-bit VM architecture to deal with +- * up to 16 Terrabyte physical memory. With current x86 CPUs +- * we now support up to 64 Gigabytes physical RAM. +- * +- * Copyright (C) 1999 Ingo Molnar +- * +- * Reworked for PowerPC by various contributors. Moved from +- * highmem.h by Benjamin Herrenschmidt (c) 2009 IBM Corp. +- */ +- +-#include +-#include +- +-/* +- * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap +- * gives a more generic (and caching) interface. But kmap_atomic can +- * be used in IRQ contexts, so in some (very limited) cases we need +- * it. +- */ +-#include +- +-void *kmap_atomic_high_prot(struct page *page, pgprot_t prot) +-{ +- +- unsigned long vaddr; +- int idx, type; +- +- type = kmap_atomic_idx_push(); +- idx = type + KM_TYPE_NR*smp_processor_id(); +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +-#ifdef CONFIG_DEBUG_HIGHMEM +- BUG_ON(!pte_none(*(kmap_pte-idx))); +-#endif +- set_pte_at(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot)); +- local_flush_tlb_page(NULL, vaddr); +- +- return (void *) vaddr; +-} +-EXPORT_SYMBOL(kmap_atomic_high_prot); +- +-void kunmap_atomic_high(void *kvaddr) +-{ +- unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; +- int type; +- unsigned int idx; +- +- if (vaddr < __fix_to_virt(FIX_KMAP_END)) +- return; +- +- type = kmap_atomic_idx(); +- +- idx = type + KM_TYPE_NR * smp_processor_id(); +-#ifdef CONFIG_DEBUG_HIGHMEM +- BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); +-#endif +- /* +- * force other mappings to Oops if they'll try to access +- * this pte without first remap it +- */ +- pte_clear(&init_mm, vaddr, kmap_pte-idx); +- local_flush_tlb_page(NULL, vaddr); +- +- kmap_atomic_idx_pop(); +-} +-EXPORT_SYMBOL(kunmap_atomic_high); +diff -Naur --no-dereference a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c +--- a/arch/microblaze/mm/init.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/microblaze/mm/init.c 2024-11-24 20:19:38.118228728 -0500 +@@ -49,17 +49,11 @@ + EXPORT_SYMBOL(min_low_pfn); + EXPORT_SYMBOL(max_low_pfn); + +-#ifdef CONFIG_HIGHMEM +-pte_t *kmap_pte; +-EXPORT_SYMBOL(kmap_pte); +- + static void __init highmem_init(void) + { + pr_debug("%x\n", (u32)PKMAP_BASE); + map_page(PKMAP_BASE, 0, 0); /* XXX gross */ + pkmap_page_table = virt_to_kpte(PKMAP_BASE); +- +- kmap_pte = virt_to_kpte(__fix_to_virt(FIX_KMAP_BEGIN)); + } + + static void highmem_setup(void) +diff -Naur --no-dereference a/arch/microblaze/mm/Makefile b/arch/microblaze/mm/Makefile +--- a/arch/microblaze/mm/Makefile 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/microblaze/mm/Makefile 2024-11-24 20:19:38.118228728 -0500 +@@ -6,4 +6,3 @@ + obj-y := consistent.o init.o + + obj-$(CONFIG_MMU) += pgtable.o mmu_context.o fault.o +-obj-$(CONFIG_HIGHMEM) += highmem.o +diff -Naur --no-dereference a/arch/mips/include/asm/fixmap.h b/arch/mips/include/asm/fixmap.h +--- a/arch/mips/include/asm/fixmap.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/mips/include/asm/fixmap.h 2024-11-24 20:19:38.118228728 -0500 +@@ -17,7 +17,7 @@ + #include + #ifdef CONFIG_HIGHMEM + #include +-#include ++#include + #endif + + /* +@@ -52,7 +52,7 @@ + #ifdef CONFIG_HIGHMEM + /* reserved pte's for temporary kernel mappings */ + FIX_KMAP_BEGIN = FIX_CMAP_END + 1, +- FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, ++ FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_MAX_IDX * NR_CPUS) - 1, + #endif + __end_of_fixed_addresses + }; +diff -Naur --no-dereference a/arch/mips/include/asm/highmem.h b/arch/mips/include/asm/highmem.h +--- a/arch/mips/include/asm/highmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/mips/include/asm/highmem.h 2024-11-24 20:19:38.118228728 -0500 +@@ -24,7 +24,7 @@ + #include + #include + #include +-#include ++#include + + /* declarations for highmem.c */ + extern unsigned long highstart_pfn, highend_pfn; +@@ -48,11 +48,11 @@ + + #define ARCH_HAS_KMAP_FLUSH_TLB + extern void kmap_flush_tlb(unsigned long addr); +-extern void *kmap_atomic_pfn(unsigned long pfn); + + #define flush_cache_kmaps() BUG_ON(cpu_has_dc_aliases) + +-extern void kmap_init(void); ++#define arch_kmap_local_post_map(vaddr, pteval) local_flush_tlb_one(vaddr) ++#define arch_kmap_local_post_unmap(vaddr) local_flush_tlb_one(vaddr) + + #endif /* __KERNEL__ */ + +diff -Naur --no-dereference a/arch/mips/include/asm/kmap_types.h b/arch/mips/include/asm/kmap_types.h +--- a/arch/mips/include/asm/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/mips/include/asm/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,13 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef _ASM_KMAP_TYPES_H +-#define _ASM_KMAP_TYPES_H +- +-#ifdef CONFIG_DEBUG_HIGHMEM +-#define __WITH_KM_FENCE +-#endif +- +-#include +- +-#undef __WITH_KM_FENCE +- +-#endif diff -Naur --no-dereference a/arch/mips/include/uapi/asm/socket.h b/arch/mips/include/uapi/asm/socket.h --- a/arch/mips/include/uapi/asm/socket.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/mips/include/uapi/asm/socket.h 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/mips/include/uapi/asm/socket.h 2024-11-24 20:19:38.118228728 -0500 @@ -159,4 +159,10 @@ #endif @@ -60451,9 +61926,387 @@ diff -Naur --no-dereference a/arch/mips/include/uapi/asm/socket.h b/arch/mips/in +#define SCM_RED_TIMESTAMPING SO_RED_TIMESTAMPING + #endif /* _UAPI_ASM_SOCKET_H */ +diff -Naur --no-dereference a/arch/mips/Kconfig b/arch/mips/Kconfig +--- a/arch/mips/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/mips/Kconfig 2024-11-24 20:19:38.118228728 -0500 +@@ -2730,6 +2730,7 @@ + config HIGHMEM + bool "High Memory Support" + depends on 32BIT && CPU_SUPPORTS_HIGHMEM && SYS_SUPPORTS_HIGHMEM && !CPU_MIPS32_3_5_EVA ++ select KMAP_LOCAL + + config CPU_SUPPORTS_HIGHMEM + bool +diff -Naur --no-dereference a/arch/mips/kernel/crash_dump.c b/arch/mips/kernel/crash_dump.c +--- a/arch/mips/kernel/crash_dump.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/mips/kernel/crash_dump.c 2024-11-24 20:19:38.118228728 -0500 +@@ -5,8 +5,6 @@ + #include + #include + +-static void *kdump_buf_page; +- + /** + * copy_oldmem_page - copy one page from "oldmem" + * @pfn: page frame number to be copied +@@ -17,51 +15,25 @@ + * @userbuf: if set, @buf is in user address space, use copy_to_user(), + * otherwise @buf is in kernel address space, use memcpy(). + * +- * Copy a page from "oldmem". For this page, there is no pte mapped ++ * Copy a page from "oldmem". For this page, there might be no pte mapped + * in the current kernel. +- * +- * Calling copy_to_user() in atomic context is not desirable. Hence first +- * copying the data to a pre-allocated kernel page and then copying to user +- * space in non-atomic context. + */ +-ssize_t copy_oldmem_page(unsigned long pfn, char *buf, +- size_t csize, unsigned long offset, int userbuf) ++ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize, ++ unsigned long offset, int userbuf) + { + void *vaddr; + + if (!csize) + return 0; + +- vaddr = kmap_atomic_pfn(pfn); ++ vaddr = kmap_local_pfn(pfn); + + if (!userbuf) { +- memcpy(buf, (vaddr + offset), csize); +- kunmap_atomic(vaddr); ++ memcpy(buf, vaddr + offset, csize); + } else { +- if (!kdump_buf_page) { +- pr_warn("Kdump: Kdump buffer page not allocated\n"); +- +- return -EFAULT; +- } +- copy_page(kdump_buf_page, vaddr); +- kunmap_atomic(vaddr); +- if (copy_to_user(buf, (kdump_buf_page + offset), csize)) +- return -EFAULT; ++ if (copy_to_user(buf, vaddr + offset, csize)) ++ csize = -EFAULT; + } + + return csize; + } +- +-static int __init kdump_buf_page_init(void) +-{ +- int ret = 0; +- +- kdump_buf_page = kmalloc(PAGE_SIZE, GFP_KERNEL); +- if (!kdump_buf_page) { +- pr_warn("Kdump: Failed to allocate kdump buffer page\n"); +- ret = -ENOMEM; +- } +- +- return ret; +-} +-arch_initcall(kdump_buf_page_init); +diff -Naur --no-dereference a/arch/mips/mm/highmem.c b/arch/mips/mm/highmem.c +--- a/arch/mips/mm/highmem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/mips/mm/highmem.c 2024-11-24 20:19:38.118228728 -0500 +@@ -8,8 +8,6 @@ + #include + #include + +-static pte_t *kmap_pte; +- + unsigned long highstart_pfn, highend_pfn; + + void kmap_flush_tlb(unsigned long addr) +@@ -17,78 +15,3 @@ + flush_tlb_one(addr); + } + EXPORT_SYMBOL(kmap_flush_tlb); +- +-void *kmap_atomic_high_prot(struct page *page, pgprot_t prot) +-{ +- unsigned long vaddr; +- int idx, type; +- +- type = kmap_atomic_idx_push(); +- idx = type + KM_TYPE_NR*smp_processor_id(); +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +-#ifdef CONFIG_DEBUG_HIGHMEM +- BUG_ON(!pte_none(*(kmap_pte - idx))); +-#endif +- set_pte(kmap_pte-idx, mk_pte(page, prot)); +- local_flush_tlb_one((unsigned long)vaddr); +- +- return (void*) vaddr; +-} +-EXPORT_SYMBOL(kmap_atomic_high_prot); +- +-void kunmap_atomic_high(void *kvaddr) +-{ +- unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; +- int type __maybe_unused; +- +- if (vaddr < FIXADDR_START) +- return; +- +- type = kmap_atomic_idx(); +-#ifdef CONFIG_DEBUG_HIGHMEM +- { +- int idx = type + KM_TYPE_NR * smp_processor_id(); +- +- BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); +- +- /* +- * force other mappings to Oops if they'll try to access +- * this pte without first remap it +- */ +- pte_clear(&init_mm, vaddr, kmap_pte-idx); +- local_flush_tlb_one(vaddr); +- } +-#endif +- kmap_atomic_idx_pop(); +-} +-EXPORT_SYMBOL(kunmap_atomic_high); +- +-/* +- * This is the same as kmap_atomic() but can map memory that doesn't +- * have a struct page associated with it. +- */ +-void *kmap_atomic_pfn(unsigned long pfn) +-{ +- unsigned long vaddr; +- int idx, type; +- +- preempt_disable(); +- pagefault_disable(); +- +- type = kmap_atomic_idx_push(); +- idx = type + KM_TYPE_NR*smp_processor_id(); +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +- set_pte(kmap_pte-idx, pfn_pte(pfn, PAGE_KERNEL)); +- flush_tlb_one(vaddr); +- +- return (void*) vaddr; +-} +- +-void __init kmap_init(void) +-{ +- unsigned long kmap_vstart; +- +- /* cache the first kmap pte */ +- kmap_vstart = __fix_to_virt(FIX_KMAP_BEGIN); +- kmap_pte = virt_to_kpte(kmap_vstart); +-} +diff -Naur --no-dereference a/arch/mips/mm/init.c b/arch/mips/mm/init.c +--- a/arch/mips/mm/init.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/mips/mm/init.c 2024-11-24 20:19:38.118228728 -0500 +@@ -36,7 +36,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -402,9 +401,6 @@ + + pagetable_init(); + +-#ifdef CONFIG_HIGHMEM +- kmap_init(); +-#endif + #ifdef CONFIG_ZONE_DMA + max_zone_pfns[ZONE_DMA] = MAX_DMA_PFN; + #endif +diff -Naur --no-dereference a/arch/nds32/include/asm/fixmap.h b/arch/nds32/include/asm/fixmap.h +--- a/arch/nds32/include/asm/fixmap.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/nds32/include/asm/fixmap.h 2024-11-24 20:19:38.118228728 -0500 +@@ -6,7 +6,7 @@ + + #ifdef CONFIG_HIGHMEM + #include +-#include ++#include + #endif + + enum fixed_addresses { +@@ -14,7 +14,7 @@ + FIX_KMAP_RESERVED, + FIX_KMAP_BEGIN, + #ifdef CONFIG_HIGHMEM +- FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * NR_CPUS), ++ FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_MAX_IDX * NR_CPUS) - 1, + #endif + FIX_EARLYCON_MEM_BASE, + __end_of_fixed_addresses +diff -Naur --no-dereference a/arch/nds32/include/asm/highmem.h b/arch/nds32/include/asm/highmem.h +--- a/arch/nds32/include/asm/highmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/nds32/include/asm/highmem.h 2024-11-24 20:19:38.118228728 -0500 +@@ -5,7 +5,6 @@ + #define _ASM_HIGHMEM_H + + #include +-#include + #include + + /* +@@ -45,11 +44,22 @@ + extern void kmap_init(void); + + /* +- * The following functions are already defined by +- * when CONFIG_HIGHMEM is not set. ++ * FIXME: The below looks broken vs. a kmap_atomic() in task context which ++ * is interupted and another kmap_atomic() happens in interrupt context. ++ * But what do I know about nds32. -- tglx + */ +-#ifdef CONFIG_HIGHMEM +-extern void *kmap_atomic_pfn(unsigned long pfn); +-#endif ++#define arch_kmap_local_post_map(vaddr, pteval) \ ++ do { \ ++ __nds32__tlbop_inv(vaddr); \ ++ __nds32__mtsr_dsb(vaddr, NDS32_SR_TLB_VPN); \ ++ __nds32__tlbop_rwr(pteval); \ ++ __nds32__isb(); \ ++ } while (0) ++ ++#define arch_kmap_local_pre_unmap(vaddr) \ ++ do { \ ++ __nds32__tlbop_inv(vaddr); \ ++ __nds32__isb(); \ ++ } while (0) + + #endif +diff -Naur --no-dereference a/arch/nds32/Kconfig.cpu b/arch/nds32/Kconfig.cpu +--- a/arch/nds32/Kconfig.cpu 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/nds32/Kconfig.cpu 2024-11-24 20:19:38.118228728 -0500 +@@ -157,6 +157,7 @@ + config HIGHMEM + bool "High Memory Support" + depends on MMU && !CPU_CACHE_ALIASING ++ select KMAP_LOCAL + help + The address space of Andes processors is only 4 Gigabytes large + and it has to accommodate user address space, kernel address +diff -Naur --no-dereference a/arch/nds32/mm/highmem.c b/arch/nds32/mm/highmem.c +--- a/arch/nds32/mm/highmem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/nds32/mm/highmem.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1,48 +0,0 @@ +-// SPDX-License-Identifier: GPL-2.0 +-// Copyright (C) 2005-2017 Andes Technology Corporation +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-void *kmap_atomic_high_prot(struct page *page, pgprot_t prot) +-{ +- unsigned int idx; +- unsigned long vaddr, pte; +- int type; +- pte_t *ptep; +- +- type = kmap_atomic_idx_push(); +- +- idx = type + KM_TYPE_NR * smp_processor_id(); +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +- pte = (page_to_pfn(page) << PAGE_SHIFT) | prot; +- ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr); +- set_pte(ptep, pte); +- +- __nds32__tlbop_inv(vaddr); +- __nds32__mtsr_dsb(vaddr, NDS32_SR_TLB_VPN); +- __nds32__tlbop_rwr(pte); +- __nds32__isb(); +- return (void *)vaddr; +-} +-EXPORT_SYMBOL(kmap_atomic_high_prot); +- +-void kunmap_atomic_high(void *kvaddr) +-{ +- if (kvaddr >= (void *)FIXADDR_START) { +- unsigned long vaddr = (unsigned long)kvaddr; +- pte_t *ptep; +- kmap_atomic_idx_pop(); +- __nds32__tlbop_inv(vaddr); +- __nds32__isb(); +- ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr); +- set_pte(ptep, 0); +- } +-} +-EXPORT_SYMBOL(kunmap_atomic_high); +diff -Naur --no-dereference a/arch/nds32/mm/Makefile b/arch/nds32/mm/Makefile +--- a/arch/nds32/mm/Makefile 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/nds32/mm/Makefile 2024-11-24 20:19:38.118228728 -0500 +@@ -3,7 +3,6 @@ + mm-nds32.o cacheflush.o proc.o + + obj-$(CONFIG_ALIGNMENT_TRAP) += alignment.o +-obj-$(CONFIG_HIGHMEM) += highmem.o + + ifdef CONFIG_FUNCTION_TRACER + CFLAGS_REMOVE_proc.o = $(CC_FLAGS_FTRACE) +diff -Naur --no-dereference a/arch/openrisc/mm/init.c b/arch/openrisc/mm/init.c +--- a/arch/openrisc/mm/init.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/openrisc/mm/init.c 2024-11-24 20:19:38.118228728 -0500 +@@ -33,7 +33,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff -Naur --no-dereference a/arch/openrisc/mm/ioremap.c b/arch/openrisc/mm/ioremap.c +--- a/arch/openrisc/mm/ioremap.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/openrisc/mm/ioremap.c 2024-11-24 20:19:38.119228730 -0500 +@@ -15,7 +15,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff -Naur --no-dereference a/arch/parisc/include/asm/hardirq.h b/arch/parisc/include/asm/hardirq.h +--- a/arch/parisc/include/asm/hardirq.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/parisc/include/asm/hardirq.h 2024-11-24 20:19:38.119228730 -0500 +@@ -32,7 +32,6 @@ + DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); + + #define __ARCH_IRQ_STAT +-#define __IRQ_STAT(cpu, member) (irq_stat[cpu].member) + #define inc_irq_stat(member) this_cpu_inc(irq_stat.member) + #define __inc_irq_stat(member) __this_cpu_inc(irq_stat.member) + #define ack_bad_irq(irq) WARN(1, "unexpected IRQ trap at vector %02x\n", irq) +diff -Naur --no-dereference a/arch/parisc/include/asm/kmap_types.h b/arch/parisc/include/asm/kmap_types.h +--- a/arch/parisc/include/asm/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/parisc/include/asm/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,13 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef _ASM_KMAP_TYPES_H +-#define _ASM_KMAP_TYPES_H +- +-#ifdef CONFIG_DEBUG_HIGHMEM +-#define __WITH_KM_FENCE +-#endif +- +-#include +- +-#undef __WITH_KM_FENCE +- +-#endif diff -Naur --no-dereference a/arch/parisc/include/uapi/asm/socket.h b/arch/parisc/include/uapi/asm/socket.h --- a/arch/parisc/include/uapi/asm/socket.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/parisc/include/uapi/asm/socket.h 2024-08-28 19:44:05.604037925 -0400 ++++ b/arch/parisc/include/uapi/asm/socket.h 2024-11-24 20:19:38.119228730 -0500 @@ -139,4 +139,10 @@ #endif @@ -60465,368 +62318,3150 @@ diff -Naur --no-dereference a/arch/parisc/include/uapi/asm/socket.h b/arch/paris +#define SCM_RED_TIMESTAMPING SO_RED_TIMESTAMPING + #endif /* _UAPI_ASM_SOCKET_H */ -diff -Naur --no-dereference a/arch/sparc/include/uapi/asm/socket.h b/arch/sparc/include/uapi/asm/socket.h ---- a/arch/sparc/include/uapi/asm/socket.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/arch/sparc/include/uapi/asm/socket.h 2024-08-28 19:44:05.604037925 -0400 -@@ -142,4 +142,10 @@ +diff -Naur --no-dereference a/arch/powerpc/include/asm/cmpxchg.h b/arch/powerpc/include/asm/cmpxchg.h +--- a/arch/powerpc/include/asm/cmpxchg.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/include/asm/cmpxchg.h 2024-11-24 20:19:38.119228730 -0500 +@@ -5,7 +5,7 @@ + #ifdef __KERNEL__ + #include + #include +-#include ++#include + #ifdef __BIG_ENDIAN + #define BITOFF_CAL(size, off) ((sizeof(u32) - size - off) * BITS_PER_BYTE) +diff -Naur --no-dereference a/arch/powerpc/include/asm/fixmap.h b/arch/powerpc/include/asm/fixmap.h +--- a/arch/powerpc/include/asm/fixmap.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/include/asm/fixmap.h 2024-11-24 20:19:38.119228730 -0500 +@@ -20,7 +20,7 @@ + #include + #ifdef CONFIG_HIGHMEM + #include +-#include ++#include #endif -+#define SO_REDUNDANT 0x0053 -+#define SCM_REDUNDANT SO_REDUNDANT -+ -+#define SO_RED_TIMESTAMPING 0x0054 -+#define SCM_RED_TIMESTAMPING SO_RED_TIMESTAMPING + #ifdef CONFIG_PPC64 +@@ -61,7 +61,7 @@ + FIX_EARLY_DEBUG_BASE = FIX_EARLY_DEBUG_TOP+(ALIGN(SZ_128K, PAGE_SIZE)/PAGE_SIZE)-1, + #ifdef CONFIG_HIGHMEM + FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ +- FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, ++ FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_MAX_IDX * NR_CPUS) - 1, + #endif + #ifdef CONFIG_PPC_8xx + /* For IMMR we need an aligned 512K area */ +diff -Naur --no-dereference a/arch/powerpc/include/asm/highmem.h b/arch/powerpc/include/asm/highmem.h +--- a/arch/powerpc/include/asm/highmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/include/asm/highmem.h 2024-11-24 20:19:38.119228730 -0500 +@@ -24,12 +24,10 @@ + #ifdef __KERNEL__ + + #include +-#include + #include + #include + #include + +-extern pte_t *kmap_pte; + extern pte_t *pkmap_page_table; + + /* +@@ -60,6 +58,11 @@ + + #define flush_cache_kmaps() flush_cache_all() + ++#define arch_kmap_local_post_map(vaddr, pteval) \ ++ local_flush_tlb_page(NULL, vaddr) ++#define arch_kmap_local_post_unmap(vaddr) \ ++ local_flush_tlb_page(NULL, vaddr) + - #endif /* _ASM_SOCKET_H */ -diff -Naur --no-dereference a/block/blk-iocost.c b/block/blk-iocost.c ---- a/block/blk-iocost.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/block/blk-iocost.c 2024-08-28 19:44:05.604037925 -0400 -@@ -232,7 +232,9 @@ + #endif /* __KERNEL__ */ - /* 1/64k is granular enough and can easily be handled w/ u32 */ - WEIGHT_ONE = 1 << 16, -+}; + #endif /* _ASM_HIGHMEM_H */ +diff -Naur --no-dereference a/arch/powerpc/include/asm/kmap_types.h b/arch/powerpc/include/asm/kmap_types.h +--- a/arch/powerpc/include/asm/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/include/asm/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,13 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0-or-later */ +-#ifndef _ASM_POWERPC_KMAP_TYPES_H +-#define _ASM_POWERPC_KMAP_TYPES_H +- +-#ifdef __KERNEL__ +- +-/* +- */ +- +-#define KM_TYPE_NR 16 +- +-#endif /* __KERNEL__ */ +-#endif /* _ASM_POWERPC_KMAP_TYPES_H */ +diff -Naur --no-dereference a/arch/powerpc/include/asm/simple_spinlock_types.h b/arch/powerpc/include/asm/simple_spinlock_types.h +--- a/arch/powerpc/include/asm/simple_spinlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/include/asm/simple_spinlock_types.h 2024-11-24 20:19:38.119228730 -0500 +@@ -2,7 +2,7 @@ + #ifndef _ASM_POWERPC_SIMPLE_SPINLOCK_TYPES_H + #define _ASM_POWERPC_SIMPLE_SPINLOCK_TYPES_H -+enum { +-#ifndef __LINUX_SPINLOCK_TYPES_H ++#if !defined(__LINUX_SPINLOCK_TYPES_H) && !defined(__LINUX_RT_MUTEX_H) + # error "please don't include this file directly" + #endif + +diff -Naur --no-dereference a/arch/powerpc/include/asm/spinlock_types.h b/arch/powerpc/include/asm/spinlock_types.h +--- a/arch/powerpc/include/asm/spinlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/include/asm/spinlock_types.h 2024-11-24 20:19:38.119228730 -0500 +@@ -2,10 +2,6 @@ + #ifndef _ASM_POWERPC_SPINLOCK_TYPES_H + #define _ASM_POWERPC_SPINLOCK_TYPES_H + +-#ifndef __LINUX_SPINLOCK_TYPES_H +-# error "please don't include this file directly" +-#endif +- + #ifdef CONFIG_PPC_QUEUED_SPINLOCKS + #include + #include +diff -Naur --no-dereference a/arch/powerpc/include/asm/stackprotector.h b/arch/powerpc/include/asm/stackprotector.h +--- a/arch/powerpc/include/asm/stackprotector.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/include/asm/stackprotector.h 2024-11-24 20:19:38.119228730 -0500 +@@ -24,7 +24,11 @@ + unsigned long canary; + + /* Try to get a semi random initial value. */ ++#ifdef CONFIG_PREEMPT_RT ++ canary = (unsigned long)&canary; ++#else + canary = get_random_canary(); ++#endif + canary ^= mftb(); + canary ^= LINUX_VERSION_CODE; + canary &= CANARY_MASK; +diff -Naur --no-dereference a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h +--- a/arch/powerpc/include/asm/thread_info.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/include/asm/thread_info.h 2024-11-24 20:19:38.119228730 -0500 +@@ -54,6 +54,8 @@ + struct thread_info { + int preempt_count; /* 0 => preemptable, + <0 => BUG */ ++ int preempt_lazy_count; /* 0 => preemptable, ++ <0 => BUG */ + unsigned long local_flags; /* private flags for thread */ + #ifdef CONFIG_LIVEPATCH + unsigned long *livepatch_sp; +@@ -104,11 +106,12 @@ + #define TIF_SINGLESTEP 8 /* singlestepping active */ + #define TIF_NOHZ 9 /* in adaptive nohz mode */ + #define TIF_SECCOMP 10 /* secure computing */ +-#define TIF_RESTOREALL 11 /* Restore all regs (implies NOERROR) */ +-#define TIF_NOERROR 12 /* Force successful syscall return */ ++ ++#define TIF_NEED_RESCHED_LAZY 11 /* lazy rescheduling necessary */ ++#define TIF_SYSCALL_TRACEPOINT 12 /* syscall tracepoint instrumentation */ ++ + #define TIF_NOTIFY_RESUME 13 /* callback before returning to user */ + #define TIF_UPROBE 14 /* breakpointed or single-stepping */ +-#define TIF_SYSCALL_TRACEPOINT 15 /* syscall tracepoint instrumentation */ + #define TIF_EMULATE_STACK_STORE 16 /* Is an instruction emulation + for stack store? */ + #define TIF_MEMDIE 17 /* is terminating due to OOM killer */ +@@ -117,6 +120,9 @@ + #endif + #define TIF_POLLING_NRFLAG 19 /* true if poll_idle() is polling TIF_NEED_RESCHED */ + #define TIF_32BIT 20 /* 32 bit binary */ ++#define TIF_RESTOREALL 21 /* Restore all regs (implies NOERROR) */ ++#define TIF_NOERROR 22 /* Force successful syscall return */ ++ + + /* as above, but as bit values */ + #define _TIF_SYSCALL_TRACE (1< PAGE_SIZE ? PAGE_SIZE : -+ speed[i].blen); - ahash_request_set_crypt(data[k].req, data[k].sg, - data[k].result, speed[i].blen); -+ } + static struct kmsg_dumper nvram_kmsg_dumper = { + .dump = oops_to_nvram +@@ -643,7 +644,8 @@ + * partition. If that's too much, go back and capture uncompressed text. + */ + static void oops_to_nvram(struct kmsg_dumper *dumper, +- enum kmsg_dump_reason reason) ++ enum kmsg_dump_reason reason, ++ struct kmsg_dumper_iter *iter) + { + struct oops_log_info *oops_hdr = (struct oops_log_info *)oops_buf; + static unsigned int oops_count = 0; +@@ -681,13 +683,13 @@ + return; - pr_info("test%3u " - "(%5u byte blocks,%5u bytes per update,%4u updates): ", -@@ -1107,6 +1111,7 @@ - "(%5u byte blocks,%5u bytes per update,%4u updates): ", - i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen); + if (big_oops_buf) { +- kmsg_dump_get_buffer(dumper, false, ++ kmsg_dump_get_buffer(iter, false, + big_oops_buf, big_oops_buf_sz, &text_len); + rc = zip_oops(text_len); + } + if (rc != 0) { +- kmsg_dump_rewind(dumper); +- kmsg_dump_get_buffer(dumper, false, ++ kmsg_dump_rewind(iter); ++ kmsg_dump_get_buffer(iter, false, + oops_data, oops_data_sz, &text_len); + err_type = ERR_TYPE_KERNEL_PANIC; + oops_hdr->version = cpu_to_be16(OOPS_HDR_VERSION); +diff -Naur --no-dereference a/arch/powerpc/kernel/syscall_64.c b/arch/powerpc/kernel/syscall_64.c +--- a/arch/powerpc/kernel/syscall_64.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/kernel/syscall_64.c 2024-11-24 20:19:38.120228731 -0500 +@@ -193,7 +193,7 @@ + ti_flags = READ_ONCE(*ti_flagsp); + while (unlikely(ti_flags & (_TIF_USER_WORK_MASK & ~_TIF_RESTORE_TM))) { + local_irq_enable(); +- if (ti_flags & _TIF_NEED_RESCHED) { ++ if (ti_flags & _TIF_NEED_RESCHED_MASK) { + schedule(); + } else { + /* +@@ -277,7 +277,7 @@ + ti_flags = READ_ONCE(*ti_flagsp); + while (unlikely(ti_flags & (_TIF_USER_WORK_MASK & ~_TIF_RESTORE_TM))) { + local_irq_enable(); /* returning to user: may enable */ +- if (ti_flags & _TIF_NEED_RESCHED) { ++ if (ti_flags & _TIF_NEED_RESCHED_MASK) { + schedule(); + } else { + if (ti_flags & _TIF_SIGPENDING) +@@ -361,11 +361,15 @@ + /* Returning to a kernel context with local irqs enabled. */ + WARN_ON_ONCE(!(regs->msr & MSR_EE)); + again: +- if (IS_ENABLED(CONFIG_PREEMPT)) { ++ if (IS_ENABLED(CONFIG_PREEMPTION)) { + /* Return to preemptible kernel context */ + if (unlikely(*ti_flagsp & _TIF_NEED_RESCHED)) { + if (preempt_count() == 0) + preempt_schedule_irq(); ++ } else if (unlikely(*ti_flagsp & _TIF_NEED_RESCHED_LAZY)) { ++ if ((preempt_count() == 0) && ++ (current_thread_info()->preempt_lazy_count == 0)) ++ preempt_schedule_irq(); + } + } -+ sg_set_buf(sg, tvmem[0], speed[i].plen); - ahash_request_set_crypt(req, sg, output, speed[i].plen); +diff -Naur --no-dereference a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c +--- a/arch/powerpc/kernel/time.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/kernel/time.c 2024-11-24 20:19:38.120228731 -0500 +@@ -312,12 +312,11 @@ + return stime_scaled; + } - if (secs) { -@@ -2456,6 +2461,11 @@ - generic_hash_speed_template); - if (mode > 300 && mode < 400) break; - fallthrough; -+ case 329: -+ test_hash_speed("crc64", sec, generic_hash_speed_template); -+ if (mode > 300 && mode < 400) -+ break; -+ fallthrough; - case 399: - break; +-static unsigned long vtime_delta(struct task_struct *tsk, ++static unsigned long vtime_delta(struct cpu_accounting_data *acct, + unsigned long *stime_scaled, + unsigned long *steal_time) + { + unsigned long now, stime; +- struct cpu_accounting_data *acct = get_accounting(tsk); -diff -Naur --no-dereference a/Documentation/ABI/testing/debugfs-aufs b/Documentation/ABI/testing/debugfs-aufs ---- a/Documentation/ABI/testing/debugfs-aufs 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/ABI/testing/debugfs-aufs 2024-08-28 19:44:05.584037817 -0400 -@@ -0,0 +1,55 @@ -+What: /debug/aufs/si_/ -+Date: March 2009 -+Contact: J. R. Okajima -+Description: -+ Under /debug/aufs, a directory named si_ is created -+ per aufs mount, where is a unique id generated -+ internally. -+ -+What: /debug/aufs/si_/plink -+Date: Apr 2013 -+Contact: J. R. Okajima -+Description: -+ It has three lines and shows the information about the -+ pseudo-link. The first line is a single number -+ representing a number of buckets. The second line is a -+ number of pseudo-links per buckets (separated by a -+ blank). The last line is a single number representing a -+ total number of psedo-links. -+ When the aufs mount option 'noplink' is specified, it -+ will show "1\n0\n0\n". -+ -+What: /debug/aufs/si_/xib -+Date: March 2009 -+Contact: J. R. Okajima -+Description: -+ It shows the consumed blocks by xib (External Inode Number -+ Bitmap), its block size and file size. -+ When the aufs mount option 'noxino' is specified, it -+ will be empty. About XINO files, see the aufs manual. -+ -+What: /debug/aufs/si_/xi -+Date: March 2009 -+Contact: J. R. Okajima -+Description: -+ It shows the consumed blocks by xino (External Inode Number -+ Translation Table), its link count, block size and file -+ size. -+ Due to the file size limit, there may exist multiple -+ xino files per branch. In this case, "-N" is added to -+ the filename and it corresponds to the index of the -+ internal xino array. "-0" is omitted. -+ When the aufs mount option 'noxino' is specified, Those -+ entries won't exist. About XINO files, see the aufs -+ manual. -+ -+What: /debug/aufs/si_/xigen -+Date: March 2009 -+Contact: J. R. Okajima -+Description: -+ It shows the consumed blocks by xigen (External Inode -+ Generation Table), its block size and file size. -+ If CONFIG_AUFS_EXPORT is disabled, this entry will not -+ be created. -+ When the aufs mount option 'noxino' is specified, it -+ will be empty. About XINO files, see the aufs manual. -diff -Naur --no-dereference a/Documentation/ABI/testing/sysfs-aufs b/Documentation/ABI/testing/sysfs-aufs ---- a/Documentation/ABI/testing/sysfs-aufs 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/ABI/testing/sysfs-aufs 2024-08-28 19:44:05.584037817 -0400 -@@ -0,0 +1,31 @@ -+What: /sys/fs/aufs/si_/ -+Date: March 2009 -+Contact: J. R. Okajima -+Description: -+ Under /sys/fs/aufs, a directory named si_ is created -+ per aufs mount, where is a unique id generated -+ internally. -+ -+What: /sys/fs/aufs/si_/br -+Date: March 2009 -+Contact: J. R. Okajima -+Description: -+ It shows the abolute path of a member directory (which -+ is called branch) in aufs, and its permission. + WARN_ON_ONCE(!irqs_disabled()); + +@@ -332,29 +331,30 @@ + return stime; + } + ++static void vtime_delta_kernel(struct cpu_accounting_data *acct, ++ unsigned long *stime, unsigned long *stime_scaled) ++{ ++ unsigned long steal_time; + -+What: /sys/fs/aufs/si_/brid -+Date: July 2013 -+Contact: J. R. Okajima -+Description: -+ It shows the id of a member directory (which is called -+ branch) in aufs. ++ *stime = vtime_delta(acct, stime_scaled, &steal_time); ++ *stime -= min(*stime, steal_time); ++ acct->steal_time += steal_time; ++} + -+What: /sys/fs/aufs/si_/xi_path -+Date: March 2009 -+Contact: J. R. Okajima -+Description: -+ It shows the abolute path of XINO (External Inode Number -+ Bitmap, Translation Table and Generation Table) file -+ even if it is the default path. -+ When the aufs mount option 'noxino' is specified, it -+ will be empty. About XINO files, see the aufs manual. -diff -Naur --no-dereference a/Documentation/ABI/testing/sysfs-bus-counter b/Documentation/ABI/testing/sysfs-bus-counter ---- a/Documentation/ABI/testing/sysfs-bus-counter 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/ABI/testing/sysfs-bus-counter 2024-08-28 19:44:05.584037817 -0400 -@@ -57,6 +57,7 @@ - What: /sys/bus/counter/devices/counterX/countY/count_mode_available - What: /sys/bus/counter/devices/counterX/countY/error_noise_available - What: /sys/bus/counter/devices/counterX/countY/function_available -+What: /sys/bus/counter/devices/counterX/countY/prescaler_available - What: /sys/bus/counter/devices/counterX/countY/signalZ_action_available - KernelVersion: 5.2 - Contact: linux-iio@vger.kernel.org -@@ -154,6 +155,15 @@ - Count Y. If possible, this should match the name of the - respective channel as it appears in the device datasheet. + void vtime_account_kernel(struct task_struct *tsk) + { +- unsigned long stime, stime_scaled, steal_time; + struct cpu_accounting_data *acct = get_accounting(tsk); ++ unsigned long stime, stime_scaled; -+What: /sys/bus/counter/devices/counterX/countY/prescaler -+KernelVersion: 5.2 -+Contact: linux-iio@vger.kernel.org -+Description: -+ Configure the prescaler value associated with Count Y. -+ On the FlexTimer, the counter clock source passes through a -+ prescaler (i.e. a counter). This acts like a clock -+ divider. -+ - What: /sys/bus/counter/devices/counterX/countY/preset - KernelVersion: 5.2 - Contact: linux-iio@vger.kernel.org -@@ -193,6 +203,61 @@ - both edges: - Any state transition. +- stime = vtime_delta(tsk, &stime_scaled, &steal_time); +- +- stime -= min(stime, steal_time); +- acct->steal_time += steal_time; ++ vtime_delta_kernel(acct, &stime, &stime_scaled); -+What: /sys/bus/counter/devices/counterX/countY/num_overflows -+KernelVersion: 6.1 -+Contact: linux-iio@vger.kernel.org -+Description: -+ This attribute indicates the number of overflows of count Y. +- if ((tsk->flags & PF_VCPU) && !irq_count()) { ++ if (tsk->flags & PF_VCPU) { + acct->gtime += stime; + #ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME + acct->utime_scaled += stime_scaled; + #endif + } else { +- if (hardirq_count()) +- acct->hardirq_time += stime; +- else if (in_serving_softirq()) +- acct->softirq_time += stime; +- else +- acct->stime += stime; +- ++ acct->stime += stime; + #ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME + acct->stime_scaled += stime_scaled; + #endif +@@ -367,10 +367,34 @@ + unsigned long stime, stime_scaled, steal_time; + struct cpu_accounting_data *acct = get_accounting(tsk); + +- stime = vtime_delta(tsk, &stime_scaled, &steal_time); ++ stime = vtime_delta(acct, &stime_scaled, &steal_time); + acct->idle_time += stime + steal_time; + } + ++static void vtime_account_irq_field(struct cpu_accounting_data *acct, ++ unsigned long *field) ++{ ++ unsigned long stime, stime_scaled; + -+What: /sys/bus/counter/devices/counterX/countY/captureZ -+KernelVersion: 6.1 -+Contact: linux-iio@vger.kernel.org -+Description: -+ This read-only attributes is a historical capture of the Count Y count data -+ where Z (if present) is the respective capture buffer element offset. ++ vtime_delta_kernel(acct, &stime, &stime_scaled); ++ *field += stime; ++#ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME ++ acct->stime_scaled += stime_scaled; ++#endif ++} + -+What: /sys/bus/counter/devices/counterX/countY/ceiling_component_id -+What: /sys/bus/counter/devices/counterX/countY/floor_component_id -+What: /sys/bus/counter/devices/counterX/countY/count_mode_component_id -+What: /sys/bus/counter/devices/counterX/countY/direction_component_id -+What: /sys/bus/counter/devices/counterX/countY/enable_component_id -+What: /sys/bus/counter/devices/counterX/countY/error_noise_component_id -+What: /sys/bus/counter/devices/counterX/countY/prescaler_component_id -+What: /sys/bus/counter/devices/counterX/countY/preset_component_id -+What: /sys/bus/counter/devices/counterX/countY/preset_enable_component_id -+What: /sys/bus/counter/devices/counterX/countY/signalZ_action_component_id -+What: /sys/bus/counter/devices/counterX/countY/num_overflows_component_id -+What: /sys/bus/counter/devices/counterX/countY/captureZ_component_id -+What: /sys/bus/counter/devices/counterX/signalY/cable_fault_component_id -+What: /sys/bus/counter/devices/counterX/signalY/cable_fault_enable_component_id -+What: /sys/bus/counter/devices/counterX/signalY/filter_clock_prescaler_component_id -+What: /sys/bus/counter/devices/counterX/signalY/index_polarity_component_id -+What: /sys/bus/counter/devices/counterX/signalY/synchronous_mode_component_id -+What: /sys/bus/counter/devices/counterX/signalY/polarityZ_component_id -+What: /sys/bus/counter/devices/counterX/signalY/frequency_component_id -+KernelVersion: 5.16 -+Contact: linux-iio@vger.kernel.org -+Description: -+ Read-only attribute that indicates the component ID of the -+ respective extension or Synapse. ++void vtime_account_softirq(struct task_struct *tsk) ++{ ++ struct cpu_accounting_data *acct = get_accounting(tsk); ++ vtime_account_irq_field(acct, &acct->softirq_time); ++} + -+What: /sys/bus/counter/devices/counterX/countY/spike_filter_ns -+KernelVersion: 5.14 -+Contact: linux-iio@vger.kernel.org -+Description: -+ If the counter device supports programmable spike filter this -+ attribute indicates the value in nanoseconds where noise pulses -+ shorter or equal to configured value are ignored. Value 0 means -+ filter is disabled. ++void vtime_account_hardirq(struct task_struct *tsk) ++{ ++ struct cpu_accounting_data *acct = get_accounting(tsk); ++ vtime_account_irq_field(acct, &acct->hardirq_time); ++} + -+What: /sys/bus/counter/devices/counterX/events_queue_size -+KernelVersion: 5.16 -+Contact: linux-iio@vger.kernel.org -+Description: -+ Size of the Counter events queue in number of struct -+ counter_event data structures. The number of elements will be -+ rounded-up to a power of 2. + static void vtime_flush_scaled(struct task_struct *tsk, + struct cpu_accounting_data *acct) + { +diff -Naur --no-dereference a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c +--- a/arch/powerpc/kernel/traps.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/kernel/traps.c 2024-11-24 20:19:38.120228731 -0500 +@@ -170,7 +170,6 @@ + + extern void panic_flush_kmsg_end(void) + { +- printk_safe_flush_on_panic(); + kmsg_dump(KMSG_DUMP_PANIC); + bust_spinlocks(0); + debug_locks_off(); +@@ -260,12 +259,17 @@ + + static int __die(const char *str, struct pt_regs *regs, long err) + { ++ const char *pr = ""; + - What: /sys/bus/counter/devices/counterX/name - KernelVersion: 5.2 - Contact: linux-iio@vger.kernel.org -@@ -215,11 +280,45 @@ - Read-only attribute that indicates the total number of Signals - belonging to the Counter. + printk("Oops: %s, sig: %ld [#%d]\n", str, err, ++die_counter); --What: /sys/bus/counter/devices/counterX/signalY/signal -+What: /sys/bus/counter/devices/counterX/signalY/cable_fault -+KernelVersion: 5.7 -+Contact: linux-iio@vger.kernel.org -+Description: -+ Read-only attribute that indicates whether a differential -+ encoder cable fault (not connected or loose wires) is detected -+ for the respective channel of Signal Y. Valid attribute values -+ are boolean. Detection must first be enabled via the -+ corresponding cable_fault_enable attribute. ++ if (IS_ENABLED(CONFIG_PREEMPTION)) ++ pr = IS_ENABLED(CONFIG_PREEMPT_RT) ? " PREEMPT_RT" : " PREEMPT"; + -+What: /sys/bus/counter/devices/counterX/signalY/cable_fault_enable -+KernelVersion: 5.7 -+Contact: linux-iio@vger.kernel.org -+Description: -+ Whether detection of differential encoder cable faults for the -+ respective channel of Signal Y is enabled. Valid attribute -+ values are boolean. + printk("%s PAGE_SIZE=%luK%s%s%s%s%s%s %s\n", + IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN) ? "LE" : "BE", + PAGE_SIZE / 1024, get_mmu_str(), +- IS_ENABLED(CONFIG_PREEMPT) ? " PREEMPT" : "", ++ pr, + IS_ENABLED(CONFIG_SMP) ? " SMP" : "", + IS_ENABLED(CONFIG_SMP) ? (" NR_CPUS=" __stringify(NR_CPUS)) : "", + debug_pagealloc_enabled() ? " DEBUG_PAGEALLOC" : "", +diff -Naur --no-dereference a/arch/powerpc/kernel/watchdog.c b/arch/powerpc/kernel/watchdog.c +--- a/arch/powerpc/kernel/watchdog.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/kernel/watchdog.c 2024-11-24 20:19:38.120228731 -0500 +@@ -185,11 +185,6 @@ + + wd_smp_unlock(&flags); + +- printk_safe_flush(); +- /* +- * printk_safe_flush() seems to require another print +- * before anything actually goes out to console. +- */ + if (sysctl_hardlockup_all_cpu_backtrace) + trigger_allbutself_cpu_backtrace(); + +diff -Naur --no-dereference a/arch/powerpc/kexec/crash.c b/arch/powerpc/kexec/crash.c +--- a/arch/powerpc/kexec/crash.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/kexec/crash.c 2024-11-24 20:19:38.120228731 -0500 +@@ -311,9 +311,6 @@ + unsigned int i; + int (*old_handler)(struct pt_regs *regs); + +- /* Avoid hardlocking with irresponsive CPU holding logbuf_lock */ +- printk_nmi_enter(); +- + /* + * This function is only called after the system + * has panicked or is otherwise in a critical state. +diff -Naur --no-dereference a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig +--- a/arch/powerpc/kvm/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/kvm/Kconfig 2024-11-24 20:19:38.120228731 -0500 +@@ -178,6 +178,7 @@ + config KVM_MPIC + bool "KVM in-kernel MPIC emulation" + depends on KVM && E500 ++ depends on !PREEMPT_RT + select HAVE_KVM_IRQCHIP + select HAVE_KVM_IRQFD + select HAVE_KVM_IRQ_ROUTING +diff -Naur --no-dereference a/arch/powerpc/mm/highmem.c b/arch/powerpc/mm/highmem.c +--- a/arch/powerpc/mm/highmem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/mm/highmem.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1,67 +0,0 @@ +-// SPDX-License-Identifier: GPL-2.0 +-/* +- * highmem.c: virtual kernel memory mappings for high memory +- * +- * PowerPC version, stolen from the i386 version. +- * +- * Used in CONFIG_HIGHMEM systems for memory pages which +- * are not addressable by direct kernel virtual addresses. +- * +- * Copyright (C) 1999 Gerhard Wichert, Siemens AG +- * Gerhard.Wichert@pdb.siemens.de +- * +- * +- * Redesigned the x86 32-bit VM architecture to deal with +- * up to 16 Terrabyte physical memory. With current x86 CPUs +- * we now support up to 64 Gigabytes physical RAM. +- * +- * Copyright (C) 1999 Ingo Molnar +- * +- * Reworked for PowerPC by various contributors. Moved from +- * highmem.h by Benjamin Herrenschmidt (c) 2009 IBM Corp. +- */ +- +-#include +-#include +- +-void *kmap_atomic_high_prot(struct page *page, pgprot_t prot) +-{ +- unsigned long vaddr; +- int idx, type; +- +- type = kmap_atomic_idx_push(); +- idx = type + KM_TYPE_NR*smp_processor_id(); +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +- WARN_ON(IS_ENABLED(CONFIG_DEBUG_HIGHMEM) && !pte_none(*(kmap_pte - idx))); +- __set_pte_at(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot), 1); +- local_flush_tlb_page(NULL, vaddr); +- +- return (void*) vaddr; +-} +-EXPORT_SYMBOL(kmap_atomic_high_prot); +- +-void kunmap_atomic_high(void *kvaddr) +-{ +- unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; +- +- if (vaddr < __fix_to_virt(FIX_KMAP_END)) +- return; +- +- if (IS_ENABLED(CONFIG_DEBUG_HIGHMEM)) { +- int type = kmap_atomic_idx(); +- unsigned int idx; +- +- idx = type + KM_TYPE_NR * smp_processor_id(); +- WARN_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); +- +- /* +- * force other mappings to Oops if they'll try to access +- * this pte without first remap it +- */ +- pte_clear(&init_mm, vaddr, kmap_pte-idx); +- local_flush_tlb_page(NULL, vaddr); +- } +- +- kmap_atomic_idx_pop(); +-} +-EXPORT_SYMBOL(kunmap_atomic_high); +diff -Naur --no-dereference a/arch/powerpc/mm/Makefile b/arch/powerpc/mm/Makefile +--- a/arch/powerpc/mm/Makefile 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/mm/Makefile 2024-11-24 20:19:38.120228731 -0500 +@@ -16,7 +16,6 @@ + obj-$(CONFIG_PPC_MM_SLICES) += slice.o + obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o + obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o +-obj-$(CONFIG_HIGHMEM) += highmem.o + obj-$(CONFIG_PPC_COPRO_BASE) += copro_fault.o + obj-$(CONFIG_PPC_PTDUMP) += ptdump/ + obj-$(CONFIG_KASAN) += kasan/ +diff -Naur --no-dereference a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c +--- a/arch/powerpc/mm/mem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/mm/mem.c 2024-11-24 20:19:38.120228731 -0500 +@@ -63,11 +63,6 @@ + unsigned long long memory_limit; + bool init_mem_is_free; + +-#ifdef CONFIG_HIGHMEM +-pte_t *kmap_pte; +-EXPORT_SYMBOL(kmap_pte); +-#endif +- + pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, + unsigned long size, pgprot_t vma_prot) + { +@@ -237,8 +232,6 @@ + + map_kernel_page(PKMAP_BASE, 0, __pgprot(0)); /* XXX gross */ + pkmap_page_table = virt_to_kpte(PKMAP_BASE); +- +- kmap_pte = virt_to_kpte(__fix_to_virt(FIX_KMAP_BEGIN)); + #endif /* CONFIG_HIGHMEM */ + + printk(KERN_DEBUG "Top of RAM: 0x%llx, Total RAM: 0x%llx\n", +diff -Naur --no-dereference a/arch/powerpc/platforms/powernv/opal-kmsg.c b/arch/powerpc/platforms/powernv/opal-kmsg.c +--- a/arch/powerpc/platforms/powernv/opal-kmsg.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/platforms/powernv/opal-kmsg.c 2024-11-24 20:19:38.120228731 -0500 +@@ -20,7 +20,8 @@ + * message, it just ensures that OPAL completely flushes the console buffer. + */ + static void kmsg_dump_opal_console_flush(struct kmsg_dumper *dumper, +- enum kmsg_dump_reason reason) ++ enum kmsg_dump_reason reason, ++ struct kmsg_dumper_iter *iter) + { + /* + * Outside of a panic context the pollers will continue to run, +diff -Naur --no-dereference a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c +--- a/arch/powerpc/platforms/pseries/iommu.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/platforms/pseries/iommu.c 2024-11-24 20:19:38.121228733 -0500 +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -190,7 +191,13 @@ + return ret; + } + +-static DEFINE_PER_CPU(__be64 *, tce_page); ++struct tce_page { ++ __be64 * page; ++ local_lock_t lock; ++}; ++static DEFINE_PER_CPU(struct tce_page, tce_page) = { ++ .lock = INIT_LOCAL_LOCK(lock), ++}; + + static int tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum, + long npages, unsigned long uaddr, +@@ -212,9 +219,10 @@ + direction, attrs); + } + +- local_irq_save(flags); /* to protect tcep and the page behind it */ ++ /* to protect tcep and the page behind it */ ++ local_lock_irqsave(&tce_page.lock, flags); + +- tcep = __this_cpu_read(tce_page); ++ tcep = __this_cpu_read(tce_page.page); + + /* This is safe to do since interrupts are off when we're called + * from iommu_alloc{,_sg}() +@@ -223,12 +231,12 @@ + tcep = (__be64 *)__get_free_page(GFP_ATOMIC); + /* If allocation fails, fall back to the loop implementation */ + if (!tcep) { +- local_irq_restore(flags); ++ local_unlock_irqrestore(&tce_page.lock, flags); + return tce_build_pSeriesLP(tbl->it_index, tcenum, + tbl->it_page_shift, + npages, uaddr, direction, attrs); + } +- __this_cpu_write(tce_page, tcep); ++ __this_cpu_write(tce_page.page, tcep); + } + + rpn = __pa(uaddr) >> TCE_SHIFT; +@@ -258,7 +266,7 @@ + tcenum += limit; + } while (npages > 0 && !rc); + +- local_irq_restore(flags); ++ local_unlock_irqrestore(&tce_page.lock, flags); + + if (unlikely(rc == H_NOT_ENOUGH_RESOURCES)) { + ret = (int)rc; +@@ -429,16 +437,17 @@ + DMA_BIDIRECTIONAL, 0); + } + +- local_irq_disable(); /* to protect tcep and the page behind it */ +- tcep = __this_cpu_read(tce_page); ++ /* to protect tcep and the page behind it */ ++ local_lock_irq(&tce_page.lock); ++ tcep = __this_cpu_read(tce_page.page); + + if (!tcep) { + tcep = (__be64 *)__get_free_page(GFP_ATOMIC); + if (!tcep) { +- local_irq_enable(); ++ local_unlock_irq(&tce_page.lock); + return -ENOMEM; + } +- __this_cpu_write(tce_page, tcep); ++ __this_cpu_write(tce_page.page, tcep); + } + + proto_tce = TCE_PCI_READ | TCE_PCI_WRITE; +@@ -481,7 +490,7 @@ + + /* error cleanup: caller will clear whole range */ + +- local_irq_enable(); ++ local_unlock_irq(&tce_page.lock); + return rc; + } + +diff -Naur --no-dereference a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c +--- a/arch/powerpc/xmon/xmon.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/powerpc/xmon/xmon.c 2024-11-24 20:19:38.121228733 -0500 +@@ -3002,7 +3002,7 @@ + static void + dump_log_buf(void) + { +- struct kmsg_dumper dumper = { .active = 1 }; ++ struct kmsg_dumper_iter iter = { .active = 1 }; + unsigned char buf[128]; + size_t len; + +@@ -3014,9 +3014,9 @@ + catch_memory_errors = 1; + sync(); + +- kmsg_dump_rewind_nolock(&dumper); ++ kmsg_dump_rewind(&iter); + xmon_start_pagination(); +- while (kmsg_dump_get_line_nolock(&dumper, false, buf, sizeof(buf), &len)) { ++ while (kmsg_dump_get_line(&iter, false, buf, sizeof(buf), &len)) { + buf[len] = '\0'; + printf("%s", buf); + } +diff -Naur --no-dereference a/arch/s390/include/asm/spinlock_types.h b/arch/s390/include/asm/spinlock_types.h +--- a/arch/s390/include/asm/spinlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/s390/include/asm/spinlock_types.h 2024-11-24 20:19:38.121228733 -0500 +@@ -2,10 +2,6 @@ + #ifndef __ASM_SPINLOCK_TYPES_H + #define __ASM_SPINLOCK_TYPES_H + +-#ifndef __LINUX_SPINLOCK_TYPES_H +-# error "please don't include this file directly" +-#endif +- + typedef struct { + int lock; + } __attribute__ ((aligned (4))) arch_spinlock_t; +diff -Naur --no-dereference a/arch/s390/include/asm/vtime.h b/arch/s390/include/asm/vtime.h +--- a/arch/s390/include/asm/vtime.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/s390/include/asm/vtime.h 2024-11-24 20:19:38.121228733 -0500 +@@ -2,7 +2,6 @@ + #ifndef _S390_VTIME_H + #define _S390_VTIME_H + +-#define __ARCH_HAS_VTIME_ACCOUNT + #define __ARCH_HAS_VTIME_TASK_SWITCH + + #endif /* _S390_VTIME_H */ +diff -Naur --no-dereference a/arch/s390/Kconfig b/arch/s390/Kconfig +--- a/arch/s390/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/s390/Kconfig 2024-11-24 20:19:38.121228733 -0500 +@@ -183,6 +183,7 @@ + select HAVE_RSEQ + select HAVE_SYSCALL_TRACEPOINTS + select HAVE_VIRT_CPU_ACCOUNTING ++ select HAVE_VIRT_CPU_ACCOUNTING_IDLE + select IOMMU_HELPER if PCI + select IOMMU_SUPPORT if PCI + select MODULES_USE_ELF_RELA +diff -Naur --no-dereference a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c +--- a/arch/s390/kernel/vtime.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/s390/kernel/vtime.c 2024-11-24 20:19:38.121228733 -0500 +@@ -223,35 +223,50 @@ + S390_lowcore.avg_steal_timer = avg_steal; + } + ++static u64 vtime_delta(void) ++{ ++ u64 timer = S390_lowcore.last_update_timer; + -+What: /sys/bus/counter/devices/counterX/signalY/filter_clock_prescaler -+KernelVersion: 5.7 -+Contact: linux-iio@vger.kernel.org -+Description: -+ Filter clock factor for input Signal Y. This prescaler value -+ affects the inputs of both quadrature pair signals. ++ S390_lowcore.last_update_timer = get_vtimer(); + -+What: /sys/bus/counter/devices/counterX/signalY/index_polarity - KernelVersion: 5.2 - Contact: linux-iio@vger.kernel.org - Description: -- Signal data of Signal Y represented as a string. -+ Active level of index input Signal Y; irrelevant in -+ non-synchronous load mode. ++ return timer - S390_lowcore.last_update_timer; ++} + -+What: /sys/bus/counter/devices/counterX/signalY/index_polarity_available -+What: /sys/bus/counter/devices/counterX/signalY/synchronous_mode_available -+KernelVersion: 5.2 -+Contact: linux-iio@vger.kernel.org -+Description: -+ Discrete set of available values for the respective Signal Y -+ configuration are listed in this file. + /* + * Update process times based on virtual cpu times stored by entry.S + * to the lowcore fields user_timer, system_timer & steal_clock. + */ +-void vtime_account_irq_enter(struct task_struct *tsk) ++void vtime_account_kernel(struct task_struct *tsk) + { +- u64 timer; +- +- timer = S390_lowcore.last_update_timer; +- S390_lowcore.last_update_timer = get_vtimer(); +- timer -= S390_lowcore.last_update_timer; ++ u64 delta = vtime_delta(); + +- if ((tsk->flags & PF_VCPU) && (irq_count() == 0)) +- S390_lowcore.guest_timer += timer; +- else if (hardirq_count()) +- S390_lowcore.hardirq_timer += timer; +- else if (in_serving_softirq()) +- S390_lowcore.softirq_timer += timer; ++ if (tsk->flags & PF_VCPU) ++ S390_lowcore.guest_timer += delta; + else +- S390_lowcore.system_timer += timer; ++ S390_lowcore.system_timer += delta; - What: /sys/bus/counter/devices/counterX/signalY/name - KernelVersion: 5.2 -@@ -228,3 +327,66 @@ - Read-only attribute that indicates the device-specific name of - Signal Y. If possible, this should match the name of the - respective signal as it appears in the device datasheet. -+ -+What: /sys/bus/counter/devices/counterX/signalY/signal -+KernelVersion: 5.2 -+Contact: linux-iio@vger.kernel.org -+Description: -+ Signal level state of Signal Y. The following signal level -+ states are available: +- virt_timer_forward(timer); ++ virt_timer_forward(delta); + } +-EXPORT_SYMBOL_GPL(vtime_account_irq_enter); +- +-void vtime_account_kernel(struct task_struct *tsk) +-__attribute__((alias("vtime_account_irq_enter"))); + EXPORT_SYMBOL_GPL(vtime_account_kernel); + ++void vtime_account_softirq(struct task_struct *tsk) ++{ ++ u64 delta = vtime_delta(); + -+ low: -+ Low level state. ++ S390_lowcore.softirq_timer += delta; + -+ high: -+ High level state. ++ virt_timer_forward(delta); ++} + -+What: /sys/bus/counter/devices/counterX/signalY/synchronous_mode -+KernelVersion: 5.2 -+Contact: linux-iio@vger.kernel.org -+Description: -+ Configure the counter associated with Signal Y for -+ non-synchronous or synchronous load mode. Synchronous load mode -+ cannot be selected in non-quadrature (Pulse-Direction) clock -+ mode. ++void vtime_account_hardirq(struct task_struct *tsk) ++{ ++ u64 delta = vtime_delta(); + -+ non-synchronous: -+ A logic low level is the active level at this index -+ input. The index function (as enabled via preset_enable) -+ is performed directly on the active level of the index -+ input. ++ S390_lowcore.hardirq_timer += delta; + -+ synchronous: -+ Intended for interfacing with encoder Index output in -+ quadrature clock mode. The active level is configured -+ via index_polarity. The index function (as enabled via -+ preset_enable) is performed synchronously with the -+ quadrature clock on the active level of the index input. ++ virt_timer_forward(delta); ++} ++ + /* + * Sorted add to a list. List is linear searched until first bigger + * element is found. +diff -Naur --no-dereference a/arch/sh/include/asm/fixmap.h b/arch/sh/include/asm/fixmap.h +--- a/arch/sh/include/asm/fixmap.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sh/include/asm/fixmap.h 2024-11-24 20:19:38.121228733 -0500 +@@ -13,9 +13,6 @@ + #include + #include + #include +-#ifdef CONFIG_HIGHMEM +-#include +-#endif + + /* + * Here we define all the compile-time 'special' virtual +@@ -53,11 +50,6 @@ + FIX_CMAP_BEGIN, + FIX_CMAP_END = FIX_CMAP_BEGIN + (FIX_N_COLOURS * NR_CPUS) - 1, + +-#ifdef CONFIG_HIGHMEM +- FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ +- FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * NR_CPUS) - 1, +-#endif +- + #ifdef CONFIG_IOREMAP_FIXED + /* + * FIX_IOREMAP entries are useful for mapping physical address +diff -Naur --no-dereference a/arch/sh/include/asm/hardirq.h b/arch/sh/include/asm/hardirq.h +--- a/arch/sh/include/asm/hardirq.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sh/include/asm/hardirq.h 2024-11-24 20:19:38.121228733 -0500 +@@ -2,16 +2,10 @@ + #ifndef __ASM_SH_HARDIRQ_H + #define __ASM_SH_HARDIRQ_H + +-#include +-#include +- +-typedef struct { +- unsigned int __softirq_pending; +- unsigned int __nmi_count; /* arch dependent */ +-} ____cacheline_aligned irq_cpustat_t; +- +-#include /* Standard mappings for irq_cpustat_t above */ +- + extern void ack_bad_irq(unsigned int irq); ++#define ack_bad_irq ack_bad_irq ++#define ARCH_WANTS_NMI_IRQSTAT ++ ++#include + + #endif /* __ASM_SH_HARDIRQ_H */ +diff -Naur --no-dereference a/arch/sh/include/asm/kmap_types.h b/arch/sh/include/asm/kmap_types.h +--- a/arch/sh/include/asm/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sh/include/asm/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,15 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef __SH_KMAP_TYPES_H +-#define __SH_KMAP_TYPES_H +- +-/* Dummy header just to define km_type. */ +- +-#ifdef CONFIG_DEBUG_HIGHMEM +-#define __WITH_KM_FENCE +-#endif +- +-#include +- +-#undef __WITH_KM_FENCE +- +-#endif +diff -Naur --no-dereference a/arch/sh/include/asm/spinlock_types.h b/arch/sh/include/asm/spinlock_types.h +--- a/arch/sh/include/asm/spinlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sh/include/asm/spinlock_types.h 2024-11-24 20:19:38.121228733 -0500 +@@ -2,10 +2,6 @@ + #ifndef __ASM_SH_SPINLOCK_TYPES_H + #define __ASM_SH_SPINLOCK_TYPES_H + +-#ifndef __LINUX_SPINLOCK_TYPES_H +-# error "please don't include this file directly" +-#endif +- + typedef struct { + volatile unsigned int lock; + } arch_spinlock_t; +diff -Naur --no-dereference a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c +--- a/arch/sh/kernel/irq.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sh/kernel/irq.c 2024-11-24 20:19:38.121228733 -0500 +@@ -44,7 +44,7 @@ + + seq_printf(p, "%*s: ", prec, "NMI"); + for_each_online_cpu(j) +- seq_printf(p, "%10u ", nmi_count(j)); ++ seq_printf(p, "%10u ", per_cpu(irq_stat.__nmi_count, j)); + seq_printf(p, " Non-maskable interrupts\n"); + + seq_printf(p, "%*s: %10u\n", prec, "ERR", atomic_read(&irq_err_count)); +@@ -148,6 +148,7 @@ + hardirq_ctx[cpu] = NULL; + } + ++#ifndef CONFIG_PREEMPT_RT + void do_softirq_own_stack(void) + { + struct thread_info *curctx; +@@ -175,6 +176,7 @@ + "r5", "r6", "r7", "r8", "r9", "r15", "t", "pr" + ); + } ++#endif + #else + static inline void handle_one_irq(unsigned int irq) + { +diff -Naur --no-dereference a/arch/sh/kernel/traps.c b/arch/sh/kernel/traps.c +--- a/arch/sh/kernel/traps.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sh/kernel/traps.c 2024-11-24 20:19:38.121228733 -0500 +@@ -186,7 +186,7 @@ + arch_ftrace_nmi_enter(); + + nmi_enter(); +- nmi_count(cpu)++; ++ this_cpu_inc(irq_stat.__nmi_count); + + switch (notify_die(DIE_NMI, "NMI", regs, 0, vec & 0xff, SIGINT)) { + case NOTIFY_OK: +diff -Naur --no-dereference a/arch/sh/mm/init.c b/arch/sh/mm/init.c +--- a/arch/sh/mm/init.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sh/mm/init.c 2024-11-24 20:19:38.121228733 -0500 +@@ -362,9 +362,6 @@ + mem_init_print_info(NULL); + pr_info("virtual kernel memory layout:\n" + " fixmap : 0x%08lx - 0x%08lx (%4ld kB)\n" +-#ifdef CONFIG_HIGHMEM +- " pkmap : 0x%08lx - 0x%08lx (%4ld kB)\n" +-#endif + " vmalloc : 0x%08lx - 0x%08lx (%4ld MB)\n" + " lowmem : 0x%08lx - 0x%08lx (%4ld MB) (cached)\n" + #ifdef CONFIG_UNCACHED_MAPPING +@@ -376,11 +373,6 @@ + FIXADDR_START, FIXADDR_TOP, + (FIXADDR_TOP - FIXADDR_START) >> 10, + +-#ifdef CONFIG_HIGHMEM +- PKMAP_BASE, PKMAP_BASE+LAST_PKMAP*PAGE_SIZE, +- (LAST_PKMAP*PAGE_SIZE) >> 10, +-#endif +- + (unsigned long)VMALLOC_START, VMALLOC_END, + (VMALLOC_END - VMALLOC_START) >> 20, + +diff -Naur --no-dereference a/arch/sparc/include/asm/highmem.h b/arch/sparc/include/asm/highmem.h +--- a/arch/sparc/include/asm/highmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sparc/include/asm/highmem.h 2024-11-24 20:19:38.122228735 -0500 +@@ -24,7 +24,6 @@ + #include + #include + #include +-#include + #include + + /* declarations for highmem.c */ +@@ -33,8 +32,6 @@ + #define kmap_prot __pgprot(SRMMU_ET_PTE | SRMMU_PRIV | SRMMU_CACHE) + extern pte_t *pkmap_page_table; + +-void kmap_init(void) __init; +- + /* + * Right now we initialize only a single pte table. It can be extended + * easily, subsequent pte tables have to be allocated in one physical +@@ -53,6 +50,11 @@ + + #define flush_cache_kmaps() flush_cache_all() + ++/* FIXME: Use __flush_tlb_one(vaddr) instead of flush_cache_all() -- Anton */ ++#define arch_kmap_local_post_map(vaddr, pteval) flush_cache_all() ++#define arch_kmap_local_post_unmap(vaddr) flush_cache_all() ++ ++ + #endif /* __KERNEL__ */ + + #endif /* _ASM_HIGHMEM_H */ +diff -Naur --no-dereference a/arch/sparc/include/asm/kmap_types.h b/arch/sparc/include/asm/kmap_types.h +--- a/arch/sparc/include/asm/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sparc/include/asm/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,11 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef _ASM_KMAP_TYPES_H +-#define _ASM_KMAP_TYPES_H +- +-/* Dummy header just to define km_type. None of this +- * is actually used on sparc. -DaveM +- */ +- +-#include +- +-#endif +diff -Naur --no-dereference a/arch/sparc/include/asm/vaddrs.h b/arch/sparc/include/asm/vaddrs.h +--- a/arch/sparc/include/asm/vaddrs.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sparc/include/asm/vaddrs.h 2024-11-24 20:19:38.122228735 -0500 +@@ -32,13 +32,13 @@ + #define SRMMU_NOCACHE_ALCRATIO 64 /* 256 pages per 64MB of system RAM */ + + #ifndef __ASSEMBLY__ +-#include ++#include + + enum fixed_addresses { + FIX_HOLE, + #ifdef CONFIG_HIGHMEM + FIX_KMAP_BEGIN, +- FIX_KMAP_END = (KM_TYPE_NR * NR_CPUS), ++ FIX_KMAP_END = (KM_MAX_IDX * NR_CPUS), + #endif + __end_of_fixed_addresses + }; +diff -Naur --no-dereference a/arch/sparc/include/uapi/asm/socket.h b/arch/sparc/include/uapi/asm/socket.h +--- a/arch/sparc/include/uapi/asm/socket.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sparc/include/uapi/asm/socket.h 2024-11-24 20:19:38.122228735 -0500 +@@ -142,4 +142,10 @@ + + #endif + ++#define SO_REDUNDANT 0x0053 ++#define SCM_REDUNDANT SO_REDUNDANT ++ ++#define SO_RED_TIMESTAMPING 0x0054 ++#define SCM_RED_TIMESTAMPING SO_RED_TIMESTAMPING ++ + #endif /* _ASM_SOCKET_H */ +diff -Naur --no-dereference a/arch/sparc/Kconfig b/arch/sparc/Kconfig +--- a/arch/sparc/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sparc/Kconfig 2024-11-24 20:19:38.122228735 -0500 +@@ -139,6 +139,7 @@ + config HIGHMEM + bool + default y if SPARC32 ++ select KMAP_LOCAL + + config ZONE_DMA + bool +diff -Naur --no-dereference a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c +--- a/arch/sparc/kernel/irq_64.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sparc/kernel/irq_64.c 2024-11-24 20:19:38.122228735 -0500 +@@ -854,6 +854,7 @@ + set_irq_regs(old_regs); + } + ++#ifndef CONFIG_PREEMPT_RT + void do_softirq_own_stack(void) + { + void *orig_sp, *sp = softirq_stack[smp_processor_id()]; +@@ -868,6 +869,7 @@ + __asm__ __volatile__("mov %0, %%sp" + : : "r" (orig_sp)); + } ++#endif + + #ifdef CONFIG_HOTPLUG_CPU + void fixup_irqs(void) +diff -Naur --no-dereference a/arch/sparc/mm/highmem.c b/arch/sparc/mm/highmem.c +--- a/arch/sparc/mm/highmem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sparc/mm/highmem.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1,115 +0,0 @@ +-// SPDX-License-Identifier: GPL-2.0 +-/* +- * highmem.c: virtual kernel memory mappings for high memory +- * +- * Provides kernel-static versions of atomic kmap functions originally +- * found as inlines in include/asm-sparc/highmem.h. These became +- * needed as kmap_atomic() and kunmap_atomic() started getting +- * called from within modules. +- * -- Tomas Szepe , September 2002 +- * +- * But kmap_atomic() and kunmap_atomic() cannot be inlined in +- * modules because they are loaded with btfixup-ped functions. +- */ +- +-/* +- * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap +- * gives a more generic (and caching) interface. But kmap_atomic can +- * be used in IRQ contexts, so in some (very limited) cases we need it. +- * +- * XXX This is an old text. Actually, it's good to use atomic kmaps, +- * provided you remember that they are atomic and not try to sleep +- * with a kmap taken, much like a spinlock. Non-atomic kmaps are +- * shared by CPUs, and so precious, and establishing them requires IPI. +- * Atomic kmaps are lightweight and we may have NCPUS more of them. +- */ +-#include +-#include +-#include +- +-#include +-#include +-#include +- +-static pte_t *kmap_pte; +- +-void __init kmap_init(void) +-{ +- unsigned long address = __fix_to_virt(FIX_KMAP_BEGIN); +- +- /* cache the first kmap pte */ +- kmap_pte = virt_to_kpte(address); +-} +- +-void *kmap_atomic_high_prot(struct page *page, pgprot_t prot) +-{ +- unsigned long vaddr; +- long idx, type; +- +- type = kmap_atomic_idx_push(); +- idx = type + KM_TYPE_NR*smp_processor_id(); +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +- +-/* XXX Fix - Anton */ +-#if 0 +- __flush_cache_one(vaddr); +-#else +- flush_cache_all(); +-#endif +- +-#ifdef CONFIG_DEBUG_HIGHMEM +- BUG_ON(!pte_none(*(kmap_pte-idx))); +-#endif +- set_pte(kmap_pte-idx, mk_pte(page, prot)); +-/* XXX Fix - Anton */ +-#if 0 +- __flush_tlb_one(vaddr); +-#else +- flush_tlb_all(); +-#endif +- +- return (void*) vaddr; +-} +-EXPORT_SYMBOL(kmap_atomic_high_prot); +- +-void kunmap_atomic_high(void *kvaddr) +-{ +- unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; +- int type; +- +- if (vaddr < FIXADDR_START) +- return; +- +- type = kmap_atomic_idx(); +- +-#ifdef CONFIG_DEBUG_HIGHMEM +- { +- unsigned long idx; +- +- idx = type + KM_TYPE_NR * smp_processor_id(); +- BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN+idx)); +- +- /* XXX Fix - Anton */ +-#if 0 +- __flush_cache_one(vaddr); +-#else +- flush_cache_all(); +-#endif +- +- /* +- * force other mappings to Oops if they'll try to access +- * this pte without first remap it +- */ +- pte_clear(&init_mm, vaddr, kmap_pte-idx); +- /* XXX Fix - Anton */ +-#if 0 +- __flush_tlb_one(vaddr); +-#else +- flush_tlb_all(); +-#endif +- } +-#endif +- +- kmap_atomic_idx_pop(); +-} +-EXPORT_SYMBOL(kunmap_atomic_high); +diff -Naur --no-dereference a/arch/sparc/mm/Makefile b/arch/sparc/mm/Makefile +--- a/arch/sparc/mm/Makefile 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sparc/mm/Makefile 2024-11-24 20:19:38.122228735 -0500 +@@ -15,6 +15,3 @@ + + # Only used by sparc64 + obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o +- +-# Only used by sparc32 +-obj-$(CONFIG_HIGHMEM) += highmem.o +diff -Naur --no-dereference a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c +--- a/arch/sparc/mm/srmmu.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/sparc/mm/srmmu.c 2024-11-24 20:19:38.122228735 -0500 +@@ -971,8 +971,6 @@ + + sparc_context_init(num_contexts); + +- kmap_init(); +- + { + unsigned long max_zone_pfn[MAX_NR_ZONES] = { 0 }; + +diff -Naur --no-dereference a/arch/um/include/asm/fixmap.h b/arch/um/include/asm/fixmap.h +--- a/arch/um/include/asm/fixmap.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/um/include/asm/fixmap.h 2024-11-24 20:19:38.122228735 -0500 +@@ -3,7 +3,6 @@ + #define __UM_FIXMAP_H + + #include +-#include + #include + #include + #include +diff -Naur --no-dereference a/arch/um/include/asm/hardirq.h b/arch/um/include/asm/hardirq.h +--- a/arch/um/include/asm/hardirq.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/um/include/asm/hardirq.h 2024-11-24 20:19:38.122228735 -0500 +@@ -2,22 +2,7 @@ + #ifndef __ASM_UM_HARDIRQ_H + #define __ASM_UM_HARDIRQ_H + +-#include +-#include +- +-typedef struct { +- unsigned int __softirq_pending; +-} ____cacheline_aligned irq_cpustat_t; +- +-#include /* Standard mappings for irq_cpustat_t above */ +-#include +- +-#ifndef ack_bad_irq +-static inline void ack_bad_irq(unsigned int irq) +-{ +- printk(KERN_CRIT "unexpected IRQ trap at vector %02x\n", irq); +-} +-#endif ++#include + + #define __ARCH_IRQ_EXIT_IRQS_DISABLED 1 + +diff -Naur --no-dereference a/arch/um/include/asm/kmap_types.h b/arch/um/include/asm/kmap_types.h +--- a/arch/um/include/asm/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/um/include/asm/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,13 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-/* +- * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) +- */ +- +-#ifndef __UM_KMAP_TYPES_H +-#define __UM_KMAP_TYPES_H +- +-/* No more #include "asm/arch/kmap_types.h" ! */ +- +-#define KM_TYPE_NR 14 +- +-#endif +diff -Naur --no-dereference a/arch/um/kernel/kmsg_dump.c b/arch/um/kernel/kmsg_dump.c +--- a/arch/um/kernel/kmsg_dump.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/um/kernel/kmsg_dump.c 2024-11-24 20:19:38.122228735 -0500 +@@ -1,15 +1,19 @@ + // SPDX-License-Identifier: GPL-2.0 + #include ++#include + #include + #include + #include + #include + + static void kmsg_dumper_stdout(struct kmsg_dumper *dumper, +- enum kmsg_dump_reason reason) ++ enum kmsg_dump_reason reason, ++ struct kmsg_dumper_iter *iter) + { ++ static DEFINE_SPINLOCK(lock); + static char line[1024]; + struct console *con; ++ unsigned long flags; + size_t len = 0; + + /* only dump kmsg when no console is available */ +@@ -24,11 +28,16 @@ + if (con) + return; + ++ if (!spin_trylock_irqsave(&lock, flags)) ++ return; ++ + printf("kmsg_dump:\n"); +- while (kmsg_dump_get_line(dumper, true, line, sizeof(line), &len)) { ++ while (kmsg_dump_get_line(iter, true, line, sizeof(line), &len)) { + line[len] = '\0'; + printf("%s", line); + } ++ ++ spin_unlock_irqrestore(&lock, flags); + } + + static struct kmsg_dumper kmsg_dumper = { +diff -Naur --no-dereference a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c +--- a/arch/x86/crypto/aesni-intel_glue.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/crypto/aesni-intel_glue.c 2024-11-24 20:19:38.122228735 -0500 +@@ -379,14 +379,14 @@ + + err = skcipher_walk_virt(&walk, req, true); + +- kernel_fpu_begin(); + while ((nbytes = walk.nbytes)) { ++ kernel_fpu_begin(); + aesni_ecb_enc(ctx, walk.dst.virt.addr, walk.src.virt.addr, + nbytes & AES_BLOCK_MASK); ++ kernel_fpu_end(); + nbytes &= AES_BLOCK_SIZE - 1; + err = skcipher_walk_done(&walk, nbytes); + } +- kernel_fpu_end(); + + return err; + } +@@ -401,14 +401,14 @@ + + err = skcipher_walk_virt(&walk, req, true); + +- kernel_fpu_begin(); + while ((nbytes = walk.nbytes)) { ++ kernel_fpu_begin(); + aesni_ecb_dec(ctx, walk.dst.virt.addr, walk.src.virt.addr, + nbytes & AES_BLOCK_MASK); ++ kernel_fpu_end(); + nbytes &= AES_BLOCK_SIZE - 1; + err = skcipher_walk_done(&walk, nbytes); + } +- kernel_fpu_end(); + + return err; + } +@@ -423,14 +423,14 @@ + + err = skcipher_walk_virt(&walk, req, true); + +- kernel_fpu_begin(); + while ((nbytes = walk.nbytes)) { ++ kernel_fpu_begin(); + aesni_cbc_enc(ctx, walk.dst.virt.addr, walk.src.virt.addr, + nbytes & AES_BLOCK_MASK, walk.iv); ++ kernel_fpu_end(); + nbytes &= AES_BLOCK_SIZE - 1; + err = skcipher_walk_done(&walk, nbytes); + } +- kernel_fpu_end(); + + return err; + } +@@ -445,14 +445,14 @@ + + err = skcipher_walk_virt(&walk, req, true); + +- kernel_fpu_begin(); + while ((nbytes = walk.nbytes)) { ++ kernel_fpu_begin(); + aesni_cbc_dec(ctx, walk.dst.virt.addr, walk.src.virt.addr, + nbytes & AES_BLOCK_MASK, walk.iv); ++ kernel_fpu_end(); + nbytes &= AES_BLOCK_SIZE - 1; + err = skcipher_walk_done(&walk, nbytes); + } +- kernel_fpu_end(); + + return err; + } +@@ -500,18 +500,20 @@ + + err = skcipher_walk_virt(&walk, req, true); + +- kernel_fpu_begin(); + while ((nbytes = walk.nbytes) >= AES_BLOCK_SIZE) { ++ kernel_fpu_begin(); + aesni_ctr_enc_tfm(ctx, walk.dst.virt.addr, walk.src.virt.addr, + nbytes & AES_BLOCK_MASK, walk.iv); ++ kernel_fpu_end(); + nbytes &= AES_BLOCK_SIZE - 1; + err = skcipher_walk_done(&walk, nbytes); + } + if (walk.nbytes) { ++ kernel_fpu_begin(); + ctr_crypt_final(ctx, &walk); ++ kernel_fpu_end(); + err = skcipher_walk_done(&walk, 0); + } +- kernel_fpu_end(); + + return err; + } +diff -Naur --no-dereference a/arch/x86/crypto/cast5_avx_glue.c b/arch/x86/crypto/cast5_avx_glue.c +--- a/arch/x86/crypto/cast5_avx_glue.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/crypto/cast5_avx_glue.c 2024-11-24 20:19:38.123228737 -0500 +@@ -46,7 +46,7 @@ + + static int ecb_crypt(struct skcipher_request *req, bool enc) + { +- bool fpu_enabled = false; ++ bool fpu_enabled; + struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); + struct cast5_ctx *ctx = crypto_skcipher_ctx(tfm); + struct skcipher_walk walk; +@@ -61,7 +61,7 @@ + u8 *wsrc = walk.src.virt.addr; + u8 *wdst = walk.dst.virt.addr; + +- fpu_enabled = cast5_fpu_begin(fpu_enabled, &walk, nbytes); ++ fpu_enabled = cast5_fpu_begin(false, &walk, nbytes); + + /* Process multi-block batch */ + if (nbytes >= bsize * CAST5_PARALLEL_BLOCKS) { +@@ -90,10 +90,9 @@ + } while (nbytes >= bsize); + + done: ++ cast5_fpu_end(fpu_enabled); + err = skcipher_walk_done(&walk, nbytes); + } +- +- cast5_fpu_end(fpu_enabled); + return err; + } + +@@ -197,7 +196,7 @@ + { + struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); + struct cast5_ctx *ctx = crypto_skcipher_ctx(tfm); +- bool fpu_enabled = false; ++ bool fpu_enabled; + struct skcipher_walk walk; + unsigned int nbytes; + int err; +@@ -205,12 +204,11 @@ + err = skcipher_walk_virt(&walk, req, false); + + while ((nbytes = walk.nbytes)) { +- fpu_enabled = cast5_fpu_begin(fpu_enabled, &walk, nbytes); ++ fpu_enabled = cast5_fpu_begin(false, &walk, nbytes); + nbytes = __cbc_decrypt(ctx, &walk); ++ cast5_fpu_end(fpu_enabled); + err = skcipher_walk_done(&walk, nbytes); + } +- +- cast5_fpu_end(fpu_enabled); + return err; + } + +@@ -277,7 +275,7 @@ + { + struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); + struct cast5_ctx *ctx = crypto_skcipher_ctx(tfm); +- bool fpu_enabled = false; ++ bool fpu_enabled; + struct skcipher_walk walk; + unsigned int nbytes; + int err; +@@ -285,13 +283,12 @@ + err = skcipher_walk_virt(&walk, req, false); + + while ((nbytes = walk.nbytes) >= CAST5_BLOCK_SIZE) { +- fpu_enabled = cast5_fpu_begin(fpu_enabled, &walk, nbytes); ++ fpu_enabled = cast5_fpu_begin(false, &walk, nbytes); + nbytes = __ctr_crypt(&walk, ctx); ++ cast5_fpu_end(fpu_enabled); + err = skcipher_walk_done(&walk, nbytes); + } + +- cast5_fpu_end(fpu_enabled); +- + if (walk.nbytes) { + ctr_crypt_final(&walk, ctx); + err = skcipher_walk_done(&walk, 0); +diff -Naur --no-dereference a/arch/x86/crypto/glue_helper.c b/arch/x86/crypto/glue_helper.c +--- a/arch/x86/crypto/glue_helper.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/crypto/glue_helper.c 2024-11-24 20:19:38.123228737 -0500 +@@ -24,7 +24,7 @@ + void *ctx = crypto_skcipher_ctx(crypto_skcipher_reqtfm(req)); + const unsigned int bsize = 128 / 8; + struct skcipher_walk walk; +- bool fpu_enabled = false; ++ bool fpu_enabled; + unsigned int nbytes; + int err; + +@@ -37,7 +37,7 @@ + unsigned int i; + + fpu_enabled = glue_fpu_begin(bsize, gctx->fpu_blocks_limit, +- &walk, fpu_enabled, nbytes); ++ &walk, false, nbytes); + for (i = 0; i < gctx->num_funcs; i++) { + func_bytes = bsize * gctx->funcs[i].num_blocks; + +@@ -55,10 +55,9 @@ + if (nbytes < bsize) + break; + } ++ glue_fpu_end(fpu_enabled); + err = skcipher_walk_done(&walk, nbytes); + } +- +- glue_fpu_end(fpu_enabled); + return err; + } + EXPORT_SYMBOL_GPL(glue_ecb_req_128bit); +@@ -101,7 +100,7 @@ + void *ctx = crypto_skcipher_ctx(crypto_skcipher_reqtfm(req)); + const unsigned int bsize = 128 / 8; + struct skcipher_walk walk; +- bool fpu_enabled = false; ++ bool fpu_enabled; + unsigned int nbytes; + int err; + +@@ -115,7 +114,7 @@ + u128 last_iv; + + fpu_enabled = glue_fpu_begin(bsize, gctx->fpu_blocks_limit, +- &walk, fpu_enabled, nbytes); ++ &walk, false, nbytes); + /* Start of the last block. */ + src += nbytes / bsize - 1; + dst += nbytes / bsize - 1; +@@ -148,10 +147,10 @@ + done: + u128_xor(dst, dst, (u128 *)walk.iv); + *(u128 *)walk.iv = last_iv; ++ glue_fpu_end(fpu_enabled); + err = skcipher_walk_done(&walk, nbytes); + } + +- glue_fpu_end(fpu_enabled); + return err; + } + EXPORT_SYMBOL_GPL(glue_cbc_decrypt_req_128bit); +@@ -162,7 +161,7 @@ + void *ctx = crypto_skcipher_ctx(crypto_skcipher_reqtfm(req)); + const unsigned int bsize = 128 / 8; + struct skcipher_walk walk; +- bool fpu_enabled = false; ++ bool fpu_enabled; + unsigned int nbytes; + int err; + +@@ -176,7 +175,7 @@ + le128 ctrblk; + + fpu_enabled = glue_fpu_begin(bsize, gctx->fpu_blocks_limit, +- &walk, fpu_enabled, nbytes); ++ &walk, false, nbytes); + + be128_to_le128(&ctrblk, (be128 *)walk.iv); + +@@ -202,11 +201,10 @@ + } + + le128_to_be128((be128 *)walk.iv, &ctrblk); ++ glue_fpu_end(fpu_enabled); + err = skcipher_walk_done(&walk, nbytes); + } + +- glue_fpu_end(fpu_enabled); +- + if (nbytes) { + le128 ctrblk; + u128 tmp; +@@ -306,8 +304,14 @@ + tweak_fn(tweak_ctx, walk.iv, walk.iv); + + while (nbytes) { ++ fpu_enabled = glue_fpu_begin(bsize, gctx->fpu_blocks_limit, ++ &walk, fpu_enabled, ++ nbytes < bsize ? bsize : nbytes); + nbytes = __glue_xts_req_128bit(gctx, crypt_ctx, &walk); + ++ glue_fpu_end(fpu_enabled); ++ fpu_enabled = false; ++ + err = skcipher_walk_done(&walk, nbytes); + nbytes = walk.nbytes; + } +diff -Naur --no-dereference a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h +--- a/arch/x86/include/asm/fixmap.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/include/asm/fixmap.h 2024-11-24 20:19:38.123228737 -0500 +@@ -31,7 +31,7 @@ + #include + #ifdef CONFIG_X86_32 + #include +-#include ++#include + #else + #include + #endif +@@ -94,7 +94,7 @@ + #endif + #ifdef CONFIG_X86_32 + FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ +- FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, ++ FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_MAX_IDX * NR_CPUS) - 1, + #ifdef CONFIG_PCI_MMCONFIG + FIX_PCIE_MCFG, + #endif +@@ -151,7 +151,6 @@ + + extern int fixmaps_set; + +-extern pte_t *kmap_pte; + extern pte_t *pkmap_page_table; + + void __native_set_fixmap(enum fixed_addresses idx, pte_t pte); +diff -Naur --no-dereference a/arch/x86/include/asm/fpu/api.h b/arch/x86/include/asm/fpu/api.h +--- a/arch/x86/include/asm/fpu/api.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/include/asm/fpu/api.h 2024-11-24 20:19:38.123228737 -0500 +@@ -28,6 +28,7 @@ + extern void kernel_fpu_end(void); + extern bool irq_fpu_usable(void); + extern void fpregs_mark_activate(void); ++extern void kernel_fpu_resched(void); + + /* Code that is unaware of kernel_fpu_begin_mask() can use this */ + static inline void kernel_fpu_begin(void) +@@ -40,17 +41,32 @@ + * A context switch will (and softirq might) save CPU's FPU registers to + * fpu->state and set TIF_NEED_FPU_LOAD leaving CPU's FPU registers in + * a random state. ++ * ++ * local_bh_disable() protects against both preemption and soft interrupts ++ * on !RT kernels. ++ * ++ * On RT kernels local_bh_disable() is not sufficient because it only ++ * serializes soft interrupt related sections via a local lock, but stays ++ * preemptible. Disabling preemption is the right choice here as bottom ++ * half processing is always in thread context on RT kernels so it ++ * implicitly prevents bottom half processing as well. ++ * ++ * Disabling preemption also serializes against kernel_fpu_begin(). + */ + static inline void fpregs_lock(void) + { +- preempt_disable(); +- local_bh_disable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_bh_disable(); ++ else ++ preempt_disable(); + } + + static inline void fpregs_unlock(void) + { +- local_bh_enable(); +- preempt_enable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_bh_enable(); ++ else ++ preempt_enable(); + } + + #ifdef CONFIG_X86_DEBUG_FPU +diff -Naur --no-dereference a/arch/x86/include/asm/highmem.h b/arch/x86/include/asm/highmem.h +--- a/arch/x86/include/asm/highmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/include/asm/highmem.h 2024-11-24 20:19:38.123228737 -0500 +@@ -23,7 +23,6 @@ + + #include + #include +-#include + #include + #include + #include +@@ -58,11 +57,17 @@ + #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) + #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) + +-void *kmap_atomic_pfn(unsigned long pfn); +-void *kmap_atomic_prot_pfn(unsigned long pfn, pgprot_t prot); +- + #define flush_cache_kmaps() do { } while (0) + ++#define arch_kmap_local_post_map(vaddr, pteval) \ ++ arch_flush_lazy_mmu_mode() ++ ++#define arch_kmap_local_post_unmap(vaddr) \ ++ do { \ ++ flush_tlb_one_kernel((vaddr)); \ ++ arch_flush_lazy_mmu_mode(); \ ++ } while (0) ++ + extern void add_highpages_with_active_regions(int nid, unsigned long start_pfn, + unsigned long end_pfn); + +diff -Naur --no-dereference a/arch/x86/include/asm/iomap.h b/arch/x86/include/asm/iomap.h +--- a/arch/x86/include/asm/iomap.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/include/asm/iomap.h 2024-11-24 20:19:38.123228737 -0500 +@@ -9,19 +9,14 @@ + #include + #include + #include ++#include + #include + #include + +-void __iomem * +-iomap_atomic_prot_pfn(unsigned long pfn, pgprot_t prot); ++void __iomem *__iomap_local_pfn_prot(unsigned long pfn, pgprot_t prot); + +-void +-iounmap_atomic(void __iomem *kvaddr); ++int iomap_create_wc(resource_size_t base, unsigned long size, pgprot_t *prot); + +-int +-iomap_create_wc(resource_size_t base, unsigned long size, pgprot_t *prot); +- +-void +-iomap_free(resource_size_t base, unsigned long size); ++void iomap_free(resource_size_t base, unsigned long size); + + #endif /* _ASM_X86_IOMAP_H */ +diff -Naur --no-dereference a/arch/x86/include/asm/kmap_types.h b/arch/x86/include/asm/kmap_types.h +--- a/arch/x86/include/asm/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/include/asm/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,13 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef _ASM_X86_KMAP_TYPES_H +-#define _ASM_X86_KMAP_TYPES_H +- +-#if defined(CONFIG_X86_32) && defined(CONFIG_DEBUG_HIGHMEM) +-#define __WITH_KM_FENCE +-#endif +- +-#include +- +-#undef __WITH_KM_FENCE +- +-#endif /* _ASM_X86_KMAP_TYPES_H */ +diff -Naur --no-dereference a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h +--- a/arch/x86/include/asm/paravirt_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/include/asm/paravirt_types.h 2024-11-24 20:19:38.123228737 -0500 +@@ -41,7 +41,6 @@ + #ifndef __ASSEMBLY__ + + #include +-#include + #include + #include + +diff -Naur --no-dereference a/arch/x86/include/asm/preempt.h b/arch/x86/include/asm/preempt.h +--- a/arch/x86/include/asm/preempt.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/include/asm/preempt.h 2024-11-24 20:19:38.123228737 -0500 +@@ -89,20 +89,54 @@ + * a decrement which hits zero means we have no preempt_count and should + * reschedule. + */ +-static __always_inline bool __preempt_count_dec_and_test(void) ++static __always_inline bool ____preempt_count_dec_and_test(void) + { + return GEN_UNARY_RMWcc("decl", __preempt_count, e, __percpu_arg([var])); + } + ++static __always_inline bool __preempt_count_dec_and_test(void) ++{ ++ if (____preempt_count_dec_and_test()) ++ return true; ++#ifdef CONFIG_PREEMPT_LAZY ++ if (preempt_count()) ++ return false; ++ if (current_thread_info()->preempt_lazy_count) ++ return false; ++ return test_thread_flag(TIF_NEED_RESCHED_LAZY); ++#else ++ return false; ++#endif ++} ++ + /* + * Returns true when we need to resched and can (barring IRQ state). + */ + static __always_inline bool should_resched(int preempt_offset) + { ++#ifdef CONFIG_PREEMPT_LAZY ++ u32 tmp; ++ tmp = raw_cpu_read_4(__preempt_count); ++ if (tmp == preempt_offset) ++ return true; ++ ++ /* preempt count == 0 ? */ ++ tmp &= ~PREEMPT_NEED_RESCHED; ++ if (tmp != preempt_offset) ++ return false; ++ /* XXX PREEMPT_LOCK_OFFSET */ ++ if (current_thread_info()->preempt_lazy_count) ++ return false; ++ return test_thread_flag(TIF_NEED_RESCHED_LAZY); ++#else + return unlikely(raw_cpu_read_4(__preempt_count) == preempt_offset); ++#endif + } + + #ifdef CONFIG_PREEMPTION ++#ifdef CONFIG_PREEMPT_RT ++ extern void preempt_schedule_lock(void); ++#endif + extern asmlinkage void preempt_schedule_thunk(void); + # define __preempt_schedule() \ + asm volatile ("call preempt_schedule_thunk" : ASM_CALL_CONSTRAINT) +diff -Naur --no-dereference a/arch/x86/include/asm/signal.h b/arch/x86/include/asm/signal.h +--- a/arch/x86/include/asm/signal.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/include/asm/signal.h 2024-11-24 20:19:38.123228737 -0500 +@@ -28,6 +28,19 @@ + #define SA_IA32_ABI 0x02000000u + #define SA_X32_ABI 0x01000000u + ++/* ++ * Because some traps use the IST stack, we must keep preemption ++ * disabled while calling do_trap(), but do_trap() may call ++ * force_sig_info() which will grab the signal spin_locks for the ++ * task, which in PREEMPT_RT are mutexes. By defining ++ * ARCH_RT_DELAYS_SIGNAL_SEND the force_sig_info() will set ++ * TIF_NOTIFY_RESUME and set up the signal to be sent on exit of the ++ * trap. ++ */ ++#if defined(CONFIG_PREEMPT_RT) ++#define ARCH_RT_DELAYS_SIGNAL_SEND ++#endif ++ + #ifndef CONFIG_COMPAT + typedef sigset_t compat_sigset_t; + #endif +diff -Naur --no-dereference a/arch/x86/include/asm/stackprotector.h b/arch/x86/include/asm/stackprotector.h +--- a/arch/x86/include/asm/stackprotector.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/include/asm/stackprotector.h 2024-11-24 20:19:38.123228737 -0500 +@@ -65,7 +65,7 @@ + */ + static __always_inline void boot_init_stack_canary(void) + { +- u64 canary; ++ u64 canary = 0; + u64 tsc; + + #ifdef CONFIG_X86_64 +@@ -76,8 +76,14 @@ + * of randomness. The TSC only matters for very early init, + * there it already has some randomness on most systems. Later + * on during the bootup the random pool has true entropy too. ++ * For preempt-rt we need to weaken the randomness a bit, as ++ * we can't call into the random generator from atomic context ++ * due to locking constraints. We just leave canary ++ * uninitialized and use the TSC based randomness on top of it. + */ ++#ifndef CONFIG_PREEMPT_RT + get_random_bytes(&canary, sizeof(canary)); ++#endif + tsc = rdtsc(); + canary += tsc + (tsc << 32UL); + canary &= CANARY_MASK; +diff -Naur --no-dereference a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h +--- a/arch/x86/include/asm/thread_info.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/include/asm/thread_info.h 2024-11-24 20:19:38.123228737 -0500 +@@ -56,17 +56,24 @@ + struct thread_info { + unsigned long flags; /* low level flags */ + u32 status; /* thread synchronous flags */ ++ int preempt_lazy_count; /* 0 => lazy preemptable ++ <0 => BUG */ + }; + + #define INIT_THREAD_INFO(tsk) \ + { \ + .flags = 0, \ ++ .preempt_lazy_count = 0, \ + } + + #else /* !__ASSEMBLY__ */ + + #include + ++#define GET_THREAD_INFO(reg) \ ++ _ASM_MOV PER_CPU_VAR(cpu_current_top_of_stack),reg ; \ ++ _ASM_SUB $(THREAD_SIZE),reg ; ++ + #endif + + /* +@@ -103,6 +110,7 @@ + #define TIF_SYSCALL_TRACEPOINT 28 /* syscall tracepoint instrumentation */ + #define TIF_ADDR32 29 /* 32-bit address space on 64 bits */ + #define TIF_X32 30 /* 32-bit native x86-64 binary */ ++#define TIF_NEED_RESCHED_LAZY 31 /* lazy rescheduling necessary */ + + #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) + #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) +@@ -124,6 +132,7 @@ + #define _TIF_IA32 (1 << TIF_IA32) + #define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL) + #define _TIF_SLD (1 << TIF_SLD) ++#define _TIF_NEED_RESCHED_LAZY (1 << TIF_NEED_RESCHED_LAZY) + #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) + #define _TIF_IO_BITMAP (1 << TIF_IO_BITMAP) + #define _TIF_FORCED_TF (1 << TIF_FORCED_TF) +@@ -156,6 +165,8 @@ + + #define _TIF_WORK_CTXSW_NEXT (_TIF_WORK_CTXSW) + ++#define _TIF_NEED_RESCHED_MASK (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY) ++ + #define STACK_WARN (THREAD_SIZE/8) + + /* +diff -Naur --no-dereference a/arch/x86/Kconfig b/arch/x86/Kconfig +--- a/arch/x86/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/Kconfig 2024-11-24 20:19:38.122228735 -0500 +@@ -15,6 +15,7 @@ + select CLKSRC_I8253 + select CLONE_BACKWARDS + select HAVE_DEBUG_STACKOVERFLOW ++ select KMAP_LOCAL + select MODULES_USE_ELF_REL + select OLD_SIGACTION + select GENERIC_VDSO_32 +@@ -93,6 +94,7 @@ + select ARCH_SUPPORTS_ACPI + select ARCH_SUPPORTS_ATOMIC_RMW + select ARCH_SUPPORTS_NUMA_BALANCING if X86_64 ++ select ARCH_SUPPORTS_RT + select ARCH_USE_BUILTIN_BSWAP + select ARCH_USE_QUEUED_RWLOCKS + select ARCH_USE_QUEUED_SPINLOCKS +@@ -210,6 +212,7 @@ + select HAVE_PCI + select HAVE_PERF_REGS + select HAVE_PERF_USER_STACK_DUMP ++ select HAVE_PREEMPT_LAZY + select MMU_GATHER_RCU_TABLE_FREE if PARAVIRT + select HAVE_POSIX_CPU_TIMERS_TASK_WORK + select HAVE_REGS_AND_STACK_ACCESS_API +diff -Naur --no-dereference a/arch/x86/kernel/crash_dump_32.c b/arch/x86/kernel/crash_dump_32.c +--- a/arch/x86/kernel/crash_dump_32.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/kernel/crash_dump_32.c 2024-11-24 20:19:38.123228737 -0500 +@@ -13,8 +13,6 @@ + + #include + +-static void *kdump_buf_page; +- + static inline bool is_crashed_pfn_valid(unsigned long pfn) + { + #ifndef CONFIG_X86_PAE +@@ -41,15 +39,11 @@ + * @userbuf: if set, @buf is in user address space, use copy_to_user(), + * otherwise @buf is in kernel address space, use memcpy(). + * +- * Copy a page from "oldmem". For this page, there is no pte mapped +- * in the current kernel. We stitch up a pte, similar to kmap_atomic. +- * +- * Calling copy_to_user() in atomic context is not desirable. Hence first +- * copying the data to a pre-allocated kernel page and then copying to user +- * space in non-atomic context. ++ * Copy a page from "oldmem". For this page, there might be no pte mapped ++ * in the current kernel. + */ +-ssize_t copy_oldmem_page(unsigned long pfn, char *buf, +- size_t csize, unsigned long offset, int userbuf) ++ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize, ++ unsigned long offset, int userbuf) + { + void *vaddr; + +@@ -59,38 +53,16 @@ + if (!is_crashed_pfn_valid(pfn)) + return -EFAULT; + +- vaddr = kmap_atomic_pfn(pfn); ++ vaddr = kmap_local_pfn(pfn); + + if (!userbuf) { +- memcpy(buf, (vaddr + offset), csize); +- kunmap_atomic(vaddr); ++ memcpy(buf, vaddr + offset, csize); + } else { +- if (!kdump_buf_page) { +- printk(KERN_WARNING "Kdump: Kdump buffer page not" +- " allocated\n"); +- kunmap_atomic(vaddr); +- return -EFAULT; +- } +- copy_page(kdump_buf_page, vaddr); +- kunmap_atomic(vaddr); +- if (copy_to_user(buf, (kdump_buf_page + offset), csize)) +- return -EFAULT; ++ if (copy_to_user(buf, vaddr + offset, csize)) ++ csize = -EFAULT; + } + +- return csize; +-} ++ kunmap_local(vaddr); + +-static int __init kdump_buf_page_init(void) +-{ +- int ret = 0; +- +- kdump_buf_page = kmalloc(PAGE_SIZE, GFP_KERNEL); +- if (!kdump_buf_page) { +- printk(KERN_WARNING "Kdump: Failed to allocate kdump buffer" +- " page\n"); +- ret = -ENOMEM; +- } +- +- return ret; ++ return csize; + } +-arch_initcall(kdump_buf_page_init); +diff -Naur --no-dereference a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c +--- a/arch/x86/kernel/fpu/core.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/kernel/fpu/core.c 2024-11-24 20:19:38.123228737 -0500 +@@ -159,6 +159,18 @@ + } + EXPORT_SYMBOL_GPL(kernel_fpu_end); + ++void kernel_fpu_resched(void) ++{ ++ WARN_ON_FPU(!this_cpu_read(in_kernel_fpu)); ++ ++ if (should_resched(PREEMPT_OFFSET)) { ++ kernel_fpu_end(); ++ cond_resched(); ++ kernel_fpu_begin(); ++ } ++} ++EXPORT_SYMBOL_GPL(kernel_fpu_resched); ++ + /* + * Save the FPU state (mark it for reload if necessary): + * +diff -Naur --no-dereference a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c +--- a/arch/x86/kernel/irq_32.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/kernel/irq_32.c 2024-11-24 20:19:38.123228737 -0500 +@@ -131,6 +131,7 @@ + return 0; + } + ++#ifndef CONFIG_PREEMPT_RT + void do_softirq_own_stack(void) + { + struct irq_stack *irqstk; +@@ -147,6 +148,7 @@ + + call_on_stack(__do_softirq, isp); + } ++#endif + + void __handle_irq(struct irq_desc *desc, struct pt_regs *regs) + { +diff -Naur --no-dereference a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c +--- a/arch/x86/kernel/irq_64.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/kernel/irq_64.c 2024-11-24 20:19:38.123228737 -0500 +@@ -72,7 +72,9 @@ + return map_irq_stack(cpu); + } + ++#ifndef CONFIG_PREEMPT_RT + void do_softirq_own_stack(void) + { + run_on_irqstack_cond(__do_softirq, NULL); + } ++#endif +diff -Naur --no-dereference a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c +--- a/arch/x86/kvm/x86.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/kvm/x86.c 2024-11-24 20:19:38.123228737 -0500 +@@ -8096,6 +8096,14 @@ + goto out; + } + ++#ifdef CONFIG_PREEMPT_RT ++ if (!boot_cpu_has(X86_FEATURE_CONSTANT_TSC)) { ++ pr_err("RT requires X86_FEATURE_CONSTANT_TSC\n"); ++ r = -EOPNOTSUPP; ++ goto out; ++ } ++#endif ++ + r = -ENOMEM; + x86_fpu_cache = kmem_cache_create("x86_fpu", sizeof(struct fpu), + __alignof__(struct fpu), SLAB_ACCOUNT, +diff -Naur --no-dereference a/arch/x86/mm/highmem_32.c b/arch/x86/mm/highmem_32.c +--- a/arch/x86/mm/highmem_32.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/mm/highmem_32.c 2024-11-24 20:19:38.124228739 -0500 +@@ -4,65 +4,6 @@ + #include /* for totalram_pages */ + #include + +-void *kmap_atomic_high_prot(struct page *page, pgprot_t prot) +-{ +- unsigned long vaddr; +- int idx, type; +- +- type = kmap_atomic_idx_push(); +- idx = type + KM_TYPE_NR*smp_processor_id(); +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +- BUG_ON(!pte_none(*(kmap_pte-idx))); +- set_pte(kmap_pte-idx, mk_pte(page, prot)); +- arch_flush_lazy_mmu_mode(); +- +- return (void *)vaddr; +-} +-EXPORT_SYMBOL(kmap_atomic_high_prot); +- +-/* +- * This is the same as kmap_atomic() but can map memory that doesn't +- * have a struct page associated with it. +- */ +-void *kmap_atomic_pfn(unsigned long pfn) +-{ +- return kmap_atomic_prot_pfn(pfn, kmap_prot); +-} +-EXPORT_SYMBOL_GPL(kmap_atomic_pfn); +- +-void kunmap_atomic_high(void *kvaddr) +-{ +- unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; +- +- if (vaddr >= __fix_to_virt(FIX_KMAP_END) && +- vaddr <= __fix_to_virt(FIX_KMAP_BEGIN)) { +- int idx, type; +- +- type = kmap_atomic_idx(); +- idx = type + KM_TYPE_NR * smp_processor_id(); +- +-#ifdef CONFIG_DEBUG_HIGHMEM +- WARN_ON_ONCE(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); +-#endif +- /* +- * Force other mappings to Oops if they'll try to access this +- * pte without first remap it. Keeping stale mappings around +- * is a bad idea also, in case the page changes cacheability +- * attributes or becomes a protected page in a hypervisor. +- */ +- kpte_clear_flush(kmap_pte-idx, vaddr); +- kmap_atomic_idx_pop(); +- arch_flush_lazy_mmu_mode(); +- } +-#ifdef CONFIG_DEBUG_HIGHMEM +- else { +- BUG_ON(vaddr < PAGE_OFFSET); +- BUG_ON(vaddr >= (unsigned long)high_memory); +- } +-#endif +-} +-EXPORT_SYMBOL(kunmap_atomic_high); +- + void __init set_highmem_pages_init(void) + { + struct zone *zone; +diff -Naur --no-dereference a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c +--- a/arch/x86/mm/init_32.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/mm/init_32.c 2024-11-24 20:19:38.124228739 -0500 +@@ -394,19 +394,6 @@ + return last_map_addr; + } + +-pte_t *kmap_pte; +- +-static void __init kmap_init(void) +-{ +- unsigned long kmap_vstart; +- +- /* +- * Cache the first kmap pte: +- */ +- kmap_vstart = __fix_to_virt(FIX_KMAP_BEGIN); +- kmap_pte = virt_to_kpte(kmap_vstart); +-} +- + #ifdef CONFIG_HIGHMEM + static void __init permanent_kmaps_init(pgd_t *pgd_base) + { +@@ -712,8 +699,6 @@ + + __flush_tlb_all(); + +- kmap_init(); +- + /* + * NOTE: at this point the bootmem allocator is fully available. + */ +diff -Naur --no-dereference a/arch/x86/mm/iomap_32.c b/arch/x86/mm/iomap_32.c +--- a/arch/x86/mm/iomap_32.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/x86/mm/iomap_32.c 2024-11-24 20:19:38.124228739 -0500 +@@ -44,28 +44,7 @@ + } + EXPORT_SYMBOL_GPL(iomap_free); + +-void *kmap_atomic_prot_pfn(unsigned long pfn, pgprot_t prot) +-{ +- unsigned long vaddr; +- int idx, type; +- +- preempt_disable(); +- pagefault_disable(); +- +- type = kmap_atomic_idx_push(); +- idx = type + KM_TYPE_NR * smp_processor_id(); +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +- set_pte(kmap_pte - idx, pfn_pte(pfn, prot)); +- arch_flush_lazy_mmu_mode(); +- +- return (void *)vaddr; +-} +- +-/* +- * Map 'pfn' using protections 'prot' +- */ +-void __iomem * +-iomap_atomic_prot_pfn(unsigned long pfn, pgprot_t prot) ++void __iomem *__iomap_local_pfn_prot(unsigned long pfn, pgprot_t prot) + { + /* + * For non-PAT systems, translate non-WB request to UC- just in +@@ -81,36 +60,6 @@ + /* Filter out unsupported __PAGE_KERNEL* bits: */ + pgprot_val(prot) &= __default_kernel_pte_mask; + +- return (void __force __iomem *) kmap_atomic_prot_pfn(pfn, prot); +-} +-EXPORT_SYMBOL_GPL(iomap_atomic_prot_pfn); +- +-void +-iounmap_atomic(void __iomem *kvaddr) +-{ +- unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; +- +- if (vaddr >= __fix_to_virt(FIX_KMAP_END) && +- vaddr <= __fix_to_virt(FIX_KMAP_BEGIN)) { +- int idx, type; +- +- type = kmap_atomic_idx(); +- idx = type + KM_TYPE_NR * smp_processor_id(); +- +-#ifdef CONFIG_DEBUG_HIGHMEM +- WARN_ON_ONCE(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); +-#endif +- /* +- * Force other mappings to Oops if they'll try to access this +- * pte without first remap it. Keeping stale mappings around +- * is a bad idea also, in case the page changes cacheability +- * attributes or becomes a protected page in a hypervisor. +- */ +- kpte_clear_flush(kmap_pte-idx, vaddr); +- kmap_atomic_idx_pop(); +- } +- +- pagefault_enable(); +- preempt_enable(); ++ return (void __force __iomem *)__kmap_local_pfn_prot(pfn, prot); + } +-EXPORT_SYMBOL_GPL(iounmap_atomic); ++EXPORT_SYMBOL_GPL(__iomap_local_pfn_prot); +diff -Naur --no-dereference a/arch/xtensa/include/asm/fixmap.h b/arch/xtensa/include/asm/fixmap.h +--- a/arch/xtensa/include/asm/fixmap.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/xtensa/include/asm/fixmap.h 2024-11-24 20:19:38.124228739 -0500 +@@ -16,7 +16,7 @@ + #ifdef CONFIG_HIGHMEM + #include + #include +-#include ++#include + #endif + + /* +@@ -39,7 +39,7 @@ + /* reserved pte's for temporary kernel mappings */ + FIX_KMAP_BEGIN, + FIX_KMAP_END = FIX_KMAP_BEGIN + +- (KM_TYPE_NR * NR_CPUS * DCACHE_N_COLORS) - 1, ++ (KM_MAX_IDX * NR_CPUS * DCACHE_N_COLORS) - 1, + #endif + __end_of_fixed_addresses + }; +diff -Naur --no-dereference a/arch/xtensa/include/asm/highmem.h b/arch/xtensa/include/asm/highmem.h +--- a/arch/xtensa/include/asm/highmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/xtensa/include/asm/highmem.h 2024-11-24 20:19:38.124228739 -0500 +@@ -16,9 +16,8 @@ + #include + #include + #include +-#include + +-#define PKMAP_BASE ((FIXADDR_START - \ ++#define PKMAP_BASE ((FIXADDR_START - \ + (LAST_PKMAP + 1) * PAGE_SIZE) & PMD_MASK) + #define LAST_PKMAP (PTRS_PER_PTE * DCACHE_N_COLORS) + #define LAST_PKMAP_MASK (LAST_PKMAP - 1) +@@ -68,6 +67,15 @@ + flush_cache_all(); + } + ++enum fixed_addresses kmap_local_map_idx(int type, unsigned long pfn); ++#define arch_kmap_local_map_idx kmap_local_map_idx ++ ++enum fixed_addresses kmap_local_unmap_idx(int type, unsigned long addr); ++#define arch_kmap_local_unmap_idx kmap_local_unmap_idx ++ ++#define arch_kmap_local_post_unmap(vaddr) \ ++ local_flush_tlb_kernel_range(vaddr, vaddr + PAGE_SIZE) ++ + void kmap_init(void); + + #endif +diff -Naur --no-dereference a/arch/xtensa/include/asm/spinlock_types.h b/arch/xtensa/include/asm/spinlock_types.h +--- a/arch/xtensa/include/asm/spinlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/xtensa/include/asm/spinlock_types.h 2024-11-24 20:19:38.124228739 -0500 +@@ -2,10 +2,6 @@ + #ifndef __ASM_SPINLOCK_TYPES_H + #define __ASM_SPINLOCK_TYPES_H + +-#if !defined(__LINUX_SPINLOCK_TYPES_H) && !defined(__ASM_SPINLOCK_H) +-# error "please don't include this file directly" +-#endif +- + #include + #include + +diff -Naur --no-dereference a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig +--- a/arch/xtensa/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/xtensa/Kconfig 2024-11-24 20:19:38.124228739 -0500 +@@ -666,6 +666,7 @@ + config HIGHMEM + bool "High Memory Support" + depends on MMU ++ select KMAP_LOCAL + help + Linux can use the full amount of RAM in the system by + default. However, the default MMUv2 setup only maps the +diff -Naur --no-dereference a/arch/xtensa/mm/highmem.c b/arch/xtensa/mm/highmem.c +--- a/arch/xtensa/mm/highmem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/arch/xtensa/mm/highmem.c 2024-11-24 20:19:38.124228739 -0500 +@@ -12,8 +12,6 @@ + #include + #include + +-static pte_t *kmap_pte; +- + #if DCACHE_WAY_SIZE > PAGE_SIZE + unsigned int last_pkmap_nr_arr[DCACHE_N_COLORS]; + wait_queue_head_t pkmap_map_wait_arr[DCACHE_N_COLORS]; +@@ -33,59 +31,25 @@ + + static inline enum fixed_addresses kmap_idx(int type, unsigned long color) + { +- return (type + KM_TYPE_NR * smp_processor_id()) * DCACHE_N_COLORS + ++ return (type + KM_MAX_IDX * smp_processor_id()) * DCACHE_N_COLORS + + color; + } + +-void *kmap_atomic_high_prot(struct page *page, pgprot_t prot) ++enum fixed_addresses kmap_local_map_idx(int type, unsigned long pfn) + { +- enum fixed_addresses idx; +- unsigned long vaddr; +- +- idx = kmap_idx(kmap_atomic_idx_push(), +- DCACHE_ALIAS(page_to_phys(page))); +- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +-#ifdef CONFIG_DEBUG_HIGHMEM +- BUG_ON(!pte_none(*(kmap_pte + idx))); +-#endif +- set_pte(kmap_pte + idx, mk_pte(page, prot)); +- +- return (void *)vaddr; ++ return kmap_idx(type, DCACHE_ALIAS(pfn << PAGE_SHIFT)); + } +-EXPORT_SYMBOL(kmap_atomic_high_prot); + +-void kunmap_atomic_high(void *kvaddr) ++enum fixed_addresses kmap_local_unmap_idx(int type, unsigned long addr) + { +- if (kvaddr >= (void *)FIXADDR_START && +- kvaddr < (void *)FIXADDR_TOP) { +- int idx = kmap_idx(kmap_atomic_idx(), +- DCACHE_ALIAS((unsigned long)kvaddr)); +- +- /* +- * Force other mappings to Oops if they'll try to access this +- * pte without first remap it. Keeping stale mappings around +- * is a bad idea also, in case the page changes cacheability +- * attributes or becomes a protected page in a hypervisor. +- */ +- pte_clear(&init_mm, kvaddr, kmap_pte + idx); +- local_flush_tlb_kernel_range((unsigned long)kvaddr, +- (unsigned long)kvaddr + PAGE_SIZE); +- +- kmap_atomic_idx_pop(); +- } ++ return kmap_idx(type, DCACHE_ALIAS(addr)); + } +-EXPORT_SYMBOL(kunmap_atomic_high); + + void __init kmap_init(void) + { +- unsigned long kmap_vstart; +- + /* Check if this memory layout is broken because PKMAP overlaps + * page table. + */ + BUILD_BUG_ON(PKMAP_BASE < TLBTEMP_BASE_1 + TLBTEMP_SIZE); +- /* cache the first kmap pte */ +- kmap_vstart = __fix_to_virt(FIX_KMAP_BEGIN); +- kmap_pte = virt_to_kpte(kmap_vstart); + kmap_waitqueues_init(); + } +diff -Naur --no-dereference a/block/blk-iocost.c b/block/blk-iocost.c +--- a/block/blk-iocost.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/block/blk-iocost.c 2024-11-24 20:19:38.125228740 -0500 +@@ -232,7 +232,9 @@ + + /* 1/64k is granular enough and can easily be handled w/ u32 */ + WEIGHT_ONE = 1 << 16, ++}; + ++enum { + /* + * As vtime is used to calculate the cost of each IO, it needs to + * be fairly high precision. For example, it should be able to +@@ -872,9 +874,14 @@ + + *page = *seqio = *randio = 0; + +- if (bps) +- *page = DIV64_U64_ROUND_UP(VTIME_PER_SEC, +- DIV_ROUND_UP_ULL(bps, IOC_PAGE_SIZE)); ++ if (bps) { ++ u64 bps_pages = DIV_ROUND_UP_ULL(bps, IOC_PAGE_SIZE); ++ ++ if (bps_pages) ++ *page = DIV64_U64_ROUND_UP(VTIME_PER_SEC, bps_pages); ++ else ++ *page = 1; ++ } + + if (seqiops) { + v = DIV64_U64_ROUND_UP(VTIME_PER_SEC, seqiops); +diff -Naur --no-dereference a/block/blk-mq.c b/block/blk-mq.c +--- a/block/blk-mq.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/block/blk-mq.c 2024-11-24 20:19:38.125228740 -0500 +@@ -41,7 +41,7 @@ + #include "blk-mq-sched.h" + #include "blk-rq-qos.h" + +-static DEFINE_PER_CPU(struct list_head, blk_cpu_done); ++static DEFINE_PER_CPU(struct llist_head, blk_cpu_done); + + static void blk_mq_poll_stats_start(struct request_queue *q); + static void blk_mq_poll_stats_fn(struct blk_stat_callback *cb); +@@ -568,80 +568,29 @@ + } + EXPORT_SYMBOL(blk_mq_end_request); + +-/* +- * Softirq action handler - move entries to local list and loop over them +- * while passing them to the queue registered handler. +- */ +-static __latent_entropy void blk_done_softirq(struct softirq_action *h) ++static void blk_complete_reqs(struct llist_head *list) + { +- struct list_head *cpu_list, local_list; +- +- local_irq_disable(); +- cpu_list = this_cpu_ptr(&blk_cpu_done); +- list_replace_init(cpu_list, &local_list); +- local_irq_enable(); +- +- while (!list_empty(&local_list)) { +- struct request *rq; ++ struct llist_node *entry = llist_reverse_order(llist_del_all(list)); ++ struct request *rq, *next; + +- rq = list_entry(local_list.next, struct request, ipi_list); +- list_del_init(&rq->ipi_list); ++ llist_for_each_entry_safe(rq, next, entry, ipi_list) + rq->q->mq_ops->complete(rq); +- } + } + +-static void blk_mq_trigger_softirq(struct request *rq) ++static __latent_entropy void blk_done_softirq(struct softirq_action *h) + { +- struct list_head *list; +- unsigned long flags; +- +- local_irq_save(flags); +- list = this_cpu_ptr(&blk_cpu_done); +- list_add_tail(&rq->ipi_list, list); +- +- /* +- * If the list only contains our just added request, signal a raise of +- * the softirq. If there are already entries there, someone already +- * raised the irq but it hasn't run yet. +- */ +- if (list->next == &rq->ipi_list) +- raise_softirq_irqoff(BLOCK_SOFTIRQ); +- local_irq_restore(flags); ++ blk_complete_reqs(this_cpu_ptr(&blk_cpu_done)); + } + + static int blk_softirq_cpu_dead(unsigned int cpu) + { +- /* +- * If a CPU goes away, splice its entries to the current CPU +- * and trigger a run of the softirq +- */ +- local_irq_disable(); +- list_splice_init(&per_cpu(blk_cpu_done, cpu), +- this_cpu_ptr(&blk_cpu_done)); +- raise_softirq_irqoff(BLOCK_SOFTIRQ); +- local_irq_enable(); +- ++ blk_complete_reqs(&per_cpu(blk_cpu_done, cpu)); + return 0; + } + +- + static void __blk_mq_complete_request_remote(void *data) + { +- struct request *rq = data; +- +- /* +- * For most of single queue controllers, there is only one irq vector +- * for handling I/O completion, and the only irq's affinity is set +- * to all possible CPUs. On most of ARCHs, this affinity means the irq +- * is handled on one specific CPU. +- * +- * So complete I/O requests in softirq context in case of single queue +- * devices to avoid degrading I/O performance due to irqsoff latency. +- */ +- if (rq->q->nr_hw_queues == 1) +- blk_mq_trigger_softirq(rq); +- else +- rq->q->mq_ops->complete(rq); ++ __raise_softirq_irqoff(BLOCK_SOFTIRQ); + } + + static inline bool blk_mq_complete_need_ipi(struct request *rq) +@@ -651,6 +600,14 @@ + if (!IS_ENABLED(CONFIG_SMP) || + !test_bit(QUEUE_FLAG_SAME_COMP, &rq->q->queue_flags)) + return false; ++ /* ++ * With force threaded interrupts enabled, raising softirq from an SMP ++ * function call will always result in waking the ksoftirqd thread. ++ * This is probably worse than completing the request on a different ++ * cache domain. ++ */ ++ if (force_irqthreads) ++ return false; + + /* same CPU or cache domain? Complete locally */ + if (cpu == rq->mq_ctx->cpu || +@@ -662,6 +619,32 @@ + return cpu_online(rq->mq_ctx->cpu); + } + ++static void blk_mq_complete_send_ipi(struct request *rq) ++{ ++ struct llist_head *list; ++ unsigned int cpu; ++ ++ cpu = rq->mq_ctx->cpu; ++ list = &per_cpu(blk_cpu_done, cpu); ++ if (llist_add(&rq->ipi_list, list)) { ++ rq->csd.func = __blk_mq_complete_request_remote; ++ rq->csd.info = rq; ++ rq->csd.flags = 0; ++ smp_call_function_single_async(cpu, &rq->csd); ++ } ++} ++ ++static void blk_mq_raise_softirq(struct request *rq) ++{ ++ struct llist_head *list; ++ ++ preempt_disable(); ++ list = this_cpu_ptr(&blk_cpu_done); ++ if (llist_add(&rq->ipi_list, list)) ++ raise_softirq(BLOCK_SOFTIRQ); ++ preempt_enable(); ++} ++ + bool blk_mq_complete_request_remote(struct request *rq) + { + WRITE_ONCE(rq->state, MQ_RQ_COMPLETE); +@@ -674,17 +657,15 @@ + return false; + + if (blk_mq_complete_need_ipi(rq)) { +- rq->csd.func = __blk_mq_complete_request_remote; +- rq->csd.info = rq; +- rq->csd.flags = 0; +- smp_call_function_single_async(rq->mq_ctx->cpu, &rq->csd); +- } else { +- if (rq->q->nr_hw_queues > 1) +- return false; +- blk_mq_trigger_softirq(rq); ++ blk_mq_complete_send_ipi(rq); ++ return true; + } + +- return true; ++ if (rq->q->nr_hw_queues == 1) { ++ blk_mq_raise_softirq(rq); ++ return true; ++ } ++ return false; + } + EXPORT_SYMBOL_GPL(blk_mq_complete_request_remote); + +@@ -1593,14 +1574,14 @@ + return; + + if (!async && !(hctx->flags & BLK_MQ_F_BLOCKING)) { +- int cpu = get_cpu(); ++ int cpu = get_cpu_light(); + if (cpumask_test_cpu(cpu, hctx->cpumask)) { + __blk_mq_run_hw_queue(hctx); +- put_cpu(); ++ put_cpu_light(); + return; + } + +- put_cpu(); ++ put_cpu_light(); + } + + kblockd_mod_delayed_work_on(blk_mq_hctx_next_cpu(hctx), &hctx->run_work, +@@ -3983,7 +3964,7 @@ + int i; + + for_each_possible_cpu(i) +- INIT_LIST_HEAD(&per_cpu(blk_cpu_done, i)); ++ init_llist_head(&per_cpu(blk_cpu_done, i)); + open_softirq(BLOCK_SOFTIRQ, blk_done_softirq); + + cpuhp_setup_state_nocalls(CPUHP_BLOCK_SOFTIRQ_DEAD, +diff -Naur --no-dereference a/crypto/tcrypt.c b/crypto/tcrypt.c +--- a/crypto/tcrypt.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/crypto/tcrypt.c 2024-11-24 20:19:38.125228740 -0500 +@@ -73,7 +73,7 @@ + "khazad", "wp512", "wp384", "wp256", "tnepres", "xeta", "fcrypt", + "camellia", "seed", "salsa20", "rmd128", "rmd160", "rmd256", "rmd320", + "lzo", "lzo-rle", "cts", "sha3-224", "sha3-256", "sha3-384", +- "sha3-512", "streebog256", "streebog512", ++ "sha3-512", "streebog256", "streebog512", "crc64", + NULL + }; + +@@ -868,9 +868,13 @@ + if (klen) + crypto_ahash_setkey(tfm, tvmem[0], klen); + +- for (k = 0; k < num_mb; k++) ++ for (k = 0; k < num_mb; k++) { ++ sg_set_buf(data[k].sg, data[k].xbuf[0], ++ speed[i].blen > PAGE_SIZE ? PAGE_SIZE : ++ speed[i].blen); + ahash_request_set_crypt(data[k].req, data[k].sg, + data[k].result, speed[i].blen); ++ } + + pr_info("test%3u " + "(%5u byte blocks,%5u bytes per update,%4u updates): ", +@@ -1107,6 +1111,7 @@ + "(%5u byte blocks,%5u bytes per update,%4u updates): ", + i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen); + ++ sg_set_buf(sg, tvmem[0], speed[i].plen); + ahash_request_set_crypt(req, sg, output, speed[i].plen); + + if (secs) { +@@ -2456,6 +2461,11 @@ + generic_hash_speed_template); + if (mode > 300 && mode < 400) break; + fallthrough; ++ case 329: ++ test_hash_speed("crc64", sec, generic_hash_speed_template); ++ if (mode > 300 && mode < 400) ++ break; ++ fallthrough; + case 399: + break; + +diff -Naur --no-dereference a/Documentation/ABI/testing/debugfs-aufs b/Documentation/ABI/testing/debugfs-aufs +--- a/Documentation/ABI/testing/debugfs-aufs 1969-12-31 19:00:00.000000000 -0500 ++++ b/Documentation/ABI/testing/debugfs-aufs 2024-11-24 20:19:38.079228658 -0500 +@@ -0,0 +1,55 @@ ++What: /debug/aufs/si_/ ++Date: March 2009 ++Contact: J. R. Okajima ++Description: ++ Under /debug/aufs, a directory named si_ is created ++ per aufs mount, where is a unique id generated ++ internally. ++ ++What: /debug/aufs/si_/plink ++Date: Apr 2013 ++Contact: J. R. Okajima ++Description: ++ It has three lines and shows the information about the ++ pseudo-link. The first line is a single number ++ representing a number of buckets. The second line is a ++ number of pseudo-links per buckets (separated by a ++ blank). The last line is a single number representing a ++ total number of psedo-links. ++ When the aufs mount option 'noplink' is specified, it ++ will show "1\n0\n0\n". ++ ++What: /debug/aufs/si_/xib ++Date: March 2009 ++Contact: J. R. Okajima ++Description: ++ It shows the consumed blocks by xib (External Inode Number ++ Bitmap), its block size and file size. ++ When the aufs mount option 'noxino' is specified, it ++ will be empty. About XINO files, see the aufs manual. ++ ++What: /debug/aufs/si_/xi ++Date: March 2009 ++Contact: J. R. Okajima ++Description: ++ It shows the consumed blocks by xino (External Inode Number ++ Translation Table), its link count, block size and file ++ size. ++ Due to the file size limit, there may exist multiple ++ xino files per branch. In this case, "-N" is added to ++ the filename and it corresponds to the index of the ++ internal xino array. "-0" is omitted. ++ When the aufs mount option 'noxino' is specified, Those ++ entries won't exist. About XINO files, see the aufs ++ manual. ++ ++What: /debug/aufs/si_/xigen ++Date: March 2009 ++Contact: J. R. Okajima ++Description: ++ It shows the consumed blocks by xigen (External Inode ++ Generation Table), its block size and file size. ++ If CONFIG_AUFS_EXPORT is disabled, this entry will not ++ be created. ++ When the aufs mount option 'noxino' is specified, it ++ will be empty. About XINO files, see the aufs manual. +diff -Naur --no-dereference a/Documentation/ABI/testing/sysfs-aufs b/Documentation/ABI/testing/sysfs-aufs +--- a/Documentation/ABI/testing/sysfs-aufs 1969-12-31 19:00:00.000000000 -0500 ++++ b/Documentation/ABI/testing/sysfs-aufs 2024-11-24 20:19:38.079228658 -0500 +@@ -0,0 +1,31 @@ ++What: /sys/fs/aufs/si_/ ++Date: March 2009 ++Contact: J. R. Okajima ++Description: ++ Under /sys/fs/aufs, a directory named si_ is created ++ per aufs mount, where is a unique id generated ++ internally. ++ ++What: /sys/fs/aufs/si_/br ++Date: March 2009 ++Contact: J. R. Okajima ++Description: ++ It shows the abolute path of a member directory (which ++ is called branch) in aufs, and its permission. ++ ++What: /sys/fs/aufs/si_/brid ++Date: July 2013 ++Contact: J. R. Okajima ++Description: ++ It shows the id of a member directory (which is called ++ branch) in aufs. ++ ++What: /sys/fs/aufs/si_/xi_path ++Date: March 2009 ++Contact: J. R. Okajima ++Description: ++ It shows the abolute path of XINO (External Inode Number ++ Bitmap, Translation Table and Generation Table) file ++ even if it is the default path. ++ When the aufs mount option 'noxino' is specified, it ++ will be empty. About XINO files, see the aufs manual. +diff -Naur --no-dereference a/Documentation/ABI/testing/sysfs-bus-counter b/Documentation/ABI/testing/sysfs-bus-counter +--- a/Documentation/ABI/testing/sysfs-bus-counter 2023-02-15 11:22:27.000000000 -0500 ++++ b/Documentation/ABI/testing/sysfs-bus-counter 2024-11-24 20:19:38.079228658 -0500 +@@ -57,6 +57,7 @@ + What: /sys/bus/counter/devices/counterX/countY/count_mode_available + What: /sys/bus/counter/devices/counterX/countY/error_noise_available + What: /sys/bus/counter/devices/counterX/countY/function_available ++What: /sys/bus/counter/devices/counterX/countY/prescaler_available + What: /sys/bus/counter/devices/counterX/countY/signalZ_action_available + KernelVersion: 5.2 + Contact: linux-iio@vger.kernel.org +@@ -154,6 +155,15 @@ + Count Y. If possible, this should match the name of the + respective channel as it appears in the device datasheet. + ++What: /sys/bus/counter/devices/counterX/countY/prescaler ++KernelVersion: 5.2 ++Contact: linux-iio@vger.kernel.org ++Description: ++ Configure the prescaler value associated with Count Y. ++ On the FlexTimer, the counter clock source passes through a ++ prescaler (i.e. a counter). This acts like a clock ++ divider. ++ + What: /sys/bus/counter/devices/counterX/countY/preset + KernelVersion: 5.2 + Contact: linux-iio@vger.kernel.org +@@ -193,6 +203,61 @@ + both edges: + Any state transition. + ++What: /sys/bus/counter/devices/counterX/countY/num_overflows ++KernelVersion: 6.1 ++Contact: linux-iio@vger.kernel.org ++Description: ++ This attribute indicates the number of overflows of count Y. ++ ++What: /sys/bus/counter/devices/counterX/countY/captureZ ++KernelVersion: 6.1 ++Contact: linux-iio@vger.kernel.org ++Description: ++ This read-only attributes is a historical capture of the Count Y count data ++ where Z (if present) is the respective capture buffer element offset. ++ ++What: /sys/bus/counter/devices/counterX/countY/ceiling_component_id ++What: /sys/bus/counter/devices/counterX/countY/floor_component_id ++What: /sys/bus/counter/devices/counterX/countY/count_mode_component_id ++What: /sys/bus/counter/devices/counterX/countY/direction_component_id ++What: /sys/bus/counter/devices/counterX/countY/enable_component_id ++What: /sys/bus/counter/devices/counterX/countY/error_noise_component_id ++What: /sys/bus/counter/devices/counterX/countY/prescaler_component_id ++What: /sys/bus/counter/devices/counterX/countY/preset_component_id ++What: /sys/bus/counter/devices/counterX/countY/preset_enable_component_id ++What: /sys/bus/counter/devices/counterX/countY/signalZ_action_component_id ++What: /sys/bus/counter/devices/counterX/countY/num_overflows_component_id ++What: /sys/bus/counter/devices/counterX/countY/captureZ_component_id ++What: /sys/bus/counter/devices/counterX/signalY/cable_fault_component_id ++What: /sys/bus/counter/devices/counterX/signalY/cable_fault_enable_component_id ++What: /sys/bus/counter/devices/counterX/signalY/filter_clock_prescaler_component_id ++What: /sys/bus/counter/devices/counterX/signalY/index_polarity_component_id ++What: /sys/bus/counter/devices/counterX/signalY/synchronous_mode_component_id ++What: /sys/bus/counter/devices/counterX/signalY/polarityZ_component_id ++What: /sys/bus/counter/devices/counterX/signalY/frequency_component_id ++KernelVersion: 5.16 ++Contact: linux-iio@vger.kernel.org ++Description: ++ Read-only attribute that indicates the component ID of the ++ respective extension or Synapse. ++ ++What: /sys/bus/counter/devices/counterX/countY/spike_filter_ns ++KernelVersion: 5.14 ++Contact: linux-iio@vger.kernel.org ++Description: ++ If the counter device supports programmable spike filter this ++ attribute indicates the value in nanoseconds where noise pulses ++ shorter or equal to configured value are ignored. Value 0 means ++ filter is disabled. ++ ++What: /sys/bus/counter/devices/counterX/events_queue_size ++KernelVersion: 5.16 ++Contact: linux-iio@vger.kernel.org ++Description: ++ Size of the Counter events queue in number of struct ++ counter_event data structures. The number of elements will be ++ rounded-up to a power of 2. ++ + What: /sys/bus/counter/devices/counterX/name + KernelVersion: 5.2 + Contact: linux-iio@vger.kernel.org +@@ -215,11 +280,45 @@ + Read-only attribute that indicates the total number of Signals + belonging to the Counter. + +-What: /sys/bus/counter/devices/counterX/signalY/signal ++What: /sys/bus/counter/devices/counterX/signalY/cable_fault ++KernelVersion: 5.7 ++Contact: linux-iio@vger.kernel.org ++Description: ++ Read-only attribute that indicates whether a differential ++ encoder cable fault (not connected or loose wires) is detected ++ for the respective channel of Signal Y. Valid attribute values ++ are boolean. Detection must first be enabled via the ++ corresponding cable_fault_enable attribute. ++ ++What: /sys/bus/counter/devices/counterX/signalY/cable_fault_enable ++KernelVersion: 5.7 ++Contact: linux-iio@vger.kernel.org ++Description: ++ Whether detection of differential encoder cable faults for the ++ respective channel of Signal Y is enabled. Valid attribute ++ values are boolean. ++ ++What: /sys/bus/counter/devices/counterX/signalY/filter_clock_prescaler ++KernelVersion: 5.7 ++Contact: linux-iio@vger.kernel.org ++Description: ++ Filter clock factor for input Signal Y. This prescaler value ++ affects the inputs of both quadrature pair signals. ++ ++What: /sys/bus/counter/devices/counterX/signalY/index_polarity + KernelVersion: 5.2 + Contact: linux-iio@vger.kernel.org + Description: +- Signal data of Signal Y represented as a string. ++ Active level of index input Signal Y; irrelevant in ++ non-synchronous load mode. ++ ++What: /sys/bus/counter/devices/counterX/signalY/index_polarity_available ++What: /sys/bus/counter/devices/counterX/signalY/synchronous_mode_available ++KernelVersion: 5.2 ++Contact: linux-iio@vger.kernel.org ++Description: ++ Discrete set of available values for the respective Signal Y ++ configuration are listed in this file. + + What: /sys/bus/counter/devices/counterX/signalY/name + KernelVersion: 5.2 +@@ -228,3 +327,66 @@ + Read-only attribute that indicates the device-specific name of + Signal Y. If possible, this should match the name of the + respective signal as it appears in the device datasheet. ++ ++What: /sys/bus/counter/devices/counterX/signalY/signal ++KernelVersion: 5.2 ++Contact: linux-iio@vger.kernel.org ++Description: ++ Signal level state of Signal Y. The following signal level ++ states are available: ++ ++ low: ++ Low level state. ++ ++ high: ++ High level state. ++ ++What: /sys/bus/counter/devices/counterX/signalY/synchronous_mode ++KernelVersion: 5.2 ++Contact: linux-iio@vger.kernel.org ++Description: ++ Configure the counter associated with Signal Y for ++ non-synchronous or synchronous load mode. Synchronous load mode ++ cannot be selected in non-quadrature (Pulse-Direction) clock ++ mode. ++ ++ non-synchronous: ++ A logic low level is the active level at this index ++ input. The index function (as enabled via preset_enable) ++ is performed directly on the active level of the index ++ input. ++ ++ synchronous: ++ Intended for interfacing with encoder Index output in ++ quadrature clock mode. The active level is configured ++ via index_polarity. The index function (as enabled via ++ preset_enable) is performed synchronously with the ++ quadrature clock on the active level of the index input. + +What: /sys/bus/counter/devices/counterX/signalY/polarityZ +KernelVersion: 6.1 @@ -61079,7 +65714,7 @@ diff -Naur --no-dereference a/Documentation/ABI/testing/sysfs-bus-iio-counter-10 - input. diff -Naur --no-dereference a/Documentation/ABI/testing/sysfs-bus-rpmsg b/Documentation/ABI/testing/sysfs-bus-rpmsg --- a/Documentation/ABI/testing/sysfs-bus-rpmsg 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/ABI/testing/sysfs-bus-rpmsg 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/ABI/testing/sysfs-bus-rpmsg 2024-11-24 20:19:38.079228658 -0500 @@ -93,3 +93,32 @@ This sysfs entry allows the rpmsg driver for a rpmsg device to be specified which will override standard OF, ID table @@ -61115,7 +65750,7 @@ diff -Naur --no-dereference a/Documentation/ABI/testing/sysfs-bus-rpmsg b/Docume + devices associated with the same rpmsg driver. diff -Naur --no-dereference a/Documentation/ABI/testing/sysfs-firmware-devicetree-overlays b/Documentation/ABI/testing/sysfs-firmware-devicetree-overlays --- a/Documentation/ABI/testing/sysfs-firmware-devicetree-overlays 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/ABI/testing/sysfs-firmware-devicetree-overlays 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/ABI/testing/sysfs-firmware-devicetree-overlays 2024-11-24 20:19:38.079228658 -0500 @@ -0,0 +1,52 @@ +What: /sys/firmware/devicetree/overlays/ +Date: October 2015 @@ -61171,7 +65806,7 @@ diff -Naur --no-dereference a/Documentation/ABI/testing/sysfs-firmware-devicetre + The full-path of the target of the fragment diff -Naur --no-dereference a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt --- a/Documentation/admin-guide/kernel-parameters.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/admin-guide/kernel-parameters.txt 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/admin-guide/kernel-parameters.txt 2024-11-24 20:19:38.081228661 -0500 @@ -3518,6 +3518,8 @@ This can be set from sysctl after boot. See Documentation/admin-guide/sysctl/vm.rst for details. @@ -61181,9 +65816,34 @@ diff -Naur --no-dereference a/Documentation/admin-guide/kernel-parameters.txt b/ ohci1394_dma=early [HW] enable debugging via the ohci1394 driver. See Documentation/core-api/debugging-via-ohci1394.rst for more info. +@@ -4174,6 +4176,10 @@ + value, meaning that RCU_SOFTIRQ is used by default. + Specify rcutree.use_softirq=0 to use rcuc kthreads. + ++ But note that CONFIG_PREEMPT_RT=y kernels disable ++ this kernel boot parameter, forcibly setting it ++ to zero. ++ + rcutree.rcu_fanout_exact= [KNL] + Disable autobalancing of the rcu_node combining + tree. This is used by rcutorture, and might +@@ -4552,6 +4558,13 @@ + only normal grace-period primitives. No effect + on CONFIG_TINY_RCU kernels. + ++ But note that CONFIG_PREEMPT_RT=y kernels enables ++ this kernel boot parameter, forcibly setting ++ it to the value one, that is, converting any ++ post-boot attempt at an expedited RCU grace ++ period to instead use normal non-expedited ++ grace-period processing. ++ + rcupdate.rcu_task_ipi_delay= [KNL] + Set time in jiffies during which RCU tasks will + avoid sending IPIs, starting with the beginning diff -Naur --no-dereference a/Documentation/core-api/kernel-api.rst b/Documentation/core-api/kernel-api.rst --- a/Documentation/core-api/kernel-api.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/core-api/kernel-api.rst 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/core-api/kernel-api.rst 2024-11-24 20:19:38.081228661 -0500 @@ -24,11 +24,8 @@ .. kernel-doc:: lib/vsprintf.c :export: @@ -61200,7 +65860,7 @@ diff -Naur --no-dereference a/Documentation/core-api/kernel-api.rst b/Documentat :export: diff -Naur --no-dereference a/Documentation/devicetree/bindings/arm/ti/k3.yaml b/Documentation/devicetree/bindings/arm/ti/k3.yaml --- a/Documentation/devicetree/bindings/arm/ti/k3.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/arm/ti/k3.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/arm/ti/k3.yaml 2024-11-24 20:19:38.081228661 -0500 @@ -27,12 +27,47 @@ - description: K3 J721E SoC @@ -61251,7 +65911,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/arm/ti/k3.yaml b ... diff -Naur --no-dereference a/Documentation/devicetree/bindings/clock/allwinner,sun9i-a80-usb-clks.yaml b/Documentation/devicetree/bindings/clock/allwinner,sun9i-a80-usb-clks.yaml --- a/Documentation/devicetree/bindings/clock/allwinner,sun9i-a80-usb-clks.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/clock/allwinner,sun9i-a80-usb-clks.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/clock/allwinner,sun9i-a80-usb-clks.yaml 2024-11-24 20:19:38.081228661 -0500 @@ -0,0 +1,59 @@ +# SPDX-License-Identifier: GPL-2.0+ +%YAML 1.2 @@ -61377,7 +66037,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/clock/allwinner, -... diff -Naur --no-dereference a/Documentation/devicetree/bindings/clock/arm,syscon-icst.yaml b/Documentation/devicetree/bindings/clock/arm,syscon-icst.yaml --- a/Documentation/devicetree/bindings/clock/arm,syscon-icst.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/clock/arm,syscon-icst.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/clock/arm,syscon-icst.yaml 2024-11-24 20:19:38.081228661 -0500 @@ -66,8 +66,8 @@ - arm,syscon-icst525-integratorcp-cm-mem - arm,integrator-cm-auxosc @@ -61391,7 +66051,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/clock/arm,syscon description: Parent clock for the ICST VCO diff -Naur --no-dereference a/Documentation/devicetree/bindings/clock/ti,am654-ehrpwm-tbclk.yaml b/Documentation/devicetree/bindings/clock/ti,am654-ehrpwm-tbclk.yaml --- a/Documentation/devicetree/bindings/clock/ti,am654-ehrpwm-tbclk.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/clock/ti,am654-ehrpwm-tbclk.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/clock/ti,am654-ehrpwm-tbclk.yaml 2024-11-24 20:19:38.081228661 -0500 @@ -12,7 +12,10 @@ properties: compatible: @@ -61406,7 +66066,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/clock/ti,am654-e "#clock-cells": diff -Naur --no-dereference a/Documentation/devicetree/bindings/counter/interrupt-counter.yaml b/Documentation/devicetree/bindings/counter/interrupt-counter.yaml --- a/Documentation/devicetree/bindings/counter/interrupt-counter.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/counter/interrupt-counter.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/counter/interrupt-counter.yaml 2024-11-24 20:19:38.081228661 -0500 @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: GPL-2.0 +%YAML 1.2 @@ -61472,7 +66132,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/counter/interrup +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/counter/ti,am62-ecap-capture.yaml b/Documentation/devicetree/bindings/counter/ti,am62-ecap-capture.yaml --- a/Documentation/devicetree/bindings/counter/ti,am62-ecap-capture.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/counter/ti,am62-ecap-capture.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/counter/ti,am62-ecap-capture.yaml 2024-11-24 20:19:38.081228661 -0500 @@ -0,0 +1,61 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -61537,7 +66197,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/counter/ti,am62- + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/crypto/ti,mcrc.yaml b/Documentation/devicetree/bindings/crypto/ti,mcrc.yaml --- a/Documentation/devicetree/bindings/crypto/ti,mcrc.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/crypto/ti,mcrc.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/crypto/ti,mcrc.yaml 2024-11-24 20:19:38.081228661 -0500 @@ -0,0 +1,42 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -61583,7 +66243,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/crypto/ti,mcrc.y +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/crypto/ti,sa2ul.yaml b/Documentation/devicetree/bindings/crypto/ti,sa2ul.yaml --- a/Documentation/devicetree/bindings/crypto/ti,sa2ul.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/crypto/ti,sa2ul.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/crypto/ti,sa2ul.yaml 2024-11-24 20:19:38.081228661 -0500 @@ -14,6 +14,8 @@ enum: - ti,j721e-sa2ul @@ -61644,7 +66304,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/crypto/ti,sa2ul. }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/display/bridge/cdns,mhdp8546.yaml b/Documentation/devicetree/bindings/display/bridge/cdns,mhdp8546.yaml --- a/Documentation/devicetree/bindings/display/bridge/cdns,mhdp8546.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/display/bridge/cdns,mhdp8546.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/display/bridge/cdns,mhdp8546.yaml 2024-11-24 20:19:38.081228661 -0500 @@ -56,6 +56,12 @@ interrupts: maxItems: 1 @@ -61660,7 +66320,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/display/bridge/c description: diff -Naur --no-dereference a/Documentation/devicetree/bindings/display/connector/dp-connector.yaml b/Documentation/devicetree/bindings/display/connector/dp-connector.yaml --- a/Documentation/devicetree/bindings/display/connector/dp-connector.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/display/connector/dp-connector.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/display/connector/dp-connector.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -0,0 +1,55 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -61719,7 +66379,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/display/connecto +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml --- a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -193,6 +193,8 @@ - logictechno,lt161010-2nhr # Logic Technologies LT170410-2WHC 10.1" 1280x800 IPS TFT Cap Touch Mod. @@ -61740,7 +66400,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/display/panel/pa enable-gpios: true diff -Naur --no-dereference a/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml b/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml --- a/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -19,13 +19,16 @@ properties: @@ -61851,7 +66511,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/display/ti/ti,am #size-cells = <0>; diff -Naur --no-dereference a/Documentation/devicetree/bindings/display/ti/ti,j721e-dss.yaml b/Documentation/devicetree/bindings/display/ti/ti,j721e-dss.yaml --- a/Documentation/devicetree/bindings/display/ti/ti,j721e-dss.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/display/ti/ti,j721e-dss.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/display/ti/ti,j721e-dss.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -77,6 +77,14 @@ - const: vp3 - const: vp4 @@ -61879,7 +66539,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/display/ti/ti,j7 description: diff -Naur --no-dereference a/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml b/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml --- a/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -0,0 +1,207 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) 2020 Texas Instruments Incorporated @@ -62090,7 +66750,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/dma/ti/k3-bcdma. + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/dma/ti/k3-pktdma.yaml b/Documentation/devicetree/bindings/dma/ti/k3-pktdma.yaml --- a/Documentation/devicetree/bindings/dma/ti/k3-pktdma.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/dma/ti/k3-pktdma.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/dma/ti/k3-pktdma.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -0,0 +1,174 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) 2020 Texas Instruments Incorporated @@ -62268,7 +66928,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/dma/ti/k3-pktdma + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/dma/ti/k3-udma.yaml b/Documentation/devicetree/bindings/dma/ti/k3-udma.yaml --- a/Documentation/devicetree/bindings/dma/ti/k3-udma.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/dma/ti/k3-udma.yaml 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/devicetree/bindings/dma/ti/k3-udma.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -1,4 +1,6 @@ # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) 2019 Texas Instruments Incorporated @@ -62457,7 +67117,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/gpio/gpio-davinc -}; diff -Naur --no-dereference a/Documentation/devicetree/bindings/gpio/gpio-davinci.yaml b/Documentation/devicetree/bindings/gpio/gpio-davinci.yaml --- a/Documentation/devicetree/bindings/gpio/gpio-davinci.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/gpio/gpio-davinci.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/gpio/gpio-davinci.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -0,0 +1,185 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -62646,7 +67306,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/gpio/gpio-davinc + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/gpu/ti,dra7-bb2d.yaml b/Documentation/devicetree/bindings/gpu/ti,dra7-bb2d.yaml --- a/Documentation/devicetree/bindings/gpu/ti,dra7-bb2d.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/gpu/ti,dra7-bb2d.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/gpu/ti,dra7-bb2d.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -62703,7 +67363,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/gpu/ti,dra7-bb2d + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/gpu/ti,pvr.yaml b/Documentation/devicetree/bindings/gpu/ti,pvr.yaml --- a/Documentation/devicetree/bindings/gpu/ti,pvr.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/gpu/ti,pvr.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/gpu/ti,pvr.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -0,0 +1,294 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -63001,7 +67661,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/gpu/ti,pvr.yaml +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/hwlock/ti,omap-hwspinlock.yaml b/Documentation/devicetree/bindings/hwlock/ti,omap-hwspinlock.yaml --- a/Documentation/devicetree/bindings/hwlock/ti,omap-hwspinlock.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/hwlock/ti,omap-hwspinlock.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/hwlock/ti,omap-hwspinlock.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -13,6 +13,7 @@ compatible: enum: @@ -63041,7 +67701,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/hwlock/ti,omap-h + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/i2c/i2c-mux-gpmux.txt b/Documentation/devicetree/bindings/i2c/i2c-mux-gpmux.txt --- a/Documentation/devicetree/bindings/i2c/i2c-mux-gpmux.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/i2c/i2c-mux-gpmux.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/i2c/i2c-mux-gpmux.txt 2024-11-24 20:19:38.082228663 -0500 @@ -25,7 +25,7 @@ mux. * Standard I2C mux properties. See i2c-mux.txt in this directory. @@ -63131,7 +67791,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/i2c/i2c-mux-pca9 - }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml b/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml --- a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml 2024-11-24 20:19:38.082228663 -0500 @@ -0,0 +1,110 @@ +# SPDX-License-Identifier: GPL-2.0 +%YAML 1.2 @@ -63245,7 +67905,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/i2c/i2c-mux-pca9 +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/i2c/i2c-omap.txt b/Documentation/devicetree/bindings/i2c/i2c-omap.txt --- a/Documentation/devicetree/bindings/i2c/i2c-omap.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/i2c/i2c-omap.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/i2c/i2c-omap.txt 2024-11-24 20:19:38.082228663 -0500 @@ -8,6 +8,7 @@ "ti,omap4-i2c" for OMAP4+ SoCs "ti,am654-i2c", "ti,omap4-i2c" for AM654 SoCs @@ -63256,7 +67916,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/i2c/i2c-omap.txt - #size-cells = <0>; diff -Naur --no-dereference a/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml b/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml --- a/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -17,7 +17,7 @@ properties: @@ -63268,7 +67928,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/i2c/nuvoton,npcm maxItems: 1 diff -Naur --no-dereference a/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt b/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt --- a/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt 2024-11-24 20:19:38.083228665 -0500 @@ -17,7 +17,7 @@ be created. The number of this io-channel is the same as the index into the list of strings in the channels property, and also matches the mux @@ -63375,7 +68035,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/input/touchscree - } diff -Naur --no-dereference a/Documentation/devicetree/bindings/interrupt-controller/ti,pruss-intc.yaml b/Documentation/devicetree/bindings/interrupt-controller/ti,pruss-intc.yaml --- a/Documentation/devicetree/bindings/interrupt-controller/ti,pruss-intc.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/interrupt-controller/ti,pruss-intc.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/interrupt-controller/ti,pruss-intc.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -33,6 +33,9 @@ corresponding PRUSS node. The node should be named "interrupt-controller". @@ -63415,7 +68075,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/interrupt-contro - compatible diff -Naur --no-dereference a/Documentation/devicetree/bindings/interrupt-controller/ti,sci-inta.yaml b/Documentation/devicetree/bindings/interrupt-controller/ti,sci-inta.yaml --- a/Documentation/devicetree/bindings/interrupt-controller/ti,sci-inta.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/interrupt-controller/ti,sci-inta.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/interrupt-controller/ti,sci-inta.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -59,6 +59,9 @@ interrupt-controller: true @@ -63440,7 +68100,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/interrupt-contro - reg diff -Naur --no-dereference a/Documentation/devicetree/bindings/interrupt-controller/ti,sci-intr.yaml b/Documentation/devicetree/bindings/interrupt-controller/ti,sci-intr.yaml --- a/Documentation/devicetree/bindings/interrupt-controller/ti,sci-intr.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/interrupt-controller/ti,sci-intr.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/interrupt-controller/ti,sci-intr.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -58,6 +58,9 @@ 1 = If intr supports edge triggered interrupts. 4 = If intr supports level triggered interrupts. @@ -63453,7 +68113,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/interrupt-contro '#interrupt-cells': diff -Naur --no-dereference a/Documentation/devicetree/bindings/iommu/renesas,ipmmu-vmsa.yaml b/Documentation/devicetree/bindings/iommu/renesas,ipmmu-vmsa.yaml --- a/Documentation/devicetree/bindings/iommu/renesas,ipmmu-vmsa.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/iommu/renesas,ipmmu-vmsa.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/iommu/renesas,ipmmu-vmsa.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -93,7 +93,7 @@ #include @@ -63649,7 +68309,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mailbox/omap-mai -}; diff -Naur --no-dereference a/Documentation/devicetree/bindings/mailbox/ti,omap-mailbox.yaml b/Documentation/devicetree/bindings/mailbox/ti,omap-mailbox.yaml --- a/Documentation/devicetree/bindings/mailbox/ti,omap-mailbox.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mailbox/ti,omap-mailbox.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mailbox/ti,omap-mailbox.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -0,0 +1,308 @@ +# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause) +%YAML 1.2 @@ -64065,7 +68725,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/cdns,csi2r -}; diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/cdns,csi2rx.yaml b/Documentation/devicetree/bindings/media/cdns,csi2rx.yaml --- a/Documentation/devicetree/bindings/media/cdns,csi2rx.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/cdns,csi2rx.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/cdns,csi2rx.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -0,0 +1,172 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -64241,7 +68901,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/cdns,csi2r + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/cnm,wave5.yml b/Documentation/devicetree/bindings/media/cnm,wave5.yml --- a/Documentation/devicetree/bindings/media/cnm,wave5.yml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/cnm,wave5.yml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/cnm,wave5.yml 2024-11-24 20:19:38.083228665 -0500 @@ -0,0 +1,71 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 @@ -64316,7 +68976,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/cnm,wave5. + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/i2c/ov1063x.yaml b/Documentation/devicetree/bindings/media/i2c/ov1063x.yaml --- a/Documentation/devicetree/bindings/media/i2c/ov1063x.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/i2c/ov1063x.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/i2c/ov1063x.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -0,0 +1,110 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -64430,7 +69090,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/i2c/ov1063 +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/i2c/sony,imx390.yaml b/Documentation/devicetree/bindings/media/i2c/sony,imx390.yaml --- a/Documentation/devicetree/bindings/media/i2c/sony,imx390.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/i2c/sony,imx390.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/i2c/sony,imx390.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -0,0 +1,78 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -64512,7 +69172,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/i2c/sony,i +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/i2c/ti,ds90ub953.yaml b/Documentation/devicetree/bindings/media/i2c/ti,ds90ub953.yaml --- a/Documentation/devicetree/bindings/media/i2c/ti,ds90ub953.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/i2c/ti,ds90ub953.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/i2c/ti,ds90ub953.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -0,0 +1,97 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -64613,7 +69273,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/i2c/ti,ds9 +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/i2c/ti,ds90ub960.yaml b/Documentation/devicetree/bindings/media/i2c/ti,ds90ub960.yaml --- a/Documentation/devicetree/bindings/media/i2c/ti,ds90ub960.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/i2c/ti,ds90ub960.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/i2c/ti,ds90ub960.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -0,0 +1,196 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -64813,7 +69473,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/i2c/ti,ds9 +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/img,d5500-vxd.yaml b/Documentation/devicetree/bindings/media/img,d5500-vxd.yaml --- a/Documentation/devicetree/bindings/media/img,d5500-vxd.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/img,d5500-vxd.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/img,d5500-vxd.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -0,0 +1,52 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -64869,7 +69529,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/img,d5500- +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/img,vxe384.yaml b/Documentation/devicetree/bindings/media/img,vxe384.yaml --- a/Documentation/devicetree/bindings/media/img,vxe384.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/img,vxe384.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/img,vxe384.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -0,0 +1,48 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) + @@ -64921,7 +69581,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/img,vxe384 + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/ti,j721e-csi2rx.yaml b/Documentation/devicetree/bindings/media/ti,j721e-csi2rx.yaml --- a/Documentation/devicetree/bindings/media/ti,j721e-csi2rx.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/ti,j721e-csi2rx.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/ti,j721e-csi2rx.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -0,0 +1,101 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -65026,7 +69686,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/ti,j721e-c + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/ti,vip.yaml b/Documentation/devicetree/bindings/media/ti,vip.yaml --- a/Documentation/devicetree/bindings/media/ti,vip.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/ti,vip.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/ti,vip.yaml 2024-11-24 20:19:38.083228665 -0500 @@ -0,0 +1,306 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -65336,7 +69996,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/ti,vip.yam +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/video-interface-devices.yaml b/Documentation/devicetree/bindings/media/video-interface-devices.yaml --- a/Documentation/devicetree/bindings/media/video-interface-devices.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/video-interface-devices.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/video-interface-devices.yaml 2024-11-24 20:19:38.084228667 -0500 @@ -0,0 +1,406 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -65746,7 +70406,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/video-inte +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/video-interfaces.txt b/Documentation/devicetree/bindings/media/video-interfaces.txt --- a/Documentation/devicetree/bindings/media/video-interfaces.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/video-interfaces.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/video-interfaces.txt 2024-11-24 20:19:38.084228667 -0500 @@ -1,639 +1 @@ -Common bindings for video receiver and transmitter interfaces - @@ -66390,7 +71050,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/video-inte +This file has moved to video-interfaces.yaml and video-interface-devices.yaml. diff -Naur --no-dereference a/Documentation/devicetree/bindings/media/video-interfaces.yaml b/Documentation/devicetree/bindings/media/video-interfaces.yaml --- a/Documentation/devicetree/bindings/media/video-interfaces.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/media/video-interfaces.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/media/video-interfaces.yaml 2024-11-24 20:19:38.084228667 -0500 @@ -0,0 +1,217 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -66772,7 +71432,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/memory-controlle - }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/memory-controllers/ti,gpmc-child.yaml b/Documentation/devicetree/bindings/memory-controllers/ti,gpmc-child.yaml --- a/Documentation/devicetree/bindings/memory-controllers/ti,gpmc-child.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/memory-controllers/ti,gpmc-child.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/memory-controllers/ti,gpmc-child.yaml 2024-11-24 20:19:38.084228667 -0500 @@ -0,0 +1,245 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -67021,7 +71681,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/memory-controlle +additionalProperties: true diff -Naur --no-dereference a/Documentation/devicetree/bindings/memory-controllers/ti,gpmc.yaml b/Documentation/devicetree/bindings/memory-controllers/ti,gpmc.yaml --- a/Documentation/devicetree/bindings/memory-controllers/ti,gpmc.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/memory-controllers/ti,gpmc.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/memory-controllers/ti,gpmc.yaml 2024-11-24 20:19:38.084228667 -0500 @@ -0,0 +1,182 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -67207,7 +71867,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/memory-controlle + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml b/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml --- a/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml 2024-11-24 20:19:38.084228667 -0500 @@ -0,0 +1,84 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -67295,7 +71955,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mfd/ti,am3359-ts + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/mfd/ti,j721e-system-controller.yaml b/Documentation/devicetree/bindings/mfd/ti,j721e-system-controller.yaml --- a/Documentation/devicetree/bindings/mfd/ti,j721e-system-controller.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mfd/ti,j721e-system-controller.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mfd/ti,j721e-system-controller.yaml 2024-11-24 20:19:38.084228667 -0500 @@ -50,6 +50,17 @@ specified in Documentation/devicetree/bindings/mux/reg-mux.txt @@ -67328,7 +71988,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mfd/ti,j721e-sys ... diff -Naur --no-dereference a/Documentation/devicetree/bindings/mfd/ti,tps6594x.yaml b/Documentation/devicetree/bindings/mfd/ti,tps6594x.yaml --- a/Documentation/devicetree/bindings/mfd/ti,tps6594x.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mfd/ti,tps6594x.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mfd/ti,tps6594x.yaml 2024-11-24 20:19:38.084228667 -0500 @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -67399,7 +72059,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mfd/ti,tps6594x. +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/misc/eeprom-93xx46.txt b/Documentation/devicetree/bindings/misc/eeprom-93xx46.txt --- a/Documentation/devicetree/bindings/misc/eeprom-93xx46.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/misc/eeprom-93xx46.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/misc/eeprom-93xx46.txt 2024-11-24 20:19:38.084228667 -0500 @@ -4,6 +4,7 @@ - compatible : shall be one of: "atmel,at93c46d" @@ -67410,7 +72070,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/misc/eeprom-93xx Optional properties: diff -Naur --no-dereference a/Documentation/devicetree/bindings/misc/ti,dma-buf-phys.yaml b/Documentation/devicetree/bindings/misc/ti,dma-buf-phys.yaml --- a/Documentation/devicetree/bindings/misc/ti,dma-buf-phys.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/misc/ti,dma-buf-phys.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/misc/ti,dma-buf-phys.yaml 2024-11-24 20:19:38.084228667 -0500 @@ -0,0 +1,39 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +# Copyright (C) 2020 Texas Instruments Incorporated - https://www.ti.com/ @@ -67453,7 +72113,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/misc/ti,dma-buf- + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/mmc/sdhci-am654.yaml b/Documentation/devicetree/bindings/mmc/sdhci-am654.yaml --- a/Documentation/devicetree/bindings/mmc/sdhci-am654.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mmc/sdhci-am654.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mmc/sdhci-am654.yaml 2024-11-24 20:19:38.084228667 -0500 @@ -15,12 +15,20 @@ properties: @@ -67812,7 +72472,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mtd/gpmc-onenand - }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt b/Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt --- a/Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt 2024-11-24 20:19:38.084228667 -0500 @@ -13,7 +13,7 @@ - mux-controls : phandle to the multiplexer that controls selection of HBMC vs OSPI inside Flash SubSystem (FSS). Default is OSPI, @@ -67824,7 +72484,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mtd/ti,am654-hbm Example: diff -Naur --no-dereference a/Documentation/devicetree/bindings/mtd/ti,gpmc-nand.yaml b/Documentation/devicetree/bindings/mtd/ti,gpmc-nand.yaml --- a/Documentation/devicetree/bindings/mtd/ti,gpmc-nand.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mtd/ti,gpmc-nand.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mtd/ti,gpmc-nand.yaml 2024-11-24 20:19:38.084228667 -0500 @@ -0,0 +1,124 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -67952,7 +72612,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mtd/ti,gpmc-nand + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/mtd/ti,gpmc-onenand.yaml b/Documentation/devicetree/bindings/mtd/ti,gpmc-onenand.yaml --- a/Documentation/devicetree/bindings/mtd/ti,gpmc-onenand.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mtd/ti,gpmc-onenand.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mtd/ti,gpmc-onenand.yaml 2024-11-24 20:19:38.084228667 -0500 @@ -0,0 +1,81 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -68037,7 +72697,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mtd/ti,gpmc-onen + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/adi,adg792a.txt b/Documentation/devicetree/bindings/mux/adi,adg792a.txt --- a/Documentation/devicetree/bindings/mux/adi,adg792a.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mux/adi,adg792a.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mux/adi,adg792a.txt 2024-11-24 20:19:38.084228667 -0500 @@ -5,7 +5,7 @@ - #mux-control-cells : <0> if parallel (the three muxes are bound together with a single mux controller controlling all three muxes), or <1> if @@ -68049,7 +72709,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/adi,adg792a. - gpio-controller : if present, #gpio-cells below is required. diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/adi,adgs1408.txt b/Documentation/devicetree/bindings/mux/adi,adgs1408.txt --- a/Documentation/devicetree/bindings/mux/adi,adgs1408.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mux/adi,adgs1408.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mux/adi,adgs1408.txt 2024-11-24 20:19:38.084228667 -0500 @@ -4,7 +4,7 @@ - compatible : Should be one of * "adi,adgs1408" @@ -68134,7 +72794,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/gpio-mux.txt - }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/gpio-mux.yaml b/Documentation/devicetree/bindings/mux/gpio-mux.yaml --- a/Documentation/devicetree/bindings/mux/gpio-mux.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mux/gpio-mux.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mux/gpio-mux.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -0,0 +1,99 @@ +# SPDX-License-Identifier: GPL-2.0 +%YAML 1.2 @@ -68237,7 +72897,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/gpio-mux.yam +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/mux-consumer.yaml b/Documentation/devicetree/bindings/mux/mux-consumer.yaml --- a/Documentation/devicetree/bindings/mux/mux-consumer.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mux/mux-consumer.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mux/mux-consumer.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: GPL-2.0 +%YAML 1.2 @@ -68469,7 +73129,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/mux-controll - }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/mux-controller.yaml b/Documentation/devicetree/bindings/mux/mux-controller.yaml --- a/Documentation/devicetree/bindings/mux/mux-controller.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mux/mux-controller.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mux/mux-controller.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -0,0 +1,206 @@ +# SPDX-License-Identifier: GPL-2.0 +%YAML 1.2 @@ -68812,7 +73472,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/reg-mux.txt -}; diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/reg-mux.yaml b/Documentation/devicetree/bindings/mux/reg-mux.yaml --- a/Documentation/devicetree/bindings/mux/reg-mux.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/mux/reg-mux.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/mux/reg-mux.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -0,0 +1,143 @@ +# SPDX-License-Identifier: GPL-2.0 +%YAML 1.2 @@ -68959,7 +73619,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/mux/reg-mux.yaml +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/can/bosch,m_can.yaml b/Documentation/devicetree/bindings/net/can/bosch,m_can.yaml --- a/Documentation/devicetree/bindings/net/can/bosch,m_can.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/net/can/bosch,m_can.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/net/can/bosch,m_can.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -106,9 +106,18 @@ maximum: 32 maxItems: 1 @@ -68981,7 +73641,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/can/bosch,m_ - reg diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ethernet-controller.yaml b/Documentation/devicetree/bindings/net/ethernet-controller.yaml --- a/Documentation/devicetree/bindings/net/ethernet-controller.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/net/ethernet-controller.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/net/ethernet-controller.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -68,6 +68,7 @@ - tbi - rev-mii @@ -69093,7 +73753,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/gpmc-eth.txt -}; diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/mdio-mux-multiplexer.txt b/Documentation/devicetree/bindings/net/mdio-mux-multiplexer.txt --- a/Documentation/devicetree/bindings/net/mdio-mux-multiplexer.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/net/mdio-mux-multiplexer.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/net/mdio-mux-multiplexer.txt 2024-11-24 20:19:38.085228669 -0500 @@ -14,7 +14,7 @@ bus. @@ -69105,7 +73765,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/mdio-mux-mul Example: diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,cpsw-virt-mac.txt b/Documentation/devicetree/bindings/net/ti,cpsw-virt-mac.txt --- a/Documentation/devicetree/bindings/net/ti,cpsw-virt-mac.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/net/ti,cpsw-virt-mac.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/net/ti,cpsw-virt-mac.txt 2024-11-24 20:19:38.085228669 -0500 @@ -0,0 +1,55 @@ +TI J721E VIRT CPSWxg Ethernet mac +====================================== @@ -69164,7 +73824,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,cpsw-virt + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,icssg-prueth.txt b/Documentation/devicetree/bindings/net/ti,icssg-prueth.txt --- a/Documentation/devicetree/bindings/net/ti,icssg-prueth.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/net/ti,icssg-prueth.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/net/ti,icssg-prueth.txt 2024-11-24 20:19:38.085228669 -0500 @@ -0,0 +1,126 @@ +Texas Instruments ICSSG PRUSS Ethernet +====================================== @@ -69294,7 +73954,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,icssg-pru + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,icss-iep.yaml b/Documentation/devicetree/bindings/net/ti,icss-iep.yaml --- a/Documentation/devicetree/bindings/net/ti,icss-iep.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/net/ti,icss-iep.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/net/ti,icss-iep.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -0,0 +1,39 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -69337,7 +73997,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,icss-iep. + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml b/Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml --- a/Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -4,7 +4,7 @@ $id: http://devicetree.org/schemas/net/ti,k3-am654-cpsw-nuss.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# @@ -69592,7 +74252,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,k3-am654- "^mdio@[0-9a-f]+$": diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,k3-am654-cpts.yaml b/Documentation/devicetree/bindings/net/ti,k3-am654-cpts.yaml --- a/Documentation/devicetree/bindings/net/ti,k3-am654-cpts.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/net/ti,k3-am654-cpts.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/net/ti,k3-am654-cpts.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -73,6 +73,13 @@ items: - const: cpts @@ -69625,7 +74285,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,k3-am654- description: CPTS reference clock multiplexer clock diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti-prueth.txt b/Documentation/devicetree/bindings/net/ti-prueth.txt --- a/Documentation/devicetree/bindings/net/ti-prueth.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/net/ti-prueth.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/net/ti-prueth.txt 2024-11-24 20:19:38.085228669 -0500 @@ -0,0 +1,92 @@ +Texas Instruments PRUSS Ethernet MAC +==================================== @@ -69721,7 +74381,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti-prueth.tx + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,pruss-ecap.yaml b/Documentation/devicetree/bindings/net/ti,pruss-ecap.yaml --- a/Documentation/devicetree/bindings/net/ti,pruss-ecap.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/net/ti,pruss-ecap.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/net/ti,pruss-ecap.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -0,0 +1,37 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -69762,7 +74422,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/net/ti,pruss-eca + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/pci/cdns-pcie-ep.yaml b/Documentation/devicetree/bindings/pci/cdns-pcie-ep.yaml --- a/Documentation/devicetree/bindings/pci/cdns-pcie-ep.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/pci/cdns-pcie-ep.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/pci/cdns-pcie-ep.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -20,7 +20,4 @@ maximum: 32 default: 32 @@ -69773,7 +74433,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/pci/cdns-pcie-ep additionalProperties: true diff -Naur --no-dereference a/Documentation/devicetree/bindings/pci/pci-ep.yaml b/Documentation/devicetree/bindings/pci/pci-ep.yaml --- a/Documentation/devicetree/bindings/pci/pci-ep.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/pci/pci-ep.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/pci/pci-ep.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -23,6 +23,13 @@ default: 1 maximum: 255 @@ -69790,7 +74450,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/pci/pci-ep.yaml enum: [ 1, 2, 3, 4 ] diff -Naur --no-dereference a/Documentation/devicetree/bindings/pci/ti,am65-pci-ep.yaml b/Documentation/devicetree/bindings/pci/ti,am65-pci-ep.yaml --- a/Documentation/devicetree/bindings/pci/ti,am65-pci-ep.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/pci/ti,am65-pci-ep.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/pci/ti,am65-pci-ep.yaml 2024-11-24 20:19:38.085228669 -0500 @@ -0,0 +1,96 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ @@ -69890,7 +74550,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/pci/ti,am65-pci- + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/pci/ti,am65-pci-host.yaml b/Documentation/devicetree/bindings/pci/ti,am65-pci-host.yaml --- a/Documentation/devicetree/bindings/pci/ti,am65-pci-host.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/pci/ti,am65-pci-host.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/pci/ti,am65-pci-host.yaml 2024-11-24 20:19:38.086228670 -0500 @@ -0,0 +1,131 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ @@ -70025,7 +74685,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/pci/ti,am65-pci- + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml b/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml --- a/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml 2024-11-24 20:19:38.086228670 -0500 @@ -15,8 +15,16 @@ properties: @@ -70087,7 +74747,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/pci/ti,j721e-pci phys = <&serdes0_pcie_link>; diff -Naur --no-dereference a/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml b/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml --- a/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml 2024-11-24 20:19:38.086228670 -0500 @@ -15,8 +15,16 @@ properties: @@ -70229,7 +74889,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/cdns,dphy.tx - }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/cdns,dphy.yaml b/Documentation/devicetree/bindings/phy/cdns,dphy.yaml --- a/Documentation/devicetree/bindings/phy/cdns,dphy.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/phy/cdns,dphy.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/phy/cdns,dphy.yaml 2024-11-24 20:19:38.086228670 -0500 @@ -0,0 +1,58 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -70365,7 +75025,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/phy-cadence- - }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/phy-cadence-sierra.yaml b/Documentation/devicetree/bindings/phy/phy-cadence-sierra.yaml --- a/Documentation/devicetree/bindings/phy/phy-cadence-sierra.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/phy/phy-cadence-sierra.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/phy/phy-cadence-sierra.yaml 2024-11-24 20:19:38.086228670 -0500 @@ -0,0 +1,167 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 @@ -70536,7 +75196,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/phy-cadence- + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/phy-cadence-torrent.yaml b/Documentation/devicetree/bindings/phy/phy-cadence-torrent.yaml --- a/Documentation/devicetree/bindings/phy/phy-cadence-torrent.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/phy/phy-cadence-torrent.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/phy/phy-cadence-torrent.yaml 2024-11-24 20:19:38.086228670 -0500 @@ -21,6 +21,7 @@ enum: - cdns,torrent-phy @@ -70588,7 +75248,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/phy-cadence- #address-cells = <2>; diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/ti,phy-gmii-sel.yaml b/Documentation/devicetree/bindings/phy/ti,phy-gmii-sel.yaml --- a/Documentation/devicetree/bindings/phy/ti,phy-gmii-sel.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/phy/ti,phy-gmii-sel.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/phy/ti,phy-gmii-sel.yaml 2024-11-24 20:19:38.086228670 -0500 @@ -53,12 +53,46 @@ - ti,am43xx-phy-gmii-sel - ti,dm814-phy-gmii-sel @@ -70687,7 +75347,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/ti,phy-gmii- #phy-cells = <2>; diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/ti,phy-j721e-wiz.yaml b/Documentation/devicetree/bindings/phy/ti,phy-j721e-wiz.yaml --- a/Documentation/devicetree/bindings/phy/ti,phy-j721e-wiz.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/phy/ti,phy-j721e-wiz.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/phy/ti,phy-j721e-wiz.yaml 2024-11-24 20:19:38.086228670 -0500 @@ -15,19 +15,25 @@ enum: - ti,j721e-wiz-16g @@ -70779,7 +75439,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/ti,phy-j721e examples: diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/ti,tcan104x-can.yaml b/Documentation/devicetree/bindings/phy/ti,tcan104x-can.yaml --- a/Documentation/devicetree/bindings/phy/ti,tcan104x-can.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/phy/ti,tcan104x-can.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/phy/ti,tcan104x-can.yaml 2024-11-24 20:19:38.086228670 -0500 @@ -0,0 +1,63 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -70846,7 +75506,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/phy/ti,tcan104x- + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/pinctrl/aspeed,ast2400-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/aspeed,ast2400-pinctrl.yaml --- a/Documentation/devicetree/bindings/pinctrl/aspeed,ast2400-pinctrl.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/pinctrl/aspeed,ast2400-pinctrl.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/pinctrl/aspeed,ast2400-pinctrl.yaml 2024-11-24 20:19:38.086228670 -0500 @@ -63,7 +63,7 @@ reg = <0x1e6e2000 0x1a8>; @@ -70858,7 +75518,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/pinctrl/aspeed,a function = "I2C3"; diff -Naur --no-dereference a/Documentation/devicetree/bindings/pinctrl/aspeed,ast2500-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/aspeed,ast2500-pinctrl.yaml --- a/Documentation/devicetree/bindings/pinctrl/aspeed,ast2500-pinctrl.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/pinctrl/aspeed,ast2500-pinctrl.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/pinctrl/aspeed,ast2500-pinctrl.yaml 2024-11-24 20:19:38.086228670 -0500 @@ -81,7 +81,7 @@ reg = <0x1e6e2000 0x1a8>; @@ -70870,7 +75530,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/pinctrl/aspeed,a pinctrl_i2c3_default: i2c3_default { diff -Naur --no-dereference a/Documentation/devicetree/bindings/pinctrl/aspeed,ast2600-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/aspeed,ast2600-pinctrl.yaml --- a/Documentation/devicetree/bindings/pinctrl/aspeed,ast2600-pinctrl.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/pinctrl/aspeed,ast2600-pinctrl.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/pinctrl/aspeed,ast2600-pinctrl.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -95,7 +95,7 @@ reg = <0x1e6e2000 0xf6c>; @@ -70882,7 +75542,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/pinctrl/aspeed,a function = "PWM10"; diff -Naur --no-dereference a/Documentation/devicetree/bindings/ptp/ptp-idtcm.yaml b/Documentation/devicetree/bindings/ptp/ptp-idtcm.yaml --- a/Documentation/devicetree/bindings/ptp/ptp-idtcm.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/ptp/ptp-idtcm.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/ptp/ptp-idtcm.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -59,9 +59,7 @@ examples: @@ -70951,7 +75611,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/pwm/pwm-tiecap.t -}; diff -Naur --no-dereference a/Documentation/devicetree/bindings/pwm/pwm-tiecap.yaml b/Documentation/devicetree/bindings/pwm/pwm-tiecap.yaml --- a/Documentation/devicetree/bindings/pwm/pwm-tiecap.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/pwm/pwm-tiecap.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/pwm/pwm-tiecap.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -0,0 +1,64 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -71073,7 +75733,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm -}; diff -Naur --no-dereference a/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.yaml b/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.yaml --- a/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -0,0 +1,65 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -71142,7 +75802,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/regulator/ti,tps65219.yaml b/Documentation/devicetree/bindings/regulator/ti,tps65219.yaml --- a/Documentation/devicetree/bindings/regulator/ti,tps65219.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/regulator/ti,tps65219.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/regulator/ti,tps65219.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -0,0 +1,179 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 @@ -71325,7 +75985,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/regulator/ti,tps + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,k3-dsp-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/ti,k3-dsp-rproc.yaml --- a/Documentation/devicetree/bindings/remoteproc/ti,k3-dsp-rproc.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/remoteproc/ti,k3-dsp-rproc.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/remoteproc/ti,k3-dsp-rproc.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -31,11 +31,15 @@ properties: compatible: @@ -71354,7 +76014,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,k3 reg: diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,k3-m4f-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/ti,k3-m4f-rproc.yaml --- a/Documentation/devicetree/bindings/remoteproc/ti,k3-m4f-rproc.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/remoteproc/ti,k3-m4f-rproc.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/remoteproc/ti,k3-m4f-rproc.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -0,0 +1,121 @@ +# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause) +%YAML 1.2 @@ -71479,7 +76139,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,k3 +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,k3-r5f-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/ti,k3-r5f-rproc.yaml --- a/Documentation/devicetree/bindings/remoteproc/ti,k3-r5f-rproc.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/remoteproc/ti,k3-r5f-rproc.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/remoteproc/ti,k3-r5f-rproc.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -14,8 +14,15 @@ processor subsystems/clusters (R5FSS). The dual core cluster can be used either in a LockStep mode providing safety/fault tolerance features or in a @@ -71590,7 +76250,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,k3 - compatible diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,omap-remoteproc.yaml b/Documentation/devicetree/bindings/remoteproc/ti,omap-remoteproc.yaml --- a/Documentation/devicetree/bindings/remoteproc/ti,omap-remoteproc.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/remoteproc/ti,omap-remoteproc.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/remoteproc/ti,omap-remoteproc.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -65,7 +65,7 @@ OMAP Mailbox specifier denoting the sub-mailbox, to be used for communication with the remote processor. The specifier format is @@ -71602,7 +76262,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,om diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,pru-consumer.yaml b/Documentation/devicetree/bindings/remoteproc/ti,pru-consumer.yaml --- a/Documentation/devicetree/bindings/remoteproc/ti,pru-consumer.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/remoteproc/ti,pru-consumer.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/remoteproc/ti,pru-consumer.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -0,0 +1,64 @@ +# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause) +%YAML 1.2 @@ -71670,7 +76330,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,pr + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,pru-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/ti,pru-rproc.yaml --- a/Documentation/devicetree/bindings/remoteproc/ti,pru-rproc.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/remoteproc/ti,pru-rproc.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/remoteproc/ti,pru-rproc.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -0,0 +1,249 @@ +# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause) +%YAML 1.2 @@ -71923,7 +76583,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/remoteproc/ti,pr + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/rtc/ti,k3-rtc.yaml b/Documentation/devicetree/bindings/rtc/ti,k3-rtc.yaml --- a/Documentation/devicetree/bindings/rtc/ti,k3-rtc.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/rtc/ti,k3-rtc.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/rtc/ti,k3-rtc.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -71989,7 +76649,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/rtc/ti,k3-rtc.ya + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/serial/omap_serial.txt b/Documentation/devicetree/bindings/serial/omap_serial.txt --- a/Documentation/devicetree/bindings/serial/omap_serial.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/serial/omap_serial.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/serial/omap_serial.txt 2024-11-24 20:19:38.087228672 -0500 @@ -1,6 +1,7 @@ OMAP UART controller @@ -72000,7 +76660,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/serial/omap_seri - compatible : should be "ti,omap2-uart" for OMAP2 controllers diff -Naur --no-dereference a/Documentation/devicetree/bindings/serial/ti,pruss-uart.yaml b/Documentation/devicetree/bindings/serial/ti,pruss-uart.yaml --- a/Documentation/devicetree/bindings/serial/ti,pruss-uart.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/serial/ti,pruss-uart.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/serial/ti,pruss-uart.yaml 2024-11-24 20:19:38.087228672 -0500 @@ -0,0 +1,54 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -72058,7 +76718,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/serial/ti,pruss- + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/serial/ti,pru-swuart.txt b/Documentation/devicetree/bindings/serial/ti,pru-swuart.txt --- a/Documentation/devicetree/bindings/serial/ti,pru-swuart.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/serial/ti,pru-swuart.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/serial/ti,pru-swuart.txt 2024-11-24 20:19:38.087228672 -0500 @@ -0,0 +1,60 @@ +PRU Software UART on TI SoCs + @@ -72122,7 +76782,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/serial/ti,pru-sw + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/soc/ti/keystone-dsp-mem.txt b/Documentation/devicetree/bindings/soc/ti/keystone-dsp-mem.txt --- a/Documentation/devicetree/bindings/soc/ti/keystone-dsp-mem.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/soc/ti/keystone-dsp-mem.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/soc/ti/keystone-dsp-mem.txt 2024-11-24 20:19:38.088228674 -0500 @@ -0,0 +1,73 @@ +TI Keystone DSP Memory Mapping +============================== @@ -72199,7 +76859,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/soc/ti/keystone- + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/soc/ti/ti,j721e-pat.yaml b/Documentation/devicetree/bindings/soc/ti/ti,j721e-pat.yaml --- a/Documentation/devicetree/bindings/soc/ti/ti,j721e-pat.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/soc/ti/ti,j721e-pat.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/soc/ti/ti,j721e-pat.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -0,0 +1,60 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +# Copyright (C) 2020 Texas Instruments Incorporated - https://www.ti.com/ @@ -72263,7 +76923,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/soc/ti/ti,j721e- + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/soc/ti/ti,pruss.yaml b/Documentation/devicetree/bindings/soc/ti/ti,pruss.yaml --- a/Documentation/devicetree/bindings/soc/ti/ti,pruss.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/soc/ti/ti,pruss.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/soc/ti/ti,pruss.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -68,6 +68,8 @@ - ti,k2g-pruss # for 66AK2G SoC family - ti,am654-icssg # for K3 AM65x SoC family @@ -72419,7 +77079,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/soc/ti/ti,pruss. reg = <0x32400 0x90>; diff -Naur --no-dereference a/Documentation/devicetree/bindings/soc/ti/wkup_m3_ipc.txt b/Documentation/devicetree/bindings/soc/ti/wkup_m3_ipc.txt --- a/Documentation/devicetree/bindings/soc/ti/wkup_m3_ipc.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/soc/ti/wkup_m3_ipc.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/soc/ti/wkup_m3_ipc.txt 2024-11-24 20:19:38.088228674 -0500 @@ -55,3 +55,94 @@ ... }; @@ -72517,7 +77177,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/soc/ti/wkup_m3_i + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/sound/ti,j721e-cpb-audio.yaml b/Documentation/devicetree/bindings/sound/ti,j721e-cpb-audio.yaml --- a/Documentation/devicetree/bindings/sound/ti,j721e-cpb-audio.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/sound/ti,j721e-cpb-audio.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/sound/ti,j721e-cpb-audio.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -1,4 +1,6 @@ # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) 2020 Texas Instruments Incorporated @@ -72536,7 +77196,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/sound/ti,j721e-c The audio support on the board is using pcm3168a codec connected to McASP10 diff -Naur --no-dereference a/Documentation/devicetree/bindings/sound/ti,j721e-cpb-ivi-audio.yaml b/Documentation/devicetree/bindings/sound/ti,j721e-cpb-ivi-audio.yaml --- a/Documentation/devicetree/bindings/sound/ti,j721e-cpb-ivi-audio.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/sound/ti,j721e-cpb-ivi-audio.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/sound/ti,j721e-cpb-ivi-audio.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -1,4 +1,6 @@ # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) 2020 Texas Instruments Incorporated @@ -72555,7 +77215,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/sound/ti,j721e-c The Infotainment board plugs into the Common Processor Board, the support of the diff -Naur --no-dereference a/Documentation/devicetree/bindings/sound/ti,tlv320aic3x.yaml b/Documentation/devicetree/bindings/sound/ti,tlv320aic3x.yaml --- a/Documentation/devicetree/bindings/sound/ti,tlv320aic3x.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/sound/ti,tlv320aic3x.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/sound/ti,tlv320aic3x.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -0,0 +1,158 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +# Copyright (C) 2022 Texas Instruments Incorporated @@ -72853,7 +77513,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/spi/omap-spi.txt -}; diff -Naur --no-dereference a/Documentation/devicetree/bindings/spi/omap-spi.yaml b/Documentation/devicetree/bindings/spi/omap-spi.yaml --- a/Documentation/devicetree/bindings/spi/omap-spi.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/spi/omap-spi.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/spi/omap-spi.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -0,0 +1,117 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -72974,7 +77634,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/spi/omap-spi.yam + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/sram/sram.yaml b/Documentation/devicetree/bindings/sram/sram.yaml --- a/Documentation/devicetree/bindings/sram/sram.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/sram/sram.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/sram/sram.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -108,6 +108,14 @@ manipulation of the page attributes. type: boolean @@ -72992,7 +77652,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/sram/sram.yaml b The name for the reserved partition, if omitted, the label is taken diff -Naur --no-dereference a/Documentation/devicetree/bindings/thermal/ti,j72xx-thermal.yaml b/Documentation/devicetree/bindings/thermal/ti,j72xx-thermal.yaml --- a/Documentation/devicetree/bindings/thermal/ti,j72xx-thermal.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/thermal/ti,j72xx-thermal.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/thermal/ti,j72xx-thermal.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -0,0 +1,63 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 @@ -73059,7 +77719,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/thermal/ti,j72xx +... diff -Naur --no-dereference a/Documentation/devicetree/bindings/timer/ti,keystone-timer.txt b/Documentation/devicetree/bindings/timer/ti,keystone-timer.txt --- a/Documentation/devicetree/bindings/timer/ti,keystone-timer.txt 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/timer/ti,keystone-timer.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/timer/ti,keystone-timer.txt 2024-11-24 20:19:38.088228674 -0500 @@ -14,7 +14,7 @@ Required properties: @@ -73071,7 +77731,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/timer/ti,keyston - clocks : the clock feeding the timer clock. diff -Naur --no-dereference a/Documentation/devicetree/bindings/usb/ti,am62-usb.yaml b/Documentation/devicetree/bindings/usb/ti,am62-usb.yaml --- a/Documentation/devicetree/bindings/usb/ti,am62-usb.yaml 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/bindings/usb/ti,am62-usb.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/usb/ti,am62-usb.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -0,0 +1,104 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 @@ -73179,7 +77839,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/usb/ti,am62-usb. + }; diff -Naur --no-dereference a/Documentation/devicetree/bindings/usb/ti,j721e-usb.yaml b/Documentation/devicetree/bindings/usb/ti,j721e-usb.yaml --- a/Documentation/devicetree/bindings/usb/ti,j721e-usb.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/usb/ti,j721e-usb.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/usb/ti,j721e-usb.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -11,12 +11,18 @@ properties: @@ -73211,7 +77871,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/usb/ti,j721e-usb type: object diff -Naur --no-dereference a/Documentation/devicetree/bindings/usb/ti,tps6598x.yaml b/Documentation/devicetree/bindings/usb/ti,tps6598x.yaml --- a/Documentation/devicetree/bindings/usb/ti,tps6598x.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/usb/ti,tps6598x.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/usb/ti,tps6598x.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -21,6 +21,8 @@ interrupts: @@ -73232,7 +77892,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/usb/ti,tps6598x. diff -Naur --no-dereference a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -669,6 +669,8 @@ description: Micron Technology Inc. "^microsoft,.*": @@ -73244,7 +77904,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/vendor-prefixes. "^mikrotik,.*": diff -Naur --no-dereference a/Documentation/devicetree/bindings/watchdog/ti,rti-wdt.yaml b/Documentation/devicetree/bindings/watchdog/ti,rti-wdt.yaml --- a/Documentation/devicetree/bindings/watchdog/ti,rti-wdt.yaml 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/devicetree/bindings/watchdog/ti,rti-wdt.yaml 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/bindings/watchdog/ti,rti-wdt.yaml 2024-11-24 20:19:38.088228674 -0500 @@ -57,8 +57,8 @@ */ #include @@ -73258,7 +77918,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/bindings/watchdog/ti,rti- power-domains = <&k3_pds 252 TI_SCI_PD_EXCLUSIVE>; diff -Naur --no-dereference a/Documentation/devicetree/configfs-overlays.txt b/Documentation/devicetree/configfs-overlays.txt --- a/Documentation/devicetree/configfs-overlays.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/devicetree/configfs-overlays.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/devicetree/configfs-overlays.txt 2024-11-24 20:19:38.088228674 -0500 @@ -0,0 +1,31 @@ +Howto use the configfs overlay interface. + @@ -73293,7 +77953,7 @@ diff -Naur --no-dereference a/Documentation/devicetree/configfs-overlays.txt b/D +make sense for developers (since it avoids problems with namespaces). diff -Naur --no-dereference a/Documentation/driver-api/dmaengine/client.rst b/Documentation/driver-api/dmaengine/client.rst --- a/Documentation/driver-api/dmaengine/client.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/driver-api/dmaengine/client.rst 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/driver-api/dmaengine/client.rst 2024-11-24 20:19:38.089228676 -0500 @@ -120,7 +120,9 @@ .. code-block:: c @@ -73307,7 +77967,7 @@ diff -Naur --no-dereference a/Documentation/driver-api/dmaengine/client.rst b/Do diff -Naur --no-dereference a/Documentation/driver-api/driver-model/devres.rst b/Documentation/driver-api/driver-model/devres.rst --- a/Documentation/driver-api/driver-model/devres.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/driver-api/driver-model/devres.rst 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/driver-api/driver-model/devres.rst 2024-11-24 20:19:38.089228676 -0500 @@ -366,6 +366,7 @@ devm_mux_chip_alloc() devm_mux_chip_register() @@ -73318,7 +77978,7 @@ diff -Naur --no-dereference a/Documentation/driver-api/driver-model/devres.rst b devm_alloc_etherdev() diff -Naur --no-dereference a/Documentation/driver-api/generic-counter.rst b/Documentation/driver-api/generic-counter.rst --- a/Documentation/driver-api/generic-counter.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/driver-api/generic-counter.rst 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/driver-api/generic-counter.rst 2024-11-24 20:19:38.089228676 -0500 @@ -223,19 +223,6 @@ on the core idea of what the data and process represent (e.g. position as interpreted from quadrature encoding data). @@ -73729,9 +78389,130 @@ diff -Naur --no-dereference a/Documentation/driver-api/generic-counter.rst b/Doc +Userspace applications can then execute a ``read`` operation (optionally +calling ``poll`` first) on the Counter character device node to retrieve +``struct counter_event`` elements with the desired data. +diff -Naur --no-dereference a/Documentation/driver-api/io-mapping.rst b/Documentation/driver-api/io-mapping.rst +--- a/Documentation/driver-api/io-mapping.rst 2023-02-15 11:22:27.000000000 -0500 ++++ b/Documentation/driver-api/io-mapping.rst 2024-11-24 20:19:38.089228676 -0500 +@@ -20,78 +20,64 @@ + mappable, while 'size' indicates how large a mapping region to + enable. Both are in bytes. + +-This _wc variant provides a mapping which may only be used +-with the io_mapping_map_atomic_wc or io_mapping_map_wc. ++This _wc variant provides a mapping which may only be used with ++io_mapping_map_local_wc() or io_mapping_map_wc(). + +-With this mapping object, individual pages can be mapped either atomically +-or not, depending on the necessary scheduling environment. Of course, atomic +-maps are more efficient:: ++With this mapping object, individual pages can be mapped either temporarily ++or long term, depending on the requirements. Of course, temporary maps are ++more efficient. + +- void *io_mapping_map_atomic_wc(struct io_mapping *mapping, +- unsigned long offset) ++ void *io_mapping_map_local_wc(struct io_mapping *mapping, ++ unsigned long offset) + +-'offset' is the offset within the defined mapping region. +-Accessing addresses beyond the region specified in the +-creation function yields undefined results. Using an offset +-which is not page aligned yields an undefined result. The +-return value points to a single page in CPU address space. ++'offset' is the offset within the defined mapping region. Accessing ++addresses beyond the region specified in the creation function yields ++undefined results. Using an offset which is not page aligned yields an ++undefined result. The return value points to a single page in CPU address ++space. + +-This _wc variant returns a write-combining map to the +-page and may only be used with mappings created by +-io_mapping_create_wc ++This _wc variant returns a write-combining map to the page and may only be ++used with mappings created by io_mapping_create_wc() + +-Note that the task may not sleep while holding this page +-mapped. ++Temporary mappings are only valid in the context of the caller. The mapping ++is not guaranteed to be globaly visible. + +-:: ++io_mapping_map_local_wc() has a side effect on X86 32bit as it disables ++migration to make the mapping code work. No caller can rely on this side ++effect. + +- void io_mapping_unmap_atomic(void *vaddr) ++Nested mappings need to be undone in reverse order because the mapping ++code uses a stack for keeping track of them:: + +-'vaddr' must be the value returned by the last +-io_mapping_map_atomic_wc call. This unmaps the specified +-page and allows the task to sleep once again. ++ addr1 = io_mapping_map_local_wc(map1, offset1); ++ addr2 = io_mapping_map_local_wc(map2, offset2); ++ ... ++ io_mapping_unmap_local(addr2); ++ io_mapping_unmap_local(addr1); + +-If you need to sleep while holding the lock, you can use the non-atomic +-variant, although they may be significantly slower. ++The mappings are released with:: + +-:: ++ void io_mapping_unmap_local(void *vaddr) ++ ++'vaddr' must be the value returned by the last io_mapping_map_local_wc() ++call. This unmaps the specified mapping and undoes eventual side effects of ++the mapping function. ++ ++If you need to sleep while holding a mapping, you can use the regular ++variant, although this may be significantly slower:: + + void *io_mapping_map_wc(struct io_mapping *mapping, + unsigned long offset) + +-This works like io_mapping_map_atomic_wc except it allows +-the task to sleep while holding the page mapped. +- ++This works like io_mapping_map_local_wc() except it has no side effects and ++the pointer is globaly visible. + +-:: ++The mappings are released with:: + + void io_mapping_unmap(void *vaddr) + +-This works like io_mapping_unmap_atomic, except it is used +-for pages mapped with io_mapping_map_wc. ++Use for pages mapped with io_mapping_map_wc(). + + At driver close time, the io_mapping object must be freed:: + + void io_mapping_free(struct io_mapping *mapping) +- +-Current Implementation +-====================== +- +-The initial implementation of these functions uses existing mapping +-mechanisms and so provides only an abstraction layer and no new +-functionality. +- +-On 64-bit processors, io_mapping_create_wc calls ioremap_wc for the whole +-range, creating a permanent kernel-visible mapping to the resource. The +-map_atomic and map functions add the requested offset to the base of the +-virtual address returned by ioremap_wc. +- +-On 32-bit processors with HIGHMEM defined, io_mapping_map_atomic_wc uses +-kmap_atomic_pfn to map the specified page in an atomic fashion; +-kmap_atomic_pfn isn't really supposed to be used with device pages, but it +-provides an efficient mapping for this usage. +- +-On 32-bit processors without HIGHMEM defined, io_mapping_map_atomic_wc and +-io_mapping_map_wc both use ioremap_wc, a terribly inefficient function which +-performs an IPI to inform all processors about the new mapping. This results +-in a significant performance penalty. diff -Naur --no-dereference a/Documentation/driver-api/media/mc-core.rst b/Documentation/driver-api/media/mc-core.rst --- a/Documentation/driver-api/media/mc-core.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/driver-api/media/mc-core.rst 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/driver-api/media/mc-core.rst 2024-11-24 20:19:38.089228676 -0500 @@ -167,10 +167,13 @@ :c:func:`media_graph_walk_start()` @@ -73766,7 +78547,7 @@ diff -Naur --no-dereference a/Documentation/driver-api/media/mc-core.rst b/Docum pipeline through the struct media_entity diff -Naur --no-dereference a/Documentation/driver-api/media/v4l2-subdev.rst b/Documentation/driver-api/media/v4l2-subdev.rst --- a/Documentation/driver-api/media/v4l2-subdev.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/driver-api/media/v4l2-subdev.rst 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/driver-api/media/v4l2-subdev.rst 2024-11-24 20:19:38.089228676 -0500 @@ -491,6 +491,42 @@ :c:type:`i2c_board_info` structure using the ``client_type`` and the ``addr`` to fill it. @@ -73812,7 +78593,7 @@ diff -Naur --no-dereference a/Documentation/driver-api/media/v4l2-subdev.rst b/D diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/01intro.txt b/Documentation/filesystems/aufs/design/01intro.txt --- a/Documentation/filesystems/aufs/design/01intro.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/01intro.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/filesystems/aufs/design/01intro.txt 2024-11-24 20:19:38.089228676 -0500 @@ -0,0 +1,171 @@ + +# Copyright (C) 2005-2021 Junjiro R. Okajima @@ -73987,7 +78768,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/01intro.txt +about it. But currently I have implemented it in kernel space. diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/02struct.txt b/Documentation/filesystems/aufs/design/02struct.txt --- a/Documentation/filesystems/aufs/design/02struct.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/02struct.txt 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/filesystems/aufs/design/02struct.txt 2024-11-24 20:19:38.089228676 -0500 @@ -0,0 +1,258 @@ + +# Copyright (C) 2005-2021 Junjiro R. Okajima @@ -74249,7 +79030,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/02struct.txt +For this purpose, use "aumvdown" command in aufs-util.git. diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/03atomic_open.txt b/Documentation/filesystems/aufs/design/03atomic_open.txt --- a/Documentation/filesystems/aufs/design/03atomic_open.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/03atomic_open.txt 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/03atomic_open.txt 2024-11-24 20:19:38.089228676 -0500 @@ -0,0 +1,85 @@ + +# Copyright (C) 2015-2021 Junjiro R. Okajima @@ -74338,7 +79119,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/03atomic_ope + be implemented in aufs, but not all I am afraid. diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/03lookup.txt b/Documentation/filesystems/aufs/design/03lookup.txt --- a/Documentation/filesystems/aufs/design/03lookup.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/03lookup.txt 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/03lookup.txt 2024-11-24 20:19:38.089228676 -0500 @@ -0,0 +1,113 @@ + +# Copyright (C) 2005-2021 Junjiro R. Okajima @@ -74455,7 +79236,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/03lookup.txt + by over-mounting something (or another method). diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/04branch.txt b/Documentation/filesystems/aufs/design/04branch.txt --- a/Documentation/filesystems/aufs/design/04branch.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/04branch.txt 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/04branch.txt 2024-11-24 20:19:38.089228676 -0500 @@ -0,0 +1,74 @@ + +# Copyright (C) 2005-2021 Junjiro R. Okajima @@ -74533,7 +79314,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/04branch.txt + same named entry on the upper branch. diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/05wbr_policy.txt b/Documentation/filesystems/aufs/design/05wbr_policy.txt --- a/Documentation/filesystems/aufs/design/05wbr_policy.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/05wbr_policy.txt 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/05wbr_policy.txt 2024-11-24 20:19:38.090228678 -0500 @@ -0,0 +1,64 @@ + +# Copyright (C) 2005-2021 Junjiro R. Okajima @@ -74601,7 +79382,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/05wbr_policy + copyup policy. diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/06dirren.dot b/Documentation/filesystems/aufs/design/06dirren.dot --- a/Documentation/filesystems/aufs/design/06dirren.dot 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/06dirren.dot 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/06dirren.dot 2024-11-24 20:19:38.090228678 -0500 @@ -0,0 +1,31 @@ + +// to view this graph, run dot(1) command in GRAPHVIZ. @@ -74636,7 +79417,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/06dirren.dot +} diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/06dirren.txt b/Documentation/filesystems/aufs/design/06dirren.txt --- a/Documentation/filesystems/aufs/design/06dirren.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/06dirren.txt 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/06dirren.txt 2024-11-24 20:19:38.090228678 -0500 @@ -0,0 +1,102 @@ + +# Copyright (C) 2017-2021 Junjiro R. Okajima @@ -74742,7 +79523,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/06dirren.txt +equivalen to udba=reval case. diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/06fhsm.txt b/Documentation/filesystems/aufs/design/06fhsm.txt --- a/Documentation/filesystems/aufs/design/06fhsm.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/06fhsm.txt 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/06fhsm.txt 2024-11-24 20:19:38.090228678 -0500 @@ -0,0 +1,120 @@ + +# Copyright (C) 2011-2021 Junjiro R. Okajima @@ -74866,7 +79647,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/06fhsm.txt b +should restore the original file state after an error happens. diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/06mmap.txt b/Documentation/filesystems/aufs/design/06mmap.txt --- a/Documentation/filesystems/aufs/design/06mmap.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/06mmap.txt 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/06mmap.txt 2024-11-24 20:19:38.090228678 -0500 @@ -0,0 +1,72 @@ + +# Copyright (C) 2005-2021 Junjiro R. Okajima @@ -74942,7 +79723,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/06mmap.txt b +I have to give up this "looks-smater" approach. diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/06xattr.txt b/Documentation/filesystems/aufs/design/06xattr.txt --- a/Documentation/filesystems/aufs/design/06xattr.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/06xattr.txt 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/06xattr.txt 2024-11-24 20:19:38.090228678 -0500 @@ -0,0 +1,96 @@ + +# Copyright (C) 2014-2021 Junjiro R. Okajima @@ -75042,7 +79823,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/06xattr.txt +now, aufs implements the branch attributes to ignore the error. diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/07export.txt b/Documentation/filesystems/aufs/design/07export.txt --- a/Documentation/filesystems/aufs/design/07export.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/07export.txt 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/07export.txt 2024-11-24 20:19:38.090228678 -0500 @@ -0,0 +1,58 @@ + +# Copyright (C) 2005-2021 Junjiro R. Okajima @@ -75104,7 +79885,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/07export.txt + lookup_one_len(), vfs_getattr(), encode_fh() and others. diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/08shwh.txt b/Documentation/filesystems/aufs/design/08shwh.txt --- a/Documentation/filesystems/aufs/design/08shwh.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/08shwh.txt 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/08shwh.txt 2024-11-24 20:19:38.090228678 -0500 @@ -0,0 +1,52 @@ + +# Copyright (C) 2005-2021 Junjiro R. Okajima @@ -75160,7 +79941,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/08shwh.txt b +initramfs will use it to replace the old one at the next boot. diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/10dynop.txt b/Documentation/filesystems/aufs/design/10dynop.txt --- a/Documentation/filesystems/aufs/design/10dynop.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/design/10dynop.txt 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/filesystems/aufs/design/10dynop.txt 2024-11-24 20:19:38.090228678 -0500 @@ -0,0 +1,47 @@ + +# Copyright (C) 2010-2021 Junjiro R. Okajima @@ -75211,7 +79992,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/design/10dynop.txt +regular files only. diff -Naur --no-dereference a/Documentation/filesystems/aufs/README b/Documentation/filesystems/aufs/README --- a/Documentation/filesystems/aufs/README 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/filesystems/aufs/README 2024-08-28 19:44:05.588037839 -0400 ++++ b/Documentation/filesystems/aufs/README 2024-11-24 20:19:38.089228676 -0500 @@ -0,0 +1,396 @@ + +Aufs5 -- advanced multi layered unification filesystem version 5.x @@ -75611,7 +80392,7 @@ diff -Naur --no-dereference a/Documentation/filesystems/aufs/README b/Documentat +# End: ; diff -Naur --no-dereference a/Documentation/networking/device_drivers/ethernet/index.rst b/Documentation/networking/device_drivers/ethernet/index.rst --- a/Documentation/networking/device_drivers/ethernet/index.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/networking/device_drivers/ethernet/index.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/networking/device_drivers/ethernet/index.rst 2024-11-24 20:19:38.090228678 -0500 @@ -49,6 +49,7 @@ stmicro/stmmac ti/cpsw @@ -75622,7 +80403,7 @@ diff -Naur --no-dereference a/Documentation/networking/device_drivers/ethernet/i diff -Naur --no-dereference a/Documentation/networking/device_drivers/ethernet/ti/am65_nuss_cpsw_switchdev.rst b/Documentation/networking/device_drivers/ethernet/ti/am65_nuss_cpsw_switchdev.rst --- a/Documentation/networking/device_drivers/ethernet/ti/am65_nuss_cpsw_switchdev.rst 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/networking/device_drivers/ethernet/ti/am65_nuss_cpsw_switchdev.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/networking/device_drivers/ethernet/ti/am65_nuss_cpsw_switchdev.rst 2024-11-24 20:19:38.090228678 -0500 @@ -0,0 +1,143 @@ +.. SPDX-License-Identifier: GPL-2.0 + @@ -75769,7 +80550,7 @@ diff -Naur --no-dereference a/Documentation/networking/device_drivers/ethernet/t +default VLAN (default_pvid). diff -Naur --no-dereference a/Documentation/networking/devlink/am65-nuss-cpsw-switch.rst b/Documentation/networking/devlink/am65-nuss-cpsw-switch.rst --- a/Documentation/networking/devlink/am65-nuss-cpsw-switch.rst 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/networking/devlink/am65-nuss-cpsw-switch.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/networking/devlink/am65-nuss-cpsw-switch.rst 2024-11-24 20:19:38.090228678 -0500 @@ -0,0 +1,26 @@ +.. SPDX-License-Identifier: GPL-2.0 + @@ -75799,7 +80580,7 @@ diff -Naur --no-dereference a/Documentation/networking/devlink/am65-nuss-cpsw-sw + - Enable switch mode diff -Naur --no-dereference a/Documentation/networking/devlink/index.rst b/Documentation/networking/devlink/index.rst --- a/Documentation/networking/devlink/index.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/networking/devlink/index.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/networking/devlink/index.rst 2024-11-24 20:19:38.090228678 -0500 @@ -44,3 +44,4 @@ sja1105 qed @@ -75807,7 +80588,7 @@ diff -Naur --no-dereference a/Documentation/networking/devlink/index.rst b/Docum + am65-nuss-cpsw-switch diff -Naur --no-dereference a/Documentation/networking/netdev-features.rst b/Documentation/networking/netdev-features.rst --- a/Documentation/networking/netdev-features.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/networking/netdev-features.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/networking/netdev-features.rst 2024-11-24 20:19:38.090228678 -0500 @@ -182,3 +182,24 @@ be re-segmentable by GSO or TSO back to the exact original packet stream. Hardware GRO is dependent on RXCSUM since every packet successfully merged @@ -75835,7 +80616,7 @@ diff -Naur --no-dereference a/Documentation/networking/netdev-features.rst b/Doc +frames in hardware. diff -Naur --no-dereference a/Documentation/networking/phy.rst b/Documentation/networking/phy.rst --- a/Documentation/networking/phy.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/networking/phy.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/networking/phy.rst 2024-11-24 20:19:38.090228678 -0500 @@ -237,6 +237,11 @@ Some of the interface modes are described below: @@ -75881,7 +80662,7 @@ diff -Naur --no-dereference a/Documentation/networking/phy.rst b/Documentation/n diff -Naur --no-dereference a/Documentation/PCI/endpoint/function/binding/pci-ntb.rst b/Documentation/PCI/endpoint/function/binding/pci-ntb.rst --- a/Documentation/PCI/endpoint/function/binding/pci-ntb.rst 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/PCI/endpoint/function/binding/pci-ntb.rst 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/PCI/endpoint/function/binding/pci-ntb.rst 2024-11-24 20:19:38.079228658 -0500 @@ -0,0 +1,38 @@ +.. SPDX-License-Identifier: GPL-2.0 + @@ -75923,7 +80704,7 @@ diff -Naur --no-dereference a/Documentation/PCI/endpoint/function/binding/pci-nt +================ =========================================================== diff -Naur --no-dereference a/Documentation/PCI/endpoint/index.rst b/Documentation/PCI/endpoint/index.rst --- a/Documentation/PCI/endpoint/index.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/PCI/endpoint/index.rst 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/PCI/endpoint/index.rst 2024-11-24 20:19:38.079228658 -0500 @@ -11,5 +11,8 @@ pci-endpoint-cfs pci-test-function @@ -75935,7 +80716,7 @@ diff -Naur --no-dereference a/Documentation/PCI/endpoint/index.rst b/Documentati + function/binding/pci-ntb diff -Naur --no-dereference a/Documentation/PCI/endpoint/pci-endpoint-cfs.rst b/Documentation/PCI/endpoint/pci-endpoint-cfs.rst --- a/Documentation/PCI/endpoint/pci-endpoint-cfs.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/PCI/endpoint/pci-endpoint-cfs.rst 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/PCI/endpoint/pci-endpoint-cfs.rst 2024-11-24 20:19:38.079228658 -0500 @@ -43,6 +43,7 @@ .. / ... / @@ -75981,7 +80762,7 @@ diff -Naur --no-dereference a/Documentation/PCI/endpoint/pci-endpoint-cfs.rst b/ "1" is written to this field, the endpoint device will be ready to diff -Naur --no-dereference a/Documentation/PCI/endpoint/pci-ntb-function.rst b/Documentation/PCI/endpoint/pci-ntb-function.rst --- a/Documentation/PCI/endpoint/pci-ntb-function.rst 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/PCI/endpoint/pci-ntb-function.rst 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/PCI/endpoint/pci-ntb-function.rst 2024-11-24 20:19:38.080228660 -0500 @@ -0,0 +1,348 @@ +.. SPDX-License-Identifier: GPL-2.0 + @@ -76333,7 +81114,7 @@ diff -Naur --no-dereference a/Documentation/PCI/endpoint/pci-ntb-function.rst b/ +is mapped to separate BARs. diff -Naur --no-dereference a/Documentation/PCI/endpoint/pci-ntb-howto.rst b/Documentation/PCI/endpoint/pci-ntb-howto.rst --- a/Documentation/PCI/endpoint/pci-ntb-howto.rst 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/PCI/endpoint/pci-ntb-howto.rst 2024-08-28 19:44:05.584037817 -0400 ++++ b/Documentation/PCI/endpoint/pci-ntb-howto.rst 2024-11-24 20:19:38.080228660 -0500 @@ -0,0 +1,161 @@ +.. SPDX-License-Identifier: GPL-2.0 + @@ -76496,9 +81277,229 @@ diff -Naur --no-dereference a/Documentation/PCI/endpoint/pci-ntb-howto.rst b/Doc + +For more information on NTB see +:doc:`Non-Transparent Bridge <../../driver-api/ntb>` +diff -Naur --no-dereference a/Documentation/RCU/checklist.rst b/Documentation/RCU/checklist.rst +--- a/Documentation/RCU/checklist.rst 2023-02-15 11:22:27.000000000 -0500 ++++ b/Documentation/RCU/checklist.rst 2024-11-24 20:19:38.080228660 -0500 +@@ -214,7 +214,7 @@ + the rest of the system. + + 7. As of v4.20, a given kernel implements only one RCU flavor, +- which is RCU-sched for PREEMPT=n and RCU-preempt for PREEMPT=y. ++ which is RCU-sched for PREEMPTION=n and RCU-preempt for PREEMPTION=y. + If the updater uses call_rcu() or synchronize_rcu(), + then the corresponding readers my use rcu_read_lock() and + rcu_read_unlock(), rcu_read_lock_bh() and rcu_read_unlock_bh(), +diff -Naur --no-dereference a/Documentation/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.rst b/Documentation/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.rst +--- a/Documentation/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.rst 2023-02-15 11:22:27.000000000 -0500 ++++ b/Documentation/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.rst 2024-11-24 20:19:38.080228660 -0500 +@@ -38,7 +38,7 @@ + RCU-preempt Expedited Grace Periods + =================================== + +-``CONFIG_PREEMPT=y`` kernels implement RCU-preempt. ++``CONFIG_PREEMPTION=y`` kernels implement RCU-preempt. + The overall flow of the handling of a given CPU by an RCU-preempt + expedited grace period is shown in the following diagram: + +@@ -112,7 +112,7 @@ + RCU-sched Expedited Grace Periods + --------------------------------- + +-``CONFIG_PREEMPT=n`` kernels implement RCU-sched. The overall flow of ++``CONFIG_PREEMPTION=n`` kernels implement RCU-sched. The overall flow of + the handling of a given CPU by an RCU-sched expedited grace period is + shown in the following diagram: + +diff -Naur --no-dereference a/Documentation/RCU/Design/Requirements/Requirements.rst b/Documentation/RCU/Design/Requirements/Requirements.rst +--- a/Documentation/RCU/Design/Requirements/Requirements.rst 2023-02-15 11:22:27.000000000 -0500 ++++ b/Documentation/RCU/Design/Requirements/Requirements.rst 2024-11-24 20:19:38.080228660 -0500 +@@ -78,7 +78,7 @@ + Production-quality implementations of ``rcu_read_lock()`` and + ``rcu_read_unlock()`` are extremely lightweight, and in fact have + exactly zero overhead in Linux kernels built for production use with +-``CONFIG_PREEMPT=n``. ++``CONFIG_PREEMPTION=n``. + + This guarantee allows ordering to be enforced with extremely low + overhead to readers, for example: +@@ -1182,7 +1182,7 @@ + costs have plummeted. However, as I learned from Matt Mackall's + `bloatwatch `__ efforts, memory + footprint is critically important on single-CPU systems with +-non-preemptible (``CONFIG_PREEMPT=n``) kernels, and thus `tiny ++non-preemptible (``CONFIG_PREEMPTION=n``) kernels, and thus `tiny + RCU `__ + was born. Josh Triplett has since taken over the small-memory banner + with his `Linux kernel tinification `__ +@@ -1498,7 +1498,7 @@ + + Implementations of RCU for which ``rcu_read_lock()`` and + ``rcu_read_unlock()`` generate no code, such as Linux-kernel RCU when +-``CONFIG_PREEMPT=n``, can be nested arbitrarily deeply. After all, there ++``CONFIG_PREEMPTION=n``, can be nested arbitrarily deeply. After all, there + is no overhead. Except that if all these instances of + ``rcu_read_lock()`` and ``rcu_read_unlock()`` are visible to the + compiler, compilation will eventually fail due to exhausting memory, +@@ -1771,7 +1771,7 @@ + + However, once the scheduler has spawned its first kthread, this early + boot trick fails for ``synchronize_rcu()`` (as well as for +-``synchronize_rcu_expedited()``) in ``CONFIG_PREEMPT=y`` kernels. The ++``synchronize_rcu_expedited()``) in ``CONFIG_PREEMPTION=y`` kernels. The + reason is that an RCU read-side critical section might be preempted, + which means that a subsequent ``synchronize_rcu()`` really does have to + wait for something, as opposed to simply returning immediately. +@@ -2010,7 +2010,7 @@ + 5 rcu_read_unlock(); + 6 do_something_with(v, user_v); + +-If the compiler did make this transformation in a ``CONFIG_PREEMPT=n`` kernel ++If the compiler did make this transformation in a ``CONFIG_PREEMPTION=n`` kernel + build, and if ``get_user()`` did page fault, the result would be a quiescent + state in the middle of an RCU read-side critical section. This misplaced + quiescent state could result in line 4 being a use-after-free access, +@@ -2289,10 +2289,10 @@ + + The Linux kernel is used for real-time workloads, especially in + conjunction with the `-rt +-patchset `__. The ++patchset `__. The + real-time-latency response requirements are such that the traditional + approach of disabling preemption across RCU read-side critical sections +-is inappropriate. Kernels built with ``CONFIG_PREEMPT=y`` therefore use ++is inappropriate. Kernels built with ``CONFIG_PREEMPTION=y`` therefore use + an RCU implementation that allows RCU read-side critical sections to be + preempted. This requirement made its presence known after users made it + clear that an earlier `real-time +@@ -2414,7 +2414,7 @@ + ``call_rcu_bh()``, ``rcu_barrier_bh()``, and + ``rcu_read_lock_bh_held()``. However, the update-side APIs are now + simple wrappers for other RCU flavors, namely RCU-sched in +-CONFIG_PREEMPT=n kernels and RCU-preempt otherwise. ++CONFIG_PREEMPTION=n kernels and RCU-preempt otherwise. + + Sched Flavor (Historical) + ~~~~~~~~~~~~~~~~~~~~~~~~~ +@@ -2432,11 +2432,11 @@ + RCU read-side critical section can be a quiescent state. Therefore, + *RCU-sched* was created, which follows “classic†RCU in that an + RCU-sched grace period waits for pre-existing interrupt and NMI +-handlers. In kernels built with ``CONFIG_PREEMPT=n``, the RCU and ++handlers. In kernels built with ``CONFIG_PREEMPTION=n``, the RCU and + RCU-sched APIs have identical implementations, while kernels built with +-``CONFIG_PREEMPT=y`` provide a separate implementation for each. ++``CONFIG_PREEMPTION=y`` provide a separate implementation for each. + +-Note well that in ``CONFIG_PREEMPT=y`` kernels, ++Note well that in ``CONFIG_PREEMPTION=y`` kernels, + ``rcu_read_lock_sched()`` and ``rcu_read_unlock_sched()`` disable and + re-enable preemption, respectively. This means that if there was a + preemption attempt during the RCU-sched read-side critical section, +@@ -2599,10 +2599,10 @@ + + The tasks-RCU API is quite compact, consisting only of + ``call_rcu_tasks()``, ``synchronize_rcu_tasks()``, and +-``rcu_barrier_tasks()``. In ``CONFIG_PREEMPT=n`` kernels, trampolines ++``rcu_barrier_tasks()``. In ``CONFIG_PREEMPTION=n`` kernels, trampolines + cannot be preempted, so these APIs map to ``call_rcu()``, + ``synchronize_rcu()``, and ``rcu_barrier()``, respectively. In +-``CONFIG_PREEMPT=y`` kernels, trampolines can be preempted, and these ++``CONFIG_PREEMPTION=y`` kernels, trampolines can be preempted, and these + three APIs are therefore implemented by separate functions that check + for voluntary context switches. + +diff -Naur --no-dereference a/Documentation/RCU/rcubarrier.rst b/Documentation/RCU/rcubarrier.rst +--- a/Documentation/RCU/rcubarrier.rst 2023-02-15 11:22:27.000000000 -0500 ++++ b/Documentation/RCU/rcubarrier.rst 2024-11-24 20:19:38.080228660 -0500 +@@ -9,7 +9,7 @@ + of as a replacement for read-writer locking (among other things), but with + very low-overhead readers that are immune to deadlock, priority inversion, + and unbounded latency. RCU read-side critical sections are delimited +-by rcu_read_lock() and rcu_read_unlock(), which, in non-CONFIG_PREEMPT ++by rcu_read_lock() and rcu_read_unlock(), which, in non-CONFIG_PREEMPTION + kernels, generate no code whatsoever. + + This means that RCU writers are unaware of the presence of concurrent +@@ -329,10 +329,10 @@ + to smp_call_function() and further to smp_call_function_on_cpu(), + causing this latter to spin until the cross-CPU invocation of + rcu_barrier_func() has completed. This by itself would prevent +- a grace period from completing on non-CONFIG_PREEMPT kernels, ++ a grace period from completing on non-CONFIG_PREEMPTION kernels, + since each CPU must undergo a context switch (or other quiescent + state) before the grace period can complete. However, this is +- of no use in CONFIG_PREEMPT kernels. ++ of no use in CONFIG_PREEMPTION kernels. + + Therefore, on_each_cpu() disables preemption across its call + to smp_call_function() and also across the local call to +diff -Naur --no-dereference a/Documentation/RCU/stallwarn.rst b/Documentation/RCU/stallwarn.rst +--- a/Documentation/RCU/stallwarn.rst 2023-02-15 11:22:27.000000000 -0500 ++++ b/Documentation/RCU/stallwarn.rst 2024-11-24 20:19:38.080228660 -0500 +@@ -25,7 +25,7 @@ + + - A CPU looping with bottom halves disabled. + +-- For !CONFIG_PREEMPT kernels, a CPU looping anywhere in the kernel ++- For !CONFIG_PREEMPTION kernels, a CPU looping anywhere in the kernel + without invoking schedule(). If the looping in the kernel is + really expected and desirable behavior, you might need to add + some calls to cond_resched(). +@@ -44,7 +44,7 @@ + result in the ``rcu_.*kthread starved for`` console-log message, + which will include additional debugging information. + +-- A CPU-bound real-time task in a CONFIG_PREEMPT kernel, which might ++- A CPU-bound real-time task in a CONFIG_PREEMPTION kernel, which might + happen to preempt a low-priority task in the middle of an RCU + read-side critical section. This is especially damaging if + that low-priority task is not permitted to run on any other CPU, +diff -Naur --no-dereference a/Documentation/RCU/whatisRCU.rst b/Documentation/RCU/whatisRCU.rst +--- a/Documentation/RCU/whatisRCU.rst 2023-02-15 11:22:27.000000000 -0500 ++++ b/Documentation/RCU/whatisRCU.rst 2024-11-24 20:19:38.080228660 -0500 +@@ -684,7 +684,7 @@ + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + This section presents a "toy" RCU implementation that is based on + "classic RCU". It is also short on performance (but only for updates) and +-on features such as hotplug CPU and the ability to run in CONFIG_PREEMPT ++on features such as hotplug CPU and the ability to run in CONFIG_PREEMPTION + kernels. The definitions of rcu_dereference() and rcu_assign_pointer() + are the same as those shown in the preceding section, so they are omitted. + :: +@@ -740,7 +740,7 @@ + Quick Quiz #3: + If it is illegal to block in an RCU read-side + critical section, what the heck do you do in +- PREEMPT_RT, where normal spinlocks can block??? ++ CONFIG_PREEMPT_RT, where normal spinlocks can block??? + + :ref:`Answers to Quick Quiz <8_whatisRCU>` + +@@ -1094,7 +1094,7 @@ + overhead is **negative**. + + Answer: +- Imagine a single-CPU system with a non-CONFIG_PREEMPT ++ Imagine a single-CPU system with a non-CONFIG_PREEMPTION + kernel where a routing table is used by process-context + code, but can be updated by irq-context code (for example, + by an "ICMP REDIRECT" packet). The usual way of handling +@@ -1121,10 +1121,10 @@ + Quick Quiz #3: + If it is illegal to block in an RCU read-side + critical section, what the heck do you do in +- PREEMPT_RT, where normal spinlocks can block??? ++ CONFIG_PREEMPT_RT, where normal spinlocks can block??? + + Answer: +- Just as PREEMPT_RT permits preemption of spinlock ++ Just as CONFIG_PREEMPT_RT permits preemption of spinlock + critical sections, it permits preemption of RCU + read-side critical sections. It also permits + spinlocks blocking while in RCU read-side critical diff -Naur --no-dereference a/Documentation/userspace-api/ioctl/ioctl-number.rst b/Documentation/userspace-api/ioctl/ioctl-number.rst --- a/Documentation/userspace-api/ioctl/ioctl-number.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/userspace-api/ioctl/ioctl-number.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/userspace-api/ioctl/ioctl-number.rst 2024-11-24 20:19:38.090228678 -0500 @@ -88,6 +88,7 @@ 0x20 all drivers/cdrom/cm206.h @@ -76509,7 +81510,7 @@ diff -Naur --no-dereference a/Documentation/userspace-api/ioctl/ioctl-number.rst Block for the entire subsystem diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/dev-subdev.rst b/Documentation/userspace-api/media/v4l/dev-subdev.rst --- a/Documentation/userspace-api/media/v4l/dev-subdev.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/userspace-api/media/v4l/dev-subdev.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/userspace-api/media/v4l/dev-subdev.rst 2024-11-24 20:19:38.090228678 -0500 @@ -29,6 +29,8 @@ - negotiate image formats on individual pads @@ -76689,7 +81690,7 @@ diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/dev-subdev.r +and two metadata formats) with VIDIOC_SUBDEV_S_FMT. diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/user-func.rst b/Documentation/userspace-api/media/v4l/user-func.rst --- a/Documentation/userspace-api/media/v4l/user-func.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/userspace-api/media/v4l/user-func.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/userspace-api/media/v4l/user-func.rst 2024-11-24 20:19:38.090228678 -0500 @@ -70,6 +70,7 @@ vidioc-subdev-g-crop vidioc-subdev-g-fmt @@ -76700,7 +81701,7 @@ diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/user-func.rs vidioc-subscribe-event diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-interval.rst b/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-interval.rst --- a/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-interval.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-interval.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-interval.rst 2024-11-24 20:19:38.091228679 -0500 @@ -92,7 +92,10 @@ - Frame intervals to be enumerated, from enum :ref:`v4l2_subdev_format_whence `. @@ -76715,7 +81716,7 @@ diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subde diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-size.rst b/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-size.rst --- a/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-size.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-size.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-size.rst 2024-11-24 20:19:38.091228679 -0500 @@ -97,7 +97,10 @@ - Frame sizes to be enumerated, from enum :ref:`v4l2_subdev_format_whence `. @@ -76730,7 +81731,7 @@ diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subde diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-mbus-code.rst b/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-mbus-code.rst --- a/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-mbus-code.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-mbus-code.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-enum-mbus-code.rst 2024-11-24 20:19:38.091228679 -0500 @@ -73,7 +73,10 @@ - ``flags`` - See :ref:`v4l2-subdev-mbus-code-flags` @@ -76745,7 +81746,7 @@ diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subde diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subdev-g-crop.rst b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-crop.rst --- a/Documentation/userspace-api/media/v4l/vidioc-subdev-g-crop.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-crop.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-crop.rst 2024-11-24 20:19:38.091228679 -0500 @@ -96,7 +96,10 @@ - ``rect`` - Crop rectangle boundaries, in pixels. @@ -76760,7 +81761,7 @@ diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subde diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subdev-g-fmt.rst b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-fmt.rst --- a/Documentation/userspace-api/media/v4l/vidioc-subdev-g-fmt.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-fmt.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-fmt.rst 2024-11-24 20:19:38.091228679 -0500 @@ -102,7 +102,10 @@ - Definition of an image format, see :c:type:`v4l2_mbus_framefmt` for details. @@ -76775,7 +81776,7 @@ diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subde diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subdev-g-frame-interval.rst b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-frame-interval.rst --- a/Documentation/userspace-api/media/v4l/vidioc-subdev-g-frame-interval.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-frame-interval.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-frame-interval.rst 2024-11-24 20:19:38.091228679 -0500 @@ -90,7 +90,10 @@ - ``interval`` - Period, in seconds, between consecutive video frames. @@ -76790,7 +81791,7 @@ diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subde diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subdev-g-routing.rst b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-routing.rst --- a/Documentation/userspace-api/media/v4l/vidioc-subdev-g-routing.rst 1969-12-31 19:00:00.000000000 -0500 -+++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-routing.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-routing.rst 2024-11-24 20:19:38.091228679 -0500 @@ -0,0 +1,146 @@ +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later +.. c:namespace:: V4L @@ -76940,7 +81941,7 @@ diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subde + the sink or source pad. diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subdev-g-selection.rst b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-selection.rst --- a/Documentation/userspace-api/media/v4l/vidioc-subdev-g-selection.rst 2023-02-15 11:22:27.000000000 -0500 -+++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-selection.rst 2024-08-28 19:44:05.592037860 -0400 ++++ b/Documentation/userspace-api/media/v4l/vidioc-subdev-g-selection.rst 2024-11-24 20:19:38.091228679 -0500 @@ -94,7 +94,10 @@ - ``r`` - Selection rectangle, in pixels. @@ -76955,7 +81956,7 @@ diff -Naur --no-dereference a/Documentation/userspace-api/media/v4l/vidioc-subde diff -Naur --no-dereference a/drivers/ata/ahci.h b/drivers/ata/ahci.h --- a/drivers/ata/ahci.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/ata/ahci.h 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/ata/ahci.h 2024-11-24 20:19:38.125228740 -0500 @@ -24,6 +24,7 @@ #include #include @@ -77273,9 +82274,21 @@ diff -Naur --no-dereference a/drivers/ata/ahci.h b/drivers/ata/ahci.h }; struct ahci_cmd_hdr { +diff -Naur --no-dereference a/drivers/atm/eni.c b/drivers/atm/eni.c +--- a/drivers/atm/eni.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/atm/eni.c 2024-11-24 20:19:38.125228740 -0500 +@@ -2056,7 +2056,7 @@ + } + submitted++; + ATM_SKB(skb)->vcc = vcc; +- tasklet_disable(&ENI_DEV(vcc->dev)->task); ++ tasklet_disable_in_atomic(&ENI_DEV(vcc->dev)->task); + res = do_tx(skb); + tasklet_enable(&ENI_DEV(vcc->dev)->task); + if (res == enq_ok) return 0; diff -Naur --no-dereference a/drivers/auxdisplay/Kconfig b/drivers/auxdisplay/Kconfig --- a/drivers/auxdisplay/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/auxdisplay/Kconfig 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/auxdisplay/Kconfig 2024-11-24 20:19:38.126228742 -0500 @@ -27,6 +27,18 @@ kernel and started at boot. If you don't understand what all this is about, say N. @@ -77297,7 +82310,7 @@ diff -Naur --no-dereference a/drivers/auxdisplay/Kconfig b/drivers/auxdisplay/Kc depends on PARPORT_PC diff -Naur --no-dereference a/drivers/auxdisplay/Makefile b/drivers/auxdisplay/Makefile --- a/drivers/auxdisplay/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/auxdisplay/Makefile 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/auxdisplay/Makefile 2024-11-24 20:19:38.126228742 -0500 @@ -11,3 +11,4 @@ obj-$(CONFIG_HD44780) += hd44780.o obj-$(CONFIG_HT16K33) += ht16k33.o @@ -77305,7 +82318,7 @@ diff -Naur --no-dereference a/drivers/auxdisplay/Makefile b/drivers/auxdisplay/M +obj-$(CONFIG_SEEED_I2C_HD44780) += seeed-hd44780-i2c.o diff -Naur --no-dereference a/drivers/auxdisplay/seeed-hd44780.h b/drivers/auxdisplay/seeed-hd44780.h --- a/drivers/auxdisplay/seeed-hd44780.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/auxdisplay/seeed-hd44780.h 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/auxdisplay/seeed-hd44780.h 2024-11-24 20:19:38.126228742 -0500 @@ -0,0 +1,52 @@ +#ifndef _SEEED_HD44780_H_ +#define _SEEED_HD44780_H_ @@ -77361,7 +82374,7 @@ diff -Naur --no-dereference a/drivers/auxdisplay/seeed-hd44780.h b/drivers/auxdi +#endif diff -Naur --no-dereference a/drivers/auxdisplay/seeed-hd44780-i2c.c b/drivers/auxdisplay/seeed-hd44780-i2c.c --- a/drivers/auxdisplay/seeed-hd44780-i2c.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/auxdisplay/seeed-hd44780-i2c.c 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/auxdisplay/seeed-hd44780-i2c.c 2024-11-24 20:19:38.126228742 -0500 @@ -0,0 +1,713 @@ +/* + * hd44780-i2c.c @@ -78078,7 +83091,7 @@ diff -Naur --no-dereference a/drivers/auxdisplay/seeed-hd44780-i2c.c b/drivers/a +MODULE_LICENSE("GPL"); diff -Naur --no-dereference a/drivers/block/loop.c b/drivers/block/loop.c --- a/drivers/block/loop.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/block/loop.c 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/block/loop.c 2024-11-24 20:19:38.126228742 -0500 @@ -752,6 +752,24 @@ return error; } @@ -78104,9 +83117,80 @@ diff -Naur --no-dereference a/drivers/block/loop.c b/drivers/block/loop.c /* loop sysfs attributes */ static ssize_t loop_attr_show(struct device *dev, char *page, +diff -Naur --no-dereference a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c +--- a/drivers/block/zram/zram_drv.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/block/zram/zram_drv.c 2024-11-24 20:19:38.126228742 -0500 +@@ -59,6 +59,40 @@ + static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec, + u32 index, int offset, struct bio *bio); + ++#ifdef CONFIG_PREEMPT_RT ++static void zram_meta_init_table_locks(struct zram *zram, size_t num_pages) ++{ ++ size_t index; ++ ++ for (index = 0; index < num_pages; index++) ++ spin_lock_init(&zram->table[index].lock); ++} ++ ++static int zram_slot_trylock(struct zram *zram, u32 index) ++{ ++ int ret; ++ ++ ret = spin_trylock(&zram->table[index].lock); ++ if (ret) ++ __set_bit(ZRAM_LOCK, &zram->table[index].flags); ++ return ret; ++} ++ ++static void zram_slot_lock(struct zram *zram, u32 index) ++{ ++ spin_lock(&zram->table[index].lock); ++ __set_bit(ZRAM_LOCK, &zram->table[index].flags); ++} ++ ++static void zram_slot_unlock(struct zram *zram, u32 index) ++{ ++ __clear_bit(ZRAM_LOCK, &zram->table[index].flags); ++ spin_unlock(&zram->table[index].lock); ++} ++ ++#else ++ ++static void zram_meta_init_table_locks(struct zram *zram, size_t num_pages) { } + + static int zram_slot_trylock(struct zram *zram, u32 index) + { +@@ -74,6 +108,7 @@ + { + bit_spin_unlock(ZRAM_LOCK, &zram->table[index].flags); + } ++#endif + + static inline bool init_done(struct zram *zram) + { +@@ -1165,6 +1200,7 @@ + + if (!huge_class_size) + huge_class_size = zs_huge_class_size(zram->mem_pool); ++ zram_meta_init_table_locks(zram, num_pages); + return true; + } + +diff -Naur --no-dereference a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h +--- a/drivers/block/zram/zram_drv.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/block/zram/zram_drv.h 2024-11-24 20:19:38.126228742 -0500 +@@ -63,6 +63,7 @@ + unsigned long element; + }; + unsigned long flags; ++ spinlock_t lock; + #ifdef CONFIG_ZRAM_MEMORY_TRACKING + ktime_t ac_time; + #endif diff -Naur --no-dereference a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig --- a/drivers/char/hw_random/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/char/hw_random/Kconfig 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/char/hw_random/Kconfig 2024-11-24 20:19:38.126228742 -0500 @@ -165,7 +165,7 @@ config HW_RANDOM_OMAP @@ -78118,7 +83202,7 @@ diff -Naur --no-dereference a/drivers/char/hw_random/Kconfig b/drivers/char/hw_r This driver provides kernel-side support for the Random Number diff -Naur --no-dereference a/drivers/char/hw_random/omap-rng.c b/drivers/char/hw_random/omap-rng.c --- a/drivers/char/hw_random/omap-rng.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/char/hw_random/omap-rng.c 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/char/hw_random/omap-rng.c 2024-11-24 20:19:38.126228742 -0500 @@ -30,8 +30,7 @@ #include #include @@ -78150,9 +83234,73 @@ diff -Naur --no-dereference a/drivers/char/hw_random/omap-rng.c b/drivers/char/h if (of_device_is_compatible(dev->of_node, "ti,omap4-rng") || of_device_is_compatible(dev->of_node, "inside-secure,safexcel-eip76")) { +diff -Naur --no-dereference a/drivers/char/tpm/tpm-dev-common.c b/drivers/char/tpm/tpm-dev-common.c +--- a/drivers/char/tpm/tpm-dev-common.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/char/tpm/tpm-dev-common.c 2024-11-24 20:19:38.126228742 -0500 +@@ -20,7 +20,6 @@ + #include "tpm-dev.h" + + static struct workqueue_struct *tpm_dev_wq; +-static DEFINE_MUTEX(tpm_dev_wq_lock); + + static ssize_t tpm_dev_transmit(struct tpm_chip *chip, struct tpm_space *space, + u8 *buf, size_t bufsiz) +diff -Naur --no-dereference a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c +--- a/drivers/char/tpm/tpm_tis.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/char/tpm/tpm_tis.c 2024-11-24 20:19:38.126228742 -0500 +@@ -50,6 +50,31 @@ + return container_of(data, struct tpm_tis_tcg_phy, priv); + } + ++#ifdef CONFIG_PREEMPT_RT ++/* ++ * Flushes previous write operations to chip so that a subsequent ++ * ioread*()s won't stall a cpu. ++ */ ++static inline void tpm_tis_flush(void __iomem *iobase) ++{ ++ ioread8(iobase + TPM_ACCESS(0)); ++} ++#else ++#define tpm_tis_flush(iobase) do { } while (0) ++#endif ++ ++static inline void tpm_tis_iowrite8(u8 b, void __iomem *iobase, u32 addr) ++{ ++ iowrite8(b, iobase + addr); ++ tpm_tis_flush(iobase); ++} ++ ++static inline void tpm_tis_iowrite32(u32 b, void __iomem *iobase, u32 addr) ++{ ++ iowrite32(b, iobase + addr); ++ tpm_tis_flush(iobase); ++} ++ + static int interrupts = -1; + module_param(interrupts, int, 0444); + MODULE_PARM_DESC(interrupts, "Enable interrupts"); +@@ -170,7 +195,7 @@ + struct tpm_tis_tcg_phy *phy = to_tpm_tis_tcg_phy(data); + + while (len--) +- iowrite8(*value++, phy->iobase + addr); ++ tpm_tis_iowrite8(*value++, phy->iobase, addr); + + return 0; + } +@@ -197,7 +222,7 @@ + { + struct tpm_tis_tcg_phy *phy = to_tpm_tis_tcg_phy(data); + +- iowrite32(value, phy->iobase + addr); ++ tpm_tis_iowrite32(value, phy->iobase, addr); + + return 0; + } diff -Naur --no-dereference a/drivers/clk/keystone/syscon-clk.c b/drivers/clk/keystone/syscon-clk.c --- a/drivers/clk/keystone/syscon-clk.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/clk/keystone/syscon-clk.c 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/clk/keystone/syscon-clk.c 2024-11-24 20:19:38.126228742 -0500 @@ -149,11 +149,39 @@ { /* Sentinel */ }, }; @@ -78195,7 +83343,7 @@ diff -Naur --no-dereference a/drivers/clk/keystone/syscon-clk.c b/drivers/clk/ke MODULE_DEVICE_TABLE(of, ti_syscon_gate_clk_ids); diff -Naur --no-dereference a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig --- a/drivers/clocksource/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/clocksource/Kconfig 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/clocksource/Kconfig 2024-11-24 20:19:38.127228744 -0500 @@ -22,7 +22,7 @@ config I8253_LOCK bool @@ -78221,7 +83369,7 @@ diff -Naur --no-dereference a/drivers/clocksource/Kconfig b/drivers/clocksource/ help diff -Naur --no-dereference a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile --- a/drivers/clocksource/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/clocksource/Makefile 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/clocksource/Makefile 2024-11-24 20:19:38.127228744 -0500 @@ -18,7 +18,7 @@ obj-$(CONFIG_DAVINCI_TIMER) += timer-davinci.o obj-$(CONFIG_DIGICOLOR_TIMER) += timer-digicolor.o @@ -78233,7 +83381,7 @@ diff -Naur --no-dereference a/drivers/clocksource/Makefile b/drivers/clocksource obj-$(CONFIG_FTTMR010_TIMER) += timer-fttmr010.o diff -Naur --no-dereference a/drivers/clocksource/timer-keystone.c b/drivers/clocksource/timer-keystone.c --- a/drivers/clocksource/timer-keystone.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/clocksource/timer-keystone.c 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/clocksource/timer-keystone.c 2024-11-24 20:19:38.127228744 -0500 @@ -13,6 +13,7 @@ #include #include @@ -78327,7 +83475,7 @@ diff -Naur --no-dereference a/drivers/clocksource/timer-keystone.c b/drivers/clo +device_initcall(keystone_clocksource_init_driver); diff -Naur --no-dereference a/drivers/clocksource/timer-ti-dm.c b/drivers/clocksource/timer-ti-dm.c --- a/drivers/clocksource/timer-ti-dm.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/clocksource/timer-ti-dm.c 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/clocksource/timer-ti-dm.c 2024-11-24 20:19:38.127228744 -0500 @@ -44,6 +44,121 @@ REQUEST_BY_NODE, }; @@ -78474,7 +83622,7 @@ diff -Naur --no-dereference a/drivers/clocksource/timer-ti-dm.c b/drivers/clocks MODULE_DEVICE_TABLE(of, omap_timer_match); diff -Naur --no-dereference a/drivers/clocksource/timer-ti-dm-systimer.c b/drivers/clocksource/timer-ti-dm-systimer.c --- a/drivers/clocksource/timer-ti-dm-systimer.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/clocksource/timer-ti-dm-systimer.c 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/clocksource/timer-ti-dm-systimer.c 2024-11-24 20:19:38.127228744 -0500 @@ -11,6 +11,7 @@ #include #include @@ -78566,7 +83714,7 @@ diff -Naur --no-dereference a/drivers/clocksource/timer-ti-dm-systimer.c b/drive err_out_free: diff -Naur --no-dereference a/drivers/counter/104-quad-8.c b/drivers/counter/104-quad-8.c --- a/drivers/counter/104-quad-8.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/counter/104-quad-8.c 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/counter/104-quad-8.c 2024-11-24 20:19:38.127228744 -0500 @@ -9,27 +9,63 @@ #include #include @@ -80649,7 +85797,7 @@ diff -Naur --no-dereference a/drivers/counter/104-quad-8.c b/drivers/counter/104 MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/counter/counter.c b/drivers/counter/counter.c --- a/drivers/counter/counter.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/counter/counter.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/counter.c 2024-11-24 20:19:38.127228744 -0500 @@ -289,9 +289,9 @@ struct counter_signal *signal; }; @@ -80782,7 +85930,7 @@ diff -Naur --no-dereference a/drivers/counter/counter.c b/drivers/counter/counte err = counter_attribute_create(&parm); diff -Naur --no-dereference a/drivers/counter/counter-chrdev.c b/drivers/counter/counter-chrdev.c --- a/drivers/counter/counter-chrdev.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/counter/counter-chrdev.c 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/counter/counter-chrdev.c 2024-11-24 20:19:38.127228744 -0500 @@ -0,0 +1,577 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -81363,7 +86511,7 @@ diff -Naur --no-dereference a/drivers/counter/counter-chrdev.c b/drivers/counter +EXPORT_SYMBOL_GPL(counter_push_event); diff -Naur --no-dereference a/drivers/counter/counter-chrdev.h b/drivers/counter/counter-chrdev.h --- a/drivers/counter/counter-chrdev.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/counter/counter-chrdev.h 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/counter/counter-chrdev.h 2024-11-24 20:19:38.127228744 -0500 @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -81381,7 +86529,7 @@ diff -Naur --no-dereference a/drivers/counter/counter-chrdev.h b/drivers/counter +#endif /* _COUNTER_CHRDEV_H_ */ diff -Naur --no-dereference a/drivers/counter/counter-core.c b/drivers/counter/counter-core.c --- a/drivers/counter/counter-core.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/counter/counter-core.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/counter-core.c 2024-11-24 20:19:38.127228744 -0500 @@ -0,0 +1,282 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -81667,7 +86815,7 @@ diff -Naur --no-dereference a/drivers/counter/counter-core.c b/drivers/counter/c +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/counter/counter-sysfs.c b/drivers/counter/counter-sysfs.c --- a/drivers/counter/counter-sysfs.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/counter/counter-sysfs.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/counter-sysfs.c 2024-11-24 20:19:38.127228744 -0500 @@ -0,0 +1,964 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -82635,7 +87783,7 @@ diff -Naur --no-dereference a/drivers/counter/counter-sysfs.c b/drivers/counter/ +} diff -Naur --no-dereference a/drivers/counter/counter-sysfs.h b/drivers/counter/counter-sysfs.h --- a/drivers/counter/counter-sysfs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/counter/counter-sysfs.h 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/counter-sysfs.h 2024-11-24 20:19:38.127228744 -0500 @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -82652,7 +87800,7 @@ diff -Naur --no-dereference a/drivers/counter/counter-sysfs.h b/drivers/counter/ +#endif /* _COUNTER_SYSFS_H_ */ diff -Naur --no-dereference a/drivers/counter/ftm-quaddec.c b/drivers/counter/ftm-quaddec.c --- a/drivers/counter/ftm-quaddec.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/counter/ftm-quaddec.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/ftm-quaddec.c 2024-11-24 20:19:38.127228744 -0500 @@ -14,6 +14,7 @@ #include #include @@ -82865,7 +88013,7 @@ diff -Naur --no-dereference a/drivers/counter/ftm-quaddec.c b/drivers/counter/ft } diff -Naur --no-dereference a/drivers/counter/intel-qep.c b/drivers/counter/intel-qep.c --- a/drivers/counter/intel-qep.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/counter/intel-qep.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/intel-qep.c 2024-11-24 20:19:38.128228746 -0500 @@ -0,0 +1,525 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -83394,7 +88542,7 @@ diff -Naur --no-dereference a/drivers/counter/intel-qep.c b/drivers/counter/inte +MODULE_DESCRIPTION("Intel Quadrature Encoder Peripheral driver"); diff -Naur --no-dereference a/drivers/counter/interrupt-cnt.c b/drivers/counter/interrupt-cnt.c --- a/drivers/counter/interrupt-cnt.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/counter/interrupt-cnt.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/interrupt-cnt.c 2024-11-24 20:19:38.128228746 -0500 @@ -0,0 +1,244 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -83642,7 +88790,7 @@ diff -Naur --no-dereference a/drivers/counter/interrupt-cnt.c b/drivers/counter/ +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/counter/Kconfig b/drivers/counter/Kconfig --- a/drivers/counter/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/counter/Kconfig 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/counter/Kconfig 2024-11-24 20:19:38.127228744 -0500 @@ -14,7 +14,7 @@ config 104_QUAD_8 @@ -83709,7 +88857,7 @@ diff -Naur --no-dereference a/drivers/counter/Kconfig b/drivers/counter/Kconfig endif # COUNTER diff -Naur --no-dereference a/drivers/counter/Makefile b/drivers/counter/Makefile --- a/drivers/counter/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/counter/Makefile 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/counter/Makefile 2024-11-24 20:19:38.127228744 -0500 @@ -4,10 +4,14 @@ # @@ -83727,7 +88875,7 @@ diff -Naur --no-dereference a/drivers/counter/Makefile b/drivers/counter/Makefil +obj-$(CONFIG_TI_ECAP_CAPTURE) += ti-ecap-capture.o diff -Naur --no-dereference a/drivers/counter/microchip-tcb-capture.c b/drivers/counter/microchip-tcb-capture.c --- a/drivers/counter/microchip-tcb-capture.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/counter/microchip-tcb-capture.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/microchip-tcb-capture.c 2024-11-24 20:19:38.128228746 -0500 @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only -/** @@ -84029,7 +89177,7 @@ diff -Naur --no-dereference a/drivers/counter/microchip-tcb-capture.c b/drivers/ static const struct of_device_id mchp_tc_dt_ids[] = { diff -Naur --no-dereference a/drivers/counter/stm32-lptimer-cnt.c b/drivers/counter/stm32-lptimer-cnt.c --- a/drivers/counter/stm32-lptimer-cnt.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/counter/stm32-lptimer-cnt.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/stm32-lptimer-cnt.c 2024-11-24 20:19:38.128228746 -0500 @@ -17,9 +17,9 @@ #include #include @@ -84463,7 +89611,7 @@ diff -Naur --no-dereference a/drivers/counter/stm32-lptimer-cnt.c b/drivers/coun #ifdef CONFIG_PM_SLEEP diff -Naur --no-dereference a/drivers/counter/stm32-timer-cnt.c b/drivers/counter/stm32-timer-cnt.c --- a/drivers/counter/stm32-timer-cnt.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/counter/stm32-timer-cnt.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/stm32-timer-cnt.c 2024-11-24 20:19:38.128228746 -0500 @@ -13,6 +13,7 @@ #include #include @@ -84875,7 +90023,7 @@ diff -Naur --no-dereference a/drivers/counter/stm32-timer-cnt.c b/drivers/counte static int __maybe_unused stm32_timer_cnt_suspend(struct device *dev) diff -Naur --no-dereference a/drivers/counter/ti-ecap-capture.c b/drivers/counter/ti-ecap-capture.c --- a/drivers/counter/ti-ecap-capture.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/counter/ti-ecap-capture.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/ti-ecap-capture.c 2024-11-24 20:19:38.128228746 -0500 @@ -0,0 +1,677 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -85556,7 +90704,7 @@ diff -Naur --no-dereference a/drivers/counter/ti-ecap-capture.c b/drivers/counte +MODULE_LICENSE("GPL"); diff -Naur --no-dereference a/drivers/counter/ti-eqep.c b/drivers/counter/ti-eqep.c --- a/drivers/counter/ti-eqep.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/counter/ti-eqep.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/counter/ti-eqep.c 2024-11-24 20:19:38.128228746 -0500 @@ -13,6 +13,7 @@ #include #include @@ -85979,7 +91127,7 @@ diff -Naur --no-dereference a/drivers/counter/ti-eqep.c b/drivers/counter/ti-eqe diff -Naur --no-dereference a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c --- a/drivers/cpufreq/cpufreq-dt-platdev.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/cpufreq/cpufreq-dt-platdev.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/cpufreq/cpufreq-dt-platdev.c 2024-11-24 20:19:38.128228746 -0500 @@ -149,6 +149,7 @@ { .compatible = "ti,am43", }, { .compatible = "ti,dra7", }, @@ -85990,7 +91138,7 @@ diff -Naur --no-dereference a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpu { .compatible = "qcom,apq8064", }, diff -Naur --no-dereference a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm --- a/drivers/cpufreq/Kconfig.arm 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/cpufreq/Kconfig.arm 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/cpufreq/Kconfig.arm 2024-11-24 20:19:38.128228746 -0500 @@ -323,8 +323,8 @@ config ARM_TI_CPUFREQ @@ -86004,7 +91152,7 @@ diff -Naur --no-dereference a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kcon values contained within the SoC in use. Enable this in order to diff -Naur --no-dereference a/drivers/cpufreq/ti-cpufreq.c b/drivers/cpufreq/ti-cpufreq.c --- a/drivers/cpufreq/ti-cpufreq.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/cpufreq/ti-cpufreq.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/cpufreq/ti-cpufreq.c 2024-11-24 20:19:38.128228746 -0500 @@ -39,6 +39,14 @@ #define OMAP34xx_ProdID_SKUID 0x4830A20C #define OMAP3_SYSCON_BASE (0x48000000 + 0x2000 + 0x270) @@ -86084,7 +91232,7 @@ diff -Naur --no-dereference a/drivers/cpufreq/ti-cpufreq.c b/drivers/cpufreq/ti- diff -Naur --no-dereference a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig --- a/drivers/crypto/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/crypto/Kconfig 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/crypto/Kconfig 2024-11-24 20:19:38.128228746 -0500 @@ -897,6 +897,7 @@ select CRYPTO_AES_ARM64 select CRYPTO_ALGAPI @@ -86102,7 +91250,7 @@ diff -Naur --no-dereference a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig endif # CRYPTO_HW diff -Naur --no-dereference a/drivers/crypto/Makefile b/drivers/crypto/Makefile --- a/drivers/crypto/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/crypto/Makefile 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/crypto/Makefile 2024-11-24 20:19:38.128228746 -0500 @@ -42,6 +42,7 @@ obj-$(CONFIG_CRYPTO_DEV_SAHARA) += sahara.o obj-$(CONFIG_ARCH_STM32) += stm32/ @@ -86113,7 +91261,7 @@ diff -Naur --no-dereference a/drivers/crypto/Makefile b/drivers/crypto/Makefile obj-$(CONFIG_CRYPTO_DEV_VMX) += vmx/ diff -Naur --no-dereference a/drivers/crypto/omap-des.c b/drivers/crypto/omap-des.c --- a/drivers/crypto/omap-des.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/crypto/omap-des.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/crypto/omap-des.c 2024-11-24 20:19:38.128228746 -0500 @@ -736,7 +736,7 @@ { .base.cra_name = "ecb(des)", @@ -86152,7 +91300,7 @@ diff -Naur --no-dereference a/drivers/crypto/omap-des.c b/drivers/crypto/omap-de .base.cra_blocksize = DES3_EDE_BLOCK_SIZE, diff -Naur --no-dereference a/drivers/crypto/sa2ul.c b/drivers/crypto/sa2ul.c --- a/drivers/crypto/sa2ul.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/crypto/sa2ul.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/crypto/sa2ul.c 2024-11-24 20:19:38.128228746 -0500 @@ -66,8 +66,23 @@ /* Max Authentication tag size */ #define SA_MAX_AUTH_TAG_SZ 64 @@ -86594,7 +91742,7 @@ diff -Naur --no-dereference a/drivers/crypto/sa2ul.c b/drivers/crypto/sa2ul.c .remove = sa_ul_remove, diff -Naur --no-dereference a/drivers/crypto/sa2ul.h b/drivers/crypto/sa2ul.h --- a/drivers/crypto/sa2ul.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/crypto/sa2ul.h 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/crypto/sa2ul.h 2024-11-24 20:19:38.129228748 -0500 @@ -17,6 +17,7 @@ #include #include @@ -86641,7 +91789,7 @@ diff -Naur --no-dereference a/drivers/crypto/sa2ul.h b/drivers/crypto/sa2ul.h /** diff -Naur --no-dereference a/drivers/crypto/ti/Kconfig b/drivers/crypto/ti/Kconfig --- a/drivers/crypto/ti/Kconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/crypto/ti/Kconfig 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/crypto/ti/Kconfig 2024-11-24 20:19:38.129228748 -0500 @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: GPL-2.0-only +config CRYPTO_DEV_TI_MCRC64 @@ -86653,13 +91801,13 @@ diff -Naur --no-dereference a/drivers/crypto/ti/Kconfig b/drivers/crypto/ti/Kcon + on TI SOC. diff -Naur --no-dereference a/drivers/crypto/ti/Makefile b/drivers/crypto/ti/Makefile --- a/drivers/crypto/ti/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/crypto/ti/Makefile 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/crypto/ti/Makefile 2024-11-24 20:19:38.129228748 -0500 @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0-only +obj-$(CONFIG_CRYPTO_DEV_TI_MCRC64) += mcrc.o diff -Naur --no-dereference a/drivers/crypto/ti/mcrc.c b/drivers/crypto/ti/mcrc.c --- a/drivers/crypto/ti/mcrc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/crypto/ti/mcrc.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/crypto/ti/mcrc.c 2024-11-24 20:19:38.129228748 -0500 @@ -0,0 +1,366 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -87029,7 +92177,7 @@ diff -Naur --no-dereference a/drivers/crypto/ti/mcrc.c b/drivers/crypto/ti/mcrc. +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c --- a/drivers/dma/dmatest.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/dmatest.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/dmatest.c 2024-11-24 20:19:38.129228748 -0500 @@ -573,6 +573,7 @@ struct dmatest_params *params; struct dma_chan *chan; @@ -87083,7 +92231,7 @@ diff -Naur --no-dereference a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c src->off, dst->off, len, ret); diff -Naur --no-dereference a/drivers/dma/of-dma.c b/drivers/dma/of-dma.c --- a/drivers/dma/of-dma.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/of-dma.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/of-dma.c 2024-11-24 20:19:38.129228748 -0500 @@ -79,8 +79,18 @@ ofdma->dma_router->route_free(ofdma->dma_router->dev, route_data); @@ -87105,7 +92253,7 @@ diff -Naur --no-dereference a/drivers/dma/of-dma.c b/drivers/dma/of-dma.c err: diff -Naur --no-dereference a/drivers/dma/ti/dma-crossbar.c b/drivers/dma/ti/dma-crossbar.c --- a/drivers/dma/ti/dma-crossbar.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/ti/dma-crossbar.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/dma-crossbar.c 2024-11-24 20:19:38.129228748 -0500 @@ -122,7 +122,7 @@ return map; } @@ -87135,7 +92283,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/dma-crossbar.c b/drivers/dma/ti/dma }; diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-am62a.c b/drivers/dma/ti/k3-psil-am62a.c --- a/drivers/dma/ti/k3-psil-am62a.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/dma/ti/k3-psil-am62a.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-psil-am62a.c 2024-11-24 20:19:38.130228749 -0500 @@ -0,0 +1,196 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -87335,7 +92483,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-am62a.c b/drivers/dma/ti/k3 +}; diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-am62.c b/drivers/dma/ti/k3-psil-am62.c --- a/drivers/dma/ti/k3-psil-am62.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/dma/ti/k3-psil-am62.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-psil-am62.c 2024-11-24 20:19:38.130228749 -0500 @@ -0,0 +1,196 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -87535,7 +92683,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-am62.c b/drivers/dma/ti/k3- +}; diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-am64.c b/drivers/dma/ti/k3-psil-am64.c --- a/drivers/dma/ti/k3-psil-am64.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/dma/ti/k3-psil-am64.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-psil-am64.c 2024-11-24 20:19:38.130228749 -0500 @@ -0,0 +1,158 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -87697,7 +92845,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-am64.c b/drivers/dma/ti/k3- +}; diff -Naur --no-dereference a/drivers/dma/ti/k3-psil.c b/drivers/dma/ti/k3-psil.c --- a/drivers/dma/ti/k3-psil.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/ti/k3-psil.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-psil.c 2024-11-24 20:19:38.130228749 -0500 @@ -5,6 +5,7 @@ */ @@ -87725,7 +92873,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-psil.c b/drivers/dma/ti/k3-psil. +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-j7200.c b/drivers/dma/ti/k3-psil-j7200.c --- a/drivers/dma/ti/k3-psil-j7200.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/ti/k3-psil-j7200.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-psil-j7200.c 2024-11-24 20:19:38.130228749 -0500 @@ -143,6 +143,57 @@ /* PSI-L destination thread IDs, used for TX (DMA_MEM_TO_DEV) */ @@ -87809,7 +92957,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-j7200.c b/drivers/dma/ti/k3 PSIL_SA2UL(0xf501, 1), diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-j721e.c b/drivers/dma/ti/k3-psil-j721e.c --- a/drivers/dma/ti/k3-psil-j721e.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/ti/k3-psil-j721e.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-psil-j721e.c 2024-11-24 20:19:38.130228749 -0500 @@ -58,6 +58,14 @@ }, \ } @@ -87992,7 +93140,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-j721e.c b/drivers/dma/ti/k3 PSIL_SA2UL(0xf501, 1), diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-j721s2.c b/drivers/dma/ti/k3-psil-j721s2.c --- a/drivers/dma/ti/k3-psil-j721s2.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/dma/ti/k3-psil-j721s2.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-psil-j721s2.c 2024-11-24 20:19:38.130228749 -0500 @@ -0,0 +1,259 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -88255,7 +93403,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-j721s2.c b/drivers/dma/ti/k +}; diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-j784s4.c b/drivers/dma/ti/k3-psil-j784s4.c --- a/drivers/dma/ti/k3-psil-j784s4.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/dma/ti/k3-psil-j784s4.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-psil-j784s4.c 2024-11-24 20:19:38.130228749 -0500 @@ -0,0 +1,354 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -88613,7 +93761,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-j784s4.c b/drivers/dma/ti/k +}; diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-priv.h b/drivers/dma/ti/k3-psil-priv.h --- a/drivers/dma/ti/k3-psil-priv.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/ti/k3-psil-priv.h 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-psil-priv.h 2024-11-24 20:19:38.130228749 -0500 @@ -40,5 +40,10 @@ extern struct psil_ep_map am654_ep_map; extern struct psil_ep_map j721e_ep_map; @@ -88627,7 +93775,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-psil-priv.h b/drivers/dma/ti/k3- #endif /* K3_PSIL_PRIV_H_ */ diff -Naur --no-dereference a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c --- a/drivers/dma/ti/k3-udma.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/ti/k3-udma.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-udma.c 2024-11-24 20:19:38.130228749 -0500 @@ -5,6 +5,7 @@ */ @@ -91729,7 +96877,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma. #include "k3-udma-private.c" diff -Naur --no-dereference a/drivers/dma/ti/k3-udma-glue.c b/drivers/dma/ti/k3-udma-glue.c --- a/drivers/dma/ti/k3-udma-glue.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/ti/k3-udma-glue.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-udma-glue.c 2024-11-24 20:19:38.130228749 -0500 @@ -6,6 +6,7 @@ * */ @@ -92432,7 +97580,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-udma-glue.c b/drivers/dma/ti/k3- +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/dma/ti/k3-udma.h b/drivers/dma/ti/k3-udma.h --- a/drivers/dma/ti/k3-udma.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/ti/k3-udma.h 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-udma.h 2024-11-24 20:19:38.130228749 -0500 @@ -18,7 +18,7 @@ #define UDMA_RX_FLOW_ID_FW_OES_REG 0x80 #define UDMA_RX_FLOW_ID_FW_STATUS_REG 0x88 @@ -92505,7 +97653,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-udma.h b/drivers/dma/ti/k3-udma. #endif /* K3_UDMA_H_ */ diff -Naur --no-dereference a/drivers/dma/ti/k3-udma-private.c b/drivers/dma/ti/k3-udma-private.c --- a/drivers/dma/ti/k3-udma-private.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/ti/k3-udma-private.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/k3-udma-private.c 2024-11-24 20:19:38.130228749 -0500 @@ -50,6 +50,18 @@ } EXPORT_SYMBOL(of_xudma_dev_get); @@ -92578,7 +97726,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/k3-udma-private.c b/drivers/dma/ti/ +EXPORT_SYMBOL(xudma_pktdma_rflow_get_irq); diff -Naur --no-dereference a/drivers/dma/ti/Kconfig b/drivers/dma/ti/Kconfig --- a/drivers/dma/ti/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/ti/Kconfig 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/Kconfig 2024-11-24 20:19:38.129228748 -0500 @@ -35,7 +35,7 @@ DMA engine is found on OMAP and DRA7xx parts. @@ -92609,7 +97757,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/Kconfig b/drivers/dma/ti/Kconfig bool diff -Naur --no-dereference a/drivers/dma/ti/Makefile b/drivers/dma/ti/Makefile --- a/drivers/dma/ti/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma/ti/Makefile 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma/ti/Makefile 2024-11-24 20:19:38.129228748 -0500 @@ -4,8 +4,14 @@ obj-$(CONFIG_DMA_OMAP) += omap-dma.o obj-$(CONFIG_TI_K3_UDMA) += k3-udma.o @@ -92631,7 +97779,7 @@ diff -Naur --no-dereference a/drivers/dma/ti/Makefile b/drivers/dma/ti/Makefile obj-$(CONFIG_TI_DMA_CROSSBAR) += dma-crossbar.o diff -Naur --no-dereference a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c --- a/drivers/dma-buf/dma-heap.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma-buf/dma-heap.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma-buf/dma-heap.c 2024-11-24 20:19:38.129228748 -0500 @@ -299,4 +299,4 @@ return 0; @@ -92640,7 +97788,7 @@ diff -Naur --no-dereference a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-h +core_initcall(dma_heap_init); diff -Naur --no-dereference a/drivers/dma-buf/heaps/carveout-heap.c b/drivers/dma-buf/heaps/carveout-heap.c --- a/drivers/dma-buf/heaps/carveout-heap.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/dma-buf/heaps/carveout-heap.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma-buf/heaps/carveout-heap.c 2024-11-24 20:19:38.129228748 -0500 @@ -0,0 +1,411 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -93055,7 +98203,7 @@ diff -Naur --no-dereference a/drivers/dma-buf/heaps/carveout-heap.c b/drivers/dm +#endif diff -Naur --no-dereference a/drivers/dma-buf/heaps/Kconfig b/drivers/dma-buf/heaps/Kconfig --- a/drivers/dma-buf/heaps/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma-buf/heaps/Kconfig 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma-buf/heaps/Kconfig 2024-11-24 20:19:38.129228748 -0500 @@ -12,3 +12,12 @@ Choose this option to enable dma-buf CMA heap. This heap is backed by the Contiguous Memory Allocator (CMA). If your system has these @@ -93071,15 +98219,58 @@ diff -Naur --no-dereference a/drivers/dma-buf/heaps/Kconfig b/drivers/dma-buf/he + regions, you should say Y here. diff -Naur --no-dereference a/drivers/dma-buf/heaps/Makefile b/drivers/dma-buf/heaps/Makefile --- a/drivers/dma-buf/heaps/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/dma-buf/heaps/Makefile 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/dma-buf/heaps/Makefile 2024-11-24 20:19:38.129228748 -0500 @@ -2,3 +2,4 @@ obj-y += heap-helpers.o obj-$(CONFIG_DMABUF_HEAPS_SYSTEM) += system_heap.o obj-$(CONFIG_DMABUF_HEAPS_CMA) += cma_heap.o +obj-$(CONFIG_DMABUF_HEAPS_CARVEOUT) += carveout-heap.o +diff -Naur --no-dereference a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c +--- a/drivers/firewire/ohci.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/firewire/ohci.c 2024-11-24 20:19:38.131228751 -0500 +@@ -2545,7 +2545,7 @@ + struct driver_data *driver_data = packet->driver_data; + int ret = -ENOENT; + +- tasklet_disable(&ctx->tasklet); ++ tasklet_disable_in_atomic(&ctx->tasklet); + + if (packet->ack != 0) + goto out; +@@ -3465,7 +3465,7 @@ + struct iso_context *ctx = container_of(base, struct iso_context, base); + int ret = 0; + +- tasklet_disable(&ctx->context.tasklet); ++ tasklet_disable_in_atomic(&ctx->context.tasklet); + + if (!test_and_set_bit_lock(0, &ctx->flushing_completions)) { + context_tasklet((unsigned long)&ctx->context); +diff -Naur --no-dereference a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c +--- a/drivers/firmware/efi/efi.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/firmware/efi/efi.c 2024-11-24 20:19:38.131228751 -0500 +@@ -66,7 +66,7 @@ + + struct workqueue_struct *efi_rts_wq; + +-static bool disable_runtime; ++static bool disable_runtime = IS_ENABLED(CONFIG_PREEMPT_RT); + static int __init setup_noefi(char *arg) + { + disable_runtime = true; +@@ -97,6 +97,9 @@ + if (parse_option_str(str, "noruntime")) + disable_runtime = true; + ++ if (parse_option_str(str, "runtime")) ++ disable_runtime = false; ++ + if (parse_option_str(str, "nosoftreserve")) + set_bit(EFI_MEM_NO_SOFT_RESERVE, &efi.flags); + diff -Naur --no-dereference a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c --- a/drivers/firmware/ti_sci.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/firmware/ti_sci.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/firmware/ti_sci.c 2024-11-24 20:19:38.131228751 -0500 @@ -2,7 +2,7 @@ /* * Texas Instruments System Control Interface Protocol Driver @@ -94096,7 +99287,7 @@ diff -Naur --no-dereference a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sc module_platform_driver(ti_sci_driver); diff -Naur --no-dereference a/drivers/firmware/ti_sci.h b/drivers/firmware/ti_sci.h --- a/drivers/firmware/ti_sci.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/firmware/ti_sci.h 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/firmware/ti_sci.h 2024-11-24 20:19:38.131228751 -0500 @@ -6,7 +6,7 @@ * The system works in a message response protocol * See: http://processors.wiki.ti.com/index.php/TISCI for details @@ -94367,7 +99558,7 @@ diff -Naur --no-dereference a/drivers/firmware/ti_sci.h b/drivers/firmware/ti_sc /** diff -Naur --no-dereference a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c --- a/drivers/gpio/gpio-davinci.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpio/gpio-davinci.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpio/gpio-davinci.c 2024-11-24 20:19:38.131228751 -0500 @@ -22,6 +22,7 @@ #include #include @@ -94496,7 +99687,7 @@ diff -Naur --no-dereference a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-da +MODULE_ALIAS("platform:gpio-davinci"); diff -Naur --no-dereference a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c --- a/drivers/gpio/gpiolib.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpio/gpiolib.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpio/gpiolib.c 2024-11-24 20:19:38.132228753 -0500 @@ -783,9 +783,11 @@ ida_free(&gpio_ida, gdev->id); err_free_gdev: @@ -94529,7 +99720,7 @@ diff -Naur --no-dereference a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c if (gc->request) { diff -Naur --no-dereference a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c --- a/drivers/gpio/gpiolib-sysfs.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpio/gpiolib-sysfs.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpio/gpiolib-sysfs.c 2024-11-24 20:19:38.132228753 -0500 @@ -38,10 +38,10 @@ /* * /sys/class/gpio/gpioN... only for GPIOs that are exported @@ -94624,7 +99815,7 @@ diff -Naur --no-dereference a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpioli * /base ... matching gpio_chip.base (N) diff -Naur --no-dereference a/drivers/gpio/gpio-of-helper.c b/drivers/gpio/gpio-of-helper.c --- a/drivers/gpio/gpio-of-helper.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpio/gpio-of-helper.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpio/gpio-of-helper.c 2024-11-24 20:19:38.131228751 -0500 @@ -0,0 +1,422 @@ +/* + * GPIO OF based helper @@ -95050,7 +100241,7 @@ diff -Naur --no-dereference a/drivers/gpio/gpio-of-helper.c b/drivers/gpio/gpio- +MODULE_ALIAS("platform:gpio-of-helper"); diff -Naur --no-dereference a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c --- a/drivers/gpio/gpio-omap.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpio/gpio-omap.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpio/gpio-omap.c 2024-11-24 20:19:38.132228753 -0500 @@ -1050,11 +1050,8 @@ irq->first = irq_base; @@ -95067,7 +100258,7 @@ diff -Naur --no-dereference a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap. omap_gpio_irq_handler, diff -Naur --no-dereference a/drivers/gpio/gpio-tps6594x.c b/drivers/gpio/gpio-tps6594x.c --- a/drivers/gpio/gpio-tps6594x.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpio/gpio-tps6594x.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpio/gpio-tps6594x.c 2024-11-24 20:19:38.132228753 -0500 @@ -0,0 +1,142 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -95213,7 +100404,7 @@ diff -Naur --no-dereference a/drivers/gpio/gpio-tps6594x.c b/drivers/gpio/gpio-t +MODULE_LICENSE("GPL"); diff -Naur --no-dereference a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig --- a/drivers/gpio/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpio/Kconfig 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpio/Kconfig 2024-11-24 20:19:38.131228751 -0500 @@ -94,6 +94,20 @@ If unsure, say Y. @@ -95260,7 +100451,7 @@ diff -Naur --no-dereference a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig depends on MFD_TPS68470 diff -Naur --no-dereference a/drivers/gpio/Makefile b/drivers/gpio/Makefile --- a/drivers/gpio/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpio/Makefile 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpio/Makefile 2024-11-24 20:19:38.131228751 -0500 @@ -10,6 +10,7 @@ obj-$(CONFIG_GPIO_CDEV) += gpiolib-cdev.o obj-$(CONFIG_GPIO_SYSFS) += gpiolib-sysfs.o @@ -95279,7 +100470,7 @@ diff -Naur --no-dereference a/drivers/gpio/Makefile b/drivers/gpio/Makefile obj-$(CONFIG_GPIO_TS4800) += gpio-ts4800.o diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c --- a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c 2024-11-24 20:19:38.132228753 -0500 @@ -0,0 +1,923 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -96206,7 +101397,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c b/d +MODULE_ALIAS("platform:cdns-dsi"); diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.h b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.h --- a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.h 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.h 2024-11-24 20:19:38.132228753 -0500 @@ -0,0 +1,471 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -96681,7 +101872,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.h b/d +#endif /* !CDNS_DSI_H */ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.c b/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.c --- a/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.c 2024-11-24 20:19:38.132228753 -0500 @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -96736,7 +101927,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.c b/ +}; diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.h b/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.h --- a/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.h 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.h 2024-11-24 20:19:38.132228753 -0500 @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -96758,7 +101949,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-dsi-j721e.h b/ +#endif /* !CDNS_DSI_J721E_H */ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c 2024-11-24 20:19:38.133228755 -0500 @@ -52,6 +52,8 @@ #include "cdns-mhdp8546-j721e.h" @@ -96847,7 +102038,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core. mhdp->bridge.timings = mhdp->info->timings; diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h 2024-11-24 20:19:38.133228755 -0500 @@ -375,6 +375,7 @@ bool link_up; @@ -96858,7 +102049,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core. * "start_lock" protects the access to bridge_attached and diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/Kconfig b/drivers/gpu/drm/bridge/cadence/Kconfig --- a/drivers/gpu/drm/bridge/cadence/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/cadence/Kconfig 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/cadence/Kconfig 2024-11-24 20:19:38.132228753 -0500 @@ -22,3 +22,24 @@ initializes the J721E Display Port and sets up the clock and data muxes. @@ -96886,7 +102077,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/Kconfig b/drivers/g +endif diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cadence/Makefile b/drivers/gpu/drm/bridge/cadence/Makefile --- a/drivers/gpu/drm/bridge/cadence/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/cadence/Makefile 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/cadence/Makefile 2024-11-24 20:19:38.132228753 -0500 @@ -2,3 +2,6 @@ obj-$(CONFIG_DRM_CDNS_MHDP8546) += cdns-mhdp8546.o cdns-mhdp8546-y := cdns-mhdp8546-core.o @@ -98206,7 +103397,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/cdns-dsi.c b/drivers/gpu/dr - diff -Naur --no-dereference a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c --- a/drivers/gpu/drm/bridge/display-connector.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/display-connector.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/display-connector.c 2024-11-24 20:19:38.133228755 -0500 @@ -11,6 +11,7 @@ #include #include @@ -98300,7 +103491,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/display-connector.c b/drive }; diff -Naur --no-dereference a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/ite-it66121.c --- a/drivers/gpu/drm/bridge/ite-it66121.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/ite-it66121.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/ite-it66121.c 2024-11-24 20:19:38.133228755 -0500 @@ -0,0 +1,1662 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -99966,7 +105157,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig --- a/drivers/gpu/drm/bridge/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/Kconfig 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/Kconfig 2024-11-24 20:19:38.132228753 -0500 @@ -16,17 +16,6 @@ menu "Display Interface Bridges" depends on DRM && DRM_BRIDGE @@ -100002,7 +105193,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/b depends on OF diff -Naur --no-dereference a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile --- a/drivers/gpu/drm/bridge/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/Makefile 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/Makefile 2024-11-24 20:19:38.132228753 -0500 @@ -1,5 +1,4 @@ # SPDX-License-Identifier: GPL-2.0 -obj-$(CONFIG_DRM_CDNS_DSI) += cdns-dsi.o @@ -100019,7 +105210,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/ obj-y += cadence/ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c --- a/drivers/gpu/drm/bridge/sii902x.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/sii902x.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/sii902x.c 2024-11-24 20:19:38.133228755 -0500 @@ -166,10 +166,15 @@ struct i2c_client *i2c; struct regmap *regmap; @@ -100362,7 +105553,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm .id_table = sii902x_i2c_ids, diff -Naur --no-dereference a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c 2024-11-24 20:19:38.133228755 -0500 @@ -123,6 +123,7 @@ * @dp_lanes: Count of dp_lanes we're using. * @ln_assign: Value to program to the LN_ASSIGN register. @@ -100658,7 +105849,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gp return 0; diff -Naur --no-dereference a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c --- a/drivers/gpu/drm/drm_atomic_helper.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/drm_atomic_helper.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/drm_atomic_helper.c 2024-11-24 20:19:38.133228755 -0500 @@ -3170,6 +3170,7 @@ struct drm_connector_list_iter conn_iter; struct drm_plane *plane; @@ -100702,9 +105893,306 @@ diff -Naur --no-dereference a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/ for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) state->crtcs[i].old_state = crtc->state; +diff -Naur --no-dereference a/drivers/gpu/drm/i915/display/intel_sprite.c b/drivers/gpu/drm/i915/display/intel_sprite.c +--- a/drivers/gpu/drm/i915/display/intel_sprite.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/i915/display/intel_sprite.c 2024-11-24 20:19:38.133228755 -0500 +@@ -118,7 +118,8 @@ + "PSR idle timed out 0x%x, atomic update may fail\n", + psr_status); + +- local_irq_disable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_disable(); + + crtc->debug.min_vbl = min; + crtc->debug.max_vbl = max; +@@ -143,11 +144,13 @@ + break; + } + +- local_irq_enable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_enable(); + + timeout = schedule_timeout(timeout); + +- local_irq_disable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_disable(); + } + + finish_wait(wq, &wait); +@@ -180,7 +183,8 @@ + return; + + irq_disable: +- local_irq_disable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_disable(); + } + + /** +@@ -218,7 +222,8 @@ + new_crtc_state->uapi.event = NULL; + } + +- local_irq_enable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_enable(); + + if (intel_vgpu_active(dev_priv)) + return; +diff -Naur --no-dereference a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c +--- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c 2024-11-24 20:19:38.134228757 -0500 +@@ -1080,7 +1080,7 @@ + struct i915_ggtt *ggtt = cache_to_ggtt(cache); + + intel_gt_flush_ggtt_writes(ggtt->vm.gt); +- io_mapping_unmap_atomic((void __iomem *)vaddr); ++ io_mapping_unmap_local((void __iomem *)vaddr); + + if (drm_mm_node_allocated(&cache->node)) { + ggtt->vm.clear_range(&ggtt->vm, +@@ -1146,7 +1146,7 @@ + + if (cache->vaddr) { + intel_gt_flush_ggtt_writes(ggtt->vm.gt); +- io_mapping_unmap_atomic((void __force __iomem *) unmask_page(cache->vaddr)); ++ io_mapping_unmap_local((void __force __iomem *) unmask_page(cache->vaddr)); + } else { + struct i915_vma *vma; + int err; +@@ -1194,8 +1194,7 @@ + offset += page << PAGE_SHIFT; + } + +- vaddr = (void __force *)io_mapping_map_atomic_wc(&ggtt->iomap, +- offset); ++ vaddr = (void __force *)io_mapping_map_local_wc(&ggtt->iomap, offset); + cache->page = page; + cache->vaddr = (unsigned long)vaddr; + +diff -Naur --no-dereference a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c +--- a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c 2024-11-24 20:19:38.134228757 -0500 +@@ -342,10 +342,9 @@ + /* Kick the work once more to drain the signalers */ + irq_work_sync(&b->irq_work); + while (unlikely(READ_ONCE(b->irq_armed))) { +- local_irq_disable(); +- signal_irq_work(&b->irq_work); +- local_irq_enable(); ++ irq_work_queue(&b->irq_work); + cond_resched(); ++ irq_work_sync(&b->irq_work); + } + GEM_BUG_ON(!list_empty(&b->signalers)); + } +diff -Naur --no-dereference a/drivers/gpu/drm/i915/gt/intel_engine_pm.c b/drivers/gpu/drm/i915/gt/intel_engine_pm.c +--- a/drivers/gpu/drm/i915/gt/intel_engine_pm.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/i915/gt/intel_engine_pm.c 2024-11-24 20:19:38.134228757 -0500 +@@ -60,9 +60,10 @@ + + static inline unsigned long __timeline_mark_lock(struct intel_context *ce) + { +- unsigned long flags; ++ unsigned long flags = 0; + +- local_irq_save(flags); ++ if (!force_irqthreads) ++ local_irq_save(flags); + mutex_acquire(&ce->timeline->mutex.dep_map, 2, 0, _THIS_IP_); + + return flags; +@@ -72,7 +73,8 @@ + unsigned long flags) + { + mutex_release(&ce->timeline->mutex.dep_map, _THIS_IP_); +- local_irq_restore(flags); ++ if (!force_irqthreads) ++ local_irq_restore(flags); + } + + #else +diff -Naur --no-dereference a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c +--- a/drivers/gpu/drm/i915/i915_gem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/i915/i915_gem.c 2024-11-24 20:19:38.134228757 -0500 +@@ -355,22 +355,15 @@ + char __user *user_data, int length) + { + void __iomem *vaddr; +- unsigned long unwritten; ++ bool fail = false; + + /* We can use the cpu mem copy function because this is X86. */ +- vaddr = io_mapping_map_atomic_wc(mapping, base); +- unwritten = __copy_to_user_inatomic(user_data, +- (void __force *)vaddr + offset, +- length); +- io_mapping_unmap_atomic(vaddr); +- if (unwritten) { +- vaddr = io_mapping_map_wc(mapping, base, PAGE_SIZE); +- unwritten = copy_to_user(user_data, +- (void __force *)vaddr + offset, +- length); +- io_mapping_unmap(vaddr); +- } +- return unwritten; ++ vaddr = io_mapping_map_local_wc(mapping, base); ++ if (copy_to_user(user_data, (void __force *)vaddr + offset, length)) ++ fail = true; ++ io_mapping_unmap_local(vaddr); ++ ++ return fail; + } + + static int +@@ -539,21 +532,14 @@ + char __user *user_data, int length) + { + void __iomem *vaddr; +- unsigned long unwritten; ++ bool fail = false; + + /* We can use the cpu mem copy function because this is X86. */ +- vaddr = io_mapping_map_atomic_wc(mapping, base); +- unwritten = __copy_from_user_inatomic_nocache((void __force *)vaddr + offset, +- user_data, length); +- io_mapping_unmap_atomic(vaddr); +- if (unwritten) { +- vaddr = io_mapping_map_wc(mapping, base, PAGE_SIZE); +- unwritten = copy_from_user((void __force *)vaddr + offset, +- user_data, length); +- io_mapping_unmap(vaddr); +- } +- +- return unwritten; ++ vaddr = io_mapping_map_local_wc(mapping, base); ++ if (copy_from_user((void __force *)vaddr + offset, user_data, length)) ++ fail = true; ++ io_mapping_unmap_local(vaddr); ++ return fail; + } + + /** +diff -Naur --no-dereference a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c +--- a/drivers/gpu/drm/i915/i915_irq.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/i915/i915_irq.c 2024-11-24 20:19:38.134228757 -0500 +@@ -847,6 +847,7 @@ + spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); + + /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */ ++ preempt_disable_rt(); + + /* Get optional system timestamp before query. */ + if (stime) +@@ -898,6 +899,7 @@ + *etime = ktime_get(); + + /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */ ++ preempt_enable_rt(); + + spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); + +diff -Naur --no-dereference a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h +--- a/drivers/gpu/drm/i915/i915_trace.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/i915/i915_trace.h 2024-11-24 20:19:38.134228757 -0500 +@@ -2,6 +2,10 @@ + #if !defined(_I915_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) + #define _I915_TRACE_H_ + ++#ifdef CONFIG_PREEMPT_RT ++#define NOTRACE ++#endif ++ + #include + #include + #include +@@ -778,7 +782,7 @@ + TP_ARGS(rq) + ); + +-#if defined(CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS) ++#if defined(CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS) && !defined(NOTRACE) + DEFINE_EVENT(i915_request, i915_request_submit, + TP_PROTO(struct i915_request *rq), + TP_ARGS(rq) +diff -Naur --no-dereference a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c +--- a/drivers/gpu/drm/i915/selftests/i915_gem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/i915/selftests/i915_gem.c 2024-11-24 20:19:38.134228757 -0500 +@@ -57,12 +57,12 @@ + + ggtt->vm.insert_page(&ggtt->vm, dma, slot, I915_CACHE_NONE, 0); + +- s = io_mapping_map_atomic_wc(&ggtt->iomap, slot); ++ s = io_mapping_map_local_wc(&ggtt->iomap, slot); + for (x = 0; x < PAGE_SIZE / sizeof(u32); x++) { + prng = next_pseudo_random32(prng); + iowrite32(prng, &s[x]); + } +- io_mapping_unmap_atomic(s); ++ io_mapping_unmap_local(s); + } + + ggtt->vm.clear_range(&ggtt->vm, slot, PAGE_SIZE); +diff -Naur --no-dereference a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c +--- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c 2024-11-24 20:19:38.134228757 -0500 +@@ -1201,9 +1201,9 @@ + u64 offset = tmp.start + order[n] * PAGE_SIZE; + u32 __iomem *vaddr; + +- vaddr = io_mapping_map_atomic_wc(&ggtt->iomap, offset); ++ vaddr = io_mapping_map_local_wc(&ggtt->iomap, offset); + iowrite32(n, vaddr + n); +- io_mapping_unmap_atomic(vaddr); ++ io_mapping_unmap_local(vaddr); + } + intel_gt_flush_ggtt_writes(ggtt->vm.gt); + +@@ -1213,9 +1213,9 @@ + u32 __iomem *vaddr; + u32 val; + +- vaddr = io_mapping_map_atomic_wc(&ggtt->iomap, offset); ++ vaddr = io_mapping_map_local_wc(&ggtt->iomap, offset); + val = ioread32(vaddr + n); +- io_mapping_unmap_atomic(vaddr); ++ io_mapping_unmap_local(vaddr); + + if (val != n) { + pr_err("insert page failed: found %d, expected %d\n", +diff -Naur --no-dereference a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/fbmem.h b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/fbmem.h +--- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/fbmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/fbmem.h 2024-11-24 20:19:38.135228758 -0500 +@@ -60,19 +60,19 @@ + static inline u32 + fbmem_peek(struct io_mapping *fb, u32 off) + { +- u8 __iomem *p = io_mapping_map_atomic_wc(fb, off & PAGE_MASK); ++ u8 __iomem *p = io_mapping_map_local_wc(fb, off & PAGE_MASK); + u32 val = ioread32(p + (off & ~PAGE_MASK)); +- io_mapping_unmap_atomic(p); ++ io_mapping_unmap_local(p); + return val; + } + + static inline void + fbmem_poke(struct io_mapping *fb, u32 off, u32 val) + { +- u8 __iomem *p = io_mapping_map_atomic_wc(fb, off & PAGE_MASK); ++ u8 __iomem *p = io_mapping_map_local_wc(fb, off & PAGE_MASK); + iowrite32(val, p + (off & ~PAGE_MASK)); + wmb(); +- io_mapping_unmap_atomic(p); ++ io_mapping_unmap_local(p); + } + + static inline bool diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c --- a/drivers/gpu/drm/omapdrm/dss/dispc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/omapdrm/dss/dispc.c 2024-11-24 20:19:38.135228758 -0500 @@ -92,6 +92,8 @@ u8 mgr_height_start; u16 mgr_width_max; @@ -101002,7 +106490,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/ .wb_setup = dispc_wb_setup, diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h 2024-11-24 20:19:38.135228758 -0500 @@ -14,6 +14,7 @@ #include #include @@ -101045,7 +106533,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gp int (*wb_setup)(struct dispc_device *dispc, diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/Kconfig b/drivers/gpu/drm/omapdrm/Kconfig --- a/drivers/gpu/drm/omapdrm/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/Kconfig 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/omapdrm/Kconfig 2024-11-24 20:19:38.135228758 -0500 @@ -11,6 +11,17 @@ if DRM_OMAP @@ -101066,7 +106554,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/Kconfig b/drivers/gpu/drm/ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/Makefile b/drivers/gpu/drm/omapdrm/Makefile --- a/drivers/gpu/drm/omapdrm/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/Makefile 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/omapdrm/Makefile 2024-11-24 20:19:38.135228758 -0500 @@ -12,6 +12,7 @@ omap_debugfs.o \ omap_crtc.o \ @@ -101084,7 +106572,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/Makefile b/drivers/gpu/drm obj-$(CONFIG_DRM_OMAP) += omapdrm.o diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c --- a/drivers/gpu/drm/omapdrm/omap_crtc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_crtc.c 2024-11-24 20:19:38.135228758 -0500 @@ -24,6 +24,11 @@ unsigned int rotation; unsigned int zpos; @@ -101307,7 +106795,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/ return crtc; diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_crtc.h b/drivers/gpu/drm/omapdrm/omap_crtc.h --- a/drivers/gpu/drm/omapdrm/omap_crtc.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_crtc.h 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_crtc.h 2024-11-24 20:19:38.135228758 -0500 @@ -32,5 +32,8 @@ void omap_crtc_vblank_irq(struct drm_crtc *crtc); void omap_crtc_framedone_irq(struct drm_crtc *crtc, uint32_t irqstatus); @@ -101319,7 +106807,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_crtc.h b/drivers/gpu/ #endif /* __OMAPDRM_CRTC_H__ */ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c --- a/drivers/gpu/drm/omapdrm/omap_drv.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_drv.c 2024-08-28 19:44:05.608037946 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_drv.c 2024-11-24 20:19:38.135228758 -0500 @@ -116,6 +116,98 @@ priv->dispc_ops->runtime_put(priv->dispc); } @@ -101639,7 +107127,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/d destroy_workqueue(priv->wq); diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h --- a/drivers/gpu/drm/omapdrm/omap_drv.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_drv.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_drv.h 2024-11-24 20:19:38.135228758 -0500 @@ -13,6 +13,7 @@ #include "dss/omapdss.h" @@ -101746,7 +107234,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/d #endif /* __OMAPDRM_DRV_H__ */ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_fb.c b/drivers/gpu/drm/omapdrm/omap_fb.c --- a/drivers/gpu/drm/omapdrm/omap_fb.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_fb.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_fb.c 2024-11-24 20:19:38.135228758 -0500 @@ -131,7 +131,9 @@ /* update ovl info for scanout, handles cases of multi-planar fb's, etc. */ @@ -101796,7 +107284,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_fb.c b/drivers/gpu/dr /* pin, prepare for scanout: */ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_fb.h b/drivers/gpu/drm/omapdrm/omap_fb.h --- a/drivers/gpu/drm/omapdrm/omap_fb.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_fb.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_fb.h 2024-11-24 20:19:38.135228758 -0500 @@ -26,7 +26,9 @@ int omap_framebuffer_pin(struct drm_framebuffer *fb); void omap_framebuffer_unpin(struct drm_framebuffer *fb); @@ -101810,7 +107298,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_fb.h b/drivers/gpu/dr diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_irq.c b/drivers/gpu/drm/omapdrm/omap_irq.c --- a/drivers/gpu/drm/omapdrm/omap_irq.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_irq.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_irq.c 2024-11-24 20:19:38.136228760 -0500 @@ -237,6 +237,7 @@ omap_irq_ocp_error_handler(dev, irqstatus); @@ -101831,7 +107319,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_irq.c b/drivers/gpu/d priv->dispc_ops->runtime_put(priv->dispc); diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_overlay.c b/drivers/gpu/drm/omapdrm/omap_overlay.c --- a/drivers/gpu/drm/omapdrm/omap_overlay.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_overlay.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_overlay.c 2024-11-24 20:19:38.136228760 -0500 @@ -0,0 +1,333 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -102168,7 +107656,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_overlay.c b/drivers/g +} diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_overlay.h b/drivers/gpu/drm/omapdrm/omap_overlay.h --- a/drivers/gpu/drm/omapdrm/omap_overlay.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_overlay.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_overlay.h 2024-11-24 20:19:38.136228760 -0500 @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -102221,7 +107709,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_overlay.h b/drivers/g +#endif /* __OMAPDRM_OVERLAY_H__ */ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c --- a/drivers/gpu/drm/omapdrm/omap_plane.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_plane.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_plane.c 2024-11-24 20:19:38.136228760 -0500 @@ -7,6 +7,7 @@ #include #include @@ -102854,7 +108342,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu +} diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_plane.h b/drivers/gpu/drm/omapdrm/omap_plane.h --- a/drivers/gpu/drm/omapdrm/omap_plane.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_plane.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_plane.h 2024-11-24 20:19:38.136228760 -0500 @@ -22,5 +22,10 @@ u32 possible_crtcs); void omap_plane_install_properties(struct drm_plane *plane, @@ -102868,7 +108356,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_plane.h b/drivers/gpu #endif /* __OMAPDRM_PLANE_H__ */ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_wb.c b/drivers/gpu/drm/omapdrm/omap_wb.c --- a/drivers/gpu/drm/omapdrm/omap_wb.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_wb.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_wb.c 2024-11-24 20:19:38.136228760 -0500 @@ -0,0 +1,178 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -103050,7 +108538,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_wb.c b/drivers/gpu/dr +} diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_wb_cap.c b/drivers/gpu/drm/omapdrm/omap_wb_cap.c --- a/drivers/gpu/drm/omapdrm/omap_wb_cap.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_wb_cap.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_wb_cap.c 2024-11-24 20:19:38.136228760 -0500 @@ -0,0 +1,1045 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -104099,7 +109587,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_wb_cap.c b/drivers/gp +} diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_wb.h b/drivers/gpu/drm/omapdrm/omap_wb.h --- a/drivers/gpu/drm/omapdrm/omap_wb.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_wb.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_wb.h 2024-11-24 20:19:38.136228760 -0500 @@ -0,0 +1,214 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -104317,7 +109805,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_wb.h b/drivers/gpu/dr +#endif /* __OMAP_WB_H__ */ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_wb_m2m.c b/drivers/gpu/drm/omapdrm/omap_wb_m2m.c --- a/drivers/gpu/drm/omapdrm/omap_wb_m2m.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/gpu/drm/omapdrm/omap_wb_m2m.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/omapdrm/omap_wb_m2m.c 2024-11-24 20:19:38.136228760 -0500 @@ -0,0 +1,1198 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -105519,7 +111007,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/omapdrm/omap_wb_m2m.c b/drivers/gp +} diff -Naur --no-dereference a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c --- a/drivers/gpu/drm/panel/panel-simple.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/panel/panel-simple.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/panel/panel-simple.c 2024-11-24 20:19:38.136228760 -0500 @@ -858,6 +858,63 @@ .connector_type = DRM_MODE_CONNECTOR_eDP, }; @@ -105648,9 +111136,248 @@ diff -Naur --no-dereference a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu .compatible = "winstar,wf35ltiacd", .data = &winstar_wf35ltiacd, }, { +diff -Naur --no-dereference a/drivers/gpu/drm/qxl/qxl_image.c b/drivers/gpu/drm/qxl/qxl_image.c +--- a/drivers/gpu/drm/qxl/qxl_image.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/qxl/qxl_image.c 2024-11-24 20:19:38.137228762 -0500 +@@ -124,12 +124,12 @@ + wrong (check the bitmaps are sent correctly + first) */ + +- ptr = qxl_bo_kmap_atomic_page(qdev, chunk_bo, 0); ++ ptr = qxl_bo_kmap_local_page(qdev, chunk_bo, 0); + chunk = ptr; + chunk->data_size = height * chunk_stride; + chunk->prev_chunk = 0; + chunk->next_chunk = 0; +- qxl_bo_kunmap_atomic_page(qdev, chunk_bo, ptr); ++ qxl_bo_kunmap_local_page(qdev, chunk_bo, ptr); + + { + void *k_data, *i_data; +@@ -143,7 +143,7 @@ + i_data = (void *)data; + + while (remain > 0) { +- ptr = qxl_bo_kmap_atomic_page(qdev, chunk_bo, page << PAGE_SHIFT); ++ ptr = qxl_bo_kmap_local_page(qdev, chunk_bo, page << PAGE_SHIFT); + + if (page == 0) { + chunk = ptr; +@@ -157,7 +157,7 @@ + + memcpy(k_data, i_data, size); + +- qxl_bo_kunmap_atomic_page(qdev, chunk_bo, ptr); ++ qxl_bo_kunmap_local_page(qdev, chunk_bo, ptr); + i_data += size; + remain -= size; + page++; +@@ -175,10 +175,10 @@ + page_offset = offset_in_page(out_offset); + size = min((int)(PAGE_SIZE - page_offset), remain); + +- ptr = qxl_bo_kmap_atomic_page(qdev, chunk_bo, page_base); ++ ptr = qxl_bo_kmap_local_page(qdev, chunk_bo, page_base); + k_data = ptr + page_offset; + memcpy(k_data, i_data, size); +- qxl_bo_kunmap_atomic_page(qdev, chunk_bo, ptr); ++ qxl_bo_kunmap_local_page(qdev, chunk_bo, ptr); + remain -= size; + i_data += size; + out_offset += size; +@@ -189,7 +189,7 @@ + qxl_bo_kunmap(chunk_bo); + + image_bo = dimage->bo; +- ptr = qxl_bo_kmap_atomic_page(qdev, image_bo, 0); ++ ptr = qxl_bo_kmap_local_page(qdev, image_bo, 0); + image = ptr; + + image->descriptor.id = 0; +@@ -212,7 +212,7 @@ + break; + default: + DRM_ERROR("unsupported image bit depth\n"); +- qxl_bo_kunmap_atomic_page(qdev, image_bo, ptr); ++ qxl_bo_kunmap_local_page(qdev, image_bo, ptr); + return -EINVAL; + } + image->u.bitmap.flags = QXL_BITMAP_TOP_DOWN; +@@ -222,7 +222,7 @@ + image->u.bitmap.palette = 0; + image->u.bitmap.data = qxl_bo_physical_address(qdev, chunk_bo, 0); + +- qxl_bo_kunmap_atomic_page(qdev, image_bo, ptr); ++ qxl_bo_kunmap_local_page(qdev, image_bo, ptr); + + return 0; + } +diff -Naur --no-dereference a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c +--- a/drivers/gpu/drm/qxl/qxl_ioctl.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/qxl/qxl_ioctl.c 2024-11-24 20:19:38.137228762 -0500 +@@ -89,11 +89,11 @@ + { + void *reloc_page; + +- reloc_page = qxl_bo_kmap_atomic_page(qdev, info->dst_bo, info->dst_offset & PAGE_MASK); ++ reloc_page = qxl_bo_kmap_local_page(qdev, info->dst_bo, info->dst_offset & PAGE_MASK); + *(uint64_t *)(reloc_page + (info->dst_offset & ~PAGE_MASK)) = qxl_bo_physical_address(qdev, + info->src_bo, + info->src_offset); +- qxl_bo_kunmap_atomic_page(qdev, info->dst_bo, reloc_page); ++ qxl_bo_kunmap_local_page(qdev, info->dst_bo, reloc_page); + } + + static void +@@ -105,9 +105,9 @@ + if (info->src_bo && !info->src_bo->is_primary) + id = info->src_bo->surface_id; + +- reloc_page = qxl_bo_kmap_atomic_page(qdev, info->dst_bo, info->dst_offset & PAGE_MASK); ++ reloc_page = qxl_bo_kmap_local_page(qdev, info->dst_bo, info->dst_offset & PAGE_MASK); + *(uint32_t *)(reloc_page + (info->dst_offset & ~PAGE_MASK)) = id; +- qxl_bo_kunmap_atomic_page(qdev, info->dst_bo, reloc_page); ++ qxl_bo_kunmap_local_page(qdev, info->dst_bo, reloc_page); + } + + /* return holding the reference to this object */ +@@ -149,7 +149,6 @@ + struct qxl_bo *cmd_bo; + void *fb_cmd; + int i, ret, num_relocs; +- int unwritten; + + switch (cmd->type) { + case QXL_CMD_DRAW: +@@ -185,21 +184,21 @@ + goto out_free_reloc; + + /* TODO copy slow path code from i915 */ +- fb_cmd = qxl_bo_kmap_atomic_page(qdev, cmd_bo, (release->release_offset & PAGE_MASK)); +- unwritten = __copy_from_user_inatomic_nocache +- (fb_cmd + sizeof(union qxl_release_info) + (release->release_offset & ~PAGE_MASK), +- u64_to_user_ptr(cmd->command), cmd->command_size); ++ fb_cmd = qxl_bo_kmap_local_page(qdev, cmd_bo, (release->release_offset & PAGE_MASK)); + +- { ++ if (copy_from_user(fb_cmd + sizeof(union qxl_release_info) + ++ (release->release_offset & ~PAGE_MASK), ++ u64_to_user_ptr(cmd->command), cmd->command_size)) { ++ ret = -EFAULT; ++ } else { + struct qxl_drawable *draw = fb_cmd; + + draw->mm_time = qdev->rom->mm_clock; + } + +- qxl_bo_kunmap_atomic_page(qdev, cmd_bo, fb_cmd); +- if (unwritten) { +- DRM_ERROR("got unwritten %d\n", unwritten); +- ret = -EFAULT; ++ qxl_bo_kunmap_local_page(qdev, cmd_bo, fb_cmd); ++ if (ret) { ++ DRM_ERROR("copy from user failed %d\n", ret); + goto out_free_release; + } + +diff -Naur --no-dereference a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c +--- a/drivers/gpu/drm/qxl/qxl_object.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/qxl/qxl_object.c 2024-11-24 20:19:38.137228762 -0500 +@@ -173,8 +173,8 @@ + return 0; + } + +-void *qxl_bo_kmap_atomic_page(struct qxl_device *qdev, +- struct qxl_bo *bo, int page_offset) ++void *qxl_bo_kmap_local_page(struct qxl_device *qdev, ++ struct qxl_bo *bo, int page_offset) + { + unsigned long offset; + void *rptr; +@@ -189,7 +189,7 @@ + goto fallback; + + offset = bo->tbo.mem.start << PAGE_SHIFT; +- return io_mapping_map_atomic_wc(map, offset + page_offset); ++ return io_mapping_map_local_wc(map, offset + page_offset); + fallback: + if (bo->kptr) { + rptr = bo->kptr + (page_offset * PAGE_SIZE); +@@ -215,14 +215,14 @@ + ttm_bo_kunmap(&bo->kmap); + } + +-void qxl_bo_kunmap_atomic_page(struct qxl_device *qdev, +- struct qxl_bo *bo, void *pmap) ++void qxl_bo_kunmap_local_page(struct qxl_device *qdev, ++ struct qxl_bo *bo, void *pmap) + { + if ((bo->tbo.mem.mem_type != TTM_PL_VRAM) && + (bo->tbo.mem.mem_type != TTM_PL_PRIV)) + goto fallback; + +- io_mapping_unmap_atomic(pmap); ++ io_mapping_unmap_local(pmap); + return; + fallback: + qxl_bo_kunmap(bo); +diff -Naur --no-dereference a/drivers/gpu/drm/qxl/qxl_object.h b/drivers/gpu/drm/qxl/qxl_object.h +--- a/drivers/gpu/drm/qxl/qxl_object.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/qxl/qxl_object.h 2024-11-24 20:19:38.137228762 -0500 +@@ -89,8 +89,8 @@ + struct qxl_bo **bo_ptr); + extern int qxl_bo_kmap(struct qxl_bo *bo, void **ptr); + extern void qxl_bo_kunmap(struct qxl_bo *bo); +-void *qxl_bo_kmap_atomic_page(struct qxl_device *qdev, struct qxl_bo *bo, int page_offset); +-void qxl_bo_kunmap_atomic_page(struct qxl_device *qdev, struct qxl_bo *bo, void *map); ++void *qxl_bo_kmap_local_page(struct qxl_device *qdev, struct qxl_bo *bo, int page_offset); ++void qxl_bo_kunmap_local_page(struct qxl_device *qdev, struct qxl_bo *bo, void *map); + extern struct qxl_bo *qxl_bo_ref(struct qxl_bo *bo); + extern void qxl_bo_unref(struct qxl_bo **bo); + extern int qxl_bo_pin(struct qxl_bo *bo); +diff -Naur --no-dereference a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c +--- a/drivers/gpu/drm/qxl/qxl_release.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/qxl/qxl_release.c 2024-11-24 20:19:38.137228762 -0500 +@@ -414,7 +414,7 @@ + union qxl_release_info *info; + struct qxl_bo *bo = release->release_bo; + +- ptr = qxl_bo_kmap_atomic_page(qdev, bo, release->release_offset & PAGE_MASK); ++ ptr = qxl_bo_kmap_local_page(qdev, bo, release->release_offset & PAGE_MASK); + if (!ptr) + return NULL; + info = ptr + (release->release_offset & ~PAGE_MASK); +@@ -429,7 +429,7 @@ + void *ptr; + + ptr = ((void *)info) - (release->release_offset & ~PAGE_MASK); +- qxl_bo_kunmap_atomic_page(qdev, bo, ptr); ++ qxl_bo_kunmap_local_page(qdev, bo, ptr); + } + + void qxl_release_fence_buffer_objects(struct qxl_release *release) +diff -Naur --no-dereference a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c +--- a/drivers/gpu/drm/radeon/radeon_display.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/radeon/radeon_display.c 2024-11-24 20:19:38.137228762 -0500 +@@ -1823,6 +1823,7 @@ + struct radeon_device *rdev = dev->dev_private; + + /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */ ++ preempt_disable_rt(); + + /* Get optional system timestamp before query. */ + if (stime) +@@ -1915,6 +1916,7 @@ + *etime = ktime_get(); + + /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */ ++ preempt_enable_rt(); + + /* Decode into vertical and horizontal scanout position. */ + *vpos = position & 0x1fff; diff -Naur --no-dereference a/drivers/gpu/drm/tidss/tidss_dispc.c b/drivers/gpu/drm/tidss/tidss_dispc.c --- a/drivers/gpu/drm/tidss/tidss_dispc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/tidss/tidss_dispc.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/tidss/tidss_dispc.c 2024-11-24 20:19:38.137228762 -0500 @@ -25,6 +25,7 @@ #include #include @@ -106021,7 +111748,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/tidss/tidss_dispc.c b/drivers/gpu/ dispc->fclk = devm_clk_get(dev, "fck"); diff -Naur --no-dereference a/drivers/gpu/drm/tidss/tidss_dispc.h b/drivers/gpu/drm/tidss/tidss_dispc.h --- a/drivers/gpu/drm/tidss/tidss_dispc.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/tidss/tidss_dispc.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/tidss/tidss_dispc.h 2024-11-24 20:19:38.137228762 -0500 @@ -61,6 +61,14 @@ DISPC_K2G, DISPC_AM65X, @@ -106047,7 +111774,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/tidss/tidss_dispc.h b/drivers/gpu/ dispc_irq_t dispc_read_and_clear_irqstatus(struct dispc_device *dispc); diff -Naur --no-dereference a/drivers/gpu/drm/tidss/tidss_dispc_regs.h b/drivers/gpu/drm/tidss/tidss_dispc_regs.h --- a/drivers/gpu/drm/tidss/tidss_dispc_regs.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/tidss/tidss_dispc_regs.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/tidss/tidss_dispc_regs.h 2024-11-24 20:19:38.137228762 -0500 @@ -238,6 +238,15 @@ #define OLDI_DAT3_IO_CTRL 0x0C #define OLDI_CLK_IO_CTRL 0x10 @@ -106066,7 +111793,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/tidss/tidss_dispc_regs.h b/drivers #endif /* __TIDSS_DISPC_REGS_H */ diff -Naur --no-dereference a/drivers/gpu/drm/tidss/tidss_drv.c b/drivers/gpu/drm/tidss/tidss_drv.c --- a/drivers/gpu/drm/tidss/tidss_drv.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/tidss/tidss_drv.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/tidss/tidss_drv.c 2024-11-24 20:19:38.137228762 -0500 @@ -244,6 +244,7 @@ { .compatible = "ti,k2g-dss", .data = &dispc_k2g_feats, }, { .compatible = "ti,am65x-dss", .data = &dispc_am65x_feats, }, @@ -106077,7 +111804,7 @@ diff -Naur --no-dereference a/drivers/gpu/drm/tidss/tidss_drv.c b/drivers/gpu/dr diff -Naur --no-dereference a/drivers/gpu/drm/tidss/tidss_plane.c b/drivers/gpu/drm/tidss/tidss_plane.c --- a/drivers/gpu/drm/tidss/tidss_plane.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/gpu/drm/tidss/tidss_plane.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/gpu/drm/tidss/tidss_plane.c 2024-11-24 20:19:38.137228762 -0500 @@ -10,6 +10,7 @@ #include #include @@ -106094,9 +111821,147 @@ diff -Naur --no-dereference a/drivers/gpu/drm/tidss/tidss_plane.c b/drivers/gpu/ .atomic_check = tidss_plane_atomic_check, .atomic_update = tidss_plane_atomic_update, .atomic_disable = tidss_plane_atomic_disable, +diff -Naur --no-dereference a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c +--- a/drivers/gpu/drm/ttm/ttm_bo_util.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/ttm/ttm_bo_util.c 2024-11-24 20:19:38.138228764 -0500 +@@ -181,13 +181,15 @@ + return -ENOMEM; + + src = (void *)((unsigned long)src + (page << PAGE_SHIFT)); +- dst = kmap_atomic_prot(d, prot); +- if (!dst) +- return -ENOMEM; ++ /* ++ * Ensure that a highmem page is mapped with the correct ++ * pgprot. For non highmem the mapping is already there. ++ */ ++ dst = kmap_local_page_prot(d, prot); + + memcpy_fromio(dst, src, PAGE_SIZE); + +- kunmap_atomic(dst); ++ kunmap_local(dst); + + return 0; + } +@@ -203,13 +205,15 @@ + return -ENOMEM; + + dst = (void *)((unsigned long)dst + (page << PAGE_SHIFT)); +- src = kmap_atomic_prot(s, prot); +- if (!src) +- return -ENOMEM; ++ /* ++ * Ensure that a highmem page is mapped with the correct ++ * pgprot. For non highmem the mapping is already there. ++ */ ++ src = kmap_local_page_prot(s, prot); + + memcpy_toio(dst, src, PAGE_SIZE); + +- kunmap_atomic(src); ++ kunmap_local(src); + + return 0; + } +diff -Naur --no-dereference a/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c b/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c 2024-11-24 20:19:38.138228764 -0500 +@@ -375,12 +375,12 @@ + copy_size = min_t(u32, copy_size, PAGE_SIZE - src_page_offset); + + if (unmap_src) { +- kunmap_atomic(d->src_addr); ++ kunmap_local(d->src_addr); + d->src_addr = NULL; + } + + if (unmap_dst) { +- kunmap_atomic(d->dst_addr); ++ kunmap_local(d->dst_addr); + d->dst_addr = NULL; + } + +@@ -388,12 +388,8 @@ + if (WARN_ON_ONCE(dst_page >= d->dst_num_pages)) + return -EINVAL; + +- d->dst_addr = +- kmap_atomic_prot(d->dst_pages[dst_page], +- d->dst_prot); +- if (!d->dst_addr) +- return -ENOMEM; +- ++ d->dst_addr = kmap_local_page_prot(d->dst_pages[dst_page], ++ d->dst_prot); + d->mapped_dst = dst_page; + } + +@@ -401,12 +397,8 @@ + if (WARN_ON_ONCE(src_page >= d->src_num_pages)) + return -EINVAL; + +- d->src_addr = +- kmap_atomic_prot(d->src_pages[src_page], +- d->src_prot); +- if (!d->src_addr) +- return -ENOMEM; +- ++ d->src_addr = kmap_local_page_prot(d->src_pages[src_page], ++ d->src_prot); + d->mapped_src = src_page; + } + diff->do_cpy(diff, d->dst_addr + dst_page_offset, +@@ -436,8 +428,10 @@ + * + * Performs a CPU blit from one buffer object to another avoiding a full + * bo vmap which may exhaust- or fragment vmalloc space. +- * On supported architectures (x86), we're using kmap_atomic which avoids +- * cross-processor TLB- and cache flushes and may, on non-HIGHMEM systems ++ * ++ * On supported architectures (x86), we're using kmap_local_prot() which ++ * avoids cross-processor TLB- and cache flushes. kmap_local_prot() will ++ * either map a highmem page with the proper pgprot on HIGHMEM=y systems or + * reference already set-up mappings. + * + * Neither of the buffer objects may be placed in PCI memory +@@ -500,9 +494,9 @@ + } + out: + if (d.src_addr) +- kunmap_atomic(d.src_addr); ++ kunmap_local(d.src_addr); + if (d.dst_addr) +- kunmap_atomic(d.dst_addr); ++ kunmap_local(d.dst_addr); + + return ret; + } +diff -Naur --no-dereference a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c +--- a/drivers/hv/vmbus_drv.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/hv/vmbus_drv.c 2024-11-24 20:19:38.138228764 -0500 +@@ -1359,7 +1359,8 @@ + * buffer and call into Hyper-V to transfer the data. + */ + static void hv_kmsg_dump(struct kmsg_dumper *dumper, +- enum kmsg_dump_reason reason) ++ enum kmsg_dump_reason reason, ++ struct kmsg_dumper_iter *iter) + { + size_t bytes_written; + phys_addr_t panic_pa; +@@ -1374,7 +1375,7 @@ + * Write dump contents to the page. No need to synchronize; panic should + * be single-threaded. + */ +- kmsg_dump_get_buffer(dumper, false, hv_panic_page, HV_HYP_PAGE_SIZE, ++ kmsg_dump_get_buffer(iter, false, hv_panic_page, HV_HYP_PAGE_SIZE, + &bytes_written); + if (bytes_written) + hyperv_report_panic_msg(panic_pa, bytes_written); diff -Naur --no-dereference a/drivers/hwmon/lm80.c b/drivers/hwmon/lm80.c --- a/drivers/hwmon/lm80.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/hwmon/lm80.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/hwmon/lm80.c 2024-11-24 20:19:38.138228764 -0500 @@ -573,6 +573,9 @@ return -ENODEV; @@ -106117,7 +111982,7 @@ diff -Naur --no-dereference a/drivers/hwmon/lm80.c b/drivers/hwmon/lm80.c MODULE_DEVICE_TABLE(i2c, lm80_id); diff -Naur --no-dereference a/drivers/hwmon/sht3x.c b/drivers/hwmon/sht3x.c --- a/drivers/hwmon/sht3x.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/hwmon/sht3x.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/hwmon/sht3x.c 2024-11-24 20:19:38.138228764 -0500 @@ -738,9 +738,16 @@ {"sts3x", sts3x}, {} @@ -106138,7 +112003,7 @@ diff -Naur --no-dereference a/drivers/hwmon/sht3x.c b/drivers/hwmon/sht3x.c .probe_new = sht3x_probe, diff -Naur --no-dereference a/drivers/hwspinlock/omap_hwspinlock.c b/drivers/hwspinlock/omap_hwspinlock.c --- a/drivers/hwspinlock/omap_hwspinlock.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/hwspinlock/omap_hwspinlock.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/hwspinlock/omap_hwspinlock.c 2024-11-24 20:19:38.138228764 -0500 @@ -2,11 +2,12 @@ /* * OMAP hardware spinlock driver @@ -106163,7 +112028,7 @@ diff -Naur --no-dereference a/drivers/hwspinlock/omap_hwspinlock.c b/drivers/hws }; diff -Naur --no-dereference a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c --- a/drivers/i2c/i2c-atr.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/i2c/i2c-atr.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/i2c/i2c-atr.c 2024-11-24 20:19:38.138228764 -0500 @@ -0,0 +1,558 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -106725,7 +112590,7 @@ diff -Naur --no-dereference a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c --- a/drivers/i2c/i2c-core-base.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/i2c/i2c-core-base.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/i2c/i2c-core-base.c 2024-11-24 20:19:38.138228764 -0500 @@ -921,15 +921,23 @@ } } @@ -106771,7 +112636,7 @@ diff -Naur --no-dereference a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core of_node_put(client->dev.of_node); diff -Naur --no-dereference a/drivers/i2c/Kconfig b/drivers/i2c/Kconfig --- a/drivers/i2c/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/i2c/Kconfig 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/i2c/Kconfig 2024-11-24 20:19:38.138228764 -0500 @@ -71,6 +71,15 @@ source "drivers/i2c/muxes/Kconfig" @@ -106790,7 +112655,7 @@ diff -Naur --no-dereference a/drivers/i2c/Kconfig b/drivers/i2c/Kconfig default y diff -Naur --no-dereference a/drivers/i2c/Makefile b/drivers/i2c/Makefile --- a/drivers/i2c/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/i2c/Makefile 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/i2c/Makefile 2024-11-24 20:19:38.138228764 -0500 @@ -13,6 +13,7 @@ obj-$(CONFIG_I2C_SMBUS) += i2c-smbus.o obj-$(CONFIG_I2C_CHARDEV) += i2c-dev.o @@ -106801,7 +112666,7 @@ diff -Naur --no-dereference a/drivers/i2c/Makefile b/drivers/i2c/Makefile obj-$(CONFIG_I2C_SLAVE_EEPROM) += i2c-slave-eeprom.o diff -Naur --no-dereference a/drivers/iio/accel/mma9551_core.c b/drivers/iio/accel/mma9551_core.c --- a/drivers/iio/accel/mma9551_core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/accel/mma9551_core.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/accel/mma9551_core.c 2024-11-24 20:19:38.139228766 -0500 @@ -296,9 +296,12 @@ ret = mma9551_transfer(client, app_id, MMA9551_CMD_READ_CONFIG, @@ -106832,7 +112697,7 @@ diff -Naur --no-dereference a/drivers/iio/accel/mma9551_core.c b/drivers/iio/acc diff -Naur --no-dereference a/drivers/iio/adc/ad7192.c b/drivers/iio/adc/ad7192.c --- a/drivers/iio/adc/ad7192.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/adc/ad7192.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/adc/ad7192.c 2024-11-24 20:19:38.139228766 -0500 @@ -835,10 +835,6 @@ __AD719x_CHANNEL(_si, _channel1, -1, _address, NULL, IIO_VOLTAGE, \ BIT(IIO_CHAN_INFO_SCALE), ad7192_calibsys_ext_info) @@ -106864,7 +112729,7 @@ diff -Naur --no-dereference a/drivers/iio/adc/ad7192.c b/drivers/iio/adc/ad7192. AD719x_CHANNEL(8, 3, AD7193_CH_AIN3), diff -Naur --no-dereference a/drivers/iio/adc/ad7791.c b/drivers/iio/adc/ad7791.c --- a/drivers/iio/adc/ad7791.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/adc/ad7791.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/adc/ad7791.c 2024-11-24 20:19:38.139228766 -0500 @@ -253,7 +253,7 @@ .has_registers = true, .addr_shift = 4, @@ -106876,7 +112741,7 @@ diff -Naur --no-dereference a/drivers/iio/adc/ad7791.c b/drivers/iio/adc/ad7791. static int ad7791_read_raw(struct iio_dev *indio_dev, diff -Naur --no-dereference a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c --- a/drivers/iio/adc/at91-sama5d2_adc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/adc/at91-sama5d2_adc.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/adc/at91-sama5d2_adc.c 2024-11-24 20:19:38.139228766 -0500 @@ -1002,7 +1002,7 @@ trig = devm_iio_trigger_alloc(&indio->dev, "%s-dev%d-%s", indio->name, indio->id, trigger_name); @@ -106888,7 +112753,7 @@ diff -Naur --no-dereference a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/a iio_trigger_set_drvdata(trig, indio); diff -Naur --no-dereference a/drivers/iio/adc/meson_saradc.c b/drivers/iio/adc/meson_saradc.c --- a/drivers/iio/adc/meson_saradc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/adc/meson_saradc.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/adc/meson_saradc.c 2024-11-24 20:19:38.139228766 -0500 @@ -71,7 +71,7 @@ #define MESON_SAR_ADC_REG3_PANEL_DETECT_COUNT_MASK GENMASK(20, 18) #define MESON_SAR_ADC_REG3_PANEL_DETECT_FILTER_TB_MASK GENMASK(17, 16) @@ -106900,7 +112765,7 @@ diff -Naur --no-dereference a/drivers/iio/adc/meson_saradc.c b/drivers/iio/adc/m diff -Naur --no-dereference a/drivers/iio/adc/mxs-lradc-adc.c b/drivers/iio/adc/mxs-lradc-adc.c --- a/drivers/iio/adc/mxs-lradc-adc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/adc/mxs-lradc-adc.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/adc/mxs-lradc-adc.c 2024-11-24 20:19:38.139228766 -0500 @@ -757,13 +757,13 @@ ret = mxs_lradc_adc_trigger_init(iio); @@ -106941,7 +112806,7 @@ diff -Naur --no-dereference a/drivers/iio/adc/mxs-lradc-adc.c b/drivers/iio/adc/ } diff -Naur --no-dereference a/drivers/iio/adc/palmas_gpadc.c b/drivers/iio/adc/palmas_gpadc.c --- a/drivers/iio/adc/palmas_gpadc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/adc/palmas_gpadc.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/adc/palmas_gpadc.c 2024-11-24 20:19:38.139228766 -0500 @@ -628,7 +628,7 @@ static int palmas_gpadc_remove(struct platform_device *pdev) @@ -106953,7 +112818,7 @@ diff -Naur --no-dereference a/drivers/iio/adc/palmas_gpadc.c b/drivers/iio/adc/p if (adc->wakeup1_enable || adc->wakeup2_enable) diff -Naur --no-dereference a/drivers/iio/adc/stx104.c b/drivers/iio/adc/stx104.c --- a/drivers/iio/adc/stx104.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/adc/stx104.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/adc/stx104.c 2024-11-24 20:19:38.139228766 -0500 @@ -15,7 +15,9 @@ #include #include @@ -107193,7 +113058,7 @@ diff -Naur --no-dereference a/drivers/iio/adc/stx104.c b/drivers/iio/adc/stx104. spin_lock_init(&stx104gpio->lock); diff -Naur --no-dereference a/drivers/iio/adc/ti-ads7950.c b/drivers/iio/adc/ti-ads7950.c --- a/drivers/iio/adc/ti-ads7950.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/adc/ti-ads7950.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/adc/ti-ads7950.c 2024-11-24 20:19:38.139228766 -0500 @@ -634,6 +634,7 @@ st->chip.label = dev_name(&st->spi->dev); st->chip.parent = &st->spi->dev; @@ -107204,7 +113069,7 @@ diff -Naur --no-dereference a/drivers/iio/adc/ti-ads7950.c b/drivers/iio/adc/ti- st->chip.get_direction = ti_ads7950_get_direction; diff -Naur --no-dereference a/drivers/iio/addac/Kconfig b/drivers/iio/addac/Kconfig --- a/drivers/iio/addac/Kconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/iio/addac/Kconfig 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/addac/Kconfig 2024-11-24 20:19:38.140228767 -0500 @@ -0,0 +1,8 @@ +# +# ADC DAC drivers @@ -107216,7 +113081,7 @@ diff -Naur --no-dereference a/drivers/iio/addac/Kconfig b/drivers/iio/addac/Kcon +endmenu diff -Naur --no-dereference a/drivers/iio/addac/Makefile b/drivers/iio/addac/Makefile --- a/drivers/iio/addac/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/iio/addac/Makefile 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/addac/Makefile 2024-11-24 20:19:38.140228767 -0500 @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0 +# @@ -107226,7 +113091,7 @@ diff -Naur --no-dereference a/drivers/iio/addac/Makefile b/drivers/iio/addac/Mak +# When adding new entries keep the list in alphabetical order diff -Naur --no-dereference a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c --- a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c 2024-11-24 20:19:38.140228767 -0500 @@ -263,7 +263,7 @@ platform_set_drvdata(pdev, indio_dev); @@ -107238,7 +113103,7 @@ diff -Naur --no-dereference a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors if (!state->msg) diff -Naur --no-dereference a/drivers/iio/dac/cio-dac.c b/drivers/iio/dac/cio-dac.c --- a/drivers/iio/dac/cio-dac.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/dac/cio-dac.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/dac/cio-dac.c 2024-11-24 20:19:38.140228767 -0500 @@ -66,8 +66,8 @@ if (mask != IIO_CHAN_INFO_RAW) return -EINVAL; @@ -107252,7 +113117,7 @@ diff -Naur --no-dereference a/drivers/iio/dac/cio-dac.c b/drivers/iio/dac/cio-da priv->chan_out_states[chan->channel] = val; diff -Naur --no-dereference a/drivers/iio/dac/Makefile b/drivers/iio/dac/Makefile --- a/drivers/iio/dac/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/dac/Makefile 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/dac/Makefile 2024-11-24 20:19:38.140228767 -0500 @@ -16,7 +16,7 @@ obj-$(CONFIG_AD5592R) += ad5592r.o obj-$(CONFIG_AD5593R) += ad5593r.o @@ -107264,7 +113129,7 @@ diff -Naur --no-dereference a/drivers/iio/dac/Makefile b/drivers/iio/dac/Makefil obj-$(CONFIG_AD5770R) += ad5770r.o diff -Naur --no-dereference a/drivers/iio/dac/mcp4725.c b/drivers/iio/dac/mcp4725.c --- a/drivers/iio/dac/mcp4725.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/dac/mcp4725.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/dac/mcp4725.c 2024-11-24 20:19:38.140228767 -0500 @@ -47,12 +47,18 @@ struct mcp4725_data *data = iio_priv(i2c_get_clientdata( to_i2c_client(dev))); @@ -107308,7 +113173,7 @@ diff -Naur --no-dereference a/drivers/iio/dac/mcp4725.c b/drivers/iio/dac/mcp472 diff -Naur --no-dereference a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c 2024-11-24 20:19:38.140228767 -0500 @@ -275,9 +275,14 @@ { struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev); @@ -107355,7 +113220,7 @@ diff -Naur --no-dereference a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c diff -Naur --no-dereference a/drivers/iio/Kconfig b/drivers/iio/Kconfig --- a/drivers/iio/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/Kconfig 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/Kconfig 2024-11-24 20:19:38.138228764 -0500 @@ -70,6 +70,7 @@ source "drivers/iio/accel/Kconfig" @@ -107366,7 +113231,7 @@ diff -Naur --no-dereference a/drivers/iio/Kconfig b/drivers/iio/Kconfig source "drivers/iio/chemical/Kconfig" diff -Naur --no-dereference a/drivers/iio/light/cm32181.c b/drivers/iio/light/cm32181.c --- a/drivers/iio/light/cm32181.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/light/cm32181.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/light/cm32181.c 2024-11-24 20:19:38.140228767 -0500 @@ -429,6 +429,14 @@ .attrs = &cm32181_attribute_group, }; @@ -107395,7 +113260,7 @@ diff -Naur --no-dereference a/drivers/iio/light/cm32181.c b/drivers/iio/light/cm cm32181 = iio_priv(indio_dev); diff -Naur --no-dereference a/drivers/iio/light/max44009.c b/drivers/iio/light/max44009.c --- a/drivers/iio/light/max44009.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/light/max44009.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/light/max44009.c 2024-11-24 20:19:38.140228767 -0500 @@ -528,6 +528,12 @@ return devm_iio_device_register(&client->dev, indio_dev); } @@ -107431,7 +113296,7 @@ diff -Naur --no-dereference a/drivers/iio/light/max44009.c b/drivers/iio/light/m MODULE_DESCRIPTION("MAX44009 ambient light sensor driver"); diff -Naur --no-dereference a/drivers/iio/light/tsl2772.c b/drivers/iio/light/tsl2772.c --- a/drivers/iio/light/tsl2772.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/light/tsl2772.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/light/tsl2772.c 2024-11-24 20:19:38.140228767 -0500 @@ -606,6 +606,7 @@ return -EINVAL; } @@ -107442,7 +113307,7 @@ diff -Naur --no-dereference a/drivers/iio/light/tsl2772.c b/drivers/iio/light/ts } diff -Naur --no-dereference a/drivers/iio/light/vcnl4035.c b/drivers/iio/light/vcnl4035.c --- a/drivers/iio/light/vcnl4035.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/light/vcnl4035.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/light/vcnl4035.c 2024-11-24 20:19:38.140228767 -0500 @@ -8,6 +8,7 @@ * TODO: Proximity */ @@ -107469,7 +113334,7 @@ diff -Naur --no-dereference a/drivers/iio/light/vcnl4035.c b/drivers/iio/light/v id, VCNL4035_DEV_ID_VAL); diff -Naur --no-dereference a/drivers/iio/Makefile b/drivers/iio/Makefile --- a/drivers/iio/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iio/Makefile 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iio/Makefile 2024-11-24 20:19:38.139228766 -0500 @@ -15,6 +15,7 @@ obj-y += accel/ @@ -107480,7 +113345,7 @@ diff -Naur --no-dereference a/drivers/iio/Makefile b/drivers/iio/Makefile obj-y += buffer/ diff -Naur --no-dereference a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig --- a/drivers/input/misc/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/input/misc/Kconfig 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/input/misc/Kconfig 2024-11-24 20:19:38.140228767 -0500 @@ -458,6 +458,16 @@ To compile this driver as a module, choose M here. The module will be called tps65218-pwrbutton. @@ -107500,7 +113365,7 @@ diff -Naur --no-dereference a/drivers/input/misc/Kconfig b/drivers/input/misc/Kc depends on MFD_AXP20X diff -Naur --no-dereference a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile --- a/drivers/input/misc/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/input/misc/Makefile 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/input/misc/Makefile 2024-11-24 20:19:38.140228767 -0500 @@ -75,6 +75,7 @@ obj-$(CONFIG_INPUT_SPARCSPKR) += sparcspkr.o obj-$(CONFIG_INPUT_STPMIC1_ONKEY) += stpmic1_onkey.o @@ -107511,7 +113376,7 @@ diff -Naur --no-dereference a/drivers/input/misc/Makefile b/drivers/input/misc/M obj-$(CONFIG_INPUT_TWL6040_VIBRA) += twl6040-vibra.o diff -Naur --no-dereference a/drivers/input/misc/tps65218-pwrbutton.c b/drivers/input/misc/tps65218-pwrbutton.c --- a/drivers/input/misc/tps65218-pwrbutton.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/input/misc/tps65218-pwrbutton.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/input/misc/tps65218-pwrbutton.c 2024-11-24 20:19:38.141228769 -0500 @@ -36,7 +36,7 @@ static const struct tps6521x_data tps65217_data = { .reg_status = TPS65217_REG_STATUS, @@ -107523,7 +113388,7 @@ diff -Naur --no-dereference a/drivers/input/misc/tps65218-pwrbutton.c b/drivers/ static const struct tps6521x_data tps65218_data = { diff -Naur --no-dereference a/drivers/input/misc/tps65219-pwrbutton.c b/drivers/input/misc/tps65219-pwrbutton.c --- a/drivers/input/misc/tps65219-pwrbutton.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/input/misc/tps65219-pwrbutton.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/input/misc/tps65219-pwrbutton.c 2024-11-24 20:19:38.141228769 -0500 @@ -0,0 +1,150 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -107677,7 +113542,7 @@ diff -Naur --no-dereference a/drivers/input/misc/tps65219-pwrbutton.c b/drivers/ +MODULE_AUTHOR("Markus Schneider-Pargmann @@ -108573,7 +114438,7 @@ diff -Naur --no-dereference a/drivers/input/touchscreen/ili210x.c b/drivers/inpu error = input_mt_init_slots(input, priv->chip->max_touches, diff -Naur --no-dereference a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig --- a/drivers/input/touchscreen/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/input/touchscreen/Kconfig 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/input/touchscreen/Kconfig 2024-11-24 20:19:38.141228769 -0500 @@ -418,6 +418,7 @@ config TOUCHSCREEN_ILI210X tristate "Ilitek ILI210X based touchscreen" @@ -108584,7 +114449,7 @@ diff -Naur --no-dereference a/drivers/input/touchscreen/Kconfig b/drivers/input/ controller. This driver supports models ILI2102, diff -Naur --no-dereference a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c --- a/drivers/input/touchscreen/ti_am335x_tsc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/input/touchscreen/ti_am335x_tsc.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/input/touchscreen/ti_am335x_tsc.c 2024-11-24 20:19:38.141228769 -0500 @@ -34,6 +34,7 @@ #define ADCFSM_STEPID 0x10 #define SEQ_SETTLE 275 @@ -108629,7 +114494,7 @@ diff -Naur --no-dereference a/drivers/input/touchscreen/ti_am335x_tsc.c b/driver diff -Naur --no-dereference a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c --- a/drivers/iommu/omap-iommu.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iommu/omap-iommu.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iommu/omap-iommu.c 2024-11-24 20:19:38.141228769 -0500 @@ -848,7 +848,7 @@ { int err; @@ -108767,7 +114632,7 @@ diff -Naur --no-dereference a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-io omap_domain->domain.geometry.aperture_end = (1ULL << 32) - 1; diff -Naur --no-dereference a/drivers/iommu/omap-iommu.h b/drivers/iommu/omap-iommu.h --- a/drivers/iommu/omap-iommu.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/iommu/omap-iommu.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/iommu/omap-iommu.h 2024-11-24 20:19:38.141228769 -0500 @@ -47,7 +47,7 @@ u32 num_iommus; struct omap_iommu_device *iommus; @@ -108790,7 +114655,7 @@ diff -Naur --no-dereference a/drivers/iommu/omap-iommu.h b/drivers/iommu/omap-io * We don't change iopgd for a situation like pgd for a task, diff -Naur --no-dereference a/drivers/irqchip/irq-pruss-intc.c b/drivers/irqchip/irq-pruss-intc.c --- a/drivers/irqchip/irq-pruss-intc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/irqchip/irq-pruss-intc.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/irqchip/irq-pruss-intc.c 2024-11-24 20:19:38.141228769 -0500 @@ -70,6 +70,8 @@ #define MAX_PRU_SYS_EVENTS 160 #define MAX_PRU_CHANNELS 20 @@ -108973,7 +114838,7 @@ diff -Naur --no-dereference a/drivers/irqchip/irq-pruss-intc.c b/drivers/irqchip static const struct of_device_id pruss_intc_of_match[] = { diff -Naur --no-dereference a/drivers/irqchip/irq-ti-sci-inta.c b/drivers/irqchip/irq-ti-sci-inta.c --- a/drivers/irqchip/irq-ti-sci-inta.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/irqchip/irq-ti-sci-inta.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/irqchip/irq-ti-sci-inta.c 2024-11-24 20:19:38.141228769 -0500 @@ -64,6 +64,7 @@ * @events: Array of event descriptors assigned to this vint. * @parent_virq: Linux IRQ number that gets attached to parent @@ -109125,7 +114990,7 @@ diff -Naur --no-dereference a/drivers/irqchip/irq-ti-sci-inta.c b/drivers/irqchi * ti_sci_inta_set_type() - Update the trigger type of the irq. diff -Naur --no-dereference a/drivers/irqchip/irq-ti-sci-intr.c b/drivers/irqchip/irq-ti-sci-intr.c --- a/drivers/irqchip/irq-ti-sci-intr.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/irqchip/irq-ti-sci-intr.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/irqchip/irq-ti-sci-intr.c 2024-11-24 20:19:38.141228769 -0500 @@ -25,6 +25,7 @@ * @dev: Struct device pointer. * @ti_sci_id: TI-SCI device identifier @@ -109316,7 +115181,7 @@ diff -Naur --no-dereference a/drivers/irqchip/irq-ti-sci-intr.c b/drivers/irqchi }; diff -Naur --no-dereference a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig --- a/drivers/irqchip/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/irqchip/Kconfig 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/irqchip/Kconfig 2024-11-24 20:19:38.141228769 -0500 @@ -482,9 +482,10 @@ Support for the Loongson-1 platform Interrupt Controller. @@ -109357,7 +115222,7 @@ diff -Naur --no-dereference a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig This enables support for the PRU-ICSS Local Interrupt Controller diff -Naur --no-dereference a/drivers/Kconfig b/drivers/Kconfig --- a/drivers/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/Kconfig 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/Kconfig 2024-11-24 20:19:38.125228740 -0500 @@ -166,6 +166,8 @@ source "drivers/rpmsg/Kconfig" @@ -109367,9 +115232,20 @@ diff -Naur --no-dereference a/drivers/Kconfig b/drivers/Kconfig source "drivers/soundwire/Kconfig" source "drivers/soc/Kconfig" +diff -Naur --no-dereference a/drivers/leds/trigger/Kconfig b/drivers/leds/trigger/Kconfig +--- a/drivers/leds/trigger/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/leds/trigger/Kconfig 2024-11-24 20:19:38.142228771 -0500 +@@ -64,6 +64,7 @@ + + config LEDS_TRIGGER_CPU + bool "LED CPU Trigger" ++ depends on !PREEMPT_RT + help + This allows LEDs to be controlled by active CPUs. This shows + the active CPUs across an array of LEDs so you can see which diff -Naur --no-dereference a/drivers/mailbox/omap-mailbox.c b/drivers/mailbox/omap-mailbox.c --- a/drivers/mailbox/omap-mailbox.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mailbox/omap-mailbox.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/mailbox/omap-mailbox.c 2024-11-24 20:19:38.142228771 -0500 @@ -3,7 +3,7 @@ * OMAP mailbox driver * @@ -109392,7 +115268,7 @@ diff -Naur --no-dereference a/drivers/mailbox/omap-mailbox.c b/drivers/mailbox/o }; diff -Naur --no-dereference a/drivers/mailbox/ti-msgmgr.c b/drivers/mailbox/ti-msgmgr.c --- a/drivers/mailbox/ti-msgmgr.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mailbox/ti-msgmgr.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/mailbox/ti-msgmgr.c 2024-11-24 20:19:38.142228771 -0500 @@ -2,7 +2,7 @@ /* * Texas Instruments' Message Manager Driver @@ -109660,7 +115536,7 @@ diff -Naur --no-dereference a/drivers/mailbox/ti-msgmgr.c b/drivers/mailbox/ti-m module_platform_driver(ti_msgmgr_driver); diff -Naur --no-dereference a/drivers/Makefile b/drivers/Makefile --- a/drivers/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/Makefile 2024-08-28 19:44:05.604037925 -0400 ++++ b/drivers/Makefile 2024-11-24 20:19:38.125228740 -0500 @@ -156,6 +156,7 @@ obj-$(CONFIG_HWSPINLOCK) += hwspinlock/ obj-$(CONFIG_REMOTEPROC) += remoteproc/ @@ -109669,9 +115545,52 @@ diff -Naur --no-dereference a/drivers/Makefile b/drivers/Makefile obj-$(CONFIG_SOUNDWIRE) += soundwire/ # Virtualization drivers +diff -Naur --no-dereference a/drivers/md/raid5.c b/drivers/md/raid5.c +--- a/drivers/md/raid5.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/md/raid5.c 2024-11-24 20:19:38.142228771 -0500 +@@ -2218,8 +2218,9 @@ + struct raid5_percpu *percpu; + unsigned long cpu; + +- cpu = get_cpu(); ++ cpu = get_cpu_light(); + percpu = per_cpu_ptr(conf->percpu, cpu); ++ spin_lock(&percpu->lock); + if (test_bit(STRIPE_OP_BIOFILL, &ops_request)) { + ops_run_biofill(sh); + overlap_clear++; +@@ -2278,7 +2279,8 @@ + if (test_and_clear_bit(R5_Overlap, &dev->flags)) + wake_up(&sh->raid_conf->wait_for_overlap); + } +- put_cpu(); ++ spin_unlock(&percpu->lock); ++ put_cpu_light(); + } + + static void free_stripe(struct kmem_cache *sc, struct stripe_head *sh) +@@ -7108,6 +7110,7 @@ + __func__, cpu); + return -ENOMEM; + } ++ spin_lock_init(&per_cpu_ptr(conf->percpu, cpu)->lock); + return 0; + } + +diff -Naur --no-dereference a/drivers/md/raid5.h b/drivers/md/raid5.h +--- a/drivers/md/raid5.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/md/raid5.h 2024-11-24 20:19:38.142228771 -0500 +@@ -635,6 +635,7 @@ + int recovery_disabled; + /* per cpu variables */ + struct raid5_percpu { ++ spinlock_t lock; /* Protection for -RT */ + struct page *spare_page; /* Used when checking P/Q in raid6 */ + void *scribble; /* space for constructing buffer + * lists and performing address diff -Naur --no-dereference a/drivers/media/dvb-frontends/ascot2e.h b/drivers/media/dvb-frontends/ascot2e.h --- a/drivers/media/dvb-frontends/ascot2e.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/ascot2e.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/ascot2e.h 2024-11-24 20:19:38.142228771 -0500 @@ -33,7 +33,7 @@ #if IS_REACHABLE(CONFIG_DVB_ASCOT2E) @@ -109683,7 +115602,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/ascot2e.h b/drivers/me * @config: pointer to &struct ascot2e_config with tuner configuration. diff -Naur --no-dereference a/drivers/media/dvb-frontends/cxd2820r.h b/drivers/media/dvb-frontends/cxd2820r.h --- a/drivers/media/dvb-frontends/cxd2820r.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/cxd2820r.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/cxd2820r.h 2024-11-24 20:19:38.142228771 -0500 @@ -96,7 +96,7 @@ #if IS_REACHABLE(CONFIG_DVB_CXD2820R) @@ -109695,7 +115614,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/cxd2820r.h b/drivers/m * @i2c: i2c adapter to use. diff -Naur --no-dereference a/drivers/media/dvb-frontends/drxk.h b/drivers/media/dvb-frontends/drxk.h --- a/drivers/media/dvb-frontends/drxk.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/drxk.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/drxk.h 2024-11-24 20:19:38.142228771 -0500 @@ -54,7 +54,7 @@ #if IS_REACHABLE(CONFIG_DVB_DRXK) @@ -109707,7 +115626,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/drxk.h b/drivers/media * @i2c: i2c adapter to use. diff -Naur --no-dereference a/drivers/media/dvb-frontends/dvb-pll.h b/drivers/media/dvb-frontends/dvb-pll.h --- a/drivers/media/dvb-frontends/dvb-pll.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/dvb-pll.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/dvb-pll.h 2024-11-24 20:19:38.142228771 -0500 @@ -38,7 +38,7 @@ #if IS_REACHABLE(CONFIG_DVB_PLL) @@ -109719,7 +115638,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/dvb-pll.h b/drivers/me * @pll_addr: i2c address of the PLL (if used). diff -Naur --no-dereference a/drivers/media/dvb-frontends/helene.h b/drivers/media/dvb-frontends/helene.h --- a/drivers/media/dvb-frontends/helene.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/helene.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/helene.h 2024-11-24 20:19:38.143228773 -0500 @@ -44,7 +44,7 @@ #if IS_REACHABLE(CONFIG_DVB_HELENE) @@ -109740,7 +115659,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/helene.h b/drivers/med * @config: pointer to &struct helene_config with tuner configuration. diff -Naur --no-dereference a/drivers/media/dvb-frontends/horus3a.h b/drivers/media/dvb-frontends/horus3a.h --- a/drivers/media/dvb-frontends/horus3a.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/horus3a.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/horus3a.h 2024-11-24 20:19:38.143228773 -0500 @@ -33,7 +33,7 @@ #if IS_REACHABLE(CONFIG_DVB_HORUS3A) @@ -109752,7 +115671,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/horus3a.h b/drivers/me * @config: pointer to &struct helene_config with tuner configuration. diff -Naur --no-dereference a/drivers/media/dvb-frontends/ix2505v.h b/drivers/media/dvb-frontends/ix2505v.h --- a/drivers/media/dvb-frontends/ix2505v.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/ix2505v.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/ix2505v.h 2024-11-24 20:19:38.143228773 -0500 @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: GPL-2.0-only */ -/** @@ -109771,7 +115690,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/ix2505v.h b/drivers/me * @config: pointer to &struct ix2505v_config diff -Naur --no-dereference a/drivers/media/dvb-frontends/m88ds3103.h b/drivers/media/dvb-frontends/m88ds3103.h --- a/drivers/media/dvb-frontends/m88ds3103.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/m88ds3103.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/m88ds3103.h 2024-11-24 20:19:38.143228773 -0500 @@ -128,7 +128,7 @@ #if defined(CONFIG_DVB_M88DS3103) || \ (defined(CONFIG_DVB_M88DS3103_MODULE) && defined(MODULE)) @@ -109783,7 +115702,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/m88ds3103.h b/drivers/ * @i2c: i2c adapter to use. diff -Naur --no-dereference a/drivers/media/dvb-frontends/mb86a20s.h b/drivers/media/dvb-frontends/mb86a20s.h --- a/drivers/media/dvb-frontends/mb86a20s.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/mb86a20s.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/mb86a20s.h 2024-11-24 20:19:38.143228773 -0500 @@ -26,7 +26,7 @@ #if IS_REACHABLE(CONFIG_DVB_MB86A20S) @@ -109795,7 +115714,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/mb86a20s.h b/drivers/m * @i2c: i2c adapter to use. diff -Naur --no-dereference a/drivers/media/dvb-frontends/stb6000.h b/drivers/media/dvb-frontends/stb6000.h --- a/drivers/media/dvb-frontends/stb6000.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/stb6000.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/stb6000.h 2024-11-24 20:19:38.143228773 -0500 @@ -15,7 +15,7 @@ #if IS_REACHABLE(CONFIG_DVB_STB6000) @@ -109807,7 +115726,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/stb6000.h b/drivers/me * @addr: i2c address of the tuner. diff -Naur --no-dereference a/drivers/media/dvb-frontends/tda826x.h b/drivers/media/dvb-frontends/tda826x.h --- a/drivers/media/dvb-frontends/tda826x.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/tda826x.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/tda826x.h 2024-11-24 20:19:38.143228773 -0500 @@ -14,7 +14,7 @@ #include @@ -109819,7 +115738,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/tda826x.h b/drivers/me * @addr: i2c address of the tuner. diff -Naur --no-dereference a/drivers/media/dvb-frontends/zl10036.h b/drivers/media/dvb-frontends/zl10036.h --- a/drivers/media/dvb-frontends/zl10036.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/dvb-frontends/zl10036.h 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/dvb-frontends/zl10036.h 2024-11-24 20:19:38.143228773 -0500 @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: GPL-2.0-only */ -/** @@ -109838,7 +115757,7 @@ diff -Naur --no-dereference a/drivers/media/dvb-frontends/zl10036.h b/drivers/me * @config: zl10036_config structure. diff -Naur --no-dereference a/drivers/media/i2c/adv7170.c b/drivers/media/i2c/adv7170.c --- a/drivers/media/i2c/adv7170.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/adv7170.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/i2c/adv7170.c 2024-11-24 20:19:38.143228773 -0500 @@ -250,7 +250,7 @@ } @@ -109868,7 +115787,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/adv7170.c b/drivers/media/i2c/ad struct v4l2_mbus_framefmt *mf = &format->format; diff -Naur --no-dereference a/drivers/media/i2c/adv7175.c b/drivers/media/i2c/adv7175.c --- a/drivers/media/i2c/adv7175.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/adv7175.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/i2c/adv7175.c 2024-11-24 20:19:38.143228773 -0500 @@ -288,7 +288,7 @@ } @@ -109898,7 +115817,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/adv7175.c b/drivers/media/i2c/ad struct v4l2_mbus_framefmt *mf = &format->format; diff -Naur --no-dereference a/drivers/media/i2c/adv7180.c b/drivers/media/i2c/adv7180.c --- a/drivers/media/i2c/adv7180.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/adv7180.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/i2c/adv7180.c 2024-11-24 20:19:38.143228773 -0500 @@ -633,7 +633,7 @@ } @@ -109963,7 +115882,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/adv7180.c b/drivers/media/i2c/ad static int adv7180_get_mbus_config(struct v4l2_subdev *sd, diff -Naur --no-dereference a/drivers/media/i2c/adv7183.c b/drivers/media/i2c/adv7183.c --- a/drivers/media/i2c/adv7183.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/adv7183.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/i2c/adv7183.c 2024-11-24 20:19:38.143228773 -0500 @@ -409,7 +409,7 @@ } @@ -109999,7 +115918,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/adv7183.c b/drivers/media/i2c/ad struct adv7183 *decoder = to_adv7183(sd); diff -Naur --no-dereference a/drivers/media/i2c/adv748x/adv748x-afe.c b/drivers/media/i2c/adv748x/adv748x-afe.c --- a/drivers/media/i2c/adv748x/adv748x-afe.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/adv748x/adv748x-afe.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/i2c/adv748x/adv748x-afe.c 2024-11-24 20:19:38.143228773 -0500 @@ -331,7 +331,7 @@ } @@ -110051,7 +115970,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/adv748x/adv748x-afe.c b/drivers/ return 0; diff -Naur --no-dereference a/drivers/media/i2c/adv748x/adv748x-csi2.c b/drivers/media/i2c/adv748x/adv748x-csi2.c --- a/drivers/media/i2c/adv748x/adv748x-csi2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/adv748x/adv748x-csi2.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/i2c/adv748x/adv748x-csi2.c 2024-11-24 20:19:38.144228775 -0500 @@ -142,26 +142,26 @@ static struct v4l2_mbus_framefmt * @@ -110112,7 +116031,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/adv748x/adv748x-csi2.c b/drivers diff -Naur --no-dereference a/drivers/media/i2c/adv748x/adv748x-hdmi.c b/drivers/media/i2c/adv748x/adv748x-hdmi.c --- a/drivers/media/i2c/adv748x/adv748x-hdmi.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/adv748x/adv748x-hdmi.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/i2c/adv748x/adv748x-hdmi.c 2024-11-24 20:19:38.144228775 -0500 @@ -409,7 +409,7 @@ } @@ -110164,7 +116083,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/adv748x/adv748x-hdmi.c b/drivers return 0; diff -Naur --no-dereference a/drivers/media/i2c/adv7511-v4l2.c b/drivers/media/i2c/adv7511-v4l2.c --- a/drivers/media/i2c/adv7511-v4l2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/adv7511-v4l2.c 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/i2c/adv7511-v4l2.c 2024-11-24 20:19:38.144228775 -0500 @@ -1227,7 +1227,7 @@ } @@ -110212,7 +116131,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/adv7511-v4l2.c b/drivers/media/i fmt->ycbcr_enc = format->format.ycbcr_enc; diff -Naur --no-dereference a/drivers/media/i2c/adv7604.c b/drivers/media/i2c/adv7604.c --- a/drivers/media/i2c/adv7604.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/adv7604.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/adv7604.c 2024-11-24 20:19:38.144228775 -0500 @@ -1819,7 +1819,7 @@ } @@ -110269,7 +116188,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/adv7604.c b/drivers/media/i2c/ad state->format = info; diff -Naur --no-dereference a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/adv7842.c --- a/drivers/media/i2c/adv7842.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/adv7842.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/adv7842.c 2024-11-24 20:19:38.144228775 -0500 @@ -1995,7 +1995,7 @@ } @@ -110326,7 +116245,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/ad state->format = info; diff -Naur --no-dereference a/drivers/media/i2c/ak881x.c b/drivers/media/i2c/ak881x.c --- a/drivers/media/i2c/ak881x.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ak881x.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ak881x.c 2024-11-24 20:19:38.144228775 -0500 @@ -91,7 +91,7 @@ #endif @@ -110356,7 +116275,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ak881x.c b/drivers/media/i2c/ak8 struct i2c_client *client = v4l2_get_subdevdata(sd); diff -Naur --no-dereference a/drivers/media/i2c/cx25840/cx25840-core.c b/drivers/media/i2c/cx25840/cx25840-core.c --- a/drivers/media/i2c/cx25840/cx25840-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/cx25840/cx25840-core.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/cx25840/cx25840-core.c 2024-11-24 20:19:38.144228775 -0500 @@ -1746,7 +1746,7 @@ /* ----------------------------------------------------------------------- */ @@ -110368,7 +116287,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/cx25840/cx25840-core.c b/drivers struct v4l2_mbus_framefmt *fmt = &format->format; diff -Naur --no-dereference a/drivers/media/i2c/ds90ub953.c b/drivers/media/i2c/ds90ub953.c --- a/drivers/media/i2c/ds90ub953.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/i2c/ds90ub953.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ds90ub953.c 2024-11-24 20:19:38.145228776 -0500 @@ -0,0 +1,1169 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -111541,7 +117460,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ds90ub953.c b/drivers/media/i2c/ +MODULE_AUTHOR("Tomi Valkeinen "); diff -Naur --no-dereference a/drivers/media/i2c/ds90ub960.c b/drivers/media/i2c/ds90ub960.c --- a/drivers/media/i2c/ds90ub960.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/i2c/ds90ub960.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ds90ub960.c 2024-11-24 20:19:38.145228776 -0500 @@ -0,0 +1,2504 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -114049,7 +119968,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ds90ub960.c b/drivers/media/i2c/ +MODULE_AUTHOR("Tomi Valkeinen "); diff -Naur --no-dereference a/drivers/media/i2c/et8ek8/et8ek8_driver.c b/drivers/media/i2c/et8ek8/et8ek8_driver.c --- a/drivers/media/i2c/et8ek8/et8ek8_driver.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/et8ek8/et8ek8_driver.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/et8ek8/et8ek8_driver.c 2024-11-24 20:19:38.145228776 -0500 @@ -882,7 +882,7 @@ */ #define MAX_FMTS 4 @@ -114139,7 +120058,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/et8ek8/et8ek8_driver.c b/drivers diff -Naur --no-dereference a/drivers/media/i2c/hi556.c b/drivers/media/i2c/hi556.c --- a/drivers/media/i2c/hi556.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/hi556.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/hi556.c 2024-11-24 20:19:38.145228776 -0500 @@ -878,7 +878,7 @@ } @@ -114205,7 +120124,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/hi556.c b/drivers/media/i2c/hi55 return 0; diff -Naur --no-dereference a/drivers/media/i2c/imx214.c b/drivers/media/i2c/imx214.c --- a/drivers/media/i2c/imx214.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/imx214.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/imx214.c 2024-11-24 20:19:38.145228776 -0500 @@ -474,7 +474,7 @@ } @@ -114348,7 +120267,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/imx214.c b/drivers/media/i2c/imx const struct imx214_mode *mode; diff -Naur --no-dereference a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c --- a/drivers/media/i2c/imx219.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/imx219.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/imx219.c 2024-11-24 20:19:38.145228776 -0500 @@ -89,6 +89,12 @@ #define IMX219_REG_ORIENTATION 0x0172 @@ -114606,7 +120525,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx ret = __v4l2_ctrl_handler_setup(imx219->sd.ctrl_handler); diff -Naur --no-dereference a/drivers/media/i2c/imx258.c b/drivers/media/i2c/imx258.c --- a/drivers/media/i2c/imx258.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/imx258.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/imx258.c 2024-11-24 20:19:38.145228776 -0500 @@ -695,7 +695,7 @@ static int imx258_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { @@ -114685,7 +120604,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/imx258.c b/drivers/media/i2c/imx imx258->cur_mode = mode; diff -Naur --no-dereference a/drivers/media/i2c/imx274.c b/drivers/media/i2c/imx274.c --- a/drivers/media/i2c/imx274.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/imx274.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/imx274.c 2024-11-24 20:19:38.145228776 -0500 @@ -870,7 +870,7 @@ * available (when called from set_fmt) */ @@ -114816,7 +120735,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/imx274.c b/drivers/media/i2c/imx mutex_unlock(&imx274->lock); diff -Naur --no-dereference a/drivers/media/i2c/imx290.c b/drivers/media/i2c/imx290.c --- a/drivers/media/i2c/imx290.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/imx290.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/imx290.c 2024-11-24 20:19:38.146228778 -0500 @@ -516,7 +516,7 @@ }; @@ -114894,7 +120813,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/imx290.c b/drivers/media/i2c/imx } diff -Naur --no-dereference a/drivers/media/i2c/imx319.c b/drivers/media/i2c/imx319.c --- a/drivers/media/i2c/imx319.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/imx319.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/imx319.c 2024-11-24 20:19:38.146228778 -0500 @@ -1860,7 +1860,7 @@ { struct imx319 *imx319 = to_imx319(sd); @@ -114976,7 +120895,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/imx319.c b/drivers/media/i2c/imx imx319->cur_mode = mode; diff -Naur --no-dereference a/drivers/media/i2c/imx355.c b/drivers/media/i2c/imx355.c --- a/drivers/media/i2c/imx355.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/imx355.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/imx355.c 2024-11-24 20:19:38.146228778 -0500 @@ -1161,7 +1161,7 @@ { struct imx355 *imx355 = to_imx355(sd); @@ -115058,7 +120977,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/imx355.c b/drivers/media/i2c/imx imx355->cur_mode = mode; diff -Naur --no-dereference a/drivers/media/i2c/imx390.c b/drivers/media/i2c/imx390.c --- a/drivers/media/i2c/imx390.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/i2c/imx390.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/imx390.c 2024-11-24 20:19:38.146228778 -0500 @@ -0,0 +1,900 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -115962,7 +121881,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/imx390.c b/drivers/media/i2c/imx +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/media/i2c/imx390.h b/drivers/media/i2c/imx390.h --- a/drivers/media/i2c/imx390.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/i2c/imx390.h 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/imx390.h 2024-11-24 20:19:38.146228778 -0500 @@ -0,0 +1,7158 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -123124,7 +129043,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/imx390.h b/drivers/media/i2c/imx +}; diff -Naur --no-dereference a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig --- a/drivers/media/i2c/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/Kconfig 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/i2c/Kconfig 2024-11-24 20:19:38.143228773 -0500 @@ -825,6 +825,30 @@ To compile this driver as a module, choose M here: the module will be called imx355. @@ -123213,7 +129132,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kcon endif # VIDEO_V4L2 diff -Naur --no-dereference a/drivers/media/i2c/m5mols/m5mols_core.c b/drivers/media/i2c/m5mols/m5mols_core.c --- a/drivers/media/i2c/m5mols/m5mols_core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/m5mols/m5mols_core.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/m5mols/m5mols_core.c 2024-11-24 20:19:38.146228778 -0500 @@ -539,17 +539,19 @@ } @@ -123287,7 +129206,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/m5mols/m5mols_core.c b/drivers/m return 0; diff -Naur --no-dereference a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile --- a/drivers/media/i2c/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/Makefile 2024-08-28 19:44:05.612037968 -0400 ++++ b/drivers/media/i2c/Makefile 2024-11-24 20:19:38.143228773 -0500 @@ -64,6 +64,7 @@ obj-$(CONFIG_VIDEO_SONY_BTF_MPX) += sony-btf-mpx.o obj-$(CONFIG_VIDEO_UPD64031A) += upd64031a.o @@ -123319,7 +129238,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/Makefile b/drivers/media/i2c/Mak +obj-$(CONFIG_VIDEO_DS90UB960) += ds90ub960.o diff -Naur --no-dereference a/drivers/media/i2c/max9286.c b/drivers/media/i2c/max9286.c --- a/drivers/media/i2c/max9286.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/max9286.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/max9286.c 2024-11-24 20:19:38.146228778 -0500 @@ -681,7 +681,7 @@ } @@ -123392,7 +129311,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/max9286.c b/drivers/media/i2c/ma diff -Naur --no-dereference a/drivers/media/i2c/ml86v7667.c b/drivers/media/i2c/ml86v7667.c --- a/drivers/media/i2c/ml86v7667.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ml86v7667.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ml86v7667.c 2024-11-24 20:19:38.147228780 -0500 @@ -188,7 +188,7 @@ } @@ -123413,7 +129332,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ml86v7667.c b/drivers/media/i2c/ struct ml86v7667_priv *priv = to_ml86v7667(sd); diff -Naur --no-dereference a/drivers/media/i2c/mt9m001.c b/drivers/media/i2c/mt9m001.c --- a/drivers/media/i2c/mt9m001.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/mt9m001.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/mt9m001.c 2024-11-24 20:19:38.147228780 -0500 @@ -253,7 +253,7 @@ } @@ -123494,7 +129413,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/mt9m001.c b/drivers/media/i2c/mt struct i2c_client *client = v4l2_get_subdevdata(sd); diff -Naur --no-dereference a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt9m032.c --- a/drivers/media/i2c/mt9m032.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/mt9m032.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/mt9m032.c 2024-11-24 20:19:38.147228780 -0500 @@ -304,7 +304,7 @@ */ @@ -123624,7 +129543,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt } diff -Naur --no-dereference a/drivers/media/i2c/mt9m111.c b/drivers/media/i2c/mt9m111.c --- a/drivers/media/i2c/mt9m111.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/mt9m111.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/mt9m111.c 2024-11-24 20:19:38.147228780 -0500 @@ -449,7 +449,7 @@ } @@ -123704,7 +129623,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/mt9m111.c b/drivers/media/i2c/mt format->height = MT9M111_MAX_HEIGHT; diff -Naur --no-dereference a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c --- a/drivers/media/i2c/mt9p031.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/mt9p031.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/mt9p031.c 2024-11-24 20:19:38.147228780 -0500 @@ -497,7 +497,7 @@ } @@ -123859,7 +129778,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt format->code = MEDIA_BUS_FMT_Y12_1X12; diff -Naur --no-dereference a/drivers/media/i2c/mt9t001.c b/drivers/media/i2c/mt9t001.c --- a/drivers/media/i2c/mt9t001.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/mt9t001.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/mt9t001.c 2024-11-24 20:19:38.147228780 -0500 @@ -252,12 +252,14 @@ */ @@ -124014,7 +129933,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/mt9t001.c b/drivers/media/i2c/mt format->height = MT9T001_WINDOW_HEIGHT_DEF + 1; diff -Naur --no-dereference a/drivers/media/i2c/mt9t112.c b/drivers/media/i2c/mt9t112.c --- a/drivers/media/i2c/mt9t112.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/mt9t112.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/mt9t112.c 2024-11-24 20:19:38.147228780 -0500 @@ -872,8 +872,8 @@ } @@ -124071,7 +129990,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/mt9t112.c b/drivers/media/i2c/mt struct i2c_client *client = v4l2_get_subdevdata(sd); diff -Naur --no-dereference a/drivers/media/i2c/mt9v011.c b/drivers/media/i2c/mt9v011.c --- a/drivers/media/i2c/mt9v011.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/mt9v011.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/mt9v011.c 2024-11-24 20:19:38.147228780 -0500 @@ -327,7 +327,7 @@ } @@ -124101,7 +130020,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/mt9v011.c b/drivers/media/i2c/mt return 0; diff -Naur --no-dereference a/drivers/media/i2c/mt9v032.c b/drivers/media/i2c/mt9v032.c --- a/drivers/media/i2c/mt9v032.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/mt9v032.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/mt9v032.c 2024-11-24 20:19:38.147228780 -0500 @@ -349,12 +349,14 @@ */ @@ -124258,7 +130177,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/mt9v032.c b/drivers/media/i2c/mt format->code = MEDIA_BUS_FMT_SGRBG10_1X10; diff -Naur --no-dereference a/drivers/media/i2c/mt9v111.c b/drivers/media/i2c/mt9v111.c --- a/drivers/media/i2c/mt9v111.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/mt9v111.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/mt9v111.c 2024-11-24 20:19:38.147228780 -0500 @@ -791,14 +791,14 @@ static struct v4l2_mbus_framefmt *__mt9v111_get_pad_format( @@ -124354,7 +130273,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/mt9v111.c b/drivers/media/i2c/mt } diff -Naur --no-dereference a/drivers/media/i2c/noon010pc30.c b/drivers/media/i2c/noon010pc30.c --- a/drivers/media/i2c/noon010pc30.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/noon010pc30.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/noon010pc30.c 2024-11-24 20:19:38.148228782 -0500 @@ -488,7 +488,7 @@ } @@ -124417,7 +130336,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/noon010pc30.c b/drivers/media/i2 mf->height = noon010_sizes[0].height; diff -Naur --no-dereference a/drivers/media/i2c/ov1063x.c b/drivers/media/i2c/ov1063x.c --- a/drivers/media/i2c/ov1063x.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/i2c/ov1063x.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov1063x.c 2024-11-24 20:19:38.148228782 -0500 @@ -0,0 +1,975 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -125396,7 +131315,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov1063x.c b/drivers/media/i2c/ov +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/media/i2c/ov1063x_regs.h b/drivers/media/i2c/ov1063x_regs.h --- a/drivers/media/i2c/ov1063x_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/i2c/ov1063x_regs.h 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov1063x_regs.h 2024-11-24 20:19:38.148228782 -0500 @@ -0,0 +1,699 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -126099,7 +132018,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov1063x_regs.h b/drivers/media/i +}; diff -Naur --no-dereference a/drivers/media/i2c/ov13858.c b/drivers/media/i2c/ov13858.c --- a/drivers/media/i2c/ov13858.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov13858.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov13858.c 2024-11-24 20:19:38.148228782 -0500 @@ -1150,7 +1150,7 @@ { struct ov13858 *ov13858 = to_ov13858(sd); @@ -126181,7 +132100,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov13858.c b/drivers/media/i2c/ov ov13858->cur_mode = mode; diff -Naur --no-dereference a/drivers/media/i2c/ov2312.c b/drivers/media/i2c/ov2312.c --- a/drivers/media/i2c/ov2312.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/i2c/ov2312.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov2312.c 2024-11-24 20:19:38.148228782 -0500 @@ -0,0 +1,796 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -126981,7 +132900,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov2312.c b/drivers/media/i2c/ov2 +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/media/i2c/ov2312.h b/drivers/media/i2c/ov2312.h --- a/drivers/media/i2c/ov2312.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/i2c/ov2312.h 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov2312.h 2024-11-24 20:19:38.148228782 -0500 @@ -0,0 +1,268 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -127253,7 +133172,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov2312.h b/drivers/media/i2c/ov2 +}; diff -Naur --no-dereference a/drivers/media/i2c/ov2640.c b/drivers/media/i2c/ov2640.c --- a/drivers/media/i2c/ov2640.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov2640.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov2640.c 2024-11-24 20:19:38.148228782 -0500 @@ -913,7 +913,7 @@ } @@ -127324,7 +133243,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov2640.c b/drivers/media/i2c/ov2 if (sel->which != V4L2_SUBDEV_FORMAT_ACTIVE) diff -Naur --no-dereference a/drivers/media/i2c/ov2659.c b/drivers/media/i2c/ov2659.c --- a/drivers/media/i2c/ov2659.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov2659.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov2659.c 2024-11-24 20:19:38.148228782 -0500 @@ -980,7 +980,7 @@ */ @@ -127390,7 +133309,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov2659.c b/drivers/media/i2c/ov2 diff -Naur --no-dereference a/drivers/media/i2c/ov2680.c b/drivers/media/i2c/ov2680.c --- a/drivers/media/i2c/ov2680.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov2680.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov2680.c 2024-11-24 20:19:38.148228782 -0500 @@ -645,7 +645,7 @@ } @@ -127476,7 +133395,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov2680.c b/drivers/media/i2c/ov2 struct v4l2_fract tpf; diff -Naur --no-dereference a/drivers/media/i2c/ov2685.c b/drivers/media/i2c/ov2685.c --- a/drivers/media/i2c/ov2685.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov2685.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov2685.c 2024-11-24 20:19:38.148228782 -0500 @@ -328,7 +328,7 @@ } @@ -127524,7 +133443,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov2685.c b/drivers/media/i2c/ov2 diff -Naur --no-dereference a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c --- a/drivers/media/i2c/ov2740.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov2740.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov2740.c 2024-11-24 20:19:38.148228782 -0500 @@ -710,7 +710,7 @@ } @@ -127590,7 +133509,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2 return 0; diff -Naur --no-dereference a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5640.c --- a/drivers/media/i2c/ov5640.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov5640.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov5640.c 2024-11-24 20:19:38.148228782 -0500 @@ -15,6 +15,7 @@ #include #include @@ -129781,7 +135700,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5 .probe_new = ov5640_probe, diff -Naur --no-dereference a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c --- a/drivers/media/i2c/ov5645.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov5645.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov5645.c 2024-11-24 20:19:38.149228784 -0500 @@ -837,7 +837,7 @@ }; @@ -129914,7 +135833,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5 } diff -Naur --no-dereference a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c --- a/drivers/media/i2c/ov5647.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov5647.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov5647.c 2024-11-24 20:19:38.149228784 -0500 @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /* @@ -131541,7 +137460,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5 .remove = ov5647_remove, diff -Naur --no-dereference a/drivers/media/i2c/ov5670.c b/drivers/media/i2c/ov5670.c --- a/drivers/media/i2c/ov5670.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov5670.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov5670.c 2024-11-24 20:19:38.149228784 -0500 @@ -1937,7 +1937,7 @@ { struct ov5670 *ov5670 = to_ov5670(sd); @@ -131620,7 +137539,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov5670.c b/drivers/media/i2c/ov5 __v4l2_ctrl_s_ctrl(ov5670->link_freq, mode->link_freq_index); diff -Naur --no-dereference a/drivers/media/i2c/ov5675.c b/drivers/media/i2c/ov5675.c --- a/drivers/media/i2c/ov5675.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov5675.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov5675.c 2024-11-24 20:19:38.149228784 -0500 @@ -926,7 +926,7 @@ } @@ -131686,7 +137605,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov5675.c b/drivers/media/i2c/ov5 return 0; diff -Naur --no-dereference a/drivers/media/i2c/ov5695.c b/drivers/media/i2c/ov5695.c --- a/drivers/media/i2c/ov5695.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov5695.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov5695.c 2024-11-24 20:19:38.149228784 -0500 @@ -806,7 +806,7 @@ } @@ -131753,7 +137672,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov5695.c b/drivers/media/i2c/ov5 mutex_lock(&ov5695->mutex); diff -Naur --no-dereference a/drivers/media/i2c/ov6650.c b/drivers/media/i2c/ov6650.c --- a/drivers/media/i2c/ov6650.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov6650.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov6650.c 2024-11-24 20:19:38.149228784 -0500 @@ -467,7 +467,7 @@ } @@ -131836,7 +137755,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov6650.c b/drivers/media/i2c/ov6 if (code->pad || code->index >= ARRAY_SIZE(ov6650_codes)) diff -Naur --no-dereference a/drivers/media/i2c/ov7251.c b/drivers/media/i2c/ov7251.c --- a/drivers/media/i2c/ov7251.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov7251.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov7251.c 2024-11-24 20:19:38.149228784 -0500 @@ -898,7 +898,7 @@ }; @@ -131982,7 +137901,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov7251.c b/drivers/media/i2c/ov7 diff -Naur --no-dereference a/drivers/media/i2c/ov7670.c b/drivers/media/i2c/ov7670.c --- a/drivers/media/i2c/ov7670.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov7670.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov7670.c 2024-11-24 20:19:38.149228784 -0500 @@ -946,7 +946,7 @@ @@ -132058,7 +137977,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov7670.c b/drivers/media/i2c/ov7 diff -Naur --no-dereference a/drivers/media/i2c/ov772x.c b/drivers/media/i2c/ov772x.c --- a/drivers/media/i2c/ov772x.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov772x.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov772x.c 2024-11-24 20:19:38.150228785 -0500 @@ -1136,7 +1136,7 @@ } @@ -132115,7 +138034,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov772x.c b/drivers/media/i2c/ov7 if (code->pad || code->index >= ARRAY_SIZE(ov772x_cfmts)) diff -Naur --no-dereference a/drivers/media/i2c/ov7740.c b/drivers/media/i2c/ov7740.c --- a/drivers/media/i2c/ov7740.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov7740.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov7740.c 2024-11-24 20:19:38.150228785 -0500 @@ -709,7 +709,7 @@ #define N_OV7740_FMTS ARRAY_SIZE(ov7740_formats) @@ -132191,7 +138110,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov7740.c b/drivers/media/i2c/ov7 ov7740_get_default_format(sd, format); diff -Naur --no-dereference a/drivers/media/i2c/ov8856.c b/drivers/media/i2c/ov8856.c --- a/drivers/media/i2c/ov8856.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov8856.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov8856.c 2024-11-24 20:19:38.150228785 -0500 @@ -1457,7 +1457,7 @@ } @@ -132257,7 +138176,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov8856.c b/drivers/media/i2c/ov8 return 0; diff -Naur --no-dereference a/drivers/media/i2c/ov9640.c b/drivers/media/i2c/ov9640.c --- a/drivers/media/i2c/ov9640.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov9640.c 2024-08-28 19:44:05.616037989 -0400 ++++ b/drivers/media/i2c/ov9640.c 2024-11-24 20:19:38.150228785 -0500 @@ -519,7 +519,7 @@ } @@ -132294,7 +138213,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov9640.c b/drivers/media/i2c/ov9 if (sel->which != V4L2_SUBDEV_FORMAT_ACTIVE) diff -Naur --no-dereference a/drivers/media/i2c/ov9650.c b/drivers/media/i2c/ov9650.c --- a/drivers/media/i2c/ov9650.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/ov9650.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/ov9650.c 2024-11-24 20:19:38.150228785 -0500 @@ -1070,7 +1070,7 @@ } @@ -132362,7 +138281,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/ov9650.c b/drivers/media/i2c/ov9 return 0; diff -Naur --no-dereference a/drivers/media/i2c/rdacm20.c b/drivers/media/i2c/rdacm20.c --- a/drivers/media/i2c/rdacm20.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/rdacm20.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/rdacm20.c 2024-11-24 20:19:38.150228785 -0500 @@ -403,7 +403,7 @@ } @@ -132383,7 +138302,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/rdacm20.c b/drivers/media/i2c/rd struct v4l2_mbus_framefmt *mf = &format->format; diff -Naur --no-dereference a/drivers/media/i2c/rj54n1cb0c.c b/drivers/media/i2c/rj54n1cb0c.c --- a/drivers/media/i2c/rj54n1cb0c.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/rj54n1cb0c.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/rj54n1cb0c.c 2024-11-24 20:19:38.150228785 -0500 @@ -488,7 +488,7 @@ } @@ -132440,7 +138359,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/rj54n1cb0c.c b/drivers/media/i2c diff -Naur --no-dereference a/drivers/media/i2c/s5c73m3/s5c73m3-core.c b/drivers/media/i2c/s5c73m3/s5c73m3-core.c --- a/drivers/media/i2c/s5c73m3/s5c73m3-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/s5c73m3/s5c73m3-core.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/s5c73m3/s5c73m3-core.c 2024-11-24 20:19:38.150228785 -0500 @@ -817,7 +817,7 @@ } @@ -132646,7 +138565,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/s5c73m3/s5c73m3-core.c b/drivers return 0; diff -Naur --no-dereference a/drivers/media/i2c/s5k4ecgx.c b/drivers/media/i2c/s5k4ecgx.c --- a/drivers/media/i2c/s5k4ecgx.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/s5k4ecgx.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/s5k4ecgx.c 2024-11-24 20:19:38.150228785 -0500 @@ -525,7 +525,7 @@ } @@ -132711,7 +138630,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/s5k4ecgx.c b/drivers/media/i2c/s mf->height = s5k4ecgx_prev_sizes[0].size.height; diff -Naur --no-dereference a/drivers/media/i2c/s5k5baf.c b/drivers/media/i2c/s5k5baf.c --- a/drivers/media/i2c/s5k5baf.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/s5k5baf.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/s5k5baf.c 2024-11-24 20:19:38.151228787 -0500 @@ -1180,7 +1180,7 @@ * V4L2 subdev pad level and video operations */ @@ -132858,7 +138777,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/s5k5baf.c b/drivers/media/i2c/s5 } diff -Naur --no-dereference a/drivers/media/i2c/s5k6a3.c b/drivers/media/i2c/s5k6a3.c --- a/drivers/media/i2c/s5k6a3.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/s5k6a3.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/s5k6a3.c 2024-11-24 20:19:38.151228787 -0500 @@ -99,7 +99,7 @@ } @@ -132928,7 +138847,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/s5k6a3.c b/drivers/media/i2c/s5k format->width = S5K6A3_DEFAULT_WIDTH; diff -Naur --no-dereference a/drivers/media/i2c/s5k6aa.c b/drivers/media/i2c/s5k6aa.c --- a/drivers/media/i2c/s5k6aa.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/s5k6aa.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/s5k6aa.c 2024-11-24 20:19:38.151228787 -0500 @@ -997,7 +997,7 @@ * V4L2 subdev pad level and video operations */ @@ -133072,7 +138991,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/s5k6aa.c b/drivers/media/i2c/s5k format->code = s5k6aa_formats[0].code; diff -Naur --no-dereference a/drivers/media/i2c/saa6752hs.c b/drivers/media/i2c/saa6752hs.c --- a/drivers/media/i2c/saa6752hs.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/saa6752hs.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/saa6752hs.c 2024-11-24 20:19:38.151228787 -0500 @@ -543,7 +543,7 @@ } @@ -133102,7 +139021,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/saa6752hs.c b/drivers/media/i2c/ diff -Naur --no-dereference a/drivers/media/i2c/saa7115.c b/drivers/media/i2c/saa7115.c --- a/drivers/media/i2c/saa7115.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/saa7115.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/saa7115.c 2024-11-24 20:19:38.151228787 -0500 @@ -1167,7 +1167,7 @@ } @@ -133114,7 +139033,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/saa7115.c b/drivers/media/i2c/sa struct v4l2_mbus_framefmt *fmt = &format->format; diff -Naur --no-dereference a/drivers/media/i2c/saa717x.c b/drivers/media/i2c/saa717x.c --- a/drivers/media/i2c/saa717x.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/saa717x.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/saa717x.c 2024-11-24 20:19:38.151228787 -0500 @@ -980,7 +980,7 @@ #endif @@ -133126,7 +139045,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/saa717x.c b/drivers/media/i2c/sa struct v4l2_mbus_framefmt *fmt = &format->format; diff -Naur --no-dereference a/drivers/media/i2c/smiapp/smiapp-core.c b/drivers/media/i2c/smiapp/smiapp-core.c --- a/drivers/media/i2c/smiapp/smiapp-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/smiapp/smiapp-core.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/smiapp/smiapp-core.c 2024-11-24 20:19:38.151228787 -0500 @@ -1573,7 +1573,7 @@ } @@ -133449,7 +139368,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/smiapp/smiapp-core.c b/drivers/m diff -Naur --no-dereference a/drivers/media/i2c/sr030pc30.c b/drivers/media/i2c/sr030pc30.c --- a/drivers/media/i2c/sr030pc30.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/sr030pc30.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/sr030pc30.c 2024-11-24 20:19:38.151228787 -0500 @@ -468,7 +468,7 @@ } @@ -133488,7 +139407,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/sr030pc30.c b/drivers/media/i2c/ diff -Naur --no-dereference a/drivers/media/i2c/st-mipid02.c b/drivers/media/i2c/st-mipid02.c --- a/drivers/media/i2c/st-mipid02.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/st-mipid02.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/st-mipid02.c 2024-11-24 20:19:38.151228787 -0500 @@ -644,7 +644,7 @@ } @@ -133572,7 +139491,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/st-mipid02.c b/drivers/media/i2c mutex_unlock(&bridge->lock); diff -Naur --no-dereference a/drivers/media/i2c/tc358743.c b/drivers/media/i2c/tc358743.c --- a/drivers/media/i2c/tc358743.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/tc358743.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/tc358743.c 2024-11-24 20:19:38.152228789 -0500 @@ -1649,7 +1649,7 @@ /* --------------- PAD OPS --------------- */ @@ -133609,7 +139528,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/tc358743.c b/drivers/media/i2c/t diff -Naur --no-dereference a/drivers/media/i2c/tda1997x.c b/drivers/media/i2c/tda1997x.c --- a/drivers/media/i2c/tda1997x.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/tda1997x.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/tda1997x.c 2024-11-24 20:19:38.152228789 -0500 @@ -1719,19 +1719,19 @@ */ @@ -133671,7 +139590,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/tda1997x.c b/drivers/media/i2c/t int ret = tda1997x_setup_format(state, format->format.code); diff -Naur --no-dereference a/drivers/media/i2c/tvp514x.c b/drivers/media/i2c/tvp514x.c --- a/drivers/media/i2c/tvp514x.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/tvp514x.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/tvp514x.c 2024-11-24 20:19:38.152228789 -0500 @@ -859,7 +859,7 @@ * Enumertaes mbus codes supported */ @@ -133701,7 +139620,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/tvp514x.c b/drivers/media/i2c/tv struct tvp514x_decoder *decoder = to_decoder(sd); diff -Naur --no-dereference a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c --- a/drivers/media/i2c/tvp5150.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/tvp5150.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/tvp5150.c 2024-11-24 20:19:38.152228789 -0500 @@ -1027,7 +1027,7 @@ static struct v4l2_rect * @@ -133794,7 +139713,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tv struct tvp5150 *decoder = to_tvp5150(sd); diff -Naur --no-dereference a/drivers/media/i2c/tvp7002.c b/drivers/media/i2c/tvp7002.c --- a/drivers/media/i2c/tvp7002.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/tvp7002.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/tvp7002.c 2024-11-24 20:19:38.152228789 -0500 @@ -797,7 +797,8 @@ * Enumerate supported digital video formats for pad. */ @@ -133831,7 +139750,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/tvp7002.c b/drivers/media/i2c/tv /* V4L2 core operation handlers */ diff -Naur --no-dereference a/drivers/media/i2c/tw9910.c b/drivers/media/i2c/tw9910.c --- a/drivers/media/i2c/tw9910.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/tw9910.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/tw9910.c 2024-11-24 20:19:38.152228789 -0500 @@ -720,7 +720,7 @@ } @@ -133879,7 +139798,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/tw9910.c b/drivers/media/i2c/tw9 if (code->pad || code->index) diff -Naur --no-dereference a/drivers/media/i2c/vs6624.c b/drivers/media/i2c/vs6624.c --- a/drivers/media/i2c/vs6624.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/i2c/vs6624.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/i2c/vs6624.c 2024-11-24 20:19:38.152228789 -0500 @@ -546,7 +546,7 @@ } @@ -133918,7 +139837,7 @@ diff -Naur --no-dereference a/drivers/media/i2c/vs6624.c b/drivers/media/i2c/vs6 struct vs6624 *sensor = to_vs6624(sd); diff -Naur --no-dereference a/drivers/media/mc/mc-device.c b/drivers/media/mc/mc-device.c --- a/drivers/media/mc/mc-device.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/mc/mc-device.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/mc/mc-device.c 2024-11-24 20:19:38.152228789 -0500 @@ -581,7 +581,7 @@ struct media_device *mdev = entity->graph_obj.mdev; struct media_link *link, *tmp; @@ -133962,7 +139881,7 @@ diff -Naur --no-dereference a/drivers/media/mc/mc-device.c b/drivers/media/mc/mc list_for_each_entry_safe(notify, next, &mdev->entity_notify, list) diff -Naur --no-dereference a/drivers/media/mc/mc-entity.c b/drivers/media/mc/mc-entity.c --- a/drivers/media/mc/mc-entity.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/mc/mc-entity.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/mc/mc-entity.c 2024-11-24 20:19:38.152228789 -0500 @@ -198,7 +198,8 @@ struct media_pad *pads) { @@ -134420,7 +140339,7 @@ diff -Naur --no-dereference a/drivers/media/mc/mc-entity.c b/drivers/media/mc/mc (source->stream_count || sink->stream_count)) diff -Naur --no-dereference a/drivers/media/pci/cx18/cx18-av-core.c b/drivers/media/pci/cx18/cx18-av-core.c --- a/drivers/media/pci/cx18/cx18-av-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/pci/cx18/cx18-av-core.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/pci/cx18/cx18-av-core.c 2024-11-24 20:19:38.153228791 -0500 @@ -930,7 +930,7 @@ } @@ -134432,7 +140351,7 @@ diff -Naur --no-dereference a/drivers/media/pci/cx18/cx18-av-core.c b/drivers/me struct v4l2_mbus_framefmt *fmt = &format->format; diff -Naur --no-dereference a/drivers/media/pci/intel/ipu3/ipu3-cio2.c b/drivers/media/pci/intel/ipu3/ipu3-cio2.c --- a/drivers/media/pci/intel/ipu3/ipu3-cio2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/pci/intel/ipu3/ipu3-cio2.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/pci/intel/ipu3/ipu3-cio2.c 2024-11-24 20:19:38.153228791 -0500 @@ -33,6 +33,7 @@ u32 mbus_code; u32 fourcc; @@ -134581,7 +140500,7 @@ diff -Naur --no-dereference a/drivers/media/pci/intel/ipu3/ipu3-cio2.c b/drivers if (code->index >= ARRAY_SIZE(formats)) diff -Naur --no-dereference a/drivers/media/pci/saa7134/saa7134-empress.c b/drivers/media/pci/saa7134/saa7134-empress.c --- a/drivers/media/pci/saa7134/saa7134-empress.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/pci/saa7134/saa7134-empress.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/pci/saa7134/saa7134-empress.c 2024-11-24 20:19:38.153228791 -0500 @@ -138,12 +138,15 @@ { struct saa7134_dev *dev = video_drvdata(file); @@ -134601,7 +140520,7 @@ diff -Naur --no-dereference a/drivers/media/pci/saa7134/saa7134-empress.c b/driv f->fmt.pix.pixelformat = V4L2_PIX_FMT_MPEG; diff -Naur --no-dereference a/drivers/media/platform/atmel/atmel-isc-base.c b/drivers/media/platform/atmel/atmel-isc-base.c --- a/drivers/media/platform/atmel/atmel-isc-base.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/atmel/atmel-isc-base.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/atmel/atmel-isc-base.c 2024-11-24 20:19:38.153228791 -0500 @@ -1224,7 +1224,7 @@ } @@ -134660,7 +140579,7 @@ diff -Naur --no-dereference a/drivers/media/platform/atmel/atmel-isc-base.c b/dr diff -Naur --no-dereference a/drivers/media/platform/atmel/atmel-isi.c b/drivers/media/platform/atmel/atmel-isi.c --- a/drivers/media/platform/atmel/atmel-isi.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/atmel/atmel-isi.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/atmel/atmel-isi.c 2024-11-24 20:19:38.153228791 -0500 @@ -556,7 +556,7 @@ } @@ -134718,7 +140637,7 @@ diff -Naur --no-dereference a/drivers/media/platform/atmel/atmel-isi.c b/drivers diff -Naur --no-dereference a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/platform/cadence/cdns-csi2rx.c --- a/drivers/media/platform/cadence/cdns-csi2rx.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/cadence/cdns-csi2rx.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/cadence/cdns-csi2rx.c 2024-11-24 20:19:38.153228791 -0500 @@ -8,6 +8,7 @@ #include #include @@ -135391,7 +141310,7 @@ diff -Naur --no-dereference a/drivers/media/platform/cadence/cdns-csi2rx.c b/dri module_platform_driver(csi2rx_driver); diff -Naur --no-dereference a/drivers/media/platform/cadence/cdns-csi2tx.c b/drivers/media/platform/cadence/cdns-csi2tx.c --- a/drivers/media/platform/cadence/cdns-csi2tx.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/cadence/cdns-csi2tx.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/cadence/cdns-csi2tx.c 2024-11-24 20:19:38.154228793 -0500 @@ -156,7 +156,7 @@ } @@ -135454,19 +141373,19 @@ diff -Naur --no-dereference a/drivers/media/platform/cadence/cdns-csi2tx.c b/dri diff -Naur --no-dereference a/drivers/media/platform/chips-media/Kconfig b/drivers/media/platform/chips-media/Kconfig --- a/drivers/media/platform/chips-media/Kconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/Kconfig 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/Kconfig 2024-11-24 20:19:38.154228793 -0500 @@ -0,0 +1,2 @@ + comment "Chips&Media media platform drivers" +source "drivers/media/platform/chips-media/wave5/Kconfig" diff -Naur --no-dereference a/drivers/media/platform/chips-media/Makefile b/drivers/media/platform/chips-media/Makefile --- a/drivers/media/platform/chips-media/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/Makefile 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/Makefile 2024-11-24 20:19:38.154228793 -0500 @@ -0,0 +1,2 @@ + # SPDX-License-Identifier: GPL-2.0-only +obj-y += wave5/ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/Kconfig b/drivers/media/platform/chips-media/wave5/Kconfig --- a/drivers/media/platform/chips-media/wave5/Kconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/Kconfig 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/Kconfig 2024-11-24 20:19:38.154228793 -0500 @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: GPL-2.0 +config VIDEO_WAVE_VPU @@ -135482,7 +141401,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/Kconfig b + modules will be called wave5. diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/Makefile b/drivers/media/platform/chips-media/wave5/Makefile --- a/drivers/media/platform/chips-media/wave5/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/Makefile 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/Makefile 2024-11-24 20:19:38.154228793 -0500 @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: GPL-2.0 + @@ -135496,7 +141415,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/Makefile + wave5-helper.o diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/TODO b/drivers/media/platform/chips-media/wave5/TODO --- a/drivers/media/platform/chips-media/wave5/TODO 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/TODO 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/TODO 2024-11-24 20:19:38.154228793 -0500 @@ -0,0 +1,18 @@ +* Handle interrupts better + @@ -135518,7 +141437,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/TODO b/dr + declares that STREAMON can be called before source buffers have been queued. diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5.h b/drivers/media/platform/chips-media/wave5/wave5.h --- a/drivers/media/platform/chips-media/wave5/wave5.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5.h 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5.h 2024-11-24 20:19:38.155228794 -0500 @@ -0,0 +1,94 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */ +/* @@ -135616,7 +141535,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5.h b +#endif /* __WAVE5_FUNCTION_H__ */ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-helper.c b/drivers/media/platform/chips-media/wave5/wave5-helper.c --- a/drivers/media/platform/chips-media/wave5/wave5-helper.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-helper.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-helper.c 2024-11-24 20:19:38.154228793 -0500 @@ -0,0 +1,188 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) +/* @@ -135808,7 +141727,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-hel +} diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-helper.h b/drivers/media/platform/chips-media/wave5/wave5-helper.h --- a/drivers/media/platform/chips-media/wave5/wave5-helper.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-helper.h 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-helper.h 2024-11-24 20:19:38.154228793 -0500 @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */ +/* @@ -135840,7 +141759,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-hel +#endif diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-hw.c b/drivers/media/platform/chips-media/wave5/wave5-hw.c --- a/drivers/media/platform/chips-media/wave5/wave5-hw.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-hw.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-hw.c 2024-11-24 20:19:38.154228793 -0500 @@ -0,0 +1,3372 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) +/* @@ -139216,7 +145135,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-hw. +} diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-regdefine.h b/drivers/media/platform/chips-media/wave5/wave5-regdefine.h --- a/drivers/media/platform/chips-media/wave5/wave5-regdefine.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-regdefine.h 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-regdefine.h 2024-11-24 20:19:38.154228793 -0500 @@ -0,0 +1,743 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */ +/* @@ -139963,7 +145882,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-reg +#endif /* __WAVE5_REGISTER_DEFINE_H__ */ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vdi.c b/drivers/media/platform/chips-media/wave5/wave5-vdi.c --- a/drivers/media/platform/chips-media/wave5/wave5-vdi.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-vdi.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-vdi.c 2024-11-24 20:19:38.154228793 -0500 @@ -0,0 +1,245 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) +/* @@ -140212,7 +146131,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vdi +} diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vdi.h b/drivers/media/platform/chips-media/wave5/wave5-vdi.h --- a/drivers/media/platform/chips-media/wave5/wave5-vdi.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-vdi.h 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-vdi.h 2024-11-24 20:19:38.155228794 -0500 @@ -0,0 +1,67 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */ +/* @@ -140283,7 +146202,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vdi +#endif //#ifndef _VDI_H_ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.c b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.c --- a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.c 2024-11-24 20:19:38.155228794 -0500 @@ -0,0 +1,1040 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) +/* @@ -141327,7 +147246,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu +} diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h --- a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h 2024-11-24 20:19:38.155228794 -0500 @@ -0,0 +1,1138 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */ +/* @@ -142469,7 +148388,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu +#endif diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu.c b/drivers/media/platform/chips-media/wave5/wave5-vpu.c --- a/drivers/media/platform/chips-media/wave5/wave5-vpu.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-vpu.c 2024-11-24 20:19:38.155228794 -0500 @@ -0,0 +1,428 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) +/* @@ -142901,7 +148820,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu +MODULE_LICENSE("Dual BSD/GPL"); diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpuconfig.h b/drivers/media/platform/chips-media/wave5/wave5-vpuconfig.h --- a/drivers/media/platform/chips-media/wave5/wave5-vpuconfig.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-vpuconfig.h 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-vpuconfig.h 2024-11-24 20:19:38.155228794 -0500 @@ -0,0 +1,90 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */ +/* @@ -142995,7 +148914,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu +#endif /* _VPU_CONFIG_H_ */ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c --- a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c 2024-11-24 20:19:38.155228794 -0500 @@ -0,0 +1,1441 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) +/* @@ -144440,7 +150359,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu +} diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c --- a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c 2024-11-24 20:19:38.155228794 -0500 @@ -0,0 +1,1758 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) +/* @@ -146202,7 +152121,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu +} diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpuerror.h b/drivers/media/platform/chips-media/wave5/wave5-vpuerror.h --- a/drivers/media/platform/chips-media/wave5/wave5-vpuerror.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-vpuerror.h 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-vpuerror.h 2024-11-24 20:19:38.155228794 -0500 @@ -0,0 +1,454 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */ +/* @@ -146660,7 +152579,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu +#endif /* ERROR_CODE_H_INCLUDED */ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu.h b/drivers/media/platform/chips-media/wave5/wave5-vpu.h --- a/drivers/media/platform/chips-media/wave5/wave5-vpu.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu.h 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/chips-media/wave5/wave5-vpu.h 2024-11-24 20:19:38.155228794 -0500 @@ -0,0 +1,72 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */ +/* @@ -146736,7 +152655,7 @@ diff -Naur --no-dereference a/drivers/media/platform/chips-media/wave5/wave5-vpu +#endif diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/fimc-capture.c b/drivers/media/platform/exynos4-is/fimc-capture.c --- a/drivers/media/platform/exynos4-is/fimc-capture.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/exynos4-is/fimc-capture.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/exynos4-is/fimc-capture.c 2024-11-24 20:19:38.155228794 -0500 @@ -524,7 +524,7 @@ mutex_lock(&fimc->lock); @@ -146864,7 +152783,7 @@ diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/fimc-capture.c b default: diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/fimc-isp.c b/drivers/media/platform/exynos4-is/fimc-isp.c --- a/drivers/media/platform/exynos4-is/fimc-isp.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/exynos4-is/fimc-isp.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/exynos4-is/fimc-isp.c 2024-11-24 20:19:38.156228796 -0500 @@ -106,7 +106,7 @@ }; @@ -146986,7 +152905,7 @@ diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/fimc-isp.c b/dri return 0; diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/fimc-isp-video.c b/drivers/media/platform/exynos4-is/fimc-isp-video.c --- a/drivers/media/platform/exynos4-is/fimc-isp-video.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/exynos4-is/fimc-isp-video.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/exynos4-is/fimc-isp-video.c 2024-11-24 20:19:38.156228796 -0500 @@ -312,7 +312,7 @@ is_singular_file = v4l2_fh_is_singular_file(file); @@ -147025,7 +152944,7 @@ diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/fimc-isp-video.c } diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/fimc-lite.c b/drivers/media/platform/exynos4-is/fimc-lite.c --- a/drivers/media/platform/exynos4-is/fimc-lite.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/exynos4-is/fimc-lite.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/exynos4-is/fimc-lite.c 2024-11-24 20:19:38.156228796 -0500 @@ -516,7 +516,7 @@ if (v4l2_fh_is_singular_file(file) && atomic_read(&fimc->out_path) == FIMC_IO_DMA) { @@ -147207,7 +153126,7 @@ diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/fimc-lite.c b/dr spin_lock_irqsave(&fimc->slock, flags); diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c --- a/drivers/media/platform/exynos4-is/media-dev.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/exynos4-is/media-dev.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/exynos4-is/media-dev.c 2024-11-24 20:19:38.156228796 -0500 @@ -1161,7 +1161,7 @@ static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable, struct media_graph *graph) @@ -147258,7 +153177,7 @@ diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/media-dev.c b/dr diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/mipi-csis.c b/drivers/media/platform/exynos4-is/mipi-csis.c --- a/drivers/media/platform/exynos4-is/mipi-csis.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/exynos4-is/mipi-csis.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/exynos4-is/mipi-csis.c 2024-11-24 20:19:38.156228796 -0500 @@ -537,7 +537,7 @@ } @@ -147317,7 +153236,7 @@ diff -Naur --no-dereference a/drivers/media/platform/exynos4-is/mipi-csis.c b/dr diff -Naur --no-dereference a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig --- a/drivers/media/platform/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/Kconfig 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/Kconfig 2024-11-24 20:19:38.153228791 -0500 @@ -168,6 +168,45 @@ In TI Technical Reference Manual this module is referred as Camera Interface Subsystem (CAMSS). @@ -147406,7 +153325,7 @@ diff -Naur --no-dereference a/drivers/media/platform/Kconfig b/drivers/media/pla depends on VIDEO_DEV && VIDEO_V4L2 diff -Naur --no-dereference a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile --- a/drivers/media/platform/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/Makefile 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/Makefile 2024-11-24 20:19:38.153228791 -0500 @@ -14,7 +14,7 @@ obj-$(CONFIG_VIDEO_VIU) += fsl-viu.o @@ -147426,7 +153345,7 @@ diff -Naur --no-dereference a/drivers/media/platform/Makefile b/drivers/media/pl +obj-$(CONFIG_VIDEO_WAVE_VPU) += chips-media/ diff -Naur --no-dereference a/drivers/media/platform/marvell-ccic/mcam-core.c b/drivers/media/platform/marvell-ccic/mcam-core.c --- a/drivers/media/platform/marvell-ccic/mcam-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/marvell-ccic/mcam-core.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/marvell-ccic/mcam-core.c 2024-11-24 20:19:38.156228796 -0500 @@ -1350,6 +1350,9 @@ struct mcam_format_struct *f; struct v4l2_pix_format *pix = &fmt->fmt.pix; @@ -147448,7 +153367,7 @@ diff -Naur --no-dereference a/drivers/media/platform/marvell-ccic/mcam-core.c b/ switch (f->pixelformat) { diff -Naur --no-dereference a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c --- a/drivers/media/platform/omap3isp/isp.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/omap3isp/isp.c 2024-08-28 19:44:05.620038012 -0400 ++++ b/drivers/media/platform/omap3isp/isp.c 2024-11-24 20:19:38.156228796 -0500 @@ -930,7 +930,7 @@ struct isp_pipeline *pipe; struct media_pad *pad; @@ -147460,7 +153379,7 @@ diff -Naur --no-dereference a/drivers/media/platform/omap3isp/isp.c b/drivers/me if (pipe->stream_state == ISP_PIPELINE_STREAM_STOPPED) diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispccdc.c b/drivers/media/platform/omap3isp/ispccdc.c --- a/drivers/media/platform/omap3isp/ispccdc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/omap3isp/ispccdc.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/omap3isp/ispccdc.c 2024-11-24 20:19:38.156228796 -0500 @@ -29,7 +29,8 @@ #define CCDC_MIN_HEIGHT 32 @@ -147734,7 +153653,7 @@ diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispccdc.c b/driver } diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispccp2.c b/drivers/media/platform/omap3isp/ispccp2.c --- a/drivers/media/platform/omap3isp/ispccp2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/omap3isp/ispccp2.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/omap3isp/ispccp2.c 2024-11-24 20:19:38.156228796 -0500 @@ -618,11 +618,13 @@ * return format structure or NULL on error */ @@ -147877,7 +153796,7 @@ diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispccp2.c b/driver } diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispcsi2.c b/drivers/media/platform/omap3isp/ispcsi2.c --- a/drivers/media/platform/omap3isp/ispcsi2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/omap3isp/ispcsi2.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/omap3isp/ispcsi2.c 2024-11-24 20:19:38.157228798 -0500 @@ -827,17 +827,20 @@ */ @@ -148018,7 +153937,7 @@ diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispcsi2.c b/driver } diff -Naur --no-dereference a/drivers/media/platform/omap3isp/isppreview.c b/drivers/media/platform/omap3isp/isppreview.c --- a/drivers/media/platform/omap3isp/isppreview.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/omap3isp/isppreview.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/omap3isp/isppreview.c 2024-11-24 20:19:38.157228798 -0500 @@ -1679,21 +1679,25 @@ } @@ -148244,7 +154163,7 @@ diff -Naur --no-dereference a/drivers/media/platform/omap3isp/isppreview.c b/dri } diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispresizer.c b/drivers/media/platform/omap3isp/ispresizer.c --- a/drivers/media/platform/omap3isp/ispresizer.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/omap3isp/ispresizer.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/omap3isp/ispresizer.c 2024-11-24 20:19:38.157228798 -0500 @@ -114,11 +114,12 @@ * return zero */ @@ -148493,7 +154412,7 @@ diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispresizer.c b/dri } diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispvideo.c b/drivers/media/platform/omap3isp/ispvideo.c --- a/drivers/media/platform/omap3isp/ispvideo.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/omap3isp/ispvideo.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/omap3isp/ispvideo.c 2024-11-24 20:19:38.157228798 -0500 @@ -222,8 +222,8 @@ struct isp_pipeline *pipe) { @@ -148574,7 +154493,7 @@ diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispvideo.c b/drive diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispvideo.h b/drivers/media/platform/omap3isp/ispvideo.h --- a/drivers/media/platform/omap3isp/ispvideo.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/omap3isp/ispvideo.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/omap3isp/ispvideo.h 2024-11-24 20:19:38.157228798 -0500 @@ -100,7 +100,7 @@ }; @@ -148586,7 +154505,7 @@ diff -Naur --no-dereference a/drivers/media/platform/omap3isp/ispvideo.h b/drive { diff -Naur --no-dereference a/drivers/media/platform/pxa_camera.c b/drivers/media/platform/pxa_camera.c --- a/drivers/media/platform/pxa_camera.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/pxa_camera.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/pxa_camera.c 2024-11-24 20:19:38.157228798 -0500 @@ -1796,6 +1796,9 @@ const struct pxa_camera_format_xlate *xlate; struct v4l2_pix_format *pix = &f->fmt.pix; @@ -148608,7 +154527,7 @@ diff -Naur --no-dereference a/drivers/media/platform/pxa_camera.c b/drivers/medi diff -Naur --no-dereference a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c --- a/drivers/media/platform/qcom/camss/camss-csid.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/qcom/camss/camss-csid.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/qcom/camss/camss-csid.c 2024-11-24 20:19:38.157228798 -0500 @@ -762,12 +762,13 @@ */ static struct v4l2_mbus_framefmt * @@ -148747,7 +154666,7 @@ diff -Naur --no-dereference a/drivers/media/platform/qcom/camss/camss-csid.c b/d static const char * const csid_test_pattern_menu[] = { diff -Naur --no-dereference a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c --- a/drivers/media/platform/qcom/camss/camss-csiphy.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/qcom/camss/camss-csiphy.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/qcom/camss/camss-csiphy.c 2024-11-24 20:19:38.157228798 -0500 @@ -318,12 +318,13 @@ */ static struct v4l2_mbus_framefmt * @@ -148891,7 +154810,7 @@ diff -Naur --no-dereference a/drivers/media/platform/qcom/camss/camss-csiphy.c b /* diff -Naur --no-dereference a/drivers/media/platform/qcom/camss/camss-ispif.c b/drivers/media/platform/qcom/camss/camss-ispif.c --- a/drivers/media/platform/qcom/camss/camss-ispif.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/qcom/camss/camss-ispif.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/qcom/camss/camss-ispif.c 2024-11-24 20:19:38.158228800 -0500 @@ -844,12 +844,13 @@ */ static struct v4l2_mbus_framefmt * @@ -149031,7 +154950,7 @@ diff -Naur --no-dereference a/drivers/media/platform/qcom/camss/camss-ispif.c b/ /* diff -Naur --no-dereference a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c --- a/drivers/media/platform/qcom/camss/camss-vfe.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/qcom/camss/camss-vfe.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/qcom/camss/camss-vfe.c 2024-11-24 20:19:38.158228800 -0500 @@ -1466,12 +1466,13 @@ */ static struct v4l2_mbus_framefmt * @@ -149362,7 +155281,7 @@ diff -Naur --no-dereference a/drivers/media/platform/qcom/camss/camss-vfe.c b/dr /* diff -Naur --no-dereference a/drivers/media/platform/qcom/camss/camss-video.c b/drivers/media/platform/qcom/camss/camss-video.c --- a/drivers/media/platform/qcom/camss/camss-video.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/qcom/camss/camss-video.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/qcom/camss/camss-video.c 2024-11-24 20:19:38.158228800 -0500 @@ -442,7 +442,7 @@ struct v4l2_subdev *subdev; int ret; @@ -149392,7 +155311,7 @@ diff -Naur --no-dereference a/drivers/media/platform/qcom/camss/camss-video.c b/ } diff -Naur --no-dereference a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c --- a/drivers/media/platform/rcar-vin/rcar-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/rcar-vin/rcar-core.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/rcar-vin/rcar-core.c 2024-11-24 20:19:38.158228800 -0500 @@ -132,13 +132,17 @@ return 0; @@ -149419,7 +155338,7 @@ diff -Naur --no-dereference a/drivers/media/platform/rcar-vin/rcar-core.c b/driv diff -Naur --no-dereference a/drivers/media/platform/rcar-vin/rcar-csi2.c b/drivers/media/platform/rcar-vin/rcar-csi2.c --- a/drivers/media/platform/rcar-vin/rcar-csi2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/rcar-vin/rcar-csi2.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/rcar-vin/rcar-csi2.c 2024-11-24 20:19:38.158228800 -0500 @@ -717,7 +717,7 @@ } @@ -149458,7 +155377,7 @@ diff -Naur --no-dereference a/drivers/media/platform/rcar-vin/rcar-csi2.c b/driv } diff -Naur --no-dereference a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c --- a/drivers/media/platform/rcar-vin/rcar-dma.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/rcar-vin/rcar-dma.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/rcar-vin/rcar-dma.c 2024-11-24 20:19:38.158228800 -0500 @@ -1235,7 +1235,7 @@ sd = media_entity_to_v4l2_subdev(pad->entity); @@ -149490,7 +155409,7 @@ diff -Naur --no-dereference a/drivers/media/platform/rcar-vin/rcar-dma.c b/drive } diff -Naur --no-dereference a/drivers/media/platform/rcar-vin/rcar-v4l2.c b/drivers/media/platform/rcar-vin/rcar-v4l2.c --- a/drivers/media/platform/rcar-vin/rcar-v4l2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/rcar-vin/rcar-v4l2.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/rcar-vin/rcar-v4l2.c 2024-11-24 20:19:38.158228800 -0500 @@ -250,7 +250,8 @@ struct v4l2_rect *src_rect) { @@ -149534,7 +155453,7 @@ diff -Naur --no-dereference a/drivers/media/platform/rcar-vin/rcar-v4l2.c b/driv } diff -Naur --no-dereference a/drivers/media/platform/renesas-ceu.c b/drivers/media/platform/renesas-ceu.c --- a/drivers/media/platform/renesas-ceu.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/renesas-ceu.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/renesas-ceu.c 2024-11-24 20:19:38.158228800 -0500 @@ -794,6 +794,9 @@ struct v4l2_pix_format_mplane *pix = &v4l2_fmt->fmt.pix_mp; struct v4l2_subdev *v4l2_sd = ceu_sd->v4l2_sd; @@ -149563,7 +155482,7 @@ diff -Naur --no-dereference a/drivers/media/platform/renesas-ceu.c b/drivers/med if (ret) diff -Naur --no-dereference a/drivers/media/platform/s3c-camif/camif-capture.c b/drivers/media/platform/s3c-camif/camif-capture.c --- a/drivers/media/platform/s3c-camif/camif-capture.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/s3c-camif/camif-capture.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/s3c-camif/camif-capture.c 2024-11-24 20:19:38.158228800 -0500 @@ -848,13 +848,13 @@ if (s3c_vp_active(vp)) return 0; @@ -149671,7 +155590,7 @@ diff -Naur --no-dereference a/drivers/media/platform/s3c-camif/camif-capture.c b unsigned int i; diff -Naur --no-dereference a/drivers/media/platform/stm32/stm32-dcmi.c b/drivers/media/platform/stm32/stm32-dcmi.c --- a/drivers/media/platform/stm32/stm32-dcmi.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/stm32/stm32-dcmi.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/stm32/stm32-dcmi.c 2024-11-24 20:19:38.159228802 -0500 @@ -607,7 +607,7 @@ } @@ -149757,7 +155676,7 @@ diff -Naur --no-dereference a/drivers/media/platform/stm32/stm32-dcmi.c b/driver diff -Naur --no-dereference a/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c b/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c --- a/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c 2024-11-24 20:19:38.159228802 -0500 @@ -266,7 +266,7 @@ goto err_clear_dma_queue; } @@ -149787,7 +155706,7 @@ diff -Naur --no-dereference a/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c csi->scratch.paddr); diff -Naur --no-dereference a/drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c b/drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c --- a/drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c 2024-11-24 20:19:38.159228802 -0500 @@ -273,25 +273,26 @@ }; @@ -149848,7 +155767,7 @@ diff -Naur --no-dereference a/drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2. if (mbus->index >= ARRAY_SIZE(sun4i_csi_formats)) diff -Naur --no-dereference a/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c 2024-11-24 20:19:38.159228802 -0500 @@ -141,7 +141,7 @@ video->sequence = 0; @@ -149878,7 +155797,7 @@ diff -Naur --no-dereference a/drivers/media/platform/sunxi/sun6i-csi/sun6i_video spin_lock_irqsave(&video->dma_queue_lock, flags); diff -Naur --no-dereference a/drivers/media/platform/ti/cal/cal.c b/drivers/media/platform/ti/cal/cal.c --- a/drivers/media/platform/ti/cal/cal.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/cal/cal.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/cal/cal.c 2024-11-24 20:19:38.159228802 -0500 @@ -0,0 +1,1390 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -151272,7 +157191,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/cal/cal.c b/drivers/medi +module_platform_driver(cal_pdrv); diff -Naur --no-dereference a/drivers/media/platform/ti/cal/cal-camerarx.c b/drivers/media/platform/ti/cal/cal-camerarx.c --- a/drivers/media/platform/ti/cal/cal-camerarx.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/cal/cal-camerarx.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/cal/cal-camerarx.c 2024-11-24 20:19:38.159228802 -0500 @@ -0,0 +1,1020 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -152296,7 +158215,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/cal/cal-camerarx.c b/dri +} diff -Naur --no-dereference a/drivers/media/platform/ti/cal/cal.h b/drivers/media/platform/ti/cal/cal.h --- a/drivers/media/platform/ti/cal/cal.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/cal/cal.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/cal/cal.h 2024-11-24 20:19:38.160228804 -0500 @@ -0,0 +1,352 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* @@ -152652,7 +158571,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/cal/cal.h b/drivers/medi +#endif /* __TI_CAL_H__ */ diff -Naur --no-dereference a/drivers/media/platform/ti/cal/cal_regs.h b/drivers/media/platform/ti/cal/cal_regs.h --- a/drivers/media/platform/ti/cal/cal_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/cal/cal_regs.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/cal/cal_regs.h 2024-11-24 20:19:38.160228804 -0500 @@ -0,0 +1,463 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* @@ -153119,7 +159038,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/cal/cal_regs.h b/drivers +#endif diff -Naur --no-dereference a/drivers/media/platform/ti/cal/cal-video.c b/drivers/media/platform/ti/cal/cal-video.c --- a/drivers/media/platform/ti/cal/cal-video.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/cal/cal-video.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/cal/cal-video.c 2024-11-24 20:19:38.159228802 -0500 @@ -0,0 +1,1156 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -154279,14 +160198,14 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/cal/cal-video.c b/driver +} diff -Naur --no-dereference a/drivers/media/platform/ti/cal/Makefile b/drivers/media/platform/ti/cal/Makefile --- a/drivers/media/platform/ti/cal/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/cal/Makefile 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/cal/Makefile 2024-11-24 20:19:38.159228802 -0500 @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: GPL-2.0 +obj-$(CONFIG_VIDEO_TI_CAL) += ti-cal.o +ti-cal-y := cal.o cal-camerarx.o cal-video.o diff -Naur --no-dereference a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c --- a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c 2024-11-24 20:19:38.160228804 -0500 @@ -0,0 +1,1626 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -155916,13 +161835,13 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2r +MODULE_VERSION("1.0"); diff -Naur --no-dereference a/drivers/media/platform/ti/j721e-csi2rx/Makefile b/drivers/media/platform/ti/j721e-csi2rx/Makefile --- a/drivers/media/platform/ti/j721e-csi2rx/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/j721e-csi2rx/Makefile 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/j721e-csi2rx/Makefile 2024-11-24 20:19:38.160228804 -0500 @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0 +obj-$(CONFIG_VIDEO_TI_J721E_CSI2RX) += j721e-csi2rx.o diff -Naur --no-dereference a/drivers/media/platform/ti/Makefile b/drivers/media/platform/ti/Makefile --- a/drivers/media/platform/ti/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/Makefile 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/Makefile 2024-11-24 20:19:38.159228802 -0500 @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0 +obj-y += cal/ @@ -155930,7 +161849,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/Makefile b/drivers/media +obj-y += j721e-csi2rx/ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/csc.c b/drivers/media/platform/ti/vpe/csc.c --- a/drivers/media/platform/ti/vpe/csc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/csc.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/csc.c 2024-11-24 20:19:38.160228804 -0500 @@ -0,0 +1,281 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -156215,7 +162134,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/csc.c b/drivers/medi +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/csc.h b/drivers/media/platform/ti/vpe/csc.h --- a/drivers/media/platform/ti/vpe/csc.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/csc.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/csc.h 2024-11-24 20:19:38.160228804 -0500 @@ -0,0 +1,65 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* @@ -156284,7 +162203,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/csc.h b/drivers/medi +#endif diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/Makefile b/drivers/media/platform/ti/vpe/Makefile --- a/drivers/media/platform/ti/vpe/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/Makefile 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/Makefile 2024-11-24 20:19:38.160228804 -0500 @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: GPL-2.0 +obj-$(CONFIG_VIDEO_TI_VPE) += ti-vpe.o @@ -156302,7 +162221,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/Makefile b/drivers/m +ccflags-$(CONFIG_VIDEO_TI_VPE_DEBUG) += -DDEBUG diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/sc.c b/drivers/media/platform/ti/vpe/sc.c --- a/drivers/media/platform/ti/vpe/sc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/sc.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/sc.c 2024-11-24 20:19:38.160228804 -0500 @@ -0,0 +1,308 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -156614,7 +162533,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/sc.c b/drivers/media +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/sc_coeff.h b/drivers/media/platform/ti/vpe/sc_coeff.h --- a/drivers/media/platform/ti/vpe/sc_coeff.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/sc_coeff.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/sc_coeff.h 2024-11-24 20:19:38.160228804 -0500 @@ -0,0 +1,1339 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* @@ -157957,7 +163876,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/sc_coeff.h b/drivers +#endif diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/sc.h b/drivers/media/platform/ti/vpe/sc.h --- a/drivers/media/platform/ti/vpe/sc.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/sc.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/sc.h 2024-11-24 20:19:38.160228804 -0500 @@ -0,0 +1,208 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* @@ -158169,7 +164088,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/sc.h b/drivers/media +#endif diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vip.c b/drivers/media/platform/ti/vpe/vip.c --- a/drivers/media/platform/ti/vpe/vip.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/vip.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/vip.c 2024-11-24 20:19:38.161228805 -0500 @@ -0,0 +1,3995 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -162168,7 +168087,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vip.c b/drivers/medi +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vip.h b/drivers/media/platform/ti/vpe/vip.h --- a/drivers/media/platform/ti/vpe/vip.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/vip.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/vip.h 2024-11-24 20:19:38.161228805 -0500 @@ -0,0 +1,719 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -162891,7 +168810,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vip.h b/drivers/medi +#endif diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vpdma.c b/drivers/media/platform/ti/vpe/vpdma.c --- a/drivers/media/platform/ti/vpe/vpdma.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/vpdma.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/vpdma.c 2024-11-24 20:19:38.161228805 -0500 @@ -0,0 +1,1177 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -164072,7 +169991,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vpdma.c b/drivers/me +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vpdma.h b/drivers/media/platform/ti/vpe/vpdma.h --- a/drivers/media/platform/ti/vpe/vpdma.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/vpdma.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/vpdma.h 2024-11-24 20:19:38.161228805 -0500 @@ -0,0 +1,284 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* @@ -164360,7 +170279,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vpdma.h b/drivers/me +#endif diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vpdma_priv.h b/drivers/media/platform/ti/vpe/vpdma_priv.h --- a/drivers/media/platform/ti/vpe/vpdma_priv.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/vpdma_priv.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/vpdma_priv.h 2024-11-24 20:19:38.161228805 -0500 @@ -0,0 +1,639 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* @@ -165003,7 +170922,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vpdma_priv.h b/drive +#endif diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vpe.c b/drivers/media/platform/ti/vpe/vpe.c --- a/drivers/media/platform/ti/vpe/vpe.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/vpe.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/vpe.c 2024-11-24 20:19:38.161228805 -0500 @@ -0,0 +1,2667 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -167674,7 +173593,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vpe.c b/drivers/medi +MODULE_LICENSE("GPL"); diff -Naur --no-dereference a/drivers/media/platform/ti/vpe/vpe_regs.h b/drivers/media/platform/ti/vpe/vpe_regs.h --- a/drivers/media/platform/ti/vpe/vpe_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/ti/vpe/vpe_regs.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/ti/vpe/vpe_regs.h 2024-11-24 20:19:38.161228805 -0500 @@ -0,0 +1,306 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* @@ -178554,7 +184473,7 @@ diff -Naur --no-dereference a/drivers/media/platform/ti-vpe/vpe_regs.h b/drivers -#endif diff -Naur --no-dereference a/drivers/media/platform/via-camera.c b/drivers/media/platform/via-camera.c --- a/drivers/media/platform/via-camera.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/via-camera.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/via-camera.c 2024-11-24 20:19:38.161228805 -0500 @@ -844,6 +844,9 @@ { int ret; @@ -178576,7 +184495,7 @@ diff -Naur --no-dereference a/drivers/media/platform/via-camera.c b/drivers/medi return ret; diff -Naur --no-dereference a/drivers/media/platform/video-mux.c b/drivers/media/platform/video-mux.c --- a/drivers/media/platform/video-mux.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/video-mux.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/video-mux.c 2024-11-24 20:19:38.161228805 -0500 @@ -140,14 +140,14 @@ static struct v4l2_mbus_framefmt * @@ -178658,7 +184577,7 @@ diff -Naur --no-dereference a/drivers/media/platform/video-mux.c b/drivers/media diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_brx.c b/drivers/media/platform/vsp1/vsp1_brx.c --- a/drivers/media/platform/vsp1/vsp1_brx.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_brx.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_brx.c 2024-11-24 20:19:38.161228805 -0500 @@ -65,7 +65,7 @@ */ @@ -178781,7 +184700,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_brx.c b/drivers/m goto done; diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_clu.c b/drivers/media/platform/vsp1/vsp1_clu.c --- a/drivers/media/platform/vsp1/vsp1_clu.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_clu.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_clu.c 2024-11-24 20:19:38.161228805 -0500 @@ -123,27 +123,28 @@ }; @@ -178819,7 +184738,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_clu.c b/drivers/m CLU_MAX_SIZE, CLU_MAX_SIZE); diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_entity.c b/drivers/media/platform/vsp1/vsp1_entity.c --- a/drivers/media/platform/vsp1/vsp1_entity.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_entity.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_entity.c 2024-11-24 20:19:38.162228807 -0500 @@ -114,9 +114,9 @@ * and simply returned when requested. The ACTIVE configuration comes from the * entity structure. @@ -179021,7 +184940,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_entity.c b/driver } diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_entity.h b/drivers/media/platform/vsp1/vsp1_entity.h --- a/drivers/media/platform/vsp1/vsp1_entity.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_entity.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_entity.h 2024-11-24 20:19:38.162228807 -0500 @@ -115,7 +115,7 @@ unsigned int sink_pad; @@ -179084,7 +185003,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_entity.h b/driver unsigned int max_w, unsigned int max_h); diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_histo.c b/drivers/media/platform/vsp1/vsp1_histo.c --- a/drivers/media/platform/vsp1/vsp1_histo.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_histo.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_histo.c 2024-11-24 20:19:38.162228807 -0500 @@ -170,7 +170,7 @@ */ @@ -179260,7 +185179,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_histo.c b/drivers HISTO_MAX_SIZE, HISTO_MAX_SIZE); diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_hsit.c b/drivers/media/platform/vsp1/vsp1_hsit.c --- a/drivers/media/platform/vsp1/vsp1_hsit.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_hsit.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_hsit.c 2024-11-24 20:19:38.162228807 -0500 @@ -34,7 +34,7 @@ */ @@ -179306,7 +185225,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_hsit.c b/drivers/ goto done; diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_lif.c b/drivers/media/platform/vsp1/vsp1_lif.c --- a/drivers/media/platform/vsp1/vsp1_lif.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_lif.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_lif.c 2024-11-24 20:19:38.162228807 -0500 @@ -40,27 +40,28 @@ }; @@ -179344,7 +185263,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_lif.c b/drivers/m LIF_MAX_SIZE, LIF_MAX_SIZE); diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_lut.c b/drivers/media/platform/vsp1/vsp1_lut.c --- a/drivers/media/platform/vsp1/vsp1_lut.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_lut.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_lut.c 2024-11-24 20:19:38.162228807 -0500 @@ -99,27 +99,28 @@ }; @@ -179382,7 +185301,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_lut.c b/drivers/m LUT_MAX_SIZE, LUT_MAX_SIZE); diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_rwpf.c b/drivers/media/platform/vsp1/vsp1_rwpf.c --- a/drivers/media/platform/vsp1/vsp1_rwpf.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_rwpf.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_rwpf.c 2024-11-24 20:19:38.162228807 -0500 @@ -17,9 +17,9 @@ #define RWPF_MIN_HEIGHT 1 @@ -179490,7 +185409,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_rwpf.c b/drivers/ goto done; diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_rwpf.h b/drivers/media/platform/vsp1/vsp1_rwpf.h --- a/drivers/media/platform/vsp1/vsp1_rwpf.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_rwpf.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_rwpf.h 2024-11-24 20:19:38.162228807 -0500 @@ -84,6 +84,6 @@ extern const struct v4l2_subdev_pad_ops vsp1_rwpf_pad_ops; @@ -179501,7 +185420,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_rwpf.h b/drivers/ #endif /* __VSP1_RWPF_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_sru.c b/drivers/media/platform/vsp1/vsp1_sru.c --- a/drivers/media/platform/vsp1/vsp1_sru.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_sru.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_sru.c 2024-11-24 20:19:38.162228807 -0500 @@ -106,7 +106,7 @@ */ @@ -179579,7 +185498,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_sru.c b/drivers/m goto done; diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_uds.c b/drivers/media/platform/vsp1/vsp1_uds.c --- a/drivers/media/platform/vsp1/vsp1_uds.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_uds.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_uds.c 2024-11-24 20:19:38.162228807 -0500 @@ -111,7 +111,7 @@ */ @@ -179657,7 +185576,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_uds.c b/drivers/m goto done; diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_uif.c b/drivers/media/platform/vsp1/vsp1_uif.c --- a/drivers/media/platform/vsp1/vsp1_uif.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_uif.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_uif.c 2024-11-24 20:19:38.162228807 -0500 @@ -54,38 +54,39 @@ }; @@ -179742,7 +185661,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_uif.c b/drivers/m goto done; diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_video.c b/drivers/media/platform/vsp1/vsp1_video.c --- a/drivers/media/platform/vsp1/vsp1_video.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/vsp1/vsp1_video.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vsp1/vsp1_video.c 2024-11-24 20:19:38.162228807 -0500 @@ -559,8 +559,8 @@ struct vsp1_video *video) { @@ -179805,7 +185724,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vsp1/vsp1_video.c b/drivers return ret; diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/addr_alloc.c b/drivers/media/platform/vxe-vxd/common/addr_alloc.c --- a/drivers/media/platform/vxe-vxd/common/addr_alloc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/addr_alloc.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/addr_alloc.c 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,499 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -180308,7 +186227,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/addr_alloc.c +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/addr_alloc.h b/drivers/media/platform/vxe-vxd/common/addr_alloc.h --- a/drivers/media/platform/vxe-vxd/common/addr_alloc.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/addr_alloc.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/addr_alloc.h 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,238 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -180550,7 +186469,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/addr_alloc.h +#endif /* __ADDR_ALLOC_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/dq.c b/drivers/media/platform/vxe-vxd/common/dq.c --- a/drivers/media/platform/vxe-vxd/common/dq.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/dq.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/dq.c 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,248 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -180802,7 +186721,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/dq.c b/drive +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/dq.h b/drivers/media/platform/vxe-vxd/common/dq.h --- a/drivers/media/platform/vxe-vxd/common/dq.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/dq.h 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/dq.h 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -180842,7 +186761,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/dq.h b/drive +#endif /* #define DQ_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/hash.c b/drivers/media/platform/vxe-vxd/common/hash.c --- a/drivers/media/platform/vxe-vxd/common/hash.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/hash.c 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/hash.c 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,481 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -181327,7 +187246,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/hash.c b/dri +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/hash.h b/drivers/media/platform/vxe-vxd/common/hash.h --- a/drivers/media/platform/vxe-vxd/common/hash.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/hash.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/hash.h 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,86 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -181417,7 +187336,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/hash.h b/dri +#endif /* _HASH_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/idgen_api.c b/drivers/media/platform/vxe-vxd/common/idgen_api.c --- a/drivers/media/platform/vxe-vxd/common/idgen_api.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/idgen_api.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/idgen_api.c 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,449 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -181870,7 +187789,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/idgen_api.c +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/idgen_api.h b/drivers/media/platform/vxe-vxd/common/idgen_api.h --- a/drivers/media/platform/vxe-vxd/common/idgen_api.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/idgen_api.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/idgen_api.h 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -181933,7 +187852,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/idgen_api.h +#endif /* __IDGENAPI_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/img_errors.h b/drivers/media/platform/vxe-vxd/common/img_errors.h --- a/drivers/media/platform/vxe-vxd/common/img_errors.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/img_errors.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/img_errors.h 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,112 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -182049,7 +187968,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/img_errors.h +#endif /* __IMG_ERRORS__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/img_mem.h b/drivers/media/platform/vxe-vxd/common/img_mem.h --- a/drivers/media/platform/vxe-vxd/common/img_mem.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/img_mem.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/img_mem.h 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -182096,7 +188015,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/img_mem.h b/ +#endif /* __IMG_MEM__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/img_mem_man.c b/drivers/media/platform/vxe-vxd/common/img_mem_man.c --- a/drivers/media/platform/vxe-vxd/common/img_mem_man.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/img_mem_man.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/img_mem_man.c 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,1125 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -183225,7 +189144,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/img_mem_man. +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/img_mem_man.h b/drivers/media/platform/vxe-vxd/common/img_mem_man.h --- a/drivers/media/platform/vxe-vxd/common/img_mem_man.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/img_mem_man.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/img_mem_man.h 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,231 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -183460,7 +189379,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/img_mem_man. +#endif /* _IMG_DEC_MEM_MGR */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/img_mem_unified.c b/drivers/media/platform/vxe-vxd/common/img_mem_unified.c --- a/drivers/media/platform/vxe-vxd/common/img_mem_unified.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/img_mem_unified.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/img_mem_unified.c 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,276 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -183740,7 +189659,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/img_mem_unif +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/imgmmu.c b/drivers/media/platform/vxe-vxd/common/imgmmu.c --- a/drivers/media/platform/vxe-vxd/common/imgmmu.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/imgmmu.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/imgmmu.c 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,782 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -184526,7 +190445,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/imgmmu.c b/d +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/imgmmu.h b/drivers/media/platform/vxe-vxd/common/imgmmu.h --- a/drivers/media/platform/vxe-vxd/common/imgmmu.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/imgmmu.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/imgmmu.h 2024-11-24 20:19:38.163228809 -0500 @@ -0,0 +1,180 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -184710,7 +190629,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/imgmmu.h b/d +#endif /* IMG_DEC_MMU_MMU_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/lst.c b/drivers/media/platform/vxe-vxd/common/lst.c --- a/drivers/media/platform/vxe-vxd/common/lst.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/lst.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/lst.c 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -184833,7 +190752,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/lst.c b/driv +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/lst.h b/drivers/media/platform/vxe-vxd/common/lst.h --- a/drivers/media/platform/vxe-vxd/common/lst.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/lst.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/lst.h 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -184874,7 +190793,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/lst.h b/driv +#endif /* __LIST_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/pool_api.c b/drivers/media/platform/vxe-vxd/common/pool_api.c --- a/drivers/media/platform/vxe-vxd/common/pool_api.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/pool_api.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/pool_api.c 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,710 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -185588,7 +191507,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/pool_api.c b +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/pool_api.h b/drivers/media/platform/vxe-vxd/common/pool_api.h --- a/drivers/media/platform/vxe-vxd/common/pool_api.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/pool_api.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/pool_api.h 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,113 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -185705,7 +191624,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/pool_api.h b +#endif /* __POOLAPI_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/pool.c b/drivers/media/platform/vxe-vxd/common/pool.c --- a/drivers/media/platform/vxe-vxd/common/pool.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/pool.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/pool.c 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,228 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -185937,7 +191856,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/pool.c b/dri +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/pool.h b/drivers/media/platform/vxe-vxd/common/pool.h --- a/drivers/media/platform/vxe-vxd/common/pool.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/pool.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/pool.h 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,66 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -186007,7 +191926,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/pool.h b/dri +#endif /* _pool_h_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/ra.c b/drivers/media/platform/vxe-vxd/common/ra.c --- a/drivers/media/platform/vxe-vxd/common/ra.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/ra.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/ra.c 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,972 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -186983,7 +192902,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/ra.c b/drive +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/ra.h b/drivers/media/platform/vxe-vxd/common/ra.h --- a/drivers/media/platform/vxe-vxd/common/ra.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/ra.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/ra.h 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,200 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -187187,7 +193106,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/ra.h b/drive +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/resource.c b/drivers/media/platform/vxe-vxd/common/resource.c --- a/drivers/media/platform/vxe-vxd/common/resource.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/resource.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/resource.c 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,578 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -187769,7 +193688,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/resource.c b +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/resource.h b/drivers/media/platform/vxe-vxd/common/resource.h --- a/drivers/media/platform/vxe-vxd/common/resource.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/resource.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/resource.h 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,66 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -187839,7 +193758,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/resource.h b +#endif /* _VXD_RESOURCE_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/rman_api.c b/drivers/media/platform/vxe-vxd/common/rman_api.c --- a/drivers/media/platform/vxe-vxd/common/rman_api.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/rman_api.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/rman_api.c 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,621 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -188464,7 +194383,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/rman_api.c b +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/rman_api.h b/drivers/media/platform/vxe-vxd/common/rman_api.h --- a/drivers/media/platform/vxe-vxd/common/rman_api.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/rman_api.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/rman_api.h 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,66 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -188534,7 +194453,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/rman_api.h b +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/talmmu_api.c b/drivers/media/platform/vxe-vxd/common/talmmu_api.c --- a/drivers/media/platform/vxe-vxd/common/talmmu_api.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/talmmu_api.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/talmmu_api.c 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,753 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -189291,7 +195210,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/talmmu_api.c +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/talmmu_api.h b/drivers/media/platform/vxe-vxd/common/talmmu_api.h --- a/drivers/media/platform/vxe-vxd/common/talmmu_api.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/talmmu_api.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/talmmu_api.h 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,246 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -189541,7 +195460,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/talmmu_api.h +#endif /* __TALMMU_API_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/vid_buf.h b/drivers/media/platform/vxe-vxd/common/vid_buf.h --- a/drivers/media/platform/vxe-vxd/common/vid_buf.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/vid_buf.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/vid_buf.h 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -189587,7 +195506,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/vid_buf.h b/ +#endif /* _VID_BUF_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/work_queue.c b/drivers/media/platform/vxe-vxd/common/work_queue.c --- a/drivers/media/platform/vxe-vxd/common/work_queue.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/work_queue.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/work_queue.c 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,188 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -189779,7 +195698,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/work_queue.c +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/work_queue.h b/drivers/media/platform/vxe-vxd/common/work_queue.h --- a/drivers/media/platform/vxe-vxd/common/work_queue.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/common/work_queue.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/common/work_queue.h 2024-11-24 20:19:38.164228811 -0500 @@ -0,0 +1,66 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -189849,7 +195768,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/common/work_queue.h +#endif /* WORKQUEUE_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/bspp.c b/drivers/media/platform/vxe-vxd/decoder/bspp.c --- a/drivers/media/platform/vxe-vxd/decoder/bspp.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/bspp.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/bspp.c 2024-11-24 20:19:38.165228813 -0500 @@ -0,0 +1,2483 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -192336,7 +198255,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/bspp.c b/dr +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/bspp.h b/drivers/media/platform/vxe-vxd/decoder/bspp.h --- a/drivers/media/platform/vxe-vxd/decoder/bspp.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/bspp.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/bspp.h 2024-11-24 20:19:38.165228813 -0500 @@ -0,0 +1,363 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -192703,7 +198622,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/bspp.h b/dr +#endif /* __BSPP_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/bspp_int.h b/drivers/media/platform/vxe-vxd/decoder/bspp_int.h --- a/drivers/media/platform/vxe-vxd/decoder/bspp_int.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/bspp_int.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/bspp_int.h 2024-11-24 20:19:38.165228813 -0500 @@ -0,0 +1,514 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -193221,7 +199140,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/bspp_int.h +#endif /* __BSPP_INT_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/core.c b/drivers/media/platform/vxe-vxd/decoder/core.c --- a/drivers/media/platform/vxe-vxd/decoder/core.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/core.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/core.c 2024-11-24 20:19:38.165228813 -0500 @@ -0,0 +1,3719 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -196944,7 +202863,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/core.c b/dr +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/core.h b/drivers/media/platform/vxe-vxd/decoder/core.h --- a/drivers/media/platform/vxe-vxd/decoder/core.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/core.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/core.h 2024-11-24 20:19:38.165228813 -0500 @@ -0,0 +1,72 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -197020,7 +202939,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/core.h b/dr +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/decoder.c b/drivers/media/platform/vxe-vxd/decoder/decoder.c --- a/drivers/media/platform/vxe-vxd/decoder/decoder.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/decoder.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/decoder.c 2024-11-24 20:19:38.165228813 -0500 @@ -0,0 +1,4621 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -201645,7 +207564,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/decoder.c b +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/decoder.h b/drivers/media/platform/vxe-vxd/decoder/decoder.h --- a/drivers/media/platform/vxe-vxd/decoder/decoder.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/decoder.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/decoder.h 2024-11-24 20:19:38.166228814 -0500 @@ -0,0 +1,375 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -202024,7 +207943,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/decoder.h b +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/dec_resources.c b/drivers/media/platform/vxe-vxd/decoder/dec_resources.c --- a/drivers/media/platform/vxe-vxd/decoder/dec_resources.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/dec_resources.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/dec_resources.c 2024-11-24 20:19:38.165228813 -0500 @@ -0,0 +1,554 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -202582,7 +208501,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/dec_resourc +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/dec_resources.h b/drivers/media/platform/vxe-vxd/decoder/dec_resources.h --- a/drivers/media/platform/vxe-vxd/decoder/dec_resources.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/dec_resources.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/dec_resources.h 2024-11-24 20:19:38.165228813 -0500 @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -202632,7 +208551,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/dec_resourc +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/fw_interface.h b/drivers/media/platform/vxe-vxd/decoder/fw_interface.h --- a/drivers/media/platform/vxe-vxd/decoder/fw_interface.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/fw_interface.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/fw_interface.h 2024-11-24 20:19:38.166228814 -0500 @@ -0,0 +1,818 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -203454,7 +209373,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/fw_interfac +#endif /* FW_INTERFACE_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264fw_data.h b/drivers/media/platform/vxe-vxd/decoder/h264fw_data.h --- a/drivers/media/platform/vxe-vxd/decoder/h264fw_data.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/h264fw_data.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/h264fw_data.h 2024-11-24 20:19:38.166228814 -0500 @@ -0,0 +1,652 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -204110,7 +210029,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264fw_data +#endif /* _H264FW_DATA_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264fw_data_shared.h b/drivers/media/platform/vxe-vxd/decoder/h264fw_data_shared.h --- a/drivers/media/platform/vxe-vxd/decoder/h264fw_data_shared.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/h264fw_data_shared.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/h264fw_data_shared.h 2024-11-24 20:19:38.166228814 -0500 @@ -0,0 +1,759 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -204873,7 +210792,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264fw_data +#endif /* _H264FW_DATA_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264_idx.h b/drivers/media/platform/vxe-vxd/decoder/h264_idx.h --- a/drivers/media/platform/vxe-vxd/decoder/h264_idx.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/h264_idx.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/h264_idx.h 2024-11-24 20:19:38.166228814 -0500 @@ -0,0 +1,60 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -204937,7 +210856,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264_idx.h +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264_secure_parser.c b/drivers/media/platform/vxe-vxd/decoder/h264_secure_parser.c --- a/drivers/media/platform/vxe-vxd/decoder/h264_secure_parser.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/h264_secure_parser.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/h264_secure_parser.c 2024-11-24 20:19:38.166228814 -0500 @@ -0,0 +1,3051 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -207992,7 +213911,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264_secure +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264_secure_parser.h b/drivers/media/platform/vxe-vxd/decoder/h264_secure_parser.h --- a/drivers/media/platform/vxe-vxd/decoder/h264_secure_parser.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/h264_secure_parser.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/h264_secure_parser.h 2024-11-24 20:19:38.166228814 -0500 @@ -0,0 +1,278 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -208274,7 +214193,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264_secure +#endif /*__H264SECUREPARSER_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264_vlc.h b/drivers/media/platform/vxe-vxd/decoder/h264_vlc.h --- a/drivers/media/platform/vxe-vxd/decoder/h264_vlc.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/h264_vlc.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/h264_vlc.h 2024-11-24 20:19:38.166228814 -0500 @@ -0,0 +1,604 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -208882,7 +214801,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/h264_vlc.h +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hevcfw_data.h b/drivers/media/platform/vxe-vxd/decoder/hevcfw_data.h --- a/drivers/media/platform/vxe-vxd/decoder/hevcfw_data.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/hevcfw_data.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/hevcfw_data.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,472 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -209358,7 +215277,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hevcfw_data +#endif /* _HEVCFW_DATA_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hevcfw_data_shared.h b/drivers/media/platform/vxe-vxd/decoder/hevcfw_data_shared.h --- a/drivers/media/platform/vxe-vxd/decoder/hevcfw_data_shared.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/hevcfw_data_shared.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/hevcfw_data_shared.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,767 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -210129,7 +216048,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hevcfw_data +#endif /* _HEVCFW_DATA_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hevc_secure_parser.c b/drivers/media/platform/vxe-vxd/decoder/hevc_secure_parser.c --- a/drivers/media/platform/vxe-vxd/decoder/hevc_secure_parser.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/hevc_secure_parser.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/hevc_secure_parser.c 2024-11-24 20:19:38.166228814 -0500 @@ -0,0 +1,2895 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -213028,7 +218947,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hevc_secure +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hevc_secure_parser.h b/drivers/media/platform/vxe-vxd/decoder/hevc_secure_parser.h --- a/drivers/media/platform/vxe-vxd/decoder/hevc_secure_parser.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/hevc_secure_parser.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/hevc_secure_parser.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,455 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -213487,7 +219406,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hevc_secure +#endif /*__H264SECUREPARSER_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hw_control.c b/drivers/media/platform/vxe-vxd/decoder/hw_control.c --- a/drivers/media/platform/vxe-vxd/decoder/hw_control.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/hw_control.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/hw_control.c 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,1232 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -214723,7 +220642,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hw_control. +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hw_control.h b/drivers/media/platform/vxe-vxd/decoder/hw_control.h --- a/drivers/media/platform/vxe-vxd/decoder/hw_control.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/hw_control.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/hw_control.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,144 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -214871,7 +220790,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/hw_control. +#endif /* _HW_CONTROL_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_dec_common.h b/drivers/media/platform/vxe-vxd/decoder/img_dec_common.h --- a/drivers/media/platform/vxe-vxd/decoder/img_dec_common.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_dec_common.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_dec_common.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,278 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -215153,7 +221072,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_dec_com +#endif /* _IMG_DEC_COMMON_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_cmds.h b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_cmds.h --- a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_cmds.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_cmds.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_cmds.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,279 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -215436,7 +221355,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_c +#endif /* _IMG_MSVDX_CMDS_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_core_regs.h b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_core_regs.h --- a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_core_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_core_regs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_core_regs.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -215462,7 +221381,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_c +#endif /* _IMG_MSVDX_CORE_REGS_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_vdmc_regs.h b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_vdmc_regs.h --- a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_vdmc_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_vdmc_regs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_vdmc_regs.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -215492,7 +221411,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_v +#endif /* _IMG_MSVDX_VDMC_REGS_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_vec_regs.h b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_vec_regs.h --- a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_vec_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_vec_regs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_msvdx_vec_regs.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,60 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -215556,7 +221475,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_msvdx_v +#endif /* __MSVDX_VEC_REGS_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_pixfmts.h b/drivers/media/platform/vxe-vxd/decoder/img_pixfmts.h --- a/drivers/media/platform/vxe-vxd/decoder/img_pixfmts.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_pixfmts.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_pixfmts.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,195 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -215755,7 +221674,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_pixfmts +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_profiles_levels.h b/drivers/media/platform/vxe-vxd/decoder/img_profiles_levels.h --- a/drivers/media/platform/vxe-vxd/decoder/img_profiles_levels.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_profiles_levels.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_profiles_levels.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -215792,7 +221711,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_profile +#endif /*__IMG_PROFILES_LEVELS_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_pvdec_core_regs.h b/drivers/media/platform/vxe-vxd/decoder/img_pvdec_core_regs.h --- a/drivers/media/platform/vxe-vxd/decoder/img_pvdec_core_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_pvdec_core_regs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_pvdec_core_regs.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,60 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -215856,7 +221775,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_pvdec_c +#endif /* _IMG_PVDEC_CORE_REGS_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_pvdec_pixel_regs.h b/drivers/media/platform/vxe-vxd/decoder/img_pvdec_pixel_regs.h --- a/drivers/media/platform/vxe-vxd/decoder/img_pvdec_pixel_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_pvdec_pixel_regs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_pvdec_pixel_regs.h 2024-11-24 20:19:38.167228816 -0500 @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -215895,7 +221814,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_pvdec_p +#endif /* _IMG_PVDEC_PIXEL_REGS_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_pvdec_test_regs.h b/drivers/media/platform/vxe-vxd/decoder/img_pvdec_test_regs.h --- a/drivers/media/platform/vxe-vxd/decoder/img_pvdec_test_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_pvdec_test_regs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_pvdec_test_regs.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -215938,7 +221857,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_pvdec_t +#endif /* _IMG_PVDEC_TEST_REGS_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_vdec_fw_msg.h b/drivers/media/platform/vxe-vxd/decoder/img_vdec_fw_msg.h --- a/drivers/media/platform/vxe-vxd/decoder/img_vdec_fw_msg.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_vdec_fw_msg.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_vdec_fw_msg.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,192 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -216134,7 +222053,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_vdec_fw +#endif /* _IMG_VDEC_FW_MSG_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_video_bus4_mmu_regs.h b/drivers/media/platform/vxe-vxd/decoder/img_video_bus4_mmu_regs.h --- a/drivers/media/platform/vxe-vxd/decoder/img_video_bus4_mmu_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/img_video_bus4_mmu_regs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/img_video_bus4_mmu_regs.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,120 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -216258,7 +222177,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/img_video_b +#endif /* _IMG_VIDEO_BUS4_MMU_REGS_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/jpegfw_data.h b/drivers/media/platform/vxe-vxd/decoder/jpegfw_data.h --- a/drivers/media/platform/vxe-vxd/decoder/jpegfw_data.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/jpegfw_data.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/jpegfw_data.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,83 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -216345,7 +222264,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/jpegfw_data +#endif /* _JPEGFW_DATA_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/jpegfw_data_shared.h b/drivers/media/platform/vxe-vxd/decoder/jpegfw_data_shared.h --- a/drivers/media/platform/vxe-vxd/decoder/jpegfw_data_shared.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/jpegfw_data_shared.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/jpegfw_data_shared.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -216433,7 +222352,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/jpegfw_data +#endif /* _JPEGFW_DATA_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/jpeg_secure_parser.c b/drivers/media/platform/vxe-vxd/decoder/jpeg_secure_parser.c --- a/drivers/media/platform/vxe-vxd/decoder/jpeg_secure_parser.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/jpeg_secure_parser.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/jpeg_secure_parser.c 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,645 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -217082,7 +223001,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/jpeg_secure +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/jpeg_secure_parser.h b/drivers/media/platform/vxe-vxd/decoder/jpeg_secure_parser.h --- a/drivers/media/platform/vxe-vxd/decoder/jpeg_secure_parser.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/jpeg_secure_parser.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/jpeg_secure_parser.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -217123,7 +223042,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/jpeg_secure +#endif /*__JPEGSECUREPARSER_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/mem_io.h b/drivers/media/platform/vxe-vxd/decoder/mem_io.h --- a/drivers/media/platform/vxe-vxd/decoder/mem_io.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/mem_io.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/mem_io.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -217169,7 +223088,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/mem_io.h b/ +#endif /* _MEM_IO_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/mmu_defs.h b/drivers/media/platform/vxe-vxd/decoder/mmu_defs.h --- a/drivers/media/platform/vxe-vxd/decoder/mmu_defs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/mmu_defs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/mmu_defs.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -217215,7 +223134,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/mmu_defs.h +#endif /* _VXD_MMU_DEFS_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/pixel_api.c b/drivers/media/platform/vxe-vxd/decoder/pixel_api.c --- a/drivers/media/platform/vxe-vxd/decoder/pixel_api.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/pixel_api.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/pixel_api.c 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,895 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -218114,7 +224033,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/pixel_api.c +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/pixel_api.h b/drivers/media/platform/vxe-vxd/decoder/pixel_api.h --- a/drivers/media/platform/vxe-vxd/decoder/pixel_api.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/pixel_api.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/pixel_api.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,152 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -218270,7 +224189,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/pixel_api.h +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/pvdec_entropy_regs.h b/drivers/media/platform/vxe-vxd/decoder/pvdec_entropy_regs.h --- a/drivers/media/platform/vxe-vxd/decoder/pvdec_entropy_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/pvdec_entropy_regs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/pvdec_entropy_regs.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -218307,7 +224226,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/pvdec_entro +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/pvdec_int.h b/drivers/media/platform/vxe-vxd/decoder/pvdec_int.h --- a/drivers/media/platform/vxe-vxd/decoder/pvdec_int.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/pvdec_int.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/pvdec_int.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,82 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -218393,7 +224312,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/pvdec_int.h +#endif /* __PVDEC_INT_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/pvdec_vec_be_regs.h b/drivers/media/platform/vxe-vxd/decoder/pvdec_vec_be_regs.h --- a/drivers/media/platform/vxe-vxd/decoder/pvdec_vec_be_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/pvdec_vec_be_regs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/pvdec_vec_be_regs.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -218432,7 +224351,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/pvdec_vec_b +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/reg_io2.h b/drivers/media/platform/vxe-vxd/decoder/reg_io2.h --- a/drivers/media/platform/vxe-vxd/decoder/reg_io2.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/reg_io2.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/reg_io2.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -218510,7 +224429,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/reg_io2.h b +#endif /* REG_IO2_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/scaler_setup.h b/drivers/media/platform/vxe-vxd/decoder/scaler_setup.h --- a/drivers/media/platform/vxe-vxd/decoder/scaler_setup.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/scaler_setup.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/scaler_setup.h 2024-11-24 20:19:38.168228818 -0500 @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -218573,7 +224492,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/scaler_setu +#endif /* _SCALER_SETUP_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/swsr.c b/drivers/media/platform/vxe-vxd/decoder/swsr.c --- a/drivers/media/platform/vxe-vxd/decoder/swsr.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/swsr.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/swsr.c 2024-11-24 20:19:38.169228820 -0500 @@ -0,0 +1,1657 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -220234,7 +226153,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/swsr.c b/dr +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/swsr.h b/drivers/media/platform/vxe-vxd/decoder/swsr.h --- a/drivers/media/platform/vxe-vxd/decoder/swsr.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/swsr.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/swsr.h 2024-11-24 20:19:38.169228820 -0500 @@ -0,0 +1,278 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -220516,7 +226435,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/swsr.h b/dr +#endif /* _SWSR_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/translation_api.c b/drivers/media/platform/vxe-vxd/decoder/translation_api.c --- a/drivers/media/platform/vxe-vxd/decoder/translation_api.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/translation_api.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/translation_api.c 2024-11-24 20:19:38.169228820 -0500 @@ -0,0 +1,1725 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -222245,7 +228164,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/translation +#endif /* VDEC_USE_PVDEC */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/translation_api.h b/drivers/media/platform/vxe-vxd/decoder/translation_api.h --- a/drivers/media/platform/vxe-vxd/decoder/translation_api.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/translation_api.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/translation_api.h 2024-11-24 20:19:38.169228820 -0500 @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -222291,7 +228210,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/translation +#endif /* __TRANSLATION_API_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecdd_defs.h b/drivers/media/platform/vxe-vxd/decoder/vdecdd_defs.h --- a/drivers/media/platform/vxe-vxd/decoder/vdecdd_defs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vdecdd_defs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vdecdd_defs.h 2024-11-24 20:19:38.169228820 -0500 @@ -0,0 +1,446 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -222741,7 +228660,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecdd_defs +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils_buf.c b/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils_buf.c --- a/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils_buf.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils_buf.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils_buf.c 2024-11-24 20:19:38.169228820 -0500 @@ -0,0 +1,897 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -223642,7 +229561,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecdd_util +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils.c b/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils.c --- a/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils.c 2024-11-24 20:19:38.169228820 -0500 @@ -0,0 +1,95 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -223741,7 +229660,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecdd_util +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils.h b/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils.h --- a/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vdecdd_utils.h 2024-11-24 20:19:38.169228820 -0500 @@ -0,0 +1,93 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -223838,7 +229757,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecdd_util +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdec_defs.h b/drivers/media/platform/vxe-vxd/decoder/vdec_defs.h --- a/drivers/media/platform/vxe-vxd/decoder/vdec_defs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vdec_defs.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vdec_defs.h 2024-11-24 20:19:38.169228820 -0500 @@ -0,0 +1,549 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -224391,7 +230310,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdec_defs.h +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecfw_shared.h b/drivers/media/platform/vxe-vxd/decoder/vdecfw_shared.h --- a/drivers/media/platform/vxe-vxd/decoder/vdecfw_shared.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vdecfw_shared.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vdecfw_shared.h 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,893 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -225288,7 +231207,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecfw_shar +#endif /* _VDECFW_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecfw_share.h b/drivers/media/platform/vxe-vxd/decoder/vdecfw_share.h --- a/drivers/media/platform/vxe-vxd/decoder/vdecfw_share.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vdecfw_share.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vdecfw_share.h 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -225328,7 +231247,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdecfw_shar +#endif /* _VDECFW_SHARE_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wrapper.c b/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wrapper.c --- a/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wrapper.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wrapper.c 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wrapper.c 2024-11-24 20:19:38.169228820 -0500 @@ -0,0 +1,829 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -226161,7 +232080,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wr +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wrapper.h b/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wrapper.h --- a/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wrapper.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wrapper.h 2024-08-28 19:44:05.628038054 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wrapper.h 2024-11-24 20:19:38.169228820 -0500 @@ -0,0 +1,174 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -226339,7 +232258,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vdec_mmu_wr +#endif /* _VXD_MMU_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_core.c b/drivers/media/platform/vxe-vxd/decoder/vxd_core.c --- a/drivers/media/platform/vxe-vxd/decoder/vxd_core.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_core.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_core.c 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,1684 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -228027,7 +233946,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_core.c +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_dec.c b/drivers/media/platform/vxe-vxd/decoder/vxd_dec.c --- a/drivers/media/platform/vxe-vxd/decoder/vxd_dec.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_dec.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_dec.c 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,185 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -228216,7 +234135,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_dec.c b +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_dec.h b/drivers/media/platform/vxe-vxd/decoder/vxd_dec.h --- a/drivers/media/platform/vxe-vxd/decoder/vxd_dec.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_dec.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_dec.h 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,489 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -228709,7 +234628,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_dec.h b +#endif /* _VXD_DEC_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_ext.h b/drivers/media/platform/vxe-vxd/decoder/vxd_ext.h --- a/drivers/media/platform/vxe-vxd/decoder/vxd_ext.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_ext.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_ext.h 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -228787,7 +234706,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_ext.h b +#endif /* VXD_EXT_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_int.c b/drivers/media/platform/vxe-vxd/decoder/vxd_int.c --- a/drivers/media/platform/vxe-vxd/decoder/vxd_int.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_int.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_int.c 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,1137 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -229928,7 +235847,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_int.c b +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_int.h b/drivers/media/platform/vxe-vxd/decoder/vxd_int.h --- a/drivers/media/platform/vxe-vxd/decoder/vxd_int.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_int.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_int.h 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,128 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -230060,7 +235979,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_int.h b +#endif /* _VXD_INT_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_mmu_defs.h b/drivers/media/platform/vxe-vxd/decoder/vxd_mmu_defs.h --- a/drivers/media/platform/vxe-vxd/decoder/vxd_mmu_defs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_mmu_defs.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_mmu_defs.h 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -230094,7 +236013,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_mmu_def +#endif /* _VXD_MMU_DEFS_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_props.h b/drivers/media/platform/vxe-vxd/decoder/vxd_props.h --- a/drivers/media/platform/vxe-vxd/decoder/vxd_props.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_props.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_props.h 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,80 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -230178,7 +236097,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_props.h +#endif /* _VXD_PROPS_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec.c b/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec.c --- a/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec.c 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,1745 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -231927,7 +237846,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec.c +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_priv.h b/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_priv.h --- a/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_priv.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_priv.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_priv.h 2024-11-24 20:19:38.170228822 -0500 @@ -0,0 +1,126 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -232057,7 +237976,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_p +#endif /* _VXD_PVDEC_PRIV_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_regs.h b/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_regs.h --- a/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_regs.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_regs.h 2024-11-24 20:19:38.171228823 -0500 @@ -0,0 +1,779 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -232840,7 +238759,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_pvdec_r +#endif /* VXD_PVDEC_REGS_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_v4l2.c b/drivers/media/platform/vxe-vxd/decoder/vxd_v4l2.c --- a/drivers/media/platform/vxe-vxd/decoder/vxd_v4l2.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/decoder/vxd_v4l2.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/decoder/vxd_v4l2.c 2024-11-24 20:19:38.171228823 -0500 @@ -0,0 +1,2249 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -235093,7 +241012,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/decoder/vxd_v4l2.c +MODULE_DESCRIPTION("IMG D5520 video decoder driver"); diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_binaries/ALL_CODECS_FW_ALL_pipes_2_contexts_8_hwconfig_1_bin.c b/drivers/media/platform/vxe-vxd/encoder/fw_binaries/ALL_CODECS_FW_ALL_pipes_2_contexts_8_hwconfig_1_bin.c --- a/drivers/media/platform/vxe-vxd/encoder/fw_binaries/ALL_CODECS_FW_ALL_pipes_2_contexts_8_hwconfig_1_bin.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/fw_binaries/ALL_CODECS_FW_ALL_pipes_2_contexts_8_hwconfig_1_bin.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/fw_binaries/ALL_CODECS_FW_ALL_pipes_2_contexts_8_hwconfig_1_bin.c 2024-11-24 20:19:38.171228823 -0500 @@ -0,0 +1,29013 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -264110,7 +270029,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_binaries +/* Py_Return simg_compiled_all_codecs_fw_all_pipes_2_contexts_8_hwconfig_1 */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_binaries/include_all_fw_variants.h b/drivers/media/platform/vxe-vxd/encoder/fw_binaries/include_all_fw_variants.h --- a/drivers/media/platform/vxe-vxd/encoder/fw_binaries/include_all_fw_variants.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/fw_binaries/include_all_fw_variants.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/fw_binaries/include_all_fw_variants.h 2024-11-24 20:19:38.172228825 -0500 @@ -0,0 +1,47 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -264161,7 +270080,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_binaries +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_headers/coreflags.h b/drivers/media/platform/vxe-vxd/encoder/fw_headers/coreflags.h --- a/drivers/media/platform/vxe-vxd/encoder/fw_headers/coreflags.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/fw_headers/coreflags.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/fw_headers/coreflags.h 2024-11-24 20:19:38.172228825 -0500 @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -264206,7 +270125,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_headers/ +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_headers/defs.h b/drivers/media/platform/vxe-vxd/encoder/fw_headers/defs.h --- a/drivers/media/platform/vxe-vxd/encoder/fw_headers/defs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/fw_headers/defs.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/fw_headers/defs.h 2024-11-24 20:19:38.172228825 -0500 @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -264252,7 +270171,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_headers/ +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_headers/mtx_fwif.h b/drivers/media/platform/vxe-vxd/encoder/fw_headers/mtx_fwif.h --- a/drivers/media/platform/vxe-vxd/encoder/fw_headers/mtx_fwif.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/fw_headers/mtx_fwif.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/fw_headers/mtx_fwif.h 2024-11-24 20:19:38.172228825 -0500 @@ -0,0 +1,205 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -264461,7 +270380,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_headers/ +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_headers/topazscfwif.h b/drivers/media/platform/vxe-vxd/encoder/fw_headers/topazscfwif.h --- a/drivers/media/platform/vxe-vxd/encoder/fw_headers/topazscfwif.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/fw_headers/topazscfwif.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/fw_headers/topazscfwif.h 2024-11-24 20:19:38.172228825 -0500 @@ -0,0 +1,1104 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -265569,7 +271488,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_headers/ +#endif /* _TOPAZSCFWIF_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_headers/vxe_common.h b/drivers/media/platform/vxe-vxd/encoder/fw_headers/vxe_common.h --- a/drivers/media/platform/vxe-vxd/encoder/fw_headers/vxe_common.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/fw_headers/vxe_common.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/fw_headers/vxe_common.h 2024-11-24 20:19:38.172228825 -0500 @@ -0,0 +1,165 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -265738,7 +271657,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/fw_headers/ +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/header_gen.c b/drivers/media/platform/vxe-vxd/encoder/header_gen.c --- a/drivers/media/platform/vxe-vxd/encoder/header_gen.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/header_gen.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/header_gen.c 2024-11-24 20:19:38.172228825 -0500 @@ -0,0 +1,1751 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -267493,7 +273412,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/header_gen. +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/header_gen.h b/drivers/media/platform/vxe-vxd/encoder/header_gen.h --- a/drivers/media/platform/vxe-vxd/encoder/header_gen.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/header_gen.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/header_gen.h 2024-11-24 20:19:38.172228825 -0500 @@ -0,0 +1,111 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -267608,7 +273527,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/header_gen. + unsigned char scaling_lists); diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/mtx_fwif.c b/drivers/media/platform/vxe-vxd/encoder/mtx_fwif.c --- a/drivers/media/platform/vxe-vxd/encoder/mtx_fwif.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/mtx_fwif.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/mtx_fwif.c 2024-11-24 20:19:38.172228825 -0500 @@ -0,0 +1,990 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -268602,7 +274521,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/mtx_fwif.c +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers/img_soc_dmac_regs.h b/drivers/media/platform/vxe-vxd/encoder/reg_headers/img_soc_dmac_regs.h --- a/drivers/media/platform/vxe-vxd/encoder/reg_headers/img_soc_dmac_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/img_soc_dmac_regs.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/img_soc_dmac_regs.h 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -268668,7 +274587,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers + diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers/mtx_regs.h b/drivers/media/platform/vxe-vxd/encoder/reg_headers/mtx_regs.h --- a/drivers/media/platform/vxe-vxd/encoder/reg_headers/mtx_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/mtx_regs.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/mtx_regs.h 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,72 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -268744,7 +274663,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_coreext_regs.h b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_coreext_regs.h --- a/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_coreext_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_coreext_regs.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_coreext_regs.h 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,183 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -268931,7 +274850,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_db_regs.h b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_db_regs.h --- a/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_db_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_db_regs.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_db_regs.h 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -268957,7 +274876,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers/topazhp_core_regs.h b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topazhp_core_regs.h --- a/drivers/media/platform/vxe-vxd/encoder/reg_headers/topazhp_core_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topazhp_core_regs.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topazhp_core_regs.h 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,232 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -269193,7 +275112,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers/topazhp_multicore_regs_old.h b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topazhp_multicore_regs_old.h --- a/drivers/media/platform/vxe-vxd/encoder/reg_headers/topazhp_multicore_regs_old.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topazhp_multicore_regs_old.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topazhp_multicore_regs_old.h 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -269219,7 +275138,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_vlc_regs.h b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_vlc_regs.h --- a/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_vlc_regs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_vlc_regs.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/reg_headers/topaz_vlc_regs.h 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -269269,7 +275188,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/reg_headers +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/target_config.h b/drivers/media/platform/vxe-vxd/encoder/target_config.h --- a/drivers/media/platform/vxe-vxd/encoder/target_config.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/target_config.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/target_config.h 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -269329,7 +275248,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/target_conf +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/target.h b/drivers/media/platform/vxe-vxd/encoder/target.h --- a/drivers/media/platform/vxe-vxd/encoder/target.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/target.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/target.h 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,68 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -269401,7 +275320,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/target.h b/ +#endif /* __TARGET_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_api.c b/drivers/media/platform/vxe-vxd/encoder/topaz_api.c --- a/drivers/media/platform/vxe-vxd/encoder/topaz_api.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/topaz_api.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/topaz_api.c 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,3887 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -273292,7 +279211,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_api.c +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_api.h b/drivers/media/platform/vxe-vxd/encoder/topaz_api.h --- a/drivers/media/platform/vxe-vxd/encoder/topaz_api.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/topaz_api.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/topaz_api.h 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,1047 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -274343,7 +280262,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_api.h +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_api_utils.c b/drivers/media/platform/vxe-vxd/encoder/topaz_api_utils.c --- a/drivers/media/platform/vxe-vxd/encoder/topaz_api_utils.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/topaz_api_utils.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/topaz_api_utils.c 2024-11-24 20:19:38.173228827 -0500 @@ -0,0 +1,1487 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -275834,7 +281753,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_api_u +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_api_utils.h b/drivers/media/platform/vxe-vxd/encoder/topaz_api_utils.h --- a/drivers/media/platform/vxe-vxd/encoder/topaz_api_utils.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/topaz_api_utils.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/topaz_api_utils.h 2024-11-24 20:19:38.174228829 -0500 @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -275893,7 +281812,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_api_u +void patch_hw_profile(struct img_video_params *video_params, struct img_video_context *video); diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_color_formats.h b/drivers/media/platform/vxe-vxd/encoder/topaz_color_formats.h --- a/drivers/media/platform/vxe-vxd/encoder/topaz_color_formats.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/topaz_color_formats.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/topaz_color_formats.h 2024-11-24 20:19:38.174228829 -0500 @@ -0,0 +1,97 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -275994,7 +281913,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_color +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_device.c b/drivers/media/platform/vxe-vxd/encoder/topaz_device.c --- a/drivers/media/platform/vxe-vxd/encoder/topaz_device.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/topaz_device.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/topaz_device.c 2024-11-24 20:19:38.174228829 -0500 @@ -0,0 +1,1671 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -277669,7 +283588,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_devic +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_device.h b/drivers/media/platform/vxe-vxd/encoder/topaz_device.h --- a/drivers/media/platform/vxe-vxd/encoder/topaz_device.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/topaz_device.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/topaz_device.h 2024-11-24 20:19:38.174228829 -0500 @@ -0,0 +1,160 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -277833,7 +283752,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topaz_devic +#endif /* __TOPAZ_DEVICE_H__ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topazmmu.c b/drivers/media/platform/vxe-vxd/encoder/topazmmu.c --- a/drivers/media/platform/vxe-vxd/encoder/topazmmu.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/topazmmu.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/topazmmu.c 2024-11-24 20:19:38.174228829 -0500 @@ -0,0 +1,741 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -278578,7 +284497,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topazmmu.c +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topazmmu.h b/drivers/media/platform/vxe-vxd/encoder/topazmmu.h --- a/drivers/media/platform/vxe-vxd/encoder/topazmmu.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/topazmmu.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/topazmmu.h 2024-11-24 20:19:38.174228829 -0500 @@ -0,0 +1,199 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -278781,7 +284700,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/topazmmu.h +#endif /* TOPAZZ_MMU_H_ */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/vxe_enc.c b/drivers/media/platform/vxe-vxd/encoder/vxe_enc.c --- a/drivers/media/platform/vxe-vxd/encoder/vxe_enc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/vxe_enc.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/vxe_enc.c 2024-11-24 20:19:38.174228829 -0500 @@ -0,0 +1,472 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -279257,7 +285176,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/vxe_enc.c b +} diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/vxe_enc.h b/drivers/media/platform/vxe-vxd/encoder/vxe_enc.h --- a/drivers/media/platform/vxe-vxd/encoder/vxe_enc.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/vxe_enc.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/vxe_enc.h 2024-11-24 20:19:38.174228829 -0500 @@ -0,0 +1,237 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -279498,7 +285417,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/vxe_enc.h b +#endif /* _VXE_ENC_H */ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/vxe_public_regdefs.h b/drivers/media/platform/vxe-vxd/encoder/vxe_public_regdefs.h --- a/drivers/media/platform/vxe-vxd/encoder/vxe_public_regdefs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/vxe_public_regdefs.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/vxe_public_regdefs.h 2024-11-24 20:19:38.174228829 -0500 @@ -0,0 +1,926 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -280428,7 +286347,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/vxe_public_ +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.c b/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.c --- a/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.c 2024-11-24 20:19:38.174228829 -0500 @@ -0,0 +1,1949 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -282381,7 +288300,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.c +MODULE_DESCRIPTION("IMG VXE384 video encoder driver"); diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.h b/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.h --- a/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.h 2024-11-24 20:19:38.174228829 -0500 @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -282424,7 +288343,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.h +#endif diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/Makefile b/drivers/media/platform/vxe-vxd/Makefile --- a/drivers/media/platform/vxe-vxd/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/media/platform/vxe-vxd/Makefile 2024-08-28 19:44:05.624038032 -0400 ++++ b/drivers/media/platform/vxe-vxd/Makefile 2024-11-24 20:19:38.162228807 -0500 @@ -0,0 +1,163 @@ +# SPDX-License-Identifier: GPL-2.0 + @@ -282591,7 +288510,7 @@ diff -Naur --no-dereference a/drivers/media/platform/vxe-vxd/Makefile b/drivers/ +ccflags-y += -I$(srctree)/drivers/media/platform/vxe-vxd/common/ diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-csi2rxss.c b/drivers/media/platform/xilinx/xilinx-csi2rxss.c --- a/drivers/media/platform/xilinx/xilinx-csi2rxss.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/xilinx/xilinx-csi2rxss.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/xilinx/xilinx-csi2rxss.c 2024-11-24 20:19:38.174228829 -0500 @@ -681,12 +681,13 @@ static struct v4l2_mbus_framefmt * @@ -282672,7 +288591,7 @@ diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-csi2rxss.c b/ struct xcsi2rxss_state *state = to_xcsi2rxssstate(sd); diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-dma.c b/drivers/media/platform/xilinx/xilinx-dma.c --- a/drivers/media/platform/xilinx/xilinx-dma.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/xilinx/xilinx-dma.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/xilinx/xilinx-dma.c 2024-11-24 20:19:38.175228831 -0500 @@ -175,8 +175,8 @@ struct xvip_dma *start) { @@ -282737,7 +288656,7 @@ diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-dma.c b/drive spin_lock_irq(&dma->queued_lock); diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-dma.h b/drivers/media/platform/xilinx/xilinx-dma.h --- a/drivers/media/platform/xilinx/xilinx-dma.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/xilinx/xilinx-dma.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/xilinx/xilinx-dma.h 2024-11-24 20:19:38.175228831 -0500 @@ -47,7 +47,7 @@ static inline struct xvip_pipeline *to_xvip_pipeline(struct media_entity *e) @@ -282749,7 +288668,7 @@ diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-dma.h b/drive /** diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-tpg.c b/drivers/media/platform/xilinx/xilinx-tpg.c --- a/drivers/media/platform/xilinx/xilinx-tpg.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/xilinx/xilinx-tpg.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/xilinx/xilinx-tpg.c 2024-11-24 20:19:38.175228831 -0500 @@ -251,12 +251,13 @@ static struct v4l2_mbus_framefmt * @@ -282838,7 +288757,7 @@ diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-tpg.c b/drive diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-vip.c b/drivers/media/platform/xilinx/xilinx-vip.c --- a/drivers/media/platform/xilinx/xilinx-vip.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/xilinx/xilinx-vip.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/xilinx/xilinx-vip.c 2024-11-24 20:19:38.175228831 -0500 @@ -246,7 +246,7 @@ * is not valid. */ @@ -282877,7 +288796,7 @@ diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-vip.c b/drive return -EINVAL; diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-vip.h b/drivers/media/platform/xilinx/xilinx-vip.h --- a/drivers/media/platform/xilinx/xilinx-vip.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/platform/xilinx/xilinx-vip.h 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/platform/xilinx/xilinx-vip.h 2024-11-24 20:19:38.175228831 -0500 @@ -125,10 +125,10 @@ void xvip_set_format_size(struct v4l2_mbus_framefmt *format, const struct v4l2_subdev_format *fmt); @@ -282893,7 +288812,7 @@ diff -Naur --no-dereference a/drivers/media/platform/xilinx/xilinx-vip.h b/drive static inline u32 xvip_read(struct xvip_device *xvip, u32 addr) diff -Naur --no-dereference a/drivers/media/test-drivers/vimc/vimc-capture.c b/drivers/media/test-drivers/vimc/vimc-capture.c --- a/drivers/media/test-drivers/vimc/vimc-capture.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/test-drivers/vimc/vimc-capture.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/test-drivers/vimc/vimc-capture.c 2024-11-24 20:19:38.175228831 -0500 @@ -246,7 +246,7 @@ vcap->sequence = 0; @@ -282923,7 +288842,7 @@ diff -Naur --no-dereference a/drivers/media/test-drivers/vimc/vimc-capture.c b/d vimc_cap_return_all_buffers(vcap, VB2_BUF_STATE_ERROR); diff -Naur --no-dereference a/drivers/media/test-drivers/vimc/vimc-debayer.c b/drivers/media/test-drivers/vimc/vimc-debayer.c --- a/drivers/media/test-drivers/vimc/vimc-debayer.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/test-drivers/vimc/vimc-debayer.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/test-drivers/vimc/vimc-debayer.c 2024-11-24 20:19:38.175228831 -0500 @@ -150,17 +150,17 @@ } @@ -283002,7 +288921,7 @@ diff -Naur --no-dereference a/drivers/media/test-drivers/vimc/vimc-debayer.c b/d /* diff -Naur --no-dereference a/drivers/media/test-drivers/vimc/vimc-scaler.c b/drivers/media/test-drivers/vimc/vimc-scaler.c --- a/drivers/media/test-drivers/vimc/vimc-scaler.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/test-drivers/vimc/vimc-scaler.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/test-drivers/vimc/vimc-scaler.c 2024-11-24 20:19:38.175228831 -0500 @@ -84,20 +84,20 @@ } @@ -283128,7 +289047,7 @@ diff -Naur --no-dereference a/drivers/media/test-drivers/vimc/vimc-scaler.c b/dr switch (sel->target) { diff -Naur --no-dereference a/drivers/media/test-drivers/vimc/vimc-sensor.c b/drivers/media/test-drivers/vimc/vimc-sensor.c --- a/drivers/media/test-drivers/vimc/vimc-sensor.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/test-drivers/vimc/vimc-sensor.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/test-drivers/vimc/vimc-sensor.c 2024-11-24 20:19:38.175228831 -0500 @@ -42,14 +42,14 @@ }; @@ -283201,7 +289120,7 @@ diff -Naur --no-dereference a/drivers/media/test-drivers/vimc/vimc-sensor.c b/dr /* Set the new format */ diff -Naur --no-dereference a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c --- a/drivers/media/usb/au0828/au0828-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/usb/au0828/au0828-core.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/usb/au0828/au0828-core.c 2024-11-24 20:19:38.175228831 -0500 @@ -410,7 +410,7 @@ goto end; } @@ -283237,7 +289156,7 @@ diff -Naur --no-dereference a/drivers/media/usb/au0828/au0828-core.c b/drivers/m diff -Naur --no-dereference a/drivers/media/usb/go7007/s2250-board.c b/drivers/media/usb/go7007/s2250-board.c --- a/drivers/media/usb/go7007/s2250-board.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/usb/go7007/s2250-board.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/usb/go7007/s2250-board.c 2024-11-24 20:19:38.175228831 -0500 @@ -398,7 +398,7 @@ } @@ -283249,7 +289168,7 @@ diff -Naur --no-dereference a/drivers/media/usb/go7007/s2250-board.c b/drivers/m struct v4l2_mbus_framefmt *fmt = &format->format; diff -Naur --no-dereference a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c --- a/drivers/media/v4l2-core/v4l2-common.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/v4l2-core/v4l2-common.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/v4l2-core/v4l2-common.c 2024-11-24 20:19:38.175228831 -0500 @@ -441,3 +441,36 @@ return 0; } @@ -283289,7 +289208,7 @@ diff -Naur --no-dereference a/drivers/media/v4l2-core/v4l2-common.c b/drivers/me +EXPORT_SYMBOL_GPL(v4l2_get_link_freq); diff -Naur --no-dereference a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c --- a/drivers/media/v4l2-core/v4l2-ioctl.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/v4l2-core/v4l2-ioctl.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/v4l2-core/v4l2-ioctl.c 2024-11-24 20:19:38.175228831 -0500 @@ -15,6 +15,7 @@ #include #include @@ -283356,7 +289275,7 @@ diff -Naur --no-dereference a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/med out_array_args: diff -Naur --no-dereference a/drivers/media/v4l2-core/v4l2-mc.c b/drivers/media/v4l2-core/v4l2-mc.c --- a/drivers/media/v4l2-core/v4l2-mc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/v4l2-core/v4l2-mc.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/v4l2-core/v4l2-mc.c 2024-11-24 20:19:38.176228832 -0500 @@ -427,20 +427,20 @@ /* @@ -283457,7 +289376,7 @@ diff -Naur --no-dereference a/drivers/media/v4l2-core/v4l2-mc.c b/drivers/media/ int ret = 0; diff -Naur --no-dereference a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c --- a/drivers/media/v4l2-core/v4l2-subdev.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/media/v4l2-core/v4l2-subdev.c 2024-08-28 19:44:05.632038075 -0400 ++++ b/drivers/media/v4l2-core/v4l2-subdev.c 2024-11-24 20:19:38.176228832 -0500 @@ -16,6 +16,7 @@ #include #include @@ -284539,7 +290458,7 @@ diff -Naur --no-dereference a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/me +EXPORT_SYMBOL_GPL(v4l2_routing_simple_verify); diff -Naur --no-dereference a/drivers/memory/Kconfig b/drivers/memory/Kconfig --- a/drivers/memory/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/memory/Kconfig 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/memory/Kconfig 2024-11-24 20:19:38.176228832 -0500 @@ -103,8 +103,8 @@ temperature changes @@ -284553,7 +290472,7 @@ diff -Naur --no-dereference a/drivers/memory/Kconfig b/drivers/memory/Kconfig This driver is for the General Purpose Memory Controller (GPMC) diff -Naur --no-dereference a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c --- a/drivers/memory/omap-gpmc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/memory/omap-gpmc.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/memory/omap-gpmc.c 2024-11-24 20:19:38.176228832 -0500 @@ -233,6 +233,7 @@ struct irq_chip irq_chip; struct gpio_chip gpio_chip; @@ -284645,7 +290564,7 @@ diff -Naur --no-dereference a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-g goto gpio_init_failed; diff -Naur --no-dereference a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig --- a/drivers/mfd/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mfd/Kconfig 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mfd/Kconfig 2024-11-24 20:19:38.176228832 -0500 @@ -1441,7 +1441,7 @@ OMAP USB Host drivers. @@ -284700,7 +290619,7 @@ diff -Naur --no-dereference a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig depends on I2C=y diff -Naur --no-dereference a/drivers/mfd/Makefile b/drivers/mfd/Makefile --- a/drivers/mfd/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mfd/Makefile 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mfd/Makefile 2024-11-24 20:19:38.176228832 -0500 @@ -101,10 +101,12 @@ obj-$(CONFIG_MFD_TPS65086) += tps65086.o obj-$(CONFIG_MFD_TPS65217) += tps65217.o @@ -284716,7 +290635,7 @@ diff -Naur --no-dereference a/drivers/mfd/Makefile b/drivers/mfd/Makefile obj-$(CONFIG_MENELAUS) += menelaus.o diff -Naur --no-dereference a/drivers/mfd/tps65219.c b/drivers/mfd/tps65219.c --- a/drivers/mfd/tps65219.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/mfd/tps65219.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mfd/tps65219.c 2024-11-24 20:19:38.176228832 -0500 @@ -0,0 +1,435 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -285155,7 +291074,7 @@ diff -Naur --no-dereference a/drivers/mfd/tps65219.c b/drivers/mfd/tps65219.c +MODULE_LICENSE("GPL"); diff -Naur --no-dereference a/drivers/mfd/tps6594x.c b/drivers/mfd/tps6594x.c --- a/drivers/mfd/tps6594x.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/mfd/tps6594x.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mfd/tps6594x.c 2024-11-24 20:19:38.176228832 -0500 @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -285279,7 +291198,7 @@ diff -Naur --no-dereference a/drivers/mfd/tps6594x.c b/drivers/mfd/tps6594x.c +MODULE_LICENSE("GPL"); diff -Naur --no-dereference a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c --- a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c 2024-11-24 20:19:38.177228834 -0500 @@ -0,0 +1,242 @@ +/* + * Pinmux helper driver @@ -285525,7 +291444,7 @@ diff -Naur --no-dereference a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c +MODULE_ALIAS("platform:bone-pinmux-helper"); diff -Naur --no-dereference a/drivers/misc/cape/beaglebone/Kconfig b/drivers/misc/cape/beaglebone/Kconfig --- a/drivers/misc/cape/beaglebone/Kconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/misc/cape/beaglebone/Kconfig 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/cape/beaglebone/Kconfig 2024-11-24 20:19:38.177228834 -0500 @@ -0,0 +1,10 @@ +# +# Beaglebone capes @@ -285539,7 +291458,7 @@ diff -Naur --no-dereference a/drivers/misc/cape/beaglebone/Kconfig b/drivers/mis + Say Y here to include support for the pinmux helper diff -Naur --no-dereference a/drivers/misc/cape/beaglebone/Makefile b/drivers/misc/cape/beaglebone/Makefile --- a/drivers/misc/cape/beaglebone/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/misc/cape/beaglebone/Makefile 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/cape/beaglebone/Makefile 2024-11-24 20:19:38.177228834 -0500 @@ -0,0 +1,5 @@ +# +# Makefile for beaglebone capes @@ -285548,7 +291467,7 @@ diff -Naur --no-dereference a/drivers/misc/cape/beaglebone/Makefile b/drivers/mi +obj-$(CONFIG_BEAGLEBONE_PINMUX_HELPER) += bone-pinmux-helper.o diff -Naur --no-dereference a/drivers/misc/cape/Kconfig b/drivers/misc/cape/Kconfig --- a/drivers/misc/cape/Kconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/misc/cape/Kconfig 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/cape/Kconfig 2024-11-24 20:19:38.177228834 -0500 @@ -0,0 +1,5 @@ +# +# Capes @@ -285557,7 +291476,7 @@ diff -Naur --no-dereference a/drivers/misc/cape/Kconfig b/drivers/misc/cape/Kcon +source "drivers/misc/cape/beaglebone/Kconfig" diff -Naur --no-dereference a/drivers/misc/cape/Makefile b/drivers/misc/cape/Makefile --- a/drivers/misc/cape/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/misc/cape/Makefile 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/cape/Makefile 2024-11-24 20:19:38.177228834 -0500 @@ -0,0 +1,5 @@ +# +# Makefile for cape like devices @@ -285566,7 +291485,7 @@ diff -Naur --no-dereference a/drivers/misc/cape/Makefile b/drivers/misc/cape/Mak +obj-y += beaglebone/ diff -Naur --no-dereference a/drivers/misc/dma-buf-phys.c b/drivers/misc/dma-buf-phys.c --- a/drivers/misc/dma-buf-phys.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/misc/dma-buf-phys.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/dma-buf-phys.c 2024-11-24 20:19:38.177228834 -0500 @@ -0,0 +1,221 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -285791,7 +291710,7 @@ diff -Naur --no-dereference a/drivers/misc/dma-buf-phys.c b/drivers/misc/dma-buf +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/misc/eeprom/eeprom_93xx46.c b/drivers/misc/eeprom/eeprom_93xx46.c --- a/drivers/misc/eeprom/eeprom_93xx46.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/misc/eeprom/eeprom_93xx46.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/eeprom/eeprom_93xx46.c 2024-11-24 20:19:38.177228834 -0500 @@ -528,3 +528,4 @@ MODULE_AUTHOR("Anatolij Gustschin "); MODULE_ALIAS("spi:93xx46"); @@ -285799,7 +291718,7 @@ diff -Naur --no-dereference a/drivers/misc/eeprom/eeprom_93xx46.c b/drivers/misc +MODULE_ALIAS("spi:93lc46b"); diff -Naur --no-dereference a/drivers/misc/Kconfig b/drivers/misc/Kconfig --- a/drivers/misc/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/misc/Kconfig 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/Kconfig 2024-11-24 20:19:38.176228832 -0500 @@ -423,6 +423,13 @@ config SRAM_EXEC bool @@ -285836,7 +291755,7 @@ diff -Naur --no-dereference a/drivers/misc/Kconfig b/drivers/misc/Kconfig source "drivers/misc/ocxl/Kconfig" diff -Naur --no-dereference a/drivers/misc/Makefile b/drivers/misc/Makefile --- a/drivers/misc/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/misc/Makefile 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/Makefile 2024-11-24 20:19:38.176228832 -0500 @@ -46,7 +46,9 @@ obj-$(CONFIG_LATTICE_ECP3_CONFIG) += lattice-ecp3-config.o obj-$(CONFIG_SRAM) += sram.o @@ -285854,7 +291773,7 @@ diff -Naur --no-dereference a/drivers/misc/Makefile b/drivers/misc/Makefile +obj-$(CONFIG_DMA_BUF_PHYS) += dma-buf-phys.o diff -Naur --no-dereference a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c --- a/drivers/misc/pci_endpoint_test.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/misc/pci_endpoint_test.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/pci_endpoint_test.c 2024-11-24 20:19:38.177228834 -0500 @@ -68,8 +68,9 @@ #define PCI_ENDPOINT_TEST_FLAGS 0x2c #define FLAG_USE_DMA BIT(0) @@ -285929,7 +291848,7 @@ diff -Naur --no-dereference a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pc diff -Naur --no-dereference a/drivers/misc/sram.c b/drivers/misc/sram.c --- a/drivers/misc/sram.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/misc/sram.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/sram.c 2024-11-24 20:19:38.177228834 -0500 @@ -109,6 +109,15 @@ if (ret) return ret; @@ -285973,7 +291892,7 @@ diff -Naur --no-dereference a/drivers/misc/sram.c b/drivers/misc/sram.c if (ret) { diff -Naur --no-dereference a/drivers/misc/sram-dma-heap.c b/drivers/misc/sram-dma-heap.c --- a/drivers/misc/sram-dma-heap.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/misc/sram-dma-heap.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/sram-dma-heap.c 2024-11-24 20:19:38.177228834 -0500 @@ -0,0 +1,243 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -286220,7 +292139,7 @@ diff -Naur --no-dereference a/drivers/misc/sram-dma-heap.c b/drivers/misc/sram-d +} diff -Naur --no-dereference a/drivers/misc/sram.h b/drivers/misc/sram.h --- a/drivers/misc/sram.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/misc/sram.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/misc/sram.h 2024-11-24 20:19:38.177228834 -0500 @@ -32,6 +32,7 @@ bool export; bool pool; @@ -286252,7 +292171,7 @@ diff -Naur --no-dereference a/drivers/misc/sram.h b/drivers/misc/sram.h #endif /* __SRAM_H */ diff -Naur --no-dereference a/drivers/mmc/host/sdhci_am654.c b/drivers/mmc/host/sdhci_am654.c --- a/drivers/mmc/host/sdhci_am654.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mmc/host/sdhci_am654.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mmc/host/sdhci_am654.c 2024-11-24 20:19:38.177228834 -0500 @@ -85,6 +85,7 @@ #define DRIVER_STRENGTH_40_OHM 0x4 @@ -286551,9 +292470,31 @@ diff -Naur --no-dereference a/drivers/mmc/host/sdhci_am654.c b/drivers/mmc/host/ .of_match_table = sdhci_am654_of_match, }, .probe = sdhci_am654_probe, +diff -Naur --no-dereference a/drivers/mtd/mtdoops.c b/drivers/mtd/mtdoops.c +--- a/drivers/mtd/mtdoops.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/mtd/mtdoops.c 2024-11-24 20:19:38.177228834 -0500 +@@ -267,7 +267,8 @@ + } + + static void mtdoops_do_dump(struct kmsg_dumper *dumper, +- enum kmsg_dump_reason reason) ++ enum kmsg_dump_reason reason, ++ struct kmsg_dumper_iter *iter) + { + struct mtdoops_context *cxt = container_of(dumper, + struct mtdoops_context, dump); +@@ -276,7 +277,7 @@ + if (reason == KMSG_DUMP_OOPS && !dump_oops) + return; + +- kmsg_dump_get_buffer(dumper, true, cxt->oops_buf + MTDOOPS_HEADER_SIZE, ++ kmsg_dump_get_buffer(iter, true, cxt->oops_buf + MTDOOPS_HEADER_SIZE, + record_size - MTDOOPS_HEADER_SIZE, NULL); + + if (reason != KMSG_DUMP_OOPS) { diff -Naur --no-dereference a/drivers/mtd/nand/raw/Kconfig b/drivers/mtd/nand/raw/Kconfig --- a/drivers/mtd/nand/raw/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/nand/raw/Kconfig 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/nand/raw/Kconfig 2024-11-24 20:19:38.178228836 -0500 @@ -62,7 +62,7 @@ config MTD_NAND_OMAP2 @@ -286565,7 +292506,7 @@ diff -Naur --no-dereference a/drivers/mtd/nand/raw/Kconfig b/drivers/mtd/nand/ra Support for NAND flash on Texas Instruments OMAP2, OMAP3, OMAP4 diff -Naur --no-dereference a/drivers/mtd/nand/raw/omap2.c b/drivers/mtd/nand/raw/omap2.c --- a/drivers/mtd/nand/raw/omap2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/nand/raw/omap2.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/nand/raw/omap2.c 2024-11-24 20:19:38.178228836 -0500 @@ -18,7 +18,7 @@ #include #include @@ -287440,7 +293381,7 @@ diff -Naur --no-dereference a/drivers/mtd/nand/raw/omap2.c b/drivers/mtd/nand/ra MODULE_DEVICE_TABLE(of, omap_nand_ids); diff -Naur --no-dereference a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c --- a/drivers/mtd/nand/spi/core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/nand/spi/core.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/nand/spi/core.c 2024-11-24 20:19:38.178228836 -0500 @@ -22,9 +22,11 @@ static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val) @@ -288017,7 +293958,7 @@ diff -Naur --no-dereference a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi mtd_set_ooblayout(mtd, spinand->eccinfo.ooblayout); diff -Naur --no-dereference a/drivers/mtd/nand/spi/winbond.c b/drivers/mtd/nand/spi/winbond.c --- a/drivers/mtd/nand/spi/winbond.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/nand/spi/winbond.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/nand/spi/winbond.c 2024-11-24 20:19:38.178228836 -0500 @@ -7,6 +7,7 @@ * Boris Brezillon */ @@ -288326,7 +294267,7 @@ diff -Naur --no-dereference a/drivers/mtd/nand/spi/winbond.c b/drivers/mtd/nand/ const struct spinand_manufacturer winbond_spinand_manufacturer = { diff -Naur --no-dereference a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c --- a/drivers/mtd/spi-nor/core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/spi-nor/core.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/spi-nor/core.c 2024-11-24 20:19:38.178228836 -0500 @@ -40,6 +40,81 @@ #define SPI_NOR_MAX_ADDR_WIDTH 4 @@ -289565,7 +295506,7 @@ diff -Naur --no-dereference a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/c static int spi_nor_remove(struct spi_mem *spimem) diff -Naur --no-dereference a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h --- a/drivers/mtd/spi-nor/core.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/spi-nor/core.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/spi-nor/core.h 2024-11-24 20:19:38.178228836 -0500 @@ -26,6 +26,8 @@ SNOR_F_HAS_SR_TB_BIT6 = BIT(11), SNOR_F_HAS_4BIT_BP = BIT(12), @@ -289669,7 +295610,7 @@ diff -Naur --no-dereference a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/c diff -Naur --no-dereference a/drivers/mtd/spi-nor/micron-st.c b/drivers/mtd/spi-nor/micron-st.c --- a/drivers/mtd/spi-nor/micron-st.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/spi-nor/micron-st.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/spi-nor/micron-st.c 2024-11-24 20:19:38.178228836 -0500 @@ -8,10 +8,123 @@ #include "core.h" @@ -289797,7 +295738,7 @@ diff -Naur --no-dereference a/drivers/mtd/spi-nor/micron-st.c b/drivers/mtd/spi- SPI_NOR_4B_OPCODES) }, diff -Naur --no-dereference a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/sfdp.c --- a/drivers/mtd/spi-nor/sfdp.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/spi-nor/sfdp.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/spi-nor/sfdp.c 2024-11-24 20:19:38.178228836 -0500 @@ -4,6 +4,7 @@ * Copyright (C) 2014, Freescale Semiconductor, Inc. */ @@ -290018,7 +295959,7 @@ diff -Naur --no-dereference a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/s } diff -Naur --no-dereference a/drivers/mtd/spi-nor/sfdp.h b/drivers/mtd/spi-nor/sfdp.h --- a/drivers/mtd/spi-nor/sfdp.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/spi-nor/sfdp.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/spi-nor/sfdp.h 2024-11-24 20:19:38.178228836 -0500 @@ -90,6 +90,14 @@ #define BFPT_DWORD15_QER_SR2_BIT1_NO_RD (0x4UL << 20) #define BFPT_DWORD15_QER_SR2_BIT1 (0x5UL << 20) /* Spansion */ @@ -290036,7 +295977,7 @@ diff -Naur --no-dereference a/drivers/mtd/spi-nor/sfdp.h b/drivers/mtd/spi-nor/s u8 minor; diff -Naur --no-dereference a/drivers/mtd/spi-nor/spansion.c b/drivers/mtd/spi-nor/spansion.c --- a/drivers/mtd/spi-nor/spansion.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/spi-nor/spansion.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/spi-nor/spansion.c 2024-11-24 20:19:38.178228836 -0500 @@ -8,6 +8,312 @@ #include "core.h" @@ -290382,7 +296323,7 @@ diff -Naur --no-dereference a/drivers/mtd/spi-nor/spansion.c b/drivers/mtd/spi-n static void spansion_post_sfdp_fixups(struct spi_nor *nor) diff -Naur --no-dereference a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c --- a/drivers/mtd/ubi/build.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/ubi/build.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/ubi/build.c 2024-11-24 20:19:38.179228838 -0500 @@ -624,10 +624,8 @@ ubi->bad_peb_limit = get_bad_peb_limit(ubi, max_beb_per1024); } @@ -290397,7 +296338,7 @@ diff -Naur --no-dereference a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c ubi->hdrs_min_io_size = ubi->mtd->writesize >> ubi->mtd->subpage_sft; diff -Naur --no-dereference a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c --- a/drivers/mtd/ubi/io.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mtd/ubi/io.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mtd/ubi/io.c 2024-11-24 20:19:38.179228838 -0500 @@ -535,7 +535,14 @@ return -EROFS; } @@ -290416,7 +296357,7 @@ diff -Naur --no-dereference a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c return err; diff -Naur --no-dereference a/drivers/mux/core.c b/drivers/mux/core.c --- a/drivers/mux/core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/mux/core.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/mux/core.c 2024-11-24 20:19:38.179228838 -0500 @@ -9,6 +9,7 @@ #define pr_fmt(fmt) "mux-core: " fmt @@ -290841,7 +296782,7 @@ diff -Naur --no-dereference a/drivers/mux/core.c b/drivers/mux/core.c * and mux controllers start to use it. diff -Naur --no-dereference a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c --- a/drivers/net/can/m_can/m_can.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/can/m_can/m_can.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/can/m_can/m_can.c 2024-11-24 20:19:38.179228838 -0500 @@ -21,6 +21,7 @@ #include #include @@ -290890,7 +296831,7 @@ diff -Naur --no-dereference a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_ diff -Naur --no-dereference a/drivers/net/can/m_can/m_can.h b/drivers/net/can/m_can/m_can.h --- a/drivers/net/can/m_can/m_can.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/can/m_can/m_can.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/can/m_can/m_can.h 2024-11-24 20:19:38.179228838 -0500 @@ -27,6 +27,7 @@ #include #include @@ -290909,7 +296850,7 @@ diff -Naur --no-dereference a/drivers/net/can/m_can/m_can.h b/drivers/net/can/m_ struct can_bittiming_const *data_timing; diff -Naur --no-dereference a/drivers/net/can/m_can/m_can_platform.c b/drivers/net/can/m_can/m_can_platform.c --- a/drivers/net/can/m_can/m_can_platform.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/can/m_can/m_can_platform.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/can/m_can/m_can_platform.c 2024-11-24 20:19:38.179228838 -0500 @@ -6,6 +6,7 @@ // Copyright (C) 2018-19 Texas Instruments Incorporated - http://www.ti.com/ @@ -290951,9 +296892,439 @@ diff -Naur --no-dereference a/drivers/net/can/m_can/m_can_platform.c b/drivers/n mcan_class->ops = &m_can_plat_ops; +diff -Naur --no-dereference a/drivers/net/ethernet/chelsio/cxgb/common.h b/drivers/net/ethernet/chelsio/cxgb/common.h +--- a/drivers/net/ethernet/chelsio/cxgb/common.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/net/ethernet/chelsio/cxgb/common.h 2024-11-24 20:19:38.179228838 -0500 +@@ -238,7 +238,6 @@ + int msg_enable; + u32 mmio_len; + +- struct work_struct ext_intr_handler_task; + struct adapter_params params; + + /* Terminator modules. */ +@@ -257,6 +256,7 @@ + + /* guards async operations */ + spinlock_t async_lock ____cacheline_aligned; ++ u32 pending_thread_intr; + u32 slow_intr_mask; + int t1powersave; + }; +@@ -334,8 +334,7 @@ + void t1_interrupts_disable(adapter_t *adapter); + void t1_interrupts_clear(adapter_t *adapter); + int t1_elmer0_ext_intr_handler(adapter_t *adapter); +-void t1_elmer0_ext_intr(adapter_t *adapter); +-int t1_slow_intr_handler(adapter_t *adapter); ++irqreturn_t t1_slow_intr_handler(adapter_t *adapter); + + int t1_link_start(struct cphy *phy, struct cmac *mac, struct link_config *lc); + const struct board_info *t1_get_board_info(unsigned int board_id); +@@ -347,7 +346,6 @@ + int t1_init_hw_modules(adapter_t *adapter); + int t1_init_sw_modules(adapter_t *adapter, const struct board_info *bi); + void t1_free_sw_modules(adapter_t *adapter); +-void t1_fatal_err(adapter_t *adapter); + void t1_link_changed(adapter_t *adapter, int port_id); + void t1_link_negotiated(adapter_t *adapter, int port_id, int link_stat, + int speed, int duplex, int pause); +diff -Naur --no-dereference a/drivers/net/ethernet/chelsio/cxgb/cxgb2.c b/drivers/net/ethernet/chelsio/cxgb/cxgb2.c +--- a/drivers/net/ethernet/chelsio/cxgb/cxgb2.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/net/ethernet/chelsio/cxgb/cxgb2.c 2024-11-24 20:19:38.179228838 -0500 +@@ -211,9 +211,10 @@ + t1_interrupts_clear(adapter); + + adapter->params.has_msi = !disable_msi && !pci_enable_msi(adapter->pdev); +- err = request_irq(adapter->pdev->irq, t1_interrupt, +- adapter->params.has_msi ? 0 : IRQF_SHARED, +- adapter->name, adapter); ++ err = request_threaded_irq(adapter->pdev->irq, t1_interrupt, ++ t1_interrupt_thread, ++ adapter->params.has_msi ? 0 : IRQF_SHARED, ++ adapter->name, adapter); + if (err) { + if (adapter->params.has_msi) + pci_disable_msi(adapter->pdev); +@@ -916,51 +917,6 @@ + spin_unlock(&adapter->work_lock); + } + +-/* +- * Processes elmer0 external interrupts in process context. +- */ +-static void ext_intr_task(struct work_struct *work) +-{ +- struct adapter *adapter = +- container_of(work, struct adapter, ext_intr_handler_task); +- +- t1_elmer0_ext_intr_handler(adapter); +- +- /* Now reenable external interrupts */ +- spin_lock_irq(&adapter->async_lock); +- adapter->slow_intr_mask |= F_PL_INTR_EXT; +- writel(F_PL_INTR_EXT, adapter->regs + A_PL_CAUSE); +- writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA, +- adapter->regs + A_PL_ENABLE); +- spin_unlock_irq(&adapter->async_lock); +-} +- +-/* +- * Interrupt-context handler for elmer0 external interrupts. +- */ +-void t1_elmer0_ext_intr(struct adapter *adapter) +-{ +- /* +- * Schedule a task to handle external interrupts as we require +- * a process context. We disable EXT interrupts in the interim +- * and let the task reenable them when it's done. +- */ +- adapter->slow_intr_mask &= ~F_PL_INTR_EXT; +- writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA, +- adapter->regs + A_PL_ENABLE); +- schedule_work(&adapter->ext_intr_handler_task); +-} +- +-void t1_fatal_err(struct adapter *adapter) +-{ +- if (adapter->flags & FULL_INIT_DONE) { +- t1_sge_stop(adapter->sge); +- t1_interrupts_disable(adapter); +- } +- pr_alert("%s: encountered fatal error, operation suspended\n", +- adapter->name); +-} +- + static const struct net_device_ops cxgb_netdev_ops = { + .ndo_open = cxgb_open, + .ndo_stop = cxgb_close, +@@ -1062,8 +1018,6 @@ + spin_lock_init(&adapter->async_lock); + spin_lock_init(&adapter->mac_lock); + +- INIT_WORK(&adapter->ext_intr_handler_task, +- ext_intr_task); + INIT_DELAYED_WORK(&adapter->stats_update_task, + mac_stats_task); + +diff -Naur --no-dereference a/drivers/net/ethernet/chelsio/cxgb/sge.c b/drivers/net/ethernet/chelsio/cxgb/sge.c +--- a/drivers/net/ethernet/chelsio/cxgb/sge.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/net/ethernet/chelsio/cxgb/sge.c 2024-11-24 20:19:38.179228838 -0500 +@@ -940,10 +940,11 @@ + /* + * SGE 'Error' interrupt handler + */ +-int t1_sge_intr_error_handler(struct sge *sge) ++bool t1_sge_intr_error_handler(struct sge *sge) + { + struct adapter *adapter = sge->adapter; + u32 cause = readl(adapter->regs + A_SG_INT_CAUSE); ++ bool wake = false; + + if (adapter->port[0].dev->hw_features & NETIF_F_TSO) + cause &= ~F_PACKET_TOO_BIG; +@@ -967,11 +968,14 @@ + sge->stats.pkt_mismatch++; + pr_alert("%s: SGE packet mismatch\n", adapter->name); + } +- if (cause & SGE_INT_FATAL) +- t1_fatal_err(adapter); ++ if (cause & SGE_INT_FATAL) { ++ t1_interrupts_disable(adapter); ++ adapter->pending_thread_intr |= F_PL_INTR_SGE_ERR; ++ wake = true; ++ } + + writel(cause, adapter->regs + A_SG_INT_CAUSE); +- return 0; ++ return wake; + } + + const struct sge_intr_counts *t1_sge_get_intr_counts(const struct sge *sge) +@@ -1619,11 +1623,46 @@ + return work_done; + } + ++irqreturn_t t1_interrupt_thread(int irq, void *data) ++{ ++ struct adapter *adapter = data; ++ u32 pending_thread_intr; ++ ++ spin_lock_irq(&adapter->async_lock); ++ pending_thread_intr = adapter->pending_thread_intr; ++ adapter->pending_thread_intr = 0; ++ spin_unlock_irq(&adapter->async_lock); ++ ++ if (!pending_thread_intr) ++ return IRQ_NONE; ++ ++ if (pending_thread_intr & F_PL_INTR_EXT) ++ t1_elmer0_ext_intr_handler(adapter); ++ ++ /* This error is fatal, interrupts remain off */ ++ if (pending_thread_intr & F_PL_INTR_SGE_ERR) { ++ pr_alert("%s: encountered fatal error, operation suspended\n", ++ adapter->name); ++ t1_sge_stop(adapter->sge); ++ return IRQ_HANDLED; ++ } ++ ++ spin_lock_irq(&adapter->async_lock); ++ adapter->slow_intr_mask |= F_PL_INTR_EXT; ++ ++ writel(F_PL_INTR_EXT, adapter->regs + A_PL_CAUSE); ++ writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA, ++ adapter->regs + A_PL_ENABLE); ++ spin_unlock_irq(&adapter->async_lock); ++ ++ return IRQ_HANDLED; ++} ++ + irqreturn_t t1_interrupt(int irq, void *data) + { + struct adapter *adapter = data; + struct sge *sge = adapter->sge; +- int handled; ++ irqreturn_t handled; + + if (likely(responses_pending(adapter))) { + writel(F_PL_INTR_SGE_DATA, adapter->regs + A_PL_CAUSE); +@@ -1645,10 +1684,10 @@ + handled = t1_slow_intr_handler(adapter); + spin_unlock(&adapter->async_lock); + +- if (!handled) ++ if (handled == IRQ_NONE) + sge->stats.unhandled_irqs++; + +- return IRQ_RETVAL(handled != 0); ++ return handled; + } + + /* +diff -Naur --no-dereference a/drivers/net/ethernet/chelsio/cxgb/sge.h b/drivers/net/ethernet/chelsio/cxgb/sge.h +--- a/drivers/net/ethernet/chelsio/cxgb/sge.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/net/ethernet/chelsio/cxgb/sge.h 2024-11-24 20:19:38.179228838 -0500 +@@ -74,6 +74,7 @@ + int t1_sge_configure(struct sge *, struct sge_params *); + int t1_sge_set_coalesce_params(struct sge *, struct sge_params *); + void t1_sge_destroy(struct sge *); ++irqreturn_t t1_interrupt_thread(int irq, void *data); + irqreturn_t t1_interrupt(int irq, void *cookie); + int t1_poll(struct napi_struct *, int); + +@@ -81,7 +82,7 @@ + void t1_vlan_mode(struct adapter *adapter, netdev_features_t features); + void t1_sge_start(struct sge *); + void t1_sge_stop(struct sge *); +-int t1_sge_intr_error_handler(struct sge *); ++bool t1_sge_intr_error_handler(struct sge *sge); + void t1_sge_intr_enable(struct sge *); + void t1_sge_intr_disable(struct sge *); + void t1_sge_intr_clear(struct sge *); +diff -Naur --no-dereference a/drivers/net/ethernet/chelsio/cxgb/subr.c b/drivers/net/ethernet/chelsio/cxgb/subr.c +--- a/drivers/net/ethernet/chelsio/cxgb/subr.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/net/ethernet/chelsio/cxgb/subr.c 2024-11-24 20:19:38.179228838 -0500 +@@ -170,7 +170,7 @@ + t1_link_negotiated(adapter, port_id, link_ok, speed, duplex, fc); + } + +-static int t1_pci_intr_handler(adapter_t *adapter) ++static bool t1_pci_intr_handler(adapter_t *adapter) + { + u32 pcix_cause; + +@@ -179,9 +179,13 @@ + if (pcix_cause) { + pci_write_config_dword(adapter->pdev, A_PCICFG_INTR_CAUSE, + pcix_cause); +- t1_fatal_err(adapter); /* PCI errors are fatal */ ++ /* PCI errors are fatal */ ++ t1_interrupts_disable(adapter); ++ adapter->pending_thread_intr |= F_PL_INTR_SGE_ERR; ++ pr_alert("%s: PCI error encountered.\n", adapter->name); ++ return true; + } +- return 0; ++ return false; + } + + #ifdef CONFIG_CHELSIO_T1_1G +@@ -210,13 +214,16 @@ + /* + * Slow path interrupt handler for FPGAs. + */ +-static int fpga_slow_intr(adapter_t *adapter) ++static irqreturn_t fpga_slow_intr(adapter_t *adapter) + { + u32 cause = readl(adapter->regs + A_PL_CAUSE); ++ irqreturn_t ret = IRQ_NONE; + + cause &= ~F_PL_INTR_SGE_DATA; +- if (cause & F_PL_INTR_SGE_ERR) +- t1_sge_intr_error_handler(adapter->sge); ++ if (cause & F_PL_INTR_SGE_ERR) { ++ if (t1_sge_intr_error_handler(adapter->sge)) ++ ret = IRQ_WAKE_THREAD; ++ } + + if (cause & FPGA_PCIX_INTERRUPT_GMAC) + fpga_phy_intr_handler(adapter); +@@ -231,14 +238,19 @@ + /* Clear TP interrupt */ + writel(tp_cause, adapter->regs + FPGA_TP_ADDR_INTERRUPT_CAUSE); + } +- if (cause & FPGA_PCIX_INTERRUPT_PCIX) +- t1_pci_intr_handler(adapter); ++ if (cause & FPGA_PCIX_INTERRUPT_PCIX) { ++ if (t1_pci_intr_handler(adapter)) ++ ret = IRQ_WAKE_THREAD; ++ } + + /* Clear the interrupts just processed. */ + if (cause) + writel(cause, adapter->regs + A_PL_CAUSE); + +- return cause != 0; ++ if (ret != IRQ_NONE) ++ return ret; ++ ++ return cause == 0 ? IRQ_NONE : IRQ_HANDLED; + } + #endif + +@@ -842,31 +854,45 @@ + /* + * Slow path interrupt handler for ASICs. + */ +-static int asic_slow_intr(adapter_t *adapter) ++static irqreturn_t asic_slow_intr(adapter_t *adapter) + { + u32 cause = readl(adapter->regs + A_PL_CAUSE); ++ irqreturn_t ret = IRQ_HANDLED; + + cause &= adapter->slow_intr_mask; + if (!cause) +- return 0; +- if (cause & F_PL_INTR_SGE_ERR) +- t1_sge_intr_error_handler(adapter->sge); ++ return IRQ_NONE; ++ if (cause & F_PL_INTR_SGE_ERR) { ++ if (t1_sge_intr_error_handler(adapter->sge)) ++ ret = IRQ_WAKE_THREAD; ++ } + if (cause & F_PL_INTR_TP) + t1_tp_intr_handler(adapter->tp); + if (cause & F_PL_INTR_ESPI) + t1_espi_intr_handler(adapter->espi); +- if (cause & F_PL_INTR_PCIX) +- t1_pci_intr_handler(adapter); +- if (cause & F_PL_INTR_EXT) +- t1_elmer0_ext_intr(adapter); ++ if (cause & F_PL_INTR_PCIX) { ++ if (t1_pci_intr_handler(adapter)) ++ ret = IRQ_WAKE_THREAD; ++ } ++ if (cause & F_PL_INTR_EXT) { ++ /* Wake the threaded interrupt to handle external interrupts as ++ * we require a process context. We disable EXT interrupts in ++ * the interim and let the thread reenable them when it's done. ++ */ ++ adapter->pending_thread_intr |= F_PL_INTR_EXT; ++ adapter->slow_intr_mask &= ~F_PL_INTR_EXT; ++ writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA, ++ adapter->regs + A_PL_ENABLE); ++ ret = IRQ_WAKE_THREAD; ++ } + + /* Clear the interrupts just processed. */ + writel(cause, adapter->regs + A_PL_CAUSE); + readl(adapter->regs + A_PL_CAUSE); /* flush writes */ +- return 1; ++ return ret; + } + +-int t1_slow_intr_handler(adapter_t *adapter) ++irqreturn_t t1_slow_intr_handler(adapter_t *adapter) + { + #ifdef CONFIG_CHELSIO_T1_1G + if (!t1_is_asic(adapter)) +diff -Naur --no-dereference a/drivers/net/ethernet/dlink/sundance.c b/drivers/net/ethernet/dlink/sundance.c +--- a/drivers/net/ethernet/dlink/sundance.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/net/ethernet/dlink/sundance.c 2024-11-24 20:19:38.180228840 -0500 +@@ -963,7 +963,7 @@ + unsigned long flag; + + netif_stop_queue(dev); +- tasklet_disable(&np->tx_tasklet); ++ tasklet_disable_in_atomic(&np->tx_tasklet); + iowrite16(0, ioaddr + IntrEnable); + printk(KERN_WARNING "%s: Transmit timed out, TxStatus %2.2x " + "TxFrameId %2.2x," +diff -Naur --no-dereference a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c +--- a/drivers/net/ethernet/jme.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/net/ethernet/jme.c 2024-11-24 20:19:38.180228840 -0500 +@@ -1265,9 +1265,9 @@ + jwrite32f(jme, JME_APMC, apmc); + } + +-static void jme_link_change_tasklet(struct tasklet_struct *t) ++static void jme_link_change_work(struct work_struct *work) + { +- struct jme_adapter *jme = from_tasklet(jme, t, linkch_task); ++ struct jme_adapter *jme = container_of(work, struct jme_adapter, linkch_task); + struct net_device *netdev = jme->dev; + int rc; + +@@ -1510,7 +1510,7 @@ + * all other events are ignored + */ + jwrite32(jme, JME_IEVE, intrstat); +- tasklet_schedule(&jme->linkch_task); ++ schedule_work(&jme->linkch_task); + goto out_reenable; + } + +@@ -1832,7 +1832,6 @@ + jme_clear_pm_disable_wol(jme); + JME_NAPI_ENABLE(jme); + +- tasklet_setup(&jme->linkch_task, jme_link_change_tasklet); + tasklet_setup(&jme->txclean_task, jme_tx_clean_tasklet); + tasklet_setup(&jme->rxclean_task, jme_rx_clean_tasklet); + tasklet_setup(&jme->rxempty_task, jme_rx_empty_tasklet); +@@ -1920,7 +1919,7 @@ + + JME_NAPI_DISABLE(jme); + +- tasklet_kill(&jme->linkch_task); ++ cancel_work_sync(&jme->linkch_task); + tasklet_kill(&jme->txclean_task); + tasklet_kill(&jme->rxclean_task); + tasklet_kill(&jme->rxempty_task); +@@ -3035,6 +3034,7 @@ + atomic_set(&jme->rx_empty, 1); + + tasklet_setup(&jme->pcc_task, jme_pcc_tasklet); ++ INIT_WORK(&jme->linkch_task, jme_link_change_work); + jme->dpi.cur = PCC_P1; + + jme->reg_ghc = 0; +diff -Naur --no-dereference a/drivers/net/ethernet/jme.h b/drivers/net/ethernet/jme.h +--- a/drivers/net/ethernet/jme.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/net/ethernet/jme.h 2024-11-24 20:19:38.180228840 -0500 +@@ -411,7 +411,7 @@ + struct tasklet_struct rxempty_task; + struct tasklet_struct rxclean_task; + struct tasklet_struct txclean_task; +- struct tasklet_struct linkch_task; ++ struct work_struct linkch_task; + struct tasklet_struct pcc_task; + unsigned long flags; + u32 reg_txcs; diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-ethtool.c b/drivers/net/ethernet/ti/am65-cpsw-ethtool.c --- a/drivers/net/ethernet/ti/am65-cpsw-ethtool.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/am65-cpsw-ethtool.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/am65-cpsw-ethtool.c 2024-11-24 20:19:38.180228840 -0500 @@ -6,7 +6,7 @@ */ @@ -291245,7 +297616,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-ethtool.c b/driv .get_link_ksettings = am65_cpsw_get_link_ksettings, diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c 2024-11-24 20:19:38.180228840 -0500 @@ -9,6 +9,7 @@ #include #include @@ -293776,7 +300147,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers .remove = am65_cpsw_nuss_remove, diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-nuss.h b/drivers/net/ethernet/ti/am65-cpsw-nuss.h --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.h 2024-11-24 20:19:38.180228840 -0500 @@ -6,11 +6,15 @@ #ifndef AM65_CPSW_NUSS_H_ #define AM65_CPSW_NUSS_H_ @@ -293969,7 +300340,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-nuss.h b/drivers #endif /* AM65_CPSW_NUSS_H_ */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-qos.c b/drivers/net/ethernet/ti/am65-cpsw-qos.c --- a/drivers/net/ethernet/ti/am65-cpsw-qos.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/am65-cpsw-qos.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/am65-cpsw-qos.c 2024-11-24 20:19:38.180228840 -0500 @@ -4,24 +4,42 @@ * * quality of service module includes: @@ -294961,7 +301332,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-qos.c b/drivers/ +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-qos.h b/drivers/net/ethernet/ti/am65-cpsw-qos.h --- a/drivers/net/ethernet/ti/am65-cpsw-qos.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/am65-cpsw-qos.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/am65-cpsw-qos.h 2024-11-24 20:19:38.181228841 -0500 @@ -7,6 +7,10 @@ #include @@ -295036,7 +301407,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-qos.h b/drivers/ #endif /* AM65_CPSW_QOS_H_ */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-switchdev.c b/drivers/net/ethernet/ti/am65-cpsw-switchdev.c --- a/drivers/net/ethernet/ti/am65-cpsw-switchdev.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/am65-cpsw-switchdev.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/am65-cpsw-switchdev.c 2024-11-24 20:19:38.181228841 -0500 @@ -0,0 +1,552 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Texas Instruments K3 AM65 Ethernet Switchdev Driver @@ -295592,7 +301963,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-switchdev.c b/dr +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-switchdev.h b/drivers/net/ethernet/ti/am65-cpsw-switchdev.h --- a/drivers/net/ethernet/ti/am65-cpsw-switchdev.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/am65-cpsw-switchdev.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/am65-cpsw-switchdev.h 2024-11-24 20:19:38.181228841 -0500 @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2020 Texas Instruments Incorporated - https://www.ti.com/ @@ -295630,7 +302001,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpsw-switchdev.h b/dr +#endif /* DRIVERS_NET_ETHERNET_TI_AM65_CPSW_SWITCHDEV_H_ */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpts.c b/drivers/net/ethernet/ti/am65-cpts.c --- a/drivers/net/ethernet/ti/am65-cpts.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/am65-cpts.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/am65-cpts.c 2024-11-24 20:19:38.181228841 -0500 @@ -175,7 +175,22 @@ u64 timestamp; u32 genf_enable; @@ -296019,7 +302390,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpts.c b/drivers/net/ struct device_node *node = pdev->dev.of_node; diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpts.h b/drivers/net/ethernet/ti/am65-cpts.h --- a/drivers/net/ethernet/ti/am65-cpts.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/am65-cpts.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/am65-cpts.h 2024-11-24 20:19:38.181228841 -0500 @@ -18,6 +18,7 @@ }; @@ -296059,7 +302430,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-cpts.h b/drivers/net/ #endif /* K3_CPTS_H_ */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-debugfs.c b/drivers/net/ethernet/ti/am65-debugfs.c --- a/drivers/net/ethernet/ti/am65-debugfs.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/am65-debugfs.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/am65-debugfs.c 2024-11-24 20:19:38.181228841 -0500 @@ -0,0 +1,198 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Texas Instruments K3 AM65 Ethernet debugfs submodule @@ -296261,7 +302632,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/am65-debugfs.c b/drivers/n +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/cpsw_ale.c --- a/drivers/net/ethernet/ti/cpsw_ale.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/cpsw_ale.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/cpsw_ale.c 2024-11-24 20:19:38.181228841 -0500 @@ -50,6 +50,8 @@ /* ALE_AGING_TIMER */ #define ALE_AGING_TIMER_MASK GENMASK(23, 0) @@ -296455,7 +302826,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/e { diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_ale.h b/drivers/net/ethernet/ti/cpsw_ale.h --- a/drivers/net/ethernet/ti/cpsw_ale.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/cpsw_ale.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/cpsw_ale.h 2024-11-24 20:19:38.181228841 -0500 @@ -120,11 +120,14 @@ int reg_mcast, int unreg_mcast); int cpsw_ale_del_vlan(struct cpsw_ale *ale, u16 vid, int port); @@ -296481,7 +302852,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_ale.h b/drivers/net/e diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c --- a/drivers/net/ethernet/ti/cpsw.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/cpsw.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/cpsw.c 2024-11-24 20:19:38.181228841 -0500 @@ -34,6 +34,8 @@ #include #include @@ -296603,7 +302974,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ether .ndo_set_rx_mode = cpsw_ndo_set_rx_mode, diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_new.c b/drivers/net/ethernet/ti/cpsw_new.c --- a/drivers/net/ethernet/ti/cpsw_new.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/cpsw_new.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/cpsw_new.c 2024-11-24 20:19:38.181228841 -0500 @@ -46,6 +46,8 @@ static int ale_ageout = CPSW_ALE_AGEOUT_DEFAULT; static int rx_packet_max = CPSW_MAX_PACKET_SIZE; @@ -296629,7 +303000,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_new.c b/drivers/net/e /* XDP prog can modify vlan tag, so can't use encap header */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_priv.c b/drivers/net/ethernet/ti/cpsw_priv.c --- a/drivers/net/ethernet/ti/cpsw_priv.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/cpsw_priv.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/cpsw_priv.c 2024-11-24 20:19:38.181228841 -0500 @@ -502,6 +502,7 @@ ale_params.ale_ageout = ale_ageout; ale_params.ale_ports = CPSW_ALE_PORTS_NUM; @@ -296713,7 +303084,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_priv.c b/drivers/net/ return ret; diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_priv.h b/drivers/net/ethernet/ti/cpsw_priv.h --- a/drivers/net/ethernet/ti/cpsw_priv.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/cpsw_priv.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/cpsw_priv.h 2024-11-24 20:19:38.181228841 -0500 @@ -381,6 +381,7 @@ u32 emac_port; struct cpsw_common *cpsw; @@ -296753,7 +303124,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_priv.h b/drivers/net/ #endif /* DRIVERS_NET_ETHERNET_TI_CPSW_PRIV_H_ */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_switchdev.c b/drivers/net/ethernet/ti/cpsw_switchdev.c --- a/drivers/net/ethernet/ti/cpsw_switchdev.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/cpsw_switchdev.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/cpsw_switchdev.c 2024-11-24 20:19:38.182228843 -0500 @@ -227,7 +227,7 @@ else port_mask = BIT(priv->emac_port); @@ -296765,7 +303136,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_switchdev.c b/drivers diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_switch_ioctl.c b/drivers/net/ethernet/ti/cpsw_switch_ioctl.c --- a/drivers/net/ethernet/ti/cpsw_switch_ioctl.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/cpsw_switch_ioctl.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/cpsw_switch_ioctl.c 2024-11-24 20:19:38.181228841 -0500 @@ -0,0 +1,271 @@ +// SPDX-License-Identifier: GPL-2.0 +/* CPSW switch-configuration using non-standard private ioctl SIOCSWITCHCONFIG @@ -297040,7 +303411,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/cpsw_switch_ioctl.c b/driv +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/davinci_mdio.c b/drivers/net/ethernet/ti/davinci_mdio.c --- a/drivers/net/ethernet/ti/davinci_mdio.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/davinci_mdio.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/davinci_mdio.c 2024-11-24 20:19:38.182228843 -0500 @@ -26,6 +26,8 @@ #include #include @@ -297540,7 +303911,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/davinci_mdio.c b/drivers/n { diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_classifier.c b/drivers/net/ethernet/ti/icssg_classifier.c --- a/drivers/net/ethernet/ti/icssg_classifier.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_classifier.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_classifier.c 2024-11-24 20:19:38.182228843 -0500 @@ -0,0 +1,471 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Texas Instruments ICSSG Ethernet Driver @@ -298015,7 +304386,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_classifier.c b/drive +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_config.c b/drivers/net/ethernet/ti/icssg_config.c --- a/drivers/net/ethernet/ti/icssg_config.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_config.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_config.c 2024-11-24 20:19:38.182228843 -0500 @@ -0,0 +1,846 @@ +// SPDX-License-Identifier: GPL-2.0 +/* ICSSG Ethernet driver @@ -298865,7 +305236,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_config.c b/drivers/n +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_config.h b/drivers/net/ethernet/ti/icssg_config.h --- a/drivers/net/ethernet/ti/icssg_config.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_config.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_config.h 2024-11-24 20:19:38.182228843 -0500 @@ -0,0 +1,291 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Texas Instruments ICSSG Ethernet driver @@ -299160,7 +305531,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_config.h b/drivers/n +#endif /* __NET_TI_ICSSG_CONFIG_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_ethtool.c b/drivers/net/ethernet/ti/icssg_ethtool.c --- a/drivers/net/ethernet/ti/icssg_ethtool.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_ethtool.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_ethtool.c 2024-11-24 20:19:38.182228843 -0500 @@ -0,0 +1,476 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Texas Instruments ICSSG Ethernet driver @@ -299640,7 +306011,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_ethtool.c b/drivers/ +}; diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_mii_cfg.c b/drivers/net/ethernet/ti/icssg_mii_cfg.c --- a/drivers/net/ethernet/ti/icssg_mii_cfg.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_mii_cfg.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_mii_cfg.c 2024-11-24 20:19:38.182228843 -0500 @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Texas Instruments ICSSG Ethernet Driver @@ -299765,7 +306136,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_mii_cfg.c b/drivers/ +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_prueth.c b/drivers/net/ethernet/ti/icssg_prueth.c --- a/drivers/net/ethernet/ti/icssg_prueth.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_prueth.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_prueth.c 2024-11-24 20:19:38.183228845 -0500 @@ -0,0 +1,3638 @@ +// SPDX-License-Identifier: GPL-2.0 + @@ -303407,7 +309778,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_prueth.c b/drivers/n +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_prueth.h b/drivers/net/ethernet/ti/icssg_prueth.h --- a/drivers/net/ethernet/ti/icssg_prueth.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_prueth.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_prueth.h 2024-11-24 20:19:38.183228845 -0500 @@ -0,0 +1,398 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Texas Instruments ICSSG Ethernet driver @@ -303809,7 +310180,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_prueth.h b/drivers/n +#endif /* __NET_TI_ICSSG_PRUETH_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_qos.c b/drivers/net/ethernet/ti/icssg_qos.c --- a/drivers/net/ethernet/ti/icssg_qos.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_qos.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_qos.c 2024-11-24 20:19:38.183228845 -0500 @@ -0,0 +1,476 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Texas Instruments ICSSG PRUETH QoS submodule @@ -304289,7 +310660,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_qos.c b/drivers/net/ +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_qos.h b/drivers/net/ethernet/ti/icssg_qos.h --- a/drivers/net/ethernet/ti/icssg_qos.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_qos.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_qos.h 2024-11-24 20:19:38.183228845 -0500 @@ -0,0 +1,136 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com/ @@ -304429,7 +310800,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_qos.h b/drivers/net/ +#endif /* __NET_TI_ICSSG_QOS_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_queues.c b/drivers/net/ethernet/ti/icssg_queues.c --- a/drivers/net/ethernet/ti/icssg_queues.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_queues.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_queues.c 2024-11-24 20:19:38.183228845 -0500 @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: GPL-2.0 +/* ICSSG Buffer queue helpers @@ -304483,7 +310854,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_queues.c b/drivers/n +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_switchdev.c b/drivers/net/ethernet/ti/icssg_switchdev.c --- a/drivers/net/ethernet/ti/icssg_switchdev.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_switchdev.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_switchdev.c 2024-11-24 20:19:38.183228845 -0500 @@ -0,0 +1,494 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Texas Instruments K3 ICSSG Ethernet Switchdev Driver @@ -304981,7 +311352,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_switchdev.c b/driver +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_switchdev.h b/drivers/net/ethernet/ti/icssg_switchdev.h --- a/drivers/net/ethernet/ti/icssg_switchdev.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_switchdev.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_switchdev.h 2024-11-24 20:19:38.183228845 -0500 @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2021 Texas Instruments Incorporated - https://www.ti.com/ @@ -304998,7 +311369,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_switchdev.h b/driver +#endif /* __NET_TI_ICSSG_SWITCHDEV_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_switch_map.h b/drivers/net/ethernet/ti/icssg_switch_map.h --- a/drivers/net/ethernet/ti/icssg_switch_map.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icssg_switch_map.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icssg_switch_map.h 2024-11-24 20:19:38.183228845 -0500 @@ -0,0 +1,183 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Texas Instruments ICSSG Ethernet driver @@ -305185,7 +311556,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icssg_switch_map.h b/drive +#endif /* __NET_TI_ICSSG_SWITCH_MAP_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_iep.c b/drivers/net/ethernet/ti/icss_iep.c --- a/drivers/net/ethernet/ti/icss_iep.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icss_iep.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icss_iep.c 2024-11-24 20:19:38.182228843 -0500 @@ -0,0 +1,1166 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Texas Instruments ICSSG Industrial Ethernet Peripheral (IEP) Driver @@ -306355,7 +312726,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_iep.c b/drivers/net/e +MODULE_AUTHOR("Roger Quadros "); diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_iep.h b/drivers/net/ethernet/ti/icss_iep.h --- a/drivers/net/ethernet/ti/icss_iep.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icss_iep.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icss_iep.h 2024-11-24 20:19:38.182228843 -0500 @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Texas Instruments ICSSG Industrial Ethernet Peripheral (IEP) Driver @@ -306399,7 +312770,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_iep.h b/drivers/net/e +#endif /* __NET_TI_ICSS_IEP_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_lre_firmware.h b/drivers/net/ethernet/ti/icss_lre_firmware.h --- a/drivers/net/ethernet/ti/icss_lre_firmware.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icss_lre_firmware.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icss_lre_firmware.h 2024-11-24 20:19:38.182228843 -0500 @@ -0,0 +1,136 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2017-2020 Texas Instruments Incorporated - http://www.ti.com @@ -306539,7 +312910,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_lre_firmware.h b/driv +#endif /* __ICSS_LRE_FIRMWARE_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_mii_rt.h b/drivers/net/ethernet/ti/icss_mii_rt.h --- a/drivers/net/ethernet/ti/icss_mii_rt.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icss_mii_rt.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icss_mii_rt.h 2024-11-24 20:19:38.182228843 -0500 @@ -0,0 +1,154 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + @@ -306697,7 +313068,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_mii_rt.h b/drivers/ne +#endif /* __NET_PRUSS_MII_RT_H__ */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_switch.h b/drivers/net/ethernet/ti/icss_switch.h --- a/drivers/net/ethernet/ti/icss_switch.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icss_switch.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icss_switch.h 2024-11-24 20:19:38.182228843 -0500 @@ -0,0 +1,336 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + @@ -307037,7 +313408,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_switch.h b/drivers/ne +#endif /* __ICSS_SWITCH_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_vlan_mcast_filter_mmap.h b/drivers/net/ethernet/ti/icss_vlan_mcast_filter_mmap.h --- a/drivers/net/ethernet/ti/icss_vlan_mcast_filter_mmap.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/icss_vlan_mcast_filter_mmap.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/icss_vlan_mcast_filter_mmap.h 2024-11-24 20:19:38.182228843 -0500 @@ -0,0 +1,100 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + @@ -307141,7 +313512,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/icss_vlan_mcast_filter_mma +#endif /* ICSS_MULTICAST_FILTER_MM_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/j721e-cpsw-virt-mac.c b/drivers/net/ethernet/ti/j721e-cpsw-virt-mac.c --- a/drivers/net/ethernet/ti/j721e-cpsw-virt-mac.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/j721e-cpsw-virt-mac.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/j721e-cpsw-virt-mac.c 2024-11-24 20:19:38.183228845 -0500 @@ -0,0 +1,1614 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Texas Instruments K3 J721 Virt Ethernet Switch MAC Driver @@ -308759,7 +315130,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/j721e-cpsw-virt-mac.c b/dr +MODULE_DESCRIPTION("TI J721E VIRT CPSW Ethernet mac driver"); diff -Naur --no-dereference a/drivers/net/ethernet/ti/Kconfig b/drivers/net/ethernet/ti/Kconfig --- a/drivers/net/ethernet/ti/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/Kconfig 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/Kconfig 2024-11-24 20:19:38.180228840 -0500 @@ -33,6 +33,7 @@ tristate "TI DaVinci MDIO Support" depends on ARCH_DAVINCI || ARCH_OMAP2PLUS || ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST @@ -308843,7 +315214,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/Kconfig b/drivers/net/ethe endif # NET_VENDOR_TI diff -Naur --no-dereference a/drivers/net/ethernet/ti/Makefile b/drivers/net/ethernet/ti/Makefile --- a/drivers/net/ethernet/ti/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ethernet/ti/Makefile 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/Makefile 2024-11-24 20:19:38.180228840 -0500 @@ -26,4 +26,17 @@ obj-$(CONFIG_TI_K3_AM65_CPSW_NUSS) += ti-am65-cpsw-nuss.o @@ -308864,7 +315235,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/Makefile b/drivers/net/eth +icssg-prueth-y := icssg_prueth.o icssg_classifier.o icssg_ethtool.o icssg_queues.o icssg_config.o k3-cppi-desc-pool.o icssg_mii_cfg.o icssg_switchdev.o icssg_qos.o diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_core.c b/drivers/net/ethernet/ti/prueth_core.c --- a/drivers/net/ethernet/ti/prueth_core.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/prueth_core.c 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/prueth_core.c 2024-11-24 20:19:38.183228845 -0500 @@ -0,0 +1,3526 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + @@ -312394,7 +318765,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_core.c b/drivers/ne +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_fdb_tbl.h b/drivers/net/ethernet/ti/prueth_fdb_tbl.h --- a/drivers/net/ethernet/ti/prueth_fdb_tbl.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/prueth_fdb_tbl.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ethernet/ti/prueth_fdb_tbl.h 2024-11-24 20:19:38.184228847 -0500 @@ -0,0 +1,67 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2019-2021 Texas Instruments Incorporated - https://www.ti.com */ @@ -312465,7 +318836,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_fdb_tbl.h b/drivers +#endif diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth.h b/drivers/net/ethernet/ti/prueth.h --- a/drivers/net/ethernet/ti/prueth.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/prueth.h 2024-08-28 19:44:05.636038098 -0400 ++++ b/drivers/net/ethernet/ti/prueth.h 2024-11-24 20:19:38.183228845 -0500 @@ -0,0 +1,491 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + @@ -312960,7 +319331,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth.h b/drivers/net/eth +#endif /* __NET_TI_PRUETH_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_lre.c b/drivers/net/ethernet/ti/prueth_lre.c --- a/drivers/net/ethernet/ti/prueth_lre.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/prueth_lre.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ethernet/ti/prueth_lre.c 2024-11-24 20:19:38.184228847 -0500 @@ -0,0 +1,1320 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Texas Instruments PRUETH hsr/prp Link Redunancy Entity (LRE) Driver. @@ -314284,7 +320655,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_lre.c b/drivers/net +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_lre.h b/drivers/net/ethernet/ti/prueth_lre.h --- a/drivers/net/ethernet/ti/prueth_lre.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/prueth_lre.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ethernet/ti/prueth_lre.h 2024-11-24 20:19:38.184228847 -0500 @@ -0,0 +1,201 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com @@ -314489,7 +320860,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_lre.h b/drivers/net +#endif /* __NET_TI_PRUETH_LRE_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_ptp.h b/drivers/net/ethernet/ti/prueth_ptp.h --- a/drivers/net/ethernet/ti/prueth_ptp.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/prueth_ptp.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ethernet/ti/prueth_ptp.h 2024-11-24 20:19:38.184228847 -0500 @@ -0,0 +1,85 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -314578,7 +320949,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_ptp.h b/drivers/net +#endif /* PRUETH_PTP_H */ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_qos.c b/drivers/net/ethernet/ti/prueth_qos.c --- a/drivers/net/ethernet/ti/prueth_qos.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/prueth_qos.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ethernet/ti/prueth_qos.c 2024-11-24 20:19:38.184228847 -0500 @@ -0,0 +1,214 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (C) 2020-2021 Texas Instruments Incorporated - https://www.ti.com @@ -314796,7 +321167,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_qos.c b/drivers/net +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_switch.c b/drivers/net/ethernet/ti/prueth_switch.c --- a/drivers/net/ethernet/ti/prueth_switch.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/prueth_switch.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ethernet/ti/prueth_switch.c 2024-11-24 20:19:38.184228847 -0500 @@ -0,0 +1,1341 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Texas Instruments PRUETH Switch Driver @@ -316141,7 +322512,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_switch.c b/drivers/ +} diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_switch.h b/drivers/net/ethernet/ti/prueth_switch.h --- a/drivers/net/ethernet/ti/prueth_switch.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ethernet/ti/prueth_switch.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ethernet/ti/prueth_switch.h 2024-11-24 20:19:38.184228847 -0500 @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2020-2021 Texas Instruments Incorporated - https://www.ti.com @@ -316203,7 +322574,7 @@ diff -Naur --no-dereference a/drivers/net/ethernet/ti/prueth_switch.h b/drivers/ +#endif /* __NET_TI_PRUETH_SWITCH_H */ diff -Naur --no-dereference a/drivers/net/ieee802154/bcfserial.c b/drivers/net/ieee802154/bcfserial.c --- a/drivers/net/ieee802154/bcfserial.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ieee802154/bcfserial.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ieee802154/bcfserial.c 2024-11-24 20:19:38.184228847 -0500 @@ -0,0 +1,680 @@ + +/* @@ -316887,7 +323258,7 @@ diff -Naur --no-dereference a/drivers/net/ieee802154/bcfserial.c b/drivers/net/i +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/net/ieee802154/Kconfig b/drivers/net/ieee802154/Kconfig --- a/drivers/net/ieee802154/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ieee802154/Kconfig 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ieee802154/Kconfig 2024-11-24 20:19:38.184228847 -0500 @@ -73,6 +73,15 @@ This driver can also be built as a module. To do so say M here. The module will be called 'atusb'. @@ -316919,7 +323290,7 @@ diff -Naur --no-dereference a/drivers/net/ieee802154/Kconfig b/drivers/net/ieee8 + * BeagleBoard.org BeagleConnect Freedom diff -Naur --no-dereference a/drivers/net/ieee802154/Makefile b/drivers/net/ieee802154/Makefile --- a/drivers/net/ieee802154/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/ieee802154/Makefile 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ieee802154/Makefile 2024-11-24 20:19:38.184228847 -0500 @@ -4,7 +4,9 @@ obj-$(CONFIG_IEEE802154_MRF24J40) += mrf24j40.o obj-$(CONFIG_IEEE802154_CC2520) += cc2520.o @@ -316932,7 +323303,7 @@ diff -Naur --no-dereference a/drivers/net/ieee802154/Makefile b/drivers/net/ieee +obj-$(CONFIG_IEEE802154_BCFSERIAL) += bcfserial.o diff -Naur --no-dereference a/drivers/net/ieee802154/wpanusb.c b/drivers/net/ieee802154/wpanusb.c --- a/drivers/net/ieee802154/wpanusb.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ieee802154/wpanusb.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ieee802154/wpanusb.c 2024-11-24 20:19:38.184228847 -0500 @@ -0,0 +1,778 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -317714,7 +324085,7 @@ diff -Naur --no-dereference a/drivers/net/ieee802154/wpanusb.c b/drivers/net/iee +MODULE_LICENSE("GPL"); diff -Naur --no-dereference a/drivers/net/ieee802154/wpanusb.h b/drivers/net/ieee802154/wpanusb.h --- a/drivers/net/ieee802154/wpanusb.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/ieee802154/wpanusb.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/ieee802154/wpanusb.h 2024-11-24 20:19:38.184228847 -0500 @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -317771,7 +324142,7 @@ diff -Naur --no-dereference a/drivers/net/ieee802154/wpanusb.h b/drivers/net/iee +} __packed; diff -Naur --no-dereference a/drivers/net/mdio/mdio-bitbang.c b/drivers/net/mdio/mdio-bitbang.c --- a/drivers/net/mdio/mdio-bitbang.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/mdio/mdio-bitbang.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/mdio/mdio-bitbang.c 2024-11-24 20:19:38.184228847 -0500 @@ -149,7 +149,7 @@ return dev_addr; } @@ -317802,7 +324173,7 @@ diff -Naur --no-dereference a/drivers/net/mdio/mdio-bitbang.c b/drivers/net/mdio { diff -Naur --no-dereference a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c --- a/drivers/net/mdio/of_mdio.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/mdio/of_mdio.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/mdio/of_mdio.c 2024-11-24 20:19:38.185228848 -0500 @@ -348,16 +348,7 @@ */ struct mdio_device *of_mdio_find_device(struct device_node *np) @@ -317823,7 +324194,7 @@ diff -Naur --no-dereference a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_m diff -Naur --no-dereference a/drivers/net/phy/dp83867.c b/drivers/net/phy/dp83867.c --- a/drivers/net/phy/dp83867.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/phy/dp83867.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/phy/dp83867.c 2024-11-24 20:19:38.185228848 -0500 @@ -41,6 +41,7 @@ #define DP83867_STRAP_STS1 0x006E #define DP83867_STRAP_STS2 0x006f @@ -317856,7 +324227,7 @@ diff -Naur --no-dereference a/drivers/net/phy/dp83867.c b/drivers/net/phy/dp8386 static void dp83867_link_change_notify(struct phy_device *phydev) diff -Naur --no-dereference a/drivers/net/phy/dp83869.c b/drivers/net/phy/dp83869.c --- a/drivers/net/phy/dp83869.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/phy/dp83869.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/phy/dp83869.c 2024-11-24 20:19:38.185228848 -0500 @@ -659,8 +659,11 @@ /* Below init sequence for each operational mode is defined in * section 9.4.8 of the datasheet. @@ -317872,7 +324243,7 @@ diff -Naur --no-dereference a/drivers/net/phy/dp83869.c b/drivers/net/phy/dp8386 diff -Naur --no-dereference a/drivers/net/phy/mscc/mscc.h b/drivers/net/phy/mscc/mscc.h --- a/drivers/net/phy/mscc/mscc.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/phy/mscc/mscc.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/phy/mscc/mscc.h 2024-11-24 20:19:38.185228848 -0500 @@ -191,6 +191,8 @@ #define MSCC_PHY_EXTENDED_INT_MS_EGR BIT(9) @@ -317884,7 +324255,7 @@ diff -Naur --no-dereference a/drivers/net/phy/mscc/mscc.h b/drivers/net/phy/mscc #define MSCC_PHY_SERDES_RX_VALID_CNT 28 diff -Naur --no-dereference a/drivers/net/phy/mscc/mscc_main.c b/drivers/net/phy/mscc/mscc_main.c --- a/drivers/net/phy/mscc/mscc_main.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/phy/mscc/mscc_main.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/phy/mscc/mscc_main.c 2024-11-24 20:19:38.185228848 -0500 @@ -1516,6 +1516,21 @@ vsc8531->addr = addr; } @@ -317921,7 +324292,7 @@ diff -Naur --no-dereference a/drivers/net/phy/mscc/mscc_main.c b/drivers/net/phy ret = vsc85xx_led_cntl_set(phydev, i, vsc8531->leds_mode[i]); diff -Naur --no-dereference a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c --- a/drivers/net/phy/phy_device.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/phy/phy_device.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/phy/phy_device.c 2024-11-24 20:19:38.185228848 -0500 @@ -9,6 +9,7 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt @@ -318051,7 +324422,7 @@ diff -Naur --no-dereference a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy * diff -Naur --no-dereference a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c --- a/drivers/net/phy/phylink.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/phy/phylink.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/phy/phylink.c 2024-11-24 20:19:38.185228848 -0500 @@ -5,6 +5,7 @@ * * Copyright (C) 2015 Russell King @@ -318544,9 +324915,21 @@ diff -Naur --no-dereference a/drivers/net/phy/phylink.c b/drivers/net/phy/phylin } /* The Broadcom BCM84881 in the Methode DM7052 is unable to provide a SGMII +diff -Naur --no-dereference a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c +--- a/drivers/net/wireless/ath/ath9k/beacon.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/net/wireless/ath/ath9k/beacon.c 2024-11-24 20:19:38.185228848 -0500 +@@ -251,7 +251,7 @@ + int first_slot = ATH_BCBUF; + int slot; + +- tasklet_disable(&sc->bcon_tasklet); ++ tasklet_disable_in_atomic(&sc->bcon_tasklet); + + /* Find first taken slot. */ + for (slot = 0; slot < ATH_BCBUF; slot++) { diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c 2024-11-24 20:19:38.186228850 -0500 @@ -87,6 +87,8 @@ * plus any space that might be needed * for bus alignment padding. @@ -318577,7 +324960,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/b fail: diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c 2024-11-24 20:19:38.186228850 -0500 @@ -36,6 +36,7 @@ #include "sdio.h" #include "core.h" @@ -318716,7 +325099,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/b void brcmf_sdio_exit(void) diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio.c 2024-11-24 20:19:38.186228850 -0500 @@ -0,0 +1,326 @@ +// SPDX-License-Identifier: ISC + @@ -319046,7 +325429,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/b +EXPORT_SYMBOL(brcmf_bus_reset_bt_use_count); diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bt_shared_sdio.h 2024-11-24 20:19:38.186228850 -0500 @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: ISC */ +/* Copyright 2019, Cypress Semiconductor Corporation or a subsidiary of @@ -319093,7 +325476,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/b +#endif /* CONFIG_BRCMFMAC_BT_SHARED_SDIO */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h 2024-11-24 20:19:38.186228850 -0500 @@ -7,6 +7,7 @@ #define BRCMFMAC_BUS_H @@ -319200,7 +325583,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/b #endif /* BRCMFMAC_BUS_H */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c 2024-11-24 20:19:38.186228850 -0500 @@ -39,6 +39,7 @@ #define RSN_OUI "\x00\x0F\xAC" /* RSN OUI */ #define WME_OUI_TYPE 2 @@ -322545,7 +328928,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/c */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h 2024-11-24 20:19:38.186228850 -0500 @@ -92,6 +92,15 @@ #define BRCMF_VIF_EVENT_TIMEOUT msecs_to_jiffies(1500) @@ -322658,7 +329041,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/c #endif /* BRCMFMAC_CFG80211_H */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c 2024-11-24 20:19:38.186228850 -0500 @@ -213,6 +213,50 @@ #define ARMCR4_BSZ_MASK 0x3f #define ARMCR4_BSZ_MULT 8192 @@ -323129,7 +329512,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/c +} diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h 2024-11-24 20:19:38.187228852 -0500 @@ -8,7 +8,12 @@ #include @@ -323216,7 +329599,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/c #endif /* BRCMF_AXIDMP_H */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c 2024-11-24 20:19:38.187228852 -0500 @@ -20,6 +20,12 @@ #include "of.h" #include "firmware.h" @@ -323426,7 +329809,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/c } diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h 2024-11-24 20:19:38.187228852 -0500 @@ -37,7 +37,10 @@ * @feature_disable: Feature_disable bitmask. * @fcmode: FWS flow control. @@ -323451,7 +329834,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/c union { diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c 2024-11-24 20:19:38.187228852 -0500 @@ -5,6 +5,7 @@ #include @@ -323925,7 +330308,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/c +} diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h 2024-11-24 20:19:38.187228852 -0500 @@ -12,6 +12,7 @@ #include @@ -323997,7 +330380,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/c #endif /* BRCMFMAC_CORE_H */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c 2024-11-24 20:19:38.187228852 -0500 @@ -14,6 +14,82 @@ #include "fweh.h" #include "debug.h" @@ -324097,7 +330480,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/d return drvr->wiphy->debugfsdir; diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h 2024-11-24 20:19:38.187228852 -0500 @@ -29,6 +29,7 @@ #define BRCMF_MSGBUF_VAL 0x00040000 #define BRCMF_PCIE_VAL 0x00080000 @@ -324153,7 +330536,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/d #endif /* BRCMFMAC_DEBUG_H */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c 2024-11-24 20:19:38.187228852 -0500 @@ -40,18 +40,6 @@ BRCM_CC_43340_CHIP_ID, 2, "pov-tab-p1006w-data" }; @@ -324219,7 +330602,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/d diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c 2024-11-24 20:19:38.187228852 -0500 @@ -16,7 +16,6 @@ #include "feature.h" #include "common.h" @@ -324271,7 +330654,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/f err = brcmf_fil_iovar_data_get(ifp, "pfn_macaddr", &pfn_mac, diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h 2024-11-24 20:19:38.187228852 -0500 @@ -29,6 +29,9 @@ * DOT11H: firmware supports 802.11h * SAE: simultaneous authentication of equals @@ -324298,7 +330681,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/f * Quirks: diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c 2024-11-24 20:19:38.187228852 -0500 @@ -207,8 +207,6 @@ size = BRCMF_FW_MAX_NVRAM_SIZE; else @@ -324374,7 +330757,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/f mapping_table[i].revmask & BIT(chiprev)) diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h 2024-11-24 20:19:38.187228852 -0500 @@ -11,6 +11,8 @@ #define BRCMF_FW_DEFAULT_PATH "brcm/" @@ -324413,7 +330796,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/f struct brcmf_fw_item { diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c 2024-11-24 20:19:38.187228852 -0500 @@ -419,7 +419,6 @@ flowid = flow->hash[i].flowid; if (flow->rings[flowid]->status != RING_OPEN) @@ -324436,7 +330819,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/f diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c 2024-11-24 20:19:38.187228852 -0500 @@ -228,10 +228,6 @@ brcmf_fweh_event_name(event->code), event->code, event->emsg.ifidx, event->emsg.bsscfgidx, @@ -324499,7 +330882,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/f diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h 2024-11-24 20:19:38.187228852 -0500 @@ -90,7 +90,13 @@ BRCMF_ENUM_DEF(FIFO_CREDIT_MAP, 74) \ BRCMF_ENUM_DEF(ACTION_FRAME_RX, 75) \ @@ -324555,7 +330938,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/f void *data); diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.h 2024-11-24 20:19:38.187228852 -0500 @@ -71,6 +71,7 @@ #define BRCMF_C_SCB_DEAUTHENTICATE_FOR_REASON 201 #define BRCMF_C_SET_ASSOC_PREFER 205 @@ -324576,7 +330959,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/f s32 brcmf_fil_cmd_int_set(struct brcmf_if *ifp, u32 cmd, u32 data); diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h 2024-11-24 20:19:38.188228854 -0500 @@ -59,6 +59,8 @@ #define BRCMF_SCANTYPE_PASSIVE 1 @@ -324710,7 +331093,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/f #endif /* FWIL_TYPES_H_ */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c 2024-11-24 20:19:38.188228854 -0500 @@ -502,6 +502,9 @@ bool creditmap_received; u8 mode; @@ -324837,7 +331220,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/f void brcmf_fws_bus_blocked(struct brcmf_pub *drvr, bool flow_blocked) diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h 2024-11-24 20:19:38.188228854 -0500 @@ -40,7 +40,8 @@ void brcmf_fws_reset_interface(struct brcmf_if *ifp); void brcmf_fws_add_interface(struct brcmf_if *ifp); @@ -324850,7 +331233,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/f diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Kconfig b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Kconfig --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Kconfig 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Kconfig 2024-11-24 20:19:38.186228850 -0500 @@ -48,3 +48,10 @@ IEEE802.11ac embedded FullMAC WLAN driver. Say Y if you want to use the driver for an PCIE wireless card. @@ -324864,7 +331247,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/K + between Cypress BT and WiFi host drivers. diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile 2024-11-24 20:19:38.186228850 -0500 @@ -46,3 +46,5 @@ of.o brcmfmac-$(CONFIG_DMI) += \ @@ -324873,7 +331256,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/M + bt_shared_sdio.o diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c 2024-11-24 20:19:38.188228854 -0500 @@ -11,6 +11,7 @@ #include #include @@ -325109,7 +331492,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/m if (drvr->bus_if->state != BRCMF_BUS_UP) { diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h 2024-11-24 20:19:38.188228854 -0500 @@ -39,5 +39,6 @@ } static inline void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr) {} @@ -325119,7 +331502,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/m #endif /* BRCMFMAC_MSGBUF_H */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c 2024-11-24 20:19:38.188228854 -0500 @@ -19,7 +19,8 @@ struct device_node *root, *np = dev->of_node; int irq; @@ -325150,7 +331533,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/o if (!of_find_property(np, "interrupts", NULL)) diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c 2024-11-24 20:19:38.188228854 -0500 @@ -63,6 +63,7 @@ #define P2P_AF_TX_MAX_RETRY 5 #define P2P_AF_MAX_WAIT_TIME msecs_to_jiffies(2000) @@ -325671,7 +332054,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p err_ptr = brcmf_p2p_create_p2pdev(p2p, NULL, NULL); diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h 2024-11-24 20:19:38.188228854 -0500 @@ -87,7 +87,7 @@ struct work_struct afx_work; struct completion act_frm_scan; @@ -325702,7 +332085,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p s32 brcmf_p2p_notify_rx_mgmt_p2p_probereq(struct brcmf_if *ifp, diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c 2024-11-24 20:19:38.188228854 -0500 @@ -12,7 +12,8 @@ #include #include @@ -327362,7 +333745,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p brcmf_dbg(PCIE, "Enter\n"); diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.h 2024-11-24 20:19:38.188228854 -0500 @@ -11,4 +11,9 @@ struct brcmf_pciedev_info *devinfo; }; @@ -327375,7 +333758,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p #endif /* BRCMFMAC_PCIE_H */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c 2024-11-24 20:19:38.188228854 -0500 @@ -3,6 +3,7 @@ * Copyright (c) 2010 Broadcom Corporation */ @@ -328345,7 +334728,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/s +} diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h 2024-11-24 20:19:38.189228855 -0500 @@ -28,12 +28,16 @@ #define REG_F0_REG_MASK 0x7FF #define REG_F1_MISC_MASK 0x1FFFF @@ -328494,7 +334877,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/s #endif /* BRCMFMAC_SDIO_H */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/trxhdr.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/trxhdr.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/trxhdr.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/trxhdr.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/trxhdr.h 2024-11-24 20:19:38.189228855 -0500 @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: ISC */ +/* Copyright (c) 2020 Cypress Semiconductor Corporation */ @@ -328536,7 +334919,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/t +#endif /* BRCMFMAC_TRXHDR_H */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c 2024-11-24 20:19:38.189228855 -0500 @@ -19,6 +19,7 @@ #include "core.h" #include "common.h" @@ -328650,7 +335033,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/u } diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.c 2024-11-24 20:19:38.189228855 -0500 @@ -64,6 +64,16 @@ *(char *)(dcmd_buf + len) = '\0'; } @@ -328803,7 +335186,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/v }; diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.h --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/vendor.h 2024-11-24 20:19:38.189228855 -0500 @@ -11,9 +11,15 @@ enum brcmf_vndr_cmds { BRCMF_VNDR_CMDS_UNSPEC, @@ -328854,7 +335237,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/v #endif /* _vendor_h_ */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c 2024-11-24 20:19:38.189228855 -0500 @@ -1221,7 +1221,6 @@ { struct brcms_info *wl; @@ -328883,7 +335266,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/m static int brcms_suspend(struct bcma_device *pdev) diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c b/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c --- a/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c 2024-11-24 20:19:38.189228855 -0500 @@ -87,10 +87,20 @@ 0, d11ac_bw(ch->bw)); @@ -328920,7 +335303,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/brcmutil/d break; diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h --- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h 2024-11-24 20:19:38.189228855 -0500 @@ -14,6 +14,7 @@ #define BRCM_USB_VENDOR_ID_LINKSYS 0x13b1 #define CY_USB_VENDOR_ID_CYPRESS 0x04b4 @@ -328970,7 +335353,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/include/br #define BCM4313_D11N2G_ID 0x4727 /* 4313 802.11n 2.4G device */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/include/brcmu_d11.h b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_d11.h --- a/drivers/net/wireless/broadcom/brcm80211/include/brcmu_d11.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_d11.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_d11.h 2024-11-24 20:19:38.189228855 -0500 @@ -82,11 +82,18 @@ #define BRCMU_CHSPEC_D11AC_BND_SHIFT 14 #define BRCMU_CHSPEC_D11AC_BND_2G 0x0000 @@ -328996,7 +335379,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/include/br BRCMU_CHAN_BW_20, diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/include/brcmu_utils.h b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_utils.h --- a/drivers/net/wireless/broadcom/brcm80211/include/brcmu_utils.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_utils.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_utils.h 2024-11-24 20:19:38.189228855 -0500 @@ -21,6 +21,19 @@ } \ } @@ -329019,7 +335402,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/include/br #define PKTQ_MAX_PREC 16 /* Maximum precedence levels */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h --- a/drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h 2024-11-24 20:19:38.189228855 -0500 @@ -92,7 +92,8 @@ #define WLC_BAND_AUTO 0 /* auto-select */ #define WLC_BAND_5G 1 /* 5 Ghz */ @@ -329060,7 +335443,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/include/br diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/include/chipcommon.h b/drivers/net/wireless/broadcom/brcm80211/include/chipcommon.h --- a/drivers/net/wireless/broadcom/brcm80211/include/chipcommon.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/include/chipcommon.h 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/include/chipcommon.h 2024-11-24 20:19:38.190228857 -0500 @@ -214,8 +214,197 @@ u32 PAD[3]; u32 retention_grpidx; /* 0x680 */ @@ -329270,7 +335653,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/include/ch #endif /* _SBCHIPC_H */ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/Kconfig b/drivers/net/wireless/broadcom/brcm80211/Kconfig --- a/drivers/net/wireless/broadcom/brcm80211/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/broadcom/brcm80211/Kconfig 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/broadcom/brcm80211/Kconfig 2024-11-24 20:19:38.185228848 -0500 @@ -34,6 +34,26 @@ config BRCMDBG bool "Broadcom driver debug functions" @@ -329301,7 +335684,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/broadcom/brcm80211/Kconfig b/ + Cypress BT and WiFi host drivers. diff -Naur --no-dereference a/drivers/net/wireless/ti/wl1251/cmd.c b/drivers/net/wireless/ti/wl1251/cmd.c --- a/drivers/net/wireless/ti/wl1251/cmd.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/ti/wl1251/cmd.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/ti/wl1251/cmd.c 2024-11-24 20:19:38.190228857 -0500 @@ -63,7 +63,7 @@ * * @wl: wl struct @@ -329391,7 +335774,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/ti/wl1251/cmd.c b/drivers/net diff -Naur --no-dereference a/drivers/net/wireless/ti/wl1251/debugfs.c b/drivers/net/wireless/ti/wl1251/debugfs.c --- a/drivers/net/wireless/ti/wl1251/debugfs.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/ti/wl1251/debugfs.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/ti/wl1251/debugfs.c 2024-11-24 20:19:38.190228857 -0500 @@ -39,7 +39,7 @@ #define DEBUGFS_ADD(name, parent) \ @@ -329403,7 +335786,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/ti/wl1251/debugfs.c b/drivers do { \ diff -Naur --no-dereference a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c --- a/drivers/net/wireless/ti/wlcore/main.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/ti/wlcore/main.c 2024-08-28 19:44:05.640038118 -0400 ++++ b/drivers/net/wireless/ti/wlcore/main.c 2024-11-24 20:19:38.190228857 -0500 @@ -2227,7 +2227,7 @@ switch (ieee80211_vif_type_p2p(vif)) { case NL80211_IFTYPE_P2P_CLIENT: @@ -329433,7 +335816,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/ti/wlcore/main.c b/drivers/ne diff -Naur --no-dereference a/drivers/net/wireless/ti/wlcore/spi.c b/drivers/net/wireless/ti/wlcore/spi.c --- a/drivers/net/wireless/ti/wlcore/spi.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/ti/wlcore/spi.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/net/wireless/ti/wlcore/spi.c 2024-11-24 20:19:38.190228857 -0500 @@ -391,7 +391,7 @@ return ret; } @@ -329453,7 +335836,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/ti/wlcore/spi.c b/drivers/net */ diff -Naur --no-dereference a/drivers/net/wireless/ti/wlcore/sysfs.c b/drivers/net/wireless/ti/wlcore/sysfs.c --- a/drivers/net/wireless/ti/wlcore/sysfs.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/net/wireless/ti/wlcore/sysfs.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/net/wireless/ti/wlcore/sysfs.c 2024-11-24 20:19:38.190228857 -0500 @@ -100,7 +100,7 @@ struct bin_attribute *bin_attr, char *buffer, loff_t pos, size_t count) @@ -329465,7 +335848,7 @@ diff -Naur --no-dereference a/drivers/net/wireless/ti/wlcore/sysfs.c b/drivers/n int ret; diff -Naur --no-dereference a/drivers/ntb/hw/epf/Kconfig b/drivers/ntb/hw/epf/Kconfig --- a/drivers/ntb/hw/epf/Kconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/ntb/hw/epf/Kconfig 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/ntb/hw/epf/Kconfig 2024-11-24 20:19:38.190228857 -0500 @@ -0,0 +1,6 @@ +config NTB_EPF + tristate "Generic EPF Non-Transparent Bridge support" @@ -329475,12 +335858,12 @@ diff -Naur --no-dereference a/drivers/ntb/hw/epf/Kconfig b/drivers/ntb/hw/epf/Kc + If unsure, say N. diff -Naur --no-dereference a/drivers/ntb/hw/epf/Makefile b/drivers/ntb/hw/epf/Makefile --- a/drivers/ntb/hw/epf/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/ntb/hw/epf/Makefile 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/ntb/hw/epf/Makefile 2024-11-24 20:19:38.191228859 -0500 @@ -0,0 +1 @@ +obj-$(CONFIG_NTB_EPF) += ntb_hw_epf.o diff -Naur --no-dereference a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_epf.c --- a/drivers/ntb/hw/epf/ntb_hw_epf.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/ntb/hw/epf/ntb_hw_epf.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/ntb/hw/epf/ntb_hw_epf.c 2024-11-24 20:19:38.191228859 -0500 @@ -0,0 +1,753 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -330237,7 +336620,7 @@ diff -Naur --no-dereference a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/e +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/ntb/hw/Kconfig b/drivers/ntb/hw/Kconfig --- a/drivers/ntb/hw/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/ntb/hw/Kconfig 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/ntb/hw/Kconfig 2024-11-24 20:19:38.190228857 -0500 @@ -2,4 +2,5 @@ source "drivers/ntb/hw/amd/Kconfig" source "drivers/ntb/hw/idt/Kconfig" @@ -330246,7 +336629,7 @@ diff -Naur --no-dereference a/drivers/ntb/hw/Kconfig b/drivers/ntb/hw/Kconfig source "drivers/ntb/hw/mscc/Kconfig" diff -Naur --no-dereference a/drivers/ntb/hw/Makefile b/drivers/ntb/hw/Makefile --- a/drivers/ntb/hw/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/ntb/hw/Makefile 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/ntb/hw/Makefile 2024-11-24 20:19:38.190228857 -0500 @@ -2,4 +2,5 @@ obj-$(CONFIG_NTB_AMD) += amd/ obj-$(CONFIG_NTB_IDT) += idt/ @@ -330255,7 +336638,7 @@ diff -Naur --no-dereference a/drivers/ntb/hw/Makefile b/drivers/ntb/hw/Makefile obj-$(CONFIG_NTB_SWITCHTEC) += mscc/ diff -Naur --no-dereference a/drivers/of/base.c b/drivers/of/base.c --- a/drivers/of/base.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/of/base.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/of/base.c 2024-11-24 20:19:38.191228859 -0500 @@ -166,6 +166,7 @@ void __init of_core_init(void) { @@ -330286,7 +336669,7 @@ diff -Naur --no-dereference a/drivers/of/base.c b/drivers/of/base.c static struct property *__of_find_property(const struct device_node *np, diff -Naur --no-dereference a/drivers/of/configfs.c b/drivers/of/configfs.c --- a/drivers/of/configfs.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/of/configfs.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/of/configfs.c 2024-11-24 20:19:38.191228859 -0500 @@ -0,0 +1,284 @@ +/* + * Configfs entries for device-tree @@ -330574,7 +336957,7 @@ diff -Naur --no-dereference a/drivers/of/configfs.c b/drivers/of/configfs.c +late_initcall(of_cfs_init); diff -Naur --no-dereference a/drivers/of/dynamic.c b/drivers/of/dynamic.c --- a/drivers/of/dynamic.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/of/dynamic.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/of/dynamic.c 2024-11-24 20:19:38.191228859 -0500 @@ -243,7 +243,7 @@ __of_attach_node(np); raw_spin_unlock_irqrestore(&devtree_lock, flags); @@ -330608,7 +336991,7 @@ diff -Naur --no-dereference a/drivers/of/dynamic.c b/drivers/of/dynamic.c /* ignore duplicate names */ diff -Naur --no-dereference a/drivers/of/irq.c b/drivers/of/irq.c --- a/drivers/of/irq.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/of/irq.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/of/irq.c 2024-11-24 20:19:38.191228859 -0500 @@ -675,6 +675,7 @@ return NULL; @@ -330619,7 +337002,7 @@ diff -Naur --no-dereference a/drivers/of/irq.c b/drivers/of/irq.c * of_msi_configure - Set the msi_domain field of a device diff -Naur --no-dereference a/drivers/of/Kconfig b/drivers/of/Kconfig --- a/drivers/of/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/of/Kconfig 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/of/Kconfig 2024-11-24 20:19:38.191228859 -0500 @@ -93,6 +93,14 @@ While this option is selected automatically when needed, you can enable it manually to improve device tree unit test coverage. @@ -330637,7 +337020,7 @@ diff -Naur --no-dereference a/drivers/of/Kconfig b/drivers/of/Kconfig diff -Naur --no-dereference a/drivers/of/kobj.c b/drivers/of/kobj.c --- a/drivers/of/kobj.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/of/kobj.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/of/kobj.c 2024-11-24 20:19:38.191228859 -0500 @@ -112,7 +112,7 @@ __of_add_property_sysfs(np, newprop); } @@ -330658,7 +337041,7 @@ diff -Naur --no-dereference a/drivers/of/kobj.c b/drivers/of/kobj.c diff -Naur --no-dereference a/drivers/of/Makefile b/drivers/of/Makefile --- a/drivers/of/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/of/Makefile 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/of/Makefile 2024-11-24 20:19:38.191228859 -0500 @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 obj-y = base.o device.o platform.o property.o @@ -330669,7 +337052,7 @@ diff -Naur --no-dereference a/drivers/of/Makefile b/drivers/of/Makefile obj-$(CONFIG_OF_EARLY_FLATTREE) += fdt_address.o diff -Naur --no-dereference a/drivers/of/of_private.h b/drivers/of/of_private.h --- a/drivers/of/of_private.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/of/of_private.h 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/of/of_private.h 2024-11-24 20:19:38.191228859 -0500 @@ -63,8 +63,8 @@ void __of_remove_property_sysfs(struct device_node *np, struct property *prop); void __of_update_property_sysfs(struct device_node *np, struct property *newprop, @@ -330723,7 +337106,7 @@ diff -Naur --no-dereference a/drivers/of/of_private.h b/drivers/of/of_private.h #endif /* _LINUX_OF_PRIVATE_H */ diff -Naur --no-dereference a/drivers/of/overlay.c b/drivers/of/overlay.c --- a/drivers/of/overlay.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/of/overlay.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/of/overlay.c 2024-11-24 20:19:38.191228859 -0500 @@ -20,9 +20,25 @@ #include #include @@ -331050,7 +337433,7 @@ diff -Naur --no-dereference a/drivers/of/overlay.c b/drivers/of/overlay.c +} diff -Naur --no-dereference a/drivers/of/unittest.c b/drivers/of/unittest.c --- a/drivers/of/unittest.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/of/unittest.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/of/unittest.c 2024-11-24 20:19:38.191228859 -0500 @@ -1400,7 +1400,7 @@ of_node_clear_flag(np, OF_DETACHED); raw_spin_unlock_irqrestore(&devtree_lock, flags); @@ -331080,7 +337463,7 @@ diff -Naur --no-dereference a/drivers/of/unittest.c b/drivers/of/unittest.c struct property *new_prop; diff -Naur --no-dereference a/drivers/pci/controller/cadence/Kconfig b/drivers/pci/controller/cadence/Kconfig --- a/drivers/pci/controller/cadence/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/controller/cadence/Kconfig 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/controller/cadence/Kconfig 2024-11-24 20:19:38.192228861 -0500 @@ -4,16 +4,16 @@ depends on PCI @@ -331125,7 +337508,7 @@ diff -Naur --no-dereference a/drivers/pci/controller/cadence/Kconfig b/drivers/p select PCIE_CADENCE_EP diff -Naur --no-dereference a/drivers/pci/controller/cadence/pcie-cadence.c b/drivers/pci/controller/cadence/pcie-cadence.c --- a/drivers/pci/controller/cadence/pcie-cadence.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/controller/cadence/pcie-cadence.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/controller/cadence/pcie-cadence.c 2024-11-24 20:19:38.192228861 -0500 @@ -4,6 +4,7 @@ // Author: Cyrille Pitchen @@ -331190,7 +337573,7 @@ diff -Naur --no-dereference a/drivers/pci/controller/cadence/pcie-cadence.c b/dr +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/pci/controller/cadence/pcie-cadence-ep.c b/drivers/pci/controller/cadence/pcie-cadence-ep.c --- a/drivers/pci/controller/cadence/pcie-cadence-ep.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/controller/cadence/pcie-cadence-ep.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/controller/cadence/pcie-cadence-ep.c 2024-11-24 20:19:38.192228861 -0500 @@ -5,6 +5,7 @@ #include @@ -331781,7 +338164,7 @@ diff -Naur --no-dereference a/drivers/pci/controller/cadence/pcie-cadence-ep.c b +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h --- a/drivers/pci/controller/cadence/pcie-cadence.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/controller/cadence/pcie-cadence.h 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/controller/cadence/pcie-cadence.h 2024-11-24 20:19:38.192228861 -0500 @@ -50,6 +50,10 @@ (CDNS_PCIE_LM_BASE + 0x0240 + (fn) * 0x0008) #define CDNS_PCIE_LM_EP_FUNC_BAR_CFG1(fn) \ @@ -331841,7 +338224,7 @@ diff -Naur --no-dereference a/drivers/pci/controller/cadence/pcie-cadence.h b/dr static inline int cdns_pcie_ep_setup(struct cdns_pcie_ep *ep) diff -Naur --no-dereference a/drivers/pci/controller/cadence/pcie-cadence-host.c b/drivers/pci/controller/cadence/pcie-cadence-host.c --- a/drivers/pci/controller/cadence/pcie-cadence-host.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/controller/cadence/pcie-cadence-host.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/controller/cadence/pcie-cadence-host.c 2024-11-24 20:19:38.192228861 -0500 @@ -5,6 +5,7 @@ #include @@ -331867,7 +338250,7 @@ diff -Naur --no-dereference a/drivers/pci/controller/cadence/pcie-cadence-host.c +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/pci/controller/cadence/pci-j721e.c b/drivers/pci/controller/cadence/pci-j721e.c --- a/drivers/pci/controller/cadence/pci-j721e.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/controller/cadence/pci-j721e.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/controller/cadence/pci-j721e.c 2024-11-24 20:19:38.192228861 -0500 @@ -6,12 +6,15 @@ * Author: Kishon Vijay Abraham I */ @@ -332348,7 +338731,7 @@ diff -Naur --no-dereference a/drivers/pci/controller/cadence/pci-j721e.c b/drive +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c --- a/drivers/pci/controller/dwc/pcie-designware-ep.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/controller/dwc/pcie-designware-ep.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/controller/dwc/pcie-designware-ep.c 2024-11-24 20:19:38.192228861 -0500 @@ -124,7 +124,7 @@ return __dw_pcie_ep_find_next_cap(ep, func_no, next_cap_ptr, cap); } @@ -332490,7 +338873,7 @@ diff -Naur --no-dereference a/drivers/pci/controller/dwc/pcie-designware-ep.c b/ } diff -Naur --no-dereference a/drivers/pci/controller/dwc/pci-keystone.c b/drivers/pci/controller/dwc/pci-keystone.c --- a/drivers/pci/controller/dwc/pci-keystone.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/controller/dwc/pci-keystone.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/controller/dwc/pci-keystone.c 2024-11-24 20:19:38.192228861 -0500 @@ -35,6 +35,11 @@ #define PCIE_DEVICEID_SHIFT 16 @@ -333001,7 +339384,7 @@ diff -Naur --no-dereference a/drivers/pci/controller/dwc/pci-keystone.c b/driver diff -Naur --no-dereference a/drivers/pci/controller/pcie-rcar-ep.c b/drivers/pci/controller/pcie-rcar-ep.c --- a/drivers/pci/controller/pcie-rcar-ep.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/controller/pcie-rcar-ep.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/controller/pcie-rcar-ep.c 2024-11-24 20:19:38.193228863 -0500 @@ -159,7 +159,7 @@ return 0; } @@ -333086,7 +339469,7 @@ diff -Naur --no-dereference a/drivers/pci/controller/pcie-rcar-ep.c b/drivers/pc } diff -Naur --no-dereference a/drivers/pci/controller/pcie-rockchip-ep.c b/drivers/pci/controller/pcie-rockchip-ep.c --- a/drivers/pci/controller/pcie-rockchip-ep.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/controller/pcie-rockchip-ep.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/controller/pcie-rockchip-ep.c 2024-11-24 20:19:38.193228863 -0500 @@ -122,7 +122,7 @@ ROCKCHIP_PCIE_AT_OB_REGION_CPU_ADDR1(r)); } @@ -333168,9 +339551,21 @@ diff -Naur --no-dereference a/drivers/pci/controller/pcie-rockchip-ep.c b/driver { return &rockchip_pcie_epc_features; } +diff -Naur --no-dereference a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c +--- a/drivers/pci/controller/pci-hyperv.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/pci/controller/pci-hyperv.c 2024-11-24 20:19:38.192228861 -0500 +@@ -1522,7 +1522,7 @@ + * Prevents hv_pci_onchannelcallback() from running concurrently + * in the tasklet. + */ +- tasklet_disable(&channel->callback_event); ++ tasklet_disable_in_atomic(&channel->callback_event); + + /* + * Since this function is called with IRQ locks held, can't diff -Naur --no-dereference a/drivers/pci/endpoint/functions/Kconfig b/drivers/pci/endpoint/functions/Kconfig --- a/drivers/pci/endpoint/functions/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/endpoint/functions/Kconfig 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/endpoint/functions/Kconfig 2024-11-24 20:19:38.193228863 -0500 @@ -12,3 +12,16 @@ for PCI Endpoint. @@ -333190,7 +339585,7 @@ diff -Naur --no-dereference a/drivers/pci/endpoint/functions/Kconfig b/drivers/p + If in doubt, say "N" to disable Endpoint NTB driver. diff -Naur --no-dereference a/drivers/pci/endpoint/functions/Makefile b/drivers/pci/endpoint/functions/Makefile --- a/drivers/pci/endpoint/functions/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/endpoint/functions/Makefile 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/endpoint/functions/Makefile 2024-11-24 20:19:38.193228863 -0500 @@ -4,3 +4,4 @@ # @@ -333198,7 +339593,7 @@ diff -Naur --no-dereference a/drivers/pci/endpoint/functions/Makefile b/drivers/ +obj-$(CONFIG_PCI_EPF_NTB) += pci-epf-ntb.o diff -Naur --no-dereference a/drivers/pci/endpoint/functions/pci-epf-ntb.c b/drivers/pci/endpoint/functions/pci-epf-ntb.c --- a/drivers/pci/endpoint/functions/pci-epf-ntb.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/pci/endpoint/functions/pci-epf-ntb.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/endpoint/functions/pci-epf-ntb.c 2024-11-24 20:19:38.193228863 -0500 @@ -0,0 +1,2145 @@ +// SPDX-License-Identifier: GPL-2.0 +/** @@ -335347,7 +341742,7 @@ diff -Naur --no-dereference a/drivers/pci/endpoint/functions/pci-epf-ntb.c b/dri +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c --- a/drivers/pci/endpoint/functions/pci-epf-test.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/endpoint/functions/pci-epf-test.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/endpoint/functions/pci-epf-test.c 2024-11-24 20:19:38.193228863 -0500 @@ -247,8 +247,8 @@ goto err; } @@ -335622,7 +342017,7 @@ diff -Naur --no-dereference a/drivers/pci/endpoint/functions/pci-epf-test.c b/dr return -EOPNOTSUPP; diff -Naur --no-dereference a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c --- a/drivers/pci/endpoint/pci-epc-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/endpoint/pci-epc-core.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/endpoint/pci-epc-core.c 2024-11-24 20:19:38.193228863 -0500 @@ -137,24 +137,29 @@ * @epc: the features supported by *this* EPC device will be returned * @func_no: the features supported by the EPC device specific to the @@ -336118,7 +342513,7 @@ diff -Naur --no-dereference a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/ } diff -Naur --no-dereference a/drivers/pci/endpoint/pci-ep-cfs.c b/drivers/pci/endpoint/pci-ep-cfs.c --- a/drivers/pci/endpoint/pci-ep-cfs.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/endpoint/pci-ep-cfs.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/endpoint/pci-ep-cfs.c 2024-11-24 20:19:38.193228863 -0500 @@ -21,6 +21,9 @@ struct pci_epf_group { @@ -336388,7 +342783,7 @@ diff -Naur --no-dereference a/drivers/pci/endpoint/pci-ep-cfs.c b/drivers/pci/en free_name: diff -Naur --no-dereference a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c --- a/drivers/pci/endpoint/pci-epf-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/endpoint/pci-epf-core.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/endpoint/pci-epf-core.c 2024-11-24 20:19:38.193228863 -0500 @@ -21,6 +21,38 @@ static const struct device_type pci_epf_type; @@ -336739,7 +343134,7 @@ diff -Naur --no-dereference a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/ struct pci_epf *epf = to_pci_epf(dev); diff -Naur --no-dereference a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c --- a/drivers/pci/host-bridge.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/pci/host-bridge.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/pci/host-bridge.c 2024-11-24 20:19:38.193228863 -0500 @@ -23,6 +23,7 @@ return to_pci_host_bridge(root_bus->bridge); @@ -336750,7 +343145,7 @@ diff -Naur --no-dereference a/drivers/pci/host-bridge.c b/drivers/pci/host-bridg { diff -Naur --no-dereference a/drivers/phy/cadence/cdns-dphy.c b/drivers/phy/cadence/cdns-dphy.c --- a/drivers/phy/cadence/cdns-dphy.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/phy/cadence/cdns-dphy.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/phy/cadence/cdns-dphy.c 2024-11-24 20:19:38.193228863 -0500 @@ -1,14 +1,18 @@ // SPDX-License-Identifier: GPL-2.0+ /* @@ -337386,7 +343781,7 @@ diff -Naur --no-dereference a/drivers/phy/cadence/cdns-dphy.c b/drivers/phy/cade MODULE_LICENSE("GPL"); diff -Naur --no-dereference a/drivers/phy/cadence/Kconfig b/drivers/phy/cadence/Kconfig --- a/drivers/phy/cadence/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/phy/cadence/Kconfig 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/phy/cadence/Kconfig 2024-11-24 20:19:38.193228863 -0500 @@ -7,6 +7,7 @@ tristate "Cadence Torrent PHY driver" depends on OF @@ -337405,7 +343800,7 @@ diff -Naur --no-dereference a/drivers/phy/cadence/Kconfig b/drivers/phy/cadence/ Enable this to support the Cadence Sierra PHY driver diff -Naur --no-dereference a/drivers/phy/cadence/phy-cadence-salvo.c b/drivers/phy/cadence/phy-cadence-salvo.c --- a/drivers/phy/cadence/phy-cadence-salvo.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/phy/cadence/phy-cadence-salvo.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/phy/cadence/phy-cadence-salvo.c 2024-11-24 20:19:38.193228863 -0500 @@ -263,7 +263,6 @@ struct phy_provider *phy_provider; struct device *dev = &pdev->dev; @@ -337426,7 +343821,7 @@ diff -Naur --no-dereference a/drivers/phy/cadence/phy-cadence-salvo.c b/drivers/ diff -Naur --no-dereference a/drivers/phy/cadence/phy-cadence-sierra.c b/drivers/phy/cadence/phy-cadence-sierra.c --- a/drivers/phy/cadence/phy-cadence-sierra.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/phy/cadence/phy-cadence-sierra.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/phy/cadence/phy-cadence-sierra.c 2024-11-24 20:19:38.194228864 -0500 @@ -7,6 +7,7 @@ * */ @@ -339891,7 +346286,7 @@ diff -Naur --no-dereference a/drivers/phy/cadence/phy-cadence-sierra.c b/drivers static const struct of_device_id cdns_sierra_id_table[] = { diff -Naur --no-dereference a/drivers/phy/cadence/phy-cadence-torrent.c b/drivers/phy/cadence/phy-cadence-torrent.c --- a/drivers/phy/cadence/phy-cadence-torrent.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/phy/cadence/phy-cadence-torrent.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/phy/cadence/phy-cadence-torrent.c 2024-11-24 20:19:38.194228864 -0500 @@ -7,7 +7,9 @@ */ @@ -345308,7 +351703,7 @@ diff -Naur --no-dereference a/drivers/phy/cadence/phy-cadence-torrent.c b/driver MODULE_DEVICE_TABLE(of, cdns_torrent_phy_of_match); diff -Naur --no-dereference a/drivers/phy/Kconfig b/drivers/phy/Kconfig --- a/drivers/phy/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/phy/Kconfig 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/phy/Kconfig 2024-11-24 20:19:38.193228863 -0500 @@ -61,6 +61,16 @@ interface to interact with USB GEN-II and USB 3.x PHY that is part of the Intel network SOC. @@ -345328,7 +351723,7 @@ diff -Naur --no-dereference a/drivers/phy/Kconfig b/drivers/phy/Kconfig source "drivers/phy/broadcom/Kconfig" diff -Naur --no-dereference a/drivers/phy/Makefile b/drivers/phy/Makefile --- a/drivers/phy/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/phy/Makefile 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/phy/Makefile 2024-11-24 20:19:38.193228863 -0500 @@ -5,6 +5,7 @@ obj-$(CONFIG_GENERIC_PHY) += phy-core.o @@ -345339,7 +351734,7 @@ diff -Naur --no-dereference a/drivers/phy/Makefile b/drivers/phy/Makefile obj-$(CONFIG_PHY_PISTACHIO_USB) += phy-pistachio-usb.o diff -Naur --no-dereference a/drivers/phy/phy-can-transceiver.c b/drivers/phy/phy-can-transceiver.c --- a/drivers/phy/phy-can-transceiver.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/phy/phy-can-transceiver.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/phy/phy-can-transceiver.c 2024-11-24 20:19:38.194228864 -0500 @@ -0,0 +1,168 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -345511,7 +351906,7 @@ diff -Naur --no-dereference a/drivers/phy/phy-can-transceiver.c b/drivers/phy/ph +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c --- a/drivers/phy/phy-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/phy/phy-core.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/phy/phy-core.c 2024-11-24 20:19:38.194228864 -0500 @@ -667,16 +667,18 @@ struct phy *phy; struct device_link *link; @@ -345540,7 +351935,7 @@ diff -Naur --no-dereference a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c if (IS_ERR(phy)) diff -Naur --no-dereference a/drivers/phy/ti/phy-gmii-sel.c b/drivers/phy/ti/phy-gmii-sel.c --- a/drivers/phy/ti/phy-gmii-sel.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/phy/ti/phy-gmii-sel.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/phy/ti/phy-gmii-sel.c 2024-11-24 20:19:38.194228864 -0500 @@ -22,6 +22,14 @@ #define AM33XX_GMII_SEL_MODE_RMII 1 #define AM33XX_GMII_SEL_MODE_RGMII 2 @@ -345751,7 +352146,7 @@ diff -Naur --no-dereference a/drivers/phy/ti/phy-gmii-sel.c b/drivers/phy/ti/phy if (IS_ERR(priv->regmap)) { diff -Naur --no-dereference a/drivers/phy/ti/phy-j721e-wiz.c b/drivers/phy/ti/phy-j721e-wiz.c --- a/drivers/phy/ti/phy-j721e-wiz.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/phy/ti/phy-j721e-wiz.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/phy/ti/phy-j721e-wiz.c 2024-11-24 20:19:38.194228864 -0500 @@ -7,12 +7,14 @@ */ @@ -346941,7 +353336,7 @@ diff -Naur --no-dereference a/drivers/phy/ti/phy-j721e-wiz.c b/drivers/phy/ti/ph serdes_pdev = of_platform_device_create(child_node, NULL, dev); diff -Naur --no-dereference a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig --- a/drivers/regulator/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/regulator/Kconfig 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/regulator/Kconfig 2024-11-24 20:19:38.194228864 -0500 @@ -1167,6 +1167,15 @@ voltage regulators. It supports software based voltage control for different voltage domains @@ -346960,7 +353355,7 @@ diff -Naur --no-dereference a/drivers/regulator/Kconfig b/drivers/regulator/Kcon depends on SPI diff -Naur --no-dereference a/drivers/regulator/Makefile b/drivers/regulator/Makefile --- a/drivers/regulator/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/regulator/Makefile 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/regulator/Makefile 2024-11-24 20:19:38.194228864 -0500 @@ -140,6 +140,7 @@ obj-$(CONFIG_REGULATOR_TPS65090) += tps65090-regulator.o obj-$(CONFIG_REGULATOR_TPS65217) += tps65217-regulator.o @@ -346971,7 +353366,7 @@ diff -Naur --no-dereference a/drivers/regulator/Makefile b/drivers/regulator/Mak obj-$(CONFIG_REGULATOR_TPS65910) += tps65910-regulator.o diff -Naur --no-dereference a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c --- a/drivers/regulator/palmas-regulator.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/regulator/palmas-regulator.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/regulator/palmas-regulator.c 2024-11-24 20:19:38.194228864 -0500 @@ -1016,6 +1016,7 @@ struct palmas_reg_init *reg_init; struct palmas_regs_info *rinfo; @@ -347014,7 +353409,7 @@ diff -Naur --no-dereference a/drivers/regulator/palmas-regulator.c b/drivers/reg desc->n_voltages = 1; diff -Naur --no-dereference a/drivers/regulator/tps65219-regulator.c b/drivers/regulator/tps65219-regulator.c --- a/drivers/regulator/tps65219-regulator.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/regulator/tps65219-regulator.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/regulator/tps65219-regulator.c 2024-11-24 20:19:38.195228866 -0500 @@ -0,0 +1,414 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -347432,7 +353827,7 @@ diff -Naur --no-dereference a/drivers/regulator/tps65219-regulator.c b/drivers/r +MODULE_LICENSE("GPL"); diff -Naur --no-dereference a/drivers/remoteproc/da8xx_remoteproc.c b/drivers/remoteproc/da8xx_remoteproc.c --- a/drivers/remoteproc/da8xx_remoteproc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/da8xx_remoteproc.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/da8xx_remoteproc.c 2024-11-24 20:19:38.195228866 -0500 @@ -223,7 +223,7 @@ res->start & DA8XX_RPROC_LOCAL_ADDRESS_MASK; drproc->mem[i].size = resource_size(res); @@ -347454,7 +353849,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/da8xx_remoteproc.c b/drivers/re free_rproc: diff -Naur --no-dereference a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig --- a/drivers/remoteproc/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/Kconfig 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/Kconfig 2024-11-24 20:19:38.195228866 -0500 @@ -118,6 +118,7 @@ config KEYSTONE_REMOTEPROC tristate "Keystone Remoteproc support" @@ -347504,7 +353899,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kc diff -Naur --no-dereference a/drivers/remoteproc/keystone_remoteproc.c b/drivers/remoteproc/keystone_remoteproc.c --- a/drivers/remoteproc/keystone_remoteproc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/keystone_remoteproc.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/keystone_remoteproc.c 2024-11-24 20:19:38.195228866 -0500 @@ -2,13 +2,15 @@ /* * TI Keystone DSP remoteproc driver @@ -348341,7 +354736,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/keystone_remoteproc.c b/drivers MODULE_DESCRIPTION("TI Keystone DSP Remoteproc driver"); diff -Naur --no-dereference a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile --- a/drivers/remoteproc/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/Makefile 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/Makefile 2024-11-24 20:19:38.195228866 -0500 @@ -18,6 +18,7 @@ obj-$(CONFIG_WKUP_M3_RPROC) += wkup_m3_rproc.o obj-$(CONFIG_DA8XX_REMOTEPROC) += da8xx_remoteproc.o @@ -348357,7 +354752,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/Makefile b/drivers/remoteproc/M +obj-$(CONFIG_TI_K3_M4_REMOTEPROC) += ti_k3_m4_remoteproc.o diff -Naur --no-dereference a/drivers/remoteproc/omap_remoteproc.c b/drivers/remoteproc/omap_remoteproc.c --- a/drivers/remoteproc/omap_remoteproc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/omap_remoteproc.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/omap_remoteproc.c 2024-11-24 20:19:38.195228866 -0500 @@ -703,6 +703,19 @@ pm_runtime_put_noidle(dev); pm_runtime_set_suspended(dev); @@ -348390,7 +354785,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/omap_remoteproc.c b/drivers/rem release_mem: diff -Naur --no-dereference a/drivers/remoteproc/omap_remoteproc.h b/drivers/remoteproc/omap_remoteproc.h --- a/drivers/remoteproc/omap_remoteproc.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/omap_remoteproc.h 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/omap_remoteproc.h 2024-11-24 20:19:38.195228866 -0500 @@ -59,7 +59,9 @@ RP_MBOX_SUSPEND_SYSTEM = 0xFFFFFF11, RP_MBOX_SUSPEND_ACK = 0xFFFFFF12, @@ -348404,7 +354799,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/omap_remoteproc.h b/drivers/rem #endif /* _OMAP_RPMSG_H */ diff -Naur --no-dereference a/drivers/remoteproc/pru_rproc.c b/drivers/remoteproc/pru_rproc.c --- a/drivers/remoteproc/pru_rproc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/remoteproc/pru_rproc.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/pru_rproc.c 2024-11-24 20:19:38.195228866 -0500 @@ -0,0 +1,1255 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -349663,7 +356058,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/pru_rproc.c b/drivers/remotepro +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/remoteproc/pru_rproc.h b/drivers/remoteproc/pru_rproc.h --- a/drivers/remoteproc/pru_rproc.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/remoteproc/pru_rproc.h 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/pru_rproc.h 2024-11-24 20:19:38.195228866 -0500 @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ +/* @@ -349713,7 +356108,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/pru_rproc.h b/drivers/remotepro +#endif /* _PRU_RPROC_H_ */ diff -Naur --no-dereference a/drivers/remoteproc/remoteproc_cdev.c b/drivers/remoteproc/remoteproc_cdev.c --- a/drivers/remoteproc/remoteproc_cdev.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/remoteproc_cdev.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/remoteproc_cdev.c 2024-11-24 20:19:38.195228866 -0500 @@ -32,15 +32,29 @@ return -EFAULT; @@ -349768,7 +356163,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/remoteproc_cdev.c b/drivers/rem static const struct file_operations rproc_fops = { diff -Naur --no-dereference a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c --- a/drivers/remoteproc/remoteproc_core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/remoteproc_core.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/remoteproc_core.c 2024-11-24 20:19:38.195228866 -0500 @@ -37,6 +37,9 @@ #include #include @@ -350720,7 +357115,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/remoteproc_core.c b/drivers/rem d = rproc->ops->panic(rproc); diff -Naur --no-dereference a/drivers/remoteproc/remoteproc_debugfs.c b/drivers/remoteproc/remoteproc_debugfs.c --- a/drivers/remoteproc/remoteproc_debugfs.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/remoteproc_debugfs.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/remoteproc_debugfs.c 2024-11-24 20:19:38.195228866 -0500 @@ -128,11 +128,14 @@ { struct rproc_debug_trace *data = filp->private_data; @@ -350740,7 +357135,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/remoteproc_debugfs.c b/drivers/ len = scnprintf(buf, sizeof(buf), "Trace %s not available\n", diff -Naur --no-dereference a/drivers/remoteproc/remoteproc_internal.h b/drivers/remoteproc/remoteproc_internal.h --- a/drivers/remoteproc/remoteproc_internal.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/remoteproc_internal.h 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/remoteproc_internal.h 2024-11-24 20:19:38.195228866 -0500 @@ -84,7 +84,6 @@ void rproc_free_vring(struct rproc_vring *rvring); int rproc_alloc_vring(struct rproc_vdev *rvdev, int i); @@ -350783,7 +357178,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/remoteproc_internal.h b/drivers bool rproc_u64_fit_in_size_t(u64 val) diff -Naur --no-dereference a/drivers/remoteproc/remoteproc_sysfs.c b/drivers/remoteproc/remoteproc_sysfs.c --- a/drivers/remoteproc/remoteproc_sysfs.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/remoteproc_sysfs.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/remoteproc_sysfs.c 2024-11-24 20:19:38.196228868 -0500 @@ -3,6 +3,7 @@ * Remote Processor Framework */ @@ -350951,7 +357346,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/remoteproc_sysfs.c b/drivers/re ret = -EINVAL; diff -Naur --no-dereference a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc/ti_k3_dsp_remoteproc.c --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c 2024-11-24 20:19:38.196228868 -0500 @@ -76,6 +76,7 @@ * @ti_sci_id: TI-SCI device identifier * @mbox: mailbox channel handle @@ -351283,7 +357678,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/driver MODULE_DEVICE_TABLE(of, k3_dsp_of_match); diff -Naur --no-dereference a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/ti_k3_m4_remoteproc.c --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c 2024-11-24 20:19:38.196228868 -0500 @@ -0,0 +1,965 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -352252,7 +358647,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers +MODULE_DESCRIPTION("TI K3 M4 Remoteproc driver"); diff -Naur --no-dereference a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/ti_k3_r5_remoteproc.c --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c 2024-11-24 20:19:38.196228868 -0500 @@ -38,6 +38,10 @@ #define PROC_BOOT_CFG_FLAG_R5_TCM_RSTBASE 0x00000800 #define PROC_BOOT_CFG_FLAG_R5_BTCM_EN 0x00001000 @@ -353122,7 +359517,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers MODULE_DEVICE_TABLE(of, k3_r5_of_match); diff -Naur --no-dereference a/drivers/remoteproc/wkup_m3_rproc.c b/drivers/remoteproc/wkup_m3_rproc.c --- a/drivers/remoteproc/wkup_m3_rproc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/remoteproc/wkup_m3_rproc.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/remoteproc/wkup_m3_rproc.c 2024-11-24 20:19:38.196228868 -0500 @@ -160,6 +160,7 @@ } @@ -353133,7 +359528,7 @@ diff -Naur --no-dereference a/drivers/remoteproc/wkup_m3_rproc.c b/drivers/remot wkupm3->rproc = rproc; diff -Naur --no-dereference a/drivers/rpmsg/Kconfig b/drivers/rpmsg/Kconfig --- a/drivers/rpmsg/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/rpmsg/Kconfig 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rpmsg/Kconfig 2024-11-24 20:19:38.197228870 -0500 @@ -64,4 +64,17 @@ select RPMSG select VIRTIO @@ -353154,7 +359549,7 @@ diff -Naur --no-dereference a/drivers/rpmsg/Kconfig b/drivers/rpmsg/Kconfig endmenu diff -Naur --no-dereference a/drivers/rpmsg/Makefile b/drivers/rpmsg/Makefile --- a/drivers/rpmsg/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/rpmsg/Makefile 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rpmsg/Makefile 2024-11-24 20:19:38.197228870 -0500 @@ -8,3 +8,4 @@ obj-$(CONFIG_RPMSG_QCOM_GLINK_SMEM) += qcom_glink_smem.o obj-$(CONFIG_RPMSG_QCOM_SMD) += qcom_smd.o @@ -353162,7 +359557,7 @@ diff -Naur --no-dereference a/drivers/rpmsg/Makefile b/drivers/rpmsg/Makefile +obj-$(CONFIG_RPMSG_PRU) += rpmsg_pru.o diff -Naur --no-dereference a/drivers/rpmsg/qcom_glink_native.c b/drivers/rpmsg/qcom_glink_native.c --- a/drivers/rpmsg/qcom_glink_native.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/rpmsg/qcom_glink_native.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rpmsg/qcom_glink_native.c 2024-11-24 20:19:38.197228870 -0500 @@ -1475,6 +1475,7 @@ strscpy_pad(chinfo.name, channel->name, sizeof(chinfo.name)); chinfo.src = RPMSG_ADDR_ANY; @@ -353173,7 +359568,7 @@ diff -Naur --no-dereference a/drivers/rpmsg/qcom_glink_native.c b/drivers/rpmsg/ } diff -Naur --no-dereference a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c --- a/drivers/rpmsg/qcom_smd.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/rpmsg/qcom_smd.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rpmsg/qcom_smd.c 2024-11-24 20:19:38.197228870 -0500 @@ -1307,6 +1307,7 @@ strscpy_pad(chinfo.name, channel->name, sizeof(chinfo.name)); chinfo.src = RPMSG_ADDR_ANY; @@ -353184,7 +359579,7 @@ diff -Naur --no-dereference a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd. spin_lock_irqsave(&edge->channels_lock, flags); diff -Naur --no-dereference a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c --- a/drivers/rpmsg/rpmsg_char.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/rpmsg/rpmsg_char.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rpmsg/rpmsg_char.c 2024-11-24 20:19:38.197228870 -0500 @@ -137,6 +137,8 @@ } @@ -353224,7 +359619,7 @@ diff -Naur --no-dereference a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_c static int rpmsg_char_init(void) diff -Naur --no-dereference a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c --- a/drivers/rpmsg/rpmsg_core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/rpmsg/rpmsg_core.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rpmsg/rpmsg_core.c 2024-11-24 20:19:38.197228870 -0500 @@ -283,6 +283,27 @@ } EXPORT_SYMBOL(rpmsg_trysend_offchannel); @@ -353271,7 +359666,7 @@ diff -Naur --no-dereference a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_c &dev_attr_src.attr, diff -Naur --no-dereference a/drivers/rpmsg/rpmsg_internal.h b/drivers/rpmsg/rpmsg_internal.h --- a/drivers/rpmsg/rpmsg_internal.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/rpmsg/rpmsg_internal.h 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rpmsg/rpmsg_internal.h 2024-11-24 20:19:38.197228870 -0500 @@ -47,6 +47,7 @@ * @trysendto: see @rpmsg_trysendto(), optional * @trysend_offchannel: see @rpmsg_trysend_offchannel(), optional @@ -353290,7 +359685,7 @@ diff -Naur --no-dereference a/drivers/rpmsg/rpmsg_internal.h b/drivers/rpmsg/rpm int rpmsg_register_device(struct rpmsg_device *rpdev); diff -Naur --no-dereference a/drivers/rpmsg/rpmsg_pru.c b/drivers/rpmsg/rpmsg_pru.c --- a/drivers/rpmsg/rpmsg_pru.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg/rpmsg_pru.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rpmsg/rpmsg_pru.c 2024-11-24 20:19:38.197228870 -0500 @@ -0,0 +1,351 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -353645,7 +360040,7 @@ diff -Naur --no-dereference a/drivers/rpmsg/rpmsg_pru.c b/drivers/rpmsg/rpmsg_pr +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c --- a/drivers/rpmsg/virtio_rpmsg_bus.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/rpmsg/virtio_rpmsg_bus.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rpmsg/virtio_rpmsg_bus.c 2024-11-24 20:19:38.197228870 -0500 @@ -112,6 +112,23 @@ } __packed; @@ -353829,7 +360224,7 @@ diff -Naur --no-dereference a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/v dev_err(dev, "rpmsg_destroy_channel failed: %d\n", ret); diff -Naur --no-dereference a/drivers/rpmsg-kdrv/Kconfig b/drivers/rpmsg-kdrv/Kconfig --- a/drivers/rpmsg-kdrv/Kconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/Kconfig 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/rpmsg-kdrv/Kconfig 2024-11-24 20:19:38.196228868 -0500 @@ -0,0 +1,48 @@ +# SPDX-License-Identifier: GPL-2.0 + @@ -353881,7 +360276,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/Kconfig b/drivers/rpmsg-kdrv/Kc +endmenu diff -Naur --no-dereference a/drivers/rpmsg-kdrv/Makefile b/drivers/rpmsg-kdrv/Makefile --- a/drivers/rpmsg-kdrv/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/Makefile 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/rpmsg-kdrv/Makefile 2024-11-24 20:19:38.196228868 -0500 @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0 +obj-$(CONFIG_RPMSG_KDRV) += rpmsg_kdrv.o @@ -353890,7 +360285,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/Makefile b/drivers/rpmsg-kdrv/M +obj-$(CONFIG_RPMSG_KDRV_ETH_SWITCH) += rpmsg_kdrv_switch.o diff -Naur --no-dereference a/drivers/rpmsg-kdrv/rpmsg_kdrv.c b/drivers/rpmsg-kdrv/rpmsg_kdrv.c --- a/drivers/rpmsg-kdrv/rpmsg_kdrv.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/rpmsg_kdrv.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/rpmsg-kdrv/rpmsg_kdrv.c 2024-11-24 20:19:38.196228868 -0500 @@ -0,0 +1,744 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -354638,7 +361033,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/rpmsg_kdrv.c b/drivers/rpmsg-kd +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/rpmsg-kdrv/rpmsg_kdrv_demo.c b/drivers/rpmsg-kdrv/rpmsg_kdrv_demo.c --- a/drivers/rpmsg-kdrv/rpmsg_kdrv_demo.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/rpmsg_kdrv_demo.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/rpmsg-kdrv/rpmsg_kdrv_demo.c 2024-11-24 20:19:38.196228868 -0500 @@ -0,0 +1,214 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -354856,7 +361251,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/rpmsg_kdrv_demo.c b/drivers/rpm +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/rpmsg-kdrv/rpmsg_kdrv_display.c b/drivers/rpmsg-kdrv/rpmsg_kdrv_display.c --- a/drivers/rpmsg-kdrv/rpmsg_kdrv_display.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/rpmsg_kdrv_display.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/rpmsg-kdrv/rpmsg_kdrv_display.c 2024-11-24 20:19:38.196228868 -0500 @@ -0,0 +1,473 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -355333,7 +361728,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/rpmsg_kdrv_display.c b/drivers/ +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/rpmsg-kdrv/rpmsg_kdrv_internal.h b/drivers/rpmsg-kdrv/rpmsg_kdrv_internal.h --- a/drivers/rpmsg-kdrv/rpmsg_kdrv_internal.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/rpmsg_kdrv_internal.h 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/rpmsg-kdrv/rpmsg_kdrv_internal.h 2024-11-24 20:19:38.196228868 -0500 @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -355385,7 +361780,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/rpmsg_kdrv_internal.h b/drivers +#endif diff -Naur --no-dereference a/drivers/rpmsg-kdrv/rpmsg_kdrv_switch.c b/drivers/rpmsg-kdrv/rpmsg_kdrv_switch.c --- a/drivers/rpmsg-kdrv/rpmsg_kdrv_switch.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/rpmsg_kdrv_switch.c 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/rpmsg-kdrv/rpmsg_kdrv_switch.c 2024-11-24 20:19:38.196228868 -0500 @@ -0,0 +1,977 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -356366,7 +362761,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/rpmsg_kdrv_switch.c b/drivers/r +MODULE_DESCRIPTION("TI J721E RPMSG KDRV Ethernet switch driver"); diff -Naur --no-dereference a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-common.h b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-common.h --- a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-common.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-common.h 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-common.h 2024-11-24 20:19:38.196228868 -0500 @@ -0,0 +1,80 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -356450,7 +362845,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-com +#endif diff -Naur --no-dereference a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-demo.h b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-demo.h --- a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-demo.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-demo.h 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-demo.h 2024-11-24 20:19:38.196228868 -0500 @@ -0,0 +1,78 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -356532,7 +362927,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-dem +#endif diff -Naur --no-dereference a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-display.h b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-display.h --- a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-display.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-display.h 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-display.h 2024-11-24 20:19:38.197228870 -0500 @@ -0,0 +1,223 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -356759,7 +363154,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-dis +#endif diff -Naur --no-dereference a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport.h b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport.h --- a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport.h 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport.h 2024-11-24 20:19:38.197228870 -0500 @@ -0,0 +1,83 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -356846,7 +363241,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport.h b +#endif diff -Naur --no-dereference a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-switch.h b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-switch.h --- a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-switch.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-switch.h 2024-08-28 19:44:05.644038139 -0400 ++++ b/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-switch.h 2024-11-24 20:19:38.197228870 -0500 @@ -0,0 +1,664 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -357514,7 +363909,7 @@ diff -Naur --no-dereference a/drivers/rpmsg-kdrv/shared/rpmsg-kdrv-transport-swi +#endif /* DRIVERS_RPMSG_KDRV_SHARED_RPMSG_KDRV_TRANSPORT_SWITCH_H_ */ diff -Naur --no-dereference a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig --- a/drivers/rtc/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/rtc/Kconfig 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rtc/Kconfig 2024-11-24 20:19:38.197228870 -0500 @@ -573,6 +573,16 @@ This driver can also be built as a module. If so, the module will be called rtc-tps65910. @@ -357552,7 +363947,7 @@ diff -Naur --no-dereference a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig config RTC_DRV_HID_SENSOR_TIME diff -Naur --no-dereference a/drivers/rtc/Makefile b/drivers/rtc/Makefile --- a/drivers/rtc/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/rtc/Makefile 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rtc/Makefile 2024-11-24 20:19:38.197228870 -0500 @@ -168,8 +168,10 @@ obj-$(CONFIG_RTC_DRV_SUNXI) += rtc-sunxi.o obj-$(CONFIG_RTC_DRV_TEGRA) += rtc-tegra.o @@ -357566,7 +363961,7 @@ diff -Naur --no-dereference a/drivers/rtc/Makefile b/drivers/rtc/Makefile obj-$(CONFIG_RTC_DRV_TX4939) += rtc-tx4939.o diff -Naur --no-dereference a/drivers/rtc/rtc-ti-k3.c b/drivers/rtc/rtc-ti-k3.c --- a/drivers/rtc/rtc-ti-k3.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rtc/rtc-ti-k3.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rtc/rtc-ti-k3.c 2024-11-24 20:19:38.197228870 -0500 @@ -0,0 +1,689 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -358259,7 +364654,7 @@ diff -Naur --no-dereference a/drivers/rtc/rtc-ti-k3.c b/drivers/rtc/rtc-ti-k3.c +MODULE_AUTHOR("Nishanth Menon"); diff -Naur --no-dereference a/drivers/rtc/rtc-tps6594x.c b/drivers/rtc/rtc-tps6594x.c --- a/drivers/rtc/rtc-tps6594x.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/rtc/rtc-tps6594x.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/rtc/rtc-tps6594x.c 2024-11-24 20:19:38.197228870 -0500 @@ -0,0 +1,181 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -358442,9 +364837,103 @@ diff -Naur --no-dereference a/drivers/rtc/rtc-tps6594x.c b/drivers/rtc/rtc-tps65 +MODULE_DESCRIPTION("TI TPS6594x series RTC driver"); +MODULE_AUTHOR("Keerthy J "); +MODULE_LICENSE("GPL"); +diff -Naur --no-dereference a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c +--- a/drivers/scsi/fcoe/fcoe.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/scsi/fcoe/fcoe.c 2024-11-24 20:19:38.197228870 -0500 +@@ -1452,11 +1452,11 @@ + static int fcoe_alloc_paged_crc_eof(struct sk_buff *skb, int tlen) + { + struct fcoe_percpu_s *fps; +- int rc; ++ int rc, cpu = get_cpu_light(); + +- fps = &get_cpu_var(fcoe_percpu); ++ fps = &per_cpu(fcoe_percpu, cpu); + rc = fcoe_get_paged_crc_eof(skb, tlen, fps); +- put_cpu_var(fcoe_percpu); ++ put_cpu_light(); + + return rc; + } +@@ -1641,11 +1641,11 @@ + return 0; + } + +- stats = per_cpu_ptr(lport->stats, get_cpu()); ++ stats = per_cpu_ptr(lport->stats, get_cpu_light()); + stats->InvalidCRCCount++; + if (stats->InvalidCRCCount < 5) + printk(KERN_WARNING "fcoe: dropping frame with CRC error\n"); +- put_cpu(); ++ put_cpu_light(); + return -EINVAL; + } + +@@ -1686,7 +1686,7 @@ + */ + hp = (struct fcoe_hdr *) skb_network_header(skb); + +- stats = per_cpu_ptr(lport->stats, get_cpu()); ++ stats = per_cpu_ptr(lport->stats, get_cpu_light()); + if (unlikely(FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER)) { + if (stats->ErrorFrames < 5) + printk(KERN_WARNING "fcoe: FCoE version " +@@ -1718,13 +1718,13 @@ + goto drop; + + if (!fcoe_filter_frames(lport, fp)) { +- put_cpu(); ++ put_cpu_light(); + fc_exch_recv(lport, fp); + return; + } + drop: + stats->ErrorFrames++; +- put_cpu(); ++ put_cpu_light(); + kfree_skb(skb); + } + +diff -Naur --no-dereference a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c +--- a/drivers/scsi/fcoe/fcoe_ctlr.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/scsi/fcoe/fcoe_ctlr.c 2024-11-24 20:19:38.198228872 -0500 +@@ -828,7 +828,7 @@ + + INIT_LIST_HEAD(&del_list); + +- stats = per_cpu_ptr(fip->lp->stats, get_cpu()); ++ stats = per_cpu_ptr(fip->lp->stats, get_cpu_light()); + + list_for_each_entry_safe(fcf, next, &fip->fcfs, list) { + deadline = fcf->time + fcf->fka_period + fcf->fka_period / 2; +@@ -864,7 +864,7 @@ + sel_time = fcf->time; + } + } +- put_cpu(); ++ put_cpu_light(); + + list_for_each_entry_safe(fcf, next, &del_list, list) { + /* Removes fcf from current list */ +diff -Naur --no-dereference a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c +--- a/drivers/scsi/libfc/fc_exch.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/scsi/libfc/fc_exch.c 2024-11-24 20:19:38.198228872 -0500 +@@ -826,10 +826,10 @@ + } + memset(ep, 0, sizeof(*ep)); + +- cpu = get_cpu(); ++ cpu = get_cpu_light(); + pool = per_cpu_ptr(mp->pool, cpu); + spin_lock_bh(&pool->lock); +- put_cpu(); ++ put_cpu_light(); + + /* peek cache of free slot */ + if (pool->left != FC_XID_UNKNOWN) { diff -Naur --no-dereference a/drivers/soc/qcom/wcnss_ctrl.c b/drivers/soc/qcom/wcnss_ctrl.c --- a/drivers/soc/qcom/wcnss_ctrl.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/soc/qcom/wcnss_ctrl.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/qcom/wcnss_ctrl.c 2024-11-24 20:19:38.198228872 -0500 @@ -276,6 +276,7 @@ strscpy(chinfo.name, name, sizeof(chinfo.name)); chinfo.src = RPMSG_ADDR_ANY; @@ -358455,7 +364944,7 @@ diff -Naur --no-dereference a/drivers/soc/qcom/wcnss_ctrl.c b/drivers/soc/qcom/w } diff -Naur --no-dereference a/drivers/soc/ti/k3-ringacc.c b/drivers/soc/ti/k3-ringacc.c --- a/drivers/soc/ti/k3-ringacc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/soc/ti/k3-ringacc.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/k3-ringacc.c 2024-11-24 20:19:38.198228872 -0500 @@ -7,10 +7,12 @@ #include @@ -359231,7 +365720,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/k3-ringacc.c b/drivers/soc/ti/k3-ri +MODULE_AUTHOR("Grygorii Strashko "); diff -Naur --no-dereference a/drivers/soc/ti/k3-socinfo.c b/drivers/soc/ti/k3-socinfo.c --- a/drivers/soc/ti/k3-socinfo.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/soc/ti/k3-socinfo.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/k3-socinfo.c 2024-11-24 20:19:38.198228872 -0500 @@ -40,6 +40,11 @@ { 0xBB5A, "AM65X" }, { 0xBB64, "J721E" }, @@ -359246,7 +365735,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/k3-socinfo.c b/drivers/soc/ti/k3-so static int diff -Naur --no-dereference a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig --- a/drivers/soc/ti/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/soc/ti/Kconfig 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/Kconfig 2024-11-24 20:19:38.198228872 -0500 @@ -1,22 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-only -# 64-bit ARM SoCs from TI @@ -359317,7 +365806,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig config TI_SCI_INTA_MSI_DOMAIN diff -Naur --no-dereference a/drivers/soc/ti/keystone_dsp_mem.c b/drivers/soc/ti/keystone_dsp_mem.c --- a/drivers/soc/ti/keystone_dsp_mem.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/soc/ti/keystone_dsp_mem.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/keystone_dsp_mem.c 2024-11-24 20:19:38.198228872 -0500 @@ -0,0 +1,401 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -359722,7 +366211,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/keystone_dsp_mem.c b/drivers/soc/ti +MODULE_DESCRIPTION("TI Keystone DSP Memory Mapping Driver"); diff -Naur --no-dereference a/drivers/soc/ti/knav_dma.c b/drivers/soc/ti/knav_dma.c --- a/drivers/soc/ti/knav_dma.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/soc/ti/knav_dma.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/knav_dma.c 2024-11-24 20:19:38.198228872 -0500 @@ -500,7 +500,7 @@ /** * knav_dma_close_channel() - Destroy a dma channel @@ -359742,7 +366231,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/knav_dma.c b/drivers/soc/ti/knav_dm } diff -Naur --no-dereference a/drivers/soc/ti/knav_qmss_queue.c b/drivers/soc/ti/knav_qmss_queue.c --- a/drivers/soc/ti/knav_qmss_queue.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/soc/ti/knav_qmss_queue.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/knav_qmss_queue.c 2024-11-24 20:19:38.198228872 -0500 @@ -79,7 +79,7 @@ /** * knav_queue_notify: qmss queue notfier call @@ -359934,7 +366423,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/knav_qmss_queue.c b/drivers/soc/ti/ } diff -Naur --no-dereference a/drivers/soc/ti/Makefile b/drivers/soc/ti/Makefile --- a/drivers/soc/ti/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/soc/ti/Makefile 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/Makefile 2024-11-24 20:19:38.198228872 -0500 @@ -2,6 +2,7 @@ # # TI Keystone SOC drivers @@ -359950,7 +366439,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/Makefile b/drivers/soc/ti/Makefile +obj-$(CONFIG_TI_PAT) += ti-pat.o diff -Naur --no-dereference a/drivers/soc/ti/pm33xx.c b/drivers/soc/ti/pm33xx.c --- a/drivers/soc/ti/pm33xx.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/soc/ti/pm33xx.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/pm33xx.c 2024-11-24 20:19:38.198228872 -0500 @@ -135,13 +135,11 @@ static int am33xx_do_sram_idle(u32 wfi_flags) @@ -359968,7 +366457,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/pm33xx.c b/drivers/soc/ti/pm33xx.c } diff -Naur --no-dereference a/drivers/soc/ti/pruss.c b/drivers/soc/ti/pruss.c --- a/drivers/soc/ti/pruss.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/soc/ti/pruss.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/pruss.c 2024-11-24 20:19:38.198228872 -0500 @@ -2,10 +2,11 @@ /* * PRU-ICSS platform driver for various TI SoCs @@ -360426,7 +366915,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/pruss.c b/drivers/soc/ti/pruss.c MODULE_DEVICE_TABLE(of, pruss_of_match); diff -Naur --no-dereference a/drivers/soc/ti/ti-pat.c b/drivers/soc/ti/ti-pat.c --- a/drivers/soc/ti/ti-pat.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/soc/ti/ti-pat.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/ti-pat.c 2024-11-24 20:19:38.199228873 -0500 @@ -0,0 +1,670 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -361100,7 +367589,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/ti-pat.c b/drivers/soc/ti/ti-pat.c +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/soc/ti/ti_sci_inta_msi.c b/drivers/soc/ti/ti_sci_inta_msi.c --- a/drivers/soc/ti/ti_sci_inta_msi.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/soc/ti/ti_sci_inta_msi.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/ti_sci_inta_msi.c 2024-11-24 20:19:38.199228873 -0500 @@ -89,6 +89,18 @@ list_add_tail(&msi_desc->list, dev_to_msi_list(dev)); count++; @@ -361122,7 +367611,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/ti_sci_inta_msi.c b/drivers/soc/ti/ return count; diff -Naur --no-dereference a/drivers/soc/ti/wkup_m3_ipc.c b/drivers/soc/ti/wkup_m3_ipc.c --- a/drivers/soc/ti/wkup_m3_ipc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/soc/ti/wkup_m3_ipc.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/soc/ti/wkup_m3_ipc.c 2024-11-24 20:19:38.199228873 -0500 @@ -7,7 +7,9 @@ * Dave Gerlach */ @@ -361475,7 +367964,7 @@ diff -Naur --no-dereference a/drivers/soc/ti/wkup_m3_ipc.c b/drivers/soc/ti/wkup rproc_shutdown(m3_ipc_state->rproc); diff -Naur --no-dereference a/drivers/spi/spi-cadence-quadspi.c b/drivers/spi/spi-cadence-quadspi.c --- a/drivers/spi/spi-cadence-quadspi.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/spi/spi-cadence-quadspi.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/spi/spi-cadence-quadspi.c 2024-11-24 20:19:38.199228873 -0500 @@ -27,6 +27,7 @@ #include #include @@ -363221,7 +369710,7 @@ diff -Naur --no-dereference a/drivers/spi/spi-cadence-quadspi.c b/drivers/spi/sp +MODULE_AUTHOR("Pratyush Yadav "); diff -Naur --no-dereference a/drivers/spi/spidev.c b/drivers/spi/spidev.c --- a/drivers/spi/spidev.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/spi/spidev.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/spi/spidev.c 2024-11-24 20:19:38.199228873 -0500 @@ -691,6 +691,8 @@ { .compatible = "lwn,bk4" }, { .compatible = "dh,dhcom-board" }, @@ -363246,7 +369735,7 @@ diff -Naur --no-dereference a/drivers/spi/spidev.c b/drivers/spi/spidev.c diff -Naur --no-dereference a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c --- a/drivers/spi/spi-mem.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/spi/spi-mem.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/spi/spi-mem.c 2024-11-24 20:19:38.199228873 -0500 @@ -6,6 +6,7 @@ * Author: Boris Brezillon */ @@ -363420,7 +369909,7 @@ diff -Naur --no-dereference a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c struct spi_mem_driver *memdrv = to_spi_mem_drv(spi->dev.driver); diff -Naur --no-dereference a/drivers/staging/fbtft/fb_ssd1306.c b/drivers/staging/fbtft/fb_ssd1306.c --- a/drivers/staging/fbtft/fb_ssd1306.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/fbtft/fb_ssd1306.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/fbtft/fb_ssd1306.c 2024-11-24 20:19:38.199228873 -0500 @@ -55,6 +55,9 @@ write_reg(par, 0x3F); else if (par->info->var.yres == 48) @@ -363539,7 +370028,7 @@ diff -Naur --no-dereference a/drivers/staging/fbtft/fb_ssd1306.c b/drivers/stagi ret); diff -Naur --no-dereference a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c --- a/drivers/staging/iio/resolver/ad2s1210.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/iio/resolver/ad2s1210.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/iio/resolver/ad2s1210.c 2024-11-24 20:19:38.199228873 -0500 @@ -101,7 +101,7 @@ static const int ad2s1210_mode_vals[4][2] = { [MOD_POS] = { 0, 0 }, @@ -363551,7 +370040,7 @@ diff -Naur --no-dereference a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/ static inline void ad2s1210_set_mode(enum ad2s1210_mode mode, diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c b/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c --- a/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c 2024-11-24 20:19:38.199228873 -0500 @@ -972,7 +972,7 @@ } @@ -363599,7 +370088,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c int index = fse->index; diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/atomisp-gc2235.c b/drivers/staging/media/atomisp/i2c/atomisp-gc2235.c --- a/drivers/staging/media/atomisp/i2c/atomisp-gc2235.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/i2c/atomisp-gc2235.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/i2c/atomisp-gc2235.c 2024-11-24 20:19:38.199228873 -0500 @@ -767,7 +767,7 @@ } @@ -363647,7 +370136,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/atomisp-gc2235.c int index = fse->index; diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/atomisp-mt9m114.c b/drivers/staging/media/atomisp/i2c/atomisp-mt9m114.c --- a/drivers/staging/media/atomisp/i2c/atomisp-mt9m114.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/i2c/atomisp-mt9m114.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/i2c/atomisp-mt9m114.c 2024-11-24 20:19:38.199228873 -0500 @@ -801,7 +801,7 @@ } @@ -363704,7 +370193,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/atomisp-mt9m114. unsigned int index = fse->index; diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c b/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c --- a/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c 2024-11-24 20:19:38.200228875 -0500 @@ -911,7 +911,7 @@ } @@ -363752,7 +370241,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c int index = fse->index; diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c b/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c --- a/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c 2024-11-24 20:19:38.200228875 -0500 @@ -876,7 +876,7 @@ } @@ -363800,7 +370289,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c int index = fse->index; diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/ov5693/atomisp-ov5693.c b/drivers/staging/media/atomisp/i2c/ov5693/atomisp-ov5693.c --- a/drivers/staging/media/atomisp/i2c/ov5693/atomisp-ov5693.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/i2c/ov5693/atomisp-ov5693.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/i2c/ov5693/atomisp-ov5693.c 2024-11-24 20:19:38.200228875 -0500 @@ -1577,7 +1577,7 @@ } @@ -363848,7 +370337,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/i2c/ov5693/atomisp-o int index = fse->index; diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/drivers/staging/media/atomisp/pci/atomisp_cmd.c --- a/drivers/staging/media/atomisp/pci/atomisp_cmd.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c 2024-11-24 20:19:38.200228875 -0500 @@ -4883,6 +4883,9 @@ struct atomisp_device *isp = video_get_drvdata(vdev); struct atomisp_sub_device *asd = atomisp_to_video_pipe(vdev)->asd; @@ -363982,7 +370471,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/ return 0; diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_csi2.c b/drivers/staging/media/atomisp/pci/atomisp_csi2.c --- a/drivers/staging/media/atomisp/pci/atomisp_csi2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/pci/atomisp_csi2.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/pci/atomisp_csi2.c 2024-11-24 20:19:38.200228875 -0500 @@ -25,13 +25,13 @@ static struct v4l2_mbus_framefmt *__csi2_get_format(struct atomisp_mipi_csi2_device @@ -364074,7 +370563,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_csi2.c b diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_csi2.h b/drivers/staging/media/atomisp/pci/atomisp_csi2.h --- a/drivers/staging/media/atomisp/pci/atomisp_csi2.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/pci/atomisp_csi2.h 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/pci/atomisp_csi2.h 2024-11-24 20:19:38.200228875 -0500 @@ -44,7 +44,7 @@ }; @@ -364086,7 +370575,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_csi2.h b int atomisp_mipi_csi2_init(struct atomisp_device *isp); diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_file.c b/drivers/staging/media/atomisp/pci/atomisp_file.c --- a/drivers/staging/media/atomisp/pci/atomisp_file.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/pci/atomisp_file.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/pci/atomisp_file.c 2024-11-24 20:19:38.200228875 -0500 @@ -80,7 +80,7 @@ } @@ -364145,7 +370634,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_file.c b { diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_fops.c b/drivers/staging/media/atomisp/pci/atomisp_fops.c --- a/drivers/staging/media/atomisp/pci/atomisp_fops.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/pci/atomisp_fops.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/pci/atomisp_fops.c 2024-11-24 20:19:38.200228875 -0500 @@ -968,7 +968,7 @@ if (!isp->sw_contex.file_input && asd->fmt_auto->val) { struct v4l2_mbus_framefmt isp_sink_fmt = { 0 }; @@ -364175,7 +370664,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_fops.c b V4L2_SEL_TGT_COMPOSE, 0, diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_subdev.c b/drivers/staging/media/atomisp/pci/atomisp_subdev.c --- a/drivers/staging/media/atomisp/pci/atomisp_subdev.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/pci/atomisp_subdev.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/pci/atomisp_subdev.c 2024-11-24 20:19:38.201228877 -0500 @@ -213,7 +213,7 @@ * return -EINVAL or zero on success */ @@ -364402,7 +370891,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_subdev.c } diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_subdev.h b/drivers/staging/media/atomisp/pci/atomisp_subdev.h --- a/drivers/staging/media/atomisp/pci/atomisp_subdev.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/pci/atomisp_subdev.h 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/pci/atomisp_subdev.h 2024-11-24 20:19:38.201228877 -0500 @@ -440,19 +440,20 @@ /* Get pointer to appropriate format */ struct v4l2_mbus_framefmt @@ -364430,7 +370919,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_subdev.h int atomisp_update_run_mode(struct atomisp_sub_device *asd); diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_tpg.c b/drivers/staging/media/atomisp/pci/atomisp_tpg.c --- a/drivers/staging/media/atomisp/pci/atomisp_tpg.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/atomisp/pci/atomisp_tpg.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/atomisp/pci/atomisp_tpg.c 2024-11-24 20:19:38.201228877 -0500 @@ -29,7 +29,7 @@ } @@ -364487,7 +370976,7 @@ diff -Naur --no-dereference a/drivers/staging/media/atomisp/pci/atomisp_tpg.c b/ /*to fake*/ diff -Naur --no-dereference a/drivers/staging/media/imx/imx6-mipi-csi2.c b/drivers/staging/media/imx/imx6-mipi-csi2.c --- a/drivers/staging/media/imx/imx6-mipi-csi2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/imx/imx6-mipi-csi2.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/imx/imx6-mipi-csi2.c 2024-11-24 20:19:38.201228877 -0500 @@ -447,17 +447,17 @@ } @@ -364538,7 +371027,7 @@ diff -Naur --no-dereference a/drivers/staging/media/imx/imx6-mipi-csi2.c b/drive out: diff -Naur --no-dereference a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c --- a/drivers/staging/media/imx/imx7-media-csi.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/imx/imx7-media-csi.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/imx/imx7-media-csi.c 2024-11-24 20:19:38.201228877 -0500 @@ -899,18 +899,18 @@ static struct v4l2_mbus_framefmt * @@ -364666,7 +371155,7 @@ diff -Naur --no-dereference a/drivers/staging/media/imx/imx7-media-csi.c b/drive &csi->cc[i]); diff -Naur --no-dereference a/drivers/staging/media/imx/imx7-mipi-csis.c b/drivers/staging/media/imx/imx7-mipi-csis.c --- a/drivers/staging/media/imx/imx7-mipi-csis.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/imx/imx7-mipi-csis.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/imx/imx7-mipi-csis.c 2024-11-24 20:19:38.201228877 -0500 @@ -700,26 +700,27 @@ static struct v4l2_mbus_framefmt * @@ -364786,7 +371275,7 @@ diff -Naur --no-dereference a/drivers/staging/media/imx/imx7-mipi-csis.c b/drive diff -Naur --no-dereference a/drivers/staging/media/imx/imx-ic-prp.c b/drivers/staging/media/imx/imx-ic-prp.c --- a/drivers/staging/media/imx/imx-ic-prp.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/imx/imx-ic-prp.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/imx/imx-ic-prp.c 2024-11-24 20:19:38.201228877 -0500 @@ -79,13 +79,13 @@ } @@ -364869,7 +371358,7 @@ diff -Naur --no-dereference a/drivers/staging/media/imx/imx-ic-prp.c b/drivers/s mutex_unlock(&priv->lock); diff -Naur --no-dereference a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c --- a/drivers/staging/media/imx/imx-ic-prpencvf.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/imx/imx-ic-prpencvf.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/imx/imx-ic-prpencvf.c 2024-11-24 20:19:38.201228877 -0500 @@ -790,13 +790,13 @@ } @@ -364994,7 +371483,7 @@ diff -Naur --no-dereference a/drivers/staging/media/imx/imx-ic-prpencvf.c b/driv out: diff -Naur --no-dereference a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c --- a/drivers/staging/media/imx/imx-media-csi.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/imx/imx-media-csi.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/imx/imx-media-csi.c 2024-11-24 20:19:38.201228877 -0500 @@ -1162,31 +1162,32 @@ } @@ -365280,7 +371769,7 @@ diff -Naur --no-dereference a/drivers/staging/media/imx/imx-media-csi.c b/driver } diff -Naur --no-dereference a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h --- a/drivers/staging/media/imx/imx-media.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/imx/imx-media.h 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/imx/imx-media.h 2024-11-24 20:19:38.201228877 -0500 @@ -190,7 +190,7 @@ u32 width, u32 height, u32 code, u32 field, const struct imx_media_pixfmt **cc); @@ -365292,7 +371781,7 @@ diff -Naur --no-dereference a/drivers/staging/media/imx/imx-media.h b/drivers/st int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, diff -Naur --no-dereference a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c --- a/drivers/staging/media/imx/imx-media-utils.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/imx/imx-media-utils.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/imx/imx-media-utils.c 2024-11-24 20:19:38.201228877 -0500 @@ -408,7 +408,7 @@ * of a subdev. Can be used as the .init_cfg pad operation. */ @@ -365334,7 +371823,7 @@ diff -Naur --no-dereference a/drivers/staging/media/imx/imx-media-utils.c b/driv out: diff -Naur --no-dereference a/drivers/staging/media/imx/imx-media-vdic.c b/drivers/staging/media/imx/imx-media-vdic.c --- a/drivers/staging/media/imx/imx-media-vdic.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/imx/imx-media-vdic.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/imx/imx-media-vdic.c 2024-11-24 20:19:38.201228877 -0500 @@ -532,17 +532,17 @@ } @@ -365427,7 +371916,7 @@ diff -Naur --no-dereference a/drivers/staging/media/imx/imx-media-vdic.c b/drive if (sdformat->which == V4L2_SUBDEV_FORMAT_ACTIVE) diff -Naur --no-dereference a/drivers/staging/media/ipu3/include/intel-ipu3.h b/drivers/staging/media/ipu3/include/intel-ipu3.h --- a/drivers/staging/media/ipu3/include/intel-ipu3.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/ipu3/include/intel-ipu3.h 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/ipu3/include/intel-ipu3.h 2024-11-24 20:19:38.202228879 -0500 @@ -418,7 +418,7 @@ IPU3_UAPI_AWB_FR_SPARE_FOR_BUBBLES) * IPU3_UAPI_MAX_STRIPES) @@ -365466,7 +371955,7 @@ diff -Naur --no-dereference a/drivers/staging/media/ipu3/include/intel-ipu3.h b/ * @vss_lut_y: vss lookup table. See &ipu3_uapi_vss_lut_y description diff -Naur --no-dereference a/drivers/staging/media/ipu3/ipu3-v4l2.c b/drivers/staging/media/ipu3/ipu3-v4l2.c --- a/drivers/staging/media/ipu3/ipu3-v4l2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/ipu3/ipu3-v4l2.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/ipu3/ipu3-v4l2.c 2024-11-24 20:19:38.202228879 -0500 @@ -36,7 +36,7 @@ /* Initialize try_fmt */ for (i = 0; i < IMGU_NODE_NUM; i++) { @@ -365598,7 +372087,7 @@ diff -Naur --no-dereference a/drivers/staging/media/ipu3/ipu3-v4l2.c b/drivers/s /******************** v4l2_ioctl_ops ********************/ diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss.c b/drivers/staging/media/omap4iss/iss.c --- a/drivers/staging/media/omap4iss/iss.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/omap4iss/iss.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/omap4iss/iss.c 2024-11-24 20:19:38.202228879 -0500 @@ -543,7 +543,7 @@ struct iss_pipeline *pipe; struct media_pad *pad; @@ -365610,7 +372099,7 @@ diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss.c b/drivers/sta if (pipe->stream_state == ISS_PIPELINE_STREAM_STOPPED) diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_csi2.c b/drivers/staging/media/omap4iss/iss_csi2.c --- a/drivers/staging/media/omap4iss/iss_csi2.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/omap4iss/iss_csi2.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/omap4iss/iss_csi2.c 2024-11-24 20:19:38.202228879 -0500 @@ -825,19 +825,20 @@ static struct v4l2_mbus_framefmt * @@ -365749,7 +372238,7 @@ diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_csi2.c b/driver } diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_ipipe.c b/drivers/staging/media/omap4iss/iss_ipipe.c --- a/drivers/staging/media/omap4iss/iss_ipipe.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/omap4iss/iss_ipipe.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/omap4iss/iss_ipipe.c 2024-11-24 20:19:38.202228879 -0500 @@ -21,7 +21,7 @@ static struct v4l2_mbus_framefmt * @@ -365889,7 +372378,7 @@ diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_ipipe.c b/drive } diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_ipipeif.c b/drivers/staging/media/omap4iss/iss_ipipeif.c --- a/drivers/staging/media/omap4iss/iss_ipipeif.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/omap4iss/iss_ipipeif.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/omap4iss/iss_ipipeif.c 2024-11-24 20:19:38.202228879 -0500 @@ -357,11 +357,12 @@ static struct v4l2_mbus_framefmt * @@ -366051,7 +372540,7 @@ diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_ipipeif.c b/dri } diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_resizer.c b/drivers/staging/media/omap4iss/iss_resizer.c --- a/drivers/staging/media/omap4iss/iss_resizer.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/omap4iss/iss_resizer.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/omap4iss/iss_resizer.c 2024-11-24 20:19:38.202228879 -0500 @@ -416,11 +416,12 @@ static struct v4l2_mbus_framefmt * @@ -366193,7 +372682,7 @@ diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_resizer.c b/dri } diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_video.c b/drivers/staging/media/omap4iss/iss_video.c --- a/drivers/staging/media/omap4iss/iss_video.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/omap4iss/iss_video.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/omap4iss/iss_video.c 2024-11-24 20:19:38.202228879 -0500 @@ -206,8 +206,8 @@ iss_video_far_end(struct iss_video *video) { @@ -366297,7 +372786,7 @@ diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_video.c b/drive mutex_unlock(&video->stream_lock); diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_video.h b/drivers/staging/media/omap4iss/iss_video.h --- a/drivers/staging/media/omap4iss/iss_video.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/omap4iss/iss_video.h 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/omap4iss/iss_video.h 2024-11-24 20:19:38.202228879 -0500 @@ -92,7 +92,7 @@ }; @@ -366309,7 +372798,7 @@ diff -Naur --no-dereference a/drivers/staging/media/omap4iss/iss_video.h b/drive { diff -Naur --no-dereference a/drivers/staging/media/rkisp1/rkisp1-capture.c b/drivers/staging/media/rkisp1/rkisp1-capture.c --- a/drivers/staging/media/rkisp1/rkisp1-capture.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/rkisp1/rkisp1-capture.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/rkisp1/rkisp1-capture.c 2024-11-24 20:19:38.202228879 -0500 @@ -921,7 +921,7 @@ mutex_lock(&cap->rkisp1->stream_lock); @@ -366330,7 +372819,7 @@ diff -Naur --no-dereference a/drivers/staging/media/rkisp1/rkisp1-capture.c b/dr goto err_pipe_disable; diff -Naur --no-dereference a/drivers/staging/media/rkisp1/rkisp1-isp.c b/drivers/staging/media/rkisp1/rkisp1-isp.c --- a/drivers/staging/media/rkisp1/rkisp1-isp.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/rkisp1/rkisp1-isp.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/rkisp1/rkisp1-isp.c 2024-11-24 20:19:38.202228879 -0500 @@ -208,24 +208,30 @@ static struct v4l2_mbus_framefmt * @@ -366646,7 +373135,7 @@ diff -Naur --no-dereference a/drivers/staging/media/rkisp1/rkisp1-isp.c b/driver err_cleanup_media_entity: diff -Naur --no-dereference a/drivers/staging/media/rkisp1/rkisp1-resizer.c b/drivers/staging/media/rkisp1/rkisp1-resizer.c --- a/drivers/staging/media/rkisp1/rkisp1-resizer.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/rkisp1/rkisp1-resizer.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/rkisp1/rkisp1-resizer.c 2024-11-24 20:19:38.203228881 -0500 @@ -180,24 +180,30 @@ static struct v4l2_mbus_framefmt * @@ -366923,7 +373412,7 @@ diff -Naur --no-dereference a/drivers/staging/media/rkisp1/rkisp1-resizer.c b/dr err_cleanup_media_entity: diff -Naur --no-dereference a/drivers/staging/media/tegra-video/csi.c b/drivers/staging/media/tegra-video/csi.c --- a/drivers/staging/media/tegra-video/csi.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/tegra-video/csi.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/tegra-video/csi.c 2024-11-24 20:19:38.203228881 -0500 @@ -64,7 +64,7 @@ * V4L2 Subdevice Pad Operations */ @@ -366971,7 +373460,7 @@ diff -Naur --no-dereference a/drivers/staging/media/tegra-video/csi.c b/drivers/ struct tegra_csi_channel *csi_chan = to_csi_chan(subdev); diff -Naur --no-dereference a/drivers/staging/media/tegra-video/tegra210.c b/drivers/staging/media/tegra-video/tegra210.c --- a/drivers/staging/media/tegra-video/tegra210.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/tegra-video/tegra210.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/tegra-video/tegra210.c 2024-11-24 20:19:38.203228881 -0500 @@ -459,7 +459,7 @@ VI_INCR_SYNCPT_NO_STALL); @@ -367001,7 +373490,7 @@ diff -Naur --no-dereference a/drivers/staging/media/tegra-video/tegra210.c b/dri /* diff -Naur --no-dereference a/drivers/staging/media/tegra-video/vi.c b/drivers/staging/media/tegra-video/vi.c --- a/drivers/staging/media/tegra-video/vi.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/tegra-video/vi.c 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/tegra-video/vi.c 2024-11-24 20:19:38.203228881 -0500 @@ -490,9 +490,10 @@ struct v4l2_pix_format *pix) { @@ -367064,7 +373553,7 @@ diff -Naur --no-dereference a/drivers/staging/media/tegra-video/vi.c b/drivers/s } diff -Naur --no-dereference a/drivers/staging/media/zoran/zoran.h b/drivers/staging/media/zoran/zoran.h --- a/drivers/staging/media/zoran/zoran.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/staging/media/zoran/zoran.h 2024-08-28 19:44:05.648038161 -0400 ++++ b/drivers/staging/media/zoran/zoran.h 2024-11-24 20:19:38.203228881 -0500 @@ -58,13 +58,6 @@ #define BUZ_MAX_INPUT 16 @@ -367081,7 +373570,7 @@ diff -Naur --no-dereference a/drivers/staging/media/zoran/zoran.h b/drivers/stag #define MAX_FRAME (BUZ_MAX_FRAME > VIDEO_MAX_FRAME ? BUZ_MAX_FRAME : VIDEO_MAX_FRAME) diff -Naur --no-dereference a/drivers/thermal/k3_j72xx_bandgap.c b/drivers/thermal/k3_j72xx_bandgap.c --- a/drivers/thermal/k3_j72xx_bandgap.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/thermal/k3_j72xx_bandgap.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/thermal/k3_j72xx_bandgap.c 2024-11-24 20:19:38.203228881 -0500 @@ -0,0 +1,682 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -367767,7 +374256,7 @@ diff -Naur --no-dereference a/drivers/thermal/k3_j72xx_bandgap.c b/drivers/therm +MODULE_AUTHOR("J Keerthy "); diff -Naur --no-dereference a/drivers/thermal/Makefile b/drivers/thermal/Makefile --- a/drivers/thermal/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/thermal/Makefile 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/thermal/Makefile 2024-11-24 20:19:38.203228881 -0500 @@ -28,7 +28,7 @@ # devfreq cooling thermal_sys-$(CONFIG_DEVFREQ_THERMAL) += devfreq_cooling.o @@ -367777,9 +374266,216 @@ diff -Naur --no-dereference a/drivers/thermal/Makefile b/drivers/thermal/Makefil # platform thermal drivers obj-y += broadcom/ obj-$(CONFIG_THERMAL_MMIO) += thermal_mmio.o +diff -Naur --no-dereference a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c +--- a/drivers/tty/serial/8250/8250_core.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/tty/serial/8250/8250_core.c 2024-11-24 20:19:38.203228881 -0500 +@@ -275,10 +275,8 @@ + * Must disable interrupts or else we risk racing with the interrupt + * based handler. + */ +- if (up->port.irq) { +- ier = serial_in(up, UART_IER); +- serial_out(up, UART_IER, 0); +- } ++ if (up->port.irq) ++ ier = serial8250_clear_IER(up); + + iir = serial_in(up, UART_IIR); + +@@ -301,7 +299,7 @@ + serial8250_tx_chars(up); + + if (up->port.irq) +- serial_out(up, UART_IER, ier); ++ serial8250_set_IER(up, ier); + + spin_unlock_irqrestore(&up->port.lock, flags); + +@@ -588,6 +586,14 @@ + + #ifdef CONFIG_SERIAL_8250_CONSOLE + ++static void univ8250_console_write_atomic(struct console *co, const char *s, ++ unsigned int count) ++{ ++ struct uart_8250_port *up = &serial8250_ports[co->index]; ++ ++ serial8250_console_write_atomic(up, s, count); ++} ++ + static void univ8250_console_write(struct console *co, const char *s, + unsigned int count) + { +@@ -681,6 +687,7 @@ + + static struct console univ8250_console = { + .name = "ttyS", ++ .write_atomic = univ8250_console_write_atomic, + .write = univ8250_console_write, + .device = uart_console_device, + .setup = univ8250_console_setup, +diff -Naur --no-dereference a/drivers/tty/serial/8250/8250_fsl.c b/drivers/tty/serial/8250/8250_fsl.c +--- a/drivers/tty/serial/8250/8250_fsl.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/tty/serial/8250/8250_fsl.c 2024-11-24 20:19:38.203228881 -0500 +@@ -60,9 +60,18 @@ + + /* Stop processing interrupts on input overrun */ + if ((orig_lsr & UART_LSR_OE) && (up->overrun_backoff_time_ms > 0)) { ++ unsigned int ca_flags; + unsigned long delay; ++ bool is_console; + ++ is_console = uart_console(port); ++ ++ if (is_console) ++ console_atomic_lock(&ca_flags); + up->ier = port->serial_in(port, UART_IER); ++ if (is_console) ++ console_atomic_unlock(ca_flags); ++ + if (up->ier & (UART_IER_RLSI | UART_IER_RDI)) { + port->ops->stop_rx(port); + } else { +diff -Naur --no-dereference a/drivers/tty/serial/8250/8250.h b/drivers/tty/serial/8250/8250.h +--- a/drivers/tty/serial/8250/8250.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/tty/serial/8250/8250.h 2024-11-24 20:19:38.203228881 -0500 +@@ -153,12 +153,55 @@ + up->dl_write(up, value); + } + ++static inline void serial8250_set_IER(struct uart_8250_port *up, ++ unsigned char ier) ++{ ++ struct uart_port *port = &up->port; ++ unsigned int flags; ++ bool is_console; ++ ++ is_console = uart_console(port); ++ ++ if (is_console) ++ console_atomic_lock(&flags); ++ ++ serial_out(up, UART_IER, ier); ++ ++ if (is_console) ++ console_atomic_unlock(flags); ++} ++ ++static inline unsigned char serial8250_clear_IER(struct uart_8250_port *up) ++{ ++ struct uart_port *port = &up->port; ++ unsigned int clearval = 0; ++ unsigned int prior; ++ unsigned int flags; ++ bool is_console; ++ ++ is_console = uart_console(port); ++ ++ if (up->capabilities & UART_CAP_UUE) ++ clearval = UART_IER_UUE; ++ ++ if (is_console) ++ console_atomic_lock(&flags); ++ ++ prior = serial_port_in(port, UART_IER); ++ serial_port_out(port, UART_IER, clearval); ++ ++ if (is_console) ++ console_atomic_unlock(flags); ++ ++ return prior; ++} ++ + static inline bool serial8250_set_THRI(struct uart_8250_port *up) + { + if (up->ier & UART_IER_THRI) + return false; + up->ier |= UART_IER_THRI; +- serial_out(up, UART_IER, up->ier); ++ serial8250_set_IER(up, up->ier); + return true; + } + +@@ -167,7 +210,7 @@ + if (!(up->ier & UART_IER_THRI)) + return false; + up->ier &= ~UART_IER_THRI; +- serial_out(up, UART_IER, up->ier); ++ serial8250_set_IER(up, up->ier); + return true; + } + +diff -Naur --no-dereference a/drivers/tty/serial/8250/8250_ingenic.c b/drivers/tty/serial/8250/8250_ingenic.c +--- a/drivers/tty/serial/8250/8250_ingenic.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/tty/serial/8250/8250_ingenic.c 2024-11-24 20:19:38.203228881 -0500 +@@ -146,6 +146,8 @@ + + static void ingenic_uart_serial_out(struct uart_port *p, int offset, int value) + { ++ unsigned int flags; ++ bool is_console; + int ier; + + switch (offset) { +@@ -167,7 +169,12 @@ + * If we have enabled modem status IRQs we should enable + * modem mode. + */ ++ is_console = uart_console(p); ++ if (is_console) ++ console_atomic_lock(&flags); + ier = p->serial_in(p, UART_IER); ++ if (is_console) ++ console_atomic_unlock(flags); + + if (ier & UART_IER_MSI) + value |= UART_MCR_MDCE | UART_MCR_FCM; +diff -Naur --no-dereference a/drivers/tty/serial/8250/8250_mtk.c b/drivers/tty/serial/8250/8250_mtk.c +--- a/drivers/tty/serial/8250/8250_mtk.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/tty/serial/8250/8250_mtk.c 2024-11-24 20:19:38.204228882 -0500 +@@ -222,12 +222,37 @@ + + static void mtk8250_disable_intrs(struct uart_8250_port *up, int mask) + { +- serial_out(up, UART_IER, serial_in(up, UART_IER) & (~mask)); ++ struct uart_port *port = &up->port; ++ unsigned int flags; ++ unsigned int ier; ++ bool is_console; ++ ++ is_console = uart_console(port); ++ ++ if (is_console) ++ console_atomic_lock(&flags); ++ ++ ier = serial_in(up, UART_IER); ++ serial_out(up, UART_IER, ier & (~mask)); ++ ++ if (is_console) ++ console_atomic_unlock(flags); + } + + static void mtk8250_enable_intrs(struct uart_8250_port *up, int mask) + { +- serial_out(up, UART_IER, serial_in(up, UART_IER) | mask); ++ struct uart_port *port = &up->port; ++ unsigned int flags; ++ unsigned int ier; ++ ++ if (uart_console(port)) ++ console_atomic_lock(&flags); ++ ++ ier = serial_in(up, UART_IER); ++ serial_out(up, UART_IER, ier | mask); ++ ++ if (uart_console(port)) ++ console_atomic_unlock(flags); + } + + static void mtk8250_set_flow_ctrl(struct uart_8250_port *up, int mode) diff -Naur --no-dereference a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c --- a/drivers/tty/serial/8250/8250_omap.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/tty/serial/8250/8250_omap.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/tty/serial/8250/8250_omap.c 2024-11-24 20:19:38.204228882 -0500 @@ -44,6 +44,7 @@ #define UART_HAS_EFR2 BIT(4) #define UART_HAS_RHR_IT_DIS BIT(5) @@ -367929,7 +374625,7 @@ diff -Naur --no-dereference a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/ console_initcall(omap8250_console_fixup); diff -Naur --no-dereference a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c --- a/drivers/tty/serial/8250/8250_port.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/tty/serial/8250/8250_port.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/tty/serial/8250/8250_port.c 2024-11-24 20:19:38.204228882 -0500 @@ -534,11 +534,30 @@ */ static void serial8250_clear_fifos(struct uart_8250_port *p) @@ -367965,7 +374661,25 @@ diff -Naur --no-dereference a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/ } } -@@ -1431,7 +1450,7 @@ +@@ -729,7 +748,7 @@ + serial_out(p, UART_EFR, UART_EFR_ECB); + serial_out(p, UART_LCR, 0); + } +- serial_out(p, UART_IER, sleep ? UART_IERX_SLEEP : 0); ++ serial8250_set_IER(p, sleep ? UART_IERX_SLEEP : 0); + if (p->capabilities & UART_CAP_EFR) { + serial_out(p, UART_LCR, UART_LCR_CONF_MODE_B); + serial_out(p, UART_EFR, efr); +@@ -1404,7 +1423,7 @@ + + up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); + up->port.read_status_mask &= ~UART_LSR_DR; +- serial_port_out(port, UART_IER, up->ier); ++ serial8250_set_IER(up, up->ier); + + serial8250_rpm_put(up); + } +@@ -1431,10 +1450,10 @@ * Enable previously disabled RX interrupts. */ if (!(p->port.rs485.flags & SER_RS485_RX_DURING_TX)) { @@ -367973,10 +374687,210 @@ diff -Naur --no-dereference a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/ + serial8250_clear_fifos(p); p->ier |= UART_IER_RLSI | UART_IER_RDI; - serial_port_out(&p->port, UART_IER, p->ier); +- serial_port_out(&p->port, UART_IER, p->ier); ++ serial8250_set_IER(p, p->ier); + } + } + EXPORT_SYMBOL_GPL(serial8250_em485_stop_tx); +@@ -1676,7 +1695,7 @@ + mctrl_gpio_disable_ms(up->gpios); + + up->ier &= ~UART_IER_MSI; +- serial_port_out(port, UART_IER, up->ier); ++ serial8250_set_IER(up, up->ier); + } + + static void serial8250_enable_ms(struct uart_port *port) +@@ -1692,7 +1711,7 @@ + up->ier |= UART_IER_MSI; + + serial8250_rpm_get(up); +- serial_port_out(port, UART_IER, up->ier); ++ serial8250_set_IER(up, up->ier); + serial8250_rpm_put(up); + } + +@@ -2116,14 +2135,7 @@ + struct uart_8250_port *up = up_to_u8250p(port); + + serial8250_rpm_get(up); +- /* +- * First save the IER then disable the interrupts +- */ +- ier = serial_port_in(port, UART_IER); +- if (up->capabilities & UART_CAP_UUE) +- serial_port_out(port, UART_IER, UART_IER_UUE); +- else +- serial_port_out(port, UART_IER, 0); ++ ier = serial8250_clear_IER(up); + + wait_for_xmitr(up, BOTH_EMPTY); + /* +@@ -2136,7 +2148,7 @@ + * and restore the IER + */ + wait_for_xmitr(up, BOTH_EMPTY); +- serial_port_out(port, UART_IER, ier); ++ serial8250_set_IER(up, ier); + serial8250_rpm_put(up); + } + +@@ -2441,7 +2453,7 @@ + */ + spin_lock_irqsave(&port->lock, flags); + up->ier = 0; +- serial_port_out(port, UART_IER, 0); ++ serial8250_set_IER(up, 0); + spin_unlock_irqrestore(&port->lock, flags); + + synchronize_irq(port->irq); +@@ -2797,7 +2809,7 @@ + if (up->capabilities & UART_CAP_RTOIE) + up->ier |= UART_IER_RTOIE; + +- serial_port_out(port, UART_IER, up->ier); ++ serial8250_set_IER(up, up->ier); + + if (up->capabilities & UART_CAP_EFR) { + unsigned char efr = 0; +@@ -3262,7 +3274,7 @@ + + #ifdef CONFIG_SERIAL_8250_CONSOLE + +-static void serial8250_console_putchar(struct uart_port *port, int ch) ++static void serial8250_console_putchar_locked(struct uart_port *port, int ch) + { + struct uart_8250_port *up = up_to_u8250p(port); + +@@ -3270,6 +3282,18 @@ + serial_port_out(port, UART_TX, ch); + } + ++static void serial8250_console_putchar(struct uart_port *port, int ch) ++{ ++ struct uart_8250_port *up = up_to_u8250p(port); ++ unsigned int flags; ++ ++ wait_for_xmitr(up, UART_LSR_THRE); ++ ++ console_atomic_lock(&flags); ++ serial8250_console_putchar_locked(port, ch); ++ console_atomic_unlock(flags); ++} ++ + /* + * Restore serial console when h/w power-off detected + */ +@@ -3296,6 +3320,32 @@ + serial8250_out_MCR(up, up->mcr | UART_MCR_DTR | UART_MCR_RTS); + } + ++void serial8250_console_write_atomic(struct uart_8250_port *up, ++ const char *s, unsigned int count) ++{ ++ struct uart_port *port = &up->port; ++ unsigned int flags; ++ unsigned int ier; ++ ++ console_atomic_lock(&flags); ++ ++ touch_nmi_watchdog(); ++ ++ ier = serial8250_clear_IER(up); ++ ++ if (atomic_fetch_inc(&up->console_printing)) { ++ uart_console_write(port, "\n", 1, ++ serial8250_console_putchar_locked); ++ } ++ uart_console_write(port, s, count, serial8250_console_putchar_locked); ++ atomic_dec(&up->console_printing); ++ ++ wait_for_xmitr(up, BOTH_EMPTY); ++ serial8250_set_IER(up, ier); ++ ++ console_atomic_unlock(flags); ++} ++ + /* + * Print a string to the serial port trying not to disturb + * any possible real use of the port... +@@ -3312,24 +3362,12 @@ + struct uart_port *port = &up->port; + unsigned long flags; + unsigned int ier; +- int locked = 1; + + touch_nmi_watchdog(); + +- if (oops_in_progress) +- locked = spin_trylock_irqsave(&port->lock, flags); +- else +- spin_lock_irqsave(&port->lock, flags); +- +- /* +- * First save the IER then disable the interrupts +- */ +- ier = serial_port_in(port, UART_IER); ++ spin_lock_irqsave(&port->lock, flags); + +- if (up->capabilities & UART_CAP_UUE) +- serial_port_out(port, UART_IER, UART_IER_UUE); +- else +- serial_port_out(port, UART_IER, 0); ++ ier = serial8250_clear_IER(up); + + /* check scratch reg to see if port powered off during system sleep */ + if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { +@@ -3343,7 +3381,9 @@ + mdelay(port->rs485.delay_rts_before_send); + } + ++ atomic_inc(&up->console_printing); + uart_console_write(port, s, count, serial8250_console_putchar); ++ atomic_dec(&up->console_printing); + + /* + * Finally, wait for transmitter to become empty +@@ -3356,8 +3396,7 @@ + if (em485->tx_stopped) + up->rs485_stop_tx(up); + } +- +- serial_port_out(port, UART_IER, ier); ++ serial8250_set_IER(up, ier); + + /* + * The receive handling will happen properly because the +@@ -3369,8 +3408,7 @@ + if (up->msr_saved_flags) + serial8250_modem_status(up); + +- if (locked) +- spin_unlock_irqrestore(&port->lock, flags); ++ spin_unlock_irqrestore(&port->lock, flags); + } + + static unsigned int probe_baud(struct uart_port *port) +@@ -3390,6 +3428,7 @@ + + int serial8250_console_setup(struct uart_port *port, char *options, bool probe) + { ++ struct uart_8250_port *up = up_to_u8250p(port); + int baud = 9600; + int bits = 8; + int parity = 'n'; +@@ -3399,6 +3438,8 @@ + if (!port->iobase && !port->membase) + return -ENODEV; + ++ atomic_set(&up->console_printing, 0); ++ + if (options) + uart_parse_options(options, &baud, &parity, &bits, &flow); + else if (probe) diff -Naur --no-dereference a/drivers/tty/serial/8250/8250_pruss.c b/drivers/tty/serial/8250/8250_pruss.c --- a/drivers/tty/serial/8250/8250_pruss.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/tty/serial/8250/8250_pruss.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/tty/serial/8250/8250_pruss.c 2024-11-24 20:19:38.204228882 -0500 @@ -0,0 +1,215 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -368195,7 +375109,7 @@ diff -Naur --no-dereference a/drivers/tty/serial/8250/8250_pruss.c b/drivers/tty +MODULE_DESCRIPTION("Serial Port driver for PRUSS UART on TI platforms"); diff -Naur --no-dereference a/drivers/tty/serial/8250/Kconfig b/drivers/tty/serial/8250/Kconfig --- a/drivers/tty/serial/8250/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/tty/serial/8250/Kconfig 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/tty/serial/8250/Kconfig 2024-11-24 20:19:38.204228882 -0500 @@ -510,6 +510,16 @@ Select this option if you have machine with an NVIDIA Tegra SoC and wish to enable 8250 serial driver for the Tegra serial interfaces. @@ -368215,7 +375129,7 @@ diff -Naur --no-dereference a/drivers/tty/serial/8250/Kconfig b/drivers/tty/seri depends on SERIAL_8250 && OF diff -Naur --no-dereference a/drivers/tty/serial/8250/Makefile b/drivers/tty/serial/8250/Makefile --- a/drivers/tty/serial/8250/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/tty/serial/8250/Makefile 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/tty/serial/8250/Makefile 2024-11-24 20:19:38.204228882 -0500 @@ -36,6 +36,7 @@ obj-$(CONFIG_SERIAL_8250_INGENIC) += 8250_ingenic.o obj-$(CONFIG_SERIAL_8250_LPSS) += 8250_lpss.o @@ -368224,9 +375138,51 @@ diff -Naur --no-dereference a/drivers/tty/serial/8250/Makefile b/drivers/tty/ser obj-$(CONFIG_SERIAL_8250_PXA) += 8250_pxa.o obj-$(CONFIG_SERIAL_8250_TEGRA) += 8250_tegra.o obj-$(CONFIG_SERIAL_OF_PLATFORM) += 8250_of.o +diff -Naur --no-dereference a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c +--- a/drivers/tty/serial/amba-pl011.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/tty/serial/amba-pl011.c 2024-11-24 20:19:38.204228882 -0500 +@@ -2211,18 +2211,24 @@ + { + struct uart_amba_port *uap = amba_ports[co->index]; + unsigned int old_cr = 0, new_cr; +- unsigned long flags; ++ unsigned long flags = 0; + int locked = 1; + + clk_enable(uap->clk); + +- local_irq_save(flags); ++ /* ++ * local_irq_save(flags); ++ * ++ * This local_irq_save() is nonsense. If we come in via sysrq ++ * handling then interrupts are already disabled. Aside of ++ * that the port.sysrq check is racy on SMP regardless. ++ */ + if (uap->port.sysrq) + locked = 0; + else if (oops_in_progress) +- locked = spin_trylock(&uap->port.lock); ++ locked = spin_trylock_irqsave(&uap->port.lock, flags); + else +- spin_lock(&uap->port.lock); ++ spin_lock_irqsave(&uap->port.lock, flags); + + /* + * First save the CR then disable the interrupts +@@ -2248,8 +2254,7 @@ + pl011_write(old_cr, uap, REG_CR); + + if (locked) +- spin_unlock(&uap->port.lock); +- local_irq_restore(flags); ++ spin_unlock_irqrestore(&uap->port.lock, flags); + + clk_disable(uap->clk); + } diff -Naur --no-dereference a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig --- a/drivers/tty/serial/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/tty/serial/Kconfig 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/tty/serial/Kconfig 2024-11-24 20:19:38.204228882 -0500 @@ -1583,6 +1583,16 @@ receives all kernel messages and warnings and which allows logins in single user mode). @@ -368246,7 +375202,7 @@ diff -Naur --no-dereference a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kc config SERIAL_MCTRL_GPIO diff -Naur --no-dereference a/drivers/tty/serial/Makefile b/drivers/tty/serial/Makefile --- a/drivers/tty/serial/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/tty/serial/Makefile 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/tty/serial/Makefile 2024-11-24 20:19:38.204228882 -0500 @@ -90,6 +90,7 @@ obj-$(CONFIG_SERIAL_RDA) += rda-uart.o obj-$(CONFIG_SERIAL_MILBEAUT_USIO) += milbeaut_usio.o @@ -368255,9 +375211,39 @@ diff -Naur --no-dereference a/drivers/tty/serial/Makefile b/drivers/tty/serial/M # GPIOLIB helpers for modem control lines obj-$(CONFIG_SERIAL_MCTRL_GPIO) += serial_mctrl_gpio.o +diff -Naur --no-dereference a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c +--- a/drivers/tty/serial/omap-serial.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/drivers/tty/serial/omap-serial.c 2024-11-24 20:19:38.205228884 -0500 +@@ -1311,13 +1311,10 @@ + + pm_runtime_get_sync(up->dev); + +- local_irq_save(flags); +- if (up->port.sysrq) +- locked = 0; +- else if (oops_in_progress) +- locked = spin_trylock(&up->port.lock); ++ if (up->port.sysrq || oops_in_progress) ++ locked = spin_trylock_irqsave(&up->port.lock, flags); + else +- spin_lock(&up->port.lock); ++ spin_lock_irqsave(&up->port.lock, flags); + + /* + * First save the IER then disable the interrupts +@@ -1346,8 +1343,7 @@ + pm_runtime_mark_last_busy(up->dev); + pm_runtime_put_autosuspend(up->dev); + if (locked) +- spin_unlock(&up->port.lock); +- local_irq_restore(flags); ++ spin_unlock_irqrestore(&up->port.lock, flags); + } + + static int __init diff -Naur --no-dereference a/drivers/tty/serial/pru_swuart.c b/drivers/tty/serial/pru_swuart.c --- a/drivers/tty/serial/pru_swuart.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/tty/serial/pru_swuart.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/tty/serial/pru_swuart.c 2024-11-24 20:19:38.205228884 -0500 @@ -0,0 +1,777 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -369038,7 +376024,7 @@ diff -Naur --no-dereference a/drivers/tty/serial/pru_swuart.c b/drivers/tty/seri +MODULE_LICENSE("GPL v2"); diff -Naur --no-dereference a/drivers/uio/uio_pdrv_genirq.c b/drivers/uio/uio_pdrv_genirq.c --- a/drivers/uio/uio_pdrv_genirq.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/uio/uio_pdrv_genirq.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/uio/uio_pdrv_genirq.c 2024-11-24 20:19:38.205228884 -0500 @@ -276,11 +276,13 @@ #ifdef CONFIG_OF @@ -369056,7 +376042,7 @@ diff -Naur --no-dereference a/drivers/uio/uio_pdrv_genirq.c b/drivers/uio/uio_pd diff -Naur --no-dereference a/drivers/uio/uio_pruss.c b/drivers/uio/uio_pruss.c --- a/drivers/uio/uio_pruss.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/uio/uio_pruss.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/uio/uio_pruss.c 2024-11-24 20:19:38.205228884 -0500 @@ -26,14 +26,22 @@ #include #include @@ -369334,7 +376320,7 @@ diff -Naur --no-dereference a/drivers/uio/uio_pruss.c b/drivers/uio/uio_pruss.c diff -Naur --no-dereference a/drivers/usb/cdns3/cdns3-ti.c b/drivers/usb/cdns3/cdns3-ti.c --- a/drivers/usb/cdns3/cdns3-ti.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/usb/cdns3/cdns3-ti.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/usb/cdns3/cdns3-ti.c 2024-11-24 20:19:38.205228884 -0500 @@ -214,6 +214,7 @@ static const struct of_device_id cdns_ti_of_match[] = { @@ -369345,7 +376331,7 @@ diff -Naur --no-dereference a/drivers/usb/cdns3/cdns3-ti.c b/drivers/usb/cdns3/c MODULE_DEVICE_TABLE(of, cdns_ti_of_match); diff -Naur --no-dereference a/drivers/usb/dwc3/dwc3-am62.c b/drivers/usb/dwc3/dwc3-am62.c --- a/drivers/usb/dwc3/dwc3-am62.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/usb/dwc3/dwc3-am62.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/usb/dwc3/dwc3-am62.c 2024-11-24 20:19:38.205228884 -0500 @@ -0,0 +1,380 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -369729,7 +376715,7 @@ diff -Naur --no-dereference a/drivers/usb/dwc3/dwc3-am62.c b/drivers/usb/dwc3/dw +MODULE_DESCRIPTION("DesignWare USB3 TI Glue Layer"); diff -Naur --no-dereference a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig --- a/drivers/usb/dwc3/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/usb/dwc3/Kconfig 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/usb/dwc3/Kconfig 2024-11-24 20:19:38.205228884 -0500 @@ -139,4 +139,13 @@ for peripheral mode support. Say 'Y' or 'M' if you have one such device. @@ -369746,7 +376732,7 @@ diff -Naur --no-dereference a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfi endif diff -Naur --no-dereference a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makefile --- a/drivers/usb/dwc3/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/usb/dwc3/Makefile 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/usb/dwc3/Makefile 2024-11-24 20:19:38.205228884 -0500 @@ -42,6 +42,7 @@ # and allyesconfig builds. ## @@ -369757,7 +376743,7 @@ diff -Naur --no-dereference a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makef obj-$(CONFIG_USB_DWC3_PCI) += dwc3-pci.o diff -Naur --no-dereference a/drivers/usb/typec/tps6598x.c b/drivers/usb/typec/tps6598x.c --- a/drivers/usb/typec/tps6598x.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/usb/typec/tps6598x.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/usb/typec/tps6598x.c 2024-11-24 20:19:38.205228884 -0500 @@ -13,6 +13,7 @@ #include #include @@ -369890,7 +376876,7 @@ diff -Naur --no-dereference a/drivers/usb/typec/tps6598x.c b/drivers/usb/typec/t .remove = tps6598x_remove, diff -Naur --no-dereference a/drivers/video/logo/Kconfig b/drivers/video/logo/Kconfig --- a/drivers/video/logo/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/video/logo/Kconfig 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/video/logo/Kconfig 2024-11-24 20:19:38.205228884 -0500 @@ -28,6 +28,10 @@ bool "Standard 224-color Linux logo" default y @@ -369904,7 +376890,7 @@ diff -Naur --no-dereference a/drivers/video/logo/Kconfig b/drivers/video/logo/Kc depends on MACH_DECSTATION || ALPHA diff -Naur --no-dereference a/drivers/video/logo/logo_beagle_clut224.ppm b/drivers/video/logo/logo_beagle_clut224.ppm --- a/drivers/video/logo/logo_beagle_clut224.ppm 1969-12-31 19:00:00.000000000 -0500 -+++ b/drivers/video/logo/logo_beagle_clut224.ppm 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/video/logo/logo_beagle_clut224.ppm 2024-11-24 20:19:38.205228884 -0500 @@ -0,0 +1,1123 @@ +P3 +80 80 @@ -371031,7 +378017,7 @@ diff -Naur --no-dereference a/drivers/video/logo/logo_beagle_clut224.ppm b/drive +0 0 0 0 0 0 diff -Naur --no-dereference a/drivers/video/logo/logo.c b/drivers/video/logo/logo.c --- a/drivers/video/logo/logo.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/video/logo/logo.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/video/logo/logo.c 2024-11-24 20:19:38.205228884 -0500 @@ -100,6 +100,10 @@ /* SuperH Linux logo */ logo = &logo_superh_clut224; @@ -371045,7 +378031,7 @@ diff -Naur --no-dereference a/drivers/video/logo/logo.c b/drivers/video/logo/log } diff -Naur --no-dereference a/drivers/video/logo/Makefile b/drivers/video/logo/Makefile --- a/drivers/video/logo/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/drivers/video/logo/Makefile 2024-08-28 19:44:05.652038182 -0400 ++++ b/drivers/video/logo/Makefile 2024-11-24 20:19:38.205228884 -0500 @@ -5,6 +5,7 @@ obj-$(CONFIG_LOGO_LINUX_MONO) += logo_linux_mono.o obj-$(CONFIG_LOGO_LINUX_VGA16) += logo_linux_vga16.o @@ -371056,19 +378042,19 @@ diff -Naur --no-dereference a/drivers/video/logo/Makefile b/drivers/video/logo/M obj-$(CONFIG_LOGO_PARISC_CLUT224) += logo_parisc_clut224.o diff -Naur --no-dereference a/firmware/am335x-bone-scale-data.bin b/firmware/am335x-bone-scale-data.bin --- a/firmware/am335x-bone-scale-data.bin 1969-12-31 19:00:00.000000000 -0500 -+++ b/firmware/am335x-bone-scale-data.bin 2024-08-28 19:44:05.652038182 -0400 ++++ b/firmware/am335x-bone-scale-data.bin 2024-11-24 20:19:38.206228886 -0500 @@ -0,0 +1 @@ + W#d$ m$$ m$$ l$†$ l$†d$ m$$ m$$ l$†$ l$† \ No newline at end of file diff -Naur --no-dereference a/firmware/am335x-evm-scale-data.bin b/firmware/am335x-evm-scale-data.bin --- a/firmware/am335x-evm-scale-data.bin 1969-12-31 19:00:00.000000000 -0500 -+++ b/firmware/am335x-evm-scale-data.bin 2024-08-28 19:44:05.652038182 -0400 ++++ b/firmware/am335x-evm-scale-data.bin 2024-11-24 20:19:38.206228886 -0500 @@ -0,0 +1 @@ + Wd-%d-%+ \ No newline at end of file diff -Naur --no-dereference a/firmware/am335x-pm-firmware.bin b/firmware/am335x-pm-firmware.bin --- a/firmware/am335x-pm-firmware.bin 1969-12-31 19:00:00.000000000 -0500 -+++ b/firmware/am335x-pm-firmware.bin 2024-08-28 19:44:05.652038182 -0400 ++++ b/firmware/am335x-pm-firmware.bin 2024-11-24 20:19:38.206228886 -0500 @@ -0,0 +1,34 @@ +™ é í ñ õ ù ý   • • • • • • • • • • • • • • • • • É • • • • • • • • • • • • • • å • E Y ± • • • Å Ù í )=Qey¡µÉJh CôÉs`pG0áDð<¹KD›hpG¿ÊD8K D›`pG¿ÊD8KJh›²`pG,áDœKhZ* ØJëƒëƒ˜h0¿ pG pG¿œ#J$Khhð´#Mð"J/`"NÃóÀp!L"HÃó!JÃó€%7`ÃóÀ#p%pHhJh `Sh ÐHI€è0P`˜D냛hHð¼GiðÑI h)ИIÄë„dh±T`éçI˜ÄQø$@,öÑáç<áD8áD°™¬˜¨0áD4áDœ¸Oðÿ3´HLIJ#``]øK ``pG4áD0áD8áD<áDJh CôÉs`pG0áDJh›²Cê@`pG¿,áDJh#ðÿC`pG¿@áDKJhëƒëƒ|pG¿œKJhëƒëƒX|pG¿œµð×ü$ðÜü F4ð¨ü4,ùÑKöŒJhšBÐÿ÷œÿðrøðòùðþù ðü5 ð~üÿ÷¤ÿ ðøOôÉrI ð½ø ½ Fð‚üà翼X$µÿ÷Çÿ0¿ý翵ÿ÷‘ÿ@¿½¿µÿ÷‹ÿ@¿" ð}ü½è@" ðP¼µÿ÷ÿ" ðrü½è@" ðE¼¿µ$ FðSü F4ðcü4,öÑKöŒJhšBÐðøð›ù ð,ü5 ð)ü ðÜÿ ÿ÷Uÿ@¿½ Fð2ü FðCüæç¼pG¿pG¿pG¿pG¿pG¿2±FɲDø“BûÑpG¿xC!±ø+*úÑFpGøµ LF!h +MI±K«B#`¿Kp¿#` ø½Oê8Fÿ÷×ÿ9Fîç¿ 8µFx8±%Fÿ÷Ûÿø(ùÑ`8½¿øµFxx±i±Fû«FD˜“ðøD @@ -371107,7 +378093,7 @@ diff -Naur --no-dereference a/firmware/am335x-pm-firmware.bin b/firmware/am335x- \ No newline at end of file diff -Naur --no-dereference a/firmware/am335x-pm-firmware.elf b/firmware/am335x-pm-firmware.elf --- a/firmware/am335x-pm-firmware.elf 1969-12-31 19:00:00.000000000 -0500 -+++ b/firmware/am335x-pm-firmware.elf 2024-08-28 19:44:05.652038182 -0400 ++++ b/firmware/am335x-pm-firmware.elf 2024-11-24 20:19:38.206228886 -0500 @@ -0,0 +1,388 @@ +ELF(4M4 (4*4*4*ÀQåtd™ é í ñ õ ù ý   • • • • • • • • • • • • • • • • • É • • • • • • • • • • • • • • å • E Y ± • • • Å Ù í )=Qey¡µÉJh CôÉs`pG0áDð<¹KD›hpG¿ÊD8K D›`pG¿ÊD8KJh›²`pG,áDœKhZ* ØJëƒëƒ˜h0¿ pG pG¿œ#J$Khhð´#Mð"J/`"NÃóÀp!L"HÃó!JÃó€%7`ÃóÀ#p%pHhJh `Sh ÐHI€è0P`˜D냛hHð¼GiðÑI h)ИIÄë„dh±T`éçI˜ÄQø$@,öÑáç<áD8áD°™¬˜¨0áD4áDœ¸Oðÿ3´HLIJ#``]øK ``pG4áD0áD8áD<áDJh CôÉs`pG0áDJh›²Cê@`pG¿,áDJh#ðÿC`pG¿@áDKJhëƒëƒ|pG¿œKJhëƒëƒX|pG¿œµð×ü$ðÜü F4ð¨ü4,ùÑKöŒJhšBÐÿ÷œÿðrøðòùðþù ðü5 ð~üÿ÷¤ÿ ðøOôÉrI ð½ø ½ Fð‚üà翼X$µÿ÷Çÿ0¿ý翵ÿ÷‘ÿ@¿½¿µÿ÷‹ÿ@¿" ð}ü½è@" ðP¼µÿ÷ÿ" ðrü½è@" ðE¼¿µ$ FðSü F4ðcü4,öÑKöŒJhšBÐðøð›ù ð,ü5 ð)ü ðÜÿ ÿ÷Uÿ@¿½ Fð2ü FðCüæç¼pG¿pG¿pG¿pG¿pG¿2±FɲDø“BûÑpG¿xC!±ø+*úÑFpGøµ LF!h +MI±K«B#`¿Kp¿#` ø½Oê8Fÿ÷×ÿ9Fîç¿ 8µFx8±%Fÿ÷Ûÿø(ùÑ`8½¿øµFxx±i±Fû«FD˜“ðøD @@ -371500,13 +378486,13 @@ diff -Naur --no-dereference a/firmware/am335x-pm-firmware.elf b/firmware/am335x- \ No newline at end of file diff -Naur --no-dereference a/firmware/am43x-evm-scale-data.bin b/firmware/am43x-evm-scale-data.bin --- a/firmware/am43x-evm-scale-data.bin 1969-12-31 19:00:00.000000000 -0500 -+++ b/firmware/am43x-evm-scale-data.bin 2024-08-28 19:44:05.652038182 -0400 ++++ b/firmware/am43x-evm-scale-data.bin 2024-11-24 20:19:38.206228886 -0500 @@ -0,0 +1 @@ + Wd$k$Š$g$†d$k$™$g$† \ No newline at end of file diff -Naur --no-dereference a/firmware/regulatory.db b/firmware/regulatory.db --- a/firmware/regulatory.db 1969-12-31 19:00:00.000000000 -0500 -+++ b/firmware/regulatory.db 2024-08-28 19:44:05.652038182 -0400 ++++ b/firmware/regulatory.db 2024-11-24 20:19:38.206228886 -0500 @@ -0,0 +1,22 @@ +RGDB00¹ADôAEqAF~AI‹ALáAM`AN~ARqASAATåAUÆAW~AZuBAôBB—BD®BEåBFqBGåBHcBL~BMABNˆBO©BR$BSžBT~BY~BZÃCA1CFfCHïCIqCLˆCNýCOqCR\CUCXžCYåCZåDEåDKåDM:DO:DZ”ECEEåEGÅESåET~FIåFMAFRêGBøGD=GExGF‹GHqGL‹GP‹GRåGT:GU6GY¼HK)HNqHRÜHTAHUåIDIEåILPIN´IR®ISôITåJMqJO‘JPKKEŽKH~KN„KPEKR KW{KYžKZÑLBqLC„LIôLK\LS~LTåLUåLVåMA{MCáMDáMEáMF‹MHAMKôMNžMO°MPAMQ‹MR~MTåMUžMVÙMW~MXqMYšNG¦NIANLåNOïNPˆNZ¸OM~PA-PEqPF‹PGqPHÍPKTPLåPM‹PR=PTåPWAPYžQA RE‹ROåRSôRURWqSA~SEåSGSIåSKåSNqSR~SVYSYITC¢TD~TGjTHqTN{TRÕTTqTW TZ¬UAUGžUS¿UY—UZ{VC~VEÀVIAVNmVUqWF‹WSjYEIYT‹ZAZW~#4JJ#4FJÐ …8)Ð ¸ Ãp Ë@Ð ¸ Ë@ À>€ ¸ ö8 À  ¸ À)@ ¸$Ÿ%¸@œ@Ð$Ÿ%å,œ@Ð$Ÿ%å,œ@ü$Ÿ%å,œ@ý$Ÿ%å,œ@ +Š$Ÿ%å,œ@ ¸$Ÿ%å,œ@$Ÿ%å,œ@$Ÿ%å,œ@Ð$¦Ð%¸@œ@ ¸$¦Ð%¸@œ@Ð$¦Ð%ßPN Ð$¦Ð%ßPœ@ü$¦Ð%ßPœ@ ¸$¦Ð%ßPœ@Ð$¦Ð%å,œ@Ð%}¨%ßPN Ð%À&0N  Ð%À&0N üJë°L$0œ@üN•0OÍ°œ@¢N•0PÐ8€ÐN•0PÐ8€±üN•0PÐ8€üN•0PÐ8€±üN•0PÐ8€üN•0PÐ8€±ýN•0PÐ8€ýN•0PÐ8€±ýN•0PÐ8€ýN•0PÐ8€± @@ -371533,7 +378519,7 @@ diff -Naur --no-dereference a/firmware/regulatory.db b/firmware/regulatory.db \ No newline at end of file diff -Naur --no-dereference a/firmware/regulatory.db.p7s b/firmware/regulatory.db.p7s --- a/firmware/regulatory.db.p7s 1969-12-31 19:00:00.000000000 -0500 -+++ b/firmware/regulatory.db.p7s 2024-08-28 19:44:05.652038182 -0400 ++++ b/firmware/regulatory.db.p7s 2024-11-24 20:19:38.206228886 -0500 @@ -0,0 +1,5 @@ +0‚š *†H†÷  ‚‹0‚‡10  `†He0  *†H†÷  ‚¨0‚¤0‚Œ ²ßG®ùΧ0  *†H†÷  010U sforshee0  171006194035Z21170912194035Z010U sforshee0‚"0  *†H†÷ ‚0‚ +‚µ@ãœ(„9ò9×f,A8¬~¥ƒq%~|hÝo?Ù×Y8Ÿ|jRÂ*-~fô³p [Ô—2=q‹;kaÄW‹–ý$Õ ùh„ûÊQ ÑEÚDŠÙþv©ý`- (•²-ꈘ¸ÑV!ðSñoéF›“_(¬6úh#qWVöÌÓß}*ÙsEëº'…ïz¥Ë€Ç06ÒSîì¬ç1ñ6¢œcÆe[%uh¡êÓ~\š^Ø 2w)f6sç—A7±±r+ô¡) |–y +ÐØÞÈl?“ûÅîxRzöâh™çûF„ãÇ¡æàÒFÕáÄ_ fôÚÄÿ•0  *†H†÷  ‚‡Úò‚Âݯ|D/†Ó_L“H¹þ»!÷%#Nª" ¹s®F|uÙÃIWG¿3·—ìõ@uÀF"ð ]œy¡ÿ¸£/{Ž?ȶäj(ò4\#?2Àæ­¬ÏUtGsÓ…· "V$}Ÿ ©†ž7[œmÙŒÈPjâYóê²BµXþºÑWï²8ˆXöªÄ.‹Z'ä¥è¤Êg\¬rgÃoÃ-5y׊çõÔ!0JÕö£ÙyVò÷}ÐQ“/Gø}K @@ -371541,9 +378527,41 @@ diff -Naur --no-dereference a/firmware/regulatory.db.p7s b/firmware/regulatory.d +}N;+/ü(³i4က»â¯¹Ö0ñT‡#™ŸQLE}es«ýÏ”Ì :`ý</3©!ËP±î f©y1‚¶0‚²0 010U sforshee ²ßG®ùΧ0  `†He i0 *†H†÷  1  *†H†÷ 0 *†H†÷  1 230901195657Z0/ *†H†÷  1" +J½zâ »pd)7̲):r¦PG0î¤Ziˆ‚YŸXch0  *†H†÷ ‚œŠ>’:õJDáŸ&z†\x“5kÀ_1ª>=>´iU,[?0>’cwö=E¸¥i{®œÞí?~x©?@$%;V„`+´Õ6Š²»AóC&´‡bµÚÖ›[¬tó6"!2(8j ‹çðÖžÈF5>¾¡ôvãa_àÉŽÞŽØâÆMöŸFٷߊ ¶ÈpJú:œrš’WÎÔÁ¯`%~@/çE¶[¿ˆÑ#’ÉWFÄêuy{²*ë_hÙÑÕÉé"ŽÌ„!Q¹Ì7£ΧØ…œ›×Ï[óó“ÕƒÏl„æ¨Ï h}NõÝy¯b”: ‘‰-Þºnôià‚ \ No newline at end of file +diff -Naur --no-dereference a/fs/afs/dir_silly.c b/fs/afs/dir_silly.c +--- a/fs/afs/dir_silly.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/afs/dir_silly.c 2024-11-24 20:19:38.207228888 -0500 +@@ -239,7 +239,7 @@ + struct dentry *alias; + int ret; + +- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq); ++ DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq); + + _enter("%p{%pd},%llx", dentry, dentry, vnode->fid.vnode); + +diff -Naur --no-dereference a/fs/aio.c b/fs/aio.c +--- a/fs/aio.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/aio.c 2024-11-24 20:19:38.207228888 -0500 +@@ -43,7 +43,6 @@ + #include + #include + +-#include + #include + #include + +@@ -1762,7 +1761,7 @@ + list_del_init(&req->wait.entry); + list_del(&iocb->ki_list); + iocb->ki_res.res = mangle_poll(mask); +- if (iocb->ki_eventfd && eventfd_signal_count()) { ++ if (iocb->ki_eventfd && !eventfd_signal_allowed()) { + iocb = NULL; + INIT_WORK(&req->work, aio_poll_put_work); + schedule_work(&req->work); diff -Naur --no-dereference a/fs/aufs/aufs.h b/fs/aufs/aufs.h --- a/fs/aufs/aufs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/aufs.h 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/aufs.h 2024-11-24 20:19:38.207228888 -0500 @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -371609,7 +378627,7 @@ diff -Naur --no-dereference a/fs/aufs/aufs.h b/fs/aufs/aufs.h +#endif /* __AUFS_H__ */ diff -Naur --no-dereference a/fs/aufs/branch.c b/fs/aufs/branch.c --- a/fs/aufs/branch.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/branch.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/branch.c 2024-11-24 20:19:38.207228888 -0500 @@ -0,0 +1,1427 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -373040,7 +380058,7 @@ diff -Naur --no-dereference a/fs/aufs/branch.c b/fs/aufs/branch.c +} diff -Naur --no-dereference a/fs/aufs/branch.h b/fs/aufs/branch.h --- a/fs/aufs/branch.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/branch.h 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/branch.h 2024-11-24 20:19:38.207228888 -0500 @@ -0,0 +1,364 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -373408,7 +380426,7 @@ diff -Naur --no-dereference a/fs/aufs/branch.h b/fs/aufs/branch.h +#endif /* __AUFS_BRANCH_H__ */ diff -Naur --no-dereference a/fs/aufs/conf.mk b/fs/aufs/conf.mk --- a/fs/aufs/conf.mk 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/conf.mk 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/conf.mk 2024-11-24 20:19:38.207228888 -0500 @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: GPL-2.0 + @@ -373452,7 +380470,7 @@ diff -Naur --no-dereference a/fs/aufs/conf.mk b/fs/aufs/conf.mk +-include ${srctree}/${src}/conf_priv.mk diff -Naur --no-dereference a/fs/aufs/cpup.c b/fs/aufs/cpup.c --- a/fs/aufs/cpup.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/cpup.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/cpup.c 2024-11-24 20:19:38.207228888 -0500 @@ -0,0 +1,1447 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -374903,7 +381921,7 @@ diff -Naur --no-dereference a/fs/aufs/cpup.c b/fs/aufs/cpup.c +} diff -Naur --no-dereference a/fs/aufs/cpup.h b/fs/aufs/cpup.h --- a/fs/aufs/cpup.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/cpup.h 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/cpup.h 2024-11-24 20:19:38.207228888 -0500 @@ -0,0 +1,100 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -375007,7 +382025,7 @@ diff -Naur --no-dereference a/fs/aufs/cpup.h b/fs/aufs/cpup.h +#endif /* __AUFS_CPUP_H__ */ diff -Naur --no-dereference a/fs/aufs/dbgaufs.c b/fs/aufs/dbgaufs.c --- a/fs/aufs/dbgaufs.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dbgaufs.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dbgaufs.c 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,526 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -375537,7 +382555,7 @@ diff -Naur --no-dereference a/fs/aufs/dbgaufs.c b/fs/aufs/dbgaufs.c +} diff -Naur --no-dereference a/fs/aufs/dbgaufs.h b/fs/aufs/dbgaufs.h --- a/fs/aufs/dbgaufs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dbgaufs.h 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dbgaufs.h 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -375594,7 +382612,7 @@ diff -Naur --no-dereference a/fs/aufs/dbgaufs.h b/fs/aufs/dbgaufs.h +#endif /* __DBGAUFS_H__ */ diff -Naur --no-dereference a/fs/aufs/dcsub.c b/fs/aufs/dcsub.c --- a/fs/aufs/dcsub.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dcsub.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dcsub.c 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,225 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -375823,7 +382841,7 @@ diff -Naur --no-dereference a/fs/aufs/dcsub.c b/fs/aufs/dcsub.c +} diff -Naur --no-dereference a/fs/aufs/dcsub.h b/fs/aufs/dcsub.h --- a/fs/aufs/dcsub.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dcsub.h 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dcsub.h 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,137 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -375964,7 +382982,7 @@ diff -Naur --no-dereference a/fs/aufs/dcsub.h b/fs/aufs/dcsub.h +#endif /* __AUFS_DCSUB_H__ */ diff -Naur --no-dereference a/fs/aufs/debug.c b/fs/aufs/debug.c --- a/fs/aufs/debug.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/debug.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/debug.c 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,444 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -376412,7 +383430,7 @@ diff -Naur --no-dereference a/fs/aufs/debug.c b/fs/aufs/debug.c +} diff -Naur --no-dereference a/fs/aufs/debug.h b/fs/aufs/debug.h --- a/fs/aufs/debug.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/debug.h 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/debug.h 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,226 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -376642,7 +383660,7 @@ diff -Naur --no-dereference a/fs/aufs/debug.h b/fs/aufs/debug.h +#endif /* __AUFS_DEBUG_H__ */ diff -Naur --no-dereference a/fs/aufs/dentry.c b/fs/aufs/dentry.c --- a/fs/aufs/dentry.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dentry.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dentry.c 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,1162 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -377808,7 +384826,7 @@ diff -Naur --no-dereference a/fs/aufs/dentry.c b/fs/aufs/dentry.c +}; diff -Naur --no-dereference a/fs/aufs/dentry.h b/fs/aufs/dentry.h --- a/fs/aufs/dentry.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dentry.h 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dentry.h 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,268 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -378080,7 +385098,7 @@ diff -Naur --no-dereference a/fs/aufs/dentry.h b/fs/aufs/dentry.h +#endif /* __AUFS_DENTRY_H__ */ diff -Naur --no-dereference a/fs/aufs/dinfo.c b/fs/aufs/dinfo.c --- a/fs/aufs/dinfo.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dinfo.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dinfo.c 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,554 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -378638,7 +385656,7 @@ diff -Naur --no-dereference a/fs/aufs/dinfo.c b/fs/aufs/dinfo.c +} diff -Naur --no-dereference a/fs/aufs/dir.c b/fs/aufs/dir.c --- a/fs/aufs/dir.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dir.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dir.c 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,763 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -379405,7 +386423,7 @@ diff -Naur --no-dereference a/fs/aufs/dir.c b/fs/aufs/dir.c +}; diff -Naur --no-dereference a/fs/aufs/dir.h b/fs/aufs/dir.h --- a/fs/aufs/dir.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dir.h 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dir.h 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,134 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -379543,7 +386561,7 @@ diff -Naur --no-dereference a/fs/aufs/dir.h b/fs/aufs/dir.h +#endif /* __AUFS_DIR_H__ */ diff -Naur --no-dereference a/fs/aufs/dirren.c b/fs/aufs/dirren.c --- a/fs/aufs/dirren.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dirren.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dirren.c 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,1315 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -380862,7 +387880,7 @@ diff -Naur --no-dereference a/fs/aufs/dirren.c b/fs/aufs/dirren.c +} diff -Naur --no-dereference a/fs/aufs/dirren.h b/fs/aufs/dirren.h --- a/fs/aufs/dirren.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dirren.h 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dirren.h 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,140 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -381006,7 +388024,7 @@ diff -Naur --no-dereference a/fs/aufs/dirren.h b/fs/aufs/dirren.h +#endif /* __AUFS_DIRREN_H__ */ diff -Naur --no-dereference a/fs/aufs/dynop.c b/fs/aufs/dynop.c --- a/fs/aufs/dynop.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dynop.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dynop.c 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,368 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -381378,7 +388396,7 @@ diff -Naur --no-dereference a/fs/aufs/dynop.c b/fs/aufs/dynop.c +} diff -Naur --no-dereference a/fs/aufs/dynop.h b/fs/aufs/dynop.h --- a/fs/aufs/dynop.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/dynop.h 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/dynop.h 2024-11-24 20:19:38.208228890 -0500 @@ -0,0 +1,77 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -381459,7 +388477,7 @@ diff -Naur --no-dereference a/fs/aufs/dynop.h b/fs/aufs/dynop.h +#endif /* __AUFS_DYNOP_H__ */ diff -Naur --no-dereference a/fs/aufs/export.c b/fs/aufs/export.c --- a/fs/aufs/export.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/export.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/export.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,836 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -382299,7 +389317,7 @@ diff -Naur --no-dereference a/fs/aufs/export.c b/fs/aufs/export.c +} diff -Naur --no-dereference a/fs/aufs/fhsm.c b/fs/aufs/fhsm.c --- a/fs/aufs/fhsm.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/fhsm.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/fhsm.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,427 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -382730,7 +389748,7 @@ diff -Naur --no-dereference a/fs/aufs/fhsm.c b/fs/aufs/fhsm.c +} diff -Naur --no-dereference a/fs/aufs/file.c b/fs/aufs/file.c --- a/fs/aufs/file.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/file.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/file.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,863 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -383597,7 +390615,7 @@ diff -Naur --no-dereference a/fs/aufs/file.c b/fs/aufs/file.c +}; diff -Naur --no-dereference a/fs/aufs/file.h b/fs/aufs/file.h --- a/fs/aufs/file.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/file.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/file.h 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,342 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -383943,7 +390961,7 @@ diff -Naur --no-dereference a/fs/aufs/file.h b/fs/aufs/file.h +#endif /* __AUFS_FILE_H__ */ diff -Naur --no-dereference a/fs/aufs/finfo.c b/fs/aufs/finfo.c --- a/fs/aufs/finfo.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/finfo.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/finfo.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,149 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -384096,7 +391114,7 @@ diff -Naur --no-dereference a/fs/aufs/finfo.c b/fs/aufs/finfo.c +} diff -Naur --no-dereference a/fs/aufs/f_op.c b/fs/aufs/f_op.c --- a/fs/aufs/f_op.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/f_op.c 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/f_op.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,775 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -384875,7 +391893,7 @@ diff -Naur --no-dereference a/fs/aufs/f_op.c b/fs/aufs/f_op.c +}; diff -Naur --no-dereference a/fs/aufs/fsctx.c b/fs/aufs/fsctx.c --- a/fs/aufs/fsctx.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/fsctx.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/fsctx.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,1242 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -386121,7 +393139,7 @@ diff -Naur --no-dereference a/fs/aufs/fsctx.c b/fs/aufs/fsctx.c +} diff -Naur --no-dereference a/fs/aufs/fstype.h b/fs/aufs/fstype.h --- a/fs/aufs/fstype.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/fstype.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/fstype.h 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,401 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -386526,7 +393544,7 @@ diff -Naur --no-dereference a/fs/aufs/fstype.h b/fs/aufs/fstype.h +#endif /* __AUFS_FSTYPE_H__ */ diff -Naur --no-dereference a/fs/aufs/hbl.h b/fs/aufs/hbl.h --- a/fs/aufs/hbl.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/hbl.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/hbl.h 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,65 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -386595,7 +393613,7 @@ diff -Naur --no-dereference a/fs/aufs/hbl.h b/fs/aufs/hbl.h +#endif /* __AUFS_HBL_H__ */ diff -Naur --no-dereference a/fs/aufs/hfsnotify.c b/fs/aufs/hfsnotify.c --- a/fs/aufs/hfsnotify.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/hfsnotify.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/hfsnotify.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,288 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -386887,7 +393905,7 @@ diff -Naur --no-dereference a/fs/aufs/hfsnotify.c b/fs/aufs/hfsnotify.c +}; diff -Naur --no-dereference a/fs/aufs/hfsplus.c b/fs/aufs/hfsplus.c --- a/fs/aufs/hfsplus.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/hfsplus.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/hfsplus.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -386951,7 +393969,7 @@ diff -Naur --no-dereference a/fs/aufs/hfsplus.c b/fs/aufs/hfsplus.c +} diff -Naur --no-dereference a/fs/aufs/hnotify.c b/fs/aufs/hnotify.c --- a/fs/aufs/hnotify.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/hnotify.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/hnotify.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,715 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -387670,7 +394688,7 @@ diff -Naur --no-dereference a/fs/aufs/hnotify.c b/fs/aufs/hnotify.c +} diff -Naur --no-dereference a/fs/aufs/iinfo.c b/fs/aufs/iinfo.c --- a/fs/aufs/iinfo.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/iinfo.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/iinfo.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,286 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -387960,7 +394978,7 @@ diff -Naur --no-dereference a/fs/aufs/iinfo.c b/fs/aufs/iinfo.c +} diff -Naur --no-dereference a/fs/aufs/inode.c b/fs/aufs/inode.c --- a/fs/aufs/inode.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/inode.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/inode.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,529 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -388493,7 +395511,7 @@ diff -Naur --no-dereference a/fs/aufs/inode.c b/fs/aufs/inode.c +} diff -Naur --no-dereference a/fs/aufs/inode.h b/fs/aufs/inode.h --- a/fs/aufs/inode.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/inode.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/inode.h 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,698 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -389195,7 +396213,7 @@ diff -Naur --no-dereference a/fs/aufs/inode.h b/fs/aufs/inode.h +#endif /* __AUFS_INODE_H__ */ diff -Naur --no-dereference a/fs/aufs/ioctl.c b/fs/aufs/ioctl.c --- a/fs/aufs/ioctl.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/ioctl.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/ioctl.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,220 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -389419,7 +396437,7 @@ diff -Naur --no-dereference a/fs/aufs/ioctl.c b/fs/aufs/ioctl.c +#endif diff -Naur --no-dereference a/fs/aufs/i_op_add.c b/fs/aufs/i_op_add.c --- a/fs/aufs/i_op_add.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/i_op_add.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/i_op_add.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,936 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -390359,7 +397377,7 @@ diff -Naur --no-dereference a/fs/aufs/i_op_add.c b/fs/aufs/i_op_add.c +} diff -Naur --no-dereference a/fs/aufs/i_op.c b/fs/aufs/i_op.c --- a/fs/aufs/i_op.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/i_op.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/i_op.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,1505 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -391868,7 +398886,7 @@ diff -Naur --no-dereference a/fs/aufs/i_op.c b/fs/aufs/i_op.c +}; diff -Naur --no-dereference a/fs/aufs/i_op_del.c b/fs/aufs/i_op_del.c --- a/fs/aufs/i_op_del.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/i_op_del.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/i_op_del.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,520 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -392392,7 +399410,7 @@ diff -Naur --no-dereference a/fs/aufs/i_op_del.c b/fs/aufs/i_op_del.c +} diff -Naur --no-dereference a/fs/aufs/i_op_ren.c b/fs/aufs/i_op_ren.c --- a/fs/aufs/i_op_ren.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/i_op_ren.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/i_op_ren.c 2024-11-24 20:19:38.209228892 -0500 @@ -0,0 +1,1256 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -393652,7 +400670,7 @@ diff -Naur --no-dereference a/fs/aufs/i_op_ren.c b/fs/aufs/i_op_ren.c +} diff -Naur --no-dereference a/fs/aufs/Kconfig b/fs/aufs/Kconfig --- a/fs/aufs/Kconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/Kconfig 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/Kconfig 2024-11-24 20:19:38.207228888 -0500 @@ -0,0 +1,199 @@ +# SPDX-License-Identifier: GPL-2.0 +config AUFS_FS @@ -393855,7 +400873,7 @@ diff -Naur --no-dereference a/fs/aufs/Kconfig b/fs/aufs/Kconfig +endif diff -Naur --no-dereference a/fs/aufs/lcnt.h b/fs/aufs/lcnt.h --- a/fs/aufs/lcnt.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/lcnt.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/lcnt.h 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,186 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -394045,7 +401063,7 @@ diff -Naur --no-dereference a/fs/aufs/lcnt.h b/fs/aufs/lcnt.h +#endif /* __AUFS_LCNT_H__ */ diff -Naur --no-dereference a/fs/aufs/loop.c b/fs/aufs/loop.c --- a/fs/aufs/loop.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/loop.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/loop.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -394197,7 +401215,7 @@ diff -Naur --no-dereference a/fs/aufs/loop.c b/fs/aufs/loop.c +} diff -Naur --no-dereference a/fs/aufs/loop.h b/fs/aufs/loop.h --- a/fs/aufs/loop.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/loop.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/loop.h 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -394256,7 +401274,7 @@ diff -Naur --no-dereference a/fs/aufs/loop.h b/fs/aufs/loop.h +#endif /* __AUFS_LOOP_H__ */ diff -Naur --no-dereference a/fs/aufs/magic.mk b/fs/aufs/magic.mk --- a/fs/aufs/magic.mk 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/magic.mk 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/magic.mk 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,31 @@ +# SPDX-License-Identifier: GPL-2.0 + @@ -394291,7 +401309,7 @@ diff -Naur --no-dereference a/fs/aufs/magic.mk b/fs/aufs/magic.mk +endif diff -Naur --no-dereference a/fs/aufs/Makefile b/fs/aufs/Makefile --- a/fs/aufs/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/Makefile 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/aufs/Makefile 2024-11-24 20:19:38.207228888 -0500 @@ -0,0 +1,46 @@ +# SPDX-License-Identifier: GPL-2.0 + @@ -394341,7 +401359,7 @@ diff -Naur --no-dereference a/fs/aufs/Makefile b/fs/aufs/Makefile +aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o diff -Naur --no-dereference a/fs/aufs/module.c b/fs/aufs/module.c --- a/fs/aufs/module.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/module.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/module.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,273 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -394618,7 +401636,7 @@ diff -Naur --no-dereference a/fs/aufs/module.c b/fs/aufs/module.c +module_exit(aufs_exit); diff -Naur --no-dereference a/fs/aufs/module.h b/fs/aufs/module.h --- a/fs/aufs/module.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/module.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/module.h 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,166 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -394788,7 +401806,7 @@ diff -Naur --no-dereference a/fs/aufs/module.h b/fs/aufs/module.h +#endif /* __AUFS_MODULE_H__ */ diff -Naur --no-dereference a/fs/aufs/mvdown.c b/fs/aufs/mvdown.c --- a/fs/aufs/mvdown.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/mvdown.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/mvdown.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,706 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -395498,7 +402516,7 @@ diff -Naur --no-dereference a/fs/aufs/mvdown.c b/fs/aufs/mvdown.c +} diff -Naur --no-dereference a/fs/aufs/opts.c b/fs/aufs/opts.c --- a/fs/aufs/opts.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/opts.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/opts.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,1032 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -396534,7 +403552,7 @@ diff -Naur --no-dereference a/fs/aufs/opts.c b/fs/aufs/opts.c +} diff -Naur --no-dereference a/fs/aufs/opts.h b/fs/aufs/opts.h --- a/fs/aufs/opts.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/opts.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/opts.h 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,263 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -396801,7 +403819,7 @@ diff -Naur --no-dereference a/fs/aufs/opts.h b/fs/aufs/opts.h +#endif /* __AUFS_OPTS_H__ */ diff -Naur --no-dereference a/fs/aufs/plink.c b/fs/aufs/plink.c --- a/fs/aufs/plink.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/plink.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/plink.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,516 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -397321,7 +404339,7 @@ diff -Naur --no-dereference a/fs/aufs/plink.c b/fs/aufs/plink.c +} diff -Naur --no-dereference a/fs/aufs/poll.c b/fs/aufs/poll.c --- a/fs/aufs/poll.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/poll.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/poll.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -397376,7 +404394,7 @@ diff -Naur --no-dereference a/fs/aufs/poll.c b/fs/aufs/poll.c +} diff -Naur --no-dereference a/fs/aufs/posix_acl.c b/fs/aufs/posix_acl.c --- a/fs/aufs/posix_acl.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/posix_acl.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/posix_acl.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -397485,7 +404503,7 @@ diff -Naur --no-dereference a/fs/aufs/posix_acl.c b/fs/aufs/posix_acl.c +} diff -Naur --no-dereference a/fs/aufs/procfs.c b/fs/aufs/procfs.c --- a/fs/aufs/procfs.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/procfs.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/procfs.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,170 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -397659,7 +404677,7 @@ diff -Naur --no-dereference a/fs/aufs/procfs.c b/fs/aufs/procfs.c +} diff -Naur --no-dereference a/fs/aufs/rdu.c b/fs/aufs/rdu.c --- a/fs/aufs/rdu.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/rdu.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/rdu.c 2024-11-24 20:19:38.210228893 -0500 @@ -0,0 +1,384 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -398047,7 +405065,7 @@ diff -Naur --no-dereference a/fs/aufs/rdu.c b/fs/aufs/rdu.c +#endif diff -Naur --no-dereference a/fs/aufs/rwsem.h b/fs/aufs/rwsem.h --- a/fs/aufs/rwsem.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/rwsem.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/rwsem.h 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,77 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -398128,7 +405146,7 @@ diff -Naur --no-dereference a/fs/aufs/rwsem.h b/fs/aufs/rwsem.h +#endif /* __AUFS_RWSEM_H__ */ diff -Naur --no-dereference a/fs/aufs/sbinfo.c b/fs/aufs/sbinfo.c --- a/fs/aufs/sbinfo.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/sbinfo.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/sbinfo.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,316 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -398448,7 +405466,7 @@ diff -Naur --no-dereference a/fs/aufs/sbinfo.c b/fs/aufs/sbinfo.c +} diff -Naur --no-dereference a/fs/aufs/super.c b/fs/aufs/super.c --- a/fs/aufs/super.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/super.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/super.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,868 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -399320,7 +406338,7 @@ diff -Naur --no-dereference a/fs/aufs/super.c b/fs/aufs/super.c +}; diff -Naur --no-dereference a/fs/aufs/super.h b/fs/aufs/super.h --- a/fs/aufs/super.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/super.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/super.h 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,592 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -399916,7 +406934,7 @@ diff -Naur --no-dereference a/fs/aufs/super.h b/fs/aufs/super.h +#endif /* __AUFS_SUPER_H__ */ diff -Naur --no-dereference a/fs/aufs/sysaufs.c b/fs/aufs/sysaufs.c --- a/fs/aufs/sysaufs.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/sysaufs.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/sysaufs.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -400013,7 +407031,7 @@ diff -Naur --no-dereference a/fs/aufs/sysaufs.c b/fs/aufs/sysaufs.c +} diff -Naur --no-dereference a/fs/aufs/sysaufs.h b/fs/aufs/sysaufs.h --- a/fs/aufs/sysaufs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/sysaufs.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/sysaufs.h 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,102 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -400119,7 +407137,7 @@ diff -Naur --no-dereference a/fs/aufs/sysaufs.h b/fs/aufs/sysaufs.h +#endif /* __SYSAUFS_H__ */ diff -Naur --no-dereference a/fs/aufs/sysfs.c b/fs/aufs/sysfs.c --- a/fs/aufs/sysfs.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/sysfs.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/sysfs.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,374 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -400497,7 +407515,7 @@ diff -Naur --no-dereference a/fs/aufs/sysfs.c b/fs/aufs/sysfs.c +} diff -Naur --no-dereference a/fs/aufs/sysrq.c b/fs/aufs/sysrq.c --- a/fs/aufs/sysrq.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/sysrq.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/sysrq.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,149 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -400650,7 +407668,7 @@ diff -Naur --no-dereference a/fs/aufs/sysrq.c b/fs/aufs/sysrq.c +} diff -Naur --no-dereference a/fs/aufs/vdir.c b/fs/aufs/vdir.c --- a/fs/aufs/vdir.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/vdir.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/vdir.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,896 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -401550,7 +408568,7 @@ diff -Naur --no-dereference a/fs/aufs/vdir.c b/fs/aufs/vdir.c +} diff -Naur --no-dereference a/fs/aufs/vfsub.c b/fs/aufs/vfsub.c --- a/fs/aufs/vfsub.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/vfsub.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/vfsub.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,889 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -402443,7 +409461,7 @@ diff -Naur --no-dereference a/fs/aufs/vfsub.c b/fs/aufs/vfsub.c +} diff -Naur --no-dereference a/fs/aufs/vfsub.h b/fs/aufs/vfsub.h --- a/fs/aufs/vfsub.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/vfsub.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/vfsub.h 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,354 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -402801,7 +409819,7 @@ diff -Naur --no-dereference a/fs/aufs/vfsub.h b/fs/aufs/vfsub.h +#endif /* __AUFS_VFSUB_H__ */ diff -Naur --no-dereference a/fs/aufs/wbr_policy.c b/fs/aufs/wbr_policy.c --- a/fs/aufs/wbr_policy.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/wbr_policy.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/wbr_policy.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,830 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -403635,7 +410653,7 @@ diff -Naur --no-dereference a/fs/aufs/wbr_policy.c b/fs/aufs/wbr_policy.c +}; diff -Naur --no-dereference a/fs/aufs/whout.c b/fs/aufs/whout.c --- a/fs/aufs/whout.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/whout.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/whout.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,1064 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -404703,7 +411721,7 @@ diff -Naur --no-dereference a/fs/aufs/whout.c b/fs/aufs/whout.c +} diff -Naur --no-dereference a/fs/aufs/whout.h b/fs/aufs/whout.h --- a/fs/aufs/whout.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/whout.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/whout.h 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,86 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -404793,7 +411811,7 @@ diff -Naur --no-dereference a/fs/aufs/whout.h b/fs/aufs/whout.h +#endif /* __AUFS_WHOUT_H__ */ diff -Naur --no-dereference a/fs/aufs/wkq.c b/fs/aufs/wkq.c --- a/fs/aufs/wkq.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/wkq.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/wkq.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,372 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -405169,7 +412187,7 @@ diff -Naur --no-dereference a/fs/aufs/wkq.c b/fs/aufs/wkq.c +} diff -Naur --no-dereference a/fs/aufs/wkq.h b/fs/aufs/wkq.h --- a/fs/aufs/wkq.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/wkq.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/wkq.h 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,89 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -405262,7 +412280,7 @@ diff -Naur --no-dereference a/fs/aufs/wkq.h b/fs/aufs/wkq.h +#endif /* __AUFS_WKQ_H__ */ diff -Naur --no-dereference a/fs/aufs/xattr.c b/fs/aufs/xattr.c --- a/fs/aufs/xattr.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/xattr.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/xattr.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,356 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -405622,7 +412640,7 @@ diff -Naur --no-dereference a/fs/aufs/xattr.c b/fs/aufs/xattr.c +} diff -Naur --no-dereference a/fs/aufs/xino.c b/fs/aufs/xino.c --- a/fs/aufs/xino.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/aufs/xino.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/aufs/xino.c 2024-11-24 20:19:38.211228895 -0500 @@ -0,0 +1,1926 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -407550,9 +414568,32 @@ diff -Naur --no-dereference a/fs/aufs/xino.c b/fs/aufs/xino.c +out: + return err; +} +diff -Naur --no-dereference a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h +--- a/fs/btrfs/ctree.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/btrfs/ctree.h 2024-11-24 20:19:38.212228897 -0500 +@@ -17,7 +17,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff -Naur --no-dereference a/fs/cifs/readdir.c b/fs/cifs/readdir.c +--- a/fs/cifs/readdir.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/cifs/readdir.c 2024-11-24 20:19:38.212228897 -0500 +@@ -81,7 +81,7 @@ + struct inode *inode; + struct super_block *sb = parent->d_sb; + struct cifs_sb_info *cifs_sb = CIFS_SB(sb); +- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq); ++ DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq); + + cifs_dbg(FYI, "%s: for %s\n", __func__, name->name); + diff -Naur --no-dereference a/fs/dcache.c b/fs/dcache.c --- a/fs/dcache.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/dcache.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/dcache.c 2024-11-24 20:19:38.212228897 -0500 @@ -1285,7 +1285,7 @@ * * The @enter() callbacks are called with d_lock held. @@ -407570,7 +414611,90 @@ diff -Naur --no-dereference a/fs/dcache.c b/fs/dcache.c struct check_mount { struct vfsmount *mnt; -@@ -2935,6 +2936,7 @@ +@@ -2503,9 +2504,10 @@ + static inline unsigned start_dir_add(struct inode *dir) + { + ++ preempt_disable_rt(); + for (;;) { +- unsigned n = dir->i_dir_seq; +- if (!(n & 1) && cmpxchg(&dir->i_dir_seq, n, n + 1) == n) ++ unsigned n = dir->__i_dir_seq; ++ if (!(n & 1) && cmpxchg(&dir->__i_dir_seq, n, n + 1) == n) + return n; + cpu_relax(); + } +@@ -2513,26 +2515,30 @@ + + static inline void end_dir_add(struct inode *dir, unsigned n) + { +- smp_store_release(&dir->i_dir_seq, n + 2); ++ smp_store_release(&dir->__i_dir_seq, n + 2); ++ preempt_enable_rt(); + } + + static void d_wait_lookup(struct dentry *dentry) + { +- if (d_in_lookup(dentry)) { +- DECLARE_WAITQUEUE(wait, current); +- add_wait_queue(dentry->d_wait, &wait); +- do { +- set_current_state(TASK_UNINTERRUPTIBLE); +- spin_unlock(&dentry->d_lock); +- schedule(); +- spin_lock(&dentry->d_lock); +- } while (d_in_lookup(dentry)); +- } ++ struct swait_queue __wait; ++ ++ if (!d_in_lookup(dentry)) ++ return; ++ ++ INIT_LIST_HEAD(&__wait.task_list); ++ do { ++ prepare_to_swait_exclusive(dentry->d_wait, &__wait, TASK_UNINTERRUPTIBLE); ++ spin_unlock(&dentry->d_lock); ++ schedule(); ++ spin_lock(&dentry->d_lock); ++ } while (d_in_lookup(dentry)); ++ finish_swait(dentry->d_wait, &__wait); + } + + struct dentry *d_alloc_parallel(struct dentry *parent, + const struct qstr *name, +- wait_queue_head_t *wq) ++ struct swait_queue_head *wq) + { + unsigned int hash = name->hash; + struct hlist_bl_head *b = in_lookup_hash(parent, hash); +@@ -2546,7 +2552,7 @@ + + retry: + rcu_read_lock(); +- seq = smp_load_acquire(&parent->d_inode->i_dir_seq); ++ seq = smp_load_acquire(&parent->d_inode->__i_dir_seq); + r_seq = read_seqbegin(&rename_lock); + dentry = __d_lookup_rcu(parent, name, &d_seq); + if (unlikely(dentry)) { +@@ -2574,7 +2580,7 @@ + } + + hlist_bl_lock(b); +- if (unlikely(READ_ONCE(parent->d_inode->i_dir_seq) != seq)) { ++ if (unlikely(READ_ONCE(parent->d_inode->__i_dir_seq) != seq)) { + hlist_bl_unlock(b); + rcu_read_unlock(); + goto retry; +@@ -2647,7 +2653,7 @@ + hlist_bl_lock(b); + dentry->d_flags &= ~DCACHE_PAR_LOOKUP; + __hlist_bl_del(&dentry->d_u.d_in_lookup_hash); +- wake_up_all(dentry->d_wait); ++ swake_up_all(dentry->d_wait); + dentry->d_wait = NULL; + hlist_bl_unlock(b); + INIT_HLIST_NODE(&dentry->d_u.d_alias); +@@ -2935,6 +2941,7 @@ write_sequnlock(&rename_lock); } @@ -407578,9 +414702,48 @@ diff -Naur --no-dereference a/fs/dcache.c b/fs/dcache.c /** * d_ancestor - search for an ancestor +diff -Naur --no-dereference a/fs/eventfd.c b/fs/eventfd.c +--- a/fs/eventfd.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/eventfd.c 2024-11-24 20:19:38.212228897 -0500 +@@ -25,8 +25,6 @@ + #include + #include + +-DEFINE_PER_CPU(int, eventfd_wake_count); +- + static DEFINE_IDA(eventfd_ida); + + struct eventfd_ctx { +@@ -53,21 +51,21 @@ + * Deadlock or stack overflow issues can happen if we recurse here + * through waitqueue wakeup handlers. If the caller users potentially + * nested waitqueues with custom wakeup handlers, then it should +- * check eventfd_signal_count() before calling this function. If +- * it returns true, the eventfd_signal() call should be deferred to a ++ * check eventfd_signal_allowed() before calling this function. If ++ * it returns false, the eventfd_signal() call should be deferred to a + * safe context. + */ +- if (WARN_ON_ONCE(this_cpu_read(eventfd_wake_count))) ++ if (WARN_ON_ONCE(current->in_eventfd_signal)) + return 0; + + spin_lock_irqsave(&ctx->wqh.lock, flags); +- this_cpu_inc(eventfd_wake_count); ++ current->in_eventfd_signal = 1; + if (ULLONG_MAX - ctx->count < n) + n = ULLONG_MAX - ctx->count; + ctx->count += n; + if (waitqueue_active(&ctx->wqh)) + wake_up_locked_poll(&ctx->wqh, EPOLLIN | mask); +- this_cpu_dec(eventfd_wake_count); ++ current->in_eventfd_signal = 0; + spin_unlock_irqrestore(&ctx->wqh.lock, flags); + + return n; diff -Naur --no-dereference a/fs/exec.c b/fs/exec.c --- a/fs/exec.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/exec.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/exec.c 2024-11-24 20:19:38.212228897 -0500 @@ -113,6 +113,7 @@ return (path->mnt->mnt_flags & MNT_NOEXEC) || (path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC); @@ -407591,7 +414754,7 @@ diff -Naur --no-dereference a/fs/exec.c b/fs/exec.c /* diff -Naur --no-dereference a/fs/fcntl.c b/fs/fcntl.c --- a/fs/fcntl.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/fcntl.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/fcntl.c 2024-11-24 20:19:38.212228897 -0500 @@ -32,7 +32,7 @@ #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME) @@ -407620,7 +414783,7 @@ diff -Naur --no-dereference a/fs/fcntl.c b/fs/fcntl.c int force) diff -Naur --no-dereference a/fs/file_table.c b/fs/file_table.c --- a/fs/file_table.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/file_table.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/file_table.c 2024-11-24 20:19:38.212228897 -0500 @@ -162,6 +162,7 @@ } return ERR_PTR(-ENFILE); @@ -407629,9 +414792,123 @@ diff -Naur --no-dereference a/fs/file_table.c b/fs/file_table.c /* * Variant of alloc_empty_file() that doesn't check and modify nr_files. +diff -Naur --no-dereference a/fs/fscache/internal.h b/fs/fscache/internal.h +--- a/fs/fscache/internal.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/fscache/internal.h 2024-11-24 20:19:38.212228897 -0500 +@@ -95,7 +95,6 @@ + extern struct kobject *fscache_root; + extern struct workqueue_struct *fscache_object_wq; + extern struct workqueue_struct *fscache_op_wq; +-DECLARE_PER_CPU(wait_queue_head_t, fscache_object_cong_wait); + + extern unsigned int fscache_hash(unsigned int salt, unsigned int *data, unsigned int n); + +diff -Naur --no-dereference a/fs/fscache/main.c b/fs/fscache/main.c +--- a/fs/fscache/main.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/fscache/main.c 2024-11-24 20:19:38.212228897 -0500 +@@ -41,8 +41,6 @@ + struct workqueue_struct *fscache_object_wq; + struct workqueue_struct *fscache_op_wq; + +-DEFINE_PER_CPU(wait_queue_head_t, fscache_object_cong_wait); +- + /* these values serve as lower bounds, will be adjusted in fscache_init() */ + static unsigned fscache_object_max_active = 4; + static unsigned fscache_op_max_active = 2; +@@ -138,7 +136,6 @@ + static int __init fscache_init(void) + { + unsigned int nr_cpus = num_possible_cpus(); +- unsigned int cpu; + int ret; + + fscache_object_max_active = +@@ -161,9 +158,6 @@ + if (!fscache_op_wq) + goto error_op_wq; + +- for_each_possible_cpu(cpu) +- init_waitqueue_head(&per_cpu(fscache_object_cong_wait, cpu)); +- + ret = fscache_proc_init(); + if (ret < 0) + goto error_proc; +diff -Naur --no-dereference a/fs/fscache/object.c b/fs/fscache/object.c +--- a/fs/fscache/object.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/fscache/object.c 2024-11-24 20:19:38.213228899 -0500 +@@ -807,6 +807,8 @@ + } + EXPORT_SYMBOL(fscache_object_destroy); + ++static DECLARE_WAIT_QUEUE_HEAD(fscache_object_cong_wait); ++ + /* + * enqueue an object for metadata-type processing + */ +@@ -815,16 +817,12 @@ + _enter("{OBJ%x}", object->debug_id); + + if (fscache_get_object(object, fscache_obj_get_queue) >= 0) { +- wait_queue_head_t *cong_wq = +- &get_cpu_var(fscache_object_cong_wait); + + if (queue_work(fscache_object_wq, &object->work)) { + if (fscache_object_congested()) +- wake_up(cong_wq); ++ wake_up(&fscache_object_cong_wait); + } else + fscache_put_object(object, fscache_obj_put_queue); +- +- put_cpu_var(fscache_object_cong_wait); + } + } + +@@ -842,16 +840,15 @@ + */ + bool fscache_object_sleep_till_congested(signed long *timeoutp) + { +- wait_queue_head_t *cong_wq = this_cpu_ptr(&fscache_object_cong_wait); + DEFINE_WAIT(wait); + + if (fscache_object_congested()) + return true; + +- add_wait_queue_exclusive(cong_wq, &wait); ++ add_wait_queue_exclusive(&fscache_object_cong_wait, &wait); + if (!fscache_object_congested()) + *timeoutp = schedule_timeout(*timeoutp); +- finish_wait(cong_wq, &wait); ++ finish_wait(&fscache_object_cong_wait, &wait); + + return fscache_object_congested(); + } +diff -Naur --no-dereference a/fs/fuse/readdir.c b/fs/fuse/readdir.c +--- a/fs/fuse/readdir.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/fuse/readdir.c 2024-11-24 20:19:38.213228899 -0500 +@@ -160,7 +160,7 @@ + struct inode *dir = d_inode(parent); + struct fuse_conn *fc; + struct inode *inode; +- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq); ++ DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq); + + if (!o->nodeid) { + /* +diff -Naur --no-dereference a/fs/inode.c b/fs/inode.c +--- a/fs/inode.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/inode.c 2024-11-24 20:19:38.213228899 -0500 +@@ -158,7 +158,7 @@ + inode->i_bdev = NULL; + inode->i_cdev = NULL; + inode->i_link = NULL; +- inode->i_dir_seq = 0; ++ inode->__i_dir_seq = 0; + inode->i_rdev = 0; + inode->dirtied_when = 0; + diff -Naur --no-dereference a/fs/Kconfig b/fs/Kconfig --- a/fs/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/Kconfig 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/Kconfig 2024-11-24 20:19:38.207228888 -0500 @@ -288,6 +288,7 @@ source "fs/ufs/Kconfig" source "fs/erofs/Kconfig" @@ -407650,7 +414927,7 @@ diff -Naur --no-dereference a/fs/Kconfig b/fs/Kconfig source "fs/9p/Kconfig" diff -Naur --no-dereference a/fs/ksmbd/asn1.c b/fs/ksmbd/asn1.c --- a/fs/ksmbd/asn1.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/asn1.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/asn1.c 2024-11-24 20:19:38.213228899 -0500 @@ -0,0 +1,340 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -407994,7 +415271,7 @@ diff -Naur --no-dereference a/fs/ksmbd/asn1.c b/fs/ksmbd/asn1.c +} diff -Naur --no-dereference a/fs/ksmbd/asn1.h b/fs/ksmbd/asn1.h --- a/fs/ksmbd/asn1.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/asn1.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/asn1.h 2024-11-24 20:19:38.213228899 -0500 @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -408019,7 +415296,7 @@ diff -Naur --no-dereference a/fs/ksmbd/asn1.h b/fs/ksmbd/asn1.h +#endif /* __ASN1_H__ */ diff -Naur --no-dereference a/fs/ksmbd/auth.c b/fs/ksmbd/auth.c --- a/fs/ksmbd/auth.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/auth.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/auth.c 2024-11-24 20:19:38.213228899 -0500 @@ -0,0 +1,1555 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -409578,7 +416855,7 @@ diff -Naur --no-dereference a/fs/ksmbd/auth.c b/fs/ksmbd/auth.c +} diff -Naur --no-dereference a/fs/ksmbd/auth.h b/fs/ksmbd/auth.h --- a/fs/ksmbd/auth.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/auth.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/auth.h 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,85 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -409667,7 +416944,7 @@ diff -Naur --no-dereference a/fs/ksmbd/auth.h b/fs/ksmbd/auth.h +#endif diff -Naur --no-dereference a/fs/ksmbd/build_ksmbd.sh b/fs/ksmbd/build_ksmbd.sh --- a/fs/ksmbd/build_ksmbd.sh 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/build_ksmbd.sh 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/build_ksmbd.sh 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,177 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# @@ -409848,7 +417125,7 @@ diff -Naur --no-dereference a/fs/ksmbd/build_ksmbd.sh b/fs/ksmbd/build_ksmbd.sh +main $1 diff -Naur --no-dereference a/fs/ksmbd/connection.c b/fs/ksmbd/connection.c --- a/fs/ksmbd/connection.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/connection.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/connection.c 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,513 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -410365,7 +417642,7 @@ diff -Naur --no-dereference a/fs/ksmbd/connection.c b/fs/ksmbd/connection.c +} diff -Naur --no-dereference a/fs/ksmbd/connection.h b/fs/ksmbd/connection.h --- a/fs/ksmbd/connection.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/connection.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/connection.h 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,231 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -410600,7 +417877,7 @@ diff -Naur --no-dereference a/fs/ksmbd/connection.h b/fs/ksmbd/connection.h +#endif /* __CONNECTION_H__ */ diff -Naur --no-dereference a/fs/ksmbd/crypto_ctx.c b/fs/ksmbd/crypto_ctx.c --- a/fs/ksmbd/crypto_ctx.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/crypto_ctx.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/crypto_ctx.c 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,282 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -410886,7 +418163,7 @@ diff -Naur --no-dereference a/fs/ksmbd/crypto_ctx.c b/fs/ksmbd/crypto_ctx.c +} diff -Naur --no-dereference a/fs/ksmbd/crypto_ctx.h b/fs/ksmbd/crypto_ctx.h --- a/fs/ksmbd/crypto_ctx.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/crypto_ctx.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/crypto_ctx.h 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -410964,7 +418241,7 @@ diff -Naur --no-dereference a/fs/ksmbd/crypto_ctx.h b/fs/ksmbd/crypto_ctx.h +#endif /* __CRYPTO_CTX_H__ */ diff -Naur --no-dereference a/fs/ksmbd/dkms.conf b/fs/ksmbd/dkms.conf --- a/fs/ksmbd/dkms.conf 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/dkms.conf 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/dkms.conf 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,6 @@ +PACKAGE_NAME="ksmbd" +PACKAGE_VERSION="@VERSION@" @@ -410974,7 +418251,7 @@ diff -Naur --no-dereference a/fs/ksmbd/dkms.conf b/fs/ksmbd/dkms.conf +AUTOINSTALL="yes" diff -Naur --no-dereference a/fs/ksmbd/glob.h b/fs/ksmbd/glob.h --- a/fs/ksmbd/glob.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/glob.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/glob.h 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -411036,7 +418313,7 @@ diff -Naur --no-dereference a/fs/ksmbd/glob.h b/fs/ksmbd/glob.h +#endif /* __KSMBD_GLOB_H */ diff -Naur --no-dereference a/fs/ksmbd/Kconfig b/fs/ksmbd/Kconfig --- a/fs/ksmbd/Kconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/Kconfig 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/Kconfig 2024-11-24 20:19:38.213228899 -0500 @@ -0,0 +1,79 @@ +config SMB_SERVER + tristate "SMB3 server support (EXPERIMENTAL)" @@ -411119,7 +418396,7 @@ diff -Naur --no-dereference a/fs/ksmbd/Kconfig b/fs/ksmbd/Kconfig + default n diff -Naur --no-dereference a/fs/ksmbd/ksmbd_netlink.h b/fs/ksmbd/ksmbd_netlink.h --- a/fs/ksmbd/ksmbd_netlink.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/ksmbd_netlink.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/ksmbd_netlink.h 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,414 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -411537,7 +418814,7 @@ diff -Naur --no-dereference a/fs/ksmbd/ksmbd_netlink.h b/fs/ksmbd/ksmbd_netlink. +#endif /* _LINUX_KSMBD_SERVER_H */ diff -Naur --no-dereference a/fs/ksmbd/ksmbd.rst b/fs/ksmbd/ksmbd.rst --- a/fs/ksmbd/ksmbd.rst 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/ksmbd.rst 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/ksmbd.rst 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,183 @@ +.. SPDX-License-Identifier: GPL-2.0 + @@ -411724,7 +419001,7 @@ diff -Naur --no-dereference a/fs/ksmbd/ksmbd.rst b/fs/ksmbd/ksmbd.rst + If you try the selected component once more, It is disabled without brackets. diff -Naur --no-dereference a/fs/ksmbd/ksmbd_spnego_negtokeninit.asn1 b/fs/ksmbd/ksmbd_spnego_negtokeninit.asn1 --- a/fs/ksmbd/ksmbd_spnego_negtokeninit.asn1 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/ksmbd_spnego_negtokeninit.asn1 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/ksmbd_spnego_negtokeninit.asn1 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,31 @@ +GSSAPI ::= + [APPLICATION 0] IMPLICIT SEQUENCE { @@ -411759,7 +419036,7 @@ diff -Naur --no-dereference a/fs/ksmbd/ksmbd_spnego_negtokeninit.asn1 b/fs/ksmbd + } diff -Naur --no-dereference a/fs/ksmbd/ksmbd_spnego_negtokentarg.asn1 b/fs/ksmbd/ksmbd_spnego_negtokentarg.asn1 --- a/fs/ksmbd/ksmbd_spnego_negtokentarg.asn1 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/ksmbd_spnego_negtokentarg.asn1 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/ksmbd_spnego_negtokentarg.asn1 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,19 @@ +GSSAPI ::= + CHOICE { @@ -411782,7 +419059,7 @@ diff -Naur --no-dereference a/fs/ksmbd/ksmbd_spnego_negtokentarg.asn1 b/fs/ksmbd + } diff -Naur --no-dereference a/fs/ksmbd/ksmbd_work.c b/fs/ksmbd/ksmbd_work.c --- a/fs/ksmbd/ksmbd_work.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/ksmbd_work.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/ksmbd_work.c 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,173 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -411959,7 +419236,7 @@ diff -Naur --no-dereference a/fs/ksmbd/ksmbd_work.c b/fs/ksmbd/ksmbd_work.c +} diff -Naur --no-dereference a/fs/ksmbd/ksmbd_work.h b/fs/ksmbd/ksmbd_work.h --- a/fs/ksmbd/ksmbd_work.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/ksmbd_work.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/ksmbd_work.h 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,144 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -412107,7 +419384,7 @@ diff -Naur --no-dereference a/fs/ksmbd/ksmbd_work.h b/fs/ksmbd/ksmbd_work.h +#endif /* __KSMBD_WORK_H__ */ diff -Naur --no-dereference a/fs/ksmbd/Makefile b/fs/ksmbd/Makefile --- a/fs/ksmbd/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/Makefile 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/Makefile 2024-11-24 20:19:38.213228899 -0500 @@ -0,0 +1,75 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# @@ -412186,7 +419463,7 @@ diff -Naur --no-dereference a/fs/ksmbd/Makefile b/fs/ksmbd/Makefile +.PHONY : all clean install uninstall diff -Naur --no-dereference a/fs/ksmbd/mgmt/ksmbd_ida.c b/fs/ksmbd/mgmt/ksmbd_ida.c --- a/fs/ksmbd/mgmt/ksmbd_ida.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/mgmt/ksmbd_ida.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/mgmt/ksmbd_ida.c 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -412247,7 +419524,7 @@ diff -Naur --no-dereference a/fs/ksmbd/mgmt/ksmbd_ida.c b/fs/ksmbd/mgmt/ksmbd_id +} diff -Naur --no-dereference a/fs/ksmbd/mgmt/ksmbd_ida.h b/fs/ksmbd/mgmt/ksmbd_ida.h --- a/fs/ksmbd/mgmt/ksmbd_ida.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/mgmt/ksmbd_ida.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/mgmt/ksmbd_ida.h 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -412291,7 +419568,7 @@ diff -Naur --no-dereference a/fs/ksmbd/mgmt/ksmbd_ida.h b/fs/ksmbd/mgmt/ksmbd_id +#endif /* __KSMBD_IDA_MANAGEMENT_H__ */ diff -Naur --no-dereference a/fs/ksmbd/mgmt/share_config.c b/fs/ksmbd/mgmt/share_config.c --- a/fs/ksmbd/mgmt/share_config.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/mgmt/share_config.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/mgmt/share_config.c 2024-11-24 20:19:38.214228901 -0500 @@ -0,0 +1,234 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -412529,7 +419806,7 @@ diff -Naur --no-dereference a/fs/ksmbd/mgmt/share_config.c b/fs/ksmbd/mgmt/share +} diff -Naur --no-dereference a/fs/ksmbd/mgmt/share_config.h b/fs/ksmbd/mgmt/share_config.h --- a/fs/ksmbd/mgmt/share_config.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/mgmt/share_config.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/mgmt/share_config.h 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,75 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -412608,7 +419885,7 @@ diff -Naur --no-dereference a/fs/ksmbd/mgmt/share_config.h b/fs/ksmbd/mgmt/share +#endif /* __SHARE_CONFIG_MANAGEMENT_H__ */ diff -Naur --no-dereference a/fs/ksmbd/mgmt/tree_connect.c b/fs/ksmbd/mgmt/tree_connect.c --- a/fs/ksmbd/mgmt/tree_connect.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/mgmt/tree_connect.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/mgmt/tree_connect.c 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -412748,7 +420025,7 @@ diff -Naur --no-dereference a/fs/ksmbd/mgmt/tree_connect.c b/fs/ksmbd/mgmt/tree_ +} diff -Naur --no-dereference a/fs/ksmbd/mgmt/tree_connect.h b/fs/ksmbd/mgmt/tree_connect.h --- a/fs/ksmbd/mgmt/tree_connect.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/mgmt/tree_connect.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/mgmt/tree_connect.h 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -412810,7 +420087,7 @@ diff -Naur --no-dereference a/fs/ksmbd/mgmt/tree_connect.h b/fs/ksmbd/mgmt/tree_ +#endif /* __TREE_CONNECT_MANAGEMENT_H__ */ diff -Naur --no-dereference a/fs/ksmbd/mgmt/user_config.c b/fs/ksmbd/mgmt/user_config.c --- a/fs/ksmbd/mgmt/user_config.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/mgmt/user_config.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/mgmt/user_config.c 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -412893,7 +420170,7 @@ diff -Naur --no-dereference a/fs/ksmbd/mgmt/user_config.c b/fs/ksmbd/mgmt/user_c +} diff -Naur --no-dereference a/fs/ksmbd/mgmt/user_config.h b/fs/ksmbd/mgmt/user_config.h --- a/fs/ksmbd/mgmt/user_config.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/mgmt/user_config.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/mgmt/user_config.h 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,68 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -412965,7 +420242,7 @@ diff -Naur --no-dereference a/fs/ksmbd/mgmt/user_config.h b/fs/ksmbd/mgmt/user_c +#endif /* __USER_CONFIG_MANAGEMENT_H__ */ diff -Naur --no-dereference a/fs/ksmbd/mgmt/user_session.c b/fs/ksmbd/mgmt/user_session.c --- a/fs/ksmbd/mgmt/user_session.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/mgmt/user_session.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/mgmt/user_session.c 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,440 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -413409,7 +420686,7 @@ diff -Naur --no-dereference a/fs/ksmbd/mgmt/user_session.c b/fs/ksmbd/mgmt/user_ +} diff -Naur --no-dereference a/fs/ksmbd/mgmt/user_session.h b/fs/ksmbd/mgmt/user_session.h --- a/fs/ksmbd/mgmt/user_session.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/mgmt/user_session.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/mgmt/user_session.h 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,109 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -413522,7 +420799,7 @@ diff -Naur --no-dereference a/fs/ksmbd/mgmt/user_session.h b/fs/ksmbd/mgmt/user_ +#endif /* __USER_SESSION_MANAGEMENT_H__ */ diff -Naur --no-dereference a/fs/ksmbd/misc.c b/fs/ksmbd/misc.c --- a/fs/ksmbd/misc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/misc.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/misc.c 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,488 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -414014,7 +421291,7 @@ diff -Naur --no-dereference a/fs/ksmbd/misc.c b/fs/ksmbd/misc.c +} diff -Naur --no-dereference a/fs/ksmbd/misc.h b/fs/ksmbd/misc.h --- a/fs/ksmbd/misc.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/misc.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/misc.h 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -414055,7 +421332,7 @@ diff -Naur --no-dereference a/fs/ksmbd/misc.h b/fs/ksmbd/misc.h +#endif /* __KSMBD_MISC_H__ */ diff -Naur --no-dereference a/fs/ksmbd/ndr.c b/fs/ksmbd/ndr.c --- a/fs/ksmbd/ndr.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/ndr.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/ndr.c 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,546 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -414605,7 +421882,7 @@ diff -Naur --no-dereference a/fs/ksmbd/ndr.c b/fs/ksmbd/ndr.c +} diff -Naur --no-dereference a/fs/ksmbd/ndr.h b/fs/ksmbd/ndr.h --- a/fs/ksmbd/ndr.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/ndr.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/ndr.h 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -414635,7 +421912,7 @@ diff -Naur --no-dereference a/fs/ksmbd/ndr.h b/fs/ksmbd/ndr.h +int ndr_decode_v4_ntacl(struct ndr *n, struct xattr_ntacl *acl); diff -Naur --no-dereference a/fs/ksmbd/netmisc.c b/fs/ksmbd/netmisc.c --- a/fs/ksmbd/netmisc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/netmisc.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/netmisc.c 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,606 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -415245,7 +422522,7 @@ diff -Naur --no-dereference a/fs/ksmbd/netmisc.c b/fs/ksmbd/netmisc.c +} diff -Naur --no-dereference a/fs/ksmbd/nterr.h b/fs/ksmbd/nterr.h --- a/fs/ksmbd/nterr.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/nterr.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/nterr.h 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,543 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -415792,7 +423069,7 @@ diff -Naur --no-dereference a/fs/ksmbd/nterr.h b/fs/ksmbd/nterr.h +#endif /* _NTERR_H */ diff -Naur --no-dereference a/fs/ksmbd/ntlmssp.h b/fs/ksmbd/ntlmssp.h --- a/fs/ksmbd/ntlmssp.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/ntlmssp.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/ntlmssp.h 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,169 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* @@ -415965,7 +423242,7 @@ diff -Naur --no-dereference a/fs/ksmbd/ntlmssp.h b/fs/ksmbd/ntlmssp.h +#endif /* __KSMBD_NTLMSSP_H */ diff -Naur --no-dereference a/fs/ksmbd/oplock.c b/fs/ksmbd/oplock.c --- a/fs/ksmbd/oplock.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/oplock.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/oplock.c 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,1986 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -417955,7 +425232,7 @@ diff -Naur --no-dereference a/fs/ksmbd/oplock.c b/fs/ksmbd/oplock.c +} diff -Naur --no-dereference a/fs/ksmbd/oplock.h b/fs/ksmbd/oplock.h --- a/fs/ksmbd/oplock.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/oplock.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/oplock.h 2024-11-24 20:19:38.215228902 -0500 @@ -0,0 +1,138 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -418097,7 +425374,7 @@ diff -Naur --no-dereference a/fs/ksmbd/oplock.h b/fs/ksmbd/oplock.h +#endif /* __KSMBD_OPLOCK_H */ diff -Naur --no-dereference a/fs/ksmbd/README.md b/fs/ksmbd/README.md --- a/fs/ksmbd/README.md 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/README.md 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/README.md 2024-11-24 20:19:38.213228899 -0500 @@ -0,0 +1,170 @@ + +# Content @@ -418271,7 +425548,7 @@ diff -Naur --no-dereference a/fs/ksmbd/README.md b/fs/ksmbd/README.md +

![CrystalDiskMark](https://github.com/cifsd-team/cifsd-perf/blob/master/CrystalDiskMark_Performance.JPG) diff -Naur --no-dereference a/fs/ksmbd/server.c b/fs/ksmbd/server.c --- a/fs/ksmbd/server.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/server.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/server.c 2024-11-24 20:19:38.216228904 -0500 @@ -0,0 +1,662 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -418937,7 +426214,7 @@ diff -Naur --no-dereference a/fs/ksmbd/server.c b/fs/ksmbd/server.c +module_exit(ksmbd_server_exit) diff -Naur --no-dereference a/fs/ksmbd/server.h b/fs/ksmbd/server.h --- a/fs/ksmbd/server.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/server.h 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/server.h 2024-11-24 20:19:38.216228904 -0500 @@ -0,0 +1,71 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -419012,7 +426289,7 @@ diff -Naur --no-dereference a/fs/ksmbd/server.h b/fs/ksmbd/server.h +#endif /* __SERVER_H__ */ diff -Naur --no-dereference a/fs/ksmbd/smb1misc.c b/fs/ksmbd/smb1misc.c --- a/fs/ksmbd/smb1misc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smb1misc.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/smb1misc.c 2024-11-24 20:19:38.216228904 -0500 @@ -0,0 +1,297 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -419313,7 +426590,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smb1misc.c b/fs/ksmbd/smb1misc.c +} diff -Naur --no-dereference a/fs/ksmbd/smb1ops.c b/fs/ksmbd/smb1ops.c --- a/fs/ksmbd/smb1ops.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smb1ops.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/smb1ops.c 2024-11-24 20:19:38.216228904 -0500 @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -419407,7 +426684,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smb1ops.c b/fs/ksmbd/smb1ops.c +} diff -Naur --no-dereference a/fs/ksmbd/smb1pdu.c b/fs/ksmbd/smb1pdu.c --- a/fs/ksmbd/smb1pdu.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smb1pdu.c 2024-08-28 19:44:05.656038205 -0400 ++++ b/fs/ksmbd/smb1pdu.c 2024-11-24 20:19:38.216228904 -0500 @@ -0,0 +1,8512 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -427923,7 +435200,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smb1pdu.c b/fs/ksmbd/smb1pdu.c +} diff -Naur --no-dereference a/fs/ksmbd/smb1pdu.h b/fs/ksmbd/smb1pdu.h --- a/fs/ksmbd/smb1pdu.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smb1pdu.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smb1pdu.h 2024-11-24 20:19:38.216228904 -0500 @@ -0,0 +1,1631 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -429558,7 +436835,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smb1pdu.h b/fs/ksmbd/smb1pdu.h +#endif /* __SMB1PDU_H */ diff -Naur --no-dereference a/fs/ksmbd/smb2misc.c b/fs/ksmbd/smb2misc.c --- a/fs/ksmbd/smb2misc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smb2misc.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smb2misc.c 2024-11-24 20:19:38.216228904 -0500 @@ -0,0 +1,453 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -430015,7 +437292,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smb2misc.c b/fs/ksmbd/smb2misc.c +} diff -Naur --no-dereference a/fs/ksmbd/smb2ops.c b/fs/ksmbd/smb2ops.c --- a/fs/ksmbd/smb2ops.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smb2ops.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smb2ops.c 2024-11-24 20:19:38.216228904 -0500 @@ -0,0 +1,367 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -430386,7 +437663,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smb2ops.c b/fs/ksmbd/smb2ops.c +} diff -Naur --no-dereference a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c --- a/fs/ksmbd/smb2pdu.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smb2pdu.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smb2pdu.c 2024-11-24 20:19:38.216228904 -0500 @@ -0,0 +1,9239 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -439629,7 +446906,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c +} diff -Naur --no-dereference a/fs/ksmbd/smb2pdu.h b/fs/ksmbd/smb2pdu.h --- a/fs/ksmbd/smb2pdu.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smb2pdu.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smb2pdu.h 2024-11-24 20:19:38.217228906 -0500 @@ -0,0 +1,1725 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -441358,7 +448635,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smb2pdu.h b/fs/ksmbd/smb2pdu.h +#endif /* _SMB2PDU_H */ diff -Naur --no-dereference a/fs/ksmbd/smbacl.c b/fs/ksmbd/smbacl.c --- a/fs/ksmbd/smbacl.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smbacl.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smbacl.c 2024-11-24 20:19:38.217228906 -0500 @@ -0,0 +1,1645 @@ +// SPDX-License-Identifier: LGPL-2.1+ +/* @@ -443007,7 +450284,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smbacl.c b/fs/ksmbd/smbacl.c +} diff -Naur --no-dereference a/fs/ksmbd/smbacl.h b/fs/ksmbd/smbacl.h --- a/fs/ksmbd/smbacl.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smbacl.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smbacl.h 2024-11-24 20:19:38.217228906 -0500 @@ -0,0 +1,307 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* @@ -443318,7 +450595,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smbacl.h b/fs/ksmbd/smbacl.h +#endif /* _SMBACL_H */ diff -Naur --no-dereference a/fs/ksmbd/smb_common.c b/fs/ksmbd/smb_common.c --- a/fs/ksmbd/smb_common.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smb_common.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smb_common.c 2024-11-24 20:19:38.217228906 -0500 @@ -0,0 +1,843 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -444165,7 +451442,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smb_common.c b/fs/ksmbd/smb_common.c +} diff -Naur --no-dereference a/fs/ksmbd/smb_common.h b/fs/ksmbd/smb_common.h --- a/fs/ksmbd/smb_common.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smb_common.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smb_common.h 2024-11-24 20:19:38.217228906 -0500 @@ -0,0 +1,513 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -444682,7 +451959,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smb_common.h b/fs/ksmbd/smb_common.h +#endif /* __SMB_COMMON_H__ */ diff -Naur --no-dereference a/fs/ksmbd/smberr.h b/fs/ksmbd/smberr.h --- a/fs/ksmbd/smberr.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smberr.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smberr.h 2024-11-24 20:19:38.217228906 -0500 @@ -0,0 +1,235 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* @@ -444921,7 +452198,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smberr.h b/fs/ksmbd/smberr.h +#endif /* __KSMBD_SMBERR_H */ diff -Naur --no-dereference a/fs/ksmbd/smbfsctl.h b/fs/ksmbd/smbfsctl.h --- a/fs/ksmbd/smbfsctl.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smbfsctl.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smbfsctl.h 2024-11-24 20:19:38.217228906 -0500 @@ -0,0 +1,91 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* @@ -445016,7 +452293,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smbfsctl.h b/fs/ksmbd/smbfsctl.h +#endif /* __KSMBD_SMBFSCTL_H */ diff -Naur --no-dereference a/fs/ksmbd/smbstatus.h b/fs/ksmbd/smbstatus.h --- a/fs/ksmbd/smbstatus.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/smbstatus.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/smbstatus.h 2024-11-24 20:19:38.217228906 -0500 @@ -0,0 +1,1822 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* @@ -446842,7 +454119,7 @@ diff -Naur --no-dereference a/fs/ksmbd/smbstatus.h b/fs/ksmbd/smbstatus.h +#define STATUS_INVALID_LOCK_RANGE cpu_to_le32(0xC00001a1) diff -Naur --no-dereference a/fs/ksmbd/transport_ipc.c b/fs/ksmbd/transport_ipc.c --- a/fs/ksmbd/transport_ipc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/transport_ipc.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/transport_ipc.c 2024-11-24 20:19:38.218228908 -0500 @@ -0,0 +1,885 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -447731,7 +455008,7 @@ diff -Naur --no-dereference a/fs/ksmbd/transport_ipc.c b/fs/ksmbd/transport_ipc. +} diff -Naur --no-dereference a/fs/ksmbd/transport_ipc.h b/fs/ksmbd/transport_ipc.h --- a/fs/ksmbd/transport_ipc.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/transport_ipc.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/transport_ipc.h 2024-11-24 20:19:38.218228908 -0500 @@ -0,0 +1,47 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -447782,7 +455059,7 @@ diff -Naur --no-dereference a/fs/ksmbd/transport_ipc.h b/fs/ksmbd/transport_ipc. +#endif /* __KSMBD_TRANSPORT_IPC_H__ */ diff -Naur --no-dereference a/fs/ksmbd/transport_rdma.c b/fs/ksmbd/transport_rdma.c --- a/fs/ksmbd/transport_rdma.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/transport_rdma.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/transport_rdma.c 2024-11-24 20:19:38.218228908 -0500 @@ -0,0 +1,2306 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -450092,7 +457369,7 @@ diff -Naur --no-dereference a/fs/ksmbd/transport_rdma.c b/fs/ksmbd/transport_rdm +}; diff -Naur --no-dereference a/fs/ksmbd/transport_rdma.h b/fs/ksmbd/transport_rdma.h --- a/fs/ksmbd/transport_rdma.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/transport_rdma.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/transport_rdma.h 2024-11-24 20:19:38.218228908 -0500 @@ -0,0 +1,69 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -450165,7 +457442,7 @@ diff -Naur --no-dereference a/fs/ksmbd/transport_rdma.h b/fs/ksmbd/transport_rdm +#endif /* __KSMBD_TRANSPORT_RDMA_H__ */ diff -Naur --no-dereference a/fs/ksmbd/transport_tcp.c b/fs/ksmbd/transport_tcp.c --- a/fs/ksmbd/transport_tcp.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/transport_tcp.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/transport_tcp.c 2024-11-24 20:19:38.218228908 -0500 @@ -0,0 +1,689 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -450858,7 +458135,7 @@ diff -Naur --no-dereference a/fs/ksmbd/transport_tcp.c b/fs/ksmbd/transport_tcp. +}; diff -Naur --no-dereference a/fs/ksmbd/transport_tcp.h b/fs/ksmbd/transport_tcp.h --- a/fs/ksmbd/transport_tcp.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/transport_tcp.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/transport_tcp.h 2024-11-24 20:19:38.218228908 -0500 @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -450875,7 +458152,7 @@ diff -Naur --no-dereference a/fs/ksmbd/transport_tcp.h b/fs/ksmbd/transport_tcp. +#endif /* __KSMBD_TRANSPORT_TCP_H__ */ diff -Naur --no-dereference a/fs/ksmbd/unicode.c b/fs/ksmbd/unicode.c --- a/fs/ksmbd/unicode.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/unicode.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/unicode.c 2024-11-24 20:19:38.218228908 -0500 @@ -0,0 +1,402 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -451281,7 +458558,7 @@ diff -Naur --no-dereference a/fs/ksmbd/unicode.c b/fs/ksmbd/unicode.c +} diff -Naur --no-dereference a/fs/ksmbd/unicode.h b/fs/ksmbd/unicode.h --- a/fs/ksmbd/unicode.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/unicode.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/unicode.h 2024-11-24 20:19:38.218228908 -0500 @@ -0,0 +1,361 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -451646,7 +458923,7 @@ diff -Naur --no-dereference a/fs/ksmbd/unicode.h b/fs/ksmbd/unicode.h +#endif /* _CIFS_UNICODE_H */ diff -Naur --no-dereference a/fs/ksmbd/uniupr.h b/fs/ksmbd/uniupr.h --- a/fs/ksmbd/uniupr.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/uniupr.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/uniupr.h 2024-11-24 20:19:38.218228908 -0500 @@ -0,0 +1,268 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -451918,7 +459195,7 @@ diff -Naur --no-dereference a/fs/ksmbd/uniupr.h b/fs/ksmbd/uniupr.h +#endif /* __KSMBD_UNIUPR_H */ diff -Naur --no-dereference a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c --- a/fs/ksmbd/vfs.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/vfs.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/vfs.c 2024-11-24 20:19:38.218228908 -0500 @@ -0,0 +1,3359 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -455281,7 +462558,7 @@ diff -Naur --no-dereference a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c +} diff -Naur --no-dereference a/fs/ksmbd/vfs_cache.c b/fs/ksmbd/vfs_cache.c --- a/fs/ksmbd/vfs_cache.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/vfs_cache.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/vfs_cache.c 2024-11-24 20:19:38.219228910 -0500 @@ -0,0 +1,782 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -456067,7 +463344,7 @@ diff -Naur --no-dereference a/fs/ksmbd/vfs_cache.c b/fs/ksmbd/vfs_cache.c +} diff -Naur --no-dereference a/fs/ksmbd/vfs_cache.h b/fs/ksmbd/vfs_cache.h --- a/fs/ksmbd/vfs_cache.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/vfs_cache.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/vfs_cache.h 2024-11-24 20:19:38.219228910 -0500 @@ -0,0 +1,184 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -456255,7 +463532,7 @@ diff -Naur --no-dereference a/fs/ksmbd/vfs_cache.h b/fs/ksmbd/vfs_cache.h +#endif /* __VFS_CACHE_H__ */ diff -Naur --no-dereference a/fs/ksmbd/vfs.h b/fs/ksmbd/vfs.h --- a/fs/ksmbd/vfs.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/vfs.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/vfs.h 2024-11-24 20:19:38.219228910 -0500 @@ -0,0 +1,336 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -456595,7 +463872,7 @@ diff -Naur --no-dereference a/fs/ksmbd/vfs.h b/fs/ksmbd/vfs.h +#endif /* __KSMBD_VFS_H__ */ diff -Naur --no-dereference a/fs/ksmbd/xattr.h b/fs/ksmbd/xattr.h --- a/fs/ksmbd/xattr.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/fs/ksmbd/xattr.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/ksmbd/xattr.h 2024-11-24 20:19:38.219228910 -0500 @@ -0,0 +1,122 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -456721,7 +463998,7 @@ diff -Naur --no-dereference a/fs/ksmbd/xattr.h b/fs/ksmbd/xattr.h +#endif /* __XATTR_H__ */ diff -Naur --no-dereference a/fs/Makefile b/fs/Makefile --- a/fs/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/Makefile 2024-08-28 19:44:05.652038182 -0400 ++++ b/fs/Makefile 2024-11-24 20:19:38.207228888 -0500 @@ -96,6 +96,7 @@ obj-$(CONFIG_UNICODE) += unicode/ obj-$(CONFIG_SYSV_FS) += sysv/ @@ -456735,10 +464012,53 @@ diff -Naur --no-dereference a/fs/Makefile b/fs/Makefile obj-$(CONFIG_VBOXSF_FS) += vboxsf/ obj-$(CONFIG_ZONEFS_FS) += zonefs/ +obj-$(CONFIG_AUFS_FS) += aufs/ +diff -Naur --no-dereference a/fs/namei.c b/fs/namei.c +--- a/fs/namei.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/namei.c 2024-11-24 20:19:38.219228910 -0500 +@@ -1532,7 +1532,7 @@ + { + struct dentry *dentry, *old; + struct inode *inode = dir->d_inode; +- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq); ++ DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq); + + /* Don't go there if it's already dead */ + if (unlikely(IS_DEADDIR(inode))) +@@ -3028,7 +3028,7 @@ + struct dentry *dentry; + int error, create_error = 0; + umode_t mode = op->mode; +- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq); ++ DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq); + + if (unlikely(IS_DEADDIR(dir_inode))) + return ERR_PTR(-ENOENT); diff -Naur --no-dereference a/fs/namespace.c b/fs/namespace.c --- a/fs/namespace.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/namespace.c 2024-08-28 19:44:05.660038225 -0400 -@@ -431,6 +431,7 @@ ++++ b/fs/namespace.c 2024-11-24 20:19:38.219228910 -0500 +@@ -14,6 +14,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -321,8 +322,11 @@ + * incremented count after it has set MNT_WRITE_HOLD. + */ + smp_mb(); +- while (READ_ONCE(mnt->mnt.mnt_flags) & MNT_WRITE_HOLD) +- cpu_relax(); ++ while (READ_ONCE(mnt->mnt.mnt_flags) & MNT_WRITE_HOLD) { ++ preempt_enable(); ++ cpu_chill(); ++ preempt_disable(); ++ } + /* + * After the slowpath clears MNT_WRITE_HOLD, mnt_is_readonly will + * be set to match its requirements. So we must not load that until +@@ -431,6 +435,7 @@ mnt_dec_writers(real_mount(mnt)); preempt_enable(); } @@ -456746,7 +464066,7 @@ diff -Naur --no-dereference a/fs/namespace.c b/fs/namespace.c /** * mnt_drop_write - give up write access to a mount -@@ -792,6 +793,13 @@ +@@ -792,6 +797,13 @@ return mnt->mnt_ns == current->nsproxy->mnt_ns; } @@ -456760,7 +464080,7 @@ diff -Naur --no-dereference a/fs/namespace.c b/fs/namespace.c /* * vfsmount lock must be held for write */ -@@ -1992,6 +2000,7 @@ +@@ -1992,6 +2004,7 @@ } return 0; } @@ -456768,9 +464088,51 @@ diff -Naur --no-dereference a/fs/namespace.c b/fs/namespace.c static void lock_mnt_tree(struct mount *mnt) { +diff -Naur --no-dereference a/fs/nfs/dir.c b/fs/nfs/dir.c +--- a/fs/nfs/dir.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/nfs/dir.c 2024-11-24 20:19:38.219228910 -0500 +@@ -484,7 +484,7 @@ + unsigned long dir_verifier) + { + struct qstr filename = QSTR_INIT(entry->name, entry->len); +- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq); ++ DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq); + struct dentry *dentry; + struct dentry *alias; + struct inode *inode; +@@ -1660,7 +1660,7 @@ + struct file *file, unsigned open_flags, + umode_t mode) + { +- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq); ++ DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq); + struct nfs_open_context *ctx; + struct dentry *res; + struct iattr attr = { .ia_valid = ATTR_OPEN }; +diff -Naur --no-dereference a/fs/nfs/unlink.c b/fs/nfs/unlink.c +--- a/fs/nfs/unlink.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/nfs/unlink.c 2024-11-24 20:19:38.219228910 -0500 +@@ -13,7 +13,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + +@@ -180,7 +180,7 @@ + + data->cred = get_current_cred(); + data->res.dir_attr = &data->dir_attr; +- init_waitqueue_head(&data->wq); ++ init_swait_queue_head(&data->wq); + + status = -EBUSY; + spin_lock(&dentry->d_lock); diff -Naur --no-dereference a/fs/notify/group.c b/fs/notify/group.c --- a/fs/notify/group.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/notify/group.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/notify/group.c 2024-11-24 20:19:38.220228911 -0500 @@ -100,6 +100,7 @@ { refcount_inc(&group->refcnt); @@ -456781,7 +464143,7 @@ diff -Naur --no-dereference a/fs/notify/group.c b/fs/notify/group.c * Drop a reference to a group. Free it if it's through. diff -Naur --no-dereference a/fs/open.c b/fs/open.c --- a/fs/open.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/open.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/open.c 2024-11-24 20:19:38.220228911 -0500 @@ -65,6 +65,7 @@ inode_unlock(dentry->d_inode); return ret; @@ -456790,10 +464152,42 @@ diff -Naur --no-dereference a/fs/open.c b/fs/open.c long vfs_truncate(const struct path *path, loff_t length) { +diff -Naur --no-dereference a/fs/proc/array.c b/fs/proc/array.c +--- a/fs/proc/array.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/proc/array.c 2024-11-24 20:19:38.220228911 -0500 +@@ -384,9 +384,9 @@ + static void task_cpus_allowed(struct seq_file *m, struct task_struct *task) + { + seq_printf(m, "Cpus_allowed:\t%*pb\n", +- cpumask_pr_args(task->cpus_ptr)); ++ cpumask_pr_args(&task->cpus_mask)); + seq_printf(m, "Cpus_allowed_list:\t%*pbl\n", +- cpumask_pr_args(task->cpus_ptr)); ++ cpumask_pr_args(&task->cpus_mask)); + } + + static inline void task_core_dumping(struct seq_file *m, struct mm_struct *mm) diff -Naur --no-dereference a/fs/proc/base.c b/fs/proc/base.c --- a/fs/proc/base.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/proc/base.c 2024-08-28 19:44:05.660038225 -0400 -@@ -2184,7 +2184,7 @@ ++++ b/fs/proc/base.c 2024-11-24 20:19:38.220228911 -0500 +@@ -96,6 +96,7 @@ + #include + #include + #include ++#include + #include + #include "internal.h" + #include "fd.h" +@@ -2038,7 +2039,7 @@ + + child = d_hash_and_lookup(dir, &qname); + if (!child) { +- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq); ++ DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq); + child = d_alloc_parallel(dir, &qname, &wq); + if (IS_ERR(child)) + goto end_instantiate; +@@ -2184,7 +2185,7 @@ rc = -ENOENT; vma = find_exact_vma(mm, vm_start, vm_end); if (vma && vma->vm_file) { @@ -456804,7 +464198,7 @@ diff -Naur --no-dereference a/fs/proc/base.c b/fs/proc/base.c } diff -Naur --no-dereference a/fs/proc/nommu.c b/fs/proc/nommu.c --- a/fs/proc/nommu.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/proc/nommu.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/proc/nommu.c 2024-11-24 20:19:38.220228911 -0500 @@ -40,7 +40,10 @@ file = region->vm_file; @@ -456817,9 +464211,21 @@ diff -Naur --no-dereference a/fs/proc/nommu.c b/fs/proc/nommu.c dev = inode->i_sb->s_dev; ino = inode->i_ino; } +diff -Naur --no-dereference a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c +--- a/fs/proc/proc_sysctl.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/proc/proc_sysctl.c 2024-11-24 20:19:38.220228911 -0500 +@@ -684,7 +684,7 @@ + + child = d_lookup(dir, &qname); + if (!child) { +- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq); ++ DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq); + child = d_alloc_parallel(dir, &qname, &wq); + if (IS_ERR(child)) + return false; diff -Naur --no-dereference a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c --- a/fs/proc/task_mmu.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/proc/task_mmu.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/proc/task_mmu.c 2024-11-24 20:19:38.220228911 -0500 @@ -280,7 +280,10 @@ const char *name = NULL; @@ -456843,7 +464249,7 @@ diff -Naur --no-dereference a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c char buffer[64]; diff -Naur --no-dereference a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c --- a/fs/proc/task_nommu.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/proc/task_nommu.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/proc/task_nommu.c 2024-11-24 20:19:38.220228911 -0500 @@ -155,7 +155,10 @@ file = vma->vm_file; @@ -456856,9 +464262,31 @@ diff -Naur --no-dereference a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c dev = inode->i_sb->s_dev; ino = inode->i_ino; pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT; +diff -Naur --no-dereference a/fs/pstore/platform.c b/fs/pstore/platform.c +--- a/fs/pstore/platform.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/fs/pstore/platform.c 2024-11-24 20:19:38.221228913 -0500 +@@ -384,7 +384,8 @@ + * end of the buffer. + */ + static void pstore_dump(struct kmsg_dumper *dumper, +- enum kmsg_dump_reason reason) ++ enum kmsg_dump_reason reason, ++ struct kmsg_dumper_iter *iter) + { + unsigned long total = 0; + const char *why; +@@ -434,7 +435,7 @@ + dst_size -= header_size; + + /* Write dump contents. */ +- if (!kmsg_dump_get_buffer(dumper, true, dst + header_size, ++ if (!kmsg_dump_get_buffer(iter, true, dst + header_size, + dst_size, &dump_size)) + break; + diff -Naur --no-dereference a/fs/read_write.c b/fs/read_write.c --- a/fs/read_write.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/read_write.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/read_write.c 2024-11-24 20:19:38.221228913 -0500 @@ -503,6 +503,7 @@ inc_syscr(current); return ret; @@ -456877,7 +464305,7 @@ diff -Naur --no-dereference a/fs/read_write.c b/fs/read_write.c static inline loff_t *file_ppos(struct file *file) diff -Naur --no-dereference a/fs/splice.c b/fs/splice.c --- a/fs/splice.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/splice.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/splice.c 2024-11-24 20:19:38.221228913 -0500 @@ -756,20 +756,21 @@ /* * Attempt to initiate a splice from pipe to file. @@ -456915,7 +464343,7 @@ diff -Naur --no-dereference a/fs/splice.c b/fs/splice.c * splice_direct_to_actor - splices data directly between two non-pipes diff -Naur --no-dereference a/fs/xattr.c b/fs/xattr.c --- a/fs/xattr.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/fs/xattr.c 2024-08-28 19:44:05.660038225 -0400 ++++ b/fs/xattr.c 2024-11-24 20:19:38.221228913 -0500 @@ -360,6 +360,7 @@ *xattr_value = value; return error; @@ -456926,7 +464354,7 @@ diff -Naur --no-dereference a/fs/xattr.c b/fs/xattr.c __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name, diff -Naur --no-dereference a/.github/FUNDING.yml b/.github/FUNDING.yml --- a/.github/FUNDING.yml 1969-12-31 19:00:00.000000000 -0500 -+++ b/.github/FUNDING.yml 2024-08-28 19:44:05.584037817 -0400 ++++ b/.github/FUNDING.yml 2024-11-24 20:19:38.079228658 -0500 @@ -0,0 +1,12 @@ +# These are supported funding model platforms + @@ -456942,7 +464370,7 @@ diff -Naur --no-dereference a/.github/FUNDING.yml b/.github/FUNDING.yml +custom: https://paypal.me/beagleboard # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff -Naur --no-dereference a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md --- a/.github/ISSUE_TEMPLATE/bug_report.md 1969-12-31 19:00:00.000000000 -0500 -+++ b/.github/ISSUE_TEMPLATE/bug_report.md 2024-08-28 19:44:05.584037817 -0400 ++++ b/.github/ISSUE_TEMPLATE/bug_report.md 2024-11-24 20:19:38.079228658 -0500 @@ -0,0 +1,20 @@ +--- +name: Bug report @@ -456966,7 +464394,7 @@ diff -Naur --no-dereference a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISS +``` diff -Naur --no-dereference a/.gitignore b/.gitignore --- a/.gitignore 2023-02-15 11:22:27.000000000 -0500 -+++ b/.gitignore 2024-08-28 19:44:05.584037817 -0400 ++++ b/.gitignore 2024-11-24 20:19:38.079228658 -0500 @@ -18,6 +18,7 @@ *.c.[012]*.* *.dt.yaml @@ -456977,12 +464405,12 @@ diff -Naur --no-dereference a/.gitignore b/.gitignore *.elf diff -Naur --no-dereference a/.gitlab-ci.yml b/.gitlab-ci.yml --- a/.gitlab-ci.yml 1969-12-31 19:00:00.000000000 -0500 -+++ b/.gitlab-ci.yml 2024-08-28 19:44:05.584037817 -0400 ++++ b/.gitlab-ci.yml 2024-11-24 20:19:38.079228658 -0500 @@ -0,0 +1,29 @@ +image: robertcnelson/debian-bookworm-slim-linux-compile:latest + +cache: -+ key: "$CI_PROJECT_NAME-ti-linux-5.10.y" ++ key: "$CI_PROJECT_NAME-ti-linux-rt-5.10.y" + paths: + - ccache.tar.gz + @@ -456998,8 +464426,8 @@ diff -Naur --no-dereference a/.gitlab-ci.yml b/.gitlab-ci.yml + - CORES=$(getconf _NPROCESSORS_ONLN) + - make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- clean + - make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- bb.org_defconfig -+ - echo "make -j${CORES} ARCH=arm KBUILD_DEBARCH=armhf CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- LOCALVERSION=-ti-r$CI_JOB_ID KDEB_SOURCENAME=linux-upstream KDEB_COMPRESS=xz bindeb-pkg" -+ - make -j${CORES} ARCH=arm KBUILD_DEBARCH=armhf KDEB_PKGVERSION=1xross CROSS_COMPILE="ccache /usr/bin/arm-linux-gnueabihf-" LOCALVERSION=-ti-r$CI_JOB_ID KDEB_SOURCENAME=linux-upstream KDEB_COMPRESS=xz bindeb-pkg ++ - echo "make -j${CORES} ARCH=arm KBUILD_DEBARCH=armhf CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- LOCALVERSION=-ti-rt-r$CI_JOB_ID KDEB_SOURCENAME=linux-upstream KDEB_COMPRESS=xz bindeb-pkg" ++ - make -j${CORES} ARCH=arm KBUILD_DEBARCH=armhf KDEB_PKGVERSION=1xross CROSS_COMPILE="ccache /usr/bin/arm-linux-gnueabihf-" LOCALVERSION=-ti-rt-r$CI_JOB_ID KDEB_SOURCENAME=linux-upstream KDEB_COMPRESS=xz bindeb-pkg + - mv ../*.deb ./ + - ccache -s + - tar -cf ccache.tar.gz /root/.cache/ccache/ @@ -457008,9 +464436,83 @@ diff -Naur --no-dereference a/.gitlab-ci.yml b/.gitlab-ci.yml + name: "$CI_PROJECT_NAME-$CI_JOB_ID" + paths: + - "linux-image-*.deb" +diff -Naur --no-dereference a/include/asm-generic/hardirq.h b/include/asm-generic/hardirq.h +--- a/include/asm-generic/hardirq.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/asm-generic/hardirq.h 2024-11-24 20:19:38.221228913 -0500 +@@ -7,9 +7,13 @@ + + typedef struct { + unsigned int __softirq_pending; ++#ifdef ARCH_WANTS_NMI_IRQSTAT ++ unsigned int __nmi_count; ++#endif + } ____cacheline_aligned irq_cpustat_t; + +-#include /* Standard mappings for irq_cpustat_t above */ ++DECLARE_PER_CPU_ALIGNED(irq_cpustat_t, irq_stat); ++ + #include + + #ifndef ack_bad_irq +diff -Naur --no-dereference a/include/asm-generic/Kbuild b/include/asm-generic/Kbuild +--- a/include/asm-generic/Kbuild 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/asm-generic/Kbuild 2024-11-24 20:19:38.221228913 -0500 +@@ -30,7 +30,7 @@ + mandatory-y += irq_regs.h + mandatory-y += irq_work.h + mandatory-y += kdebug.h +-mandatory-y += kmap_types.h ++mandatory-y += kmap_size.h + mandatory-y += kprobes.h + mandatory-y += linkage.h + mandatory-y += local.h +diff -Naur --no-dereference a/include/asm-generic/kmap_size.h b/include/asm-generic/kmap_size.h +--- a/include/asm-generic/kmap_size.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/asm-generic/kmap_size.h 2024-11-24 20:19:38.221228913 -0500 +@@ -0,0 +1,12 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++#ifndef _ASM_GENERIC_KMAP_SIZE_H ++#define _ASM_GENERIC_KMAP_SIZE_H ++ ++/* For debug this provides guard pages between the maps */ ++#ifdef CONFIG_DEBUG_HIGHMEM ++# define KM_MAX_IDX 33 ++#else ++# define KM_MAX_IDX 16 ++#endif ++ ++#endif +diff -Naur --no-dereference a/include/asm-generic/kmap_types.h b/include/asm-generic/kmap_types.h +--- a/include/asm-generic/kmap_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/asm-generic/kmap_types.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,11 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef _ASM_GENERIC_KMAP_TYPES_H +-#define _ASM_GENERIC_KMAP_TYPES_H +- +-#ifdef __WITH_KM_FENCE +-# define KM_TYPE_NR 41 +-#else +-# define KM_TYPE_NR 20 +-#endif +- +-#endif +diff -Naur --no-dereference a/include/asm-generic/preempt.h b/include/asm-generic/preempt.h +--- a/include/asm-generic/preempt.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/asm-generic/preempt.h 2024-11-24 20:19:38.221228913 -0500 +@@ -79,6 +79,9 @@ + } + + #ifdef CONFIG_PREEMPTION ++#ifdef CONFIG_PREEMPT_RT ++extern void preempt_schedule_lock(void); ++#endif + extern asmlinkage void preempt_schedule(void); + #define __preempt_schedule() preempt_schedule() + extern asmlinkage void preempt_schedule_notrace(void); diff -Naur --no-dereference a/include/clocksource/timer-ti-dm.h b/include/clocksource/timer-ti-dm.h --- a/include/clocksource/timer-ti-dm.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/clocksource/timer-ti-dm.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/clocksource/timer-ti-dm.h 2024-11-24 20:19:38.221228913 -0500 @@ -247,148 +247,4 @@ #define OMAP_TIMER_TICK_INT_MASK_COUNT_REG \ (_OMAP_TIMER_TICK_INT_MASK_COUNT_OFFSET | (WP_TOWR << WPSHIFT)) @@ -457162,7 +464664,7 @@ diff -Naur --no-dereference a/include/clocksource/timer-ti-dm.h b/include/clocks #endif /* __CLOCKSOURCE_DMTIMER_H */ diff -Naur --no-dereference a/include/dt-bindings/board/am335x-bbw-bbb-base.h b/include/dt-bindings/board/am335x-bbw-bbb-base.h --- a/include/dt-bindings/board/am335x-bbw-bbb-base.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/board/am335x-bbw-bbb-base.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/board/am335x-bbw-bbb-base.h 2024-11-24 20:19:38.221228913 -0500 @@ -0,0 +1,103 @@ +/* + * This header provides constants for bbw/bbb pinctrl bindings. @@ -457269,7 +464771,7 @@ diff -Naur --no-dereference a/include/dt-bindings/board/am335x-bbw-bbb-base.h b/ +#endif diff -Naur --no-dereference a/include/dt-bindings/board/am335x-bone-pins.h b/include/dt-bindings/board/am335x-bone-pins.h --- a/include/dt-bindings/board/am335x-bone-pins.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/board/am335x-bone-pins.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/board/am335x-bone-pins.h 2024-11-24 20:19:38.222228915 -0500 @@ -0,0 +1,253 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -457526,7 +465028,7 @@ diff -Naur --no-dereference a/include/dt-bindings/board/am335x-bone-pins.h b/inc +#endif diff -Naur --no-dereference a/include/dt-bindings/board/am572x-bone-pins.h b/include/dt-bindings/board/am572x-bone-pins.h --- a/include/dt-bindings/board/am572x-bone-pins.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/board/am572x-bone-pins.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/board/am572x-bone-pins.h 2024-11-24 20:19:38.222228915 -0500 @@ -0,0 +1,179 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -457709,7 +465211,7 @@ diff -Naur --no-dereference a/include/dt-bindings/board/am572x-bone-pins.h b/inc +#endif diff -Naur --no-dereference a/include/dt-bindings/board/k3-j721e-bone-pins.h b/include/dt-bindings/board/k3-j721e-bone-pins.h --- a/include/dt-bindings/board/k3-j721e-bone-pins.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/board/k3-j721e-bone-pins.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/board/k3-j721e-bone-pins.h 2024-11-24 20:19:38.222228915 -0500 @@ -0,0 +1,242 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -457955,7 +465457,7 @@ diff -Naur --no-dereference a/include/dt-bindings/board/k3-j721e-bone-pins.h b/i +#endif diff -Naur --no-dereference a/include/dt-bindings/board/light-fm-bone-pins.h b/include/dt-bindings/board/light-fm-bone-pins.h --- a/include/dt-bindings/board/light-fm-bone-pins.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/board/light-fm-bone-pins.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/board/light-fm-bone-pins.h 2024-11-24 20:19:38.222228915 -0500 @@ -0,0 +1,308 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -458267,7 +465769,7 @@ diff -Naur --no-dereference a/include/dt-bindings/board/light-fm-bone-pins.h b/i +#endif diff -Naur --no-dereference a/include/dt-bindings/clock/dra7.h b/include/dt-bindings/clock/dra7.h --- a/include/dt-bindings/clock/dra7.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/dt-bindings/clock/dra7.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/clock/dra7.h 2024-11-24 20:19:38.222228915 -0500 @@ -84,6 +84,10 @@ #define DRA7_L3_MAIN_2_CLKCTRL DRA7_CLKCTRL_INDEX(0x20) #define DRA7_L3_INSTR_CLKCTRL DRA7_CLKCTRL_INDEX(0x28) @@ -458281,7 +465783,7 @@ diff -Naur --no-dereference a/include/dt-bindings/clock/dra7.h b/include/dt-bind #define DRA7_BB2D_CLKCTRL DRA7_CLKCTRL_INDEX(0x30) diff -Naur --no-dereference a/include/dt-bindings/clock/light-dspsys.h b/include/dt-bindings/clock/light-dspsys.h --- a/include/dt-bindings/clock/light-dspsys.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/clock/light-dspsys.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/clock/light-dspsys.h 2024-11-24 20:19:38.222228915 -0500 @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -458310,7 +465812,7 @@ diff -Naur --no-dereference a/include/dt-bindings/clock/light-dspsys.h b/include +#endif diff -Naur --no-dereference a/include/dt-bindings/clock/light-fm-ap-clock.h b/include/dt-bindings/clock/light-fm-ap-clock.h --- a/include/dt-bindings/clock/light-fm-ap-clock.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/clock/light-fm-ap-clock.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/clock/light-fm-ap-clock.h 2024-11-24 20:19:38.222228915 -0500 @@ -0,0 +1,513 @@ +#ifndef _APSYS_CLKGEN_H +#define _APSYS_CLKGEN_H @@ -458827,7 +466329,7 @@ diff -Naur --no-dereference a/include/dt-bindings/clock/light-fm-ap-clock.h b/in +#endif diff -Naur --no-dereference a/include/dt-bindings/clock/light-visys.h b/include/dt-bindings/clock/light-visys.h --- a/include/dt-bindings/clock/light-visys.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/clock/light-visys.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/clock/light-visys.h 2024-11-24 20:19:38.222228915 -0500 @@ -0,0 +1,54 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -458885,7 +466387,7 @@ diff -Naur --no-dereference a/include/dt-bindings/clock/light-visys.h b/include/ +#endif diff -Naur --no-dereference a/include/dt-bindings/clock/light-vosys.h b/include/dt-bindings/clock/light-vosys.h --- a/include/dt-bindings/clock/light-vosys.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/clock/light-vosys.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/clock/light-vosys.h 2024-11-24 20:19:38.222228915 -0500 @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -458930,7 +466432,7 @@ diff -Naur --no-dereference a/include/dt-bindings/clock/light-vosys.h b/include/ +#endif diff -Naur --no-dereference a/include/dt-bindings/clock/light-vpsys.h b/include/dt-bindings/clock/light-vpsys.h --- a/include/dt-bindings/clock/light-vpsys.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/clock/light-vpsys.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/clock/light-vpsys.h 2024-11-24 20:19:38.222228915 -0500 @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -458957,7 +466459,7 @@ diff -Naur --no-dereference a/include/dt-bindings/clock/light-vpsys.h b/include/ +#endif diff -Naur --no-dereference a/include/dt-bindings/clock/omap5.h b/include/dt-bindings/clock/omap5.h --- a/include/dt-bindings/clock/omap5.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/dt-bindings/clock/omap5.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/clock/omap5.h 2024-11-24 20:19:38.222228915 -0500 @@ -32,6 +32,8 @@ /* l3main2 clocks */ @@ -458969,7 +466471,7 @@ diff -Naur --no-dereference a/include/dt-bindings/clock/omap5.h b/include/dt-bin #define OMAP5_MMU_IPU_CLKCTRL OMAP5_CLKCTRL_INDEX(0x20) diff -Naur --no-dereference a/include/dt-bindings/firmware/thead/rsrc.h b/include/dt-bindings/firmware/thead/rsrc.h --- a/include/dt-bindings/firmware/thead/rsrc.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/firmware/thead/rsrc.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/firmware/thead/rsrc.h 2024-11-24 20:19:38.222228915 -0500 @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* @@ -458990,7 +466492,7 @@ diff -Naur --no-dereference a/include/dt-bindings/firmware/thead/rsrc.h b/includ +#endif diff -Naur --no-dereference a/include/dt-bindings/mux/ti-serdes.h b/include/dt-bindings/mux/ti-serdes.h --- a/include/dt-bindings/mux/ti-serdes.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/dt-bindings/mux/ti-serdes.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/mux/ti-serdes.h 2024-11-24 20:19:38.223228917 -0500 @@ -90,4 +90,93 @@ #define J7200_SERDES0_LANE3_USB 0x2 #define J7200_SERDES0_LANE3_IP4_UNUSED 0x3 @@ -459087,7 +466589,7 @@ diff -Naur --no-dereference a/include/dt-bindings/mux/ti-serdes.h b/include/dt-b #endif /* _DT_BINDINGS_MUX_TI_SERDES */ diff -Naur --no-dereference a/include/dt-bindings/phy/phy-cadence.h b/include/dt-bindings/phy/phy-cadence.h --- a/include/dt-bindings/phy/phy-cadence.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/phy/phy-cadence.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/phy/phy-cadence.h 2024-11-24 20:19:38.223228917 -0500 @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -459129,7 +466631,7 @@ diff -Naur --no-dereference a/include/dt-bindings/phy/phy-cadence-torrent.h b/in -#endif /* _DT_BINDINGS_TORRENT_SERDES_H */ diff -Naur --no-dereference a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h --- a/include/dt-bindings/phy/phy.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/dt-bindings/phy/phy.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/phy/phy.h 2024-11-24 20:19:38.223228917 -0500 @@ -20,5 +20,6 @@ #define PHY_TYPE_XPCS 7 #define PHY_TYPE_SGMII 8 @@ -459139,7 +466641,7 @@ diff -Naur --no-dereference a/include/dt-bindings/phy/phy.h b/include/dt-binding #endif /* _DT_BINDINGS_PHY */ diff -Naur --no-dereference a/include/dt-bindings/phy/phy-ti.h b/include/dt-bindings/phy/phy-ti.h --- a/include/dt-bindings/phy/phy-ti.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/phy/phy-ti.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/phy/phy-ti.h 2024-11-24 20:19:38.223228917 -0500 @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -459164,7 +466666,7 @@ diff -Naur --no-dereference a/include/dt-bindings/phy/phy-ti.h b/include/dt-bind +#endif /* _DT_BINDINGS_TI_SERDES */ diff -Naur --no-dereference a/include/dt-bindings/pinctrl/dra.h b/include/dt-bindings/pinctrl/dra.h --- a/include/dt-bindings/pinctrl/dra.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/dt-bindings/pinctrl/dra.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/pinctrl/dra.h 2024-11-24 20:19:38.223228917 -0500 @@ -73,5 +73,19 @@ /* DRA7 IODELAY configuration parameters */ #define A_DELAY_PS(val) ((val) & 0xffff) @@ -459187,7 +466689,7 @@ diff -Naur --no-dereference a/include/dt-bindings/pinctrl/dra.h b/include/dt-bin diff -Naur --no-dereference a/include/dt-bindings/pinctrl/k3.h b/include/dt-bindings/pinctrl/k3.h --- a/include/dt-bindings/pinctrl/k3.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/dt-bindings/pinctrl/k3.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/pinctrl/k3.h 2024-11-24 20:19:38.223228917 -0500 @@ -3,7 +3,7 @@ * This header provides constants for pinctrl bindings for TI's K3 SoC * family. @@ -459241,7 +466743,7 @@ diff -Naur --no-dereference a/include/dt-bindings/pinctrl/k3.h b/include/dt-bind #endif diff -Naur --no-dereference a/include/dt-bindings/pinctrl/light-fm-aon-pinctrl.h b/include/dt-bindings/pinctrl/light-fm-aon-pinctrl.h --- a/include/dt-bindings/pinctrl/light-fm-aon-pinctrl.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/pinctrl/light-fm-aon-pinctrl.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/pinctrl/light-fm-aon-pinctrl.h 2024-11-24 20:19:38.223228917 -0500 @@ -0,0 +1,78 @@ +#ifndef _LIGHT_FM_AUDIO_PINCTRL_H +#define _LIGHT_FM_AUDIO_PINCTRL_H @@ -459323,7 +466825,7 @@ diff -Naur --no-dereference a/include/dt-bindings/pinctrl/light-fm-aon-pinctrl.h +#endif /* _LIGHT_FM_AUDIO_PINCTRL_H */ diff -Naur --no-dereference a/include/dt-bindings/pinctrl/light-fm-left-pinctrl.h b/include/dt-bindings/pinctrl/light-fm-left-pinctrl.h --- a/include/dt-bindings/pinctrl/light-fm-left-pinctrl.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/pinctrl/light-fm-left-pinctrl.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/pinctrl/light-fm-left-pinctrl.h 2024-11-24 20:19:38.223228917 -0500 @@ -0,0 +1,71 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + @@ -459398,7 +466900,7 @@ diff -Naur --no-dereference a/include/dt-bindings/pinctrl/light-fm-left-pinctrl. +#endif /* _DT_BINDINGS_LIGHT_FM_LEFT_PINCTRL_H_ */ diff -Naur --no-dereference a/include/dt-bindings/pinctrl/light-fm-right-pinctrl.h b/include/dt-bindings/pinctrl/light-fm-right-pinctrl.h --- a/include/dt-bindings/pinctrl/light-fm-right-pinctrl.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/pinctrl/light-fm-right-pinctrl.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/pinctrl/light-fm-right-pinctrl.h 2024-11-24 20:19:38.223228917 -0500 @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + @@ -459464,7 +466966,7 @@ diff -Naur --no-dereference a/include/dt-bindings/pinctrl/light-fm-right-pinctrl +#endif /* _DT_BINDINGS_LIGHT_FM_RIGHT_PINCTRL_H_ */ diff -Naur --no-dereference a/include/dt-bindings/pinctrl/light.h b/include/dt-bindings/pinctrl/light.h --- a/include/dt-bindings/pinctrl/light.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/pinctrl/light.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/pinctrl/light.h 2024-11-24 20:19:38.223228917 -0500 @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -459522,7 +467024,7 @@ diff -Naur --no-dereference a/include/dt-bindings/pinctrl/light.h b/include/dt-b \ No newline at end of file diff -Naur --no-dereference a/include/dt-bindings/pinctrl/omap.h b/include/dt-bindings/pinctrl/omap.h --- a/include/dt-bindings/pinctrl/omap.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/dt-bindings/pinctrl/omap.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/pinctrl/omap.h 2024-11-24 20:19:38.223228917 -0500 @@ -64,8 +64,8 @@ #define OMAP3_WKUP_IOPAD(pa, val) OMAP_IOPAD_OFFSET((pa), 0x2a00) (val) #define DM814X_IOPAD(pa, val) OMAP_IOPAD_OFFSET((pa), 0x0800) (val) @@ -459536,7 +467038,7 @@ diff -Naur --no-dereference a/include/dt-bindings/pinctrl/omap.h b/include/dt-bi * Macros to allow using the offset from the padconf physical address diff -Naur --no-dereference a/include/dt-bindings/reset/light-reset.h b/include/dt-bindings/reset/light-reset.h --- a/include/dt-bindings/reset/light-reset.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/reset/light-reset.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/reset/light-reset.h 2024-11-24 20:19:38.223228917 -0500 @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* @@ -459553,7 +467055,7 @@ diff -Naur --no-dereference a/include/dt-bindings/reset/light-reset.h b/include/ +#endif diff -Naur --no-dereference a/include/dt-bindings/soc/thead,light-iopmp.h b/include/dt-bindings/soc/thead,light-iopmp.h --- a/include/dt-bindings/soc/thead,light-iopmp.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/dt-bindings/soc/thead,light-iopmp.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/dt-bindings/soc/thead,light-iopmp.h 2024-11-24 20:19:38.223228917 -0500 @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -459594,6 +467096,85 @@ diff -Naur --no-dereference a/include/dt-bindings/soc/thead,light-iopmp.h b/incl +#define IOPMP_DSP1 27 + +#endif /* __DT_THEAD_LIGHT_IOPMP_H__ */ +diff -Naur --no-dereference a/include/linux/blkdev.h b/include/linux/blkdev.h +--- a/include/linux/blkdev.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/blkdev.h 2024-11-24 20:19:38.223228917 -0500 +@@ -161,7 +161,7 @@ + */ + union { + struct hlist_node hash; /* merge hash */ +- struct list_head ipi_list; ++ struct llist_node ipi_list; + }; + + /* +diff -Naur --no-dereference a/include/linux/bottom_half.h b/include/linux/bottom_half.h +--- a/include/linux/bottom_half.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/bottom_half.h 2024-11-24 20:19:38.223228917 -0500 +@@ -4,7 +4,7 @@ + + #include + +-#ifdef CONFIG_TRACE_IRQFLAGS ++#if defined(CONFIG_PREEMPT_RT) || defined(CONFIG_TRACE_IRQFLAGS) + extern void __local_bh_disable_ip(unsigned long ip, unsigned int cnt); + #else + static __always_inline void __local_bh_disable_ip(unsigned long ip, unsigned int cnt) +@@ -32,4 +32,10 @@ + __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); + } + ++#ifdef CONFIG_PREEMPT_RT ++extern bool local_bh_blocked(void); ++#else ++static inline bool local_bh_blocked(void) { return false; } ++#endif ++ + #endif /* _LINUX_BH_H */ +diff -Naur --no-dereference a/include/linux/console.h b/include/linux/console.h +--- a/include/linux/console.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/console.h 2024-11-24 20:19:38.223228917 -0500 +@@ -16,6 +16,7 @@ + + #include + #include ++#include + + struct vc_data; + struct console_font_op; +@@ -137,10 +138,12 @@ + #define CON_ANYTIME (16) /* Safe to call when cpu is offline */ + #define CON_BRL (32) /* Used for a braille device */ + #define CON_EXTENDED (64) /* Use the extended output format a la /dev/kmsg */ ++#define CON_HANDOVER (128) /* Device was previously a boot console. */ + + struct console { + char name[16]; + void (*write)(struct console *, const char *, unsigned); ++ void (*write_atomic)(struct console *co, const char *s, unsigned int count); + int (*read)(struct console *, char *, unsigned); + struct tty_driver *(*device)(struct console *, int *); + void (*unblank)(void); +@@ -150,6 +153,11 @@ + short flags; + short index; + int cflag; ++#ifdef CONFIG_PRINTK ++ char sync_buf[CONSOLE_LOG_MAX]; ++#endif ++ atomic64_t printk_seq; ++ struct task_struct *thread; + uint ispeed; + uint ospeed; + void *data; +@@ -232,4 +240,7 @@ + void dummycon_register_output_notifier(struct notifier_block *nb); + void dummycon_unregister_output_notifier(struct notifier_block *nb); + ++extern void console_atomic_lock(unsigned int *flags); ++extern void console_atomic_unlock(unsigned int flags); ++ + #endif /* _LINUX_CONSOLE_H */ diff -Naur --no-dereference a/include/linux/counter_enum.h b/include/linux/counter_enum.h --- a/include/linux/counter_enum.h 2023-02-15 11:22:27.000000000 -0500 +++ b/include/linux/counter_enum.h 1969-12-31 19:00:00.000000000 -0500 @@ -459645,7 +467226,7 @@ diff -Naur --no-dereference a/include/linux/counter_enum.h b/include/linux/count -#endif /* _COUNTER_ENUM_H_ */ diff -Naur --no-dereference a/include/linux/counter.h b/include/linux/counter.h --- a/include/linux/counter.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/counter.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/linux/counter.h 2024-11-24 20:19:38.223228917 -0500 @@ -6,417 +6,280 @@ #ifndef _COUNTER_H_ #define _COUNTER_H_ @@ -460478,9 +468059,43 @@ diff -Naur --no-dereference a/include/linux/counter.h b/include/linux/counter.h + COUNTER_COMP_COUNT_BOOL("preset_enable", _read, _write) #endif /* _COUNTER_H_ */ +diff -Naur --no-dereference a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h +--- a/include/linux/cpuhotplug.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/cpuhotplug.h 2024-11-24 20:19:38.224228919 -0500 +@@ -154,6 +154,7 @@ + CPUHP_AP_ONLINE, + CPUHP_TEARDOWN_CPU, + CPUHP_AP_ONLINE_IDLE, ++ CPUHP_AP_SCHED_WAIT_EMPTY, + CPUHP_AP_SMPBOOT_THREADS, + CPUHP_AP_X86_VDSO_VMA_ONLINE, + CPUHP_AP_IRQ_AFFINITY_ONLINE, +diff -Naur --no-dereference a/include/linux/cpumask.h b/include/linux/cpumask.h +--- a/include/linux/cpumask.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/cpumask.h 2024-11-24 20:19:38.224228919 -0500 +@@ -199,6 +199,11 @@ + return cpumask_next_and(-1, src1p, src2p); + } + ++static inline int cpumask_any_distribute(const struct cpumask *srcp) ++{ ++ return cpumask_first(srcp); ++} ++ + #define for_each_cpu(cpu, mask) \ + for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) + #define for_each_cpu_not(cpu, mask) \ +@@ -252,6 +257,7 @@ + unsigned int cpumask_local_spread(unsigned int i, int node); + int cpumask_any_and_distribute(const struct cpumask *src1p, + const struct cpumask *src2p); ++int cpumask_any_distribute(const struct cpumask *srcp); + + /** + * for_each_cpu - iterate over every cpu in a mask diff -Naur --no-dereference a/include/linux/crypto.h b/include/linux/crypto.h --- a/include/linux/crypto.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/crypto.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/linux/crypto.h 2024-11-24 20:19:38.224228919 -0500 @@ -593,8 +593,15 @@ switch (err) { case -EINPROGRESS: @@ -460498,9 +468113,57 @@ diff -Naur --no-dereference a/include/linux/crypto.h b/include/linux/crypto.h err = wait->err; break; } +diff -Naur --no-dereference a/include/linux/dcache.h b/include/linux/dcache.h +--- a/include/linux/dcache.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/dcache.h 2024-11-24 20:19:38.224228919 -0500 +@@ -106,7 +106,7 @@ + + union { + struct list_head d_lru; /* LRU list */ +- wait_queue_head_t *d_wait; /* in-lookup ones only */ ++ struct swait_queue_head *d_wait; /* in-lookup ones only */ + }; + struct list_head d_child; /* child of parent list */ + struct list_head d_subdirs; /* our children */ +@@ -238,7 +238,7 @@ + extern struct dentry * d_alloc(struct dentry *, const struct qstr *); + extern struct dentry * d_alloc_anon(struct super_block *); + extern struct dentry * d_alloc_parallel(struct dentry *, const struct qstr *, +- wait_queue_head_t *); ++ struct swait_queue_head *); + extern struct dentry * d_splice_alias(struct inode *, struct dentry *); + extern struct dentry * d_add_ci(struct dentry *, struct inode *, struct qstr *); + extern struct dentry * d_exact_alias(struct dentry *, struct inode *); +diff -Naur --no-dereference a/include/linux/debug_locks.h b/include/linux/debug_locks.h +--- a/include/linux/debug_locks.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/debug_locks.h 2024-11-24 20:19:38.224228919 -0500 +@@ -3,8 +3,7 @@ + #define __LINUX_DEBUG_LOCKING_H + + #include +-#include +-#include ++#include + + struct task_struct; + +diff -Naur --no-dereference a/include/linux/delay.h b/include/linux/delay.h +--- a/include/linux/delay.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/delay.h 2024-11-24 20:19:38.224228919 -0500 +@@ -76,4 +76,10 @@ + msleep(DIV_ROUND_UP(usecs, 1000)); + } + ++#ifdef CONFIG_PREEMPT_RT ++extern void cpu_chill(void); ++#else ++# define cpu_chill() cpu_relax() ++#endif ++ + #endif /* defined(_LINUX_DELAY_H) */ diff -Naur --no-dereference a/include/linux/dma/k3-event-router.h b/include/linux/dma/k3-event-router.h --- a/include/linux/dma/k3-event-router.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/linux/dma/k3-event-router.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/linux/dma/k3-event-router.h 2024-11-24 20:19:38.224228919 -0500 @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -460520,7 +468183,7 @@ diff -Naur --no-dereference a/include/linux/dma/k3-event-router.h b/include/linu +#endif /* K3_EVENT_ROUTER_ */ diff -Naur --no-dereference a/include/linux/dma/k3-psil.h b/include/linux/dma/k3-psil.h --- a/include/linux/dma/k3-psil.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/dma/k3-psil.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/linux/dma/k3-psil.h 2024-11-24 20:19:38.224228919 -0500 @@ -42,27 +42,42 @@ /** * struct psil_endpoint_config - PSI-L Endpoint configuration @@ -460571,7 +468234,7 @@ diff -Naur --no-dereference a/include/linux/dma/k3-psil.h b/include/linux/dma/k3 int psil_set_new_ep_config(struct device *dev, const char *name, diff -Naur --no-dereference a/include/linux/dma/k3-udma-glue.h b/include/linux/dma/k3-udma-glue.h --- a/include/linux/dma/k3-udma-glue.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/dma/k3-udma-glue.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/linux/dma/k3-udma-glue.h 2024-11-24 20:19:38.224228919 -0500 @@ -41,6 +41,12 @@ u32 k3_udma_glue_tx_get_hdesc_size(struct k3_udma_glue_tx_channel *tx_chn); u32 k3_udma_glue_tx_get_txcq_id(struct k3_udma_glue_tx_channel *tx_chn); @@ -460599,7 +468262,7 @@ diff -Naur --no-dereference a/include/linux/dma/k3-udma-glue.h b/include/linux/d #endif /* K3_UDMA_GLUE_H_ */ diff -Naur --no-dereference a/include/linux/dmaengine.h b/include/linux/dmaengine.h --- a/include/linux/dmaengine.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/dmaengine.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/linux/dmaengine.h 2024-11-24 20:19:38.224228919 -0500 @@ -357,11 +357,14 @@ * @chan: driver channel device * @device: sysfs device @@ -460654,9 +468317,25 @@ diff -Naur --no-dereference a/include/linux/dmaengine.h b/include/linux/dmaengin +} + #endif /* DMAENGINE_H */ +diff -Naur --no-dereference a/include/linux/entry-common.h b/include/linux/entry-common.h +--- a/include/linux/entry-common.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/entry-common.h 2024-11-24 20:19:38.224228919 -0500 +@@ -67,9 +67,9 @@ + # define ARCH_EXIT_TO_USER_MODE_WORK (0) + #endif + +-#define EXIT_TO_USER_MODE_WORK \ +- (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_UPROBE | \ +- _TIF_NEED_RESCHED | _TIF_PATCH_PENDING | _TIF_NOTIFY_SIGNAL | \ ++#define EXIT_TO_USER_MODE_WORK \ ++ (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_UPROBE | \ ++ _TIF_NEED_RESCHED_MASK | _TIF_PATCH_PENDING | _TIF_NOTIFY_SIGNAL | \ + ARCH_EXIT_TO_USER_MODE_WORK) + + /** diff -Naur --no-dereference a/include/linux/ethtool.h b/include/linux/ethtool.h --- a/include/linux/ethtool.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/ethtool.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/linux/ethtool.h 2024-11-24 20:19:38.224228919 -0500 @@ -189,6 +189,12 @@ bool ethtool_convert_link_mode_to_legacy_u32(u32 *legacy_u32, const unsigned long *src); @@ -460670,9 +468349,55 @@ diff -Naur --no-dereference a/include/linux/ethtool.h b/include/linux/ethtool.h #define ETHTOOL_COALESCE_RX_USECS BIT(0) #define ETHTOOL_COALESCE_RX_MAX_FRAMES BIT(1) #define ETHTOOL_COALESCE_RX_USECS_IRQ BIT(2) +diff -Naur --no-dereference a/include/linux/eventfd.h b/include/linux/eventfd.h +--- a/include/linux/eventfd.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/eventfd.h 2024-11-24 20:19:38.224228919 -0500 +@@ -14,6 +14,7 @@ + #include + #include + #include ++#include + + /* + * CAREFUL: Check include/uapi/asm-generic/fcntl.h when defining +@@ -43,11 +44,9 @@ + int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_entry_t *wait, + __u64 *cnt); + +-DECLARE_PER_CPU(int, eventfd_wake_count); +- +-static inline bool eventfd_signal_count(void) ++static inline bool eventfd_signal_allowed(void) + { +- return this_cpu_read(eventfd_wake_count); ++ return !current->in_eventfd_signal; + } + + #else /* CONFIG_EVENTFD */ +@@ -84,9 +83,9 @@ + return -ENOSYS; + } + +-static inline bool eventfd_signal_count(void) ++static inline bool eventfd_signal_allowed(void) + { +- return false; ++ return true; + } + + #endif diff -Naur --no-dereference a/include/linux/fs.h b/include/linux/fs.h --- a/include/linux/fs.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/fs.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/linux/fs.h 2024-11-24 20:19:38.224228919 -0500 +@@ -699,7 +699,7 @@ + struct block_device *i_bdev; + struct cdev *i_cdev; + char *i_link; +- unsigned i_dir_seq; ++ unsigned __i_dir_seq; + }; + + __u32 i_generation; @@ -1338,6 +1338,7 @@ /* can be called from interrupts */ extern void kill_fasync(struct fasync_struct **, int, int); @@ -460705,9 +468430,613 @@ diff -Naur --no-dereference a/include/linux/fs.h b/include/linux/fs.h extern int sync_filesystem(struct super_block *); extern const struct file_operations def_blk_fops; extern const struct file_operations def_chr_fops; +diff -Naur --no-dereference a/include/linux/hardirq.h b/include/linux/hardirq.h +--- a/include/linux/hardirq.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/hardirq.h 2024-11-24 20:19:38.225228920 -0500 +@@ -6,6 +6,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -32,9 +33,9 @@ + */ + #define __irq_enter() \ + do { \ +- account_irq_enter_time(current); \ + preempt_count_add(HARDIRQ_OFFSET); \ + lockdep_hardirq_enter(); \ ++ account_hardirq_enter(current); \ + } while (0) + + /* +@@ -62,8 +63,8 @@ + */ + #define __irq_exit() \ + do { \ ++ account_hardirq_exit(current); \ + lockdep_hardirq_exit(); \ +- account_irq_exit_time(current); \ + preempt_count_sub(HARDIRQ_OFFSET); \ + } while (0) + +@@ -115,7 +116,6 @@ + do { \ + lockdep_off(); \ + arch_nmi_enter(); \ +- printk_nmi_enter(); \ + BUG_ON(in_nmi() == NMI_MASK); \ + __preempt_count_add(NMI_OFFSET + HARDIRQ_OFFSET); \ + } while (0) +@@ -134,7 +134,6 @@ + do { \ + BUG_ON(!in_nmi()); \ + __preempt_count_sub(NMI_OFFSET + HARDIRQ_OFFSET); \ +- printk_nmi_exit(); \ + arch_nmi_exit(); \ + lockdep_on(); \ + } while (0) +diff -Naur --no-dereference a/include/linux/highmem.h b/include/linux/highmem.h +--- a/include/linux/highmem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/highmem.h 2024-11-24 20:19:38.225228920 -0500 +@@ -11,217 +11,137 @@ + + #include + +-#ifndef ARCH_HAS_FLUSH_ANON_PAGE +-static inline void flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned long vmaddr) +-{ +-} +-#endif +- +-#ifndef ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE +-static inline void flush_kernel_dcache_page(struct page *page) +-{ +-} +-static inline void flush_kernel_vmap_range(void *vaddr, int size) +-{ +-} +-static inline void invalidate_kernel_vmap_range(void *vaddr, int size) +-{ +-} +-#endif +- +-#include +- +-#ifdef CONFIG_HIGHMEM +-extern void *kmap_atomic_high_prot(struct page *page, pgprot_t prot); +-extern void kunmap_atomic_high(void *kvaddr); +-#include +- +-#ifndef ARCH_HAS_KMAP_FLUSH_TLB +-static inline void kmap_flush_tlb(unsigned long addr) { } +-#endif +- +-#ifndef kmap_prot +-#define kmap_prot PAGE_KERNEL +-#endif +- +-void *kmap_high(struct page *page); +-static inline void *kmap(struct page *page) +-{ +- void *addr; +- +- might_sleep(); +- if (!PageHighMem(page)) +- addr = page_address(page); +- else +- addr = kmap_high(page); +- kmap_flush_tlb((unsigned long)addr); +- return addr; +-} +- +-void kunmap_high(struct page *page); ++#include "highmem-internal.h" + +-static inline void kunmap(struct page *page) +-{ +- might_sleep(); +- if (!PageHighMem(page)) +- return; +- kunmap_high(page); +-} +- +-/* +- * kmap_atomic/kunmap_atomic is significantly faster than kmap/kunmap because +- * no global lock is needed and because the kmap code must perform a global TLB +- * invalidation when the kmap pool wraps. +- * +- * However when holding an atomic kmap it is not legal to sleep, so atomic +- * kmaps are appropriate for short, tight code paths only. +- * +- * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap +- * gives a more generic (and caching) interface. But kmap_atomic can +- * be used in IRQ contexts, so in some (very limited) cases we need +- * it. ++/** ++ * kmap - Map a page for long term usage ++ * @page: Pointer to the page to be mapped ++ * ++ * Returns: The virtual address of the mapping ++ * ++ * Can only be invoked from preemptible task context because on 32bit ++ * systems with CONFIG_HIGHMEM enabled this function might sleep. ++ * ++ * For systems with CONFIG_HIGHMEM=n and for pages in the low memory area ++ * this returns the virtual address of the direct kernel mapping. ++ * ++ * The returned virtual address is globally visible and valid up to the ++ * point where it is unmapped via kunmap(). The pointer can be handed to ++ * other contexts. ++ * ++ * For highmem pages on 32bit systems this can be slow as the mapping space ++ * is limited and protected by a global lock. In case that there is no ++ * mapping slot available the function blocks until a slot is released via ++ * kunmap(). + */ +-static inline void *kmap_atomic_prot(struct page *page, pgprot_t prot) +-{ +- preempt_disable(); +- pagefault_disable(); +- if (!PageHighMem(page)) +- return page_address(page); +- return kmap_atomic_high_prot(page, prot); +-} +-#define kmap_atomic(page) kmap_atomic_prot(page, kmap_prot) +- +-/* declarations for linux/mm/highmem.c */ +-unsigned int nr_free_highpages(void); +-extern atomic_long_t _totalhigh_pages; +-static inline unsigned long totalhigh_pages(void) +-{ +- return (unsigned long)atomic_long_read(&_totalhigh_pages); +-} +- +-static inline void totalhigh_pages_inc(void) +-{ +- atomic_long_inc(&_totalhigh_pages); +-} +- +-static inline void totalhigh_pages_dec(void) +-{ +- atomic_long_dec(&_totalhigh_pages); +-} +- +-static inline void totalhigh_pages_add(long count) +-{ +- atomic_long_add(count, &_totalhigh_pages); +-} +- +-static inline void totalhigh_pages_set(long val) +-{ +- atomic_long_set(&_totalhigh_pages, val); +-} +- +-void kmap_flush_unused(void); +- +-struct page *kmap_to_page(void *addr); ++static inline void *kmap(struct page *page); + +-#else /* CONFIG_HIGHMEM */ ++/** ++ * kunmap - Unmap the virtual address mapped by kmap() ++ * @addr: Virtual address to be unmapped ++ * ++ * Counterpart to kmap(). A NOOP for CONFIG_HIGHMEM=n and for mappings of ++ * pages in the low memory area. ++ */ ++static inline void kunmap(struct page *page); + +-static inline unsigned int nr_free_highpages(void) { return 0; } ++/** ++ * kmap_to_page - Get the page for a kmap'ed address ++ * @addr: The address to look up ++ * ++ * Returns: The page which is mapped to @addr. ++ */ ++static inline struct page *kmap_to_page(void *addr); + +-static inline struct page *kmap_to_page(void *addr) +-{ +- return virt_to_page(addr); +-} ++/** ++ * kmap_flush_unused - Flush all unused kmap mappings in order to ++ * remove stray mappings ++ */ ++static inline void kmap_flush_unused(void); + +-static inline unsigned long totalhigh_pages(void) { return 0UL; } ++/** ++ * kmap_local_page - Map a page for temporary usage ++ * @page: Pointer to the page to be mapped ++ * ++ * Returns: The virtual address of the mapping ++ * ++ * Can be invoked from any context. ++ * ++ * Requires careful handling when nesting multiple mappings because the map ++ * management is stack based. The unmap has to be in the reverse order of ++ * the map operation: ++ * ++ * addr1 = kmap_local_page(page1); ++ * addr2 = kmap_local_page(page2); ++ * ... ++ * kunmap_local(addr2); ++ * kunmap_local(addr1); ++ * ++ * Unmapping addr1 before addr2 is invalid and causes malfunction. ++ * ++ * Contrary to kmap() mappings the mapping is only valid in the context of ++ * the caller and cannot be handed to other contexts. ++ * ++ * On CONFIG_HIGHMEM=n kernels and for low memory pages this returns the ++ * virtual address of the direct mapping. Only real highmem pages are ++ * temporarily mapped. ++ * ++ * While it is significantly faster than kmap() for the higmem case it ++ * comes with restrictions about the pointer validity. Only use when really ++ * necessary. ++ * ++ * On HIGHMEM enabled systems mapping a highmem page has the side effect of ++ * disabling migration in order to keep the virtual address stable across ++ * preemption. No caller of kmap_local_page() can rely on this side effect. ++ */ ++static inline void *kmap_local_page(struct page *page); + +-static inline void *kmap(struct page *page) +-{ +- might_sleep(); +- return page_address(page); +-} ++/** ++ * kmap_atomic - Atomically map a page for temporary usage - Deprecated! ++ * @page: Pointer to the page to be mapped ++ * ++ * Returns: The virtual address of the mapping ++ * ++ * Effectively a wrapper around kmap_local_page() which disables pagefaults ++ * and preemption. ++ * ++ * Do not use in new code. Use kmap_local_page() instead. ++ */ ++static inline void *kmap_atomic(struct page *page); + +-static inline void kunmap_high(struct page *page) +-{ +-} ++/** ++ * kunmap_atomic - Unmap the virtual address mapped by kmap_atomic() ++ * @addr: Virtual address to be unmapped ++ * ++ * Counterpart to kmap_atomic(). ++ * ++ * Effectively a wrapper around kunmap_local() which additionally undoes ++ * the side effects of kmap_atomic(), i.e. reenabling pagefaults and ++ * preemption. ++ */ + +-static inline void kunmap(struct page *page) +-{ +-#ifdef ARCH_HAS_FLUSH_ON_KUNMAP +- kunmap_flush_on_unmap(page_address(page)); +-#endif +-} ++/* Highmem related interfaces for management code */ ++static inline unsigned int nr_free_highpages(void); ++static inline unsigned long totalhigh_pages(void); + +-static inline void *kmap_atomic(struct page *page) ++#ifndef ARCH_HAS_FLUSH_ANON_PAGE ++static inline void flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned long vmaddr) + { +- preempt_disable(); +- pagefault_disable(); +- return page_address(page); + } +-#define kmap_atomic_prot(page, prot) kmap_atomic(page) +- +-static inline void kunmap_atomic_high(void *addr) +-{ +- /* +- * Mostly nothing to do in the CONFIG_HIGHMEM=n case as kunmap_atomic() +- * handles re-enabling faults + preemption +- */ +-#ifdef ARCH_HAS_FLUSH_ON_KUNMAP +- kunmap_flush_on_unmap(addr); + #endif +-} +- +-#define kmap_atomic_pfn(pfn) kmap_atomic(pfn_to_page(pfn)) +- +-#define kmap_flush_unused() do {} while(0) +- +-#endif /* CONFIG_HIGHMEM */ +- +-#if defined(CONFIG_HIGHMEM) || defined(CONFIG_X86_32) +- +-DECLARE_PER_CPU(int, __kmap_atomic_idx); + +-static inline int kmap_atomic_idx_push(void) ++#ifndef ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE ++static inline void flush_kernel_dcache_page(struct page *page) + { +- int idx = __this_cpu_inc_return(__kmap_atomic_idx) - 1; +- +-#ifdef CONFIG_DEBUG_HIGHMEM +- WARN_ON_ONCE(in_irq() && !irqs_disabled()); +- BUG_ON(idx >= KM_TYPE_NR); +-#endif +- return idx; + } +- +-static inline int kmap_atomic_idx(void) ++static inline void flush_kernel_vmap_range(void *vaddr, int size) + { +- return __this_cpu_read(__kmap_atomic_idx) - 1; + } +- +-static inline void kmap_atomic_idx_pop(void) ++static inline void invalidate_kernel_vmap_range(void *vaddr, int size) + { +-#ifdef CONFIG_DEBUG_HIGHMEM +- int idx = __this_cpu_dec_return(__kmap_atomic_idx); +- +- BUG_ON(idx < 0); +-#else +- __this_cpu_dec(__kmap_atomic_idx); +-#endif + } +- + #endif + +-/* +- * Prevent people trying to call kunmap_atomic() as if it were kunmap() +- * kunmap_atomic() should get the return value of kmap_atomic, not the page. +- */ +-#define kunmap_atomic(addr) \ +-do { \ +- BUILD_BUG_ON(__same_type((addr), struct page *)); \ +- kunmap_atomic_high(addr); \ +- pagefault_enable(); \ +- preempt_enable(); \ +-} while (0) +- +- + /* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */ + #ifndef clear_user_highpage + static inline void clear_user_highpage(struct page *page, unsigned long vaddr) +diff -Naur --no-dereference a/include/linux/highmem-internal.h b/include/linux/highmem-internal.h +--- a/include/linux/highmem-internal.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/linux/highmem-internal.h 2024-11-24 20:19:38.225228920 -0500 +@@ -0,0 +1,222 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++#ifndef _LINUX_HIGHMEM_INTERNAL_H ++#define _LINUX_HIGHMEM_INTERNAL_H ++ ++/* ++ * Outside of CONFIG_HIGHMEM to support X86 32bit iomap_atomic() cruft. ++ */ ++#ifdef CONFIG_KMAP_LOCAL ++void *__kmap_local_pfn_prot(unsigned long pfn, pgprot_t prot); ++void *__kmap_local_page_prot(struct page *page, pgprot_t prot); ++void kunmap_local_indexed(void *vaddr); ++void kmap_local_fork(struct task_struct *tsk); ++void __kmap_local_sched_out(void); ++void __kmap_local_sched_in(void); ++static inline void kmap_assert_nomap(void) ++{ ++ DEBUG_LOCKS_WARN_ON(current->kmap_ctrl.idx); ++} ++#else ++static inline void kmap_local_fork(struct task_struct *tsk) { } ++static inline void kmap_assert_nomap(void) { } ++#endif ++ ++#ifdef CONFIG_HIGHMEM ++#include ++ ++#ifndef ARCH_HAS_KMAP_FLUSH_TLB ++static inline void kmap_flush_tlb(unsigned long addr) { } ++#endif ++ ++#ifndef kmap_prot ++#define kmap_prot PAGE_KERNEL ++#endif ++ ++void *kmap_high(struct page *page); ++void kunmap_high(struct page *page); ++void __kmap_flush_unused(void); ++struct page *__kmap_to_page(void *addr); ++ ++static inline void *kmap(struct page *page) ++{ ++ void *addr; ++ ++ might_sleep(); ++ if (!PageHighMem(page)) ++ addr = page_address(page); ++ else ++ addr = kmap_high(page); ++ kmap_flush_tlb((unsigned long)addr); ++ return addr; ++} ++ ++static inline void kunmap(struct page *page) ++{ ++ might_sleep(); ++ if (!PageHighMem(page)) ++ return; ++ kunmap_high(page); ++} ++ ++static inline struct page *kmap_to_page(void *addr) ++{ ++ return __kmap_to_page(addr); ++} ++ ++static inline void kmap_flush_unused(void) ++{ ++ __kmap_flush_unused(); ++} ++ ++static inline void *kmap_local_page(struct page *page) ++{ ++ return __kmap_local_page_prot(page, kmap_prot); ++} ++ ++static inline void *kmap_local_page_prot(struct page *page, pgprot_t prot) ++{ ++ return __kmap_local_page_prot(page, prot); ++} ++ ++static inline void *kmap_local_pfn(unsigned long pfn) ++{ ++ return __kmap_local_pfn_prot(pfn, kmap_prot); ++} ++ ++static inline void __kunmap_local(void *vaddr) ++{ ++ kunmap_local_indexed(vaddr); ++} ++ ++static inline void *kmap_atomic(struct page *page) ++{ ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) ++ migrate_disable(); ++ else ++ preempt_disable(); ++ pagefault_disable(); ++ return __kmap_local_page_prot(page, kmap_prot); ++} ++ ++static inline void __kunmap_atomic(void *addr) ++{ ++ kunmap_local_indexed(addr); ++ pagefault_enable(); ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) ++ migrate_enable(); ++ else ++ preempt_enable(); ++} ++ ++unsigned int __nr_free_highpages(void); ++extern atomic_long_t _totalhigh_pages; ++ ++static inline unsigned int nr_free_highpages(void) ++{ ++ return __nr_free_highpages(); ++} ++ ++static inline unsigned long totalhigh_pages(void) ++{ ++ return (unsigned long)atomic_long_read(&_totalhigh_pages); ++} ++ ++static inline void totalhigh_pages_inc(void) ++{ ++ atomic_long_inc(&_totalhigh_pages); ++} ++ ++static inline void totalhigh_pages_add(long count) ++{ ++ atomic_long_add(count, &_totalhigh_pages); ++} ++ ++#else /* CONFIG_HIGHMEM */ ++ ++static inline struct page *kmap_to_page(void *addr) ++{ ++ return virt_to_page(addr); ++} ++ ++static inline void *kmap(struct page *page) ++{ ++ might_sleep(); ++ return page_address(page); ++} ++ ++static inline void kunmap_high(struct page *page) { } ++static inline void kmap_flush_unused(void) { } ++ ++static inline void kunmap(struct page *page) ++{ ++#ifdef ARCH_HAS_FLUSH_ON_KUNMAP ++ kunmap_flush_on_unmap(page_address(page)); ++#endif ++} ++ ++static inline void *kmap_local_page(struct page *page) ++{ ++ return page_address(page); ++} ++ ++static inline void *kmap_local_page_prot(struct page *page, pgprot_t prot) ++{ ++ return kmap_local_page(page); ++} ++ ++static inline void *kmap_local_pfn(unsigned long pfn) ++{ ++ return kmap_local_page(pfn_to_page(pfn)); ++} ++ ++static inline void __kunmap_local(void *addr) ++{ ++#ifdef ARCH_HAS_FLUSH_ON_KUNMAP ++ kunmap_flush_on_unmap(addr); ++#endif ++} ++ ++static inline void *kmap_atomic(struct page *page) ++{ ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) ++ migrate_disable(); ++ else ++ preempt_disable(); ++ pagefault_disable(); ++ return page_address(page); ++} ++ ++static inline void __kunmap_atomic(void *addr) ++{ ++#ifdef ARCH_HAS_FLUSH_ON_KUNMAP ++ kunmap_flush_on_unmap(addr); ++#endif ++ pagefault_enable(); ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) ++ migrate_enable(); ++ else ++ preempt_enable(); ++} ++ ++static inline unsigned int nr_free_highpages(void) { return 0; } ++static inline unsigned long totalhigh_pages(void) { return 0UL; } ++ ++#endif /* CONFIG_HIGHMEM */ ++ ++/* ++ * Prevent people trying to call kunmap_atomic() as if it were kunmap() ++ * kunmap_atomic() should get the return value of kmap_atomic, not the page. ++ */ ++#define kunmap_atomic(__addr) \ ++do { \ ++ BUILD_BUG_ON(__same_type((__addr), struct page *)); \ ++ __kunmap_atomic(__addr); \ ++} while (0) ++ ++#define kunmap_local(__addr) \ ++do { \ ++ BUILD_BUG_ON(__same_type((__addr), struct page *)); \ ++ __kunmap_local(__addr); \ ++} while (0) ++ ++#endif diff -Naur --no-dereference a/include/linux/i2c-atr.h b/include/linux/i2c-atr.h --- a/include/linux/i2c-atr.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/linux/i2c-atr.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/linux/i2c-atr.h 2024-11-24 20:19:38.225228920 -0500 @@ -0,0 +1,82 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -460793,7 +469122,7 @@ diff -Naur --no-dereference a/include/linux/i2c-atr.h b/include/linux/i2c-atr.h +#endif /* _LINUX_I2C_ATR_H */ diff -Naur --no-dereference a/include/linux/i2c.h b/include/linux/i2c.h --- a/include/linux/i2c.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/i2c.h 2024-08-28 19:44:05.660038225 -0400 ++++ b/include/linux/i2c.h 2024-11-24 20:19:38.225228920 -0500 @@ -561,6 +561,21 @@ }; @@ -460826,7 +469155,7 @@ diff -Naur --no-dereference a/include/linux/i2c.h b/include/linux/i2c.h diff -Naur --no-dereference a/include/linux/if_hsr.h b/include/linux/if_hsr.h --- a/include/linux/if_hsr.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/linux/if_hsr.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/if_hsr.h 2024-11-24 20:19:38.225228920 -0500 @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_IF_HSR_H_ @@ -460855,9 +469184,176 @@ diff -Naur --no-dereference a/include/linux/if_hsr.h b/include/linux/if_hsr.h +#endif /* CONFIG_HSR */ + +#endif /*_LINUX_IF_HSR_H_*/ +diff -Naur --no-dereference a/include/linux/interrupt.h b/include/linux/interrupt.h +--- a/include/linux/interrupt.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/interrupt.h 2024-11-24 20:19:38.225228920 -0500 +@@ -564,7 +564,7 @@ + asmlinkage void do_softirq(void); + asmlinkage void __do_softirq(void); + +-#ifdef __ARCH_HAS_DO_SOFTIRQ ++#if defined(__ARCH_HAS_DO_SOFTIRQ) && !defined(CONFIG_PREEMPT_RT) + void do_softirq_own_stack(void); + #else + static inline void do_softirq_own_stack(void) +@@ -658,26 +658,21 @@ + TASKLET_STATE_RUN /* Tasklet is running (SMP only) */ + }; + +-#ifdef CONFIG_SMP ++#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT) + static inline int tasklet_trylock(struct tasklet_struct *t) + { + return !test_and_set_bit(TASKLET_STATE_RUN, &(t)->state); + } + +-static inline void tasklet_unlock(struct tasklet_struct *t) +-{ +- smp_mb__before_atomic(); +- clear_bit(TASKLET_STATE_RUN, &(t)->state); +-} ++void tasklet_unlock(struct tasklet_struct *t); ++void tasklet_unlock_wait(struct tasklet_struct *t); ++void tasklet_unlock_spin_wait(struct tasklet_struct *t); + +-static inline void tasklet_unlock_wait(struct tasklet_struct *t) +-{ +- while (test_bit(TASKLET_STATE_RUN, &(t)->state)) { barrier(); } +-} + #else +-#define tasklet_trylock(t) 1 +-#define tasklet_unlock_wait(t) do { } while (0) +-#define tasklet_unlock(t) do { } while (0) ++static inline int tasklet_trylock(struct tasklet_struct *t) { return 1; } ++static inline void tasklet_unlock(struct tasklet_struct *t) { } ++static inline void tasklet_unlock_wait(struct tasklet_struct *t) { } ++static inline void tasklet_unlock_spin_wait(struct tasklet_struct *t) { } + #endif + + extern void __tasklet_schedule(struct tasklet_struct *t); +@@ -702,6 +697,17 @@ + smp_mb__after_atomic(); + } + ++/* ++ * Do not use in new code. Disabling tasklets from atomic contexts is ++ * error prone and should be avoided. ++ */ ++static inline void tasklet_disable_in_atomic(struct tasklet_struct *t) ++{ ++ tasklet_disable_nosync(t); ++ tasklet_unlock_spin_wait(t); ++ smp_mb(); ++} ++ + static inline void tasklet_disable(struct tasklet_struct *t) + { + tasklet_disable_nosync(t); +diff -Naur --no-dereference a/include/linux/io-mapping.h b/include/linux/io-mapping.h +--- a/include/linux/io-mapping.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/io-mapping.h 2024-11-24 20:19:38.225228920 -0500 +@@ -60,22 +60,20 @@ + iomap_free(mapping->base, mapping->size); + } + +-/* Atomic map/unmap */ ++/* Temporary mappings which are only valid in the current context */ + static inline void __iomem * +-io_mapping_map_atomic_wc(struct io_mapping *mapping, +- unsigned long offset) ++io_mapping_map_local_wc(struct io_mapping *mapping, unsigned long offset) + { + resource_size_t phys_addr; + + BUG_ON(offset >= mapping->size); + phys_addr = mapping->base + offset; +- return iomap_atomic_prot_pfn(PHYS_PFN(phys_addr), mapping->prot); ++ return __iomap_local_pfn_prot(PHYS_PFN(phys_addr), mapping->prot); + } + +-static inline void +-io_mapping_unmap_atomic(void __iomem *vaddr) ++static inline void io_mapping_unmap_local(void __iomem *vaddr) + { +- iounmap_atomic(vaddr); ++ kunmap_local_indexed((void __force *)vaddr); + } + + static inline void __iomem * +@@ -97,7 +95,7 @@ + iounmap(vaddr); + } + +-#else ++#else /* HAVE_ATOMIC_IOMAP */ + + #include + +@@ -144,25 +142,19 @@ + { + } + +-/* Atomic map/unmap */ ++/* Temporary mappings which are only valid in the current context */ + static inline void __iomem * +-io_mapping_map_atomic_wc(struct io_mapping *mapping, +- unsigned long offset) ++io_mapping_map_local_wc(struct io_mapping *mapping, unsigned long offset) + { +- preempt_disable(); +- pagefault_disable(); + return io_mapping_map_wc(mapping, offset, PAGE_SIZE); + } + +-static inline void +-io_mapping_unmap_atomic(void __iomem *vaddr) ++static inline void io_mapping_unmap_local(void __iomem *vaddr) + { + io_mapping_unmap(vaddr); +- pagefault_enable(); +- preempt_enable(); + } + +-#endif /* HAVE_ATOMIC_IOMAP */ ++#endif /* !HAVE_ATOMIC_IOMAP */ + + static inline struct io_mapping * + io_mapping_create_wc(resource_size_t base, +diff -Naur --no-dereference a/include/linux/irq_cpustat.h b/include/linux/irq_cpustat.h +--- a/include/linux/irq_cpustat.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/irq_cpustat.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,28 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef __irq_cpustat_h +-#define __irq_cpustat_h +- +-/* +- * Contains default mappings for irq_cpustat_t, used by almost every +- * architecture. Some arch (like s390) have per cpu hardware pages and +- * they define their own mappings for irq_stat. +- * +- * Keith Owens July 2000. +- */ +- +- +-/* +- * Simple wrappers reducing source bloat. Define all irq_stat fields +- * here, even ones that are arch dependent. That way we get common +- * definitions instead of differing sets for each arch. +- */ +- +-#ifndef __ARCH_IRQ_STAT +-DECLARE_PER_CPU_ALIGNED(irq_cpustat_t, irq_stat); /* defined in asm/hardirq.h */ +-#define __IRQ_STAT(cpu, member) (per_cpu(irq_stat.member, cpu)) +-#endif +- +-/* arch dependent irq_stat fields */ +-#define nmi_count(cpu) __IRQ_STAT((cpu), __nmi_count) /* i386 */ +- +-#endif /* __irq_cpustat_h */ diff -Naur --no-dereference a/include/linux/irqdomain.h b/include/linux/irqdomain.h --- a/include/linux/irqdomain.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/irqdomain.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/irqdomain.h 2024-11-24 20:19:38.225228920 -0500 @@ -387,6 +387,8 @@ extern unsigned int irq_create_mapping_affinity(struct irq_domain *host, irq_hw_number_t hwirq, @@ -460867,9 +469363,104 @@ diff -Naur --no-dereference a/include/linux/irqdomain.h b/include/linux/irqdomai extern unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec); extern void irq_dispose_mapping(unsigned int virq); +diff -Naur --no-dereference a/include/linux/irqflags.h b/include/linux/irqflags.h +--- a/include/linux/irqflags.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/irqflags.h 2024-11-24 20:19:38.225228920 -0500 +@@ -71,14 +71,6 @@ + do { \ + __this_cpu_dec(hardirq_context); \ + } while (0) +-# define lockdep_softirq_enter() \ +-do { \ +- current->softirq_context++; \ +-} while (0) +-# define lockdep_softirq_exit() \ +-do { \ +- current->softirq_context--; \ +-} while (0) + + # define lockdep_hrtimer_enter(__hrtimer) \ + ({ \ +@@ -140,6 +132,21 @@ + # define lockdep_irq_work_exit(__work) do { } while (0) + #endif + ++#if defined(CONFIG_TRACE_IRQFLAGS) && !defined(CONFIG_PREEMPT_RT) ++# define lockdep_softirq_enter() \ ++do { \ ++ current->softirq_context++; \ ++} while (0) ++# define lockdep_softirq_exit() \ ++do { \ ++ current->softirq_context--; \ ++} while (0) ++ ++#else ++# define lockdep_softirq_enter() do { } while (0) ++# define lockdep_softirq_exit() do { } while (0) ++#endif ++ + #if defined(CONFIG_IRQSOFF_TRACER) || \ + defined(CONFIG_PREEMPT_TRACER) + extern void stop_critical_timings(void); +diff -Naur --no-dereference a/include/linux/irq_work.h b/include/linux/irq_work.h +--- a/include/linux/irq_work.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/irq_work.h 2024-11-24 20:19:38.225228920 -0500 +@@ -3,6 +3,7 @@ + #define _LINUX_IRQ_WORK_H + + #include ++#include + + /* + * An entry can be in one of four states: +@@ -22,6 +23,7 @@ + }; + }; + void (*func)(struct irq_work *); ++ struct rcuwait irqwait; + }; + + static inline +@@ -29,13 +31,34 @@ + { + atomic_set(&work->flags, 0); + work->func = func; ++ rcuwait_init(&work->irqwait); + } + + #define DEFINE_IRQ_WORK(name, _f) struct irq_work name = { \ + .flags = ATOMIC_INIT(0), \ +- .func = (_f) \ ++ .func = (_f), \ ++ .irqwait = __RCUWAIT_INITIALIZER(irqwait), \ + } + ++#define __IRQ_WORK_INIT(_func, _flags) (struct irq_work){ \ ++ .flags = ATOMIC_INIT(_flags), \ ++ .func = (_func), \ ++ .irqwait = __RCUWAIT_INITIALIZER(irqwait), \ ++} ++ ++#define IRQ_WORK_INIT(_func) __IRQ_WORK_INIT(_func, 0) ++#define IRQ_WORK_INIT_LAZY(_func) __IRQ_WORK_INIT(_func, IRQ_WORK_LAZY) ++#define IRQ_WORK_INIT_HARD(_func) __IRQ_WORK_INIT(_func, IRQ_WORK_HARD_IRQ) ++ ++static inline bool irq_work_is_busy(struct irq_work *work) ++{ ++ return atomic_read(&work->flags) & IRQ_WORK_BUSY; ++} ++ ++static inline bool irq_work_is_hard(struct irq_work *work) ++{ ++ return atomic_read(&work->flags) & IRQ_WORK_HARD_IRQ; ++} + + bool irq_work_queue(struct irq_work *work); + bool irq_work_queue_on(struct irq_work *work, int cpu); diff -Naur --no-dereference a/include/linux/kernel.h b/include/linux/kernel.h --- a/include/linux/kernel.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/kernel.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/kernel.h 2024-11-24 20:19:38.225228920 -0500 @@ -10,6 +10,7 @@ #include #include @@ -460878,7 +469469,69 @@ diff -Naur --no-dereference a/include/linux/kernel.h b/include/linux/kernel.h #include #include #include -@@ -327,148 +328,6 @@ +@@ -204,6 +205,7 @@ + extern void ___might_sleep(const char *file, int line, int preempt_offset); + extern void __might_sleep(const char *file, int line, int preempt_offset); + extern void __cant_sleep(const char *file, int line, int preempt_offset); ++extern void __cant_migrate(const char *file, int line); + + /** + * might_sleep - annotation for functions that can sleep +@@ -219,6 +221,10 @@ + */ + # define might_sleep() \ + do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0) ++ ++# define might_sleep_no_state_check() \ ++ do { ___might_sleep(__FILE__, __LINE__, 0); } while (0) ++ + /** + * cant_sleep - annotation for functions that cannot sleep + * +@@ -227,6 +233,18 @@ + # define cant_sleep() \ + do { __cant_sleep(__FILE__, __LINE__, 0); } while (0) + # define sched_annotate_sleep() (current->task_state_change = 0) ++ ++/** ++ * cant_migrate - annotation for functions that cannot migrate ++ * ++ * Will print a stack trace if executed in code which is migratable ++ */ ++# define cant_migrate() \ ++ do { \ ++ if (IS_ENABLED(CONFIG_SMP)) \ ++ __cant_migrate(__FILE__, __LINE__); \ ++ } while (0) ++ + /** + * non_block_start - annotate the start of section where sleeping is prohibited + * +@@ -250,7 +268,9 @@ + static inline void __might_sleep(const char *file, int line, + int preempt_offset) { } + # define might_sleep() do { might_resched(); } while (0) ++# define might_sleep_no_state_check() do { might_resched(); } while (0) + # define cant_sleep() do { } while (0) ++# define cant_migrate() do { } while (0) + # define sched_annotate_sleep() do { } while (0) + # define non_block_start() do { } while (0) + # define non_block_end() do { } while (0) +@@ -258,13 +278,6 @@ + + #define might_sleep_if(cond) do { if (cond) might_sleep(); } while (0) + +-#ifndef CONFIG_PREEMPT_RT +-# define cant_migrate() cant_sleep() +-#else +- /* Placeholder for now */ +-# define cant_migrate() do { } while (0) +-#endif +- + /** + * abs - return absolute value of an argument + * @x: the value. If it is unsigned type, it is converted to signed type first. +@@ -327,148 +340,6 @@ void do_exit(long error_code) __noreturn; void complete_and_exit(struct completion *, long) __noreturn; @@ -461027,9 +469680,105 @@ diff -Naur --no-dereference a/include/linux/kernel.h b/include/linux/kernel.h extern int num_to_str(char *buf, int size, unsigned long long num, unsigned int width); +diff -Naur --no-dereference a/include/linux/kmsg_dump.h b/include/linux/kmsg_dump.h +--- a/include/linux/kmsg_dump.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/kmsg_dump.h 2024-11-24 20:19:38.226228922 -0500 +@@ -30,6 +30,18 @@ + }; + + /** ++ * struct kmsg_dumper_iter - iterator for kernel crash message dumper ++ * @active: Flag that specifies if this is currently dumping ++ * @cur_seq: Points to the oldest message to dump (private) ++ * @next_seq: Points after the newest message to dump (private) ++ */ ++struct kmsg_dumper_iter { ++ bool active; ++ u64 cur_seq; ++ u64 next_seq; ++}; ++ ++/** + * struct kmsg_dumper - kernel crash message dumper structure + * @list: Entry in the dumper list (private) + * @dump: Call into dumping code which will retrieve the data with +@@ -39,33 +51,22 @@ + */ + struct kmsg_dumper { + struct list_head list; +- void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason); ++ void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason, ++ struct kmsg_dumper_iter *iter); + enum kmsg_dump_reason max_reason; +- bool active; + bool registered; +- +- /* private state of the kmsg iterator */ +- u32 cur_idx; +- u32 next_idx; +- u64 cur_seq; +- u64 next_seq; + }; + + #ifdef CONFIG_PRINTK + void kmsg_dump(enum kmsg_dump_reason reason); + +-bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog, +- char *line, size_t size, size_t *len); +- +-bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog, ++bool kmsg_dump_get_line(struct kmsg_dumper_iter *iter, bool syslog, + char *line, size_t size, size_t *len); + +-bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog, +- char *buf, size_t size, size_t *len); +- +-void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper); ++bool kmsg_dump_get_buffer(struct kmsg_dumper_iter *iter, bool syslog, ++ char *buf, size_t size, size_t *len_out); + +-void kmsg_dump_rewind(struct kmsg_dumper *dumper); ++void kmsg_dump_rewind(struct kmsg_dumper_iter *iter); + + int kmsg_dump_register(struct kmsg_dumper *dumper); + +@@ -77,30 +78,19 @@ + { + } + +-static inline bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, +- bool syslog, const char *line, +- size_t size, size_t *len) +-{ +- return false; +-} +- +-static inline bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog, ++static inline bool kmsg_dump_get_line(struct kmsg_dumper_iter *iter, bool syslog, + const char *line, size_t size, size_t *len) + { + return false; + } + +-static inline bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog, ++static inline bool kmsg_dump_get_buffer(struct kmsg_dumper_iter *iter, bool syslog, + char *buf, size_t size, size_t *len) + { + return false; + } + +-static inline void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper) +-{ +-} +- +-static inline void kmsg_dump_rewind(struct kmsg_dumper *dumper) ++static inline void kmsg_dump_rewind(struct kmsg_dumper_iter *iter) + { + } + diff -Naur --no-dereference a/include/linux/kstrtox.h b/include/linux/kstrtox.h --- a/include/linux/kstrtox.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/linux/kstrtox.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/kstrtox.h 2024-11-24 20:19:38.226228922 -0500 @@ -0,0 +1,155 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_KSTRTOX_H @@ -461188,7 +469937,7 @@ diff -Naur --no-dereference a/include/linux/kstrtox.h b/include/linux/kstrtox.h +#endif /* _LINUX_KSTRTOX_H */ diff -Naur --no-dereference a/include/linux/linux_logo.h b/include/linux/linux_logo.h --- a/include/linux/linux_logo.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/linux_logo.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/linux_logo.h 2024-11-24 20:19:38.228228926 -0500 @@ -45,6 +45,7 @@ extern const struct linux_logo logo_superh_vga16; extern const struct linux_logo logo_superh_clut224; @@ -461197,9 +469946,170 @@ diff -Naur --no-dereference a/include/linux/linux_logo.h b/include/linux/linux_l extern const struct linux_logo *fb_find_logo(int depth); #ifdef CONFIG_FB_LOGO_EXTRA +diff -Naur --no-dereference a/include/linux/local_lock_internal.h b/include/linux/local_lock_internal.h +--- a/include/linux/local_lock_internal.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/local_lock_internal.h 2024-11-24 20:19:38.228228926 -0500 +@@ -7,13 +7,39 @@ + #include + + typedef struct { +-#ifdef CONFIG_DEBUG_LOCK_ALLOC ++#ifdef CONFIG_PREEMPT_RT ++ spinlock_t lock; ++ struct task_struct *owner; ++ int nestcnt; ++ ++#elif defined(CONFIG_DEBUG_LOCK_ALLOC) + struct lockdep_map dep_map; + struct task_struct *owner; + #endif + } local_lock_t; + +-#ifdef CONFIG_DEBUG_LOCK_ALLOC ++#ifdef CONFIG_PREEMPT_RT ++ ++#define INIT_LOCAL_LOCK(lockname) { \ ++ __SPIN_LOCK_UNLOCKED((lockname).lock), \ ++ .owner = NULL, \ ++ .nestcnt = 0, \ ++ } ++ ++static inline void ___local_lock_init(local_lock_t *l) ++{ ++ l->owner = NULL; ++ l->nestcnt = 0; ++} ++ ++#define __local_lock_init(l) \ ++do { \ ++ spin_lock_init(&(l)->lock); \ ++ ___local_lock_init(l); \ ++} while (0) ++ ++#elif defined(CONFIG_DEBUG_LOCK_ALLOC) ++ + # define LOCAL_LOCK_DEBUG_INIT(lockname) \ + .dep_map = { \ + .name = #lockname, \ +@@ -21,9 +47,35 @@ + .lock_type = LD_LOCK_PERCPU, \ + }, \ + .owner = NULL, ++#endif ++ ++#ifdef CONFIG_PREEMPT_RT + + static inline void local_lock_acquire(local_lock_t *l) + { ++ if (l->owner != current) { ++ spin_lock(&l->lock); ++ DEBUG_LOCKS_WARN_ON(l->owner); ++ DEBUG_LOCKS_WARN_ON(l->nestcnt); ++ l->owner = current; ++ } ++ l->nestcnt++; ++} ++ ++static inline void local_lock_release(local_lock_t *l) ++{ ++ DEBUG_LOCKS_WARN_ON(l->nestcnt == 0); ++ DEBUG_LOCKS_WARN_ON(l->owner != current); ++ if (--l->nestcnt) ++ return; ++ ++ l->owner = NULL; ++ spin_unlock(&l->lock); ++} ++ ++#elif defined(CONFIG_DEBUG_LOCK_ALLOC) ++static inline void local_lock_acquire(local_lock_t *l) ++{ + lock_map_acquire(&l->dep_map); + DEBUG_LOCKS_WARN_ON(l->owner); + l->owner = current; +@@ -47,6 +99,47 @@ + static inline void local_lock_debug_init(local_lock_t *l) { } + #endif /* !CONFIG_DEBUG_LOCK_ALLOC */ + ++#ifdef CONFIG_PREEMPT_RT ++ ++#define __local_lock(lock) \ ++ do { \ ++ migrate_disable(); \ ++ local_lock_acquire(this_cpu_ptr(lock)); \ ++ } while (0) ++ ++#define __local_unlock(lock) \ ++ do { \ ++ local_lock_release(this_cpu_ptr(lock)); \ ++ migrate_enable(); \ ++ } while (0) ++ ++#define __local_lock_irq(lock) \ ++ do { \ ++ migrate_disable(); \ ++ local_lock_acquire(this_cpu_ptr(lock)); \ ++ } while (0) ++ ++#define __local_lock_irqsave(lock, flags) \ ++ do { \ ++ migrate_disable(); \ ++ flags = 0; \ ++ local_lock_acquire(this_cpu_ptr(lock)); \ ++ } while (0) ++ ++#define __local_unlock_irq(lock) \ ++ do { \ ++ local_lock_release(this_cpu_ptr(lock)); \ ++ migrate_enable(); \ ++ } while (0) ++ ++#define __local_unlock_irqrestore(lock, flags) \ ++ do { \ ++ local_lock_release(this_cpu_ptr(lock)); \ ++ migrate_enable(); \ ++ } while (0) ++ ++#else ++ + #define INIT_LOCAL_LOCK(lockname) { LOCAL_LOCK_DEBUG_INIT(lockname) } + + #define __local_lock_init(lock) \ +@@ -66,6 +159,12 @@ + local_lock_acquire(this_cpu_ptr(lock)); \ + } while (0) + ++#define __local_unlock(lock) \ ++ do { \ ++ local_lock_release(this_cpu_ptr(lock)); \ ++ preempt_enable(); \ ++ } while (0) ++ + #define __local_lock_irq(lock) \ + do { \ + local_irq_disable(); \ +@@ -78,12 +177,6 @@ + local_lock_acquire(this_cpu_ptr(lock)); \ + } while (0) + +-#define __local_unlock(lock) \ +- do { \ +- local_lock_release(this_cpu_ptr(lock)); \ +- preempt_enable(); \ +- } while (0) +- + #define __local_unlock_irq(lock) \ + do { \ + local_lock_release(this_cpu_ptr(lock)); \ +@@ -95,3 +188,5 @@ + local_lock_release(this_cpu_ptr(lock)); \ + local_irq_restore(flags); \ + } while (0) ++ ++#endif diff -Naur --no-dereference a/include/linux/lockdep.h b/include/linux/lockdep.h --- a/include/linux/lockdep.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/lockdep.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/lockdep.h 2024-11-24 20:19:38.228228926 -0500 @@ -252,6 +252,8 @@ return lock->key == key; } @@ -461219,7 +470129,7 @@ diff -Naur --no-dereference a/include/linux/lockdep.h b/include/linux/lockdep.h #define lockdep_assert_held(l) do { (void)(l); } while (0) diff -Naur --no-dereference a/include/linux/mdio-bitbang.h b/include/linux/mdio-bitbang.h --- a/include/linux/mdio-bitbang.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/mdio-bitbang.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mdio-bitbang.h 2024-11-24 20:19:38.228228926 -0500 @@ -35,6 +35,9 @@ const struct mdiobb_ops *ops; }; @@ -461232,7 +470142,7 @@ diff -Naur --no-dereference a/include/linux/mdio-bitbang.h b/include/linux/mdio- diff -Naur --no-dereference a/include/linux/mfd/stm32-lptimer.h b/include/linux/mfd/stm32-lptimer.h --- a/include/linux/mfd/stm32-lptimer.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/mfd/stm32-lptimer.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mfd/stm32-lptimer.h 2024-11-24 20:19:38.228228926 -0500 @@ -45,6 +45,11 @@ #define STM32_LPTIM_PRESC GENMASK(11, 9) #define STM32_LPTIM_CKPOL GENMASK(2, 1) @@ -461247,7 +470157,7 @@ diff -Naur --no-dereference a/include/linux/mfd/stm32-lptimer.h b/include/linux/ diff -Naur --no-dereference a/include/linux/mfd/stm32-timers.h b/include/linux/mfd/stm32-timers.h --- a/include/linux/mfd/stm32-timers.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/mfd/stm32-timers.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mfd/stm32-timers.h 2024-11-24 20:19:38.228228926 -0500 @@ -82,6 +82,10 @@ #define MAX_TIM_ICPSC 0x3 #define TIM_CR2_MMS_SHIFT 4 @@ -461261,7 +470171,7 @@ diff -Naur --no-dereference a/include/linux/mfd/stm32-timers.h b/include/linux/m #define TIM_BDTR_BKF_SHIFT(x) (16 + (x) * 4) diff -Naur --no-dereference a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h --- a/include/linux/mfd/tps65219.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/linux/mfd/tps65219.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mfd/tps65219.h 2024-11-24 20:19:38.229228928 -0500 @@ -0,0 +1,364 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -461629,7 +470539,7 @@ diff -Naur --no-dereference a/include/linux/mfd/tps65219.h b/include/linux/mfd/t +#endif /* __LINUX_MFD_TPS65219_H */ diff -Naur --no-dereference a/include/linux/mfd/tps6594x.h b/include/linux/mfd/tps6594x.h --- a/include/linux/mfd/tps6594x.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/linux/mfd/tps6594x.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mfd/tps6594x.h 2024-11-24 20:19:38.229228928 -0500 @@ -0,0 +1,90 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* @@ -461723,7 +470633,7 @@ diff -Naur --no-dereference a/include/linux/mfd/tps6594x.h b/include/linux/mfd/t +#endif /* __MFD_TPS6594X_H */ diff -Naur --no-dereference a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h --- a/include/linux/mmc/sdio_ids.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/mmc/sdio_ids.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mmc/sdio_ids.h 2024-11-24 20:19:38.229228928 -0500 @@ -63,9 +63,10 @@ #define SDIO_DEVICE_ID_BROADCOM_4339 0x4339 #define SDIO_DEVICE_ID_BROADCOM_4345 0x4345 @@ -461752,7 +470662,7 @@ diff -Naur --no-dereference a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/s #define SDIO_DEVICE_ID_MARVELL_8688_WLAN 0x9104 diff -Naur --no-dereference a/include/linux/mm.h b/include/linux/mm.h --- a/include/linux/mm.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/mm.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mm.h 2024-11-24 20:19:38.229228928 -0500 @@ -1732,6 +1732,43 @@ unmap_mapping_range(mapping, holebegin, holelen, 0); } @@ -461799,8 +470709,16 @@ diff -Naur --no-dereference a/include/linux/mm.h b/include/linux/mm.h extern int access_remote_vm(struct mm_struct *mm, unsigned long addr, diff -Naur --no-dereference a/include/linux/mm_types.h b/include/linux/mm_types.h --- a/include/linux/mm_types.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/mm_types.h 2024-08-28 19:44:05.664038247 -0400 -@@ -282,6 +282,9 @@ ++++ b/include/linux/mm_types.h 2024-11-24 20:19:38.229228928 -0500 +@@ -12,6 +12,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -282,6 +283,9 @@ unsigned long vm_top; /* region allocated to here */ unsigned long vm_pgoff; /* the offset in vm_file corresponding to vm_start */ struct file *vm_file; /* the backing file or NULL */ @@ -461810,7 +470728,7 @@ diff -Naur --no-dereference a/include/linux/mm_types.h b/include/linux/mm_types. int vm_usage; /* region usage count (access under nommu_region_sem) */ bool vm_icache_flushed : 1; /* true if the icache has been flushed for -@@ -361,6 +364,9 @@ +@@ -361,6 +365,9 @@ unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE units */ struct file * vm_file; /* File we map to (can be NULL). */ @@ -461820,9 +470738,19 @@ diff -Naur --no-dereference a/include/linux/mm_types.h b/include/linux/mm_types. void * vm_private_data; /* was vm_pte (shared mem) */ #ifdef CONFIG_SWAP +@@ -570,6 +577,9 @@ + bool tlb_flush_batched; + #endif + struct uprobes_state uprobes_state; ++#ifdef CONFIG_PREEMPT_RT ++ struct rcu_head delayed_drop; ++#endif + #ifdef CONFIG_HUGETLB_PAGE + atomic_long_t hugetlb_usage; + #endif diff -Naur --no-dereference a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h --- a/include/linux/mnt_namespace.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/mnt_namespace.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mnt_namespace.h 2024-11-24 20:19:38.229228928 -0500 @@ -7,12 +7,15 @@ struct fs_struct; struct user_namespace; @@ -461841,7 +470769,7 @@ diff -Naur --no-dereference a/include/linux/mnt_namespace.h b/include/linux/mnt_ extern const struct file_operations proc_mountstats_operations; diff -Naur --no-dereference a/include/linux/mtd/spinand.h b/include/linux/mtd/spinand.h --- a/include/linux/mtd/spinand.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/mtd/spinand.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mtd/spinand.h 2024-11-24 20:19:38.229228928 -0500 @@ -26,12 +26,24 @@ SPI_MEM_OP_NO_DUMMY, \ SPI_MEM_OP_NO_DATA) @@ -462190,7 +471118,7 @@ diff -Naur --no-dereference a/include/linux/mtd/spinand.h b/include/linux/mtd/sp #endif /* __LINUX_MTD_SPINAND_H */ diff -Naur --no-dereference a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h --- a/include/linux/mtd/spi-nor.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/mtd/spi-nor.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mtd/spi-nor.h 2024-11-24 20:19:38.229228928 -0500 @@ -51,6 +51,8 @@ #define SPINOR_OP_CLFSR 0x50 /* Clear flag status register */ #define SPINOR_OP_RDEAR 0xc8 /* Read Extended Address Register */ @@ -462317,9 +471245,206 @@ diff -Naur --no-dereference a/include/linux/mtd/spi-nor.h b/include/linux/mtd/sp const struct spi_nor_controller_ops *controller_ops; +diff -Naur --no-dereference a/include/linux/mutex.h b/include/linux/mutex.h +--- a/include/linux/mutex.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/mutex.h 2024-11-24 20:19:38.229228928 -0500 +@@ -22,6 +22,20 @@ + + struct ww_acquire_ctx; + ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++# define __DEP_MAP_MUTEX_INITIALIZER(lockname) \ ++ , .dep_map = { \ ++ .name = #lockname, \ ++ .wait_type_inner = LD_WAIT_SLEEP, \ ++ } ++#else ++# define __DEP_MAP_MUTEX_INITIALIZER(lockname) ++#endif ++ ++#ifdef CONFIG_PREEMPT_RT ++# include ++#else ++ + /* + * Simple, straightforward mutexes with strict semantics: + * +@@ -68,14 +82,6 @@ + struct ww_class; + struct ww_acquire_ctx; + +-struct ww_mutex { +- struct mutex base; +- struct ww_acquire_ctx *ctx; +-#ifdef CONFIG_DEBUG_MUTEXES +- struct ww_class *ww_class; +-#endif +-}; +- + /* + * This is the control structure for tasks blocked on mutex, + * which resides on the blocked task's kernel stack: +@@ -119,16 +125,6 @@ + __mutex_init((mutex), #mutex, &__key); \ + } while (0) + +-#ifdef CONFIG_DEBUG_LOCK_ALLOC +-# define __DEP_MAP_MUTEX_INITIALIZER(lockname) \ +- , .dep_map = { \ +- .name = #lockname, \ +- .wait_type_inner = LD_WAIT_SLEEP, \ +- } +-#else +-# define __DEP_MAP_MUTEX_INITIALIZER(lockname) +-#endif +- + #define __MUTEX_INITIALIZER(lockname) \ + { .owner = ATOMIC_LONG_INIT(0) \ + , .wait_lock = __SPIN_LOCK_UNLOCKED(lockname.wait_lock) \ +@@ -224,4 +220,6 @@ + extern /* __deprecated */ __must_check enum mutex_trylock_recursive_enum + mutex_trylock_recursive(struct mutex *lock); + ++#endif /* !PREEMPT_RT */ ++ + #endif /* __LINUX_MUTEX_H */ +diff -Naur --no-dereference a/include/linux/mutex_rt.h b/include/linux/mutex_rt.h +--- a/include/linux/mutex_rt.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/linux/mutex_rt.h 2024-11-24 20:19:38.229228928 -0500 +@@ -0,0 +1,130 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++#ifndef __LINUX_MUTEX_RT_H ++#define __LINUX_MUTEX_RT_H ++ ++#ifndef __LINUX_MUTEX_H ++#error "Please include mutex.h" ++#endif ++ ++#include ++ ++/* FIXME: Just for __lockfunc */ ++#include ++ ++struct mutex { ++ struct rt_mutex lock; ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++ struct lockdep_map dep_map; ++#endif ++}; ++ ++#define __MUTEX_INITIALIZER(mutexname) \ ++ { \ ++ .lock = __RT_MUTEX_INITIALIZER(mutexname.lock) \ ++ __DEP_MAP_MUTEX_INITIALIZER(mutexname) \ ++ } ++ ++#define DEFINE_MUTEX(mutexname) \ ++ struct mutex mutexname = __MUTEX_INITIALIZER(mutexname) ++ ++extern void __mutex_do_init(struct mutex *lock, const char *name, struct lock_class_key *key); ++extern void __lockfunc _mutex_lock(struct mutex *lock); ++extern void __lockfunc _mutex_lock_io_nested(struct mutex *lock, int subclass); ++extern int __lockfunc _mutex_lock_interruptible(struct mutex *lock); ++extern int __lockfunc _mutex_lock_killable(struct mutex *lock); ++extern void __lockfunc _mutex_lock_nested(struct mutex *lock, int subclass); ++extern void __lockfunc _mutex_lock_nest_lock(struct mutex *lock, struct lockdep_map *nest_lock); ++extern int __lockfunc _mutex_lock_interruptible_nested(struct mutex *lock, int subclass); ++extern int __lockfunc _mutex_lock_killable_nested(struct mutex *lock, int subclass); ++extern int __lockfunc _mutex_trylock(struct mutex *lock); ++extern void __lockfunc _mutex_unlock(struct mutex *lock); ++ ++#define mutex_is_locked(l) rt_mutex_is_locked(&(l)->lock) ++#define mutex_lock(l) _mutex_lock(l) ++#define mutex_lock_interruptible(l) _mutex_lock_interruptible(l) ++#define mutex_lock_killable(l) _mutex_lock_killable(l) ++#define mutex_trylock(l) _mutex_trylock(l) ++#define mutex_unlock(l) _mutex_unlock(l) ++#define mutex_lock_io(l) _mutex_lock_io_nested(l, 0); ++ ++#define __mutex_owner(l) ((l)->lock.owner) ++ ++#ifdef CONFIG_DEBUG_MUTEXES ++#define mutex_destroy(l) rt_mutex_destroy(&(l)->lock) ++#else ++static inline void mutex_destroy(struct mutex *lock) {} ++#endif ++ ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++# define mutex_lock_nested(l, s) _mutex_lock_nested(l, s) ++# define mutex_lock_interruptible_nested(l, s) \ ++ _mutex_lock_interruptible_nested(l, s) ++# define mutex_lock_killable_nested(l, s) \ ++ _mutex_lock_killable_nested(l, s) ++# define mutex_lock_io_nested(l, s) _mutex_lock_io_nested(l, s) ++ ++# define mutex_lock_nest_lock(lock, nest_lock) \ ++do { \ ++ typecheck(struct lockdep_map *, &(nest_lock)->dep_map); \ ++ _mutex_lock_nest_lock(lock, &(nest_lock)->dep_map); \ ++} while (0) ++ ++#else ++# define mutex_lock_nested(l, s) _mutex_lock(l) ++# define mutex_lock_interruptible_nested(l, s) \ ++ _mutex_lock_interruptible(l) ++# define mutex_lock_killable_nested(l, s) \ ++ _mutex_lock_killable(l) ++# define mutex_lock_nest_lock(lock, nest_lock) mutex_lock(lock) ++# define mutex_lock_io_nested(l, s) _mutex_lock_io_nested(l, s) ++#endif ++ ++# define mutex_init(mutex) \ ++do { \ ++ static struct lock_class_key __key; \ ++ \ ++ rt_mutex_init(&(mutex)->lock); \ ++ __mutex_do_init((mutex), #mutex, &__key); \ ++} while (0) ++ ++# define __mutex_init(mutex, name, key) \ ++do { \ ++ rt_mutex_init(&(mutex)->lock); \ ++ __mutex_do_init((mutex), name, key); \ ++} while (0) ++ ++/** ++ * These values are chosen such that FAIL and SUCCESS match the ++ * values of the regular mutex_trylock(). ++ */ ++enum mutex_trylock_recursive_enum { ++ MUTEX_TRYLOCK_FAILED = 0, ++ MUTEX_TRYLOCK_SUCCESS = 1, ++ MUTEX_TRYLOCK_RECURSIVE, ++}; ++/** ++ * mutex_trylock_recursive - trylock variant that allows recursive locking ++ * @lock: mutex to be locked ++ * ++ * This function should not be used, _ever_. It is purely for hysterical GEM ++ * raisins, and once those are gone this will be removed. ++ * ++ * Returns: ++ * MUTEX_TRYLOCK_FAILED - trylock failed, ++ * MUTEX_TRYLOCK_SUCCESS - lock acquired, ++ * MUTEX_TRYLOCK_RECURSIVE - we already owned the lock. ++ */ ++int __rt_mutex_owner_current(struct rt_mutex *lock); ++ ++static inline /* __deprecated */ __must_check enum mutex_trylock_recursive_enum ++mutex_trylock_recursive(struct mutex *lock) ++{ ++ if (unlikely(__rt_mutex_owner_current(&lock->lock))) ++ return MUTEX_TRYLOCK_RECURSIVE; ++ ++ return mutex_trylock(lock); ++} ++ ++extern int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock); ++ ++#endif diff -Naur --no-dereference a/include/linux/mux/consumer.h b/include/linux/mux/consumer.h --- a/include/linux/mux/consumer.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/mux/consumer.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mux/consumer.h 2024-11-24 20:19:38.229228928 -0500 @@ -14,18 +14,52 @@ struct device; @@ -462379,7 +471504,7 @@ diff -Naur --no-dereference a/include/linux/mux/consumer.h b/include/linux/mux/c #endif /* _LINUX_MUX_CONSUMER_H */ diff -Naur --no-dereference a/include/linux/mux/driver.h b/include/linux/mux/driver.h --- a/include/linux/mux/driver.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/mux/driver.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/mux/driver.h 2024-11-24 20:19:38.230228929 -0500 @@ -12,6 +12,7 @@ #include @@ -462407,7 +471532,7 @@ diff -Naur --no-dereference a/include/linux/mux/driver.h b/include/linux/mux/dri /** diff -Naur --no-dereference a/include/linux/netdev_features.h b/include/linux/netdev_features.h --- a/include/linux/netdev_features.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/netdev_features.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/netdev_features.h 2024-11-24 20:19:38.230228929 -0500 @@ -85,6 +85,11 @@ NETIF_F_HW_MACSEC_BIT, /* Offload MACsec operations */ @@ -462433,7 +471558,7 @@ diff -Naur --no-dereference a/include/linux/netdev_features.h b/include/linux/ne */ diff -Naur --no-dereference a/include/linux/netdevice.h b/include/linux/netdevice.h --- a/include/linux/netdevice.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/netdevice.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/netdevice.h 2024-11-24 20:19:38.230228929 -0500 @@ -1943,6 +1943,9 @@ #endif const struct net_device_ops *netdev_ops; @@ -462444,9 +471569,51 @@ diff -Naur --no-dereference a/include/linux/netdevice.h b/include/linux/netdevic #ifdef CONFIG_NET_L3_MASTER_DEV const struct l3mdev_ops *l3mdev_ops; #endif +diff -Naur --no-dereference a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h +--- a/include/linux/nfs_xdr.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/nfs_xdr.h 2024-11-24 20:19:38.230228929 -0500 +@@ -1675,7 +1675,7 @@ + struct nfs_removeargs args; + struct nfs_removeres res; + struct dentry *dentry; +- wait_queue_head_t wq; ++ struct swait_queue_head wq; + const struct cred *cred; + struct nfs_fattr dir_attr; + long timeout; +diff -Naur --no-dereference a/include/linux/notifier.h b/include/linux/notifier.h +--- a/include/linux/notifier.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/notifier.h 2024-11-24 20:19:38.230228929 -0500 +@@ -58,7 +58,7 @@ + }; + + struct atomic_notifier_head { +- spinlock_t lock; ++ raw_spinlock_t lock; + struct notifier_block __rcu *head; + }; + +@@ -78,7 +78,7 @@ + }; + + #define ATOMIC_INIT_NOTIFIER_HEAD(name) do { \ +- spin_lock_init(&(name)->lock); \ ++ raw_spin_lock_init(&(name)->lock); \ + (name)->head = NULL; \ + } while (0) + #define BLOCKING_INIT_NOTIFIER_HEAD(name) do { \ +@@ -95,7 +95,7 @@ + cleanup_srcu_struct(&(name)->srcu); + + #define ATOMIC_NOTIFIER_INIT(name) { \ +- .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ ++ .lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ + .head = NULL } + #define BLOCKING_NOTIFIER_INIT(name) { \ + .rwsem = __RWSEM_INITIALIZER((name).rwsem), \ diff -Naur --no-dereference a/include/linux/pci-epc.h b/include/linux/pci-epc.h --- a/include/linux/pci-epc.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/pci-epc.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/pci-epc.h 2024-11-24 20:19:38.230228929 -0500 @@ -13,6 +13,12 @@ struct pci_epc; @@ -462603,7 +471770,7 @@ diff -Naur --no-dereference a/include/linux/pci-epc.h b/include/linux/pci-epc.h enum pci_barno pci_epc_get_next_free_bar(const struct pci_epc_features diff -Naur --no-dereference a/include/linux/pci-epf.h b/include/linux/pci-epf.h --- a/include/linux/pci-epf.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/pci-epf.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/pci-epf.h 2024-11-24 20:19:38.230228929 -0500 @@ -9,11 +9,13 @@ #ifndef __LINUX_PCI_EPF_H #define __LINUX_PCI_EPF_H @@ -462711,7 +471878,7 @@ diff -Naur --no-dereference a/include/linux/pci-epf.h b/include/linux/pci-epf.h #endif /* __LINUX_PCI_EPF_H */ diff -Naur --no-dereference a/include/linux/pci_ids.h b/include/linux/pci_ids.h --- a/include/linux/pci_ids.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/pci_ids.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/pci_ids.h 2024-11-24 20:19:38.230228929 -0500 @@ -883,6 +883,7 @@ #define PCI_DEVICE_ID_TI_X620 0xac8d #define PCI_DEVICE_ID_TI_X420 0xac8e @@ -462722,7 +471889,7 @@ diff -Naur --no-dereference a/include/linux/pci_ids.h b/include/linux/pci_ids.h diff -Naur --no-dereference a/include/linux/phy/phy.h b/include/linux/phy/phy.h --- a/include/linux/phy/phy.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/phy/phy.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/phy/phy.h 2024-11-24 20:19:38.231228931 -0500 @@ -115,7 +115,7 @@ /** * struct phy_attrs - represents phy attributes @@ -462734,7 +471901,7 @@ diff -Naur --no-dereference a/include/linux/phy/phy.h b/include/linux/phy/phy.h struct phy_attrs { diff -Naur --no-dereference a/include/linux/phy/phy-mipi-dphy.h b/include/linux/phy/phy-mipi-dphy.h --- a/include/linux/phy/phy-mipi-dphy.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/phy/phy-mipi-dphy.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/phy/phy-mipi-dphy.h 2024-11-24 20:19:38.231228931 -0500 @@ -7,6 +7,19 @@ #define __PHY_MIPI_DPHY_H_ @@ -462757,7 +471924,7 @@ diff -Naur --no-dereference a/include/linux/phy/phy-mipi-dphy.h b/include/linux/ * This structure is used to represent the configuration state of a diff -Naur --no-dereference a/include/linux/phy.h b/include/linux/phy.h --- a/include/linux/phy.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/phy.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/phy.h 2024-11-24 20:19:38.230228929 -0500 @@ -93,22 +93,26 @@ * @PHY_INTERFACE_MODE_TBI: Ten Bit Interface * @PHY_INTERFACE_MODE_REVMII: Reverse Media Independent Interface @@ -462927,7 +472094,7 @@ diff -Naur --no-dereference a/include/linux/phy.h b/include/linux/phy.h { diff -Naur --no-dereference a/include/linux/phylink.h b/include/linux/phylink.h --- a/include/linux/phylink.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/phylink.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/phylink.h 2024-11-24 20:19:38.231228931 -0500 @@ -20,6 +20,29 @@ MLO_AN_PHY = 0, /* Conventional PHY */ MLO_AN_FIXED, /* Fixed-link mode */ @@ -463010,9 +472177,373 @@ diff -Naur --no-dereference a/include/linux/phylink.h b/include/linux/phylink.h void phylink_ethtool_get_wol(struct phylink *, struct ethtool_wolinfo *); int phylink_ethtool_set_wol(struct phylink *, struct ethtool_wolinfo *); +diff -Naur --no-dereference a/include/linux/pid.h b/include/linux/pid.h +--- a/include/linux/pid.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/pid.h 2024-11-24 20:19:38.231228931 -0500 +@@ -3,6 +3,7 @@ + #define _LINUX_PID_H + + #include ++#include + #include + #include + +diff -Naur --no-dereference a/include/linux/preempt.h b/include/linux/preempt.h +--- a/include/linux/preempt.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/preempt.h 2024-11-24 20:19:38.231228931 -0500 +@@ -77,31 +77,37 @@ + /* preempt_count() and related functions, depends on PREEMPT_NEED_RESCHED */ + #include + ++#define nmi_count() (preempt_count() & NMI_MASK) + #define hardirq_count() (preempt_count() & HARDIRQ_MASK) +-#define softirq_count() (preempt_count() & SOFTIRQ_MASK) +-#define irq_count() (preempt_count() & (HARDIRQ_MASK | SOFTIRQ_MASK \ +- | NMI_MASK)) ++#ifdef CONFIG_PREEMPT_RT ++# define softirq_count() (current->softirq_disable_cnt & SOFTIRQ_MASK) ++#else ++# define softirq_count() (preempt_count() & SOFTIRQ_MASK) ++#endif ++#define irq_count() (nmi_count() | hardirq_count() | softirq_count()) + + /* +- * Are we doing bottom half or hardware interrupt processing? ++ * Macros to retrieve the current execution context: + * +- * in_irq() - We're in (hard) IRQ context ++ * in_nmi() - We're in NMI context ++ * in_hardirq() - We're in hard IRQ context ++ * in_serving_softirq() - We're in softirq context ++ * in_task() - We're in task context ++ */ ++#define in_nmi() (nmi_count()) ++#define in_hardirq() (hardirq_count()) ++#define in_serving_softirq() (softirq_count() & SOFTIRQ_OFFSET) ++#define in_task() (!(in_nmi() | in_hardirq() | in_serving_softirq())) ++ ++/* ++ * The following macros are deprecated and should not be used in new code: ++ * in_irq() - Obsolete version of in_hardirq() + * in_softirq() - We have BH disabled, or are processing softirqs + * in_interrupt() - We're in NMI,IRQ,SoftIRQ context or have BH disabled +- * in_serving_softirq() - We're in softirq context +- * in_nmi() - We're in NMI context +- * in_task() - We're in task context +- * +- * Note: due to the BH disabled confusion: in_softirq(),in_interrupt() really +- * should not be used in new code. + */ + #define in_irq() (hardirq_count()) + #define in_softirq() (softirq_count()) + #define in_interrupt() (irq_count()) +-#define in_serving_softirq() (softirq_count() & SOFTIRQ_OFFSET) +-#define in_nmi() (preempt_count() & NMI_MASK) +-#define in_task() (!(preempt_count() & \ +- (NMI_MASK | HARDIRQ_MASK | SOFTIRQ_OFFSET))) + + /* + * The preempt_count offset after preempt_disable(); +@@ -115,7 +121,11 @@ + /* + * The preempt_count offset after spin_lock() + */ ++#if !defined(CONFIG_PREEMPT_RT) + #define PREEMPT_LOCK_OFFSET PREEMPT_DISABLE_OFFSET ++#else ++#define PREEMPT_LOCK_OFFSET 0 ++#endif + + /* + * The preempt_count offset needed for things like: +@@ -164,6 +174,20 @@ + #define preempt_count_inc() preempt_count_add(1) + #define preempt_count_dec() preempt_count_sub(1) + ++#ifdef CONFIG_PREEMPT_LAZY ++#define add_preempt_lazy_count(val) do { preempt_lazy_count() += (val); } while (0) ++#define sub_preempt_lazy_count(val) do { preempt_lazy_count() -= (val); } while (0) ++#define inc_preempt_lazy_count() add_preempt_lazy_count(1) ++#define dec_preempt_lazy_count() sub_preempt_lazy_count(1) ++#define preempt_lazy_count() (current_thread_info()->preempt_lazy_count) ++#else ++#define add_preempt_lazy_count(val) do { } while (0) ++#define sub_preempt_lazy_count(val) do { } while (0) ++#define inc_preempt_lazy_count() do { } while (0) ++#define dec_preempt_lazy_count() do { } while (0) ++#define preempt_lazy_count() (0) ++#endif ++ + #ifdef CONFIG_PREEMPT_COUNT + + #define preempt_disable() \ +@@ -172,13 +196,25 @@ + barrier(); \ + } while (0) + ++#define preempt_lazy_disable() \ ++do { \ ++ inc_preempt_lazy_count(); \ ++ barrier(); \ ++} while (0) ++ + #define sched_preempt_enable_no_resched() \ + do { \ + barrier(); \ + preempt_count_dec(); \ + } while (0) + +-#define preempt_enable_no_resched() sched_preempt_enable_no_resched() ++#ifndef CONFIG_PREEMPT_RT ++# define preempt_enable_no_resched() sched_preempt_enable_no_resched() ++# define preempt_check_resched_rt() barrier(); ++#else ++# define preempt_enable_no_resched() preempt_enable() ++# define preempt_check_resched_rt() preempt_check_resched() ++#endif + + #define preemptible() (preempt_count() == 0 && !irqs_disabled()) + +@@ -203,6 +239,18 @@ + __preempt_schedule(); \ + } while (0) + ++/* ++ * open code preempt_check_resched() because it is not exported to modules and ++ * used by local_unlock() or bpf_enable_instrumentation(). ++ */ ++#define preempt_lazy_enable() \ ++do { \ ++ dec_preempt_lazy_count(); \ ++ barrier(); \ ++ if (should_resched(0)) \ ++ __preempt_schedule(); \ ++} while (0) ++ + #else /* !CONFIG_PREEMPTION */ + #define preempt_enable() \ + do { \ +@@ -210,6 +258,12 @@ + preempt_count_dec(); \ + } while (0) + ++#define preempt_lazy_enable() \ ++do { \ ++ dec_preempt_lazy_count(); \ ++ barrier(); \ ++} while (0) ++ + #define preempt_enable_notrace() \ + do { \ + barrier(); \ +@@ -248,8 +302,12 @@ + #define preempt_disable_notrace() barrier() + #define preempt_enable_no_resched_notrace() barrier() + #define preempt_enable_notrace() barrier() ++#define preempt_check_resched_rt() barrier() + #define preemptible() 0 + ++#define preempt_lazy_disable() barrier() ++#define preempt_lazy_enable() barrier() ++ + #endif /* CONFIG_PREEMPT_COUNT */ + + #ifdef MODULE +@@ -268,10 +326,22 @@ + } while (0) + #define preempt_fold_need_resched() \ + do { \ +- if (tif_need_resched()) \ ++ if (tif_need_resched_now()) \ + set_preempt_need_resched(); \ + } while (0) + ++#ifdef CONFIG_PREEMPT_RT ++# define preempt_disable_rt() preempt_disable() ++# define preempt_enable_rt() preempt_enable() ++# define preempt_disable_nort() barrier() ++# define preempt_enable_nort() barrier() ++#else ++# define preempt_disable_rt() barrier() ++# define preempt_enable_rt() barrier() ++# define preempt_disable_nort() preempt_disable() ++# define preempt_enable_nort() preempt_enable() ++#endif ++ + #ifdef CONFIG_PREEMPT_NOTIFIERS + + struct preempt_notifier; +@@ -322,34 +392,78 @@ + + #endif + +-/** +- * migrate_disable - Prevent migration of the current task ++#ifdef CONFIG_SMP ++ ++/* ++ * Migrate-Disable and why it is undesired. + * +- * Maps to preempt_disable() which also disables preemption. Use +- * migrate_disable() to annotate that the intent is to prevent migration, +- * but not necessarily preemption. ++ * When a preempted task becomes elegible to run under the ideal model (IOW it ++ * becomes one of the M highest priority tasks), it might still have to wait ++ * for the preemptee's migrate_disable() section to complete. Thereby suffering ++ * a reduction in bandwidth in the exact duration of the migrate_disable() ++ * section. + * +- * Can be invoked nested like preempt_disable() and needs the corresponding +- * number of migrate_enable() invocations. +- */ +-static __always_inline void migrate_disable(void) +-{ +- preempt_disable(); +-} +- +-/** +- * migrate_enable - Allow migration of the current task ++ * Per this argument, the change from preempt_disable() to migrate_disable() ++ * gets us: ++ * ++ * - a higher priority tasks gains reduced wake-up latency; with preempt_disable() ++ * it would have had to wait for the lower priority task. ++ * ++ * - a lower priority tasks; which under preempt_disable() could've instantly ++ * migrated away when another CPU becomes available, is now constrained ++ * by the ability to push the higher priority task away, which might itself be ++ * in a migrate_disable() section, reducing it's available bandwidth. ++ * ++ * IOW it trades latency / moves the interference term, but it stays in the ++ * system, and as long as it remains unbounded, the system is not fully ++ * deterministic. + * +- * Counterpart to migrate_disable(). + * +- * As migrate_disable() can be invoked nested, only the outermost invocation +- * reenables migration. ++ * The reason we have it anyway. ++ * ++ * PREEMPT_RT breaks a number of assumptions traditionally held. By forcing a ++ * number of primitives into becoming preemptible, they would also allow ++ * migration. This turns out to break a bunch of per-cpu usage. To this end, ++ * all these primitives employ migirate_disable() to restore this implicit ++ * assumption. ++ * ++ * This is a 'temporary' work-around at best. The correct solution is getting ++ * rid of the above assumptions and reworking the code to employ explicit ++ * per-cpu locking or short preempt-disable regions. ++ * ++ * The end goal must be to get rid of migrate_disable(), alternatively we need ++ * a schedulability theory that does not depend on abritrary migration. ++ * ++ * ++ * Notes on the implementation. ++ * ++ * The implementation is particularly tricky since existing code patterns ++ * dictate neither migrate_disable() nor migrate_enable() is allowed to block. ++ * This means that it cannot use cpus_read_lock() to serialize against hotplug, ++ * nor can it easily migrate itself into a pending affinity mask change on ++ * migrate_enable(). ++ * ++ * ++ * Note: even non-work-conserving schedulers like semi-partitioned depends on ++ * migration, so migrate_disable() is not only a problem for ++ * work-conserving schedulers. + * +- * Currently mapped to preempt_enable(). + */ +-static __always_inline void migrate_enable(void) ++extern void migrate_disable(void); ++extern void migrate_enable(void); ++ ++#else ++ ++static inline void migrate_disable(void) + { +- preempt_enable(); ++ preempt_lazy_disable(); + } + ++static inline void migrate_enable(void) ++{ ++ preempt_lazy_enable(); ++} ++ ++#endif /* CONFIG_SMP */ ++ + #endif /* __LINUX_PREEMPT_H */ +diff -Naur --no-dereference a/include/linux/printk.h b/include/linux/printk.h +--- a/include/linux/printk.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/printk.h 2024-11-24 20:19:38.231228931 -0500 +@@ -46,6 +46,12 @@ + + #define CONSOLE_EXT_LOG_MAX 8192 + ++/* ++ * The maximum size of a record formatted for console printing ++ * (i.e. with the prefix prepended to every line). ++ */ ++#define CONSOLE_LOG_MAX 4096 ++ + /* printk's without a loglevel use this.. */ + #define MESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT + +@@ -149,18 +155,6 @@ + void early_printk(const char *s, ...) { } + #endif + +-#ifdef CONFIG_PRINTK_NMI +-extern void printk_nmi_enter(void); +-extern void printk_nmi_exit(void); +-extern void printk_nmi_direct_enter(void); +-extern void printk_nmi_direct_exit(void); +-#else +-static inline void printk_nmi_enter(void) { } +-static inline void printk_nmi_exit(void) { } +-static inline void printk_nmi_direct_enter(void) { } +-static inline void printk_nmi_direct_exit(void) { } +-#endif /* PRINTK_NMI */ +- + struct dev_printk_info; + + #ifdef CONFIG_PRINTK +@@ -207,8 +201,6 @@ + void dump_stack_print_info(const char *log_lvl); + void show_regs_print_info(const char *log_lvl); + extern asmlinkage void dump_stack(void) __cold; +-extern void printk_safe_flush(void); +-extern void printk_safe_flush_on_panic(void); + #else + static inline __printf(1, 0) + int vprintk(const char *s, va_list args) +@@ -272,14 +264,6 @@ + static inline void dump_stack(void) + { + } +- +-static inline void printk_safe_flush(void) +-{ +-} +- +-static inline void printk_safe_flush_on_panic(void) +-{ +-} + #endif + + extern int kptr_restrict; +@@ -497,6 +481,8 @@ + no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) + #endif + ++bool pr_flush(int timeout_ms, bool reset_on_progress); ++ + /* + * ratelimited messages with local ratelimit_state, + * no local ratelimit_state used in the !PRINTK case diff -Naur --no-dereference a/include/linux/pruss_driver.h b/include/linux/pruss_driver.h --- a/include/linux/pruss_driver.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/pruss_driver.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/pruss_driver.h 2024-11-24 20:19:38.231228931 -0500 @@ -2,43 +2,25 @@ /* * PRU-ICSS sub-system specific definitions @@ -463119,7 +472650,7 @@ diff -Naur --no-dereference a/include/linux/pruss_driver.h b/include/linux/pruss #endif /* _PRUSS_DRIVER_H_ */ diff -Naur --no-dereference a/include/linux/pruss.h b/include/linux/pruss.h --- a/include/linux/pruss.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/linux/pruss.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/pruss.h 2024-11-24 20:19:38.231228931 -0500 @@ -0,0 +1,301 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/** @@ -463424,7 +472955,7 @@ diff -Naur --no-dereference a/include/linux/pruss.h b/include/linux/pruss.h +#endif /* __LINUX_PRUSS_H */ diff -Naur --no-dereference a/include/linux/ptp_classify.h b/include/linux/ptp_classify.h --- a/include/linux/ptp_classify.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/ptp_classify.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/ptp_classify.h 2024-11-24 20:19:38.231228931 -0500 @@ -31,6 +31,11 @@ #define PTP_CLASS_V2_VLAN (PTP_CLASS_V2 | PTP_CLASS_VLAN) #define PTP_CLASS_L4 (PTP_CLASS_IPV4 | PTP_CLASS_IPV6) @@ -463446,9 +472977,124 @@ diff -Naur --no-dereference a/include/linux/ptp_classify.h b/include/linux/ptp_c } #endif #endif /* _PTP_CLASSIFY_H_ */ +diff -Naur --no-dereference a/include/linux/rbtree.h b/include/linux/rbtree.h +--- a/include/linux/rbtree.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/rbtree.h 2024-11-24 20:19:38.231228931 -0500 +@@ -19,19 +19,9 @@ + + #include + #include ++#include + #include + +-struct rb_node { +- unsigned long __rb_parent_color; +- struct rb_node *rb_right; +- struct rb_node *rb_left; +-} __attribute__((aligned(sizeof(long)))); +- /* The alignment might seem pointless, but allegedly CRIS needs it */ +- +-struct rb_root { +- struct rb_node *rb_node; +-}; +- + #define rb_parent(r) ((struct rb_node *)((r)->__rb_parent_color & ~3)) + + #define RB_ROOT (struct rb_root) { NULL, } +@@ -112,21 +102,6 @@ + typeof(*pos), field); 1; }); \ + pos = n) + +-/* +- * Leftmost-cached rbtrees. +- * +- * We do not cache the rightmost node based on footprint +- * size vs number of potential users that could benefit +- * from O(1) rb_last(). Just not worth it, users that want +- * this feature can always implement the logic explicitly. +- * Furthermore, users that want to cache both pointers may +- * find it a bit asymmetric, but that's ok. +- */ +-struct rb_root_cached { +- struct rb_root rb_root; +- struct rb_node *rb_leftmost; +-}; +- + #define RB_ROOT_CACHED (struct rb_root_cached) { {NULL, }, NULL } + + /* Same as rb_first(), but O(1) */ +diff -Naur --no-dereference a/include/linux/rbtree_type.h b/include/linux/rbtree_type.h +--- a/include/linux/rbtree_type.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/linux/rbtree_type.h 2024-11-24 20:19:38.231228931 -0500 +@@ -0,0 +1,31 @@ ++/* SPDX-License-Identifier: GPL-2.0-or-later */ ++#ifndef _LINUX_RBTREE_TYPE_H ++#define _LINUX_RBTREE_TYPE_H ++ ++struct rb_node { ++ unsigned long __rb_parent_color; ++ struct rb_node *rb_right; ++ struct rb_node *rb_left; ++} __attribute__((aligned(sizeof(long)))); ++/* The alignment might seem pointless, but allegedly CRIS needs it */ ++ ++struct rb_root { ++ struct rb_node *rb_node; ++}; ++ ++/* ++ * Leftmost-cached rbtrees. ++ * ++ * We do not cache the rightmost node based on footprint ++ * size vs number of potential users that could benefit ++ * from O(1) rb_last(). Just not worth it, users that want ++ * this feature can always implement the logic explicitly. ++ * Furthermore, users that want to cache both pointers may ++ * find it a bit asymmetric, but that's ok. ++ */ ++struct rb_root_cached { ++ struct rb_root rb_root; ++ struct rb_node *rb_leftmost; ++}; ++ ++#endif +diff -Naur --no-dereference a/include/linux/rcupdate.h b/include/linux/rcupdate.h +--- a/include/linux/rcupdate.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/rcupdate.h 2024-11-24 20:19:38.231228931 -0500 +@@ -54,6 +54,11 @@ + * types of kernel builds, the rcu_read_lock() nesting depth is unknowable. + */ + #define rcu_preempt_depth() (current->rcu_read_lock_nesting) ++#ifndef CONFIG_PREEMPT_RT ++#define sched_rcu_preempt_depth() rcu_preempt_depth() ++#else ++static inline int sched_rcu_preempt_depth(void) { return 0; } ++#endif + + #else /* #ifdef CONFIG_PREEMPT_RCU */ + +@@ -79,6 +84,8 @@ + return 0; + } + ++#define sched_rcu_preempt_depth() rcu_preempt_depth() ++ + #endif /* #else #ifdef CONFIG_PREEMPT_RCU */ + + /* Internal to kernel */ +@@ -329,7 +336,8 @@ + #define rcu_sleep_check() \ + do { \ + rcu_preempt_sleep_check(); \ +- RCU_LOCKDEP_WARN(lock_is_held(&rcu_bh_lock_map), \ ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) \ ++ RCU_LOCKDEP_WARN(lock_is_held(&rcu_bh_lock_map), \ + "Illegal context switch in RCU-bh read-side critical section"); \ + RCU_LOCKDEP_WARN(lock_is_held(&rcu_sched_lock_map), \ + "Illegal context switch in RCU-sched read-side critical section"); \ diff -Naur --no-dereference a/include/linux/remoteproc.h b/include/linux/remoteproc.h --- a/include/linux/remoteproc.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/remoteproc.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/remoteproc.h 2024-11-24 20:19:38.234228937 -0500 @@ -361,6 +361,7 @@ * @start: power on the device and boot it * @stop: power off the device @@ -463590,7 +473236,7 @@ diff -Naur --no-dereference a/include/linux/remoteproc.h b/include/linux/remotep { diff -Naur --no-dereference a/include/linux/rpmsg.h b/include/linux/rpmsg.h --- a/include/linux/rpmsg.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/rpmsg.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/rpmsg.h 2024-11-24 20:19:38.234228937 -0500 @@ -25,14 +25,20 @@ struct rpmsg_device_ops; struct rpmsg_endpoint_ops; @@ -463670,7 +473316,7 @@ diff -Naur --no-dereference a/include/linux/rpmsg.h b/include/linux/rpmsg.h /* use a macro to avoid include chaining to get THIS_MODULE */ diff -Naur --no-dereference a/include/linux/rpmsg-remotedev/rpmsg-remotedev.h b/include/linux/rpmsg-remotedev/rpmsg-remotedev.h --- a/include/linux/rpmsg-remotedev/rpmsg-remotedev.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/linux/rpmsg-remotedev/rpmsg-remotedev.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/rpmsg-remotedev/rpmsg-remotedev.h 2024-11-24 20:19:38.234228937 -0500 @@ -0,0 +1,218 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -463890,10 +473536,776 @@ diff -Naur --no-dereference a/include/linux/rpmsg-remotedev/rpmsg-remotedev.h b/ +#endif + +#endif +diff -Naur --no-dereference a/include/linux/rtmutex.h b/include/linux/rtmutex.h +--- a/include/linux/rtmutex.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/rtmutex.h 2024-11-24 20:19:38.234228937 -0500 +@@ -14,11 +14,15 @@ + #define __LINUX_RT_MUTEX_H + + #include +-#include +-#include ++#include ++#include + + extern int max_lock_depth; /* for sysctl */ + ++#ifdef CONFIG_DEBUG_MUTEXES ++#include ++#endif ++ + /** + * The rt_mutex structure + * +@@ -31,12 +35,7 @@ + raw_spinlock_t wait_lock; + struct rb_root_cached waiters; + struct task_struct *owner; +-#ifdef CONFIG_DEBUG_RT_MUTEXES + int save_state; +- const char *name, *file; +- int line; +- void *magic; +-#endif + #ifdef CONFIG_DEBUG_LOCK_ALLOC + struct lockdep_map dep_map; + #endif +@@ -49,6 +48,7 @@ + extern int rt_mutex_debug_check_no_locks_freed(const void *from, + unsigned long len); + extern void rt_mutex_debug_check_no_locks_held(struct task_struct *task); ++ extern void rt_mutex_debug_task_free(struct task_struct *tsk); + #else + static inline int rt_mutex_debug_check_no_locks_freed(const void *from, + unsigned long len) +@@ -56,25 +56,15 @@ + return 0; + } + # define rt_mutex_debug_check_no_locks_held(task) do { } while (0) ++# define rt_mutex_debug_task_free(t) do { } while (0) + #endif + +-#ifdef CONFIG_DEBUG_RT_MUTEXES +-# define __DEBUG_RT_MUTEX_INITIALIZER(mutexname) \ +- , .name = #mutexname, .file = __FILE__, .line = __LINE__ +- +-# define rt_mutex_init(mutex) \ ++#define rt_mutex_init(mutex) \ + do { \ + static struct lock_class_key __key; \ + __rt_mutex_init(mutex, __func__, &__key); \ + } while (0) + +- extern void rt_mutex_debug_task_free(struct task_struct *tsk); +-#else +-# define __DEBUG_RT_MUTEX_INITIALIZER(mutexname) +-# define rt_mutex_init(mutex) __rt_mutex_init(mutex, NULL, NULL) +-# define rt_mutex_debug_task_free(t) do { } while (0) +-#endif +- + #ifdef CONFIG_DEBUG_LOCK_ALLOC + #define __DEP_MAP_RT_MUTEX_INITIALIZER(mutexname) \ + , .dep_map = { .name = #mutexname } +@@ -82,12 +72,19 @@ + #define __DEP_MAP_RT_MUTEX_INITIALIZER(mutexname) + #endif + +-#define __RT_MUTEX_INITIALIZER(mutexname) \ +- { .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \ ++#define __RT_MUTEX_INITIALIZER_PLAIN(mutexname) \ ++ .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \ + , .waiters = RB_ROOT_CACHED \ + , .owner = NULL \ +- __DEBUG_RT_MUTEX_INITIALIZER(mutexname) \ +- __DEP_MAP_RT_MUTEX_INITIALIZER(mutexname)} ++ __DEP_MAP_RT_MUTEX_INITIALIZER(mutexname) ++ ++#define __RT_MUTEX_INITIALIZER(mutexname) \ ++ { __RT_MUTEX_INITIALIZER_PLAIN(mutexname) \ ++ , .save_state = 0 } ++ ++#define __RT_MUTEX_INITIALIZER_SAVE_STATE(mutexname) \ ++ { __RT_MUTEX_INITIALIZER_PLAIN(mutexname) \ ++ , .save_state = 1 } + + #define DEFINE_RT_MUTEX(mutexname) \ + struct rt_mutex mutexname = __RT_MUTEX_INITIALIZER(mutexname) +@@ -115,9 +112,6 @@ + #endif + + extern int rt_mutex_lock_interruptible(struct rt_mutex *lock); +-extern int rt_mutex_timed_lock(struct rt_mutex *lock, +- struct hrtimer_sleeper *timeout); +- + extern int rt_mutex_trylock(struct rt_mutex *lock); + + extern void rt_mutex_unlock(struct rt_mutex *lock); +diff -Naur --no-dereference a/include/linux/rwlock_rt.h b/include/linux/rwlock_rt.h +--- a/include/linux/rwlock_rt.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/linux/rwlock_rt.h 2024-11-24 20:19:38.234228937 -0500 +@@ -0,0 +1,109 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++#ifndef __LINUX_RWLOCK_RT_H ++#define __LINUX_RWLOCK_RT_H ++ ++#ifndef __LINUX_SPINLOCK_H ++#error Do not include directly. Use spinlock.h ++#endif ++ ++extern void __lockfunc rt_write_lock(rwlock_t *rwlock); ++extern void __lockfunc rt_read_lock(rwlock_t *rwlock); ++extern int __lockfunc rt_write_trylock(rwlock_t *rwlock); ++extern int __lockfunc rt_read_trylock(rwlock_t *rwlock); ++extern void __lockfunc rt_write_unlock(rwlock_t *rwlock); ++extern void __lockfunc rt_read_unlock(rwlock_t *rwlock); ++extern int __lockfunc rt_read_can_lock(rwlock_t *rwlock); ++extern int __lockfunc rt_write_can_lock(rwlock_t *rwlock); ++extern void __rt_rwlock_init(rwlock_t *rwlock, char *name, struct lock_class_key *key); ++ ++#define read_can_lock(rwlock) rt_read_can_lock(rwlock) ++#define write_can_lock(rwlock) rt_write_can_lock(rwlock) ++ ++#define read_trylock(lock) __cond_lock(lock, rt_read_trylock(lock)) ++#define write_trylock(lock) __cond_lock(lock, rt_write_trylock(lock)) ++ ++static inline int __write_trylock_rt_irqsave(rwlock_t *lock, unsigned long *flags) ++{ ++ *flags = 0; ++ return rt_write_trylock(lock); ++} ++ ++#define write_trylock_irqsave(lock, flags) \ ++ __cond_lock(lock, __write_trylock_rt_irqsave(lock, &(flags))) ++ ++#define read_lock_irqsave(lock, flags) \ ++ do { \ ++ typecheck(unsigned long, flags); \ ++ rt_read_lock(lock); \ ++ flags = 0; \ ++ } while (0) ++ ++#define write_lock_irqsave(lock, flags) \ ++ do { \ ++ typecheck(unsigned long, flags); \ ++ rt_write_lock(lock); \ ++ flags = 0; \ ++ } while (0) ++ ++#define read_lock(lock) rt_read_lock(lock) ++ ++#define read_lock_bh(lock) \ ++ do { \ ++ local_bh_disable(); \ ++ rt_read_lock(lock); \ ++ } while (0) ++ ++#define read_lock_irq(lock) read_lock(lock) ++ ++#define write_lock(lock) rt_write_lock(lock) ++ ++#define write_lock_bh(lock) \ ++ do { \ ++ local_bh_disable(); \ ++ rt_write_lock(lock); \ ++ } while (0) ++ ++#define write_lock_irq(lock) write_lock(lock) ++ ++#define read_unlock(lock) rt_read_unlock(lock) ++ ++#define read_unlock_bh(lock) \ ++ do { \ ++ rt_read_unlock(lock); \ ++ local_bh_enable(); \ ++ } while (0) ++ ++#define read_unlock_irq(lock) read_unlock(lock) ++ ++#define write_unlock(lock) rt_write_unlock(lock) ++ ++#define write_unlock_bh(lock) \ ++ do { \ ++ rt_write_unlock(lock); \ ++ local_bh_enable(); \ ++ } while (0) ++ ++#define write_unlock_irq(lock) write_unlock(lock) ++ ++#define read_unlock_irqrestore(lock, flags) \ ++ do { \ ++ typecheck(unsigned long, flags); \ ++ (void) flags; \ ++ rt_read_unlock(lock); \ ++ } while (0) ++ ++#define write_unlock_irqrestore(lock, flags) \ ++ do { \ ++ typecheck(unsigned long, flags); \ ++ (void) flags; \ ++ rt_write_unlock(lock); \ ++ } while (0) ++ ++#define rwlock_init(rwl) \ ++do { \ ++ static struct lock_class_key __key; \ ++ \ ++ __rt_rwlock_init(rwl, #rwl, &__key); \ ++} while (0) ++ ++#endif +diff -Naur --no-dereference a/include/linux/rwlock_types.h b/include/linux/rwlock_types.h +--- a/include/linux/rwlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/rwlock_types.h 2024-11-24 20:19:38.234228937 -0500 +@@ -1,6 +1,10 @@ + #ifndef __LINUX_RWLOCK_TYPES_H + #define __LINUX_RWLOCK_TYPES_H + ++#if !defined(__LINUX_SPINLOCK_TYPES_H) ++# error "Do not include directly, include spinlock_types.h" ++#endif ++ + /* + * include/linux/rwlock_types.h - generic rwlock type definitions + * and initializers +diff -Naur --no-dereference a/include/linux/rwlock_types_rt.h b/include/linux/rwlock_types_rt.h +--- a/include/linux/rwlock_types_rt.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/linux/rwlock_types_rt.h 2024-11-24 20:19:38.234228937 -0500 +@@ -0,0 +1,56 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++#ifndef __LINUX_RWLOCK_TYPES_RT_H ++#define __LINUX_RWLOCK_TYPES_RT_H ++ ++#ifndef __LINUX_SPINLOCK_TYPES_H ++#error "Do not include directly. Include spinlock_types.h instead" ++#endif ++ ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++# define RW_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname } ++#else ++# define RW_DEP_MAP_INIT(lockname) ++#endif ++ ++typedef struct rt_rw_lock rwlock_t; ++ ++#define __RW_LOCK_UNLOCKED(name) __RWLOCK_RT_INITIALIZER(name) ++ ++#define DEFINE_RWLOCK(name) \ ++ rwlock_t name = __RW_LOCK_UNLOCKED(name) ++ ++/* ++ * A reader biased implementation primarily for CPU pinning. ++ * ++ * Can be selected as general replacement for the single reader RT rwlock ++ * variant ++ */ ++struct rt_rw_lock { ++ struct rt_mutex rtmutex; ++ atomic_t readers; ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++ struct lockdep_map dep_map; ++#endif ++}; ++ ++#define READER_BIAS (1U << 31) ++#define WRITER_BIAS (1U << 30) ++ ++#define __RWLOCK_RT_INITIALIZER(name) \ ++{ \ ++ .readers = ATOMIC_INIT(READER_BIAS), \ ++ .rtmutex = __RT_MUTEX_INITIALIZER_SAVE_STATE(name.rtmutex), \ ++ RW_DEP_MAP_INIT(name) \ ++} ++ ++void __rwlock_biased_rt_init(struct rt_rw_lock *lock, const char *name, ++ struct lock_class_key *key); ++ ++#define rwlock_biased_rt_init(rwlock) \ ++ do { \ ++ static struct lock_class_key __key; \ ++ \ ++ __rwlock_biased_rt_init((rwlock), #rwlock, &__key); \ ++ } while (0) ++ ++#endif +diff -Naur --no-dereference a/include/linux/rwsem.h b/include/linux/rwsem.h +--- a/include/linux/rwsem.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/rwsem.h 2024-11-24 20:19:38.234228937 -0500 +@@ -16,6 +16,11 @@ + #include + #include + #include ++ ++#ifdef CONFIG_PREEMPT_RT ++#include ++#else /* PREEMPT_RT */ ++ + #ifdef CONFIG_RWSEM_SPIN_ON_OWNER + #include + #endif +@@ -119,6 +124,13 @@ + return !list_empty(&sem->wait_list); + } + ++#endif /* !PREEMPT_RT */ ++ ++/* ++ * The functions below are the same for all rwsem implementations including ++ * the RT specific variant. ++ */ ++ + /* + * lock for reading + */ +diff -Naur --no-dereference a/include/linux/rwsem-rt.h b/include/linux/rwsem-rt.h +--- a/include/linux/rwsem-rt.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/linux/rwsem-rt.h 2024-11-24 20:19:38.234228937 -0500 +@@ -0,0 +1,70 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++#ifndef _LINUX_RWSEM_RT_H ++#define _LINUX_RWSEM_RT_H ++ ++#ifndef _LINUX_RWSEM_H ++#error "Include rwsem.h" ++#endif ++ ++#include ++#include ++ ++#define READER_BIAS (1U << 31) ++#define WRITER_BIAS (1U << 30) ++ ++struct rw_semaphore { ++ atomic_t readers; ++ struct rt_mutex rtmutex; ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++ struct lockdep_map dep_map; ++#endif ++}; ++ ++#define __RWSEM_INITIALIZER(name) \ ++{ \ ++ .readers = ATOMIC_INIT(READER_BIAS), \ ++ .rtmutex = __RT_MUTEX_INITIALIZER(name.rtmutex), \ ++ RW_DEP_MAP_INIT(name) \ ++} ++ ++#define DECLARE_RWSEM(lockname) \ ++ struct rw_semaphore lockname = __RWSEM_INITIALIZER(lockname) ++ ++extern void __rwsem_init(struct rw_semaphore *rwsem, const char *name, ++ struct lock_class_key *key); ++ ++#define __init_rwsem(sem, name, key) \ ++do { \ ++ rt_mutex_init(&(sem)->rtmutex); \ ++ __rwsem_init((sem), (name), (key)); \ ++} while (0) ++ ++#define init_rwsem(sem) \ ++do { \ ++ static struct lock_class_key __key; \ ++ \ ++ __init_rwsem((sem), #sem, &__key); \ ++} while (0) ++ ++static inline int rwsem_is_locked(struct rw_semaphore *sem) ++{ ++ return atomic_read(&sem->readers) != READER_BIAS; ++} ++ ++static inline int rwsem_is_contended(struct rw_semaphore *sem) ++{ ++ return atomic_read(&sem->readers) > 0; ++} ++ ++extern void __down_read(struct rw_semaphore *sem); ++extern int __down_read_interruptible(struct rw_semaphore *sem); ++extern int __down_read_killable(struct rw_semaphore *sem); ++extern int __down_read_trylock(struct rw_semaphore *sem); ++extern void __down_write(struct rw_semaphore *sem); ++extern int __must_check __down_write_killable(struct rw_semaphore *sem); ++extern int __down_write_trylock(struct rw_semaphore *sem); ++extern void __up_read(struct rw_semaphore *sem); ++extern void __up_write(struct rw_semaphore *sem); ++extern void __downgrade_write(struct rw_semaphore *sem); ++ ++#endif +diff -Naur --no-dereference a/include/linux/sched/hotplug.h b/include/linux/sched/hotplug.h +--- a/include/linux/sched/hotplug.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/sched/hotplug.h 2024-11-24 20:19:38.235228938 -0500 +@@ -11,8 +11,10 @@ + extern int sched_cpu_deactivate(unsigned int cpu); + + #ifdef CONFIG_HOTPLUG_CPU ++extern int sched_cpu_wait_empty(unsigned int cpu); + extern int sched_cpu_dying(unsigned int cpu); + #else ++# define sched_cpu_wait_empty NULL + # define sched_cpu_dying NULL + #endif + +diff -Naur --no-dereference a/include/linux/sched/mm.h b/include/linux/sched/mm.h +--- a/include/linux/sched/mm.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/sched/mm.h 2024-11-24 20:19:38.235228938 -0500 +@@ -49,6 +49,17 @@ + __mmdrop(mm); + } + ++#ifdef CONFIG_PREEMPT_RT ++extern void __mmdrop_delayed(struct rcu_head *rhp); ++static inline void mmdrop_delayed(struct mm_struct *mm) ++{ ++ if (atomic_dec_and_test(&mm->mm_count)) ++ call_rcu(&mm->delayed_drop, __mmdrop_delayed); ++} ++#else ++# define mmdrop_delayed(mm) mmdrop(mm) ++#endif ++ + /** + * mmget() - Pin the address space associated with a &struct mm_struct. + * @mm: The address space to pin. +diff -Naur --no-dereference a/include/linux/sched/rt.h b/include/linux/sched/rt.h +--- a/include/linux/sched/rt.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/sched/rt.h 2024-11-24 20:19:38.235228938 -0500 +@@ -39,20 +39,12 @@ + } + extern void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task); + extern void rt_mutex_adjust_pi(struct task_struct *p); +-static inline bool tsk_is_pi_blocked(struct task_struct *tsk) +-{ +- return tsk->pi_blocked_on != NULL; +-} + #else + static inline struct task_struct *rt_mutex_get_top_task(struct task_struct *task) + { + return NULL; + } + # define rt_mutex_adjust_pi(p) do { } while (0) +-static inline bool tsk_is_pi_blocked(struct task_struct *tsk) +-{ +- return false; +-} + #endif + + extern void normalize_rt_tasks(void); +diff -Naur --no-dereference a/include/linux/sched/wake_q.h b/include/linux/sched/wake_q.h +--- a/include/linux/sched/wake_q.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/sched/wake_q.h 2024-11-24 20:19:38.235228938 -0500 +@@ -58,6 +58,17 @@ + + extern void wake_q_add(struct wake_q_head *head, struct task_struct *task); + extern void wake_q_add_safe(struct wake_q_head *head, struct task_struct *task); +-extern void wake_up_q(struct wake_q_head *head); ++extern void wake_q_add_sleeper(struct wake_q_head *head, struct task_struct *task); ++extern void __wake_up_q(struct wake_q_head *head, bool sleeper); ++ ++static inline void wake_up_q(struct wake_q_head *head) ++{ ++ __wake_up_q(head, false); ++} ++ ++static inline void wake_up_q_sleeper(struct wake_q_head *head) ++{ ++ __wake_up_q(head, true); ++} + + #endif /* _LINUX_SCHED_WAKE_Q_H */ +diff -Naur --no-dereference a/include/linux/sched.h b/include/linux/sched.h +--- a/include/linux/sched.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/sched.h 2024-11-24 20:19:38.234228937 -0500 +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + + /* task_struct member predeclarations (sorted alphabetically): */ + struct audit_context; +@@ -111,12 +112,8 @@ + __TASK_TRACED | EXIT_DEAD | EXIT_ZOMBIE | \ + TASK_PARKED) + +-#define task_is_traced(task) ((task->state & __TASK_TRACED) != 0) +- + #define task_is_stopped(task) ((task->state & __TASK_STOPPED) != 0) + +-#define task_is_stopped_or_traced(task) ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0) +- + #ifdef CONFIG_DEBUG_ATOMIC_SLEEP + + /* +@@ -140,6 +137,9 @@ + smp_store_mb(current->state, (state_value)); \ + } while (0) + ++#define __set_current_state_no_track(state_value) \ ++ current->state = (state_value); ++ + #define set_special_state(state_value) \ + do { \ + unsigned long flags; /* may shadow */ \ +@@ -193,6 +193,9 @@ + #define set_current_state(state_value) \ + smp_store_mb(current->state, (state_value)) + ++#define __set_current_state_no_track(state_value) \ ++ __set_current_state(state_value) ++ + /* + * set_special_state() should be used for those states when the blocking task + * can not use the regular condition based wait-loop. In that case we must +@@ -641,6 +644,13 @@ + struct wake_q_node *next; + }; + ++struct kmap_ctrl { ++#ifdef CONFIG_KMAP_LOCAL ++ int idx; ++ pte_t pteval[KM_MAX_IDX]; ++#endif ++}; ++ + struct task_struct { + #ifdef CONFIG_THREAD_INFO_IN_TASK + /* +@@ -651,6 +661,8 @@ + #endif + /* -1 unrunnable, 0 runnable, >0 stopped: */ + volatile long state; ++ /* saved state for "spinlock sleepers" */ ++ volatile long saved_state; + + /* + * This begins the randomizable portion of task_struct. Only +@@ -726,6 +738,11 @@ + int nr_cpus_allowed; + const cpumask_t *cpus_ptr; + cpumask_t cpus_mask; ++ void *migration_pending; ++#ifdef CONFIG_SMP ++ unsigned short migration_disabled; ++#endif ++ unsigned short migration_flags; + + #ifdef CONFIG_PREEMPT_RCU + int rcu_read_lock_nesting; +@@ -831,6 +848,10 @@ + /* Stalled due to lack of memory */ + unsigned in_memstall:1; + #endif ++#ifdef CONFIG_EVENTFD ++ /* Recursion prevention for eventfd_signal() */ ++ unsigned in_eventfd_signal:1; ++#endif + + unsigned long atomic_flags; /* Flags requiring atomic access. */ + +@@ -975,11 +996,16 @@ + /* Signal handlers: */ + struct signal_struct *signal; + struct sighand_struct __rcu *sighand; ++ struct sigqueue *sigqueue_cache; + sigset_t blocked; + sigset_t real_blocked; + /* Restored if set_restore_sigmask() was used: */ + sigset_t saved_sigmask; + struct sigpending pending; ++#ifdef CONFIG_PREEMPT_RT ++ /* TODO: move me into ->restart_block ? */ ++ struct kernel_siginfo forced_info; ++#endif + unsigned long sas_ss_sp; + size_t sas_ss_size; + unsigned int sas_ss_flags; +@@ -1006,6 +1032,7 @@ + raw_spinlock_t pi_lock; + + struct wake_q_node wake_q; ++ struct wake_q_node wake_q_sleeper; + + #ifdef CONFIG_RT_MUTEXES + /* PI waiters blocked on a rt_mutex held by this task: */ +@@ -1033,6 +1060,9 @@ + int softirq_context; + int irq_config; + #endif ++#ifdef CONFIG_PREEMPT_RT ++ int softirq_disable_cnt; ++#endif + + #ifdef CONFIG_LOCKDEP + # define MAX_LOCK_DEPTH 48UL +@@ -1318,6 +1348,7 @@ + unsigned int sequential_io; + unsigned int sequential_io_avg; + #endif ++ struct kmap_ctrl kmap_ctrl; + #ifdef CONFIG_DEBUG_ATOMIC_SLEEP + unsigned long task_state_change; + #endif +@@ -1763,6 +1794,7 @@ + + extern int wake_up_state(struct task_struct *tsk, unsigned int state); + extern int wake_up_process(struct task_struct *tsk); ++extern int wake_up_lock_sleeper(struct task_struct *tsk); + extern void wake_up_new_task(struct task_struct *tsk); + + #ifdef CONFIG_SMP +@@ -1853,6 +1885,89 @@ + return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); + } + ++#ifdef CONFIG_PREEMPT_LAZY ++static inline void set_tsk_need_resched_lazy(struct task_struct *tsk) ++{ ++ set_tsk_thread_flag(tsk,TIF_NEED_RESCHED_LAZY); ++} ++ ++static inline void clear_tsk_need_resched_lazy(struct task_struct *tsk) ++{ ++ clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED_LAZY); ++} ++ ++static inline int test_tsk_need_resched_lazy(struct task_struct *tsk) ++{ ++ return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED_LAZY)); ++} ++ ++static inline int need_resched_lazy(void) ++{ ++ return test_thread_flag(TIF_NEED_RESCHED_LAZY); ++} ++ ++static inline int need_resched_now(void) ++{ ++ return test_thread_flag(TIF_NEED_RESCHED); ++} ++ ++#else ++static inline void clear_tsk_need_resched_lazy(struct task_struct *tsk) { } ++static inline int need_resched_lazy(void) { return 0; } ++ ++static inline int need_resched_now(void) ++{ ++ return test_thread_flag(TIF_NEED_RESCHED); ++} ++ ++#endif ++ ++ ++static inline bool __task_is_stopped_or_traced(struct task_struct *task) ++{ ++ if (task->state & (__TASK_STOPPED | __TASK_TRACED)) ++ return true; ++#ifdef CONFIG_PREEMPT_RT ++ if (task->saved_state & (__TASK_STOPPED | __TASK_TRACED)) ++ return true; ++#endif ++ return false; ++} ++ ++static inline bool task_is_stopped_or_traced(struct task_struct *task) ++{ ++ bool traced_stopped; ++ ++#ifdef CONFIG_PREEMPT_RT ++ unsigned long flags; ++ ++ raw_spin_lock_irqsave(&task->pi_lock, flags); ++ traced_stopped = __task_is_stopped_or_traced(task); ++ raw_spin_unlock_irqrestore(&task->pi_lock, flags); ++#else ++ traced_stopped = __task_is_stopped_or_traced(task); ++#endif ++ return traced_stopped; ++} ++ ++static inline bool task_is_traced(struct task_struct *task) ++{ ++ bool traced = false; ++ ++ if (task->state & __TASK_TRACED) ++ return true; ++#ifdef CONFIG_PREEMPT_RT ++ /* in case the task is sleeping on tasklist_lock */ ++ raw_spin_lock_irq(&task->pi_lock); ++ if (task->state & __TASK_TRACED) ++ traced = true; ++ else if (task->saved_state & __TASK_TRACED) ++ traced = true; ++ raw_spin_unlock_irq(&task->pi_lock); ++#endif ++ return traced; ++} ++ + /* + * cond_resched() and cond_resched_lock(): latency reduction via + * explicit rescheduling in places that are safe. The return +diff -Naur --no-dereference a/include/linux/serial_8250.h b/include/linux/serial_8250.h +--- a/include/linux/serial_8250.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/serial_8250.h 2024-11-24 20:19:38.235228938 -0500 +@@ -7,6 +7,7 @@ + #ifndef _LINUX_SERIAL_8250_H + #define _LINUX_SERIAL_8250_H + ++#include + #include + #include + #include +@@ -126,6 +127,8 @@ + #define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA + unsigned char msr_saved_flags; + ++ atomic_t console_printing; ++ + struct uart_8250_dma *dma; + const struct uart_8250_ops *ops; + +@@ -181,6 +184,8 @@ + void serial8250_set_defaults(struct uart_8250_port *up); + void serial8250_console_write(struct uart_8250_port *up, const char *s, + unsigned int count); ++void serial8250_console_write_atomic(struct uart_8250_port *up, const char *s, ++ unsigned int count); + int serial8250_console_setup(struct uart_port *port, char *options, bool probe); + int serial8250_console_exit(struct uart_port *port); + +diff -Naur --no-dereference a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h +--- a/include/linux/shmem_fs.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/shmem_fs.h 2024-11-24 20:19:38.235228938 -0500 +@@ -31,7 +31,7 @@ + struct percpu_counter used_blocks; /* How many are allocated */ + unsigned long max_inodes; /* How many inodes are allowed */ + unsigned long free_inodes; /* How many are left for allocation */ +- spinlock_t stat_lock; /* Serialize shmem_sb_info changes */ ++ raw_spinlock_t stat_lock; /* Serialize shmem_sb_info changes */ + umode_t mode; /* Mount mode for root directory */ + unsigned char huge; /* Whether to try for hugepages */ + kuid_t uid; /* Mount uid for root directory */ +diff -Naur --no-dereference a/include/linux/signal.h b/include/linux/signal.h +--- a/include/linux/signal.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/signal.h 2024-11-24 20:19:38.235228938 -0500 +@@ -265,6 +265,7 @@ + } + + extern void flush_sigqueue(struct sigpending *queue); ++extern void flush_task_sigqueue(struct task_struct *tsk); + + /* Test if 'sig' is valid signal. Use this instead of testing _NSIG directly */ + static inline int valid_signal(unsigned long sig) diff -Naur --no-dereference a/include/linux/skbuff.h b/include/linux/skbuff.h --- a/include/linux/skbuff.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/skbuff.h 2024-08-28 19:44:05.664038247 -0400 -@@ -506,6 +506,27 @@ ++++ b/include/linux/skbuff.h 2024-11-24 20:19:38.235228938 -0500 +@@ -295,6 +295,7 @@ + + __u32 qlen; + spinlock_t lock; ++ raw_spinlock_t raw_lock; + }; + + struct sk_buff; +@@ -506,6 +507,27 @@ struct msghdr *msg, int len, struct ubuf_info *uarg); @@ -463921,7 +474333,7 @@ diff -Naur --no-dereference a/include/linux/skbuff.h b/include/linux/skbuff.h /* This data is invariant across clones and lives at * the end of the header data, ie. at skb->end. */ -@@ -520,6 +541,8 @@ +@@ -520,6 +542,8 @@ struct sk_buff *frag_list; struct skb_shared_hwtstamps hwtstamps; unsigned int gso_type; @@ -463930,7 +474342,7 @@ diff -Naur --no-dereference a/include/linux/skbuff.h b/include/linux/skbuff.h u32 tskey; /* -@@ -1519,6 +1542,17 @@ +@@ -1519,6 +1543,17 @@ skb_mark_not_on_list(skb); } @@ -463948,9 +474360,35 @@ diff -Naur --no-dereference a/include/linux/skbuff.h b/include/linux/skbuff.h /** * skb_queue_empty - check if a queue is empty * @list: queue head +@@ -1891,6 +1926,12 @@ + __skb_queue_head_init(list); + } + ++static inline void skb_queue_head_init_raw(struct sk_buff_head *list) ++{ ++ raw_spin_lock_init(&list->raw_lock); ++ __skb_queue_head_init(list); ++} ++ + static inline void skb_queue_head_init_class(struct sk_buff_head *list, + struct lock_class_key *class) + { +diff -Naur --no-dereference a/include/linux/smp.h b/include/linux/smp.h +--- a/include/linux/smp.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/smp.h 2024-11-24 20:19:38.235228938 -0500 +@@ -239,6 +239,9 @@ + #define get_cpu() ({ preempt_disable(); __smp_processor_id(); }) + #define put_cpu() preempt_enable() + ++#define get_cpu_light() ({ migrate_disable(); __smp_processor_id(); }) ++#define put_cpu_light() migrate_enable() ++ + /* + * Callback to arch code if there's nosmp or maxcpus=0 on the + * boot command line: diff -Naur --no-dereference a/include/linux/soc/ti/k3-ringacc.h b/include/linux/soc/ti/k3-ringacc.h --- a/include/linux/soc/ti/k3-ringacc.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/soc/ti/k3-ringacc.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/soc/ti/k3-ringacc.h 2024-11-24 20:19:38.236228940 -0500 @@ -67,6 +67,10 @@ * few times. It's usable when the same ring is used as Free Host PD ring * for different flows, for example. @@ -463994,7 +474432,7 @@ diff -Naur --no-dereference a/include/linux/soc/ti/k3-ringacc.h b/include/linux/ #endif /* __SOC_TI_K3_RINGACC_API_H_ */ diff -Naur --no-dereference a/include/linux/soc/ti/ti-msgmgr.h b/include/linux/soc/ti/ti-msgmgr.h --- a/include/linux/soc/ti/ti-msgmgr.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/soc/ti/ti-msgmgr.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/soc/ti/ti-msgmgr.h 2024-11-24 20:19:38.236228940 -0500 @@ -1,7 +1,7 @@ /* * Texas Instruments' Message Manager @@ -464030,7 +474468,7 @@ diff -Naur --no-dereference a/include/linux/soc/ti/ti-msgmgr.h b/include/linux/s #endif /* TI_MSGMGR_H */ diff -Naur --no-dereference a/include/linux/soc/ti/ti_sci_protocol.h b/include/linux/soc/ti/ti_sci_protocol.h --- a/include/linux/soc/ti/ti_sci_protocol.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/soc/ti/ti_sci_protocol.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/soc/ti/ti_sci_protocol.h 2024-11-24 20:19:38.236228940 -0500 @@ -195,6 +195,65 @@ u64 *current_freq); }; @@ -464234,7 +474672,7 @@ diff -Naur --no-dereference a/include/linux/soc/ti/ti_sci_protocol.h b/include/l * @sets: Number of sets available from this resource type diff -Naur --no-dereference a/include/linux/socket.h b/include/linux/socket.h --- a/include/linux/socket.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/socket.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/socket.h 2024-11-24 20:19:38.236228940 -0500 @@ -223,8 +223,9 @@ * reuses AF_INET address family */ @@ -464264,7 +474702,7 @@ diff -Naur --no-dereference a/include/linux/socket.h b/include/linux/socket.h #define IPX_TYPE 1 diff -Naur --no-dereference a/include/linux/spi/spi-mem.h b/include/linux/spi/spi-mem.h --- a/include/linux/spi/spi-mem.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/spi/spi-mem.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/spi/spi-mem.h 2024-11-24 20:19:38.236228940 -0500 @@ -20,6 +20,14 @@ .nbytes = 1, \ } @@ -464413,9 +474851,487 @@ diff -Naur --no-dereference a/include/linux/spi/spi-mem.h b/include/linux/spi/sp int spi_mem_driver_register_with_owner(struct spi_mem_driver *drv, struct module *owner); +diff -Naur --no-dereference a/include/linux/spinlock_api_smp.h b/include/linux/spinlock_api_smp.h +--- a/include/linux/spinlock_api_smp.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/spinlock_api_smp.h 2024-11-24 20:19:38.236228940 -0500 +@@ -187,6 +187,8 @@ + return 0; + } + +-#include ++#ifndef CONFIG_PREEMPT_RT ++# include ++#endif + + #endif /* __LINUX_SPINLOCK_API_SMP_H */ +diff -Naur --no-dereference a/include/linux/spinlock.h b/include/linux/spinlock.h +--- a/include/linux/spinlock.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/spinlock.h 2024-11-24 20:19:38.236228940 -0500 +@@ -309,7 +309,11 @@ + }) + + /* Include rwlock functions */ +-#include ++#ifdef CONFIG_PREEMPT_RT ++# include ++#else ++# include ++#endif + + /* + * Pull the _spin_*()/_read_*()/_write_*() functions/declarations: +@@ -320,6 +324,10 @@ + # include + #endif + ++#ifdef CONFIG_PREEMPT_RT ++# include ++#else /* PREEMPT_RT */ ++ + /* + * Map the spin_lock functions to the raw variants for PREEMPT_RT=n + */ +@@ -454,6 +462,8 @@ + + #define assert_spin_locked(lock) assert_raw_spin_locked(&(lock)->rlock) + ++#endif /* !PREEMPT_RT */ ++ + /* + * Pull the atomic_t declaration: + * (asm-mips/atomic.h needs above definitions) +diff -Naur --no-dereference a/include/linux/spinlock_rt.h b/include/linux/spinlock_rt.h +--- a/include/linux/spinlock_rt.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/linux/spinlock_rt.h 2024-11-24 20:19:38.236228940 -0500 +@@ -0,0 +1,155 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++#ifndef __LINUX_SPINLOCK_RT_H ++#define __LINUX_SPINLOCK_RT_H ++ ++#ifndef __LINUX_SPINLOCK_H ++#error Do not include directly. Use spinlock.h ++#endif ++ ++#include ++ ++extern void ++__rt_spin_lock_init(spinlock_t *lock, const char *name, struct lock_class_key *key); ++ ++#define spin_lock_init(slock) \ ++do { \ ++ static struct lock_class_key __key; \ ++ \ ++ rt_mutex_init(&(slock)->lock); \ ++ __rt_spin_lock_init(slock, #slock, &__key); \ ++} while (0) ++ ++extern void __lockfunc rt_spin_lock(spinlock_t *lock); ++extern void __lockfunc rt_spin_lock_nested(spinlock_t *lock, int subclass); ++extern void __lockfunc rt_spin_lock_nest_lock(spinlock_t *lock, struct lockdep_map *nest_lock); ++extern void __lockfunc rt_spin_unlock(spinlock_t *lock); ++extern void __lockfunc rt_spin_lock_unlock(spinlock_t *lock); ++extern int __lockfunc rt_spin_trylock_irqsave(spinlock_t *lock, unsigned long *flags); ++extern int __lockfunc rt_spin_trylock_bh(spinlock_t *lock); ++extern int __lockfunc rt_spin_trylock(spinlock_t *lock); ++extern int atomic_dec_and_spin_lock(atomic_t *atomic, spinlock_t *lock); ++ ++/* ++ * lockdep-less calls, for derived types like rwlock: ++ * (for trylock they can use rt_mutex_trylock() directly. ++ * Migrate disable handling must be done at the call site. ++ */ ++extern void __lockfunc __rt_spin_lock(struct rt_mutex *lock); ++extern void __lockfunc __rt_spin_trylock(struct rt_mutex *lock); ++extern void __lockfunc __rt_spin_unlock(struct rt_mutex *lock); ++ ++#define spin_lock(lock) rt_spin_lock(lock) ++ ++#define spin_lock_bh(lock) \ ++ do { \ ++ local_bh_disable(); \ ++ rt_spin_lock(lock); \ ++ } while (0) ++ ++#define spin_lock_irq(lock) spin_lock(lock) ++ ++#define spin_do_trylock(lock) __cond_lock(lock, rt_spin_trylock(lock)) ++ ++#define spin_trylock(lock) \ ++({ \ ++ int __locked; \ ++ __locked = spin_do_trylock(lock); \ ++ __locked; \ ++}) ++ ++#ifdef CONFIG_LOCKDEP ++# define spin_lock_nested(lock, subclass) \ ++ do { \ ++ rt_spin_lock_nested(lock, subclass); \ ++ } while (0) ++ ++#define spin_lock_bh_nested(lock, subclass) \ ++ do { \ ++ local_bh_disable(); \ ++ rt_spin_lock_nested(lock, subclass); \ ++ } while (0) ++ ++# define spin_lock_nest_lock(lock, subclass) \ ++ do { \ ++ typecheck(struct lockdep_map *, &(subclass)->dep_map); \ ++ rt_spin_lock_nest_lock(lock, &(subclass)->dep_map); \ ++ } while (0) ++ ++# define spin_lock_irqsave_nested(lock, flags, subclass) \ ++ do { \ ++ typecheck(unsigned long, flags); \ ++ flags = 0; \ ++ rt_spin_lock_nested(lock, subclass); \ ++ } while (0) ++#else ++# define spin_lock_nested(lock, subclass) spin_lock(((void)(subclass), (lock))) ++# define spin_lock_nest_lock(lock, subclass) spin_lock(((void)(subclass), (lock))) ++# define spin_lock_bh_nested(lock, subclass) spin_lock_bh(((void)(subclass), (lock))) ++ ++# define spin_lock_irqsave_nested(lock, flags, subclass) \ ++ do { \ ++ typecheck(unsigned long, flags); \ ++ flags = 0; \ ++ spin_lock(((void)(subclass), (lock))); \ ++ } while (0) ++#endif ++ ++#define spin_lock_irqsave(lock, flags) \ ++ do { \ ++ typecheck(unsigned long, flags); \ ++ flags = 0; \ ++ spin_lock(lock); \ ++ } while (0) ++ ++#define spin_unlock(lock) rt_spin_unlock(lock) ++ ++#define spin_unlock_bh(lock) \ ++ do { \ ++ rt_spin_unlock(lock); \ ++ local_bh_enable(); \ ++ } while (0) ++ ++#define spin_unlock_irq(lock) spin_unlock(lock) ++ ++#define spin_unlock_irqrestore(lock, flags) \ ++ do { \ ++ typecheck(unsigned long, flags); \ ++ (void) flags; \ ++ spin_unlock(lock); \ ++ } while (0) ++ ++#define spin_trylock_bh(lock) __cond_lock(lock, rt_spin_trylock_bh(lock)) ++#define spin_trylock_irq(lock) spin_trylock(lock) ++ ++#define spin_trylock_irqsave(lock, flags) \ ++({ \ ++ int __locked; \ ++ \ ++ typecheck(unsigned long, flags); \ ++ flags = 0; \ ++ __locked = spin_trylock(lock); \ ++ __locked; \ ++}) ++ ++#ifdef CONFIG_GENERIC_LOCKBREAK ++# define spin_is_contended(lock) ((lock)->break_lock) ++#else ++# define spin_is_contended(lock) (((void)(lock), 0)) ++#endif ++ ++static inline int spin_can_lock(spinlock_t *lock) ++{ ++ return !rt_mutex_is_locked(&lock->lock); ++} ++ ++static inline int spin_is_locked(spinlock_t *lock) ++{ ++ return rt_mutex_is_locked(&lock->lock); ++} ++ ++static inline void assert_spin_locked(spinlock_t *lock) ++{ ++ BUG_ON(!spin_is_locked(lock)); ++} ++ ++#endif +diff -Naur --no-dereference a/include/linux/spinlock_types.h b/include/linux/spinlock_types.h +--- a/include/linux/spinlock_types.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/spinlock_types.h 2024-11-24 20:19:38.236228940 -0500 +@@ -9,93 +9,15 @@ + * Released under the General Public License (GPL). + */ + +-#if defined(CONFIG_SMP) +-# include +-#else +-# include +-#endif +- +-#include +- +-typedef struct raw_spinlock { +- arch_spinlock_t raw_lock; +-#ifdef CONFIG_DEBUG_SPINLOCK +- unsigned int magic, owner_cpu; +- void *owner; +-#endif +-#ifdef CONFIG_DEBUG_LOCK_ALLOC +- struct lockdep_map dep_map; +-#endif +-} raw_spinlock_t; +- +-#define SPINLOCK_MAGIC 0xdead4ead +- +-#define SPINLOCK_OWNER_INIT ((void *)-1L) +- +-#ifdef CONFIG_DEBUG_LOCK_ALLOC +-# define RAW_SPIN_DEP_MAP_INIT(lockname) \ +- .dep_map = { \ +- .name = #lockname, \ +- .wait_type_inner = LD_WAIT_SPIN, \ +- } +-# define SPIN_DEP_MAP_INIT(lockname) \ +- .dep_map = { \ +- .name = #lockname, \ +- .wait_type_inner = LD_WAIT_CONFIG, \ +- } +-#else +-# define RAW_SPIN_DEP_MAP_INIT(lockname) +-# define SPIN_DEP_MAP_INIT(lockname) +-#endif ++#include + +-#ifdef CONFIG_DEBUG_SPINLOCK +-# define SPIN_DEBUG_INIT(lockname) \ +- .magic = SPINLOCK_MAGIC, \ +- .owner_cpu = -1, \ +- .owner = SPINLOCK_OWNER_INIT, ++#ifndef CONFIG_PREEMPT_RT ++# include ++# include + #else +-# define SPIN_DEBUG_INIT(lockname) ++# include ++# include ++# include + #endif + +-#define __RAW_SPIN_LOCK_INITIALIZER(lockname) \ +- { \ +- .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \ +- SPIN_DEBUG_INIT(lockname) \ +- RAW_SPIN_DEP_MAP_INIT(lockname) } +- +-#define __RAW_SPIN_LOCK_UNLOCKED(lockname) \ +- (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname) +- +-#define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x) +- +-typedef struct spinlock { +- union { +- struct raw_spinlock rlock; +- +-#ifdef CONFIG_DEBUG_LOCK_ALLOC +-# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map)) +- struct { +- u8 __padding[LOCK_PADSIZE]; +- struct lockdep_map dep_map; +- }; +-#endif +- }; +-} spinlock_t; +- +-#define ___SPIN_LOCK_INITIALIZER(lockname) \ +- { \ +- .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \ +- SPIN_DEBUG_INIT(lockname) \ +- SPIN_DEP_MAP_INIT(lockname) } +- +-#define __SPIN_LOCK_INITIALIZER(lockname) \ +- { { .rlock = ___SPIN_LOCK_INITIALIZER(lockname) } } +- +-#define __SPIN_LOCK_UNLOCKED(lockname) \ +- (spinlock_t) __SPIN_LOCK_INITIALIZER(lockname) +- +-#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) +- +-#include +- + #endif /* __LINUX_SPINLOCK_TYPES_H */ +diff -Naur --no-dereference a/include/linux/spinlock_types_nort.h b/include/linux/spinlock_types_nort.h +--- a/include/linux/spinlock_types_nort.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/linux/spinlock_types_nort.h 2024-11-24 20:19:38.236228940 -0500 +@@ -0,0 +1,39 @@ ++#ifndef __LINUX_SPINLOCK_TYPES_NORT_H ++#define __LINUX_SPINLOCK_TYPES_NORT_H ++ ++#ifndef __LINUX_SPINLOCK_TYPES_H ++#error "Do not include directly. Include spinlock_types.h instead" ++#endif ++ ++/* ++ * The non RT version maps spinlocks to raw_spinlocks ++ */ ++typedef struct spinlock { ++ union { ++ struct raw_spinlock rlock; ++ ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map)) ++ struct { ++ u8 __padding[LOCK_PADSIZE]; ++ struct lockdep_map dep_map; ++ }; ++#endif ++ }; ++} spinlock_t; ++ ++#define ___SPIN_LOCK_INITIALIZER(lockname) \ ++{ \ ++ .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \ ++ SPIN_DEBUG_INIT(lockname) \ ++ SPIN_DEP_MAP_INIT(lockname) } ++ ++#define __SPIN_LOCK_INITIALIZER(lockname) \ ++ { { .rlock = ___SPIN_LOCK_INITIALIZER(lockname) } } ++ ++#define __SPIN_LOCK_UNLOCKED(lockname) \ ++ (spinlock_t) __SPIN_LOCK_INITIALIZER(lockname) ++ ++#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) ++ ++#endif +diff -Naur --no-dereference a/include/linux/spinlock_types_raw.h b/include/linux/spinlock_types_raw.h +--- a/include/linux/spinlock_types_raw.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/linux/spinlock_types_raw.h 2024-11-24 20:19:38.236228940 -0500 +@@ -0,0 +1,65 @@ ++#ifndef __LINUX_SPINLOCK_TYPES_RAW_H ++#define __LINUX_SPINLOCK_TYPES_RAW_H ++ ++#include ++ ++#if defined(CONFIG_SMP) ++# include ++#else ++# include ++#endif ++ ++#include ++ ++typedef struct raw_spinlock { ++ arch_spinlock_t raw_lock; ++#ifdef CONFIG_DEBUG_SPINLOCK ++ unsigned int magic, owner_cpu; ++ void *owner; ++#endif ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++ struct lockdep_map dep_map; ++#endif ++} raw_spinlock_t; ++ ++#define SPINLOCK_MAGIC 0xdead4ead ++ ++#define SPINLOCK_OWNER_INIT ((void *)-1L) ++ ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++# define RAW_SPIN_DEP_MAP_INIT(lockname) \ ++ .dep_map = { \ ++ .name = #lockname, \ ++ .wait_type_inner = LD_WAIT_SPIN, \ ++ } ++# define SPIN_DEP_MAP_INIT(lockname) \ ++ .dep_map = { \ ++ .name = #lockname, \ ++ .wait_type_inner = LD_WAIT_CONFIG, \ ++ } ++#else ++# define RAW_SPIN_DEP_MAP_INIT(lockname) ++# define SPIN_DEP_MAP_INIT(lockname) ++#endif ++ ++#ifdef CONFIG_DEBUG_SPINLOCK ++# define SPIN_DEBUG_INIT(lockname) \ ++ .magic = SPINLOCK_MAGIC, \ ++ .owner_cpu = -1, \ ++ .owner = SPINLOCK_OWNER_INIT, ++#else ++# define SPIN_DEBUG_INIT(lockname) ++#endif ++ ++#define __RAW_SPIN_LOCK_INITIALIZER(lockname) \ ++{ \ ++ .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \ ++ SPIN_DEBUG_INIT(lockname) \ ++ RAW_SPIN_DEP_MAP_INIT(lockname) } ++ ++#define __RAW_SPIN_LOCK_UNLOCKED(lockname) \ ++ (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname) ++ ++#define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x) ++ ++#endif +diff -Naur --no-dereference a/include/linux/spinlock_types_rt.h b/include/linux/spinlock_types_rt.h +--- a/include/linux/spinlock_types_rt.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/linux/spinlock_types_rt.h 2024-11-24 20:19:38.236228940 -0500 +@@ -0,0 +1,38 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++#ifndef __LINUX_SPINLOCK_TYPES_RT_H ++#define __LINUX_SPINLOCK_TYPES_RT_H ++ ++#ifndef __LINUX_SPINLOCK_TYPES_H ++#error "Do not include directly. Include spinlock_types.h instead" ++#endif ++ ++#include ++ ++/* ++ * PREEMPT_RT: spinlocks - an RT mutex plus lock-break field: ++ */ ++typedef struct spinlock { ++ struct rt_mutex lock; ++ unsigned int break_lock; ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++ struct lockdep_map dep_map; ++#endif ++} spinlock_t; ++ ++#define __RT_SPIN_INITIALIZER(name) \ ++ { \ ++ .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(name.wait_lock), \ ++ .save_state = 1, \ ++ } ++/* ++.wait_list = PLIST_HEAD_INIT_RAW((name).lock.wait_list, (name).lock.wait_lock) ++*/ ++ ++#define __SPIN_LOCK_UNLOCKED(name) \ ++ { .lock = __RT_SPIN_INITIALIZER(name.lock), \ ++ SPIN_DEP_MAP_INIT(name) } ++ ++#define DEFINE_SPINLOCK(name) \ ++ spinlock_t name = __SPIN_LOCK_UNLOCKED(name) ++ ++#endif +diff -Naur --no-dereference a/include/linux/spinlock_types_up.h b/include/linux/spinlock_types_up.h +--- a/include/linux/spinlock_types_up.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/spinlock_types_up.h 2024-11-24 20:19:38.236228940 -0500 +@@ -1,7 +1,7 @@ + #ifndef __LINUX_SPINLOCK_TYPES_UP_H + #define __LINUX_SPINLOCK_TYPES_UP_H + +-#ifndef __LINUX_SPINLOCK_TYPES_H ++#if !defined(__LINUX_SPINLOCK_TYPES_H) && !defined(__LINUX_RT_MUTEX_H) + # error "please don't include this file directly" + #endif + diff -Naur --no-dereference a/include/linux/splice.h b/include/linux/splice.h --- a/include/linux/splice.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/splice.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/splice.h 2024-11-24 20:19:38.236228940 -0500 @@ -93,4 +93,10 @@ extern const struct pipe_buf_operations page_cache_pipe_buf_ops; @@ -464427,9 +475343,38 @@ diff -Naur --no-dereference a/include/linux/splice.h b/include/linux/splice.h + struct pipe_inode_info *pipe, size_t len, + unsigned int flags); #endif +diff -Naur --no-dereference a/include/linux/stop_machine.h b/include/linux/stop_machine.h +--- a/include/linux/stop_machine.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/stop_machine.h 2024-11-24 20:19:38.237228942 -0500 +@@ -24,6 +24,7 @@ + struct cpu_stop_work { + struct list_head list; /* cpu_stopper->works */ + cpu_stop_fn_t fn; ++ unsigned long caller; + void *arg; + struct cpu_stop_done *done; + }; +@@ -36,6 +37,8 @@ + void stop_machine_unpark(int cpu); + void stop_machine_yield(const struct cpumask *cpumask); + ++extern void print_stop_info(const char *log_lvl, struct task_struct *task); ++ + #else /* CONFIG_SMP */ + + #include +@@ -80,6 +83,8 @@ + return false; + } + ++static inline void print_stop_info(const char *log_lvl, struct task_struct *task) { } ++ + #endif /* CONFIG_SMP */ + + /* diff -Naur --no-dereference a/include/linux/string.h b/include/linux/string.h --- a/include/linux/string.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/string.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/string.h 2024-11-24 20:19:38.237228942 -0500 @@ -2,7 +2,6 @@ #ifndef _LINUX_STRING_H_ #define _LINUX_STRING_H_ @@ -464453,7 +475398,7 @@ diff -Naur --no-dereference a/include/linux/string.h b/include/linux/string.h diff -Naur --no-dereference a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h --- a/include/linux/sunrpc/cache.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/sunrpc/cache.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/sunrpc/cache.h 2024-11-24 20:19:38.237228942 -0500 @@ -14,6 +14,7 @@ #include #include @@ -464462,9 +475407,365 @@ diff -Naur --no-dereference a/include/linux/sunrpc/cache.h b/include/linux/sunrp #include /* +diff -Naur --no-dereference a/include/linux/thread_info.h b/include/linux/thread_info.h +--- a/include/linux/thread_info.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/thread_info.h 2024-11-24 20:19:38.237228942 -0500 +@@ -110,7 +110,17 @@ + #define test_thread_flag(flag) \ + test_ti_thread_flag(current_thread_info(), flag) + +-#define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED) ++#ifdef CONFIG_PREEMPT_LAZY ++#define tif_need_resched() (test_thread_flag(TIF_NEED_RESCHED) || \ ++ test_thread_flag(TIF_NEED_RESCHED_LAZY)) ++#define tif_need_resched_now() (test_thread_flag(TIF_NEED_RESCHED)) ++#define tif_need_resched_lazy() test_thread_flag(TIF_NEED_RESCHED_LAZY)) ++ ++#else ++#define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED) ++#define tif_need_resched_now() test_thread_flag(TIF_NEED_RESCHED) ++#define tif_need_resched_lazy() 0 ++#endif + + #ifndef CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES + static inline int arch_within_stack_frames(const void * const stack, +diff -Naur --no-dereference a/include/linux/trace_events.h b/include/linux/trace_events.h +--- a/include/linux/trace_events.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/trace_events.h 2024-11-24 20:19:38.237228942 -0500 +@@ -67,6 +67,8 @@ + unsigned char flags; + unsigned char preempt_count; + int pid; ++ unsigned char migrate_disable; ++ unsigned char preempt_lazy_count; + }; + + #define TRACE_EVENT_TYPE_MAX \ +@@ -148,17 +150,78 @@ + + enum print_line_t trace_handle_return(struct trace_seq *s); + +-void tracing_generic_entry_update(struct trace_entry *entry, +- unsigned short type, +- unsigned long flags, +- int pc); ++static inline void tracing_generic_entry_update(struct trace_entry *entry, ++ unsigned short type, ++ unsigned int trace_ctx) ++{ ++ entry->preempt_count = trace_ctx & 0xff; ++ entry->migrate_disable = (trace_ctx >> 8) & 0xff; ++ entry->preempt_lazy_count = (trace_ctx >> 16) & 0xff; ++ entry->pid = current->pid; ++ entry->type = type; ++ entry->flags = trace_ctx >> 24; ++} ++ ++unsigned int tracing_gen_ctx_irq_test(unsigned int irqs_status); ++ ++enum trace_flag_type { ++ TRACE_FLAG_IRQS_OFF = 0x01, ++ TRACE_FLAG_IRQS_NOSUPPORT = 0x02, ++ TRACE_FLAG_NEED_RESCHED = 0x04, ++ TRACE_FLAG_HARDIRQ = 0x08, ++ TRACE_FLAG_SOFTIRQ = 0x10, ++ TRACE_FLAG_PREEMPT_RESCHED = 0x20, ++ TRACE_FLAG_NMI = 0x40, ++ TRACE_FLAG_NEED_RESCHED_LAZY = 0x80, ++}; ++ ++#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT ++static inline unsigned int tracing_gen_ctx_flags(unsigned long irqflags) ++{ ++ unsigned int irq_status = irqs_disabled_flags(irqflags) ? ++ TRACE_FLAG_IRQS_OFF : 0; ++ return tracing_gen_ctx_irq_test(irq_status); ++} ++static inline unsigned int tracing_gen_ctx(void) ++{ ++ unsigned long irqflags; ++ ++ local_save_flags(irqflags); ++ return tracing_gen_ctx_flags(irqflags); ++} ++#else ++ ++static inline unsigned int tracing_gen_ctx_flags(unsigned long irqflags) ++{ ++ return tracing_gen_ctx_irq_test(TRACE_FLAG_IRQS_NOSUPPORT); ++} ++static inline unsigned int tracing_gen_ctx(void) ++{ ++ return tracing_gen_ctx_irq_test(TRACE_FLAG_IRQS_NOSUPPORT); ++} ++#endif ++ ++static inline unsigned int tracing_gen_ctx_dec(void) ++{ ++ unsigned int trace_ctx; ++ ++ trace_ctx = tracing_gen_ctx(); ++ /* ++ * Subtract one from the preeption counter if preemption is enabled, ++ * see trace_event_buffer_reserve()for details. ++ */ ++ if (IS_ENABLED(CONFIG_PREEMPTION)) ++ trace_ctx--; ++ return trace_ctx; ++} ++ + struct trace_event_file; + + struct ring_buffer_event * + trace_event_buffer_lock_reserve(struct trace_buffer **current_buffer, + struct trace_event_file *trace_file, + int type, unsigned long len, +- unsigned long flags, int pc); ++ unsigned int trace_ctx); + + #define TRACE_RECORD_CMDLINE BIT(0) + #define TRACE_RECORD_TGID BIT(1) +@@ -232,8 +295,7 @@ + struct ring_buffer_event *event; + struct trace_event_file *trace_file; + void *entry; +- unsigned long flags; +- int pc; ++ unsigned int trace_ctx; + struct pt_regs *regs; + }; + +diff -Naur --no-dereference a/include/linux/u64_stats_sync.h b/include/linux/u64_stats_sync.h +--- a/include/linux/u64_stats_sync.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/u64_stats_sync.h 2024-11-24 20:19:38.237228942 -0500 +@@ -66,7 +66,7 @@ + #include + + struct u64_stats_sync { +-#if BITS_PER_LONG==32 && defined(CONFIG_SMP) ++#if BITS_PER_LONG==32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) + seqcount_t seq; + #endif + }; +@@ -115,7 +115,7 @@ + } + #endif + +-#if BITS_PER_LONG == 32 && defined(CONFIG_SMP) ++#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) + #define u64_stats_init(syncp) seqcount_init(&(syncp)->seq) + #else + static inline void u64_stats_init(struct u64_stats_sync *syncp) +@@ -125,15 +125,19 @@ + + static inline void u64_stats_update_begin(struct u64_stats_sync *syncp) + { +-#if BITS_PER_LONG==32 && defined(CONFIG_SMP) ++#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) ++ preempt_disable(); + write_seqcount_begin(&syncp->seq); + #endif + } + + static inline void u64_stats_update_end(struct u64_stats_sync *syncp) + { +-#if BITS_PER_LONG==32 && defined(CONFIG_SMP) ++#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) + write_seqcount_end(&syncp->seq); ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) ++ preempt_enable(); + #endif + } + +@@ -142,8 +146,11 @@ + { + unsigned long flags = 0; + +-#if BITS_PER_LONG==32 && defined(CONFIG_SMP) +- local_irq_save(flags); ++#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) ++ preempt_disable(); ++ else ++ local_irq_save(flags); + write_seqcount_begin(&syncp->seq); + #endif + return flags; +@@ -153,15 +160,18 @@ + u64_stats_update_end_irqrestore(struct u64_stats_sync *syncp, + unsigned long flags) + { +-#if BITS_PER_LONG==32 && defined(CONFIG_SMP) ++#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) + write_seqcount_end(&syncp->seq); +- local_irq_restore(flags); ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) ++ preempt_enable(); ++ else ++ local_irq_restore(flags); + #endif + } + + static inline unsigned int __u64_stats_fetch_begin(const struct u64_stats_sync *syncp) + { +-#if BITS_PER_LONG==32 && defined(CONFIG_SMP) ++#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) + return read_seqcount_begin(&syncp->seq); + #else + return 0; +@@ -170,7 +180,7 @@ + + static inline unsigned int u64_stats_fetch_begin(const struct u64_stats_sync *syncp) + { +-#if BITS_PER_LONG==32 && !defined(CONFIG_SMP) ++#if BITS_PER_LONG == 32 && (!defined(CONFIG_SMP) && !defined(CONFIG_PREEMPT_RT)) + preempt_disable(); + #endif + return __u64_stats_fetch_begin(syncp); +@@ -179,7 +189,7 @@ + static inline bool __u64_stats_fetch_retry(const struct u64_stats_sync *syncp, + unsigned int start) + { +-#if BITS_PER_LONG==32 && defined(CONFIG_SMP) ++#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) + return read_seqcount_retry(&syncp->seq, start); + #else + return false; +@@ -189,7 +199,7 @@ + static inline bool u64_stats_fetch_retry(const struct u64_stats_sync *syncp, + unsigned int start) + { +-#if BITS_PER_LONG==32 && !defined(CONFIG_SMP) ++#if BITS_PER_LONG == 32 && (!defined(CONFIG_SMP) && !defined(CONFIG_PREEMPT_RT)) + preempt_enable(); + #endif + return __u64_stats_fetch_retry(syncp, start); +@@ -203,7 +213,9 @@ + */ + static inline unsigned int u64_stats_fetch_begin_irq(const struct u64_stats_sync *syncp) + { +-#if BITS_PER_LONG==32 && !defined(CONFIG_SMP) ++#if BITS_PER_LONG == 32 && defined(CONFIG_PREEMPT_RT) ++ preempt_disable(); ++#elif BITS_PER_LONG == 32 && !defined(CONFIG_SMP) + local_irq_disable(); + #endif + return __u64_stats_fetch_begin(syncp); +@@ -212,7 +224,9 @@ + static inline bool u64_stats_fetch_retry_irq(const struct u64_stats_sync *syncp, + unsigned int start) + { +-#if BITS_PER_LONG==32 && !defined(CONFIG_SMP) ++#if BITS_PER_LONG == 32 && defined(CONFIG_PREEMPT_RT) ++ preempt_enable(); ++#elif BITS_PER_LONG == 32 && !defined(CONFIG_SMP) + local_irq_enable(); + #endif + return __u64_stats_fetch_retry(syncp, start); +diff -Naur --no-dereference a/include/linux/vmstat.h b/include/linux/vmstat.h +--- a/include/linux/vmstat.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/vmstat.h 2024-11-24 20:19:38.237228942 -0500 +@@ -63,7 +63,9 @@ + */ + static inline void __count_vm_event(enum vm_event_item item) + { ++ preempt_disable_rt(); + raw_cpu_inc(vm_event_states.event[item]); ++ preempt_enable_rt(); + } + + static inline void count_vm_event(enum vm_event_item item) +@@ -73,7 +75,9 @@ + + static inline void __count_vm_events(enum vm_event_item item, long delta) + { ++ preempt_disable_rt(); + raw_cpu_add(vm_event_states.event[item], delta); ++ preempt_enable_rt(); + } + + static inline void count_vm_events(enum vm_event_item item, long delta) +diff -Naur --no-dereference a/include/linux/vtime.h b/include/linux/vtime.h +--- a/include/linux/vtime.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/vtime.h 2024-11-24 20:19:38.237228942 -0500 +@@ -83,36 +83,46 @@ + #endif + + #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE +-extern void vtime_account_irq_enter(struct task_struct *tsk); +-static inline void vtime_account_irq_exit(struct task_struct *tsk) +-{ +- /* On hard|softirq exit we always account to hard|softirq cputime */ +- vtime_account_kernel(tsk); +-} ++extern void vtime_account_irq(struct task_struct *tsk, unsigned int offset); ++extern void vtime_account_softirq(struct task_struct *tsk); ++extern void vtime_account_hardirq(struct task_struct *tsk); + extern void vtime_flush(struct task_struct *tsk); + #else /* !CONFIG_VIRT_CPU_ACCOUNTING_NATIVE */ +-static inline void vtime_account_irq_enter(struct task_struct *tsk) { } +-static inline void vtime_account_irq_exit(struct task_struct *tsk) { } ++static inline void vtime_account_irq(struct task_struct *tsk, unsigned int offset) { } ++static inline void vtime_account_softirq(struct task_struct *tsk) { } ++static inline void vtime_account_hardirq(struct task_struct *tsk) { } + static inline void vtime_flush(struct task_struct *tsk) { } + #endif + + + #ifdef CONFIG_IRQ_TIME_ACCOUNTING +-extern void irqtime_account_irq(struct task_struct *tsk); ++extern void irqtime_account_irq(struct task_struct *tsk, unsigned int offset); + #else +-static inline void irqtime_account_irq(struct task_struct *tsk) { } ++static inline void irqtime_account_irq(struct task_struct *tsk, unsigned int offset) { } + #endif + +-static inline void account_irq_enter_time(struct task_struct *tsk) ++static inline void account_softirq_enter(struct task_struct *tsk) ++{ ++ vtime_account_irq(tsk, SOFTIRQ_OFFSET); ++ irqtime_account_irq(tsk, SOFTIRQ_OFFSET); ++} ++ ++static inline void account_softirq_exit(struct task_struct *tsk) ++{ ++ vtime_account_softirq(tsk); ++ irqtime_account_irq(tsk, 0); ++} ++ ++static inline void account_hardirq_enter(struct task_struct *tsk) + { +- vtime_account_irq_enter(tsk); +- irqtime_account_irq(tsk); ++ vtime_account_irq(tsk, HARDIRQ_OFFSET); ++ irqtime_account_irq(tsk, HARDIRQ_OFFSET); + } + +-static inline void account_irq_exit_time(struct task_struct *tsk) ++static inline void account_hardirq_exit(struct task_struct *tsk) + { +- vtime_account_irq_exit(tsk); +- irqtime_account_irq(tsk); ++ vtime_account_hardirq(tsk); ++ irqtime_account_irq(tsk, 0); + } + + #endif /* _LINUX_KERNEL_VTIME_H */ +diff -Naur --no-dereference a/include/linux/wait.h b/include/linux/wait.h +--- a/include/linux/wait.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/wait.h 2024-11-24 20:19:38.237228942 -0500 +@@ -10,6 +10,7 @@ + + #include + #include ++#include + + typedef struct wait_queue_entry wait_queue_entry_t; + diff -Naur --no-dereference a/include/linux/wkup_m3_ipc.h b/include/linux/wkup_m3_ipc.h --- a/include/linux/wkup_m3_ipc.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/linux/wkup_m3_ipc.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/linux/wkup_m3_ipc.h 2024-11-24 20:19:38.237228942 -0500 @@ -33,7 +33,13 @@ int mem_type; @@ -464500,9 +475801,27 @@ diff -Naur --no-dereference a/include/linux/wkup_m3_ipc.h b/include/linux/wkup_m struct wkup_m3_ipc_ops { void (*set_mem_type)(struct wkup_m3_ipc *m3_ipc, int mem_type); void (*set_resume_address)(struct wkup_m3_ipc *m3_ipc, void *addr); +diff -Naur --no-dereference a/include/linux/ww_mutex.h b/include/linux/ww_mutex.h +--- a/include/linux/ww_mutex.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/linux/ww_mutex.h 2024-11-24 20:19:38.237228942 -0500 +@@ -28,6 +28,14 @@ + unsigned int is_wait_die; + }; + ++struct ww_mutex { ++ struct mutex base; ++ struct ww_acquire_ctx *ctx; ++#ifdef CONFIG_DEBUG_MUTEXES ++ struct ww_class *ww_class; ++#endif ++}; ++ + struct ww_acquire_ctx { + struct task_struct *task; + unsigned long stamp; diff -Naur --no-dereference a/include/media/cec.h b/include/media/cec.h --- a/include/media/cec.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/cec.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/cec.h 2024-11-24 20:19:38.238228944 -0500 @@ -28,8 +28,8 @@ * @minor: device node minor number * @registered: the device was correctly registered @@ -464515,7 +475834,7 @@ diff -Naur --no-dereference a/include/media/cec.h b/include/media/cec.h * diff -Naur --no-dereference a/include/media/dvbdev.h b/include/media/dvbdev.h --- a/include/media/dvbdev.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/dvbdev.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/dvbdev.h 2024-11-24 20:19:38.238228944 -0500 @@ -325,7 +325,7 @@ int dvb_generic_open(struct inode *inode, struct file *file); @@ -464527,7 +475846,7 @@ diff -Naur --no-dereference a/include/media/dvbdev.h b/include/media/dvbdev.h * @file: pointer to &struct file. diff -Naur --no-dereference a/include/media/media-entity.h b/include/media/media-entity.h --- a/include/media/media-entity.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/media-entity.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/media-entity.h 2024-11-24 20:19:38.238228944 -0500 @@ -78,16 +78,16 @@ * struct media_graph - Media graph traversal state * @@ -464808,7 +476127,7 @@ diff -Naur --no-dereference a/include/media/media-entity.h b/include/media/media + ++iter) diff -Naur --no-dereference a/include/media/v4l2-common.h b/include/media/v4l2-common.h --- a/include/media/v4l2-common.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/v4l2-common.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/v4l2-common.h 2024-11-24 20:19:38.238228944 -0500 @@ -520,6 +520,27 @@ int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt, u32 pixelformat, u32 width, u32 height); @@ -464839,7 +476158,7 @@ diff -Naur --no-dereference a/include/media/v4l2-common.h b/include/media/v4l2-c /* diff -Naur --no-dereference a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h --- a/include/media/v4l2-ctrls.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/v4l2-ctrls.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/v4l2-ctrls.h 2024-11-24 20:19:38.238228944 -0500 @@ -1294,7 +1294,7 @@ } @@ -464851,7 +476170,7 @@ diff -Naur --no-dereference a/include/media/v4l2-ctrls.h b/include/media/v4l2-ct * @id: The ID of the control to find. diff -Naur --no-dereference a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h --- a/include/media/v4l2-dev.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/v4l2-dev.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/v4l2-dev.h 2024-11-24 20:19:38.238228944 -0500 @@ -43,8 +43,8 @@ }; @@ -464865,7 +476184,7 @@ diff -Naur --no-dereference a/include/media/v4l2-dev.h b/include/media/v4l2-dev. * @VFL_DIR_TX: device is a transmitter. diff -Naur --no-dereference a/include/media/v4l2-device.h b/include/media/v4l2-device.h --- a/include/media/v4l2-device.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/v4l2-device.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/v4l2-device.h 2024-11-24 20:19:38.238228944 -0500 @@ -174,7 +174,7 @@ void v4l2_device_unregister_subdev(struct v4l2_subdev *sd); @@ -464877,7 +476196,7 @@ diff -Naur --no-dereference a/include/media/v4l2-device.h b/include/media/v4l2-d * diff -Naur --no-dereference a/include/media/v4l2-dv-timings.h b/include/media/v4l2-dv-timings.h --- a/include/media/v4l2-dv-timings.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/v4l2-dv-timings.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/v4l2-dv-timings.h 2024-11-24 20:19:38.238228944 -0500 @@ -224,7 +224,7 @@ } @@ -464889,7 +476208,7 @@ diff -Naur --no-dereference a/include/media/v4l2-dv-timings.h b/include/media/v4 * @quantization: enum v4l2_quantization, colorspace quantization diff -Naur --no-dereference a/include/media/v4l2-fwnode.h b/include/media/v4l2-fwnode.h --- a/include/media/v4l2-fwnode.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/v4l2-fwnode.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/v4l2-fwnode.h 2024-11-24 20:19:38.238228944 -0500 @@ -520,7 +520,7 @@ parse_endpoint_func parse_endpoint); @@ -464901,7 +476220,7 @@ diff -Naur --no-dereference a/include/media/v4l2-fwnode.h b/include/media/v4l2-f * @notifier: the async notifier where the async subdevs will be added diff -Naur --no-dereference a/include/media/v4l2-h264.h b/include/media/v4l2-h264.h --- a/include/media/v4l2-h264.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/v4l2-h264.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/v4l2-h264.h 2024-11-24 20:19:38.238228944 -0500 @@ -66,11 +66,11 @@ u8 *b0_reflist, u8 *b1_reflist); @@ -464919,7 +476238,7 @@ diff -Naur --no-dereference a/include/media/v4l2-h264.h b/include/media/v4l2-h26 * section '8.2.4 Decoding process for reference picture lists construction' diff -Naur --no-dereference a/include/media/v4l2-jpeg.h b/include/media/v4l2-jpeg.h --- a/include/media/v4l2-jpeg.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/v4l2-jpeg.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/v4l2-jpeg.h 2024-11-24 20:19:38.238228944 -0500 @@ -91,7 +91,9 @@ * struct v4l2_jpeg_header - parsed JPEG header * @sof: pointer to frame header and size @@ -464932,7 +476251,7 @@ diff -Naur --no-dereference a/include/media/v4l2-jpeg.h b/include/media/v4l2-jpe * @scan: pointer to parsed scan header, optional diff -Naur --no-dereference a/include/media/v4l2-mediabus.h b/include/media/v4l2-mediabus.h --- a/include/media/v4l2-mediabus.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/v4l2-mediabus.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/v4l2-mediabus.h 2024-11-24 20:19:38.238228944 -0500 @@ -147,7 +147,7 @@ } @@ -464962,7 +476281,7 @@ diff -Naur --no-dereference a/include/media/v4l2-mediabus.h b/include/media/v4l2 * @mbus_fmt: pointer to &struct v4l2_mbus_framefmt to be filled diff -Naur --no-dereference a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h --- a/include/media/v4l2-subdev.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/v4l2-subdev.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/v4l2-subdev.h 2024-11-24 20:19:38.238228944 -0500 @@ -313,7 +313,18 @@ }; @@ -465568,7 +476887,7 @@ diff -Naur --no-dereference a/include/media/v4l2-subdev.h b/include/media/v4l2-s #endif diff -Naur --no-dereference a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h --- a/include/media/videobuf2-core.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/media/videobuf2-core.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/media/videobuf2-core.h 2024-11-24 20:19:38.239228946 -0500 @@ -19,7 +19,7 @@ #include #include @@ -465589,7 +476908,7 @@ diff -Naur --no-dereference a/include/media/videobuf2-core.h b/include/media/vid * @count: number of bytes to write diff -Naur --no-dereference a/include/net/cfg80211.h b/include/net/cfg80211.h --- a/include/net/cfg80211.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/net/cfg80211.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/net/cfg80211.h 2024-11-24 20:19:38.239228946 -0500 @@ -4326,6 +4326,7 @@ WIPHY_FLAG_SUPPORTS_5_10_MHZ = BIT(22), WIPHY_FLAG_HAS_CHANNEL_SWITCH = BIT(23), @@ -465716,9 +477035,55 @@ diff -Naur --no-dereference a/include/net/cfg80211.h b/include/net/cfg80211.h /* Logging, debugging and troubleshooting/diagnostic helpers. */ +diff -Naur --no-dereference a/include/net/gen_stats.h b/include/net/gen_stats.h +--- a/include/net/gen_stats.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/net/gen_stats.h 2024-11-24 20:19:38.239228946 -0500 +@@ -6,6 +6,7 @@ + #include + #include + #include ++#include + + /* Note: this used to be in include/uapi/linux/gen_stats.h */ + struct gnet_stats_basic_packed { +@@ -42,15 +43,15 @@ + spinlock_t *lock, struct gnet_dump *d, + int padattr); + +-int gnet_stats_copy_basic(const seqcount_t *running, ++int gnet_stats_copy_basic(net_seqlock_t *running, + struct gnet_dump *d, + struct gnet_stats_basic_cpu __percpu *cpu, + struct gnet_stats_basic_packed *b); +-void __gnet_stats_copy_basic(const seqcount_t *running, ++void __gnet_stats_copy_basic(net_seqlock_t *running, + struct gnet_stats_basic_packed *bstats, + struct gnet_stats_basic_cpu __percpu *cpu, + struct gnet_stats_basic_packed *b); +-int gnet_stats_copy_basic_hw(const seqcount_t *running, ++int gnet_stats_copy_basic_hw(net_seqlock_t *running, + struct gnet_dump *d, + struct gnet_stats_basic_cpu __percpu *cpu, + struct gnet_stats_basic_packed *b); +@@ -70,13 +71,13 @@ + struct gnet_stats_basic_cpu __percpu *cpu_bstats, + struct net_rate_estimator __rcu **rate_est, + spinlock_t *lock, +- seqcount_t *running, struct nlattr *opt); ++ net_seqlock_t *running, struct nlattr *opt); + void gen_kill_estimator(struct net_rate_estimator __rcu **ptr); + int gen_replace_estimator(struct gnet_stats_basic_packed *bstats, + struct gnet_stats_basic_cpu __percpu *cpu_bstats, + struct net_rate_estimator __rcu **ptr, + spinlock_t *lock, +- seqcount_t *running, struct nlattr *opt); ++ net_seqlock_t *running, struct nlattr *opt); + bool gen_estimator_active(struct net_rate_estimator __rcu **ptr); + bool gen_estimator_read(struct net_rate_estimator __rcu **ptr, + struct gnet_stats_rate_est64 *sample); diff -Naur --no-dereference a/include/net/lredev.h b/include/net/lredev.h --- a/include/net/lredev.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/net/lredev.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/net/lredev.h 2024-11-24 20:19:38.239228946 -0500 @@ -0,0 +1,131 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* @@ -465851,9 +477216,117 @@ diff -Naur --no-dereference a/include/net/lredev.h b/include/net/lredev.h +}; + +#endif +diff -Naur --no-dereference a/include/net/netns/xfrm.h b/include/net/netns/xfrm.h +--- a/include/net/netns/xfrm.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/net/netns/xfrm.h 2024-11-24 20:19:38.240228947 -0500 +@@ -76,7 +76,7 @@ + struct dst_ops xfrm6_dst_ops; + #endif + spinlock_t xfrm_state_lock; +- seqcount_t xfrm_state_hash_generation; ++ seqcount_spinlock_t xfrm_state_hash_generation; + seqcount_spinlock_t xfrm_policy_hash_generation; + + spinlock_t xfrm_policy_lock; +diff -Naur --no-dereference a/include/net/net_seq_lock.h b/include/net/net_seq_lock.h +--- a/include/net/net_seq_lock.h 1969-12-31 19:00:00.000000000 -0500 ++++ b/include/net/net_seq_lock.h 2024-11-24 20:19:38.239228946 -0500 +@@ -0,0 +1,15 @@ ++#ifndef __NET_NET_SEQ_LOCK_H__ ++#define __NET_NET_SEQ_LOCK_H__ ++ ++#ifdef CONFIG_PREEMPT_RT ++# define net_seqlock_t seqlock_t ++# define net_seq_begin(__r) read_seqbegin(__r) ++# define net_seq_retry(__r, __s) read_seqretry(__r, __s) ++ ++#else ++# define net_seqlock_t seqcount_t ++# define net_seq_begin(__r) read_seqcount_begin(__r) ++# define net_seq_retry(__r, __s) read_seqcount_retry(__r, __s) ++#endif ++ ++#endif +diff -Naur --no-dereference a/include/net/sch_generic.h b/include/net/sch_generic.h +--- a/include/net/sch_generic.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/net/sch_generic.h 2024-11-24 20:19:38.240228947 -0500 +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -101,7 +102,7 @@ + struct sk_buff_head gso_skb ____cacheline_aligned_in_smp; + struct qdisc_skb_head q; + struct gnet_stats_basic_packed bstats; +- seqcount_t running; ++ net_seqlock_t running; + struct gnet_stats_queue qstats; + unsigned long state; + struct Qdisc *next_sched; +@@ -142,7 +143,11 @@ + { + if (qdisc->flags & TCQ_F_NOLOCK) + return spin_is_locked(&qdisc->seqlock); ++#ifdef CONFIG_PREEMPT_RT ++ return spin_is_locked(&qdisc->running.lock) ? true : false; ++#else + return (raw_read_seqcount(&qdisc->running) & 1) ? true : false; ++#endif + } + + static inline bool qdisc_is_percpu_stats(const struct Qdisc *q) +@@ -183,17 +188,35 @@ + } else if (qdisc_is_running(qdisc)) { + return false; + } ++#ifdef CONFIG_PREEMPT_RT ++ if (spin_trylock(&qdisc->running.lock)) { ++ seqcount_t *s = &qdisc->running.seqcount.seqcount; ++ /* ++ * Variant of write_seqcount_t_begin() telling lockdep that a ++ * trylock was attempted. ++ */ ++ raw_write_seqcount_t_begin(s); ++ seqcount_acquire(&s->dep_map, 0, 1, _RET_IP_); ++ return true; ++ } ++ return false; ++#else + /* Variant of write_seqcount_begin() telling lockdep a trylock + * was attempted. + */ + raw_write_seqcount_begin(&qdisc->running); + seqcount_acquire(&qdisc->running.dep_map, 0, 1, _RET_IP_); + return true; ++#endif + } + + static inline void qdisc_run_end(struct Qdisc *qdisc) + { ++#ifdef CONFIG_PREEMPT_RT ++ write_sequnlock(&qdisc->running); ++#else + write_seqcount_end(&qdisc->running); ++#endif + if (qdisc->flags & TCQ_F_NOLOCK) { + spin_unlock(&qdisc->seqlock); + +@@ -583,7 +606,7 @@ + return qdisc_lock(root); + } + +-static inline seqcount_t *qdisc_root_sleeping_running(const struct Qdisc *qdisc) ++static inline net_seqlock_t *qdisc_root_sleeping_running(const struct Qdisc *qdisc) + { + struct Qdisc *root = qdisc_root_sleeping(qdisc); + diff -Naur --no-dereference a/include/net/sock.h b/include/net/sock.h --- a/include/net/sock.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/net/sock.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/net/sock.h 2024-11-24 20:19:38.240228947 -0500 @@ -1723,12 +1723,14 @@ u64 transmit_time; u32 mark; @@ -465910,9 +477383,31 @@ diff -Naur --no-dereference a/include/net/sock.h b/include/net/sock.h /** * sk_eat_skb - Release a skb if it is no longer needed * @sk: socket to eat this skb from +diff -Naur --no-dereference a/include/trace/events/sched.h b/include/trace/events/sched.h +--- a/include/trace/events/sched.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/include/trace/events/sched.h 2024-11-24 20:19:38.240228947 -0500 +@@ -650,6 +650,18 @@ + TP_PROTO(struct rq *rq, int change), + TP_ARGS(rq, change)); + ++DECLARE_TRACE(sched_migrate_disable_tp, ++ TP_PROTO(struct task_struct *p), ++ TP_ARGS(p)); ++ ++DECLARE_TRACE(sched_migrate_enable_tp, ++ TP_PROTO(struct task_struct *p), ++ TP_ARGS(p)); ++ ++DECLARE_TRACE(sched_migrate_pull_tp, ++ TP_PROTO(struct task_struct *p), ++ TP_ARGS(p)); ++ + #endif /* _TRACE_SCHED_H */ + + /* This part must be outside protection */ diff -Naur --no-dereference a/include/uapi/asm-generic/socket.h b/include/uapi/asm-generic/socket.h --- a/include/uapi/asm-generic/socket.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/uapi/asm-generic/socket.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/uapi/asm-generic/socket.h 2024-11-24 20:19:38.240228947 -0500 @@ -144,4 +144,10 @@ #endif @@ -465926,7 +477421,7 @@ diff -Naur --no-dereference a/include/uapi/asm-generic/socket.h b/include/uapi/a #endif /* __ASM_GENERIC_SOCKET_H */ diff -Naur --no-dereference a/include/uapi/linux/aufs_type.h b/include/uapi/linux/aufs_type.h --- a/include/uapi/linux/aufs_type.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/uapi/linux/aufs_type.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/uapi/linux/aufs_type.h 2024-11-24 20:19:38.240228947 -0500 @@ -0,0 +1,452 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* @@ -466382,7 +477877,7 @@ diff -Naur --no-dereference a/include/uapi/linux/aufs_type.h b/include/uapi/linu +#endif /* __AUFS_TYPE_H__ */ diff -Naur --no-dereference a/include/uapi/linux/cec.h b/include/uapi/linux/cec.h --- a/include/uapi/linux/cec.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/uapi/linux/cec.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/uapi/linux/cec.h 2024-11-24 20:19:38.240228947 -0500 @@ -396,6 +396,7 @@ * associated with the CEC adapter. * @type: connector type (if any) @@ -466402,7 +477897,7 @@ diff -Naur --no-dereference a/include/uapi/linux/cec.h b/include/uapi/linux/cec. * @raw: array to pad the union. diff -Naur --no-dereference a/include/uapi/linux/counter.h b/include/uapi/linux/counter.h --- a/include/uapi/linux/counter.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/uapi/linux/counter.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/uapi/linux/counter.h 2024-11-24 20:19:38.240228947 -0500 @@ -0,0 +1,158 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* @@ -466564,7 +478059,7 @@ diff -Naur --no-dereference a/include/uapi/linux/counter.h b/include/uapi/linux/ +#endif /* _UAPI_COUNTER_H_ */ diff -Naur --no-dereference a/include/uapi/linux/dma_buf_phys.h b/include/uapi/linux/dma_buf_phys.h --- a/include/uapi/linux/dma_buf_phys.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/uapi/linux/dma_buf_phys.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/uapi/linux/dma_buf_phys.h 2024-11-24 20:19:38.240228947 -0500 @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* @@ -466603,7 +478098,7 @@ diff -Naur --no-dereference a/include/uapi/linux/dma_buf_phys.h b/include/uapi/l +#endif /* DMA_BUF_PHYS_H */ diff -Naur --no-dereference a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h --- a/include/uapi/linux/if_link.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/uapi/linux/if_link.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/uapi/linux/if_link.h 2024-11-24 20:19:38.240228947 -0500 @@ -1106,6 +1106,9 @@ IFLA_HSR_PROTOCOL, /* Indicate different protocol than * HSR. For example PRP. @@ -466616,7 +478111,7 @@ diff -Naur --no-dereference a/include/uapi/linux/if_link.h b/include/uapi/linux/ diff -Naur --no-dereference a/include/uapi/linux/keystone_dsp_mem.h b/include/uapi/linux/keystone_dsp_mem.h --- a/include/uapi/linux/keystone_dsp_mem.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/uapi/linux/keystone_dsp_mem.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/uapi/linux/keystone_dsp_mem.h 2024-11-24 20:19:38.240228947 -0500 @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: ((GPL-2.0-only WITH Linux-syscall-note) OR BSD-3-Clause) */ +/* @@ -466632,7 +478127,7 @@ diff -Naur --no-dereference a/include/uapi/linux/keystone_dsp_mem.h b/include/ua +#endif /* _UAPI_KEYSTONE_DSP_MEM_H_ */ diff -Naur --no-dereference a/include/uapi/linux/keystone_remoteproc.h b/include/uapi/linux/keystone_remoteproc.h --- a/include/uapi/linux/keystone_remoteproc.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/uapi/linux/keystone_remoteproc.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/uapi/linux/keystone_remoteproc.h 2024-11-24 20:19:38.241228949 -0500 @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: ((GPL-2.0-only WITH Linux-syscall-note) OR BSD-3-Clause) */ +/* @@ -466692,7 +478187,7 @@ diff -Naur --no-dereference a/include/uapi/linux/keystone_remoteproc.h b/include +#endif /* _UAPI_LINUX_KEYSTONE_REMOTEPROC_H_ */ diff -Naur --no-dereference a/include/uapi/linux/media-bus-format.h b/include/uapi/linux/media-bus-format.h --- a/include/uapi/linux/media-bus-format.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/uapi/linux/media-bus-format.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/uapi/linux/media-bus-format.h 2024-11-24 20:19:38.241228949 -0500 @@ -111,7 +111,7 @@ #define MEDIA_BUS_FMT_YUV16_1X48 0x202a #define MEDIA_BUS_FMT_UYYVYY16_0_5X48 0x202b @@ -466719,7 +478214,7 @@ diff -Naur --no-dereference a/include/uapi/linux/media-bus-format.h b/include/ua #define MEDIA_BUS_FMT_JPEG_1X8 0x4001 diff -Naur --no-dereference a/include/uapi/linux/net_switch_config.h b/include/uapi/linux/net_switch_config.h --- a/include/uapi/linux/net_switch_config.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/uapi/linux/net_switch_config.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/uapi/linux/net_switch_config.h 2024-11-24 20:19:38.241228949 -0500 @@ -0,0 +1,67 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* @@ -466790,7 +478285,7 @@ diff -Naur --no-dereference a/include/uapi/linux/net_switch_config.h b/include/u +#endif /* __NET_CONFIG_SWITCH_H__*/ diff -Naur --no-dereference a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h --- a/include/uapi/linux/nl80211.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/uapi/linux/nl80211.h 2024-08-28 19:44:05.664038247 -0400 ++++ b/include/uapi/linux/nl80211.h 2024-11-24 20:19:38.241228949 -0500 @@ -2384,7 +2384,10 @@ * in %NL80211_CMD_CONNECT to indicate that for 802.1X authentication it * wants to use the supported offload of the 4-way handshake. @@ -466813,7 +478308,7 @@ diff -Naur --no-dereference a/include/uapi/linux/nl80211.h b/include/uapi/linux/ NUM_NL80211_EXT_FEATURES, diff -Naur --no-dereference a/include/uapi/linux/rpmsg_rpc.h b/include/uapi/linux/rpmsg_rpc.h --- a/include/uapi/linux/rpmsg_rpc.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/uapi/linux/rpmsg_rpc.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/include/uapi/linux/rpmsg_rpc.h 2024-11-24 20:19:38.241228949 -0500 @@ -0,0 +1,188 @@ +/* SPDX-License-Identifier: ((GPL-2.0-only WITH Linux-syscall-note) OR BSD-3-Clause) */ +/* @@ -467005,7 +478500,7 @@ diff -Naur --no-dereference a/include/uapi/linux/rpmsg_rpc.h b/include/uapi/linu +#endif /* _UAPI_LINUX_RPMSG_RPC_H_ */ diff -Naur --no-dereference a/include/uapi/linux/rpmsg_socket.h b/include/uapi/linux/rpmsg_socket.h --- a/include/uapi/linux/rpmsg_socket.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/uapi/linux/rpmsg_socket.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/include/uapi/linux/rpmsg_socket.h 2024-11-24 20:19:38.241228949 -0500 @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */ +/* @@ -467040,7 +478535,7 @@ diff -Naur --no-dereference a/include/uapi/linux/rpmsg_socket.h b/include/uapi/l +#endif /* _UAPI_RPMSG_SOCKET_H */ diff -Naur --no-dereference a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h --- a/include/uapi/linux/serial_core.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/uapi/linux/serial_core.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/include/uapi/linux/serial_core.h 2024-11-24 20:19:38.241228949 -0500 @@ -279,4 +279,7 @@ /* Freescale LINFlexD UART */ #define PORT_LINFLEXUART 122 @@ -467051,7 +478546,7 @@ diff -Naur --no-dereference a/include/uapi/linux/serial_core.h b/include/uapi/li #endif /* _UAPILINUX_SERIAL_CORE_H */ diff -Naur --no-dereference a/include/uapi/linux/sockios.h b/include/uapi/linux/sockios.h --- a/include/uapi/linux/sockios.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/uapi/linux/sockios.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/include/uapi/linux/sockios.h 2024-11-24 20:19:38.242228951 -0500 @@ -153,6 +153,9 @@ #define SIOCSHWTSTAMP 0x89b0 /* set and get config */ #define SIOCGHWTSTAMP 0x89b1 /* get config */ @@ -467064,7 +478559,7 @@ diff -Naur --no-dereference a/include/uapi/linux/sockios.h b/include/uapi/linux/ /* diff -Naur --no-dereference a/include/uapi/linux/ti-pat.h b/include/uapi/linux/ti-pat.h --- a/include/uapi/linux/ti-pat.h 1969-12-31 19:00:00.000000000 -0500 -+++ b/include/uapi/linux/ti-pat.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/include/uapi/linux/ti-pat.h 2024-11-24 20:19:38.242228951 -0500 @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* @@ -467112,7 +478607,7 @@ diff -Naur --no-dereference a/include/uapi/linux/ti-pat.h b/include/uapi/linux/t +#endif /* _UAPI_LINUX_TI_PAT_H */ diff -Naur --no-dereference a/include/uapi/linux/v4l2-subdev.h b/include/uapi/linux/v4l2-subdev.h --- a/include/uapi/linux/v4l2-subdev.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/uapi/linux/v4l2-subdev.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/include/uapi/linux/v4l2-subdev.h 2024-11-24 20:19:38.242228951 -0500 @@ -44,12 +44,15 @@ * @which: format type (from enum v4l2_subdev_format_whence) * @pad: pad number, as reported by the media API @@ -467319,7 +478814,7 @@ diff -Naur --no-dereference a/include/uapi/linux/v4l2-subdev.h b/include/uapi/li #define VIDIOC_SUBDEV_S_STD _IOW('V', 24, v4l2_std_id) diff -Naur --no-dereference a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h --- a/include/uapi/linux/videodev2.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/include/uapi/linux/videodev2.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/include/uapi/linux/videodev2.h 2024-11-24 20:19:38.242228951 -0500 @@ -70,7 +70,7 @@ * Common stuff for both V4L1 and V4L2 * Moved from videodev.h @@ -467433,10 +478928,524 @@ diff -Naur --no-dereference a/include/uapi/linux/videodev2.h b/include/uapi/linu */ struct v4l2_format { __u32 type; +diff -Naur --no-dereference a/init/Kconfig b/init/Kconfig +--- a/init/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/init/Kconfig 2024-11-24 20:19:38.242228951 -0500 +@@ -866,7 +866,7 @@ + bool "Memory placement aware NUMA scheduler" + depends on ARCH_SUPPORTS_NUMA_BALANCING + depends on !ARCH_WANT_NUMA_VARIABLE_LOCALITY +- depends on SMP && NUMA && MIGRATION ++ depends on SMP && NUMA && MIGRATION && !PREEMPT_RT + help + This option adds support for automatic NUMA aware memory/task placement. + The mechanism is quite primitive and is based on migrating memory when +@@ -973,6 +973,7 @@ + config RT_GROUP_SCHED + bool "Group scheduling for SCHED_RR/FIFO" + depends on CGROUP_SCHED ++ depends on !PREEMPT_RT + default n + help + This feature lets you explicitly allocate real CPU bandwidth +@@ -1910,6 +1911,7 @@ + + config SLAB + bool "SLAB" ++ depends on !PREEMPT_RT + select HAVE_HARDENED_USERCOPY_ALLOCATOR + help + The regular slab allocator that is established and known to work +@@ -1930,6 +1932,7 @@ + config SLOB + depends on EXPERT + bool "SLOB (Simple Allocator)" ++ depends on !PREEMPT_RT + help + SLOB replaces the stock allocator with a drastically simpler + allocator. SLOB is generally more space efficient but +@@ -1996,7 +1999,7 @@ + + config SLUB_CPU_PARTIAL + default y +- depends on SLUB && SMP ++ depends on SLUB && SMP && !PREEMPT_RT + bool "SLUB per cpu partial cache" + help + Per cpu partial caches accelerate objects allocation and freeing +diff -Naur --no-dereference a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c +--- a/kernel/cgroup/cpuset.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/cgroup/cpuset.c 2024-11-24 20:19:38.242228951 -0500 +@@ -346,7 +346,7 @@ + percpu_up_read(&cpuset_rwsem); + } + +-static DEFINE_SPINLOCK(callback_lock); ++static DEFINE_RAW_SPINLOCK(callback_lock); + + static struct workqueue_struct *cpuset_migrate_mm_wq; + +@@ -1291,7 +1291,7 @@ + * Newly added CPUs will be removed from effective_cpus and + * newly deleted ones will be added back to effective_cpus. + */ +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + if (adding) { + cpumask_or(parent->subparts_cpus, + parent->subparts_cpus, tmp->addmask); +@@ -1313,7 +1313,7 @@ + + if (cpuset->partition_root_state != new_prs) + cpuset->partition_root_state = new_prs; +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + + return cmd == partcmd_update; + } +@@ -1416,7 +1416,7 @@ + continue; + rcu_read_unlock(); + +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + + cpumask_copy(cp->effective_cpus, tmp->new_cpus); + if (cp->nr_subparts_cpus && (new_prs != PRS_ENABLED)) { +@@ -1450,7 +1450,7 @@ + if (new_prs != cp->partition_root_state) + cp->partition_root_state = new_prs; + +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + + WARN_ON(!is_in_v2_mode() && + !cpumask_equal(cp->cpus_allowed, cp->effective_cpus)); +@@ -1578,7 +1578,7 @@ + return -EINVAL; + } + +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + cpumask_copy(cs->cpus_allowed, trialcs->cpus_allowed); + + /* +@@ -1588,7 +1588,7 @@ + cpumask_and(cs->subparts_cpus, cs->subparts_cpus, cs->cpus_allowed); + cs->nr_subparts_cpus = cpumask_weight(cs->subparts_cpus); + } +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + + update_cpumasks_hier(cs, &tmp); + +@@ -1782,9 +1782,9 @@ + continue; + rcu_read_unlock(); + +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + cp->effective_mems = *new_mems; +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + + WARN_ON(!is_in_v2_mode() && + !nodes_equal(cp->mems_allowed, cp->effective_mems)); +@@ -1852,9 +1852,9 @@ + if (retval < 0) + goto done; + +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + cs->mems_allowed = trialcs->mems_allowed; +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + + /* use trialcs->mems_allowed as a temp variable */ + update_nodemasks_hier(cs, &trialcs->mems_allowed); +@@ -1945,9 +1945,9 @@ + spread_flag_changed = ((is_spread_slab(cs) != is_spread_slab(trialcs)) + || (is_spread_page(cs) != is_spread_page(trialcs))); + +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + cs->flags = trialcs->flags; +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + + if (!cpumask_empty(trialcs->cpus_allowed) && balance_flag_changed) + rebuild_sched_domains_locked(); +@@ -2033,9 +2033,9 @@ + rebuild_sched_domains_locked(); + out: + if (!err) { +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + cs->partition_root_state = new_prs; +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + } + + free_cpumasks(NULL, &tmpmask); +@@ -2452,7 +2452,7 @@ + cpuset_filetype_t type = seq_cft(sf)->private; + int ret = 0; + +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + + switch (type) { + case FILE_CPULIST: +@@ -2474,7 +2474,7 @@ + ret = -EINVAL; + } + +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + return ret; + } + +@@ -2787,14 +2787,14 @@ + + cpuset_inc(); + +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + if (is_in_v2_mode()) { + cpumask_copy(cs->effective_cpus, parent->effective_cpus); + cs->effective_mems = parent->effective_mems; + cs->use_parent_ecpus = true; + parent->child_ecpus_count++; + } +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + + if (!test_bit(CGRP_CPUSET_CLONE_CHILDREN, &css->cgroup->flags)) + goto out_unlock; +@@ -2821,12 +2821,12 @@ + } + rcu_read_unlock(); + +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + cs->mems_allowed = parent->mems_allowed; + cs->effective_mems = parent->mems_allowed; + cpumask_copy(cs->cpus_allowed, parent->cpus_allowed); + cpumask_copy(cs->effective_cpus, parent->cpus_allowed); +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + out_unlock: + percpu_up_write(&cpuset_rwsem); + put_online_cpus(); +@@ -2882,7 +2882,7 @@ + static void cpuset_bind(struct cgroup_subsys_state *root_css) + { + percpu_down_write(&cpuset_rwsem); +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + + if (is_in_v2_mode()) { + cpumask_copy(top_cpuset.cpus_allowed, cpu_possible_mask); +@@ -2893,7 +2893,7 @@ + top_cpuset.mems_allowed = top_cpuset.effective_mems; + } + +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + percpu_up_write(&cpuset_rwsem); + } + +@@ -2990,12 +2990,12 @@ + { + bool is_empty; + +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + cpumask_copy(cs->cpus_allowed, new_cpus); + cpumask_copy(cs->effective_cpus, new_cpus); + cs->mems_allowed = *new_mems; + cs->effective_mems = *new_mems; +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + + /* + * Don't call update_tasks_cpumask() if the cpuset becomes empty, +@@ -3032,10 +3032,10 @@ + if (nodes_empty(*new_mems)) + *new_mems = parent_cs(cs)->effective_mems; + +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + cpumask_copy(cs->effective_cpus, new_cpus); + cs->effective_mems = *new_mems; +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + + if (cpus_updated) + update_tasks_cpumask(cs); +@@ -3102,10 +3102,10 @@ + if (is_partition_root(cs) && (cpumask_empty(&new_cpus) || + (parent->partition_root_state == PRS_ERROR))) { + if (cs->nr_subparts_cpus) { +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + cs->nr_subparts_cpus = 0; + cpumask_clear(cs->subparts_cpus); +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + compute_effective_cpumask(&new_cpus, cs, parent); + } + +@@ -3119,9 +3119,9 @@ + cpumask_empty(&new_cpus)) { + update_parent_subparts_cpumask(cs, partcmd_disable, + NULL, tmp); +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + cs->partition_root_state = PRS_ERROR; +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + } + cpuset_force_rebuild(); + } +@@ -3201,7 +3201,7 @@ + + /* synchronize cpus_allowed to cpu_active_mask */ + if (cpus_updated) { +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + if (!on_dfl) + cpumask_copy(top_cpuset.cpus_allowed, &new_cpus); + /* +@@ -3221,17 +3221,17 @@ + } + } + cpumask_copy(top_cpuset.effective_cpus, &new_cpus); +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + /* we don't mess with cpumasks of tasks in top_cpuset */ + } + + /* synchronize mems_allowed to N_MEMORY */ + if (mems_updated) { +- spin_lock_irq(&callback_lock); ++ raw_spin_lock_irq(&callback_lock); + if (!on_dfl) + top_cpuset.mems_allowed = new_mems; + top_cpuset.effective_mems = new_mems; +- spin_unlock_irq(&callback_lock); ++ raw_spin_unlock_irq(&callback_lock); + update_tasks_nodemask(&top_cpuset); + } + +@@ -3335,11 +3335,11 @@ + { + unsigned long flags; + +- spin_lock_irqsave(&callback_lock, flags); ++ raw_spin_lock_irqsave(&callback_lock, flags); + rcu_read_lock(); + guarantee_online_cpus(task_cs(tsk), pmask); + rcu_read_unlock(); +- spin_unlock_irqrestore(&callback_lock, flags); ++ raw_spin_unlock_irqrestore(&callback_lock, flags); + } + + /** +@@ -3400,11 +3400,11 @@ + nodemask_t mask; + unsigned long flags; + +- spin_lock_irqsave(&callback_lock, flags); ++ raw_spin_lock_irqsave(&callback_lock, flags); + rcu_read_lock(); + guarantee_online_mems(task_cs(tsk), &mask); + rcu_read_unlock(); +- spin_unlock_irqrestore(&callback_lock, flags); ++ raw_spin_unlock_irqrestore(&callback_lock, flags); + + return mask; + } +@@ -3496,14 +3496,14 @@ + return true; + + /* Not hardwall and node outside mems_allowed: scan up cpusets */ +- spin_lock_irqsave(&callback_lock, flags); ++ raw_spin_lock_irqsave(&callback_lock, flags); + + rcu_read_lock(); + cs = nearest_hardwall_ancestor(task_cs(current)); + allowed = node_isset(node, cs->mems_allowed); + rcu_read_unlock(); + +- spin_unlock_irqrestore(&callback_lock, flags); ++ raw_spin_unlock_irqrestore(&callback_lock, flags); + return allowed; + } + +diff -Naur --no-dereference a/kernel/cgroup/rstat.c b/kernel/cgroup/rstat.c +--- a/kernel/cgroup/rstat.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/cgroup/rstat.c 2024-11-24 20:19:38.243228953 -0500 +@@ -149,8 +149,9 @@ + raw_spinlock_t *cpu_lock = per_cpu_ptr(&cgroup_rstat_cpu_lock, + cpu); + struct cgroup *pos = NULL; ++ unsigned long flags; + +- raw_spin_lock(cpu_lock); ++ raw_spin_lock_irqsave(cpu_lock, flags); + while ((pos = cgroup_rstat_cpu_pop_updated(pos, cgrp, cpu))) { + struct cgroup_subsys_state *css; + +@@ -162,7 +163,7 @@ + css->ss->css_rstat_flush(css, cpu); + rcu_read_unlock(); + } +- raw_spin_unlock(cpu_lock); ++ raw_spin_unlock_irqrestore(cpu_lock, flags); + + /* if @may_sleep, play nice and yield if necessary */ + if (may_sleep && (need_resched() || +diff -Naur --no-dereference a/kernel/cpu.c b/kernel/cpu.c +--- a/kernel/cpu.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/cpu.c 2024-11-24 20:19:38.243228953 -0500 +@@ -1668,7 +1668,7 @@ + .name = "ap:online", + }, + /* +- * Handled on controll processor until the plugged processor manages ++ * Handled on control processor until the plugged processor manages + * this itself. + */ + [CPUHP_TEARDOWN_CPU] = { +@@ -1677,6 +1677,13 @@ + .teardown.single = takedown_cpu, + .cant_stop = true, + }, ++ ++ [CPUHP_AP_SCHED_WAIT_EMPTY] = { ++ .name = "sched:waitempty", ++ .startup.single = NULL, ++ .teardown.single = sched_cpu_wait_empty, ++ }, ++ + /* Handle smpboot threads park/unpark */ + [CPUHP_AP_SMPBOOT_THREADS] = { + .name = "smpboot/threads:online", +diff -Naur --no-dereference a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c +--- a/kernel/debug/kdb/kdb_main.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/debug/kdb/kdb_main.c 2024-11-24 20:19:38.243228953 -0500 +@@ -2157,7 +2157,7 @@ + int adjust = 0; + int n = 0; + int skip = 0; +- struct kmsg_dumper dumper = { .active = 1 }; ++ struct kmsg_dumper_iter iter = { .active = 1 }; + size_t len; + char buf[201]; + +@@ -2182,8 +2182,8 @@ + kdb_set(2, setargs); + } + +- kmsg_dump_rewind_nolock(&dumper); +- while (kmsg_dump_get_line_nolock(&dumper, 1, NULL, 0, NULL)) ++ kmsg_dump_rewind(&iter); ++ while (kmsg_dump_get_line(&iter, 1, NULL, 0, NULL)) + n++; + + if (lines < 0) { +@@ -2215,8 +2215,8 @@ + if (skip >= n || skip < 0) + return 0; + +- kmsg_dump_rewind_nolock(&dumper); +- while (kmsg_dump_get_line_nolock(&dumper, 1, buf, sizeof(buf), &len)) { ++ kmsg_dump_rewind(&iter); ++ while (kmsg_dump_get_line(&iter, 1, buf, sizeof(buf), &len)) { + if (skip) { + skip--; + continue; +diff -Naur --no-dereference a/kernel/entry/common.c b/kernel/entry/common.c +--- a/kernel/entry/common.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/entry/common.c 2024-11-24 20:19:38.243228953 -0500 +@@ -2,6 +2,7 @@ + + #include + #include ++#include + #include + #include + +@@ -156,9 +157,17 @@ + + local_irq_enable_exit_to_user(ti_work); + +- if (ti_work & _TIF_NEED_RESCHED) ++ if (ti_work & _TIF_NEED_RESCHED_MASK) + schedule(); + ++#ifdef ARCH_RT_DELAYS_SIGNAL_SEND ++ if (unlikely(current->forced_info.si_signo)) { ++ struct task_struct *t = current; ++ force_sig_info(&t->forced_info); ++ t->forced_info.si_signo = 0; ++ } ++#endif ++ + if (ti_work & _TIF_UPROBE) + uprobe_notify_resume(regs); + +@@ -202,6 +211,7 @@ + + /* Ensure that the address limit is intact and no locks are held */ + addr_limit_user_check(); ++ kmap_assert_nomap(); + lockdep_assert_irqs_disabled(); + lockdep_sys_exit(); + } +@@ -361,7 +371,7 @@ + rcu_irq_exit_check_preempt(); + if (IS_ENABLED(CONFIG_DEBUG_ENTRY)) + WARN_ON_ONCE(!on_thread_stack()); +- if (need_resched()) ++ if (should_resched(0)) + preempt_schedule_irq(); + } + } +diff -Naur --no-dereference a/kernel/exit.c b/kernel/exit.c +--- a/kernel/exit.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/exit.c 2024-11-24 20:19:38.243228953 -0500 +@@ -199,7 +199,7 @@ + * Do this under ->siglock, we can race with another thread + * doing sigqueue_free() if we have SIGQUEUE_PREALLOC signals. + */ +- flush_sigqueue(&tsk->pending); ++ flush_task_sigqueue(tsk); + tsk->sighand = NULL; + spin_unlock(&sighand->siglock); + diff -Naur --no-dereference a/kernel/fork.c b/kernel/fork.c --- a/kernel/fork.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/kernel/fork.c 2024-08-28 19:44:05.668038268 -0400 -@@ -554,7 +554,7 @@ ++++ b/kernel/fork.c 2024-11-24 20:19:38.243228953 -0500 +@@ -42,6 +42,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -288,7 +289,7 @@ + return; + } + +- vfree_atomic(tsk->stack); ++ vfree(tsk->stack); + return; + } + #endif +@@ -554,7 +555,7 @@ struct inode *inode = file_inode(file); struct address_space *mapping = file->f_mapping; @@ -467445,9 +479454,229 @@ diff -Naur --no-dereference a/kernel/fork.c b/kernel/fork.c if (tmp->vm_flags & VM_DENYWRITE) put_write_access(inode); i_mmap_lock_write(mapping); +@@ -688,6 +689,19 @@ + } + EXPORT_SYMBOL_GPL(__mmdrop); + ++#ifdef CONFIG_PREEMPT_RT ++/* ++ * RCU callback for delayed mm drop. Not strictly rcu, but we don't ++ * want another facility to make this work. ++ */ ++void __mmdrop_delayed(struct rcu_head *rhp) ++{ ++ struct mm_struct *mm = container_of(rhp, struct mm_struct, delayed_drop); ++ ++ __mmdrop(mm); ++} ++#endif ++ + static void mmdrop_async_fn(struct work_struct *work) + { + struct mm_struct *mm; +@@ -729,6 +743,15 @@ + WARN_ON(refcount_read(&tsk->usage)); + WARN_ON(tsk == current); + ++ /* ++ * Remove function-return probe instances associated with this ++ * task and put them back on the free list. ++ */ ++ kprobe_flush_task(tsk); ++ ++ /* Task is done with its stack. */ ++ put_task_stack(tsk); ++ + io_uring_free(tsk); + cgroup_free(tsk); + task_numa_free(tsk, true); +@@ -931,6 +954,7 @@ + account_kernel_stack(tsk, 1); + + kcov_task_init(tsk); ++ kmap_local_fork(tsk); + + #ifdef CONFIG_FAULT_INJECTION + tsk->fail_nth = 0; +@@ -2011,6 +2035,7 @@ + spin_lock_init(&p->alloc_lock); + + init_sigpending(&p->pending); ++ p->sigqueue_cache = NULL; + + p->utime = p->stime = p->gtime = 0; + #ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME +diff -Naur --no-dereference a/kernel/futex/core.c b/kernel/futex/core.c +--- a/kernel/futex/core.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/futex/core.c 2024-11-24 20:19:38.243228953 -0500 +@@ -1498,6 +1498,7 @@ + struct task_struct *new_owner; + bool postunlock = false; + DEFINE_WAKE_Q(wake_q); ++ DEFINE_WAKE_Q(wake_sleeper_q); + int ret = 0; + + new_owner = rt_mutex_next_owner(&pi_state->pi_mutex); +@@ -1547,14 +1548,15 @@ + * not fail. + */ + pi_state_update_owner(pi_state, new_owner); +- postunlock = __rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q); ++ postunlock = __rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q, ++ &wake_sleeper_q); + } + + out_unlock: + raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock); + + if (postunlock) +- rt_mutex_postunlock(&wake_q); ++ rt_mutex_postunlock(&wake_q, &wake_sleeper_q); + + return ret; + } +@@ -2155,6 +2157,16 @@ + */ + requeue_pi_wake_futex(this, &key2, hb2); + continue; ++ } else if (ret == -EAGAIN) { ++ /* ++ * Waiter was woken by timeout or ++ * signal and has set pi_blocked_on to ++ * PI_WAKEUP_INPROGRESS before we ++ * tried to enqueue it on the rtmutex. ++ */ ++ this->pi_state = NULL; ++ put_pi_state(pi_state); ++ continue; + } else if (ret) { + /* + * rt_mutex_start_proxy_lock() detected a +@@ -2847,7 +2859,7 @@ + goto no_block; + } + +- rt_mutex_init_waiter(&rt_waiter); ++ rt_mutex_init_waiter(&rt_waiter, false); + + /* + * On PREEMPT_RT_FULL, when hb->lock becomes an rt_mutex, we must not +@@ -3172,7 +3184,7 @@ + { + struct hrtimer_sleeper timeout, *to; + struct rt_mutex_waiter rt_waiter; +- struct futex_hash_bucket *hb; ++ struct futex_hash_bucket *hb, *hb2; + union futex_key key2 = FUTEX_KEY_INIT; + struct futex_q q = futex_q_init; + int res, ret; +@@ -3193,7 +3205,7 @@ + * The waiter is allocated on our stack, manipulated by the requeue + * code while we sleep on uaddr. + */ +- rt_mutex_init_waiter(&rt_waiter); ++ rt_mutex_init_waiter(&rt_waiter, false); + + ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, FUTEX_WRITE); + if (unlikely(ret != 0)) +@@ -3224,20 +3236,55 @@ + /* Queue the futex_q, drop the hb lock, wait for wakeup. */ + futex_wait_queue_me(hb, &q, to); + +- spin_lock(&hb->lock); +- ret = handle_early_requeue_pi_wakeup(hb, &q, &key2, to); +- spin_unlock(&hb->lock); +- if (ret) +- goto out; ++ /* ++ * On RT we must avoid races with requeue and trying to block ++ * on two mutexes (hb->lock and uaddr2's rtmutex) by ++ * serializing access to pi_blocked_on with pi_lock. ++ */ ++ raw_spin_lock_irq(¤t->pi_lock); ++ if (current->pi_blocked_on) { ++ /* ++ * We have been requeued or are in the process of ++ * being requeued. ++ */ ++ raw_spin_unlock_irq(¤t->pi_lock); ++ } else { ++ /* ++ * Setting pi_blocked_on to PI_WAKEUP_INPROGRESS ++ * prevents a concurrent requeue from moving us to the ++ * uaddr2 rtmutex. After that we can safely acquire ++ * (and possibly block on) hb->lock. ++ */ ++ current->pi_blocked_on = PI_WAKEUP_INPROGRESS; ++ raw_spin_unlock_irq(¤t->pi_lock); ++ ++ spin_lock(&hb->lock); ++ ++ /* ++ * Clean up pi_blocked_on. We might leak it otherwise ++ * when we succeeded with the hb->lock in the fast ++ * path. ++ */ ++ raw_spin_lock_irq(¤t->pi_lock); ++ current->pi_blocked_on = NULL; ++ raw_spin_unlock_irq(¤t->pi_lock); ++ ++ ret = handle_early_requeue_pi_wakeup(hb, &q, &key2, to); ++ spin_unlock(&hb->lock); ++ if (ret) ++ goto out; ++ } + + /* +- * In order for us to be here, we know our q.key == key2, and since +- * we took the hb->lock above, we also know that futex_requeue() has +- * completed and we no longer have to concern ourselves with a wakeup +- * race with the atomic proxy lock acquisition by the requeue code. The +- * futex_requeue dropped our key1 reference and incremented our key2 +- * reference count. ++ * In order to be here, we have either been requeued, are in ++ * the process of being requeued, or requeue successfully ++ * acquired uaddr2 on our behalf. If pi_blocked_on was ++ * non-null above, we may be racing with a requeue. Do not ++ * rely on q->lock_ptr to be hb2->lock until after blocking on ++ * hb->lock or hb2->lock. The futex_requeue dropped our key1 ++ * reference and incremented our key2 reference count. + */ ++ hb2 = hash_futex(&key2); + + /* Check if the requeue code acquired the second futex for us. */ + if (!q.rt_waiter) { +@@ -3246,14 +3293,15 @@ + * did a lock-steal - fix up the PI-state in that case. + */ + if (q.pi_state && (q.pi_state->owner != current)) { +- spin_lock(q.lock_ptr); ++ spin_lock(&hb2->lock); ++ BUG_ON(&hb2->lock != q.lock_ptr); + ret = fixup_pi_state_owner(uaddr2, &q, current); + /* + * Drop the reference to the pi state which + * the requeue_pi() code acquired for us. + */ + put_pi_state(q.pi_state); +- spin_unlock(q.lock_ptr); ++ spin_unlock(&hb2->lock); + /* + * Adjust the return value. It's either -EFAULT or + * success (1) but the caller expects 0 for success. +@@ -3272,7 +3320,8 @@ + pi_mutex = &q.pi_state->pi_mutex; + ret = rt_mutex_wait_proxy_lock(pi_mutex, to, &rt_waiter); + +- spin_lock(q.lock_ptr); ++ spin_lock(&hb2->lock); ++ BUG_ON(&hb2->lock != q.lock_ptr); + if (ret && !rt_mutex_cleanup_proxy_lock(pi_mutex, &rt_waiter)) + ret = 0; + diff -Naur --no-dereference a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c --- a/kernel/irq/irqdomain.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/kernel/irq/irqdomain.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/kernel/irq/irqdomain.c 2024-11-24 20:19:38.244228955 -0500 @@ -734,9 +734,8 @@ return 0; } @@ -467468,9 +479697,352 @@ diff -Naur --no-dereference a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec) { +diff -Naur --no-dereference a/kernel/irq/manage.c b/kernel/irq/manage.c +--- a/kernel/irq/manage.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/irq/manage.c 2024-11-24 20:19:38.244228955 -0500 +@@ -1201,6 +1201,8 @@ + + irq_thread_set_ready(desc, action); + ++ sched_set_fifo(current); ++ + if (force_irqthreads && test_bit(IRQTF_FORCED_THREAD, + &action->thread_flags)) + handler_fn = irq_forced_thread_fn; +@@ -1366,8 +1368,6 @@ + if (IS_ERR(t)) + return PTR_ERR(t); + +- sched_set_fifo(t); +- + /* + * We keep the reference to the task struct even if + * the thread dies to avoid that the interrupt code +@@ -2756,7 +2756,7 @@ + * This call sets the internal irqchip state of an interrupt, + * depending on the value of @which. + * +- * This function should be called with preemption disabled if the ++ * This function should be called with migration disabled if the + * interrupt controller has per-cpu registers. + */ + int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which, +diff -Naur --no-dereference a/kernel/irq/spurious.c b/kernel/irq/spurious.c +--- a/kernel/irq/spurious.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/irq/spurious.c 2024-11-24 20:19:38.244228955 -0500 +@@ -443,6 +443,10 @@ + + static int __init irqfixup_setup(char *str) + { ++#ifdef CONFIG_PREEMPT_RT ++ pr_warn("irqfixup boot option not supported w/ CONFIG_PREEMPT_RT\n"); ++ return 1; ++#endif + irqfixup = 1; + printk(KERN_WARNING "Misrouted IRQ fixup support enabled.\n"); + printk(KERN_WARNING "This may impact system performance.\n"); +@@ -455,6 +459,10 @@ + + static int __init irqpoll_setup(char *str) + { ++#ifdef CONFIG_PREEMPT_RT ++ pr_warn("irqpoll boot option not supported w/ CONFIG_PREEMPT_RT\n"); ++ return 1; ++#endif + irqfixup = 2; + printk(KERN_WARNING "Misrouted IRQ fixup and polling support " + "enabled\n"); +diff -Naur --no-dereference a/kernel/irq_work.c b/kernel/irq_work.c +--- a/kernel/irq_work.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/irq_work.c 2024-11-24 20:19:38.244228955 -0500 +@@ -18,11 +18,37 @@ + #include + #include + #include ++#include ++#include + #include + + + static DEFINE_PER_CPU(struct llist_head, raised_list); + static DEFINE_PER_CPU(struct llist_head, lazy_list); ++static DEFINE_PER_CPU(struct task_struct *, irq_workd); ++ ++static void wake_irq_workd(void) ++{ ++ struct task_struct *tsk = __this_cpu_read(irq_workd); ++ ++ if (!llist_empty(this_cpu_ptr(&lazy_list)) && tsk) ++ wake_up_process(tsk); ++} ++ ++#ifdef CONFIG_SMP ++static void irq_work_wake(struct irq_work *entry) ++{ ++ wake_irq_workd(); ++} ++ ++static DEFINE_PER_CPU(struct irq_work, irq_work_wakeup) = ++ IRQ_WORK_INIT_HARD(irq_work_wake); ++#endif ++ ++static int irq_workd_should_run(unsigned int cpu) ++{ ++ return !llist_empty(this_cpu_ptr(&lazy_list)); ++} + + /* + * Claim the entry so that no one else will poke at it. +@@ -52,15 +78,29 @@ + /* Enqueue on current CPU, work must already be claimed and preempt disabled */ + static void __irq_work_queue_local(struct irq_work *work) + { ++ struct llist_head *list; ++ bool rt_lazy_work = false; ++ bool lazy_work = false; ++ int work_flags; ++ ++ work_flags = atomic_read(&work->flags); ++ if (work_flags & IRQ_WORK_LAZY) ++ lazy_work = true; ++ else if (IS_ENABLED(CONFIG_PREEMPT_RT) && ++ !(work_flags & IRQ_WORK_HARD_IRQ)) ++ rt_lazy_work = true; ++ ++ if (lazy_work || rt_lazy_work) ++ list = this_cpu_ptr(&lazy_list); ++ else ++ list = this_cpu_ptr(&raised_list); ++ ++ if (!llist_add(&work->llnode, list)) ++ return; ++ + /* If the work is "lazy", handle it from next tick if any */ +- if (atomic_read(&work->flags) & IRQ_WORK_LAZY) { +- if (llist_add(&work->llnode, this_cpu_ptr(&lazy_list)) && +- tick_nohz_tick_stopped()) +- arch_irq_work_raise(); +- } else { +- if (llist_add(&work->llnode, this_cpu_ptr(&raised_list))) +- arch_irq_work_raise(); +- } ++ if (!lazy_work || tick_nohz_tick_stopped()) ++ arch_irq_work_raise(); + } + + /* Enqueue the irq work @work on the current CPU */ +@@ -102,10 +142,28 @@ + if (cpu != smp_processor_id()) { + /* Arch remote IPI send/receive backend aren't NMI safe */ + WARN_ON_ONCE(in_nmi()); ++ ++ /* ++ * On PREEMPT_RT the items which are not marked as ++ * IRQ_WORK_HARD_IRQ are added to the lazy list and a HARD work ++ * item is used on the remote CPU to wake the thread. ++ */ ++ if (IS_ENABLED(CONFIG_PREEMPT_RT) && ++ !(atomic_read(&work->flags) & IRQ_WORK_HARD_IRQ)) { ++ ++ if (!llist_add(&work->llnode, &per_cpu(lazy_list, cpu))) ++ goto out; ++ ++ work = &per_cpu(irq_work_wakeup, cpu); ++ if (!irq_work_claim(work)) ++ goto out; ++ } ++ + __smp_call_single_queue(cpu, &work->llnode); + } else { + __irq_work_queue_local(work); + } ++out: + preempt_enable(); + + return true; +@@ -120,9 +178,8 @@ + raised = this_cpu_ptr(&raised_list); + lazy = this_cpu_ptr(&lazy_list); + +- if (llist_empty(raised) || arch_irq_work_has_interrupt()) +- if (llist_empty(lazy)) +- return false; ++ if (llist_empty(raised) && llist_empty(lazy)) ++ return false; + + /* All work should have been flushed before going offline */ + WARN_ON_ONCE(cpu_is_offline(smp_processor_id())); +@@ -153,6 +210,10 @@ + */ + flags &= ~IRQ_WORK_PENDING; + (void)atomic_cmpxchg(&work->flags, flags, flags & ~IRQ_WORK_BUSY); ++ ++ if ((IS_ENABLED(CONFIG_PREEMPT_RT) && !irq_work_is_hard(work)) || ++ !arch_irq_work_has_interrupt()) ++ rcuwait_wake_up(&work->irqwait); + } + + static void irq_work_run_list(struct llist_head *list) +@@ -160,7 +221,12 @@ + struct irq_work *work, *tmp; + struct llist_node *llnode; + +- BUG_ON(!irqs_disabled()); ++ /* ++ * On PREEMPT_RT IRQ-work which is not marked as HARD will be processed ++ * in a per-CPU thread in preemptible context. Only the items which are ++ * marked as IRQ_WORK_HARD_IRQ will be processed in hardirq context. ++ */ ++ BUG_ON(!irqs_disabled() && !IS_ENABLED(CONFIG_PREEMPT_RT)); + + if (llist_empty(list)) + return; +@@ -177,7 +243,10 @@ + void irq_work_run(void) + { + irq_work_run_list(this_cpu_ptr(&raised_list)); +- irq_work_run_list(this_cpu_ptr(&lazy_list)); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ irq_work_run_list(this_cpu_ptr(&lazy_list)); ++ else ++ wake_irq_workd(); + } + EXPORT_SYMBOL_GPL(irq_work_run); + +@@ -187,7 +256,11 @@ + + if (!llist_empty(raised) && !arch_irq_work_has_interrupt()) + irq_work_run_list(raised); +- irq_work_run_list(this_cpu_ptr(&lazy_list)); ++ ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ irq_work_run_list(this_cpu_ptr(&lazy_list)); ++ else ++ wake_irq_workd(); + } + + /* +@@ -197,8 +270,42 @@ + void irq_work_sync(struct irq_work *work) + { + lockdep_assert_irqs_enabled(); ++ might_sleep(); ++ ++ if ((IS_ENABLED(CONFIG_PREEMPT_RT) && !irq_work_is_hard(work)) || ++ !arch_irq_work_has_interrupt()) { ++ rcuwait_wait_event(&work->irqwait, !irq_work_is_busy(work), ++ TASK_UNINTERRUPTIBLE); ++ return; ++ } + + while (atomic_read(&work->flags) & IRQ_WORK_BUSY) + cpu_relax(); + } + EXPORT_SYMBOL_GPL(irq_work_sync); ++ ++static void run_irq_workd(unsigned int cpu) ++{ ++ irq_work_run_list(this_cpu_ptr(&lazy_list)); ++} ++ ++static void irq_workd_setup(unsigned int cpu) ++{ ++ sched_set_fifo_low(current); ++} ++ ++static struct smp_hotplug_thread irqwork_threads = { ++ .store = &irq_workd, ++ .setup = irq_workd_setup, ++ .thread_should_run = irq_workd_should_run, ++ .thread_fn = run_irq_workd, ++ .thread_comm = "irq_work/%u", ++}; ++ ++static __init int irq_work_init_threads(void) ++{ ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) ++ BUG_ON(smpboot_register_percpu_thread(&irqwork_threads)); ++ return 0; ++} ++early_initcall(irq_work_init_threads); +diff -Naur --no-dereference a/kernel/Kconfig.locks b/kernel/Kconfig.locks +--- a/kernel/Kconfig.locks 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/Kconfig.locks 2024-11-24 20:19:38.242228951 -0500 +@@ -251,7 +251,7 @@ + + config QUEUED_RWLOCKS + def_bool y if ARCH_USE_QUEUED_RWLOCKS +- depends on SMP ++ depends on SMP && !PREEMPT_RT + + config ARCH_HAS_MMIOWB + bool +diff -Naur --no-dereference a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt +--- a/kernel/Kconfig.preempt 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/Kconfig.preempt 2024-11-24 20:19:38.242228951 -0500 +@@ -1,5 +1,11 @@ + # SPDX-License-Identifier: GPL-2.0-only + ++config HAVE_PREEMPT_LAZY ++ bool ++ ++config PREEMPT_LAZY ++ def_bool y if HAVE_PREEMPT_LAZY && PREEMPT_RT ++ + choice + prompt "Preemption Model" + default PREEMPT_NONE +@@ -59,6 +65,7 @@ + bool "Fully Preemptible Kernel (Real-Time)" + depends on EXPERT && ARCH_SUPPORTS_RT + select PREEMPTION ++ select RT_MUTEXES + help + This option turns the kernel into a real-time kernel by replacing + various locking primitives (spinlocks, rwlocks, etc.) with +diff -Naur --no-dereference a/kernel/kexec_core.c b/kernel/kexec_core.c +--- a/kernel/kexec_core.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/kexec_core.c 2024-11-24 20:19:38.244228955 -0500 +@@ -978,7 +978,6 @@ + old_cpu = atomic_cmpxchg(&panic_cpu, PANIC_CPU_INVALID, this_cpu); + if (old_cpu == PANIC_CPU_INVALID) { + /* This is the 1st CPU which comes here, so go ahead. */ +- printk_safe_flush_on_panic(); + __crash_kexec(regs); + + /* +diff -Naur --no-dereference a/kernel/ksysfs.c b/kernel/ksysfs.c +--- a/kernel/ksysfs.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/ksysfs.c 2024-11-24 20:19:38.244228955 -0500 +@@ -138,6 +138,15 @@ + + #endif /* CONFIG_CRASH_CORE */ + ++#if defined(CONFIG_PREEMPT_RT) ++static ssize_t realtime_show(struct kobject *kobj, ++ struct kobj_attribute *attr, char *buf) ++{ ++ return sprintf(buf, "%d\n", 1); ++} ++KERNEL_ATTR_RO(realtime); ++#endif ++ + /* whether file capabilities are enabled */ + static ssize_t fscaps_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +@@ -229,6 +238,9 @@ + &rcu_expedited_attr.attr, + &rcu_normal_attr.attr, + #endif ++#ifdef CONFIG_PREEMPT_RT ++ &realtime_attr.attr, ++#endif + NULL + }; + diff -Naur --no-dereference a/kernel/kthread.c b/kernel/kthread.c --- a/kernel/kthread.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/kernel/kthread.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/kernel/kthread.c 2024-11-24 20:19:38.244228955 -0500 @@ -243,15 +243,8 @@ if (!test_bit(KTHREAD_SHOULD_PARK, &self->flags)) break; @@ -467488,7 +480060,25 @@ diff -Naur --no-dereference a/kernel/kthread.c b/kernel/kthread.c } __set_current_state(TASK_RUNNING); } -@@ -297,14 +290,8 @@ +@@ -264,6 +257,7 @@ + + static int kthread(void *_create) + { ++ static const struct sched_param param = { .sched_priority = 0 }; + /* Copy data: it's on kthread's stack */ + struct kthread_create_info *create = _create; + int (*threadfn)(void *data) = create->threadfn; +@@ -294,17 +288,18 @@ + init_completion(&self->parked); + current->vfork_done = &self->exited; + ++ /* ++ * The new thread inherited kthreadd's priority and CPU mask. Reset ++ * back to default in case they have been changed. ++ */ ++ sched_setscheduler_nocheck(current, SCHED_NORMAL, ¶m); ++ set_cpus_allowed_ptr(current, housekeeping_cpumask(HK_FLAG_KTHREAD)); ++ /* OK, tell user we're spawned, wait for stop or wakeup */ __set_current_state(TASK_UNINTERRUPTIBLE); create->result = current; @@ -467504,9 +480094,31 @@ diff -Naur --no-dereference a/kernel/kthread.c b/kernel/kthread.c ret = -EINTR; if (!test_bit(KTHREAD_SHOULD_STOP, &self->flags)) { +@@ -391,7 +386,6 @@ + } + task = create->result; + if (!IS_ERR(task)) { +- static const struct sched_param param = { .sched_priority = 0 }; + char name[TASK_COMM_LEN]; + + /* +@@ -400,13 +394,6 @@ + */ + vsnprintf(name, sizeof(name), namefmt, args); + set_task_comm(task, name); +- /* +- * root may have changed our (kthreadd's) priority or CPU mask. +- * The kernel thread should not inherit these properties. +- */ +- sched_setscheduler_nocheck(task, SCHED_NORMAL, ¶m); +- set_cpus_allowed_ptr(task, +- housekeeping_cpumask(HK_FLAG_KTHREAD)); + } + kfree(create); + return task; diff -Naur --no-dereference a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c --- a/kernel/locking/lockdep.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/kernel/locking/lockdep.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/kernel/locking/lockdep.c 2024-11-24 20:19:38.244228955 -0500 @@ -186,7 +186,7 @@ struct lock_class lock_classes[MAX_LOCKDEP_KEYS]; DECLARE_BITMAP(lock_classes_in_use, MAX_LOCKDEP_KEYS); @@ -467525,482 +480137,12530 @@ diff -Naur --no-dereference a/kernel/locking/lockdep.c b/kernel/locking/lockdep. #ifdef CONFIG_LOCK_STAT static DEFINE_PER_CPU(struct lock_class_stats[MAX_LOCKDEP_KEYS], cpu_lock_stats); -diff -Naur --no-dereference a/kernel/task_work.c b/kernel/task_work.c ---- a/kernel/task_work.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/kernel/task_work.c 2024-08-28 19:44:05.668038268 -0400 -@@ -164,3 +164,4 @@ - } while (work); +@@ -5413,6 +5415,7 @@ + } } - } -+EXPORT_SYMBOL_GPL(task_work_run); -diff -Naur --no-dereference a/lib/kstrtox.c b/lib/kstrtox.c ---- a/lib/kstrtox.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/lib/kstrtox.c 2024-08-28 19:44:05.668038268 -0400 -@@ -14,11 +14,12 @@ - */ - #include - #include --#include --#include - #include -+#include -+#include - #include - #include -+ - #include "kstrtox.h" - - const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) -diff -Naur --no-dereference a/lib/parser.c b/lib/parser.c ---- a/lib/parser.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/lib/parser.c 2024-08-28 19:44:05.668038268 -0400 -@@ -6,6 +6,7 @@ - #include - #include - #include -+#include - #include - #include - #include -diff -Naur --no-dereference a/MAINTAINERS b/MAINTAINERS ---- a/MAINTAINERS 2023-02-15 11:22:27.000000000 -0500 -+++ b/MAINTAINERS 2024-08-28 19:44:05.592037860 -0400 -@@ -297,8 +297,6 @@ - M: Syed Nayyar Waris - L: linux-iio@vger.kernel.org - S: Maintained --F: Documentation/ABI/testing/sysfs-bus-counter-104-quad-8 --F: Documentation/ABI/testing/sysfs-bus-iio-counter-104-quad-8 - F: drivers/counter/104-quad-8.c - - ACCES PCI-IDIO-16 GPIO DRIVER -@@ -2609,8 +2607,8 @@ - F: drivers/power/reset/keystone-reset.c - - ARM/TEXAS INSTRUMENTS K3 ARCHITECTURE --M: Tero Kristo - M: Nishanth Menon -+M: Tero Kristo - L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) - S: Supported - F: Documentation/devicetree/bindings/arm/ti/k3.yaml -@@ -3009,6 +3007,19 @@ - F: include/uapi/linux/audit.h - F: kernel/audit* - -+AUFS (advanced multi layered unification filesystem) FILESYSTEM -+M: "J. R. Okajima" -+L: aufs-users@lists.sourceforge.net (members only) -+L: linux-unionfs@vger.kernel.org -+S: Supported -+W: http://aufs.sourceforge.net -+T: git://github.com/sfjro/aufs4-linux.git -+F: Documentation/ABI/testing/debugfs-aufs -+F: Documentation/ABI/testing/sysfs-aufs -+F: Documentation/filesystems/aufs/ -+F: fs/aufs/ -+F: include/uapi/linux/aufs_type.h -+ - AUXILIARY DISPLAY DRIVERS - M: Miguel Ojeda Sandonis - S: Maintained -@@ -3864,7 +3875,8 @@ - CADENCE USB3 DRD IP DRIVER - M: Peter Chen - M: Pawel Laszczak --M: Roger Quadros -+R: Roger Quadros -+R: Aswath Govindraju - L: linux-usb@vger.kernel.org - S: Maintained - T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git -@@ -3911,7 +3923,9 @@ - T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git - T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git - F: Documentation/devicetree/bindings/net/can/ -+F: Documentation/devicetree/bindings/phy/ti,tcan104x-can.yaml - F: drivers/net/can/ -+F: drivers/phy/phy-can-transceiver.c - F: include/linux/can/dev.h - F: include/linux/can/led.h - F: include/linux/can/platform/ -@@ -4515,11 +4529,12 @@ - M: William Breathitt Gray - L: linux-iio@vger.kernel.org - S: Maintained --F: Documentation/ABI/testing/sysfs-bus-counter* -+F: Documentation/ABI/testing/sysfs-bus-counter - F: Documentation/driver-api/generic-counter.rst - F: drivers/counter/ - F: include/linux/counter.h --F: include/linux/counter_enum.h -+F: include/uapi/linux/counter.h -+F: tools/counter/ - CPMAC ETHERNET DRIVER - M: Florian Fainelli -@@ -6413,9 +6428,9 @@ - F: drivers/edac/skx_*.c ++#ifndef CONFIG_PREEMPT_RT + /* + * We dont accurately track softirq state in e.g. + * hardirq contexts (such as on 4KSTACKS), so only +@@ -5427,6 +5430,7 @@ + DEBUG_LOCKS_WARN_ON(!current->softirqs_enabled); + } + } ++#endif - EDAC-TI --M: Tero Kristo -+M: Tero Kristo - L: linux-edac@vger.kernel.org --S: Maintained -+S: Odd Fixes - F: drivers/edac/ti_edac.c + if (!debug_locks) + print_irqtrace_events(current); +diff -Naur --no-dereference a/kernel/locking/Makefile b/kernel/locking/Makefile +--- a/kernel/locking/Makefile 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/locking/Makefile 2024-11-24 20:19:38.244228955 -0500 +@@ -3,7 +3,7 @@ + # and is generally not a function of system call inputs. + KCOV_INSTRUMENT := n - EDIROL UA-101/UA-1000 DRIVER -@@ -6865,7 +6880,6 @@ - M: Patrick Havelange - L: linux-iio@vger.kernel.org - S: Maintained --F: Documentation/ABI/testing/sysfs-bus-counter-ftm-quaddec - F: Documentation/devicetree/bindings/counter/ftm-quaddec.txt - F: drivers/counter/ftm-quaddec.c +-obj-y += mutex.o semaphore.o rwsem.o percpu-rwsem.o ++obj-y += semaphore.o rwsem.o percpu-rwsem.o -@@ -9028,6 +9042,11 @@ - S: Supported - F: drivers/cpufreq/intel_pstate.c + # Avoid recursion lockdep -> KCSAN -> ... -> lockdep. + KCSAN_SANITIZE_lockdep.o := n +@@ -15,19 +15,23 @@ + CFLAGS_REMOVE_rtmutex-debug.o = $(CC_FLAGS_FTRACE) + endif -+INTEL QUADRATURE ENCODER PERIPHERAL DRIVER -+M: Jarkko Nikula -+L: linux-iio@vger.kernel.org -+F: drivers/counter/intel-qep.c +-obj-$(CONFIG_DEBUG_MUTEXES) += mutex-debug.o + obj-$(CONFIG_LOCKDEP) += lockdep.o + ifeq ($(CONFIG_PROC_FS),y) + obj-$(CONFIG_LOCKDEP) += lockdep_proc.o + endif + obj-$(CONFIG_SMP) += spinlock.o +-obj-$(CONFIG_LOCK_SPIN_ON_OWNER) += osq_lock.o + obj-$(CONFIG_PROVE_LOCKING) += spinlock.o + obj-$(CONFIG_QUEUED_SPINLOCKS) += qspinlock.o + obj-$(CONFIG_RT_MUTEXES) += rtmutex.o + obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o + obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock.o + obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock_debug.o ++ifneq ($(CONFIG_PREEMPT_RT),y) ++obj-y += mutex.o ++obj-$(CONFIG_LOCK_SPIN_ON_OWNER) += osq_lock.o ++obj-$(CONFIG_DEBUG_MUTEXES) += mutex-debug.o ++endif ++obj-$(CONFIG_PREEMPT_RT) += mutex-rt.o rwsem-rt.o rwlock-rt.o + obj-$(CONFIG_QUEUED_RWLOCKS) += qrwlock.o + obj-$(CONFIG_LOCK_TORTURE_TEST) += locktorture.o + obj-$(CONFIG_WW_MUTEX_SELFTEST) += test-ww_mutex.o +diff -Naur --no-dereference a/kernel/locking/mutex-rt.c b/kernel/locking/mutex-rt.c +--- a/kernel/locking/mutex-rt.c 1969-12-31 19:00:00.000000000 -0500 ++++ b/kernel/locking/mutex-rt.c 2024-11-24 20:19:38.245228956 -0500 +@@ -0,0 +1,224 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++/* ++ * Real-Time Preemption Support ++ * ++ * started by Ingo Molnar: ++ * ++ * Copyright (C) 2004-2006 Red Hat, Inc., Ingo Molnar ++ * Copyright (C) 2006, Timesys Corp., Thomas Gleixner ++ * ++ * historic credit for proving that Linux spinlocks can be implemented via ++ * RT-aware mutexes goes to many people: The Pmutex project (Dirk Grambow ++ * and others) who prototyped it on 2.4 and did lots of comparative ++ * research and analysis; TimeSys, for proving that you can implement a ++ * fully preemptible kernel via the use of IRQ threading and mutexes; ++ * Bill Huey for persuasively arguing on lkml that the mutex model is the ++ * right one; and to MontaVista, who ported pmutexes to 2.6. ++ * ++ * This code is a from-scratch implementation and is not based on pmutexes, ++ * but the idea of converting spinlocks to mutexes is used here too. ++ * ++ * lock debugging, locking tree, deadlock detection: ++ * ++ * Copyright (C) 2004, LynuxWorks, Inc., Igor Manyilov, Bill Huey ++ * Released under the General Public License (GPL). ++ * ++ * Includes portions of the generic R/W semaphore implementation from: ++ * ++ * Copyright (c) 2001 David Howells (dhowells@redhat.com). ++ * - Derived partially from idea by Andrea Arcangeli ++ * - Derived also from comments by Linus ++ * ++ * Pending ownership of locks and ownership stealing: ++ * ++ * Copyright (C) 2005, Kihon Technologies Inc., Steven Rostedt ++ * ++ * (also by Steven Rostedt) ++ * - Converted single pi_lock to individual task locks. ++ * ++ * By Esben Nielsen: ++ * Doing priority inheritance with help of the scheduler. ++ * ++ * Copyright (C) 2006, Timesys Corp., Thomas Gleixner ++ * - major rework based on Esben Nielsens initial patch ++ * - replaced thread_info references by task_struct refs ++ * - removed task->pending_owner dependency ++ * - BKL drop/reacquire for semaphore style locks to avoid deadlocks ++ * in the scheduler return path as discussed with Steven Rostedt ++ * ++ * Copyright (C) 2006, Kihon Technologies Inc. ++ * Steven Rostedt ++ * - debugged and patched Thomas Gleixner's rework. ++ * - added back the cmpxchg to the rework. ++ * - turned atomic require back on for SMP. ++ */ + - INTEL RDMA RNIC DRIVER - M: Faisal Latif - M: Shiraz Saleem -@@ -9145,6 +9164,13 @@ - F: include/linux/interconnect-provider.h - F: include/linux/interconnect.h - -+INTERRUPT COUNTER DRIVER -+M: Oleksij Rempel -+R: Pengutronix Kernel Team -+L: linux-iio@vger.kernel.org -+F: Documentation/devicetree/bindings/counter/interrupt-counter.yaml -+F: drivers/counter/interrupt-cnt.c ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include + - INVENSENSE ICM-426xx IMU DRIVER - M: Jean-Baptiste Maneyrol - L: linux-iio@vger.kernel.org -@@ -12654,7 +12680,7 @@ - F: include/uapi/misc/ocxl.h ++#include "rtmutex_common.h" ++ ++/* ++ * struct mutex functions ++ */ ++void __mutex_do_init(struct mutex *mutex, const char *name, ++ struct lock_class_key *key) ++{ ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++ /* ++ * Make sure we are not reinitializing a held lock: ++ */ ++ debug_check_no_locks_freed((void *)mutex, sizeof(*mutex)); ++ lockdep_init_map(&mutex->dep_map, name, key, 0); ++#endif ++ mutex->lock.save_state = 0; ++} ++EXPORT_SYMBOL(__mutex_do_init); ++ ++static int _mutex_lock_blk_flush(struct mutex *lock, int state) ++{ ++ /* ++ * Flush blk before ->pi_blocked_on is set. At schedule() time it is too ++ * late if one of the callbacks needs to acquire a sleeping lock. ++ */ ++ if (blk_needs_flush_plug(current)) ++ blk_schedule_flush_plug(current); ++ return __rt_mutex_lock_state(&lock->lock, state); ++} ++ ++void __lockfunc _mutex_lock(struct mutex *lock) ++{ ++ mutex_acquire(&lock->dep_map, 0, 0, _RET_IP_); ++ _mutex_lock_blk_flush(lock, TASK_UNINTERRUPTIBLE); ++} ++EXPORT_SYMBOL(_mutex_lock); ++ ++void __lockfunc _mutex_lock_io_nested(struct mutex *lock, int subclass) ++{ ++ int token; ++ ++ token = io_schedule_prepare(); ++ ++ mutex_acquire_nest(&lock->dep_map, subclass, 0, NULL, _RET_IP_); ++ __rt_mutex_lock_state(&lock->lock, TASK_UNINTERRUPTIBLE); ++ ++ io_schedule_finish(token); ++} ++EXPORT_SYMBOL_GPL(_mutex_lock_io_nested); ++ ++int __lockfunc _mutex_lock_interruptible(struct mutex *lock) ++{ ++ int ret; ++ ++ mutex_acquire(&lock->dep_map, 0, 0, _RET_IP_); ++ ret = _mutex_lock_blk_flush(lock, TASK_INTERRUPTIBLE); ++ if (ret) ++ mutex_release(&lock->dep_map, _RET_IP_); ++ return ret; ++} ++EXPORT_SYMBOL(_mutex_lock_interruptible); ++ ++int __lockfunc _mutex_lock_killable(struct mutex *lock) ++{ ++ int ret; ++ ++ mutex_acquire(&lock->dep_map, 0, 0, _RET_IP_); ++ ret = _mutex_lock_blk_flush(lock, TASK_KILLABLE); ++ if (ret) ++ mutex_release(&lock->dep_map, _RET_IP_); ++ return ret; ++} ++EXPORT_SYMBOL(_mutex_lock_killable); ++ ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++void __lockfunc _mutex_lock_nested(struct mutex *lock, int subclass) ++{ ++ mutex_acquire_nest(&lock->dep_map, subclass, 0, NULL, _RET_IP_); ++ _mutex_lock_blk_flush(lock, TASK_UNINTERRUPTIBLE); ++} ++EXPORT_SYMBOL(_mutex_lock_nested); ++ ++void __lockfunc _mutex_lock_nest_lock(struct mutex *lock, struct lockdep_map *nest) ++{ ++ mutex_acquire_nest(&lock->dep_map, 0, 0, nest, _RET_IP_); ++ _mutex_lock_blk_flush(lock, TASK_UNINTERRUPTIBLE); ++} ++EXPORT_SYMBOL(_mutex_lock_nest_lock); ++ ++int __lockfunc _mutex_lock_interruptible_nested(struct mutex *lock, int subclass) ++{ ++ int ret; ++ ++ mutex_acquire_nest(&lock->dep_map, subclass, 0, NULL, _RET_IP_); ++ ret = _mutex_lock_blk_flush(lock, TASK_INTERRUPTIBLE); ++ if (ret) ++ mutex_release(&lock->dep_map, _RET_IP_); ++ return ret; ++} ++EXPORT_SYMBOL(_mutex_lock_interruptible_nested); ++ ++int __lockfunc _mutex_lock_killable_nested(struct mutex *lock, int subclass) ++{ ++ int ret; ++ ++ mutex_acquire(&lock->dep_map, subclass, 0, _RET_IP_); ++ ret = _mutex_lock_blk_flush(lock, TASK_KILLABLE); ++ if (ret) ++ mutex_release(&lock->dep_map, _RET_IP_); ++ return ret; ++} ++EXPORT_SYMBOL(_mutex_lock_killable_nested); ++#endif ++ ++int __lockfunc _mutex_trylock(struct mutex *lock) ++{ ++ int ret = __rt_mutex_trylock(&lock->lock); ++ ++ if (ret) ++ mutex_acquire(&lock->dep_map, 0, 1, _RET_IP_); ++ ++ return ret; ++} ++EXPORT_SYMBOL(_mutex_trylock); ++ ++void __lockfunc _mutex_unlock(struct mutex *lock) ++{ ++ mutex_release(&lock->dep_map, _RET_IP_); ++ __rt_mutex_unlock(&lock->lock); ++} ++EXPORT_SYMBOL(_mutex_unlock); ++ ++/** ++ * atomic_dec_and_mutex_lock - return holding mutex if we dec to 0 ++ * @cnt: the atomic which we are to dec ++ * @lock: the mutex to return holding if we dec to 0 ++ * ++ * return true and hold lock if we dec to 0, return false otherwise ++ */ ++int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock) ++{ ++ /* dec if we can't possibly hit 0 */ ++ if (atomic_add_unless(cnt, -1, 1)) ++ return 0; ++ /* we might hit 0, so take the lock */ ++ mutex_lock(lock); ++ if (!atomic_dec_and_test(cnt)) { ++ /* when we actually did the dec, we didn't hit 0 */ ++ mutex_unlock(lock); ++ return 0; ++ } ++ /* we hit 0, and we hold the lock */ ++ return 1; ++} ++EXPORT_SYMBOL(atomic_dec_and_mutex_lock); +diff -Naur --no-dereference a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c +--- a/kernel/locking/rtmutex.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/locking/rtmutex.c 2024-11-24 20:19:38.245228956 -0500 +@@ -8,6 +8,11 @@ + * Copyright (C) 2005-2006 Timesys Corp., Thomas Gleixner + * Copyright (C) 2005 Kihon Technologies Inc., Steven Rostedt + * Copyright (C) 2006 Esben Nielsen ++ * Adaptive Spinlocks: ++ * Copyright (C) 2008 Novell, Inc., Gregory Haskins, Sven Dietrich, ++ * and Peter Morreale, ++ * Adaptive Spinlocks simplification: ++ * Copyright (C) 2008 Red Hat, Inc., Steven Rostedt + * + * See Documentation/locking/rt-mutex-design.rst for details. + */ +@@ -19,6 +24,7 @@ + #include + #include + #include ++#include - OMAP AUDIO SUPPORT --M: Peter Ujfalusi -+M: Peter Ujfalusi - M: Jarkko Nikula - L: alsa-devel@alsa-project.org (moderated for non-subscribers) - L: linux-omap@vger.kernel.org -@@ -12698,7 +12724,7 @@ - F: drivers/video/fbdev/omap/ + #include "rtmutex_common.h" - OMAP GENERAL PURPOSE MEMORY CONTROLLER SUPPORT --M: Roger Quadros -+M: Roger Quadros - M: Tony Lindgren - L: linux-omap@vger.kernel.org - S: Maintained -@@ -12826,12 +12852,15 @@ - F: arch/arm/plat-omap/ - F: drivers/bus/ti-sysc.c - F: drivers/i2c/busses/i2c-omap.c -+F: drivers/input/misc/tps65218-pwrbutton.c -+F: drivers/input/misc/tps65219-pwrbutton.c - F: drivers/irqchip/irq-omap-intc.c - F: drivers/mfd/*omap*.c - F: drivers/mfd/menelaus.c - F: drivers/mfd/palmas.c - F: drivers/mfd/tps65217.c - F: drivers/mfd/tps65218.c -+F: drivers/mfd/tps65219.c - F: drivers/mfd/tps65910.c - F: drivers/mfd/twl-core.[ch] - F: drivers/mfd/twl4030*.c -@@ -12841,6 +12870,7 @@ - F: drivers/regulator/pbias-regulator.c - F: drivers/regulator/tps65217-regulator.c - F: drivers/regulator/tps65218-regulator.c -+F: drivers/regulator/tps65219-regulator.c - F: drivers/regulator/tps65910-regulator.c - F: drivers/regulator/twl-regulator.c - F: drivers/regulator/twl6030-regulator.c -@@ -12866,6 +12896,15 @@ - S: Maintained - F: drivers/char/pcmcia/cm4040_cs.* +@@ -136,6 +142,12 @@ + WRITE_ONCE(*p, owner & ~RT_MUTEX_HAS_WAITERS); + } -+OMNIVISION OV1063x SENSOR DRIVER -+M: Benoit Parrot -+L: linux-media@vger.kernel.org -+S: Maintained -+T: git git://linuxtv.org/media_tree.git -+F: Documentation/devicetree/bindings/media/i2c/ov1063x.yaml -+F: drivers/media/i2c/ov1063x.c -+F: drivers/media/i2c/ov1063x_regs.h ++static int rt_mutex_real_waiter(struct rt_mutex_waiter *waiter) ++{ ++ return waiter && waiter != PI_WAKEUP_INPROGRESS && ++ waiter != PI_REQUEUE_INPROGRESS; ++} + - OMNIVISION OV13858 SENSOR DRIVER - M: Sakari Ailus - L: linux-media@vger.kernel.org -@@ -17284,7 +17323,7 @@ - F: drivers/irqchip/irq-xtensa-* + /* + * We can speed up the acquire/release, if there's no debugging state to be + * set up. +@@ -227,7 +239,7 @@ + * Only use with rt_mutex_waiter_{less,equal}() + */ + #define task_to_waiter(p) \ +- &(struct rt_mutex_waiter){ .prio = (p)->prio, .deadline = (p)->dl.deadline } ++ &(struct rt_mutex_waiter){ .prio = (p)->prio, .deadline = (p)->dl.deadline, .task = (p) } - TEXAS INSTRUMENTS ASoC DRIVERS --M: Peter Ujfalusi -+M: Peter Ujfalusi - L: alsa-devel@alsa-project.org (moderated for non-subscribers) - S: Maintained - F: sound/soc/ti/ -@@ -17296,9 +17335,22 @@ - F: Documentation/devicetree/bindings/iio/dac/ti,dac7612.txt - F: drivers/iio/dac/ti-dac7612.c + static inline int + rt_mutex_waiter_less(struct rt_mutex_waiter *left, +@@ -267,6 +279,27 @@ + return 1; + } -+TEXAS INSTRUMENTS DMA DRIVERS -+M: Peter Ujfalusi -+L: dmaengine@vger.kernel.org -+S: Maintained -+F: Documentation/devicetree/bindings/dma/ti-dma-crossbar.txt -+F: Documentation/devicetree/bindings/dma/ti-edma.txt -+F: Documentation/devicetree/bindings/dma/ti/ -+F: drivers/dma/ti/ -+X: drivers/dma/ti/cppi41.c -+F: include/linux/dma/k3-udma-glue.h -+F: include/linux/dma/ti-cppi5.h -+F: include/linux/dma/k3-psil.h ++#define STEAL_NORMAL 0 ++#define STEAL_LATERAL 1 + - TEXAS INSTRUMENTS' SYSTEM CONTROL INTERFACE (TISCI) PROTOCOL DRIVER - M: Nishanth Menon --M: Tero Kristo -+M: Tero Kristo - M: Santosh Shilimkar - L: linux-arm-kernel@lists.infradead.org - S: Maintained -@@ -17436,12 +17488,19 @@ - F: drivers/clk/clk-cdce706.c - - TI CLOCK DRIVER --M: Tero Kristo -+M: Tero Kristo - L: linux-omap@vger.kernel.org --S: Maintained -+S: Odd Fixes - F: drivers/clk/ti/ - F: include/linux/clk/ti.h - -+TI J721E CSI2RX DRIVER -+M: Pratyush Yadav -+L: linux-media@vger.kernel.org -+S: Supported -+F: Documentation/devicetree/bindings/media/ti,j721e-csi2rx.yaml -+F: drivers/media/platform/ti/j721e-csi2rx/ ++static inline int ++rt_mutex_steal(struct rt_mutex *lock, struct rt_mutex_waiter *waiter, int mode) ++{ ++ struct rt_mutex_waiter *top_waiter = rt_mutex_top_waiter(lock); + - TI DAVINCI MACHINE SUPPORT - M: Sekhar Nori - R: Bartosz Golaszewski -@@ -17464,7 +17523,7 @@ - M: Keerthy - L: linux-gpio@vger.kernel.org - S: Maintained --F: Documentation/devicetree/bindings/gpio/gpio-davinci.txt -+F: Documentation/devicetree/bindings/gpio/gpio-davinci.yaml - F: drivers/gpio/gpio-davinci.c - - TI DAVINCI SERIES MEDIA DRIVER -@@ -17575,7 +17634,7 @@ - F: drivers/nfc/trf7970a.c - - TI TWL4030 SERIES SOC CODEC DRIVER --M: Peter Ujfalusi -+M: Peter Ujfalusi - L: alsa-devel@alsa-project.org (moderated for non-subscribers) - S: Maintained - F: sound/soc/codecs/twl4030* -@@ -17587,8 +17646,10 @@ - W: http://linuxtv.org/ - Q: http://patchwork.linuxtv.org/project/linux-media/list/ - F: Documentation/devicetree/bindings/media/ti,cal.yaml -+F: Documentation/devicetree/bindings/media/ti,vip.yaml - F: Documentation/devicetree/bindings/media/ti,vpe.yaml --F: drivers/media/platform/ti-vpe/ -+F: drivers/media/platform/ti/cal/ -+F: drivers/media/platform/ti/vpe/ - - TI WILINK WIRELESS DRIVERS - L: linux-wireless@vger.kernel.org -@@ -18877,6 +18938,15 @@ - F: include/linux/watchdog.h - F: include/uapi/linux/watchdog.h - -+WAVE5 VPU CODEC DRIVER -+M: Nas Chung -+M: Robert Beckett -+M: Sebastian Fricke -+L: linux-media@vger.kernel.org -+S: Maintained -+F: Documentation/devicetree/bindings/media/cnm,wave5.yaml -+F: drivers/media/platform/chips-media/wave5/ ++ if (waiter == top_waiter || rt_mutex_waiter_less(waiter, top_waiter)) ++ return 1; + - WHISKEYCOVE PMIC GPIO DRIVER - M: Kuppuswamy Sathyanarayanan - L: linux-gpio@vger.kernel.org -diff -Naur --no-dereference a/Makefile b/Makefile ---- a/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/Makefile 2024-08-28 19:44:05.592037860 -0400 -@@ -1369,6 +1369,9 @@ - %.dtb: include/config/kernel.release scripts_dtc - $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ - -+%.dtbo: include/config/kernel.release scripts_dtc -+ $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ ++ /* ++ * Note that RT tasks are excluded from lateral-steals ++ * to prevent the introduction of an unbounded latency. ++ */ ++ if (mode == STEAL_NORMAL || rt_task(waiter->task)) ++ return 0; + - PHONY += dtbs dtbs_install dtbs_check - dtbs: include/config/kernel.release scripts_dtc - $(Q)$(MAKE) $(build)=$(dtstree) -@@ -1830,7 +1833,7 @@ - @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ - \( -name '*.[aios]' -o -name '*.ko' -o -name '.*.cmd' \ - -o -name '*.ko.*' \ -- -o -name '*.dtb' -o -name '*.dtb.S' -o -name '*.dt.yaml' \ -+ -o -name '*.dtb' -o -name '*.dtbo' -o -name '*.dtb.S' -o -name '*.dt.yaml' \ - -o -name '*.dwo' -o -name '*.lst' \ - -o -name '*.su' -o -name '*.mod' \ - -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ -diff -Naur --no-dereference a/mm/filemap.c b/mm/filemap.c ---- a/mm/filemap.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/mm/filemap.c 2024-08-28 19:44:05.668038268 -0400 -@@ -2913,7 +2913,7 @@ - vm_fault_t ret = VM_FAULT_LOCKED; - - sb_start_pagefault(inode->i_sb); -- file_update_time(vmf->vma->vm_file); -+ vma_file_update_time(vmf->vma); - lock_page(page); - if (page->mapping != inode->i_mapping) { - unlock_page(page); -diff -Naur --no-dereference a/mm/Makefile b/mm/Makefile ---- a/mm/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/mm/Makefile 2024-08-28 19:44:05.668038268 -0400 -@@ -120,3 +120,4 @@ - obj-$(CONFIG_MAPPING_DIRTY_HELPERS) += mapping_dirty_helpers.o - obj-$(CONFIG_PTDUMP_CORE) += ptdump.o - obj-$(CONFIG_PAGE_REPORTING) += page_reporting.o -+obj-y += prfile.o -diff -Naur --no-dereference a/mm/mmap.c b/mm/mmap.c ---- a/mm/mmap.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/mm/mmap.c 2024-08-28 19:44:05.668038268 -0400 -@@ -179,7 +179,7 @@ - if (vma->vm_ops && vma->vm_ops->close) - vma->vm_ops->close(vma); - if (vma->vm_file) -- fput(vma->vm_file); -+ vma_fput(vma); - mpol_put(vma_policy(vma)); - vm_area_free(vma); - return next; -@@ -951,7 +951,7 @@ - if (remove_next) { - if (file) { - uprobe_munmap(next, next->vm_start, next->vm_end); -- fput(file); -+ vma_fput(vma); - } - if (next->anon_vma) - anon_vma_merge(vma, next); -@@ -1834,7 +1834,7 @@ - * fput the vma->vm_file here or we would add an extra fput for file - * and cause general protection fault ultimately. - */ -- fput(vma->vm_file); -+ vma_fput(vma); - vm_area_free(vma); - vma = merge; - /* Update vm_flags to pick up the change. */ -@@ -1904,8 +1904,8 @@ - if (vma->vm_ops && vma->vm_ops->close) - vma->vm_ops->close(vma); - unmap_and_free_vma: -+ vma_fput(vma); - vma->vm_file = NULL; -- fput(file); ++ return rt_mutex_waiter_equal(waiter, top_waiter); ++} ++ + static void + rt_mutex_enqueue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter) + { +@@ -371,6 +404,14 @@ + return debug_rt_mutex_detect_deadlock(waiter, chwalk); + } - /* Undo any partial mapping done by a device driver. */ - unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end); -@@ -2772,7 +2772,7 @@ - goto out_free_mpol; ++static void rt_mutex_wake_waiter(struct rt_mutex_waiter *waiter) ++{ ++ if (waiter->savestate) ++ wake_up_lock_sleeper(waiter->task); ++ else ++ wake_up_process(waiter->task); ++} ++ + /* + * Max number of times we'll walk the boosting chain: + */ +@@ -378,7 +419,8 @@ - if (new->vm_file) -- get_file(new->vm_file); -+ vma_get_file(new); + static inline struct rt_mutex *task_blocked_on_lock(struct task_struct *p) + { +- return p->pi_blocked_on ? p->pi_blocked_on->lock : NULL; ++ return rt_mutex_real_waiter(p->pi_blocked_on) ? ++ p->pi_blocked_on->lock : NULL; + } - if (new->vm_ops && new->vm_ops->open) - new->vm_ops->open(new); -@@ -2791,7 +2791,7 @@ - if (new->vm_ops && new->vm_ops->close) - new->vm_ops->close(new); - if (new->vm_file) -- fput(new->vm_file); -+ vma_fput(new); - unlink_anon_vmas(new); - out_free_mpol: - mpol_put(vma_policy(new)); -@@ -2985,6 +2985,9 @@ - unsigned long populate = 0; - unsigned long ret = -EINVAL; - struct file *file; -+#if 1 /* IS_ENABLED(CONFIG_AUFS_FS) */ -+ struct file *prfile; -+#endif + /* +@@ -514,7 +556,7 @@ + * reached or the state of the chain has changed while we + * dropped the locks. + */ +- if (!waiter) ++ if (!rt_mutex_real_waiter(waiter)) + goto out_unlock_pi; - pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/vm/remap_file_pages.rst.\n", - current->comm, current->pid); -@@ -3059,10 +3062,34 @@ - } + /* +@@ -597,7 +639,6 @@ + * walk, we detected a deadlock. + */ + if (lock == orig_lock || rt_mutex_owner(lock) == top_task) { +- debug_rt_mutex_deadlock(chwalk, orig_waiter, lock); + raw_spin_unlock(&lock->wait_lock); + ret = -EDEADLK; + goto out_unlock_pi; +@@ -694,13 +735,16 @@ + * follow here. This is the end of the chain we are walking. + */ + if (!rt_mutex_owner(lock)) { ++ struct rt_mutex_waiter *lock_top_waiter; ++ + /* + * If the requeue [7] above changed the top waiter, + * then we need to wake the new top waiter up to try + * to get the lock. + */ +- if (prerequeue_top_waiter != rt_mutex_top_waiter(lock)) +- wake_up_process(rt_mutex_top_waiter(lock)->task); ++ lock_top_waiter = rt_mutex_top_waiter(lock); ++ if (prerequeue_top_waiter != lock_top_waiter) ++ rt_mutex_wake_waiter(lock_top_waiter); + raw_spin_unlock_irq(&lock->wait_lock); + return 0; } +@@ -801,9 +845,11 @@ + * @task: The task which wants to acquire the lock + * @waiter: The waiter that is queued to the lock's wait tree if the + * callsite called task_blocked_on_lock(), otherwise NULL ++ * @mode: Lock steal mode (STEAL_NORMAL, STEAL_LATERAL) + */ +-static int try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task, +- struct rt_mutex_waiter *waiter) ++static int __try_to_take_rt_mutex(struct rt_mutex *lock, ++ struct task_struct *task, ++ struct rt_mutex_waiter *waiter, int mode) + { + lockdep_assert_held(&lock->wait_lock); -+#if 1 /* IS_ENABLED(CONFIG_AUFS_FS) */ -+ vma_get_file(vma); -+ file = vma->vm_file; -+ prfile = vma->vm_prfile; -+ ret = do_mmap(vma->vm_file, start, size, -+ prot, flags, pgoff, &populate, NULL); -+ if (!IS_ERR_VALUE(ret) && file && prfile) { -+ struct vm_area_struct *new_vma; +@@ -839,12 +885,11 @@ + */ + if (waiter) { + /* +- * If waiter is not the highest priority waiter of +- * @lock, give up. ++ * If waiter is not the highest priority waiter of @lock, ++ * or its peer when lateral steal is allowed, give up. + */ +- if (waiter != rt_mutex_top_waiter(lock)) ++ if (!rt_mutex_steal(lock, waiter, mode)) + return 0; +- + /* + * We can acquire the lock. Remove the waiter from the + * lock waiters tree. +@@ -862,14 +907,12 @@ + */ + if (rt_mutex_has_waiters(lock)) { + /* +- * If @task->prio is greater than or equal to +- * the top waiter priority (kernel view), +- * @task lost. ++ * If @task->prio is greater than the top waiter ++ * priority (kernel view), or equal to it when a ++ * lateral steal is forbidden, @task lost. + */ +- if (!rt_mutex_waiter_less(task_to_waiter(task), +- rt_mutex_top_waiter(lock))) ++ if (!rt_mutex_steal(lock, task_to_waiter(task), mode)) + return 0; +- + /* + * The current top waiter stays enqueued. We + * don't have to change anything in the lock +@@ -916,6 +959,329 @@ + return 1; + } + ++#ifdef CONFIG_PREEMPT_RT ++/* ++ * preemptible spin_lock functions: ++ */ ++static inline void rt_spin_lock_fastlock(struct rt_mutex *lock, ++ void (*slowfn)(struct rt_mutex *lock)) ++{ ++ might_sleep_no_state_check(); + -+ new_vma = find_vma(mm, ret); -+ if (!new_vma->vm_prfile) -+ new_vma->vm_prfile = prfile; -+ if (prfile) -+ get_file(prfile); ++ if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current))) ++ return; ++ else ++ slowfn(lock); ++} ++ ++static inline void rt_spin_lock_fastunlock(struct rt_mutex *lock, ++ void (*slowfn)(struct rt_mutex *lock)) ++{ ++ if (likely(rt_mutex_cmpxchg_release(lock, current, NULL))) ++ return; ++ else ++ slowfn(lock); ++} ++#ifdef CONFIG_SMP ++/* ++ * Note that owner is a speculative pointer and dereferencing relies ++ * on rcu_read_lock() and the check against the lock owner. ++ */ ++static int adaptive_wait(struct rt_mutex *lock, ++ struct task_struct *owner) ++{ ++ int res = 0; ++ ++ rcu_read_lock(); ++ for (;;) { ++ if (owner != rt_mutex_owner(lock)) ++ break; ++ /* ++ * Ensure that owner->on_cpu is dereferenced _after_ ++ * checking the above to be valid. ++ */ ++ barrier(); ++ if (!owner->on_cpu) { ++ res = 1; ++ break; ++ } ++ cpu_relax(); + } ++ rcu_read_unlock(); ++ return res; ++} ++#else ++static int adaptive_wait(struct rt_mutex *lock, ++ struct task_struct *orig_owner) ++{ ++ return 1; ++} ++#endif ++ ++static int task_blocks_on_rt_mutex(struct rt_mutex *lock, ++ struct rt_mutex_waiter *waiter, ++ struct task_struct *task, ++ enum rtmutex_chainwalk chwalk); ++/* ++ * Slow path lock function spin_lock style: this variant is very ++ * careful not to miss any non-lock wakeups. ++ * ++ * We store the current state under p->pi_lock in p->saved_state and ++ * the try_to_wake_up() code handles this accordingly. ++ */ ++void __sched rt_spin_lock_slowlock_locked(struct rt_mutex *lock, ++ struct rt_mutex_waiter *waiter, ++ unsigned long flags) ++{ ++ struct task_struct *lock_owner, *self = current; ++ struct rt_mutex_waiter *top_waiter; ++ int ret; ++ ++ if (__try_to_take_rt_mutex(lock, self, NULL, STEAL_LATERAL)) ++ return; ++ ++ BUG_ON(rt_mutex_owner(lock) == self); ++ + /* -+ * two fput()s instead of vma_fput(vma), -+ * coz vma may not be available anymore. ++ * We save whatever state the task is in and we'll restore it ++ * after acquiring the lock taking real wakeups into account ++ * as well. We are serialized via pi_lock against wakeups. See ++ * try_to_wake_up(). + */ -+ fput(file); -+ if (prfile) -+ fput(prfile); -+#else - file = get_file(vma->vm_file); - ret = do_mmap(vma->vm_file, start, size, - prot, flags, pgoff, &populate, NULL); - fput(file); -+#endif /* CONFIG_AUFS_FS */ - out: - mmap_write_unlock(mm); - if (populate) -@@ -3349,7 +3376,7 @@ - if (anon_vma_clone(new_vma, vma)) - goto out_free_mempol; - if (new_vma->vm_file) -- get_file(new_vma->vm_file); -+ vma_get_file(new_vma); - if (new_vma->vm_ops && new_vma->vm_ops->open) ++ raw_spin_lock(&self->pi_lock); ++ self->saved_state = self->state; ++ __set_current_state_no_track(TASK_UNINTERRUPTIBLE); ++ raw_spin_unlock(&self->pi_lock); ++ ++ ret = task_blocks_on_rt_mutex(lock, waiter, self, RT_MUTEX_MIN_CHAINWALK); ++ BUG_ON(ret); ++ ++ for (;;) { ++ /* Try to acquire the lock again. */ ++ if (__try_to_take_rt_mutex(lock, self, waiter, STEAL_LATERAL)) ++ break; ++ ++ top_waiter = rt_mutex_top_waiter(lock); ++ lock_owner = rt_mutex_owner(lock); ++ ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); ++ ++ if (top_waiter != waiter || adaptive_wait(lock, lock_owner)) ++ preempt_schedule_lock(); ++ ++ raw_spin_lock_irqsave(&lock->wait_lock, flags); ++ ++ raw_spin_lock(&self->pi_lock); ++ __set_current_state_no_track(TASK_UNINTERRUPTIBLE); ++ raw_spin_unlock(&self->pi_lock); ++ } ++ ++ /* ++ * Restore the task state to current->saved_state. We set it ++ * to the original state above and the try_to_wake_up() code ++ * has possibly updated it when a real (non-rtmutex) wakeup ++ * happened while we were blocked. Clear saved_state so ++ * try_to_wakeup() does not get confused. ++ */ ++ raw_spin_lock(&self->pi_lock); ++ __set_current_state_no_track(self->saved_state); ++ self->saved_state = TASK_RUNNING; ++ raw_spin_unlock(&self->pi_lock); ++ ++ /* ++ * try_to_take_rt_mutex() sets the waiter bit ++ * unconditionally. We might have to fix that up: ++ */ ++ fixup_rt_mutex_waiters(lock); ++ ++ BUG_ON(rt_mutex_has_waiters(lock) && waiter == rt_mutex_top_waiter(lock)); ++ BUG_ON(!RB_EMPTY_NODE(&waiter->tree_entry)); ++} ++ ++static void noinline __sched rt_spin_lock_slowlock(struct rt_mutex *lock) ++{ ++ struct rt_mutex_waiter waiter; ++ unsigned long flags; ++ ++ rt_mutex_init_waiter(&waiter, true); ++ ++ raw_spin_lock_irqsave(&lock->wait_lock, flags); ++ rt_spin_lock_slowlock_locked(lock, &waiter, flags); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); ++ debug_rt_mutex_free_waiter(&waiter); ++} ++ ++static bool __sched __rt_mutex_unlock_common(struct rt_mutex *lock, ++ struct wake_q_head *wake_q, ++ struct wake_q_head *wq_sleeper); ++/* ++ * Slow path to release a rt_mutex spin_lock style ++ */ ++void __sched rt_spin_lock_slowunlock(struct rt_mutex *lock) ++{ ++ unsigned long flags; ++ DEFINE_WAKE_Q(wake_q); ++ DEFINE_WAKE_Q(wake_sleeper_q); ++ bool postunlock; ++ ++ raw_spin_lock_irqsave(&lock->wait_lock, flags); ++ postunlock = __rt_mutex_unlock_common(lock, &wake_q, &wake_sleeper_q); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); ++ ++ if (postunlock) ++ rt_mutex_postunlock(&wake_q, &wake_sleeper_q); ++} ++ ++void __lockfunc rt_spin_lock(spinlock_t *lock) ++{ ++ spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); ++ rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock); ++ rcu_read_lock(); ++ migrate_disable(); ++} ++EXPORT_SYMBOL(rt_spin_lock); ++ ++void __lockfunc __rt_spin_lock(struct rt_mutex *lock) ++{ ++ rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock); ++} ++ ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++void __lockfunc rt_spin_lock_nested(spinlock_t *lock, int subclass) ++{ ++ spin_acquire(&lock->dep_map, subclass, 0, _RET_IP_); ++ rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock); ++ rcu_read_lock(); ++ migrate_disable(); ++} ++EXPORT_SYMBOL(rt_spin_lock_nested); ++ ++void __lockfunc rt_spin_lock_nest_lock(spinlock_t *lock, ++ struct lockdep_map *nest_lock) ++{ ++ spin_acquire_nest(&lock->dep_map, 0, 0, nest_lock, _RET_IP_); ++ rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock); ++ rcu_read_lock(); ++ migrate_disable(); ++} ++EXPORT_SYMBOL(rt_spin_lock_nest_lock); ++#endif ++ ++void __lockfunc rt_spin_unlock(spinlock_t *lock) ++{ ++ /* NOTE: we always pass in '1' for nested, for simplicity */ ++ spin_release(&lock->dep_map, _RET_IP_); ++ migrate_enable(); ++ rcu_read_unlock(); ++ rt_spin_lock_fastunlock(&lock->lock, rt_spin_lock_slowunlock); ++} ++EXPORT_SYMBOL(rt_spin_unlock); ++ ++void __lockfunc __rt_spin_unlock(struct rt_mutex *lock) ++{ ++ rt_spin_lock_fastunlock(lock, rt_spin_lock_slowunlock); ++} ++EXPORT_SYMBOL(__rt_spin_unlock); ++ ++/* ++ * Wait for the lock to get unlocked: instead of polling for an unlock ++ * (like raw spinlocks do), we lock and unlock, to force the kernel to ++ * schedule if there's contention: ++ */ ++void __lockfunc rt_spin_lock_unlock(spinlock_t *lock) ++{ ++ spin_lock(lock); ++ spin_unlock(lock); ++} ++EXPORT_SYMBOL(rt_spin_lock_unlock); ++ ++int __lockfunc rt_spin_trylock(spinlock_t *lock) ++{ ++ int ret; ++ ++ ret = __rt_mutex_trylock(&lock->lock); ++ if (ret) { ++ spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); ++ rcu_read_lock(); ++ migrate_disable(); ++ } ++ return ret; ++} ++EXPORT_SYMBOL(rt_spin_trylock); ++ ++int __lockfunc rt_spin_trylock_bh(spinlock_t *lock) ++{ ++ int ret; ++ ++ local_bh_disable(); ++ ret = __rt_mutex_trylock(&lock->lock); ++ if (ret) { ++ spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); ++ rcu_read_lock(); ++ migrate_disable(); ++ } else { ++ local_bh_enable(); ++ } ++ return ret; ++} ++EXPORT_SYMBOL(rt_spin_trylock_bh); ++ ++void ++__rt_spin_lock_init(spinlock_t *lock, const char *name, struct lock_class_key *key) ++{ ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++ /* ++ * Make sure we are not reinitializing a held lock: ++ */ ++ debug_check_no_locks_freed((void *)lock, sizeof(*lock)); ++ lockdep_init_map(&lock->dep_map, name, key, 0); ++#endif ++} ++EXPORT_SYMBOL(__rt_spin_lock_init); ++ ++#endif /* PREEMPT_RT */ ++ ++#ifdef CONFIG_PREEMPT_RT ++ static inline int __sched ++__mutex_lock_check_stamp(struct rt_mutex *lock, struct ww_acquire_ctx *ctx) ++{ ++ struct ww_mutex *ww = container_of(lock, struct ww_mutex, base.lock); ++ struct ww_acquire_ctx *hold_ctx = READ_ONCE(ww->ctx); ++ ++ if (!hold_ctx) ++ return 0; ++ ++ if (unlikely(ctx == hold_ctx)) ++ return -EALREADY; ++ ++ if (ctx->stamp - hold_ctx->stamp <= LONG_MAX && ++ (ctx->stamp != hold_ctx->stamp || ctx > hold_ctx)) { ++#ifdef CONFIG_DEBUG_MUTEXES ++ DEBUG_LOCKS_WARN_ON(ctx->contending_lock); ++ ctx->contending_lock = ww; ++#endif ++ return -EDEADLK; ++ } ++ ++ return 0; ++} ++#else ++ static inline int __sched ++__mutex_lock_check_stamp(struct rt_mutex *lock, struct ww_acquire_ctx *ctx) ++{ ++ BUG(); ++ return 0; ++} ++ ++#endif ++ ++static inline int ++try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task, ++ struct rt_mutex_waiter *waiter) ++{ ++ return __try_to_take_rt_mutex(lock, task, waiter, STEAL_NORMAL); ++} ++ + /* + * Task blocks on lock. + * +@@ -948,6 +1314,22 @@ + return -EDEADLK; + + raw_spin_lock(&task->pi_lock); ++ /* ++ * In the case of futex requeue PI, this will be a proxy ++ * lock. The task will wake unaware that it is enqueueed on ++ * this lock. Avoid blocking on two locks and corrupting ++ * pi_blocked_on via the PI_WAKEUP_INPROGRESS ++ * flag. futex_wait_requeue_pi() sets this when it wakes up ++ * before requeue (due to a signal or timeout). Do not enqueue ++ * the task if PI_WAKEUP_INPROGRESS is set. ++ */ ++ if (task != current && task->pi_blocked_on == PI_WAKEUP_INPROGRESS) { ++ raw_spin_unlock(&task->pi_lock); ++ return -EAGAIN; ++ } ++ ++ BUG_ON(rt_mutex_real_waiter(task->pi_blocked_on)); ++ + waiter->task = task; + waiter->lock = lock; + waiter->prio = task->prio; +@@ -971,7 +1353,7 @@ + rt_mutex_enqueue_pi(owner, waiter); + + rt_mutex_adjust_prio(owner); +- if (owner->pi_blocked_on) ++ if (rt_mutex_real_waiter(owner->pi_blocked_on)) + chain_walk = 1; + } else if (rt_mutex_cond_detect_deadlock(waiter, chwalk)) { + chain_walk = 1; +@@ -1013,6 +1395,7 @@ + * Called with lock->wait_lock held and interrupts disabled. + */ + static void mark_wakeup_next_waiter(struct wake_q_head *wake_q, ++ struct wake_q_head *wake_sleeper_q, + struct rt_mutex *lock) + { + struct rt_mutex_waiter *waiter; +@@ -1052,7 +1435,10 @@ + * Pairs with preempt_enable() in rt_mutex_postunlock(); + */ + preempt_disable(); +- wake_q_add(wake_q, waiter->task); ++ if (waiter->savestate) ++ wake_q_add_sleeper(wake_sleeper_q, waiter->task); ++ else ++ wake_q_add(wake_q, waiter->task); + raw_spin_unlock(¤t->pi_lock); + } + +@@ -1067,7 +1453,7 @@ + { + bool is_top_waiter = (waiter == rt_mutex_top_waiter(lock)); + struct task_struct *owner = rt_mutex_owner(lock); +- struct rt_mutex *next_lock; ++ struct rt_mutex *next_lock = NULL; + + lockdep_assert_held(&lock->wait_lock); + +@@ -1093,7 +1479,8 @@ + rt_mutex_adjust_prio(owner); + + /* Store the lock on which owner is blocked or NULL */ +- next_lock = task_blocked_on_lock(owner); ++ if (rt_mutex_real_waiter(owner->pi_blocked_on)) ++ next_lock = task_blocked_on_lock(owner); + + raw_spin_unlock(&owner->pi_lock); + +@@ -1129,26 +1516,28 @@ + raw_spin_lock_irqsave(&task->pi_lock, flags); + + waiter = task->pi_blocked_on; +- if (!waiter || rt_mutex_waiter_equal(waiter, task_to_waiter(task))) { ++ if (!rt_mutex_real_waiter(waiter) || ++ rt_mutex_waiter_equal(waiter, task_to_waiter(task))) { + raw_spin_unlock_irqrestore(&task->pi_lock, flags); + return; + } + next_lock = waiter->lock; +- raw_spin_unlock_irqrestore(&task->pi_lock, flags); + + /* gets dropped in rt_mutex_adjust_prio_chain()! */ + get_task_struct(task); + ++ raw_spin_unlock_irqrestore(&task->pi_lock, flags); + rt_mutex_adjust_prio_chain(task, RT_MUTEX_MIN_CHAINWALK, NULL, + next_lock, NULL, task); + } + +-void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter) ++void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter, bool savestate) + { + debug_rt_mutex_init_waiter(waiter); + RB_CLEAR_NODE(&waiter->pi_tree_entry); + RB_CLEAR_NODE(&waiter->tree_entry); + waiter->task = NULL; ++ waiter->savestate = savestate; + } + + /** +@@ -1164,7 +1553,8 @@ + static int __sched + __rt_mutex_slowlock(struct rt_mutex *lock, int state, + struct hrtimer_sleeper *timeout, +- struct rt_mutex_waiter *waiter) ++ struct rt_mutex_waiter *waiter, ++ struct ww_acquire_ctx *ww_ctx) + { + int ret = 0; + +@@ -1173,24 +1563,23 @@ + if (try_to_take_rt_mutex(lock, current, waiter)) + break; + +- /* +- * TASK_INTERRUPTIBLE checks for signals and +- * timeout. Ignored otherwise. +- */ +- if (likely(state == TASK_INTERRUPTIBLE)) { +- /* Signal pending? */ +- if (signal_pending(current)) +- ret = -EINTR; +- if (timeout && !timeout->task) +- ret = -ETIMEDOUT; ++ if (timeout && !timeout->task) { ++ ret = -ETIMEDOUT; ++ break; ++ } ++ if (signal_pending_state(state, current)) { ++ ret = -EINTR; ++ break; ++ } ++ ++ if (ww_ctx && ww_ctx->acquired > 0) { ++ ret = __mutex_lock_check_stamp(lock, ww_ctx); + if (ret) + break; + } + + raw_spin_unlock_irq(&lock->wait_lock); + +- debug_rt_mutex_print_deadlock(waiter); +- + schedule(); + + raw_spin_lock_irq(&lock->wait_lock); +@@ -1211,43 +1600,110 @@ + if (res != -EDEADLOCK || detect_deadlock) + return; + +- /* +- * Yell lowdly and stop the task right here. +- */ +- rt_mutex_print_deadlock(w); + while (1) { + set_current_state(TASK_INTERRUPTIBLE); + schedule(); + } + } + +-/* +- * Slow path lock function: +- */ +-static int __sched +-rt_mutex_slowlock(struct rt_mutex *lock, int state, +- struct hrtimer_sleeper *timeout, +- enum rtmutex_chainwalk chwalk) ++static __always_inline void ww_mutex_lock_acquired(struct ww_mutex *ww, ++ struct ww_acquire_ctx *ww_ctx) + { +- struct rt_mutex_waiter waiter; +- unsigned long flags; +- int ret = 0; ++#ifdef CONFIG_DEBUG_MUTEXES ++ /* ++ * If this WARN_ON triggers, you used ww_mutex_lock to acquire, ++ * but released with a normal mutex_unlock in this call. ++ * ++ * This should never happen, always use ww_mutex_unlock. ++ */ ++ DEBUG_LOCKS_WARN_ON(ww->ctx); ++ ++ /* ++ * Not quite done after calling ww_acquire_done() ? ++ */ ++ DEBUG_LOCKS_WARN_ON(ww_ctx->done_acquire); ++ ++ if (ww_ctx->contending_lock) { ++ /* ++ * After -EDEADLK you tried to ++ * acquire a different ww_mutex? Bad! ++ */ ++ DEBUG_LOCKS_WARN_ON(ww_ctx->contending_lock != ww); + +- rt_mutex_init_waiter(&waiter); ++ /* ++ * You called ww_mutex_lock after receiving -EDEADLK, ++ * but 'forgot' to unlock everything else first? ++ */ ++ DEBUG_LOCKS_WARN_ON(ww_ctx->acquired > 0); ++ ww_ctx->contending_lock = NULL; ++ } + + /* +- * Technically we could use raw_spin_[un]lock_irq() here, but this can +- * be called in early boot if the cmpxchg() fast path is disabled +- * (debug, no architecture support). In this case we will acquire the +- * rtmutex with lock->wait_lock held. But we cannot unconditionally +- * enable interrupts in that early boot case. So we need to use the +- * irqsave/restore variants. ++ * Naughty, using a different class will lead to undefined behavior! + */ +- raw_spin_lock_irqsave(&lock->wait_lock, flags); ++ DEBUG_LOCKS_WARN_ON(ww_ctx->ww_class != ww->ww_class); ++#endif ++ ww_ctx->acquired++; ++} ++ ++#ifdef CONFIG_PREEMPT_RT ++static void ww_mutex_account_lock(struct rt_mutex *lock, ++ struct ww_acquire_ctx *ww_ctx) ++{ ++ struct ww_mutex *ww = container_of(lock, struct ww_mutex, base.lock); ++ struct rt_mutex_waiter *waiter, *n; ++ ++ /* ++ * This branch gets optimized out for the common case, ++ * and is only important for ww_mutex_lock. ++ */ ++ ww_mutex_lock_acquired(ww, ww_ctx); ++ ww->ctx = ww_ctx; ++ ++ /* ++ * Give any possible sleeping processes the chance to wake up, ++ * so they can recheck if they have to back off. ++ */ ++ rbtree_postorder_for_each_entry_safe(waiter, n, &lock->waiters.rb_root, ++ tree_entry) { ++ /* XXX debug rt mutex waiter wakeup */ ++ ++ BUG_ON(waiter->lock != lock); ++ rt_mutex_wake_waiter(waiter); ++ } ++} ++ ++#else ++ ++static void ww_mutex_account_lock(struct rt_mutex *lock, ++ struct ww_acquire_ctx *ww_ctx) ++{ ++ BUG(); ++} ++#endif ++ ++int __sched rt_mutex_slowlock_locked(struct rt_mutex *lock, int state, ++ struct hrtimer_sleeper *timeout, ++ enum rtmutex_chainwalk chwalk, ++ struct ww_acquire_ctx *ww_ctx, ++ struct rt_mutex_waiter *waiter) ++{ ++ int ret; ++ ++#ifdef CONFIG_PREEMPT_RT ++ if (ww_ctx) { ++ struct ww_mutex *ww; ++ ++ ww = container_of(lock, struct ww_mutex, base.lock); ++ if (unlikely(ww_ctx == READ_ONCE(ww->ctx))) ++ return -EALREADY; ++ } ++#endif + + /* Try to acquire the lock again: */ + if (try_to_take_rt_mutex(lock, current, NULL)) { +- raw_spin_unlock_irqrestore(&lock->wait_lock, flags); ++ if (ww_ctx) ++ ww_mutex_account_lock(lock, ww_ctx); + return 0; + } + +@@ -1257,16 +1713,26 @@ + if (unlikely(timeout)) + hrtimer_start_expires(&timeout->timer, HRTIMER_MODE_ABS); + +- ret = task_blocks_on_rt_mutex(lock, &waiter, current, chwalk); ++ ret = task_blocks_on_rt_mutex(lock, waiter, current, chwalk); + +- if (likely(!ret)) ++ if (likely(!ret)) { + /* sleep on the mutex */ +- ret = __rt_mutex_slowlock(lock, state, timeout, &waiter); ++ ret = __rt_mutex_slowlock(lock, state, timeout, waiter, ++ ww_ctx); ++ } else if (ww_ctx) { ++ /* ww_mutex received EDEADLK, let it become EALREADY */ ++ ret = __mutex_lock_check_stamp(lock, ww_ctx); ++ BUG_ON(!ret); ++ } + + if (unlikely(ret)) { + __set_current_state(TASK_RUNNING); +- remove_waiter(lock, &waiter); +- rt_mutex_handle_deadlock(ret, chwalk, &waiter); ++ remove_waiter(lock, waiter); ++ /* ww_mutex wants to report EDEADLK/EALREADY, let it */ ++ if (!ww_ctx) ++ rt_mutex_handle_deadlock(ret, chwalk, waiter); ++ } else if (ww_ctx) { ++ ww_mutex_account_lock(lock, ww_ctx); + } + + /* +@@ -1274,6 +1740,36 @@ + * unconditionally. We might have to fix that up. + */ + fixup_rt_mutex_waiters(lock); ++ return ret; ++} ++ ++/* ++ * Slow path lock function: ++ */ ++static int __sched ++rt_mutex_slowlock(struct rt_mutex *lock, int state, ++ struct hrtimer_sleeper *timeout, ++ enum rtmutex_chainwalk chwalk, ++ struct ww_acquire_ctx *ww_ctx) ++{ ++ struct rt_mutex_waiter waiter; ++ unsigned long flags; ++ int ret = 0; ++ ++ rt_mutex_init_waiter(&waiter, false); ++ ++ /* ++ * Technically we could use raw_spin_[un]lock_irq() here, but this can ++ * be called in early boot if the cmpxchg() fast path is disabled ++ * (debug, no architecture support). In this case we will acquire the ++ * rtmutex with lock->wait_lock held. But we cannot unconditionally ++ * enable interrupts in that early boot case. So we need to use the ++ * irqsave/restore variants. ++ */ ++ raw_spin_lock_irqsave(&lock->wait_lock, flags); ++ ++ ret = rt_mutex_slowlock_locked(lock, state, timeout, chwalk, ww_ctx, ++ &waiter); + + raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + +@@ -1334,7 +1830,8 @@ + * Return whether the current task needs to call rt_mutex_postunlock(). + */ + static bool __sched rt_mutex_slowunlock(struct rt_mutex *lock, +- struct wake_q_head *wake_q) ++ struct wake_q_head *wake_q, ++ struct wake_q_head *wake_sleeper_q) + { + unsigned long flags; + +@@ -1388,7 +1885,7 @@ + * + * Queue the next waiter for wakeup once we release the wait_lock. + */ +- mark_wakeup_next_waiter(wake_q, lock); ++ mark_wakeup_next_waiter(wake_q, wake_sleeper_q, lock); + raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + + return true; /* call rt_mutex_postunlock() */ +@@ -1402,29 +1899,16 @@ + */ + static inline int + rt_mutex_fastlock(struct rt_mutex *lock, int state, ++ struct ww_acquire_ctx *ww_ctx, + int (*slowfn)(struct rt_mutex *lock, int state, + struct hrtimer_sleeper *timeout, +- enum rtmutex_chainwalk chwalk)) ++ enum rtmutex_chainwalk chwalk, ++ struct ww_acquire_ctx *ww_ctx)) + { + if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current))) + return 0; + +- return slowfn(lock, state, NULL, RT_MUTEX_MIN_CHAINWALK); +-} +- +-static inline int +-rt_mutex_timed_fastlock(struct rt_mutex *lock, int state, +- struct hrtimer_sleeper *timeout, +- enum rtmutex_chainwalk chwalk, +- int (*slowfn)(struct rt_mutex *lock, int state, +- struct hrtimer_sleeper *timeout, +- enum rtmutex_chainwalk chwalk)) +-{ +- if (chwalk == RT_MUTEX_MIN_CHAINWALK && +- likely(rt_mutex_cmpxchg_acquire(lock, NULL, current))) +- return 0; +- +- return slowfn(lock, state, timeout, chwalk); ++ return slowfn(lock, state, NULL, RT_MUTEX_MIN_CHAINWALK, ww_ctx); + } + + static inline int +@@ -1440,9 +1924,11 @@ + /* + * Performs the wakeup of the top-waiter and re-enables preemption. + */ +-void rt_mutex_postunlock(struct wake_q_head *wake_q) ++void rt_mutex_postunlock(struct wake_q_head *wake_q, ++ struct wake_q_head *wake_sleeper_q) + { + wake_up_q(wake_q); ++ wake_up_q_sleeper(wake_sleeper_q); + + /* Pairs with preempt_disable() in rt_mutex_slowunlock() */ + preempt_enable(); +@@ -1451,23 +1937,46 @@ + static inline void + rt_mutex_fastunlock(struct rt_mutex *lock, + bool (*slowfn)(struct rt_mutex *lock, +- struct wake_q_head *wqh)) ++ struct wake_q_head *wqh, ++ struct wake_q_head *wq_sleeper)) + { + DEFINE_WAKE_Q(wake_q); ++ DEFINE_WAKE_Q(wake_sleeper_q); + + if (likely(rt_mutex_cmpxchg_release(lock, current, NULL))) + return; + +- if (slowfn(lock, &wake_q)) +- rt_mutex_postunlock(&wake_q); ++ if (slowfn(lock, &wake_q, &wake_sleeper_q)) ++ rt_mutex_postunlock(&wake_q, &wake_sleeper_q); + } + +-static inline void __rt_mutex_lock(struct rt_mutex *lock, unsigned int subclass) ++int __sched __rt_mutex_lock_state(struct rt_mutex *lock, int state) + { + might_sleep(); ++ return rt_mutex_fastlock(lock, state, NULL, rt_mutex_slowlock); ++} ++ ++/** ++ * rt_mutex_lock_state - lock a rt_mutex with a given state ++ * ++ * @lock: The rt_mutex to be locked ++ * @state: The state to set when blocking on the rt_mutex ++ */ ++static inline int __sched rt_mutex_lock_state(struct rt_mutex *lock, ++ unsigned int subclass, int state) ++{ ++ int ret; + + mutex_acquire(&lock->dep_map, subclass, 0, _RET_IP_); +- rt_mutex_fastlock(lock, TASK_UNINTERRUPTIBLE, rt_mutex_slowlock); ++ ret = __rt_mutex_lock_state(lock, state); ++ if (ret) ++ mutex_release(&lock->dep_map, _RET_IP_); ++ return ret; ++} ++ ++static inline void __rt_mutex_lock(struct rt_mutex *lock, unsigned int subclass) ++{ ++ rt_mutex_lock_state(lock, subclass, TASK_UNINTERRUPTIBLE); + } + + #ifdef CONFIG_DEBUG_LOCK_ALLOC +@@ -1508,16 +2017,7 @@ + */ + int __sched rt_mutex_lock_interruptible(struct rt_mutex *lock) + { +- int ret; +- +- might_sleep(); +- +- mutex_acquire(&lock->dep_map, 0, 0, _RET_IP_); +- ret = rt_mutex_fastlock(lock, TASK_INTERRUPTIBLE, rt_mutex_slowlock); +- if (ret) +- mutex_release(&lock->dep_map, _RET_IP_); +- +- return ret; ++ return rt_mutex_lock_state(lock, 0, TASK_INTERRUPTIBLE); + } + EXPORT_SYMBOL_GPL(rt_mutex_lock_interruptible); + +@@ -1534,36 +2034,17 @@ + return __rt_mutex_slowtrylock(lock); + } + +-/** +- * rt_mutex_timed_lock - lock a rt_mutex interruptible +- * the timeout structure is provided +- * by the caller +- * +- * @lock: the rt_mutex to be locked +- * @timeout: timeout structure or NULL (no timeout) +- * +- * Returns: +- * 0 on success +- * -EINTR when interrupted by a signal +- * -ETIMEDOUT when the timeout expired +- */ +-int +-rt_mutex_timed_lock(struct rt_mutex *lock, struct hrtimer_sleeper *timeout) ++int __sched __rt_mutex_trylock(struct rt_mutex *lock) + { +- int ret; +- +- might_sleep(); +- +- mutex_acquire(&lock->dep_map, 0, 0, _RET_IP_); +- ret = rt_mutex_timed_fastlock(lock, TASK_INTERRUPTIBLE, timeout, +- RT_MUTEX_MIN_CHAINWALK, +- rt_mutex_slowlock); +- if (ret) +- mutex_release(&lock->dep_map, _RET_IP_); ++#ifdef CONFIG_PREEMPT_RT ++ if (WARN_ON_ONCE(in_irq() || in_nmi())) ++#else ++ if (WARN_ON_ONCE(in_irq() || in_nmi() || in_serving_softirq())) ++#endif ++ return 0; + +- return ret; ++ return rt_mutex_fasttrylock(lock, rt_mutex_slowtrylock); + } +-EXPORT_SYMBOL_GPL(rt_mutex_timed_lock); + + /** + * rt_mutex_trylock - try to lock a rt_mutex +@@ -1580,10 +2061,7 @@ + { + int ret; + +- if (WARN_ON_ONCE(in_irq() || in_nmi() || in_serving_softirq())) +- return 0; +- +- ret = rt_mutex_fasttrylock(lock, rt_mutex_slowtrylock); ++ ret = __rt_mutex_trylock(lock); + if (ret) + mutex_acquire(&lock->dep_map, 0, 1, _RET_IP_); + +@@ -1591,6 +2069,11 @@ + } + EXPORT_SYMBOL_GPL(rt_mutex_trylock); + ++void __sched __rt_mutex_unlock(struct rt_mutex *lock) ++{ ++ rt_mutex_fastunlock(lock, rt_mutex_slowunlock); ++} ++ + /** + * rt_mutex_unlock - unlock a rt_mutex + * +@@ -1599,16 +2082,13 @@ + void __sched rt_mutex_unlock(struct rt_mutex *lock) + { + mutex_release(&lock->dep_map, _RET_IP_); +- rt_mutex_fastunlock(lock, rt_mutex_slowunlock); ++ __rt_mutex_unlock(lock); + } + EXPORT_SYMBOL_GPL(rt_mutex_unlock); + +-/** +- * Futex variant, that since futex variants do not use the fast-path, can be +- * simple and will not need to retry. +- */ +-bool __sched __rt_mutex_futex_unlock(struct rt_mutex *lock, +- struct wake_q_head *wake_q) ++static bool __sched __rt_mutex_unlock_common(struct rt_mutex *lock, ++ struct wake_q_head *wake_q, ++ struct wake_q_head *wq_sleeper) + { + lockdep_assert_held(&lock->wait_lock); + +@@ -1625,23 +2105,35 @@ + * avoid inversion prior to the wakeup. preempt_disable() + * therein pairs with rt_mutex_postunlock(). + */ +- mark_wakeup_next_waiter(wake_q, lock); ++ mark_wakeup_next_waiter(wake_q, wq_sleeper, lock); + + return true; /* call postunlock() */ + } + ++/** ++ * Futex variant, that since futex variants do not use the fast-path, can be ++ * simple and will not need to retry. ++ */ ++bool __sched __rt_mutex_futex_unlock(struct rt_mutex *lock, ++ struct wake_q_head *wake_q, ++ struct wake_q_head *wq_sleeper) ++{ ++ return __rt_mutex_unlock_common(lock, wake_q, wq_sleeper); ++} ++ + void __sched rt_mutex_futex_unlock(struct rt_mutex *lock) + { + DEFINE_WAKE_Q(wake_q); ++ DEFINE_WAKE_Q(wake_sleeper_q); + unsigned long flags; + bool postunlock; + + raw_spin_lock_irqsave(&lock->wait_lock, flags); +- postunlock = __rt_mutex_futex_unlock(lock, &wake_q); ++ postunlock = __rt_mutex_futex_unlock(lock, &wake_q, &wake_sleeper_q); + raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + + if (postunlock) +- rt_mutex_postunlock(&wake_q); ++ rt_mutex_postunlock(&wake_q, &wake_sleeper_q); + } + + /** +@@ -1655,9 +2147,6 @@ + void rt_mutex_destroy(struct rt_mutex *lock) + { + WARN_ON(rt_mutex_is_locked(lock)); +-#ifdef CONFIG_DEBUG_RT_MUTEXES +- lock->magic = NULL; +-#endif + } + EXPORT_SYMBOL_GPL(rt_mutex_destroy); + +@@ -1680,7 +2169,7 @@ + if (name && key) + debug_rt_mutex_init(lock, name, key); + } +-EXPORT_SYMBOL_GPL(__rt_mutex_init); ++EXPORT_SYMBOL(__rt_mutex_init); + + /** + * rt_mutex_init_proxy_locked - initialize and lock a rt_mutex on behalf of a +@@ -1700,6 +2189,14 @@ + struct task_struct *proxy_owner) + { + __rt_mutex_init(lock, NULL, NULL); ++#ifdef CONFIG_DEBUG_SPINLOCK ++ /* ++ * get another key class for the wait_lock. LOCK_PI and UNLOCK_PI is ++ * holding the ->wait_lock of the proxy_lock while unlocking a sleeping ++ * lock. ++ */ ++ raw_spin_lock_init(&lock->wait_lock); ++#endif + debug_rt_mutex_proxy_lock(lock, proxy_owner); + rt_mutex_set_owner(lock, proxy_owner); + } +@@ -1722,6 +2219,26 @@ + rt_mutex_set_owner(lock, NULL); + } + ++static void fixup_rt_mutex_blocked(struct rt_mutex *lock) ++{ ++ struct task_struct *tsk = current; ++ /* ++ * RT has a problem here when the wait got interrupted by a timeout ++ * or a signal. task->pi_blocked_on is still set. The task must ++ * acquire the hash bucket lock when returning from this function. ++ * ++ * If the hash bucket lock is contended then the ++ * BUG_ON(rt_mutex_real_waiter(task->pi_blocked_on)) in ++ * task_blocks_on_rt_mutex() will trigger. This can be avoided by ++ * clearing task->pi_blocked_on which removes the task from the ++ * boosting chain of the rtmutex. That's correct because the task ++ * is not longer blocked on it. ++ */ ++ raw_spin_lock(&tsk->pi_lock); ++ tsk->pi_blocked_on = NULL; ++ raw_spin_unlock(&tsk->pi_lock); ++} ++ + /** + * __rt_mutex_start_proxy_lock() - Start lock acquisition for another task + * @lock: the rt_mutex to take +@@ -1752,6 +2269,34 @@ + if (try_to_take_rt_mutex(lock, task, NULL)) + return 1; + ++#ifdef CONFIG_PREEMPT_RT ++ /* ++ * In PREEMPT_RT there's an added race. ++ * If the task, that we are about to requeue, times out, ++ * it can set the PI_WAKEUP_INPROGRESS. This tells the requeue ++ * to skip this task. But right after the task sets ++ * its pi_blocked_on to PI_WAKEUP_INPROGRESS it can then ++ * block on the spin_lock(&hb->lock), which in RT is an rtmutex. ++ * This will replace the PI_WAKEUP_INPROGRESS with the actual ++ * lock that it blocks on. We *must not* place this task ++ * on this proxy lock in that case. ++ * ++ * To prevent this race, we first take the task's pi_lock ++ * and check if it has updated its pi_blocked_on. If it has, ++ * we assume that it woke up and we return -EAGAIN. ++ * Otherwise, we set the task's pi_blocked_on to ++ * PI_REQUEUE_INPROGRESS, so that if the task is waking up ++ * it will know that we are in the process of requeuing it. ++ */ ++ raw_spin_lock(&task->pi_lock); ++ if (task->pi_blocked_on) { ++ raw_spin_unlock(&task->pi_lock); ++ return -EAGAIN; ++ } ++ task->pi_blocked_on = PI_REQUEUE_INPROGRESS; ++ raw_spin_unlock(&task->pi_lock); ++#endif ++ + /* We enforce deadlock detection for futexes */ + ret = task_blocks_on_rt_mutex(lock, waiter, task, + RT_MUTEX_FULL_CHAINWALK); +@@ -1766,7 +2311,8 @@ + ret = 0; + } + +- debug_rt_mutex_print_deadlock(waiter); ++ if (ret) ++ fixup_rt_mutex_blocked(lock); + + return ret; + } +@@ -1851,12 +2397,15 @@ + raw_spin_lock_irq(&lock->wait_lock); + /* sleep on the mutex */ + set_current_state(TASK_INTERRUPTIBLE); +- ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter); ++ ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter, NULL); + /* + * try_to_take_rt_mutex() sets the waiter bit unconditionally. We might + * have to fix that up. + */ + fixup_rt_mutex_waiters(lock); ++ if (ret) ++ fixup_rt_mutex_blocked(lock); ++ + raw_spin_unlock_irq(&lock->wait_lock); + + return ret; +@@ -1918,3 +2467,97 @@ + + return cleanup; + } ++ ++static inline int ++ww_mutex_deadlock_injection(struct ww_mutex *lock, struct ww_acquire_ctx *ctx) ++{ ++#ifdef CONFIG_DEBUG_WW_MUTEX_SLOWPATH ++ unsigned int tmp; ++ ++ if (ctx->deadlock_inject_countdown-- == 0) { ++ tmp = ctx->deadlock_inject_interval; ++ if (tmp > UINT_MAX/4) ++ tmp = UINT_MAX; ++ else ++ tmp = tmp*2 + tmp + tmp/2; ++ ++ ctx->deadlock_inject_interval = tmp; ++ ctx->deadlock_inject_countdown = tmp; ++ ctx->contending_lock = lock; ++ ++ ww_mutex_unlock(lock); ++ ++ return -EDEADLK; ++ } ++#endif ++ ++ return 0; ++} ++ ++#ifdef CONFIG_PREEMPT_RT ++int __sched ++ww_mutex_lock_interruptible(struct ww_mutex *lock, struct ww_acquire_ctx *ctx) ++{ ++ int ret; ++ ++ might_sleep(); ++ ++ mutex_acquire_nest(&lock->base.dep_map, 0, 0, ++ ctx ? &ctx->dep_map : NULL, _RET_IP_); ++ ret = rt_mutex_slowlock(&lock->base.lock, TASK_INTERRUPTIBLE, NULL, 0, ++ ctx); ++ if (ret) ++ mutex_release(&lock->base.dep_map, _RET_IP_); ++ else if (!ret && ctx && ctx->acquired > 1) ++ return ww_mutex_deadlock_injection(lock, ctx); ++ ++ return ret; ++} ++EXPORT_SYMBOL(ww_mutex_lock_interruptible); ++ ++int __sched ++ww_mutex_lock(struct ww_mutex *lock, struct ww_acquire_ctx *ctx) ++{ ++ int ret; ++ ++ might_sleep(); ++ ++ mutex_acquire_nest(&lock->base.dep_map, 0, 0, ++ ctx ? &ctx->dep_map : NULL, _RET_IP_); ++ ret = rt_mutex_slowlock(&lock->base.lock, TASK_UNINTERRUPTIBLE, NULL, 0, ++ ctx); ++ if (ret) ++ mutex_release(&lock->base.dep_map, _RET_IP_); ++ else if (!ret && ctx && ctx->acquired > 1) ++ return ww_mutex_deadlock_injection(lock, ctx); ++ ++ return ret; ++} ++EXPORT_SYMBOL(ww_mutex_lock); ++ ++void __sched ww_mutex_unlock(struct ww_mutex *lock) ++{ ++ /* ++ * The unlocking fastpath is the 0->1 transition from 'locked' ++ * into 'unlocked' state: ++ */ ++ if (lock->ctx) { ++#ifdef CONFIG_DEBUG_MUTEXES ++ DEBUG_LOCKS_WARN_ON(!lock->ctx->acquired); ++#endif ++ if (lock->ctx->acquired > 0) ++ lock->ctx->acquired--; ++ lock->ctx = NULL; ++ } ++ ++ mutex_release(&lock->base.dep_map, _RET_IP_); ++ __rt_mutex_unlock(&lock->base.lock); ++} ++EXPORT_SYMBOL(ww_mutex_unlock); ++ ++int __rt_mutex_owner_current(struct rt_mutex *lock) ++{ ++ return rt_mutex_owner(lock) == current; ++} ++EXPORT_SYMBOL(__rt_mutex_owner_current); ++#endif +diff -Naur --no-dereference a/kernel/locking/rtmutex_common.h b/kernel/locking/rtmutex_common.h +--- a/kernel/locking/rtmutex_common.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/locking/rtmutex_common.h 2024-11-24 20:19:38.245228956 -0500 +@@ -15,6 +15,7 @@ + + #include + #include ++#include + + /* + * This is the control structure for tasks blocked on a rt_mutex, +@@ -29,12 +30,8 @@ + struct rb_node pi_tree_entry; + struct task_struct *task; + struct rt_mutex *lock; +-#ifdef CONFIG_DEBUG_RT_MUTEXES +- unsigned long ip; +- struct pid *deadlock_task_pid; +- struct rt_mutex *deadlock_lock; +-#endif + int prio; ++ bool savestate; + u64 deadline; + }; + +@@ -130,11 +127,14 @@ + /* + * PI-futex support (proxy locking functions, etc.): + */ ++#define PI_WAKEUP_INPROGRESS ((struct rt_mutex_waiter *) 1) ++#define PI_REQUEUE_INPROGRESS ((struct rt_mutex_waiter *) 2) ++ + extern struct task_struct *rt_mutex_next_owner(struct rt_mutex *lock); + extern void rt_mutex_init_proxy_locked(struct rt_mutex *lock, + struct task_struct *proxy_owner); + extern void rt_mutex_proxy_unlock(struct rt_mutex *lock); +-extern void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter); ++extern void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter, bool savetate); + extern int __rt_mutex_start_proxy_lock(struct rt_mutex *lock, + struct rt_mutex_waiter *waiter, + struct task_struct *task); +@@ -152,9 +152,27 @@ + + extern void rt_mutex_futex_unlock(struct rt_mutex *lock); + extern bool __rt_mutex_futex_unlock(struct rt_mutex *lock, +- struct wake_q_head *wqh); ++ struct wake_q_head *wqh, ++ struct wake_q_head *wq_sleeper); ++ ++extern void rt_mutex_postunlock(struct wake_q_head *wake_q, ++ struct wake_q_head *wake_sleeper_q); ++ ++/* RW semaphore special interface */ ++struct ww_acquire_ctx; + +-extern void rt_mutex_postunlock(struct wake_q_head *wake_q); ++extern int __rt_mutex_lock_state(struct rt_mutex *lock, int state); ++extern int __rt_mutex_trylock(struct rt_mutex *lock); ++extern void __rt_mutex_unlock(struct rt_mutex *lock); ++int __sched rt_mutex_slowlock_locked(struct rt_mutex *lock, int state, ++ struct hrtimer_sleeper *timeout, ++ enum rtmutex_chainwalk chwalk, ++ struct ww_acquire_ctx *ww_ctx, ++ struct rt_mutex_waiter *waiter); ++void __sched rt_spin_lock_slowlock_locked(struct rt_mutex *lock, ++ struct rt_mutex_waiter *waiter, ++ unsigned long flags); ++void __sched rt_spin_lock_slowunlock(struct rt_mutex *lock); + + #ifdef CONFIG_DEBUG_RT_MUTEXES + # include "rtmutex-debug.h" +diff -Naur --no-dereference a/kernel/locking/rtmutex-debug.c b/kernel/locking/rtmutex-debug.c +--- a/kernel/locking/rtmutex-debug.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/locking/rtmutex-debug.c 2024-11-24 20:19:38.245228956 -0500 +@@ -32,110 +32,12 @@ + + #include "rtmutex_common.h" + +-static void printk_task(struct task_struct *p) +-{ +- if (p) +- printk("%16s:%5d [%p, %3d]", p->comm, task_pid_nr(p), p, p->prio); +- else +- printk(""); +-} +- +-static void printk_lock(struct rt_mutex *lock, int print_owner) +-{ +- if (lock->name) +- printk(" [%p] {%s}\n", +- lock, lock->name); +- else +- printk(" [%p] {%s:%d}\n", +- lock, lock->file, lock->line); +- +- if (print_owner && rt_mutex_owner(lock)) { +- printk(".. ->owner: %p\n", lock->owner); +- printk(".. held by: "); +- printk_task(rt_mutex_owner(lock)); +- printk("\n"); +- } +-} +- + void rt_mutex_debug_task_free(struct task_struct *task) + { + DEBUG_LOCKS_WARN_ON(!RB_EMPTY_ROOT(&task->pi_waiters.rb_root)); + DEBUG_LOCKS_WARN_ON(task->pi_blocked_on); + } + +-/* +- * We fill out the fields in the waiter to store the information about +- * the deadlock. We print when we return. act_waiter can be NULL in +- * case of a remove waiter operation. +- */ +-void debug_rt_mutex_deadlock(enum rtmutex_chainwalk chwalk, +- struct rt_mutex_waiter *act_waiter, +- struct rt_mutex *lock) +-{ +- struct task_struct *task; +- +- if (!debug_locks || chwalk == RT_MUTEX_FULL_CHAINWALK || !act_waiter) +- return; +- +- task = rt_mutex_owner(act_waiter->lock); +- if (task && task != current) { +- act_waiter->deadlock_task_pid = get_pid(task_pid(task)); +- act_waiter->deadlock_lock = lock; +- } +-} +- +-void debug_rt_mutex_print_deadlock(struct rt_mutex_waiter *waiter) +-{ +- struct task_struct *task; +- +- if (!waiter->deadlock_lock || !debug_locks) +- return; +- +- rcu_read_lock(); +- task = pid_task(waiter->deadlock_task_pid, PIDTYPE_PID); +- if (!task) { +- rcu_read_unlock(); +- return; +- } +- +- if (!debug_locks_off()) { +- rcu_read_unlock(); +- return; +- } +- +- pr_warn("\n"); +- pr_warn("============================================\n"); +- pr_warn("WARNING: circular locking deadlock detected!\n"); +- pr_warn("%s\n", print_tainted()); +- pr_warn("--------------------------------------------\n"); +- printk("%s/%d is deadlocking current task %s/%d\n\n", +- task->comm, task_pid_nr(task), +- current->comm, task_pid_nr(current)); +- +- printk("\n1) %s/%d is trying to acquire this lock:\n", +- current->comm, task_pid_nr(current)); +- printk_lock(waiter->lock, 1); +- +- printk("\n2) %s/%d is blocked on this lock:\n", +- task->comm, task_pid_nr(task)); +- printk_lock(waiter->deadlock_lock, 1); +- +- debug_show_held_locks(current); +- debug_show_held_locks(task); +- +- printk("\n%s/%d's [blocked] stackdump:\n\n", +- task->comm, task_pid_nr(task)); +- show_stack(task, NULL, KERN_DEFAULT); +- printk("\n%s/%d's [current] stackdump:\n\n", +- current->comm, task_pid_nr(current)); +- dump_stack(); +- debug_show_all_locks(); +- rcu_read_unlock(); +- +- printk("[ turning off deadlock detection." +- "Please report this trace. ]\n\n"); +-} +- + void debug_rt_mutex_lock(struct rt_mutex *lock) + { + } +@@ -158,12 +60,10 @@ + void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter) + { + memset(waiter, 0x11, sizeof(*waiter)); +- waiter->deadlock_task_pid = NULL; + } + + void debug_rt_mutex_free_waiter(struct rt_mutex_waiter *waiter) + { +- put_pid(waiter->deadlock_task_pid); + memset(waiter, 0x22, sizeof(*waiter)); + } + +@@ -173,10 +73,8 @@ + * Make sure we are not reinitializing a held lock: + */ + debug_check_no_locks_freed((void *)lock, sizeof(*lock)); +- lock->name = name; + + #ifdef CONFIG_DEBUG_LOCK_ALLOC + lockdep_init_map(&lock->dep_map, name, key, 0); + #endif + } +- +diff -Naur --no-dereference a/kernel/locking/rtmutex-debug.h b/kernel/locking/rtmutex-debug.h +--- a/kernel/locking/rtmutex-debug.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/locking/rtmutex-debug.h 2024-11-24 20:19:38.245228956 -0500 +@@ -18,20 +18,9 @@ + extern void debug_rt_mutex_proxy_lock(struct rt_mutex *lock, + struct task_struct *powner); + extern void debug_rt_mutex_proxy_unlock(struct rt_mutex *lock); +-extern void debug_rt_mutex_deadlock(enum rtmutex_chainwalk chwalk, +- struct rt_mutex_waiter *waiter, +- struct rt_mutex *lock); +-extern void debug_rt_mutex_print_deadlock(struct rt_mutex_waiter *waiter); +-# define debug_rt_mutex_reset_waiter(w) \ +- do { (w)->deadlock_lock = NULL; } while (0) + + static inline bool debug_rt_mutex_detect_deadlock(struct rt_mutex_waiter *waiter, + enum rtmutex_chainwalk walk) + { + return (waiter != NULL); + } +- +-static inline void rt_mutex_print_deadlock(struct rt_mutex_waiter *w) +-{ +- debug_rt_mutex_print_deadlock(w); +-} +diff -Naur --no-dereference a/kernel/locking/rtmutex.h b/kernel/locking/rtmutex.h +--- a/kernel/locking/rtmutex.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/locking/rtmutex.h 2024-11-24 20:19:38.245228956 -0500 +@@ -19,15 +19,8 @@ + #define debug_rt_mutex_proxy_unlock(l) do { } while (0) + #define debug_rt_mutex_unlock(l) do { } while (0) + #define debug_rt_mutex_init(m, n, k) do { } while (0) +-#define debug_rt_mutex_deadlock(d, a ,l) do { } while (0) +-#define debug_rt_mutex_print_deadlock(w) do { } while (0) + #define debug_rt_mutex_reset_waiter(w) do { } while (0) + +-static inline void rt_mutex_print_deadlock(struct rt_mutex_waiter *w) +-{ +- WARN(1, "rtmutex deadlock detected\n"); +-} +- + static inline bool debug_rt_mutex_detect_deadlock(struct rt_mutex_waiter *w, + enum rtmutex_chainwalk walk) + { +diff -Naur --no-dereference a/kernel/locking/rwlock-rt.c b/kernel/locking/rwlock-rt.c +--- a/kernel/locking/rwlock-rt.c 1969-12-31 19:00:00.000000000 -0500 ++++ b/kernel/locking/rwlock-rt.c 2024-11-24 20:19:38.245228956 -0500 +@@ -0,0 +1,334 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++#include ++#include ++ ++#include "rtmutex_common.h" ++#include ++ ++/* ++ * RT-specific reader/writer locks ++ * ++ * write_lock() ++ * 1) Lock lock->rtmutex ++ * 2) Remove the reader BIAS to force readers into the slow path ++ * 3) Wait until all readers have left the critical region ++ * 4) Mark it write locked ++ * ++ * write_unlock() ++ * 1) Remove the write locked marker ++ * 2) Set the reader BIAS so readers can use the fast path again ++ * 3) Unlock lock->rtmutex to release blocked readers ++ * ++ * read_lock() ++ * 1) Try fast path acquisition (reader BIAS is set) ++ * 2) Take lock->rtmutex.wait_lock which protects the writelocked flag ++ * 3) If !writelocked, acquire it for read ++ * 4) If writelocked, block on lock->rtmutex ++ * 5) unlock lock->rtmutex, goto 1) ++ * ++ * read_unlock() ++ * 1) Try fast path release (reader count != 1) ++ * 2) Wake the writer waiting in write_lock()#3 ++ * ++ * read_lock()#3 has the consequence, that rw locks on RT are not writer ++ * fair, but writers, which should be avoided in RT tasks (think tasklist ++ * lock), are subject to the rtmutex priority/DL inheritance mechanism. ++ * ++ * It's possible to make the rw locks writer fair by keeping a list of ++ * active readers. A blocked writer would force all newly incoming readers ++ * to block on the rtmutex, but the rtmutex would have to be proxy locked ++ * for one reader after the other. We can't use multi-reader inheritance ++ * because there is no way to support that with ++ * SCHED_DEADLINE. Implementing the one by one reader boosting/handover ++ * mechanism is a major surgery for a very dubious value. ++ * ++ * The risk of writer starvation is there, but the pathological use cases ++ * which trigger it are not necessarily the typical RT workloads. ++ */ ++ ++void __rwlock_biased_rt_init(struct rt_rw_lock *lock, const char *name, ++ struct lock_class_key *key) ++{ ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++ /* ++ * Make sure we are not reinitializing a held semaphore: ++ */ ++ debug_check_no_locks_freed((void *)lock, sizeof(*lock)); ++ lockdep_init_map(&lock->dep_map, name, key, 0); ++#endif ++ atomic_set(&lock->readers, READER_BIAS); ++ rt_mutex_init(&lock->rtmutex); ++ lock->rtmutex.save_state = 1; ++} ++ ++static int __read_rt_trylock(struct rt_rw_lock *lock) ++{ ++ int r, old; ++ ++ /* ++ * Increment reader count, if lock->readers < 0, i.e. READER_BIAS is ++ * set. ++ */ ++ for (r = atomic_read(&lock->readers); r < 0;) { ++ old = atomic_cmpxchg(&lock->readers, r, r + 1); ++ if (likely(old == r)) ++ return 1; ++ r = old; ++ } ++ return 0; ++} ++ ++static void __read_rt_lock(struct rt_rw_lock *lock) ++{ ++ struct rt_mutex *m = &lock->rtmutex; ++ struct rt_mutex_waiter waiter; ++ unsigned long flags; ++ ++ if (__read_rt_trylock(lock)) ++ return; ++ ++ raw_spin_lock_irqsave(&m->wait_lock, flags); ++ /* ++ * Allow readers as long as the writer has not completely ++ * acquired the semaphore for write. ++ */ ++ if (atomic_read(&lock->readers) != WRITER_BIAS) { ++ atomic_inc(&lock->readers); ++ raw_spin_unlock_irqrestore(&m->wait_lock, flags); ++ return; ++ } ++ ++ /* ++ * Call into the slow lock path with the rtmutex->wait_lock ++ * held, so this can't result in the following race: ++ * ++ * Reader1 Reader2 Writer ++ * read_lock() ++ * write_lock() ++ * rtmutex_lock(m) ++ * swait() ++ * read_lock() ++ * unlock(m->wait_lock) ++ * read_unlock() ++ * swake() ++ * lock(m->wait_lock) ++ * lock->writelocked=true ++ * unlock(m->wait_lock) ++ * ++ * write_unlock() ++ * lock->writelocked=false ++ * rtmutex_unlock(m) ++ * read_lock() ++ * write_lock() ++ * rtmutex_lock(m) ++ * swait() ++ * rtmutex_lock(m) ++ * ++ * That would put Reader1 behind the writer waiting on ++ * Reader2 to call read_unlock() which might be unbound. ++ */ ++ rt_mutex_init_waiter(&waiter, true); ++ rt_spin_lock_slowlock_locked(m, &waiter, flags); ++ /* ++ * The slowlock() above is guaranteed to return with the rtmutex is ++ * now held, so there can't be a writer active. Increment the reader ++ * count and immediately drop the rtmutex again. ++ */ ++ atomic_inc(&lock->readers); ++ raw_spin_unlock_irqrestore(&m->wait_lock, flags); ++ rt_spin_lock_slowunlock(m); ++ ++ debug_rt_mutex_free_waiter(&waiter); ++} ++ ++static void __read_rt_unlock(struct rt_rw_lock *lock) ++{ ++ struct rt_mutex *m = &lock->rtmutex; ++ struct task_struct *tsk; ++ ++ /* ++ * sem->readers can only hit 0 when a writer is waiting for the ++ * active readers to leave the critical region. ++ */ ++ if (!atomic_dec_and_test(&lock->readers)) ++ return; ++ ++ raw_spin_lock_irq(&m->wait_lock); ++ /* ++ * Wake the writer, i.e. the rtmutex owner. It might release the ++ * rtmutex concurrently in the fast path, but to clean up the rw ++ * lock it needs to acquire m->wait_lock. The worst case which can ++ * happen is a spurious wakeup. ++ */ ++ tsk = rt_mutex_owner(m); ++ if (tsk) ++ wake_up_process(tsk); ++ ++ raw_spin_unlock_irq(&m->wait_lock); ++} ++ ++static void __write_unlock_common(struct rt_rw_lock *lock, int bias, ++ unsigned long flags) ++{ ++ struct rt_mutex *m = &lock->rtmutex; ++ ++ atomic_add(READER_BIAS - bias, &lock->readers); ++ raw_spin_unlock_irqrestore(&m->wait_lock, flags); ++ rt_spin_lock_slowunlock(m); ++} ++ ++static void __write_rt_lock(struct rt_rw_lock *lock) ++{ ++ struct rt_mutex *m = &lock->rtmutex; ++ struct task_struct *self = current; ++ unsigned long flags; ++ ++ /* Take the rtmutex as a first step */ ++ __rt_spin_lock(m); ++ ++ /* Force readers into slow path */ ++ atomic_sub(READER_BIAS, &lock->readers); ++ ++ raw_spin_lock_irqsave(&m->wait_lock, flags); ++ ++ raw_spin_lock(&self->pi_lock); ++ self->saved_state = self->state; ++ __set_current_state_no_track(TASK_UNINTERRUPTIBLE); ++ raw_spin_unlock(&self->pi_lock); ++ ++ for (;;) { ++ /* Have all readers left the critical region? */ ++ if (!atomic_read(&lock->readers)) { ++ atomic_set(&lock->readers, WRITER_BIAS); ++ raw_spin_lock(&self->pi_lock); ++ __set_current_state_no_track(self->saved_state); ++ self->saved_state = TASK_RUNNING; ++ raw_spin_unlock(&self->pi_lock); ++ raw_spin_unlock_irqrestore(&m->wait_lock, flags); ++ return; ++ } ++ ++ raw_spin_unlock_irqrestore(&m->wait_lock, flags); ++ ++ if (atomic_read(&lock->readers) != 0) ++ preempt_schedule_lock(); ++ ++ raw_spin_lock_irqsave(&m->wait_lock, flags); ++ ++ raw_spin_lock(&self->pi_lock); ++ __set_current_state_no_track(TASK_UNINTERRUPTIBLE); ++ raw_spin_unlock(&self->pi_lock); ++ } ++} ++ ++static int __write_rt_trylock(struct rt_rw_lock *lock) ++{ ++ struct rt_mutex *m = &lock->rtmutex; ++ unsigned long flags; ++ ++ if (!__rt_mutex_trylock(m)) ++ return 0; ++ ++ atomic_sub(READER_BIAS, &lock->readers); ++ ++ raw_spin_lock_irqsave(&m->wait_lock, flags); ++ if (!atomic_read(&lock->readers)) { ++ atomic_set(&lock->readers, WRITER_BIAS); ++ raw_spin_unlock_irqrestore(&m->wait_lock, flags); ++ return 1; ++ } ++ __write_unlock_common(lock, 0, flags); ++ return 0; ++} ++ ++static void __write_rt_unlock(struct rt_rw_lock *lock) ++{ ++ struct rt_mutex *m = &lock->rtmutex; ++ unsigned long flags; ++ ++ raw_spin_lock_irqsave(&m->wait_lock, flags); ++ __write_unlock_common(lock, WRITER_BIAS, flags); ++} ++ ++int __lockfunc rt_read_can_lock(rwlock_t *rwlock) ++{ ++ return atomic_read(&rwlock->readers) < 0; ++} ++ ++int __lockfunc rt_write_can_lock(rwlock_t *rwlock) ++{ ++ return atomic_read(&rwlock->readers) == READER_BIAS; ++} ++ ++/* ++ * The common functions which get wrapped into the rwlock API. ++ */ ++int __lockfunc rt_read_trylock(rwlock_t *rwlock) ++{ ++ int ret; ++ ++ ret = __read_rt_trylock(rwlock); ++ if (ret) { ++ rwlock_acquire_read(&rwlock->dep_map, 0, 1, _RET_IP_); ++ rcu_read_lock(); ++ migrate_disable(); ++ } ++ return ret; ++} ++EXPORT_SYMBOL(rt_read_trylock); ++ ++int __lockfunc rt_write_trylock(rwlock_t *rwlock) ++{ ++ int ret; ++ ++ ret = __write_rt_trylock(rwlock); ++ if (ret) { ++ rwlock_acquire(&rwlock->dep_map, 0, 1, _RET_IP_); ++ rcu_read_lock(); ++ migrate_disable(); ++ } ++ return ret; ++} ++EXPORT_SYMBOL(rt_write_trylock); ++ ++void __lockfunc rt_read_lock(rwlock_t *rwlock) ++{ ++ rwlock_acquire_read(&rwlock->dep_map, 0, 0, _RET_IP_); ++ __read_rt_lock(rwlock); ++ rcu_read_lock(); ++ migrate_disable(); ++} ++EXPORT_SYMBOL(rt_read_lock); ++ ++void __lockfunc rt_write_lock(rwlock_t *rwlock) ++{ ++ rwlock_acquire(&rwlock->dep_map, 0, 0, _RET_IP_); ++ __write_rt_lock(rwlock); ++ rcu_read_lock(); ++ migrate_disable(); ++} ++EXPORT_SYMBOL(rt_write_lock); ++ ++void __lockfunc rt_read_unlock(rwlock_t *rwlock) ++{ ++ rwlock_release(&rwlock->dep_map, _RET_IP_); ++ migrate_enable(); ++ rcu_read_unlock(); ++ __read_rt_unlock(rwlock); ++} ++EXPORT_SYMBOL(rt_read_unlock); ++ ++void __lockfunc rt_write_unlock(rwlock_t *rwlock) ++{ ++ rwlock_release(&rwlock->dep_map, _RET_IP_); ++ migrate_enable(); ++ rcu_read_unlock(); ++ __write_rt_unlock(rwlock); ++} ++EXPORT_SYMBOL(rt_write_unlock); ++ ++void __rt_rwlock_init(rwlock_t *rwlock, char *name, struct lock_class_key *key) ++{ ++ __rwlock_biased_rt_init(rwlock, name, key); ++} ++EXPORT_SYMBOL(__rt_rwlock_init); +diff -Naur --no-dereference a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c +--- a/kernel/locking/rwsem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/locking/rwsem.c 2024-11-24 20:19:38.245228956 -0500 +@@ -28,6 +28,7 @@ + #include + #include + ++#ifndef CONFIG_PREEMPT_RT + #include "lock_events.h" + + /* +@@ -1494,6 +1495,7 @@ + if (tmp & RWSEM_FLAG_WAITERS) + rwsem_downgrade_wake(sem); + } ++#endif + + /* + * lock for reading +@@ -1657,7 +1659,9 @@ + { + might_sleep(); + __down_read(sem); ++#ifndef CONFIG_PREEMPT_RT + __rwsem_set_reader_owned(sem, NULL); ++#endif + } + EXPORT_SYMBOL(down_read_non_owner); + +@@ -1686,7 +1690,9 @@ + + void up_read_non_owner(struct rw_semaphore *sem) + { ++#ifndef CONFIG_PREEMPT_RT + DEBUG_RWSEMS_WARN_ON(!is_rwsem_reader_owned(sem), sem); ++#endif + __up_read(sem); + } + EXPORT_SYMBOL(up_read_non_owner); +diff -Naur --no-dereference a/kernel/locking/rwsem-rt.c b/kernel/locking/rwsem-rt.c +--- a/kernel/locking/rwsem-rt.c 1969-12-31 19:00:00.000000000 -0500 ++++ b/kernel/locking/rwsem-rt.c 2024-11-24 20:19:38.245228956 -0500 +@@ -0,0 +1,317 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++#include ++#include ++#include ++#include ++#include ++ ++#include "rtmutex_common.h" ++ ++/* ++ * RT-specific reader/writer semaphores ++ * ++ * down_write() ++ * 1) Lock sem->rtmutex ++ * 2) Remove the reader BIAS to force readers into the slow path ++ * 3) Wait until all readers have left the critical region ++ * 4) Mark it write locked ++ * ++ * up_write() ++ * 1) Remove the write locked marker ++ * 2) Set the reader BIAS so readers can use the fast path again ++ * 3) Unlock sem->rtmutex to release blocked readers ++ * ++ * down_read() ++ * 1) Try fast path acquisition (reader BIAS is set) ++ * 2) Take sem->rtmutex.wait_lock which protects the writelocked flag ++ * 3) If !writelocked, acquire it for read ++ * 4) If writelocked, block on sem->rtmutex ++ * 5) unlock sem->rtmutex, goto 1) ++ * ++ * up_read() ++ * 1) Try fast path release (reader count != 1) ++ * 2) Wake the writer waiting in down_write()#3 ++ * ++ * down_read()#3 has the consequence, that rw semaphores on RT are not writer ++ * fair, but writers, which should be avoided in RT tasks (think mmap_sem), ++ * are subject to the rtmutex priority/DL inheritance mechanism. ++ * ++ * It's possible to make the rw semaphores writer fair by keeping a list of ++ * active readers. A blocked writer would force all newly incoming readers to ++ * block on the rtmutex, but the rtmutex would have to be proxy locked for one ++ * reader after the other. We can't use multi-reader inheritance because there ++ * is no way to support that with SCHED_DEADLINE. Implementing the one by one ++ * reader boosting/handover mechanism is a major surgery for a very dubious ++ * value. ++ * ++ * The risk of writer starvation is there, but the pathological use cases ++ * which trigger it are not necessarily the typical RT workloads. ++ */ ++ ++void __rwsem_init(struct rw_semaphore *sem, const char *name, ++ struct lock_class_key *key) ++{ ++#ifdef CONFIG_DEBUG_LOCK_ALLOC ++ /* ++ * Make sure we are not reinitializing a held semaphore: ++ */ ++ debug_check_no_locks_freed((void *)sem, sizeof(*sem)); ++ lockdep_init_map(&sem->dep_map, name, key, 0); ++#endif ++ atomic_set(&sem->readers, READER_BIAS); ++} ++EXPORT_SYMBOL(__rwsem_init); ++ ++int __down_read_trylock(struct rw_semaphore *sem) ++{ ++ int r, old; ++ ++ /* ++ * Increment reader count, if sem->readers < 0, i.e. READER_BIAS is ++ * set. ++ */ ++ for (r = atomic_read(&sem->readers); r < 0;) { ++ old = atomic_cmpxchg(&sem->readers, r, r + 1); ++ if (likely(old == r)) ++ return 1; ++ r = old; ++ } ++ return 0; ++} ++ ++static int __sched __down_read_common(struct rw_semaphore *sem, int state) ++{ ++ struct rt_mutex *m = &sem->rtmutex; ++ struct rt_mutex_waiter waiter; ++ int ret; ++ ++ if (__down_read_trylock(sem)) ++ return 0; ++ ++ /* ++ * Flush blk before ->pi_blocked_on is set. At schedule() time it is too ++ * late if one of the callbacks needs to acquire a sleeping lock. ++ */ ++ if (blk_needs_flush_plug(current)) ++ blk_schedule_flush_plug(current); ++ ++ might_sleep(); ++ raw_spin_lock_irq(&m->wait_lock); ++ /* ++ * Allow readers as long as the writer has not completely ++ * acquired the semaphore for write. ++ */ ++ if (atomic_read(&sem->readers) != WRITER_BIAS) { ++ atomic_inc(&sem->readers); ++ raw_spin_unlock_irq(&m->wait_lock); ++ return 0; ++ } ++ ++ /* ++ * Call into the slow lock path with the rtmutex->wait_lock ++ * held, so this can't result in the following race: ++ * ++ * Reader1 Reader2 Writer ++ * down_read() ++ * down_write() ++ * rtmutex_lock(m) ++ * swait() ++ * down_read() ++ * unlock(m->wait_lock) ++ * up_read() ++ * swake() ++ * lock(m->wait_lock) ++ * sem->writelocked=true ++ * unlock(m->wait_lock) ++ * ++ * up_write() ++ * sem->writelocked=false ++ * rtmutex_unlock(m) ++ * down_read() ++ * down_write() ++ * rtmutex_lock(m) ++ * swait() ++ * rtmutex_lock(m) ++ * ++ * That would put Reader1 behind the writer waiting on ++ * Reader2 to call up_read() which might be unbound. ++ */ ++ rt_mutex_init_waiter(&waiter, false); ++ ret = rt_mutex_slowlock_locked(m, state, NULL, RT_MUTEX_MIN_CHAINWALK, ++ NULL, &waiter); ++ /* ++ * The slowlock() above is guaranteed to return with the rtmutex (for ++ * ret = 0) is now held, so there can't be a writer active. Increment ++ * the reader count and immediately drop the rtmutex again. ++ * For ret != 0 we don't hold the rtmutex and need unlock the wait_lock. ++ * We don't own the lock then. ++ */ ++ if (!ret) ++ atomic_inc(&sem->readers); ++ raw_spin_unlock_irq(&m->wait_lock); ++ if (!ret) ++ __rt_mutex_unlock(m); ++ ++ debug_rt_mutex_free_waiter(&waiter); ++ return ret; ++} ++ ++void __down_read(struct rw_semaphore *sem) ++{ ++ int ret; ++ ++ ret = __down_read_common(sem, TASK_UNINTERRUPTIBLE); ++ WARN_ON_ONCE(ret); ++} ++ ++int __down_read_interruptible(struct rw_semaphore *sem) ++{ ++ int ret; ++ ++ ret = __down_read_common(sem, TASK_INTERRUPTIBLE); ++ if (likely(!ret)) ++ return ret; ++ WARN_ONCE(ret != -EINTR, "Unexpected state: %d\n", ret); ++ return -EINTR; ++} ++ ++int __down_read_killable(struct rw_semaphore *sem) ++{ ++ int ret; ++ ++ ret = __down_read_common(sem, TASK_KILLABLE); ++ if (likely(!ret)) ++ return ret; ++ WARN_ONCE(ret != -EINTR, "Unexpected state: %d\n", ret); ++ return -EINTR; ++} ++ ++void __up_read(struct rw_semaphore *sem) ++{ ++ struct rt_mutex *m = &sem->rtmutex; ++ struct task_struct *tsk; ++ ++ /* ++ * sem->readers can only hit 0 when a writer is waiting for the ++ * active readers to leave the critical region. ++ */ ++ if (!atomic_dec_and_test(&sem->readers)) ++ return; ++ ++ raw_spin_lock_irq(&m->wait_lock); ++ /* ++ * Wake the writer, i.e. the rtmutex owner. It might release the ++ * rtmutex concurrently in the fast path (due to a signal), but to ++ * clean up the rwsem it needs to acquire m->wait_lock. The worst ++ * case which can happen is a spurious wakeup. ++ */ ++ tsk = rt_mutex_owner(m); ++ if (tsk) ++ wake_up_process(tsk); ++ ++ raw_spin_unlock_irq(&m->wait_lock); ++} ++ ++static void __up_write_unlock(struct rw_semaphore *sem, int bias, ++ unsigned long flags) ++{ ++ struct rt_mutex *m = &sem->rtmutex; ++ ++ atomic_add(READER_BIAS - bias, &sem->readers); ++ raw_spin_unlock_irqrestore(&m->wait_lock, flags); ++ __rt_mutex_unlock(m); ++} ++ ++static int __sched __down_write_common(struct rw_semaphore *sem, int state) ++{ ++ struct rt_mutex *m = &sem->rtmutex; ++ unsigned long flags; ++ ++ /* ++ * Flush blk before ->pi_blocked_on is set. At schedule() time it is too ++ * late if one of the callbacks needs to acquire a sleeping lock. ++ */ ++ if (blk_needs_flush_plug(current)) ++ blk_schedule_flush_plug(current); ++ ++ /* Take the rtmutex as a first step */ ++ if (__rt_mutex_lock_state(m, state)) ++ return -EINTR; ++ ++ /* Force readers into slow path */ ++ atomic_sub(READER_BIAS, &sem->readers); ++ might_sleep(); ++ ++ set_current_state(state); ++ for (;;) { ++ raw_spin_lock_irqsave(&m->wait_lock, flags); ++ /* Have all readers left the critical region? */ ++ if (!atomic_read(&sem->readers)) { ++ atomic_set(&sem->readers, WRITER_BIAS); ++ __set_current_state(TASK_RUNNING); ++ raw_spin_unlock_irqrestore(&m->wait_lock, flags); ++ return 0; ++ } ++ ++ if (signal_pending_state(state, current)) { ++ __set_current_state(TASK_RUNNING); ++ __up_write_unlock(sem, 0, flags); ++ return -EINTR; ++ } ++ raw_spin_unlock_irqrestore(&m->wait_lock, flags); ++ ++ if (atomic_read(&sem->readers) != 0) { ++ schedule(); ++ set_current_state(state); ++ } ++ } ++} ++ ++void __sched __down_write(struct rw_semaphore *sem) ++{ ++ __down_write_common(sem, TASK_UNINTERRUPTIBLE); ++} ++ ++int __sched __down_write_killable(struct rw_semaphore *sem) ++{ ++ return __down_write_common(sem, TASK_KILLABLE); ++} ++ ++int __down_write_trylock(struct rw_semaphore *sem) ++{ ++ struct rt_mutex *m = &sem->rtmutex; ++ unsigned long flags; ++ ++ if (!__rt_mutex_trylock(m)) ++ return 0; ++ ++ atomic_sub(READER_BIAS, &sem->readers); ++ ++ raw_spin_lock_irqsave(&m->wait_lock, flags); ++ if (!atomic_read(&sem->readers)) { ++ atomic_set(&sem->readers, WRITER_BIAS); ++ raw_spin_unlock_irqrestore(&m->wait_lock, flags); ++ return 1; ++ } ++ __up_write_unlock(sem, 0, flags); ++ return 0; ++} ++ ++void __up_write(struct rw_semaphore *sem) ++{ ++ struct rt_mutex *m = &sem->rtmutex; ++ unsigned long flags; ++ ++ raw_spin_lock_irqsave(&m->wait_lock, flags); ++ __up_write_unlock(sem, WRITER_BIAS, flags); ++} ++ ++void __downgrade_write(struct rw_semaphore *sem) ++{ ++ struct rt_mutex *m = &sem->rtmutex; ++ unsigned long flags; ++ ++ raw_spin_lock_irqsave(&m->wait_lock, flags); ++ /* Release it and account current as reader */ ++ __up_write_unlock(sem, WRITER_BIAS - 1, flags); ++} +diff -Naur --no-dereference a/kernel/locking/spinlock.c b/kernel/locking/spinlock.c +--- a/kernel/locking/spinlock.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/locking/spinlock.c 2024-11-24 20:19:38.245228956 -0500 +@@ -124,8 +124,11 @@ + * __[spin|read|write]_lock_bh() + */ + BUILD_LOCK_OPS(spin, raw_spinlock); ++ ++#ifndef CONFIG_PREEMPT_RT + BUILD_LOCK_OPS(read, rwlock); + BUILD_LOCK_OPS(write, rwlock); ++#endif + + #endif + +@@ -209,6 +212,8 @@ + EXPORT_SYMBOL(_raw_spin_unlock_bh); + #endif + ++#ifndef CONFIG_PREEMPT_RT ++ + #ifndef CONFIG_INLINE_READ_TRYLOCK + int __lockfunc _raw_read_trylock(rwlock_t *lock) + { +@@ -353,6 +358,8 @@ + EXPORT_SYMBOL(_raw_write_unlock_bh); + #endif + ++#endif /* !PREEMPT_RT */ ++ + #ifdef CONFIG_DEBUG_LOCK_ALLOC + + void __lockfunc _raw_spin_lock_nested(raw_spinlock_t *lock, int subclass) +diff -Naur --no-dereference a/kernel/locking/spinlock_debug.c b/kernel/locking/spinlock_debug.c +--- a/kernel/locking/spinlock_debug.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/locking/spinlock_debug.c 2024-11-24 20:19:38.245228956 -0500 +@@ -31,6 +31,7 @@ + + EXPORT_SYMBOL(__raw_spin_lock_init); + ++#ifndef CONFIG_PREEMPT_RT + void __rwlock_init(rwlock_t *lock, const char *name, + struct lock_class_key *key) + { +@@ -48,6 +49,7 @@ + } + + EXPORT_SYMBOL(__rwlock_init); ++#endif + + static void spin_dump(raw_spinlock_t *lock, const char *msg) + { +@@ -139,6 +141,7 @@ + arch_spin_unlock(&lock->raw_lock); + } + ++#ifndef CONFIG_PREEMPT_RT + static void rwlock_bug(rwlock_t *lock, const char *msg) + { + if (!debug_locks_off()) +@@ -228,3 +231,5 @@ + debug_write_unlock(lock); + arch_write_unlock(&lock->raw_lock); + } ++ ++#endif +diff -Naur --no-dereference a/kernel/notifier.c b/kernel/notifier.c +--- a/kernel/notifier.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/notifier.c 2024-11-24 20:19:38.245228956 -0500 +@@ -142,9 +142,9 @@ + unsigned long flags; + int ret; + +- spin_lock_irqsave(&nh->lock, flags); ++ raw_spin_lock_irqsave(&nh->lock, flags); + ret = notifier_chain_register(&nh->head, n); +- spin_unlock_irqrestore(&nh->lock, flags); ++ raw_spin_unlock_irqrestore(&nh->lock, flags); + return ret; + } + EXPORT_SYMBOL_GPL(atomic_notifier_chain_register); +@@ -164,9 +164,9 @@ + unsigned long flags; + int ret; + +- spin_lock_irqsave(&nh->lock, flags); ++ raw_spin_lock_irqsave(&nh->lock, flags); + ret = notifier_chain_unregister(&nh->head, n); +- spin_unlock_irqrestore(&nh->lock, flags); ++ raw_spin_unlock_irqrestore(&nh->lock, flags); + synchronize_rcu(); + return ret; + } +@@ -182,9 +182,9 @@ + * Musn't use RCU; because then the notifier list can + * change between the up and down traversal. + */ +- spin_lock_irqsave(&nh->lock, flags); ++ raw_spin_lock_irqsave(&nh->lock, flags); + ret = notifier_call_chain_robust(&nh->head, val_up, val_down, v); +- spin_unlock_irqrestore(&nh->lock, flags); ++ raw_spin_unlock_irqrestore(&nh->lock, flags); + + return ret; + } +diff -Naur --no-dereference a/kernel/panic.c b/kernel/panic.c +--- a/kernel/panic.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/panic.c 2024-11-24 20:19:38.245228956 -0500 +@@ -244,6 +244,7 @@ + void panic(const char *fmt, ...) + { + static char buf[1024]; ++ va_list args2; + va_list args; + long i, i_next = 0, len; + int state = 0; +@@ -260,6 +261,21 @@ + panic_on_warn = 0; + } + ++ console_verbose(); ++ pr_emerg("Kernel panic - not syncing:\n"); ++ va_start(args2, fmt); ++ va_copy(args, args2); ++ vprintk(fmt, args2); ++ va_end(args2); ++#ifdef CONFIG_DEBUG_BUGVERBOSE ++ /* ++ * Avoid nested stack-dumping if a panic occurs during oops processing ++ */ ++ if (!test_taint(TAINT_DIE) && oops_in_progress <= 1) ++ dump_stack(); ++#endif ++ pr_flush(1000, true); ++ + /* + * Disable local interrupts. This will prevent panic_smp_self_stop + * from deadlocking the first cpu that invokes the panic, since +@@ -290,24 +306,13 @@ + if (old_cpu != PANIC_CPU_INVALID && old_cpu != this_cpu) + panic_smp_self_stop(); + +- console_verbose(); + bust_spinlocks(1); +- va_start(args, fmt); + len = vscnprintf(buf, sizeof(buf), fmt, args); + va_end(args); + + if (len && buf[len - 1] == '\n') + buf[len - 1] = '\0'; + +- pr_emerg("Kernel panic - not syncing: %s\n", buf); +-#ifdef CONFIG_DEBUG_BUGVERBOSE +- /* +- * Avoid nested stack-dumping if a panic occurs during oops processing +- */ +- if (!test_taint(TAINT_DIE) && oops_in_progress <= 1) +- dump_stack(); +-#endif +- + /* + * If kgdb is enabled, give it a chance to run before we stop all + * the other CPUs or else we won't be able to debug processes left +@@ -324,7 +329,6 @@ + * Bypass the panic_cpu check and call __crash_kexec directly. + */ + if (!_crash_kexec_post_notifiers) { +- printk_safe_flush_on_panic(); + __crash_kexec(NULL); + + /* +@@ -348,8 +352,6 @@ + */ + atomic_notifier_call_chain(&panic_notifier_list, 0, buf); + +- /* Call flush even twice. It tries harder with a single online CPU */ +- printk_safe_flush_on_panic(); + kmsg_dump(KMSG_DUMP_PANIC); + + /* +@@ -619,9 +621,11 @@ + + static int init_oops_id(void) + { ++#ifndef CONFIG_PREEMPT_RT + if (!oops_id) + get_random_bytes(&oops_id, sizeof(oops_id)); + else ++#endif + oops_id++; + + return 0; +@@ -632,6 +636,7 @@ + { + init_oops_id(); + pr_warn("---[ end trace %016llx ]---\n", (unsigned long long)oops_id); ++ pr_flush(1000, true); + } + + /* +diff -Naur --no-dereference a/kernel/printk/internal.h b/kernel/printk/internal.h +--- a/kernel/printk/internal.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/printk/internal.h 1969-12-31 19:00:00.000000000 -0500 +@@ -1,74 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0-or-later */ +-/* +- * internal.h - printk internal definitions +- */ +-#include +- +-#ifdef CONFIG_PRINTK +- +-#define PRINTK_SAFE_CONTEXT_MASK 0x007ffffff +-#define PRINTK_NMI_DIRECT_CONTEXT_MASK 0x008000000 +-#define PRINTK_NMI_CONTEXT_MASK 0xff0000000 +- +-#define PRINTK_NMI_CONTEXT_OFFSET 0x010000000 +- +-extern raw_spinlock_t logbuf_lock; +- +-__printf(4, 0) +-int vprintk_store(int facility, int level, +- const struct dev_printk_info *dev_info, +- const char *fmt, va_list args); +- +-__printf(1, 0) int vprintk_default(const char *fmt, va_list args); +-__printf(1, 0) int vprintk_deferred(const char *fmt, va_list args); +-__printf(1, 0) int vprintk_func(const char *fmt, va_list args); +-void __printk_safe_enter(void); +-void __printk_safe_exit(void); +- +-void printk_safe_init(void); +-bool printk_percpu_data_ready(void); +- +-#define printk_safe_enter_irqsave(flags) \ +- do { \ +- local_irq_save(flags); \ +- __printk_safe_enter(); \ +- } while (0) +- +-#define printk_safe_exit_irqrestore(flags) \ +- do { \ +- __printk_safe_exit(); \ +- local_irq_restore(flags); \ +- } while (0) +- +-#define printk_safe_enter_irq() \ +- do { \ +- local_irq_disable(); \ +- __printk_safe_enter(); \ +- } while (0) +- +-#define printk_safe_exit_irq() \ +- do { \ +- __printk_safe_exit(); \ +- local_irq_enable(); \ +- } while (0) +- +-void defer_console_output(void); +- +-#else +- +-__printf(1, 0) int vprintk_func(const char *fmt, va_list args) { return 0; } +- +-/* +- * In !PRINTK builds we still export logbuf_lock spin_lock, console_sem +- * semaphore and some of console functions (console_unlock()/etc.), so +- * printk-safe must preserve the existing local IRQ guarantees. +- */ +-#define printk_safe_enter_irqsave(flags) local_irq_save(flags) +-#define printk_safe_exit_irqrestore(flags) local_irq_restore(flags) +- +-#define printk_safe_enter_irq() local_irq_disable() +-#define printk_safe_exit_irq() local_irq_enable() +- +-static inline void printk_safe_init(void) { } +-static inline bool printk_percpu_data_ready(void) { return false; } +-#endif /* CONFIG_PRINTK */ +diff -Naur --no-dereference a/kernel/printk/Makefile b/kernel/printk/Makefile +--- a/kernel/printk/Makefile 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/printk/Makefile 2024-11-24 20:19:38.246228958 -0500 +@@ -1,5 +1,4 @@ + # SPDX-License-Identifier: GPL-2.0-only + obj-y = printk.o +-obj-$(CONFIG_PRINTK) += printk_safe.o + obj-$(CONFIG_A11Y_BRAILLE_CONSOLE) += braille.o + obj-$(CONFIG_PRINTK) += printk_ringbuffer.o +diff -Naur --no-dereference a/kernel/printk/printk.c b/kernel/printk/printk.c +--- a/kernel/printk/printk.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/printk/printk.c 2024-11-24 20:19:38.246228958 -0500 +@@ -44,6 +44,9 @@ + #include + #include + #include ++#include ++#include ++#include + #include + #include + #include +@@ -58,7 +61,6 @@ + #include "printk_ringbuffer.h" + #include "console_cmdline.h" + #include "braille.h" +-#include "internal.h" + + int console_printk[4] = { + CONSOLE_LOGLEVEL_DEFAULT, /* console_loglevel */ +@@ -227,19 +229,7 @@ + + static int __down_trylock_console_sem(unsigned long ip) + { +- int lock_failed; +- unsigned long flags; +- +- /* +- * Here and in __up_console_sem() we need to be in safe mode, +- * because spindump/WARN/etc from under console ->lock will +- * deadlock in printk()->down_trylock_console_sem() otherwise. +- */ +- printk_safe_enter_irqsave(flags); +- lock_failed = down_trylock(&console_sem); +- printk_safe_exit_irqrestore(flags); +- +- if (lock_failed) ++ if (down_trylock(&console_sem)) + return 1; + mutex_acquire(&console_lock_dep_map, 0, 1, ip); + return 0; +@@ -248,13 +238,9 @@ + + static void __up_console_sem(unsigned long ip) + { +- unsigned long flags; +- + mutex_release(&console_lock_dep_map, ip); + +- printk_safe_enter_irqsave(flags); + up(&console_sem); +- printk_safe_exit_irqrestore(flags); + } + #define up_console_sem() __up_console_sem(_RET_IP_) + +@@ -269,11 +255,6 @@ + static int console_locked, console_suspended; + + /* +- * If exclusive_console is non-NULL then only this console is to be printed to. +- */ +-static struct console *exclusive_console; +- +-/* + * Array of consoles built from command line options (console=) + */ + +@@ -357,61 +338,43 @@ + LOG_CONT = 8, /* text is a fragment of a continuation line */ + }; + +-/* +- * The logbuf_lock protects kmsg buffer, indices, counters. This can be taken +- * within the scheduler's rq lock. It must be released before calling +- * console_unlock() or anything else that might wake up a process. +- */ +-DEFINE_RAW_SPINLOCK(logbuf_lock); +- +-/* +- * Helper macros to lock/unlock logbuf_lock and switch between +- * printk-safe/unsafe modes. +- */ +-#define logbuf_lock_irq() \ +- do { \ +- printk_safe_enter_irq(); \ +- raw_spin_lock(&logbuf_lock); \ +- } while (0) +- +-#define logbuf_unlock_irq() \ +- do { \ +- raw_spin_unlock(&logbuf_lock); \ +- printk_safe_exit_irq(); \ +- } while (0) +- +-#define logbuf_lock_irqsave(flags) \ +- do { \ +- printk_safe_enter_irqsave(flags); \ +- raw_spin_lock(&logbuf_lock); \ +- } while (0) +- +-#define logbuf_unlock_irqrestore(flags) \ +- do { \ +- raw_spin_unlock(&logbuf_lock); \ +- printk_safe_exit_irqrestore(flags); \ +- } while (0) +- + #ifdef CONFIG_PRINTK ++/* syslog_lock protects syslog_* variables and write access to clear_seq. */ ++static DEFINE_SPINLOCK(syslog_lock); ++ ++/* Set to enable sync mode. Once set, it is never cleared. */ ++static bool sync_mode; ++ + DECLARE_WAIT_QUEUE_HEAD(log_wait); ++/* All 3 protected by @syslog_lock. */ + /* the next printk record to read by syslog(READ) or /proc/kmsg */ + static u64 syslog_seq; + static size_t syslog_partial; + static bool syslog_time; + +-/* the next printk record to write to the console */ +-static u64 console_seq; +-static u64 exclusive_console_stop_seq; +-static unsigned long console_dropped; ++struct latched_seq { ++ seqcount_latch_t latch; ++ u64 val[2]; ++}; + +-/* the next printk record to read after the last 'clear' command */ +-static u64 clear_seq; ++/* ++ * The next printk record to read after the last 'clear' command. There are ++ * two copies (updated with seqcount_latch) so that reads can locklessly ++ * access a valid value. Writers are synchronized by @syslog_lock. ++ */ ++static struct latched_seq clear_seq = { ++ .latch = SEQCNT_LATCH_ZERO(clear_seq.latch), ++ .val[0] = 0, ++ .val[1] = 0, ++}; + + #ifdef CONFIG_PRINTK_CALLER + #define PREFIX_MAX 48 + #else + #define PREFIX_MAX 32 + #endif ++ ++/* the maximum size allowed to be reserved for a record */ + #define LOG_LINE_MAX (1024 - PREFIX_MAX) + + #define LOG_LEVEL(v) ((v) & 0x07) +@@ -449,11 +412,36 @@ + */ + static bool __printk_percpu_data_ready __read_mostly; + +-bool printk_percpu_data_ready(void) ++static bool printk_percpu_data_ready(void) + { + return __printk_percpu_data_ready; + } + ++/* Must be called under syslog_lock. */ ++static void latched_seq_write(struct latched_seq *ls, u64 val) ++{ ++ raw_write_seqcount_latch(&ls->latch); ++ ls->val[0] = val; ++ raw_write_seqcount_latch(&ls->latch); ++ ls->val[1] = val; ++} ++ ++/* Can be called from any context. */ ++static u64 latched_seq_read_nolock(struct latched_seq *ls) ++{ ++ unsigned int seq; ++ unsigned int idx; ++ u64 val; ++ ++ do { ++ seq = raw_read_seqcount_latch(&ls->latch); ++ idx = seq & 0x1; ++ val = ls->val[idx]; ++ } while (read_seqcount_latch_retry(&ls->latch, seq)); ++ ++ return val; ++} ++ + /* Return log buffer address */ + char *log_buf_addr_get(void) + { +@@ -493,52 +481,6 @@ + *trunc_msg_len = 0; + } + +-/* insert record into the buffer, discard old ones, update heads */ +-static int log_store(u32 caller_id, int facility, int level, +- enum log_flags flags, u64 ts_nsec, +- const struct dev_printk_info *dev_info, +- const char *text, u16 text_len) +-{ +- struct prb_reserved_entry e; +- struct printk_record r; +- u16 trunc_msg_len = 0; +- +- prb_rec_init_wr(&r, text_len); +- +- if (!prb_reserve(&e, prb, &r)) { +- /* truncate the message if it is too long for empty buffer */ +- truncate_msg(&text_len, &trunc_msg_len); +- prb_rec_init_wr(&r, text_len + trunc_msg_len); +- /* survive when the log buffer is too small for trunc_msg */ +- if (!prb_reserve(&e, prb, &r)) +- return 0; +- } +- +- /* fill message */ +- memcpy(&r.text_buf[0], text, text_len); +- if (trunc_msg_len) +- memcpy(&r.text_buf[text_len], trunc_msg, trunc_msg_len); +- r.info->text_len = text_len + trunc_msg_len; +- r.info->facility = facility; +- r.info->level = level & 7; +- r.info->flags = flags & 0x1f; +- if (ts_nsec > 0) +- r.info->ts_nsec = ts_nsec; +- else +- r.info->ts_nsec = local_clock(); +- r.info->caller_id = caller_id; +- if (dev_info) +- memcpy(&r.info->dev_info, dev_info, sizeof(r.info->dev_info)); +- +- /* A message without a trailing newline can be continued. */ +- if (!(flags & LOG_NEWLINE)) +- prb_commit(&e); +- else +- prb_final_commit(&e); +- +- return (text_len + trunc_msg_len); +-} +- + int dmesg_restrict = IS_ENABLED(CONFIG_SECURITY_DMESG_RESTRICT); + + static int syslog_action_restricted(int type) +@@ -667,7 +609,7 @@ + + /* /dev/kmsg - userspace message inject/listen interface */ + struct devkmsg_user { +- u64 seq; ++ atomic64_t seq; + struct ratelimit_state rs; + struct mutex lock; + char buf[CONSOLE_EXT_LOG_MAX]; +@@ -768,27 +710,22 @@ + if (ret) + return ret; + +- logbuf_lock_irq(); +- if (!prb_read_valid(prb, user->seq, r)) { ++ if (!prb_read_valid(prb, atomic64_read(&user->seq), r)) { + if (file->f_flags & O_NONBLOCK) { + ret = -EAGAIN; +- logbuf_unlock_irq(); + goto out; + } + +- logbuf_unlock_irq(); + ret = wait_event_interruptible(log_wait, +- prb_read_valid(prb, user->seq, r)); ++ prb_read_valid(prb, atomic64_read(&user->seq), r)); + if (ret) + goto out; +- logbuf_lock_irq(); + } + +- if (r->info->seq != user->seq) { ++ if (r->info->seq != atomic64_read(&user->seq)) { + /* our last seen message is gone, return error and reset */ +- user->seq = r->info->seq; ++ atomic64_set(&user->seq, r->info->seq); + ret = -EPIPE; +- logbuf_unlock_irq(); + goto out; + } + +@@ -797,8 +734,7 @@ + &r->text_buf[0], r->info->text_len, + &r->info->dev_info); + +- user->seq = r->info->seq + 1; +- logbuf_unlock_irq(); ++ atomic64_set(&user->seq, r->info->seq + 1); + + if (len > count) { + ret = -EINVAL; +@@ -833,11 +769,10 @@ + if (offset) + return -ESPIPE; + +- logbuf_lock_irq(); + switch (whence) { + case SEEK_SET: + /* the first record */ +- user->seq = prb_first_valid_seq(prb); ++ atomic64_set(&user->seq, prb_first_valid_seq(prb)); + break; + case SEEK_DATA: + /* +@@ -845,16 +780,15 @@ + * like issued by 'dmesg -c'. Reading /dev/kmsg itself + * changes no global state, and does not clear anything. + */ +- user->seq = clear_seq; ++ atomic64_set(&user->seq, latched_seq_read_nolock(&clear_seq)); + break; + case SEEK_END: + /* after the last record */ +- user->seq = prb_next_seq(prb); ++ atomic64_set(&user->seq, prb_next_seq(prb)); + break; + default: + ret = -EINVAL; + } +- logbuf_unlock_irq(); + return ret; + } + +@@ -869,15 +803,13 @@ + + poll_wait(file, &log_wait, wait); + +- logbuf_lock_irq(); +- if (prb_read_valid_info(prb, user->seq, &info, NULL)) { ++ if (prb_read_valid_info(prb, atomic64_read(&user->seq), &info, NULL)) { + /* return error when data has vanished underneath us */ +- if (info.seq != user->seq) ++ if (info.seq != atomic64_read(&user->seq)) + ret = EPOLLIN|EPOLLRDNORM|EPOLLERR|EPOLLPRI; + else + ret = EPOLLIN|EPOLLRDNORM; + } +- logbuf_unlock_irq(); + + return ret; + } +@@ -910,9 +842,7 @@ + prb_rec_init_rd(&user->record, &user->info, + &user->text_buf[0], sizeof(user->text_buf)); + +- logbuf_lock_irq(); +- user->seq = prb_first_valid_seq(prb); +- logbuf_unlock_irq(); ++ atomic64_set(&user->seq, prb_first_valid_seq(prb)); + + file->private_data = user; + return 0; +@@ -1004,6 +934,9 @@ + + VMCOREINFO_SIZE(atomic_long_t); + VMCOREINFO_TYPE_OFFSET(atomic_long_t, counter); ++ ++ VMCOREINFO_STRUCT_SIZE(latched_seq); ++ VMCOREINFO_OFFSET(latched_seq, val); + } + #endif + +@@ -1075,9 +1008,6 @@ + + static void __init set_percpu_data_ready(void) + { +- printk_safe_init(); +- /* Make sure we set this flag only after printk_safe() init is done */ +- barrier(); + __printk_percpu_data_ready = true; + } + +@@ -1117,7 +1047,6 @@ + struct printk_record r; + size_t new_descs_size; + size_t new_infos_size; +- unsigned long flags; + char *new_log_buf; + unsigned int free; + u64 seq; +@@ -1175,8 +1104,6 @@ + new_descs, ilog2(new_descs_count), + new_infos); + +- logbuf_lock_irqsave(flags); +- + log_buf_len = new_log_buf_len; + log_buf = new_log_buf; + new_log_buf_len = 0; +@@ -1192,8 +1119,6 @@ + */ + prb = &printk_rb_dynamic; + +- logbuf_unlock_irqrestore(flags); +- + if (seq != prb_next_seq(&printk_rb_static)) { + pr_err("dropped %llu messages\n", + prb_next_seq(&printk_rb_static) - seq); +@@ -1470,6 +1395,50 @@ + return ((prefix_len * line_count) + info->text_len + 1); + } + ++/* ++ * Beginning with @start_seq, find the first record where it and all following ++ * records up to (but not including) @max_seq fit into @size. ++ * ++ * @max_seq is simply an upper bound and does not need to exist. If the caller ++ * does not require an upper bound, -1 can be used for @max_seq. ++ */ ++static u64 find_first_fitting_seq(u64 start_seq, u64 max_seq, size_t size, ++ bool syslog, bool time) ++{ ++ struct printk_info info; ++ unsigned int line_count; ++ size_t len = 0; ++ u64 seq; ++ ++ /* Determine the size of the records up to @max_seq. */ ++ prb_for_each_info(start_seq, prb, seq, &info, &line_count) { ++ if (info.seq >= max_seq) ++ break; ++ len += get_record_print_text_size(&info, line_count, syslog, time); ++ } ++ ++ /* ++ * Adjust the upper bound for the next loop to avoid subtracting ++ * lengths that were never added. ++ */ ++ if (seq < max_seq) ++ max_seq = seq; ++ ++ /* ++ * Move first record forward until length fits into the buffer. Ignore ++ * newest messages that were not counted in the above cycle. Messages ++ * might appear and get lost in the meantime. This is a best effort ++ * that prevents an infinite loop that could occur with a retry. ++ */ ++ prb_for_each_info(start_seq, prb, seq, &info, &line_count) { ++ if (len <= size || info.seq >= max_seq) ++ break; ++ len -= get_record_print_text_size(&info, line_count, syslog, time); ++ } ++ ++ return seq; ++} ++ + static int syslog_print(char __user *buf, int size) + { + struct printk_info info; +@@ -1477,19 +1446,19 @@ + char *text; + int len = 0; + +- text = kmalloc(LOG_LINE_MAX + PREFIX_MAX, GFP_KERNEL); ++ text = kmalloc(CONSOLE_LOG_MAX, GFP_KERNEL); + if (!text) + return -ENOMEM; + +- prb_rec_init_rd(&r, &info, text, LOG_LINE_MAX + PREFIX_MAX); ++ prb_rec_init_rd(&r, &info, text, CONSOLE_LOG_MAX); + + while (size > 0) { + size_t n; + size_t skip; + +- logbuf_lock_irq(); ++ spin_lock_irq(&syslog_lock); + if (!prb_read_valid(prb, syslog_seq, &r)) { +- logbuf_unlock_irq(); ++ spin_unlock_irq(&syslog_lock); + break; + } + if (r.info->seq != syslog_seq) { +@@ -1518,7 +1487,7 @@ + syslog_partial += n; + } else + n = 0; +- logbuf_unlock_irq(); ++ spin_unlock_irq(&syslog_lock); + + if (!n) + break; +@@ -1541,34 +1510,25 @@ + static int syslog_print_all(char __user *buf, int size, bool clear) + { + struct printk_info info; +- unsigned int line_count; + struct printk_record r; + char *text; + int len = 0; + u64 seq; + bool time; + +- text = kmalloc(LOG_LINE_MAX + PREFIX_MAX, GFP_KERNEL); ++ text = kmalloc(CONSOLE_LOG_MAX, GFP_KERNEL); + if (!text) + return -ENOMEM; + + time = printk_time; +- logbuf_lock_irq(); + /* + * Find first record that fits, including all following records, + * into the user-provided buffer for this dump. + */ +- prb_for_each_info(clear_seq, prb, seq, &info, &line_count) +- len += get_record_print_text_size(&info, line_count, true, time); ++ seq = find_first_fitting_seq(latched_seq_read_nolock(&clear_seq), -1, ++ size, true, time); + +- /* move first record forward until length fits into the buffer */ +- prb_for_each_info(clear_seq, prb, seq, &info, &line_count) { +- if (len <= size) +- break; +- len -= get_record_print_text_size(&info, line_count, true, time); +- } +- +- prb_rec_init_rd(&r, &info, text, LOG_LINE_MAX + PREFIX_MAX); ++ prb_rec_init_rd(&r, &info, text, CONSOLE_LOG_MAX); + + len = 0; + prb_for_each_record(seq, prb, seq, &r) { +@@ -1581,20 +1541,20 @@ + break; + } + +- logbuf_unlock_irq(); + if (copy_to_user(buf + len, text, textlen)) + len = -EFAULT; + else + len += textlen; +- logbuf_lock_irq(); + + if (len < 0) + break; + } + +- if (clear) +- clear_seq = seq; +- logbuf_unlock_irq(); ++ if (clear) { ++ spin_lock_irq(&syslog_lock); ++ latched_seq_write(&clear_seq, seq); ++ spin_unlock_irq(&syslog_lock); ++ } + + kfree(text); + return len; +@@ -1602,9 +1562,21 @@ + + static void syslog_clear(void) + { +- logbuf_lock_irq(); +- clear_seq = prb_next_seq(prb); +- logbuf_unlock_irq(); ++ spin_lock_irq(&syslog_lock); ++ latched_seq_write(&clear_seq, prb_next_seq(prb)); ++ spin_unlock_irq(&syslog_lock); ++} ++ ++/* Return a consistent copy of @syslog_seq. */ ++static u64 read_syslog_seq_irq(void) ++{ ++ u64 seq; ++ ++ spin_lock_irq(&syslog_lock); ++ seq = syslog_seq; ++ spin_unlock_irq(&syslog_lock); ++ ++ return seq; + } + + int do_syslog(int type, char __user *buf, int len, int source) +@@ -1630,8 +1602,9 @@ + return 0; + if (!access_ok(buf, len)) + return -EFAULT; ++ + error = wait_event_interruptible(log_wait, +- prb_read_valid(prb, syslog_seq, NULL)); ++ prb_read_valid(prb, read_syslog_seq_irq(), NULL)); + if (error) + return error; + error = syslog_print(buf, len); +@@ -1679,10 +1652,10 @@ + break; + /* Number of chars in the log buffer */ + case SYSLOG_ACTION_SIZE_UNREAD: +- logbuf_lock_irq(); ++ spin_lock_irq(&syslog_lock); + if (!prb_read_valid_info(prb, syslog_seq, &info, NULL)) { + /* No unread messages. */ +- logbuf_unlock_irq(); ++ spin_unlock_irq(&syslog_lock); + return 0; + } + if (info.seq != syslog_seq) { +@@ -1710,7 +1683,7 @@ + } + error -= syslog_partial; + } +- logbuf_unlock_irq(); ++ spin_unlock_irq(&syslog_lock); + break; + /* Size of the log buffer */ + case SYSLOG_ACTION_SIZE_BUFFER: +@@ -1729,202 +1702,172 @@ + return do_syslog(type, buf, len, SYSLOG_FROM_READER); + } + +-/* +- * Special console_lock variants that help to reduce the risk of soft-lockups. +- * They allow to pass console_lock to another printk() call using a busy wait. +- */ +- +-#ifdef CONFIG_LOCKDEP +-static struct lockdep_map console_owner_dep_map = { +- .name = "console_owner" +-}; +-#endif ++int printk_delay_msec __read_mostly; + +-static DEFINE_RAW_SPINLOCK(console_owner_lock); +-static struct task_struct *console_owner; +-static bool console_waiter; ++static inline void printk_delay(int level) ++{ ++ boot_delay_msec(level); + +-/** +- * console_lock_spinning_enable - mark beginning of code where another +- * thread might safely busy wait +- * +- * This basically converts console_lock into a spinlock. This marks +- * the section where the console_lock owner can not sleep, because +- * there may be a waiter spinning (like a spinlock). Also it must be +- * ready to hand over the lock at the end of the section. +- */ +-static void console_lock_spinning_enable(void) +-{ +- raw_spin_lock(&console_owner_lock); +- console_owner = current; +- raw_spin_unlock(&console_owner_lock); ++ if (unlikely(printk_delay_msec)) { ++ int m = printk_delay_msec; + +- /* The waiter may spin on us after setting console_owner */ +- spin_acquire(&console_owner_dep_map, 0, 0, _THIS_IP_); ++ while (m--) { ++ mdelay(1); ++ touch_nmi_watchdog(); ++ } ++ } + } + +-/** +- * console_lock_spinning_disable_and_check - mark end of code where another +- * thread was able to busy wait and check if there is a waiter +- * +- * This is called at the end of the section where spinning is allowed. +- * It has two functions. First, it is a signal that it is no longer +- * safe to start busy waiting for the lock. Second, it checks if +- * there is a busy waiter and passes the lock rights to her. +- * +- * Important: Callers lose the lock if there was a busy waiter. +- * They must not touch items synchronized by console_lock +- * in this case. +- * +- * Return: 1 if the lock rights were passed, 0 otherwise. +- */ +-static int console_lock_spinning_disable_and_check(void) ++static bool kernel_sync_mode(void) + { +- int waiter; ++ return (oops_in_progress || sync_mode); ++} + +- raw_spin_lock(&console_owner_lock); +- waiter = READ_ONCE(console_waiter); +- console_owner = NULL; +- raw_spin_unlock(&console_owner_lock); ++static bool console_can_sync(struct console *con) ++{ ++ if (!(con->flags & CON_ENABLED)) ++ return false; ++ if (con->write_atomic && kernel_sync_mode()) ++ return true; ++ if (con->write_atomic && (con->flags & CON_HANDOVER) && !con->thread) ++ return true; ++ if (con->write && (con->flags & CON_BOOT) && !con->thread) ++ return true; ++ return false; ++} + +- if (!waiter) { +- spin_release(&console_owner_dep_map, _THIS_IP_); +- return 0; +- } ++static bool call_sync_console_driver(struct console *con, const char *text, size_t text_len) ++{ ++ if (!(con->flags & CON_ENABLED)) ++ return false; ++ if (con->write_atomic && kernel_sync_mode()) ++ con->write_atomic(con, text, text_len); ++ else if (con->write_atomic && (con->flags & CON_HANDOVER) && !con->thread) ++ con->write_atomic(con, text, text_len); ++ else if (con->write && (con->flags & CON_BOOT) && !con->thread) ++ con->write(con, text, text_len); ++ else ++ return false; + +- /* The waiter is now free to continue */ +- WRITE_ONCE(console_waiter, false); ++ return true; ++} + +- spin_release(&console_owner_dep_map, _THIS_IP_); ++static bool have_atomic_console(void) ++{ ++ struct console *con; + +- /* +- * Hand off console_lock to waiter. The waiter will perform +- * the up(). After this, the waiter is the console_lock owner. +- */ +- mutex_release(&console_lock_dep_map, _THIS_IP_); +- return 1; ++ for_each_console(con) { ++ if (!(con->flags & CON_ENABLED)) ++ continue; ++ if (con->write_atomic) ++ return true; ++ } ++ return false; + } + +-/** +- * console_trylock_spinning - try to get console_lock by busy waiting +- * +- * This allows to busy wait for the console_lock when the current +- * owner is running in specially marked sections. It means that +- * the current owner is running and cannot reschedule until it +- * is ready to lose the lock. +- * +- * Return: 1 if we got the lock, 0 othrewise +- */ +-static int console_trylock_spinning(void) ++static bool print_sync(struct console *con, u64 *seq) + { +- struct task_struct *owner = NULL; +- bool waiter; +- bool spin = false; +- unsigned long flags; ++ struct printk_info info; ++ struct printk_record r; ++ size_t text_len; + +- if (console_trylock()) +- return 1; ++ prb_rec_init_rd(&r, &info, &con->sync_buf[0], sizeof(con->sync_buf)); ++ ++ if (!prb_read_valid(prb, *seq, &r)) ++ return false; + +- printk_safe_enter_irqsave(flags); ++ text_len = record_print_text(&r, console_msg_format & MSG_FORMAT_SYSLOG, printk_time); + +- raw_spin_lock(&console_owner_lock); +- owner = READ_ONCE(console_owner); +- waiter = READ_ONCE(console_waiter); +- if (!waiter && owner && owner != current) { +- WRITE_ONCE(console_waiter, true); +- spin = true; +- } +- raw_spin_unlock(&console_owner_lock); +- +- /* +- * If there is an active printk() writing to the +- * consoles, instead of having it write our data too, +- * see if we can offload that load from the active +- * printer, and do some printing ourselves. +- * Go into a spin only if there isn't already a waiter +- * spinning, and there is an active printer, and +- * that active printer isn't us (recursive printk?). +- */ +- if (!spin) { +- printk_safe_exit_irqrestore(flags); +- return 0; +- } ++ if (!call_sync_console_driver(con, &con->sync_buf[0], text_len)) ++ return false; + +- /* We spin waiting for the owner to release us */ +- spin_acquire(&console_owner_dep_map, 0, 0, _THIS_IP_); +- /* Owner will clear console_waiter on hand off */ +- while (READ_ONCE(console_waiter)) +- cpu_relax(); +- spin_release(&console_owner_dep_map, _THIS_IP_); ++ *seq = r.info->seq; + +- printk_safe_exit_irqrestore(flags); +- /* +- * The owner passed the console lock to us. +- * Since we did not spin on console lock, annotate +- * this as a trylock. Otherwise lockdep will +- * complain. +- */ +- mutex_acquire(&console_lock_dep_map, 0, 1, _THIS_IP_); ++ touch_softlockup_watchdog_sync(); ++ clocksource_touch_watchdog(); ++ rcu_cpu_stall_reset(); ++ touch_nmi_watchdog(); + +- return 1; ++ if (text_len) ++ printk_delay(r.info->level); ++ ++ return true; + } + +-/* +- * Call the console drivers, asking them to write out +- * log_buf[start] to log_buf[end - 1]. +- * The console_lock must be held. +- */ +-static void call_console_drivers(const char *ext_text, size_t ext_len, +- const char *text, size_t len) ++static void print_sync_until(struct console *con, u64 seq) + { +- static char dropped_text[64]; +- size_t dropped_len = 0; +- struct console *con; ++ unsigned int flags; ++ u64 printk_seq; + +- trace_console_rcuidle(text, len); ++ console_atomic_lock(&flags); ++ for (;;) { ++ printk_seq = atomic64_read(&con->printk_seq); ++ if (printk_seq >= seq) ++ break; ++ if (!print_sync(con, &printk_seq)) ++ break; ++ atomic64_set(&con->printk_seq, printk_seq + 1); ++ } ++ console_atomic_unlock(flags); ++} + +- if (!console_drivers) +- return; ++#ifdef CONFIG_PRINTK_NMI ++#define NUM_RECURSION_CTX 2 ++#else ++#define NUM_RECURSION_CTX 1 ++#endif + +- if (console_dropped) { +- dropped_len = snprintf(dropped_text, sizeof(dropped_text), +- "** %lu printk messages dropped **\n", +- console_dropped); +- console_dropped = 0; +- } ++struct printk_recursion { ++ char count[NUM_RECURSION_CTX]; ++}; + +- for_each_console(con) { +- if (exclusive_console && con != exclusive_console) +- continue; +- if (!(con->flags & CON_ENABLED)) +- continue; +- if (!con->write) +- continue; +- if (!cpu_online(smp_processor_id()) && +- !(con->flags & CON_ANYTIME)) +- continue; +- if (con->flags & CON_EXTENDED) +- con->write(con, ext_text, ext_len); +- else { +- if (dropped_len) +- con->write(con, dropped_text, dropped_len); +- con->write(con, text, len); +- } ++static DEFINE_PER_CPU(struct printk_recursion, percpu_printk_recursion); ++static char printk_recursion_count[NUM_RECURSION_CTX]; ++ ++static char *printk_recursion_counter(void) ++{ ++ struct printk_recursion *rec; ++ char *count; ++ ++ if (!printk_percpu_data_ready()) { ++ count = &printk_recursion_count[0]; ++ } else { ++ rec = this_cpu_ptr(&percpu_printk_recursion); ++ ++ count = &rec->count[0]; + } +-} + +-int printk_delay_msec __read_mostly; ++#ifdef CONFIG_PRINTK_NMI ++ if (in_nmi()) ++ count++; ++#endif ++ ++ return count; ++} + +-static inline void printk_delay(void) ++static bool printk_enter_irqsave(unsigned long *flags) + { +- if (unlikely(printk_delay_msec)) { +- int m = printk_delay_msec; ++ char *count; + +- while (m--) { +- mdelay(1); +- touch_nmi_watchdog(); +- } ++ local_irq_save(*flags); ++ count = printk_recursion_counter(); ++ /* Only 1 level of recursion allowed. */ ++ if (*count > 1) { ++ local_irq_restore(*flags); ++ return false; + } ++ (*count)++; ++ ++ return true; ++} ++ ++static void printk_exit_irqrestore(unsigned long flags) ++{ ++ char *count; ++ ++ count = printk_recursion_counter(); ++ (*count)--; ++ local_irq_restore(flags); + } + + static inline u32 printk_caller_id(void) +@@ -1933,83 +1876,204 @@ + 0x80000000 + raw_smp_processor_id(); + } + +-static size_t log_output(int facility, int level, enum log_flags lflags, ++/** ++ * parse_prefix - Parse level and control flags. ++ * ++ * @text: The terminated text message. ++ * @level: A pointer to the current level value, will be updated. ++ * @lflags: A pointer to the current log flags, will be updated. ++ * ++ * @level may be NULL if the caller is not interested in the parsed value. ++ * Otherwise the variable pointed to by @level must be set to ++ * LOGLEVEL_DEFAULT in order to be updated with the parsed value. ++ * ++ * @lflags may be NULL if the caller is not interested in the parsed value. ++ * Otherwise the variable pointed to by @lflags will be OR'd with the parsed ++ * value. ++ * ++ * Return: The length of the parsed level and control flags. ++ */ ++static u16 parse_prefix(char *text, int *level, enum log_flags *lflags) ++{ ++ u16 prefix_len = 0; ++ int kern_level; ++ ++ while (*text) { ++ kern_level = printk_get_level(text); ++ if (!kern_level) ++ break; ++ ++ switch (kern_level) { ++ case '0' ... '7': ++ if (level && *level == LOGLEVEL_DEFAULT) ++ *level = kern_level - '0'; ++ break; ++ case 'c': /* KERN_CONT */ ++ if (lflags) ++ *lflags |= LOG_CONT; ++ } ++ ++ prefix_len += 2; ++ text += 2; ++ } ++ ++ return prefix_len; ++} ++ ++static u16 printk_sprint(char *text, u16 size, int facility, enum log_flags *lflags, ++ const char *fmt, va_list args) ++{ ++ u16 text_len; ++ ++ text_len = vscnprintf(text, size, fmt, args); ++ ++ /* Mark and strip a trailing newline. */ ++ if (text_len && text[text_len - 1] == '\n') { ++ text_len--; ++ *lflags |= LOG_NEWLINE; ++ } ++ ++ /* Strip log level and control flags. */ ++ if (facility == 0) { ++ u16 prefix_len; ++ ++ prefix_len = parse_prefix(text, NULL, NULL); ++ if (prefix_len) { ++ text_len -= prefix_len; ++ memmove(text, text + prefix_len, text_len); ++ } ++ } ++ ++ return text_len; ++} ++ ++__printf(4, 0) ++static int vprintk_store(int facility, int level, + const struct dev_printk_info *dev_info, +- char *text, size_t text_len) ++ const char *fmt, va_list args) + { + const u32 caller_id = printk_caller_id(); ++ struct prb_reserved_entry e; ++ enum log_flags lflags = 0; ++ bool final_commit = false; ++ struct printk_record r; ++ unsigned long irqflags; ++ u16 trunc_msg_len = 0; ++ char prefix_buf[8]; ++ u16 reserve_size; ++ va_list args2; ++ u16 text_len; ++ int ret = 0; ++ u64 ts_nsec; ++ u64 seq; + +- if (lflags & LOG_CONT) { +- struct prb_reserved_entry e; +- struct printk_record r; ++ /* ++ * Since the duration of printk() can vary depending on the message ++ * and state of the ringbuffer, grab the timestamp now so that it is ++ * close to the call of printk(). This provides a more deterministic ++ * timestamp with respect to the caller. ++ */ ++ ts_nsec = local_clock(); ++ ++ if (!printk_enter_irqsave(&irqflags)) ++ return 0; ++ ++ /* ++ * The sprintf needs to come first since the syslog prefix might be ++ * passed in as a parameter. An extra byte must be reserved so that ++ * later the vscnprintf() into the reserved buffer has room for the ++ * terminating '\0', which is not counted by vsnprintf(). ++ */ ++ va_copy(args2, args); ++ reserve_size = vsnprintf(&prefix_buf[0], sizeof(prefix_buf), fmt, args2) + 1; ++ va_end(args2); ++ ++ if (reserve_size > LOG_LINE_MAX) ++ reserve_size = LOG_LINE_MAX; ++ ++ /* Extract log level or control flags. */ ++ if (facility == 0) ++ parse_prefix(&prefix_buf[0], &level, &lflags); ++ ++ if (level == LOGLEVEL_DEFAULT) ++ level = default_message_loglevel; ++ ++ if (dev_info) ++ lflags |= LOG_NEWLINE; + +- prb_rec_init_wr(&r, text_len); ++ if (lflags & LOG_CONT) { ++ prb_rec_init_wr(&r, reserve_size); + if (prb_reserve_in_last(&e, prb, &r, caller_id, LOG_LINE_MAX)) { +- memcpy(&r.text_buf[r.info->text_len], text, text_len); ++ seq = r.info->seq; ++ text_len = printk_sprint(&r.text_buf[r.info->text_len], reserve_size, ++ facility, &lflags, fmt, args); + r.info->text_len += text_len; ++ + if (lflags & LOG_NEWLINE) { + r.info->flags |= LOG_NEWLINE; + prb_final_commit(&e); ++ final_commit = true; + } else { + prb_commit(&e); + } +- return text_len; ++ ++ ret = text_len; ++ goto out; + } + } + +- /* Store it in the record log */ +- return log_store(caller_id, facility, level, lflags, 0, +- dev_info, text, text_len); +-} +- +-/* Must be called under logbuf_lock. */ +-int vprintk_store(int facility, int level, +- const struct dev_printk_info *dev_info, +- const char *fmt, va_list args) +-{ +- static char textbuf[LOG_LINE_MAX]; +- char *text = textbuf; +- size_t text_len; +- enum log_flags lflags = 0; +- + /* +- * The printf needs to come first; we need the syslog +- * prefix which might be passed-in as a parameter. ++ * Explicitly initialize the record before every prb_reserve() call. ++ * prb_reserve_in_last() and prb_reserve() purposely invalidate the ++ * structure when they fail. + */ +- text_len = vscnprintf(text, sizeof(textbuf), fmt, args); ++ prb_rec_init_wr(&r, reserve_size); ++ if (!prb_reserve(&e, prb, &r)) { ++ /* truncate the message if it is too long for empty buffer */ ++ truncate_msg(&reserve_size, &trunc_msg_len); + +- /* mark and strip a trailing newline */ +- if (text_len && text[text_len-1] == '\n') { +- text_len--; +- lflags |= LOG_NEWLINE; ++ prb_rec_init_wr(&r, reserve_size + trunc_msg_len); ++ if (!prb_reserve(&e, prb, &r)) ++ goto out; + } + +- /* strip kernel syslog prefix and extract log level or control flags */ +- if (facility == 0) { +- int kern_level; ++ seq = r.info->seq; + +- while ((kern_level = printk_get_level(text)) != 0) { +- switch (kern_level) { +- case '0' ... '7': +- if (level == LOGLEVEL_DEFAULT) +- level = kern_level - '0'; +- break; +- case 'c': /* KERN_CONT */ +- lflags |= LOG_CONT; +- } ++ /* fill message */ ++ text_len = printk_sprint(&r.text_buf[0], reserve_size, facility, &lflags, fmt, args); ++ if (trunc_msg_len) ++ memcpy(&r.text_buf[text_len], trunc_msg, trunc_msg_len); ++ r.info->text_len = text_len + trunc_msg_len; ++ r.info->facility = facility; ++ r.info->level = level & 7; ++ r.info->flags = lflags & 0x1f; ++ r.info->ts_nsec = ts_nsec; ++ r.info->caller_id = caller_id; ++ if (dev_info) ++ memcpy(&r.info->dev_info, dev_info, sizeof(r.info->dev_info)); + +- text_len -= 2; +- text += 2; +- } ++ /* A message without a trailing newline can be continued. */ ++ if (!(lflags & LOG_NEWLINE)) { ++ prb_commit(&e); ++ } else { ++ prb_final_commit(&e); ++ final_commit = true; + } + +- if (level == LOGLEVEL_DEFAULT) +- level = default_message_loglevel; ++ ret = text_len + trunc_msg_len; ++out: ++ /* only the kernel may perform synchronous printing */ ++ if (facility == 0 && final_commit) { ++ struct console *con; + +- if (dev_info) +- lflags |= LOG_NEWLINE; ++ for_each_console(con) { ++ if (console_can_sync(con)) ++ print_sync_until(con, seq + 1); ++ } ++ } + +- return log_output(facility, level, lflags, dev_info, text, text_len); ++ printk_exit_irqrestore(irqflags); ++ return ret; + } + + asmlinkage int vprintk_emit(int facility, int level, +@@ -2017,60 +2081,43 @@ + const char *fmt, va_list args) + { + int printed_len; +- bool in_sched = false; +- unsigned long flags; + + /* Suppress unimportant messages after panic happens */ + if (unlikely(suppress_printk)) + return 0; + +- if (level == LOGLEVEL_SCHED) { ++ if (level == LOGLEVEL_SCHED) + level = LOGLEVEL_DEFAULT; +- in_sched = true; +- } +- +- boot_delay_msec(level); +- printk_delay(); + +- /* This stops the holder of console_sem just where we want him */ +- logbuf_lock_irqsave(flags); + printed_len = vprintk_store(facility, level, dev_info, fmt, args); +- logbuf_unlock_irqrestore(flags); +- +- /* If called from the scheduler, we can not call up(). */ +- if (!in_sched) { +- /* +- * Disable preemption to avoid being preempted while holding +- * console_sem which would prevent anyone from printing to +- * console +- */ +- preempt_disable(); +- /* +- * Try to acquire and then immediately release the console +- * semaphore. The release will print out buffers and wake up +- * /dev/kmsg and syslog() users. +- */ +- if (console_trylock_spinning()) +- console_unlock(); +- preempt_enable(); +- } + + wake_up_klogd(); + return printed_len; + } + EXPORT_SYMBOL(vprintk_emit); + +-asmlinkage int vprintk(const char *fmt, va_list args) ++__printf(1, 0) ++static int vprintk_default(const char *fmt, va_list args) + { +- return vprintk_func(fmt, args); ++ return vprintk_emit(0, LOGLEVEL_DEFAULT, NULL, fmt, args); + } +-EXPORT_SYMBOL(vprintk); + +-int vprintk_default(const char *fmt, va_list args) ++__printf(1, 0) ++static int vprintk_func(const char *fmt, va_list args) + { +- return vprintk_emit(0, LOGLEVEL_DEFAULT, NULL, fmt, args); ++#ifdef CONFIG_KGDB_KDB ++ /* Allow to pass printk() to kdb but avoid a recursion. */ ++ if (unlikely(kdb_trap_printk && kdb_printf_cpu < 0)) ++ return vkdb_printf(KDB_MSGSRC_PRINTK, fmt, args); ++#endif ++ return vprintk_default(fmt, args); ++} ++ ++asmlinkage int vprintk(const char *fmt, va_list args) ++{ ++ return vprintk_func(fmt, args); + } +-EXPORT_SYMBOL_GPL(vprintk_default); ++EXPORT_SYMBOL(vprintk); + + /** + * printk - print a kernel message +@@ -2106,38 +2153,162 @@ + } + EXPORT_SYMBOL(printk); + +-#else /* CONFIG_PRINTK */ ++static int printk_kthread_func(void *data) ++{ ++ struct console *con = data; ++ unsigned long dropped = 0; ++ char *dropped_text = NULL; ++ struct printk_info info; ++ struct printk_record r; ++ char *ext_text = NULL; ++ size_t dropped_len; ++ int ret = -ENOMEM; ++ char *text = NULL; ++ char *write_text; ++ u64 printk_seq; ++ size_t len; ++ int error; ++ u64 seq; + +-#define LOG_LINE_MAX 0 +-#define PREFIX_MAX 0 +-#define printk_time false ++ if (con->flags & CON_EXTENDED) { ++ ext_text = kmalloc(CONSOLE_EXT_LOG_MAX, GFP_KERNEL); ++ if (!ext_text) ++ goto out; ++ } ++ text = kmalloc(LOG_LINE_MAX + PREFIX_MAX, GFP_KERNEL); ++ dropped_text = kmalloc(64, GFP_KERNEL); ++ if (!text || !dropped_text) ++ goto out; + +-#define prb_read_valid(rb, seq, r) false +-#define prb_first_valid_seq(rb) 0 ++ if (con->flags & CON_EXTENDED) ++ write_text = ext_text; ++ else ++ write_text = text; + +-static u64 syslog_seq; +-static u64 console_seq; +-static u64 exclusive_console_stop_seq; +-static unsigned long console_dropped; ++ seq = atomic64_read(&con->printk_seq); ++ ++ prb_rec_init_rd(&r, &info, text, LOG_LINE_MAX + PREFIX_MAX); ++ ++ for (;;) { ++ error = wait_event_interruptible(log_wait, ++ prb_read_valid(prb, seq, &r) || kthread_should_stop()); ++ ++ if (kthread_should_stop()) ++ break; ++ ++ if (error) ++ continue; ++ ++ if (seq != r.info->seq) { ++ dropped += r.info->seq - seq; ++ seq = r.info->seq; ++ } + +-static size_t record_print_text(const struct printk_record *r, +- bool syslog, bool time) ++ seq++; ++ ++ if (!(con->flags & CON_ENABLED)) ++ continue; ++ ++ if (suppress_message_printing(r.info->level)) ++ continue; ++ ++ if (con->flags & CON_EXTENDED) { ++ len = info_print_ext_header(ext_text, ++ CONSOLE_EXT_LOG_MAX, ++ r.info); ++ len += msg_print_ext_body(ext_text + len, ++ CONSOLE_EXT_LOG_MAX - len, ++ &r.text_buf[0], r.info->text_len, ++ &r.info->dev_info); ++ } else { ++ len = record_print_text(&r, ++ console_msg_format & MSG_FORMAT_SYSLOG, ++ printk_time); ++ } ++ ++ printk_seq = atomic64_read(&con->printk_seq); ++ ++ console_lock(); ++ console_may_schedule = 0; ++ ++ if (kernel_sync_mode() && con->write_atomic) { ++ console_unlock(); ++ break; ++ } ++ ++ if (!(con->flags & CON_EXTENDED) && dropped) { ++ dropped_len = snprintf(dropped_text, 64, ++ "** %lu printk messages dropped **\n", ++ dropped); ++ dropped = 0; ++ ++ con->write(con, dropped_text, dropped_len); ++ printk_delay(r.info->level); ++ } ++ ++ con->write(con, write_text, len); ++ if (len) ++ printk_delay(r.info->level); ++ ++ atomic64_cmpxchg_relaxed(&con->printk_seq, printk_seq, seq); ++ ++ console_unlock(); ++ } ++out: ++ kfree(dropped_text); ++ kfree(text); ++ kfree(ext_text); ++ pr_info("%sconsole [%s%d]: printing thread stopped\n", ++ (con->flags & CON_BOOT) ? "boot" : "", ++ con->name, con->index); ++ return ret; ++} ++ ++/* Must be called within console_lock(). */ ++static void start_printk_kthread(struct console *con) + { +- return 0; ++ /* No need to start a printing thread if the console cannot print. */ ++ if (!con->write) ++ return; ++ ++ con->thread = kthread_run(printk_kthread_func, con, ++ "pr/%s%d", con->name, con->index); ++ if (IS_ERR(con->thread)) { ++ pr_err("%sconsole [%s%d]: unable to start printing thread\n", ++ (con->flags & CON_BOOT) ? "boot" : "", ++ con->name, con->index); ++ return; ++ } ++ pr_info("%sconsole [%s%d]: printing thread started\n", ++ (con->flags & CON_BOOT) ? "boot" : "", ++ con->name, con->index); + } +-static ssize_t info_print_ext_header(char *buf, size_t size, +- struct printk_info *info) ++ ++/* protected by console_lock */ ++static bool kthreads_started; ++ ++/* Must be called within console_lock(). */ ++static void console_try_thread(struct console *con) + { +- return 0; ++ if (kthreads_started) { ++ start_printk_kthread(con); ++ return; ++ } ++ ++ /* ++ * The printing threads have not been started yet. If this console ++ * can print synchronously, print all unprinted messages. ++ */ ++ if (console_can_sync(con)) ++ print_sync_until(con, prb_next_seq(prb)); + } +-static ssize_t msg_print_ext_body(char *buf, size_t size, +- char *text, size_t text_len, +- struct dev_printk_info *dev_info) { return 0; } +-static void console_lock_spinning_enable(void) { } +-static int console_lock_spinning_disable_and_check(void) { return 0; } +-static void call_console_drivers(const char *ext_text, size_t ext_len, +- const char *text, size_t len) {} +-static bool suppress_message_printing(int level) { return false; } ++ ++#else /* CONFIG_PRINTK */ ++ ++#define prb_first_valid_seq(rb) 0 ++#define prb_next_seq(rb) 0 ++ ++#define console_try_thread(con) + + #endif /* CONFIG_PRINTK */ + +@@ -2382,34 +2553,6 @@ + } + EXPORT_SYMBOL(is_console_locked); + +-/* +- * Check if we have any console that is capable of printing while cpu is +- * booting or shutting down. Requires console_sem. +- */ +-static int have_callable_console(void) +-{ +- struct console *con; +- +- for_each_console(con) +- if ((con->flags & CON_ENABLED) && +- (con->flags & CON_ANYTIME)) +- return 1; +- +- return 0; +-} +- +-/* +- * Can we actually use the console at this time on this cpu? +- * +- * Console drivers may assume that per-cpu resources have been allocated. So +- * unless they're explicitly marked as being able to cope (CON_ANYTIME) don't +- * call them until this CPU is officially up. +- */ +-static inline int can_use_console(void) +-{ +- return cpu_online(raw_smp_processor_id()) || have_callable_console(); +-} +- + /** + * console_unlock - unlock the console system + * +@@ -2426,142 +2569,14 @@ + */ + void console_unlock(void) + { +- static char ext_text[CONSOLE_EXT_LOG_MAX]; +- static char text[LOG_LINE_MAX + PREFIX_MAX]; +- unsigned long flags; +- bool do_cond_resched, retry; +- struct printk_info info; +- struct printk_record r; +- + if (console_suspended) { + up_console_sem(); + return; + } + +- prb_rec_init_rd(&r, &info, text, sizeof(text)); +- +- /* +- * Console drivers are called with interrupts disabled, so +- * @console_may_schedule should be cleared before; however, we may +- * end up dumping a lot of lines, for example, if called from +- * console registration path, and should invoke cond_resched() +- * between lines if allowable. Not doing so can cause a very long +- * scheduling stall on a slow console leading to RCU stall and +- * softlockup warnings which exacerbate the issue with more +- * messages practically incapacitating the system. +- * +- * console_trylock() is not able to detect the preemptive +- * context reliably. Therefore the value must be stored before +- * and cleared after the "again" goto label. +- */ +- do_cond_resched = console_may_schedule; +-again: +- console_may_schedule = 0; +- +- /* +- * We released the console_sem lock, so we need to recheck if +- * cpu is online and (if not) is there at least one CON_ANYTIME +- * console. +- */ +- if (!can_use_console()) { +- console_locked = 0; +- up_console_sem(); +- return; +- } +- +- for (;;) { +- size_t ext_len = 0; +- size_t len; +- +- printk_safe_enter_irqsave(flags); +- raw_spin_lock(&logbuf_lock); +-skip: +- if (!prb_read_valid(prb, console_seq, &r)) +- break; +- +- if (console_seq != r.info->seq) { +- console_dropped += r.info->seq - console_seq; +- console_seq = r.info->seq; +- } +- +- if (suppress_message_printing(r.info->level)) { +- /* +- * Skip record we have buffered and already printed +- * directly to the console when we received it, and +- * record that has level above the console loglevel. +- */ +- console_seq++; +- goto skip; +- } +- +- /* Output to all consoles once old messages replayed. */ +- if (unlikely(exclusive_console && +- console_seq >= exclusive_console_stop_seq)) { +- exclusive_console = NULL; +- } +- +- /* +- * Handle extended console text first because later +- * record_print_text() will modify the record buffer in-place. +- */ +- if (nr_ext_console_drivers) { +- ext_len = info_print_ext_header(ext_text, +- sizeof(ext_text), +- r.info); +- ext_len += msg_print_ext_body(ext_text + ext_len, +- sizeof(ext_text) - ext_len, +- &r.text_buf[0], +- r.info->text_len, +- &r.info->dev_info); +- } +- len = record_print_text(&r, +- console_msg_format & MSG_FORMAT_SYSLOG, +- printk_time); +- console_seq++; +- raw_spin_unlock(&logbuf_lock); +- +- /* +- * While actively printing out messages, if another printk() +- * were to occur on another CPU, it may wait for this one to +- * finish. This task can not be preempted if there is a +- * waiter waiting to take over. +- */ +- console_lock_spinning_enable(); +- +- stop_critical_timings(); /* don't trace print latency */ +- call_console_drivers(ext_text, ext_len, text, len); +- start_critical_timings(); +- +- if (console_lock_spinning_disable_and_check()) { +- printk_safe_exit_irqrestore(flags); +- return; +- } +- +- printk_safe_exit_irqrestore(flags); +- +- if (do_cond_resched) +- cond_resched(); +- } +- + console_locked = 0; + +- raw_spin_unlock(&logbuf_lock); +- + up_console_sem(); +- +- /* +- * Someone could have filled up the buffer again, so re-check if there's +- * something to flush. In case we cannot trylock the console_sem again, +- * there's a new owner and the console_unlock() from them will do the +- * flush, no worries. +- */ +- raw_spin_lock(&logbuf_lock); +- retry = prb_read_valid(prb, console_seq, NULL); +- raw_spin_unlock(&logbuf_lock); +- printk_safe_exit_irqrestore(flags); +- +- if (retry && console_trylock()) +- goto again; + } + EXPORT_SYMBOL(console_unlock); + +@@ -2611,23 +2626,20 @@ + */ + void console_flush_on_panic(enum con_flush_mode mode) + { +- /* +- * If someone else is holding the console lock, trylock will fail +- * and may_schedule may be set. Ignore and proceed to unlock so +- * that messages are flushed out. As this can be called from any +- * context and we don't want to get preempted while flushing, +- * ensure may_schedule is cleared. +- */ +- console_trylock(); ++ struct console *c; ++ u64 seq; ++ ++ if (!console_trylock()) ++ return; ++ + console_may_schedule = 0; + + if (mode == CONSOLE_REPLAY_ALL) { +- unsigned long flags; +- +- logbuf_lock_irqsave(flags); +- console_seq = prb_first_valid_seq(prb); +- logbuf_unlock_irqrestore(flags); ++ seq = prb_first_valid_seq(prb); ++ for_each_console(c) ++ atomic64_set(&c->printk_seq, seq); + } ++ + console_unlock(); + } + +@@ -2762,7 +2774,6 @@ + */ + void register_console(struct console *newcon) + { +- unsigned long flags; + struct console *bcon = NULL; + int err; + +@@ -2786,6 +2797,8 @@ + } + } + ++ newcon->thread = NULL; ++ + if (console_drivers && console_drivers->flags & CON_BOOT) + bcon = console_drivers; + +@@ -2827,8 +2840,10 @@ + * the real console are the same physical device, it's annoying to + * see the beginning boot messages twice + */ +- if (bcon && ((newcon->flags & (CON_CONSDEV | CON_BOOT)) == CON_CONSDEV)) ++ if (bcon && ((newcon->flags & (CON_CONSDEV | CON_BOOT)) == CON_CONSDEV)) { + newcon->flags &= ~CON_PRINTBUFFER; ++ newcon->flags |= CON_HANDOVER; ++ } + + /* + * Put this console in the list - keep the +@@ -2850,26 +2865,12 @@ + if (newcon->flags & CON_EXTENDED) + nr_ext_console_drivers++; + +- if (newcon->flags & CON_PRINTBUFFER) { +- /* +- * console_unlock(); will print out the buffered messages +- * for us. +- */ +- logbuf_lock_irqsave(flags); +- /* +- * We're about to replay the log buffer. Only do this to the +- * just-registered console to avoid excessive message spam to +- * the already-registered consoles. +- * +- * Set exclusive_console with disabled interrupts to reduce +- * race window with eventual console_flush_on_panic() that +- * ignores console_lock. +- */ +- exclusive_console = newcon; +- exclusive_console_stop_seq = console_seq; +- console_seq = syslog_seq; +- logbuf_unlock_irqrestore(flags); +- } ++ if (newcon->flags & CON_PRINTBUFFER) ++ atomic64_set(&newcon->printk_seq, 0); ++ else ++ atomic64_set(&newcon->printk_seq, prb_next_seq(prb)); ++ ++ console_try_thread(newcon); + console_unlock(); + console_sysfs_notify(); + +@@ -2943,6 +2944,9 @@ + console_unlock(); + console_sysfs_notify(); + ++ if (console->thread && !IS_ERR(console->thread)) ++ kthread_stop(console->thread); ++ + if (console->exit) + res = console->exit(console); + +@@ -3025,6 +3029,15 @@ + unregister_console(con); + } + } ++ ++#ifdef CONFIG_PRINTK ++ console_lock(); ++ for_each_console(con) ++ start_printk_kthread(con); ++ kthreads_started = true; ++ console_unlock(); ++#endif ++ + ret = cpuhp_setup_state_nocalls(CPUHP_PRINTK_DEAD, "printk:dead", NULL, + console_cpu_notify); + WARN_ON(ret < 0); +@@ -3040,7 +3053,6 @@ + * Delayed printk version, for scheduler-internal messages: + */ + #define PRINTK_PENDING_WAKEUP 0x01 +-#define PRINTK_PENDING_OUTPUT 0x02 + + static DEFINE_PER_CPU(int, printk_pending); + +@@ -3048,14 +3060,8 @@ + { + int pending = __this_cpu_xchg(printk_pending, 0); + +- if (pending & PRINTK_PENDING_OUTPUT) { +- /* If trylock fails, someone else is doing the printing */ +- if (console_trylock()) +- console_unlock(); +- } +- + if (pending & PRINTK_PENDING_WAKEUP) +- wake_up_interruptible(&log_wait); ++ wake_up_interruptible_all(&log_wait); + } + + static DEFINE_PER_CPU(struct irq_work, wake_up_klogd_work) = { +@@ -3076,25 +3082,10 @@ + preempt_enable(); + } + +-void defer_console_output(void) ++__printf(1, 0) ++static int vprintk_deferred(const char *fmt, va_list args) + { +- if (!printk_percpu_data_ready()) +- return; +- +- preempt_disable(); +- __this_cpu_or(printk_pending, PRINTK_PENDING_OUTPUT); +- irq_work_queue(this_cpu_ptr(&wake_up_klogd_work)); +- preempt_enable(); +-} +- +-int vprintk_deferred(const char *fmt, va_list args) +-{ +- int r; +- +- r = vprintk_emit(0, LOGLEVEL_SCHED, NULL, fmt, args); +- defer_console_output(); +- +- return r; ++ return vprintk_emit(0, LOGLEVEL_DEFAULT, NULL, fmt, args); + } + + int printk_deferred(const char *fmt, ...) +@@ -3233,8 +3224,26 @@ + */ + void kmsg_dump(enum kmsg_dump_reason reason) + { ++ struct kmsg_dumper_iter iter; + struct kmsg_dumper *dumper; +- unsigned long flags; ++ ++ if (!oops_in_progress) { ++ /* ++ * If atomic consoles are available, activate kernel sync mode ++ * to make sure any final messages are visible. The trailing ++ * printk message is important to flush any pending messages. ++ */ ++ if (have_atomic_console()) { ++ sync_mode = true; ++ pr_info("enabled sync mode\n"); ++ } ++ ++ /* ++ * Give the printing threads time to flush, allowing up to ++ * 1s of no printing forward progress before giving up. ++ */ ++ pr_flush(1000, true); ++ } + + rcu_read_lock(); + list_for_each_entry_rcu(dumper, &dump_list, list) { +@@ -3252,25 +3261,18 @@ + continue; + + /* initialize iterator with data about the stored records */ +- dumper->active = true; +- +- logbuf_lock_irqsave(flags); +- dumper->cur_seq = clear_seq; +- dumper->next_seq = prb_next_seq(prb); +- logbuf_unlock_irqrestore(flags); ++ iter.active = true; ++ kmsg_dump_rewind(&iter); + + /* invoke dumper which will iterate over records */ +- dumper->dump(dumper, reason); +- +- /* reset iterator */ +- dumper->active = false; ++ dumper->dump(dumper, reason, &iter); + } + rcu_read_unlock(); + } + + /** +- * kmsg_dump_get_line_nolock - retrieve one kmsg log line (unlocked version) +- * @dumper: registered kmsg dumper ++ * kmsg_dump_get_line - retrieve one kmsg log line ++ * @iter: kmsg dumper iterator + * @syslog: include the "<4>" prefixes + * @line: buffer to copy the line to + * @size: maximum size of the buffer +@@ -3284,11 +3286,9 @@ + * + * A return value of FALSE indicates that there are no more records to + * read. +- * +- * The function is similar to kmsg_dump_get_line(), but grabs no locks. + */ +-bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog, +- char *line, size_t size, size_t *len) ++bool kmsg_dump_get_line(struct kmsg_dumper_iter *iter, bool syslog, ++ char *line, size_t size, size_t *len) + { + struct printk_info info; + unsigned int line_count; +@@ -3298,16 +3298,16 @@ + + prb_rec_init_rd(&r, &info, line, size); + +- if (!dumper->active) ++ if (!iter->active) + goto out; + + /* Read text or count text lines? */ + if (line) { +- if (!prb_read_valid(prb, dumper->cur_seq, &r)) ++ if (!prb_read_valid(prb, iter->cur_seq, &r)) + goto out; + l = record_print_text(&r, syslog, printk_time); + } else { +- if (!prb_read_valid_info(prb, dumper->cur_seq, ++ if (!prb_read_valid_info(prb, iter->cur_seq, + &info, &line_count)) { + goto out; + } +@@ -3316,48 +3316,18 @@ + + } + +- dumper->cur_seq = r.info->seq + 1; ++ iter->cur_seq = r.info->seq + 1; + ret = true; + out: + if (len) + *len = l; + return ret; + } +- +-/** +- * kmsg_dump_get_line - retrieve one kmsg log line +- * @dumper: registered kmsg dumper +- * @syslog: include the "<4>" prefixes +- * @line: buffer to copy the line to +- * @size: maximum size of the buffer +- * @len: length of line placed into buffer +- * +- * Start at the beginning of the kmsg buffer, with the oldest kmsg +- * record, and copy one record into the provided buffer. +- * +- * Consecutive calls will return the next available record moving +- * towards the end of the buffer with the youngest messages. +- * +- * A return value of FALSE indicates that there are no more records to +- * read. +- */ +-bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog, +- char *line, size_t size, size_t *len) +-{ +- unsigned long flags; +- bool ret; +- +- logbuf_lock_irqsave(flags); +- ret = kmsg_dump_get_line_nolock(dumper, syslog, line, size, len); +- logbuf_unlock_irqrestore(flags); +- +- return ret; +-} + EXPORT_SYMBOL_GPL(kmsg_dump_get_line); + + /** + * kmsg_dump_get_buffer - copy kmsg log lines +- * @dumper: registered kmsg dumper ++ * @iter: kmsg dumper iterator + * @syslog: include the "<4>" prefixes + * @buf: buffer to copy the line to + * @size: maximum size of the buffer +@@ -3374,116 +3344,258 @@ + * A return value of FALSE indicates that there are no more records to + * read. + */ +-bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog, +- char *buf, size_t size, size_t *len) ++bool kmsg_dump_get_buffer(struct kmsg_dumper_iter *iter, bool syslog, ++ char *buf, size_t size, size_t *len_out) + { + struct printk_info info; +- unsigned int line_count; + struct printk_record r; +- unsigned long flags; + u64 seq; + u64 next_seq; +- size_t l = 0; ++ size_t len = 0; + bool ret = false; + bool time = printk_time; + +- prb_rec_init_rd(&r, &info, buf, size); +- +- if (!dumper->active || !buf || !size) ++ if (!iter->active || !buf || !size) + goto out; + +- logbuf_lock_irqsave(flags); +- if (prb_read_valid_info(prb, dumper->cur_seq, &info, NULL)) { +- if (info.seq != dumper->cur_seq) { ++ if (prb_read_valid_info(prb, iter->cur_seq, &info, NULL)) { ++ if (info.seq != iter->cur_seq) { + /* messages are gone, move to first available one */ +- dumper->cur_seq = info.seq; ++ iter->cur_seq = info.seq; + } + } + + /* last entry */ +- if (dumper->cur_seq >= dumper->next_seq) { +- logbuf_unlock_irqrestore(flags); ++ if (iter->cur_seq >= iter->next_seq) + goto out; +- } +- +- /* calculate length of entire buffer */ +- seq = dumper->cur_seq; +- while (prb_read_valid_info(prb, seq, &info, &line_count)) { +- if (r.info->seq >= dumper->next_seq) +- break; +- l += get_record_print_text_size(&info, line_count, syslog, time); +- seq = r.info->seq + 1; +- } + +- /* move first record forward until length fits into the buffer */ +- seq = dumper->cur_seq; +- while (l >= size && prb_read_valid_info(prb, seq, +- &info, &line_count)) { +- if (r.info->seq >= dumper->next_seq) +- break; +- l -= get_record_print_text_size(&info, line_count, syslog, time); +- seq = r.info->seq + 1; +- } ++ /* ++ * Find first record that fits, including all following records, ++ * into the user-provided buffer for this dump. Pass in size-1 ++ * because this function (by way of record_print_text()) will ++ * not write more than size-1 bytes of text into @buf. ++ */ ++ seq = find_first_fitting_seq(iter->cur_seq, iter->next_seq, ++ size - 1, syslog, time); + +- /* last message in next interation */ ++ /* ++ * Next kmsg_dump_get_buffer() invocation will dump block of ++ * older records stored right before this one. ++ */ + next_seq = seq; + +- /* actually read text into the buffer now */ +- l = 0; +- while (prb_read_valid(prb, seq, &r)) { +- if (r.info->seq >= dumper->next_seq) +- break; ++ prb_rec_init_rd(&r, &info, buf, size); + +- l += record_print_text(&r, syslog, time); ++ len = 0; ++ prb_for_each_record(seq, prb, seq, &r) { ++ if (r.info->seq >= iter->next_seq) ++ break; + +- /* adjust record to store to remaining buffer space */ +- prb_rec_init_rd(&r, &info, buf + l, size - l); ++ len += record_print_text(&r, syslog, time); + +- seq = r.info->seq + 1; ++ /* Adjust record to store to remaining buffer space. */ ++ prb_rec_init_rd(&r, &info, buf + len, size - len); + } + +- dumper->next_seq = next_seq; ++ iter->next_seq = next_seq; + ret = true; +- logbuf_unlock_irqrestore(flags); + out: +- if (len) +- *len = l; ++ if (len_out) ++ *len_out = len; + return ret; + } + EXPORT_SYMBOL_GPL(kmsg_dump_get_buffer); + + /** +- * kmsg_dump_rewind_nolock - reset the iterator (unlocked version) +- * @dumper: registered kmsg dumper ++ * kmsg_dump_rewind - reset the iterator ++ * @iter: kmsg dumper iterator + * + * Reset the dumper's iterator so that kmsg_dump_get_line() and + * kmsg_dump_get_buffer() can be called again and used multiple + * times within the same dumper.dump() callback. ++ */ ++void kmsg_dump_rewind(struct kmsg_dumper_iter *iter) ++{ ++ iter->cur_seq = latched_seq_read_nolock(&clear_seq); ++ iter->next_seq = prb_next_seq(prb); ++} ++EXPORT_SYMBOL_GPL(kmsg_dump_rewind); ++ ++#endif ++ ++struct prb_cpulock { ++ atomic_t owner; ++ unsigned long __percpu *irqflags; ++}; ++ ++#define DECLARE_STATIC_PRINTKRB_CPULOCK(name) \ ++static DEFINE_PER_CPU(unsigned long, _##name##_percpu_irqflags); \ ++static struct prb_cpulock name = { \ ++ .owner = ATOMIC_INIT(-1), \ ++ .irqflags = &_##name##_percpu_irqflags, \ ++} ++ ++static bool __prb_trylock(struct prb_cpulock *cpu_lock, ++ unsigned int *cpu_store) ++{ ++ unsigned long *flags; ++ unsigned int cpu; ++ ++ cpu = get_cpu(); ++ ++ *cpu_store = atomic_read(&cpu_lock->owner); ++ /* memory barrier to ensure the current lock owner is visible */ ++ smp_rmb(); ++ if (*cpu_store == -1) { ++ flags = per_cpu_ptr(cpu_lock->irqflags, cpu); ++ local_irq_save(*flags); ++ if (atomic_try_cmpxchg_acquire(&cpu_lock->owner, ++ cpu_store, cpu)) { ++ return true; ++ } ++ local_irq_restore(*flags); ++ } else if (*cpu_store == cpu) { ++ return true; ++ } ++ ++ put_cpu(); ++ return false; ++} ++ ++/* ++ * prb_lock: Perform a processor-reentrant spin lock. ++ * @cpu_lock: A pointer to the lock object. ++ * @cpu_store: A "flags" pointer to store lock status information. ++ * ++ * If no processor has the lock, the calling processor takes the lock and ++ * becomes the owner. If the calling processor is already the owner of the ++ * lock, this function succeeds immediately. If lock is locked by another ++ * processor, this function spins until the calling processor becomes the ++ * owner. + * +- * The function is similar to kmsg_dump_rewind(), but grabs no locks. ++ * It is safe to call this function from any context and state. + */ +-void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper) ++static void prb_lock(struct prb_cpulock *cpu_lock, unsigned int *cpu_store) + { +- dumper->cur_seq = clear_seq; +- dumper->next_seq = prb_next_seq(prb); ++ for (;;) { ++ if (__prb_trylock(cpu_lock, cpu_store)) ++ break; ++ cpu_relax(); ++ } + } + +-/** +- * kmsg_dump_rewind - reset the iterator +- * @dumper: registered kmsg dumper ++/* ++ * prb_unlock: Perform a processor-reentrant spin unlock. ++ * @cpu_lock: A pointer to the lock object. ++ * @cpu_store: A "flags" object storing lock status information. + * +- * Reset the dumper's iterator so that kmsg_dump_get_line() and +- * kmsg_dump_get_buffer() can be called again and used multiple +- * times within the same dumper.dump() callback. ++ * Release the lock. The calling processor must be the owner of the lock. ++ * ++ * It is safe to call this function from any context and state. + */ +-void kmsg_dump_rewind(struct kmsg_dumper *dumper) ++static void prb_unlock(struct prb_cpulock *cpu_lock, unsigned int cpu_store) + { +- unsigned long flags; ++ unsigned long *flags; ++ unsigned int cpu; + +- logbuf_lock_irqsave(flags); +- kmsg_dump_rewind_nolock(dumper); +- logbuf_unlock_irqrestore(flags); ++ cpu = atomic_read(&cpu_lock->owner); ++ atomic_set_release(&cpu_lock->owner, cpu_store); ++ ++ if (cpu_store == -1) { ++ flags = per_cpu_ptr(cpu_lock->irqflags, cpu); ++ local_irq_restore(*flags); ++ } ++ ++ put_cpu(); + } +-EXPORT_SYMBOL_GPL(kmsg_dump_rewind); + +-#endif ++DECLARE_STATIC_PRINTKRB_CPULOCK(printk_cpulock); ++ ++void console_atomic_lock(unsigned int *flags) ++{ ++ prb_lock(&printk_cpulock, flags); ++} ++EXPORT_SYMBOL(console_atomic_lock); ++ ++void console_atomic_unlock(unsigned int flags) ++{ ++ prb_unlock(&printk_cpulock, flags); ++} ++EXPORT_SYMBOL(console_atomic_unlock); ++ ++static void pr_msleep(bool may_sleep, int ms) ++{ ++ if (may_sleep) { ++ msleep(ms); ++ } else { ++ while (ms--) ++ udelay(1000); ++ } ++} ++ ++/** ++ * pr_flush() - Wait for printing threads to catch up. ++ * ++ * @timeout_ms: The maximum time (in ms) to wait. ++ * @reset_on_progress: Reset the timeout if forward progress is seen. ++ * ++ * A value of 0 for @timeout_ms means no waiting will occur. A value of -1 ++ * represents infinite waiting. ++ * ++ * If @reset_on_progress is true, the timeout will be reset whenever any ++ * printer has been seen to make some forward progress. ++ * ++ * Context: Any context. ++ * Return: true if all enabled printers are caught up. ++ */ ++bool pr_flush(int timeout_ms, bool reset_on_progress) ++{ ++ int remaining = timeout_ms; ++ struct console *con; ++ u64 last_diff = 0; ++ bool may_sleep; ++ u64 printk_seq; ++ u64 diff; ++ u64 seq; ++ ++ may_sleep = (preemptible() && ++ !in_softirq() && ++ system_state >= SYSTEM_RUNNING); ++ ++ seq = prb_next_seq(prb); ++ ++ for (;;) { ++ diff = 0; ++ ++ for_each_console(con) { ++ if (!(con->flags & CON_ENABLED)) ++ continue; ++ if (!con->write && !con->write_atomic) ++ continue; ++ printk_seq = atomic64_read(&con->printk_seq); ++ if (printk_seq < seq) ++ diff += seq - printk_seq; ++ } ++ ++ if (diff != last_diff && reset_on_progress) ++ remaining = timeout_ms; ++ ++ if (!diff || remaining == 0) ++ break; ++ ++ if (remaining < 0) { ++ pr_msleep(may_sleep, 100); ++ } else if (remaining < 100) { ++ pr_msleep(may_sleep, remaining); ++ remaining = 0; ++ } else { ++ pr_msleep(may_sleep, 100); ++ remaining -= 100; ++ } ++ ++ last_diff = diff; ++ } ++ ++ return (diff == 0); ++} ++EXPORT_SYMBOL(pr_flush); +diff -Naur --no-dereference a/kernel/printk/printk_safe.c b/kernel/printk/printk_safe.c +--- a/kernel/printk/printk_safe.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/printk/printk_safe.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1,422 +0,0 @@ +-// SPDX-License-Identifier: GPL-2.0-or-later +-/* +- * printk_safe.c - Safe printk for printk-deadlock-prone contexts +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "internal.h" +- +-/* +- * printk() could not take logbuf_lock in NMI context. Instead, +- * it uses an alternative implementation that temporary stores +- * the strings into a per-CPU buffer. The content of the buffer +- * is later flushed into the main ring buffer via IRQ work. +- * +- * The alternative implementation is chosen transparently +- * by examining current printk() context mask stored in @printk_context +- * per-CPU variable. +- * +- * The implementation allows to flush the strings also from another CPU. +- * There are situations when we want to make sure that all buffers +- * were handled or when IRQs are blocked. +- */ +- +-#define SAFE_LOG_BUF_LEN ((1 << CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT) - \ +- sizeof(atomic_t) - \ +- sizeof(atomic_t) - \ +- sizeof(struct irq_work)) +- +-struct printk_safe_seq_buf { +- atomic_t len; /* length of written data */ +- atomic_t message_lost; +- struct irq_work work; /* IRQ work that flushes the buffer */ +- unsigned char buffer[SAFE_LOG_BUF_LEN]; +-}; +- +-static DEFINE_PER_CPU(struct printk_safe_seq_buf, safe_print_seq); +-static DEFINE_PER_CPU(int, printk_context); +- +-static DEFINE_RAW_SPINLOCK(safe_read_lock); +- +-#ifdef CONFIG_PRINTK_NMI +-static DEFINE_PER_CPU(struct printk_safe_seq_buf, nmi_print_seq); +-#endif +- +-/* Get flushed in a more safe context. */ +-static void queue_flush_work(struct printk_safe_seq_buf *s) +-{ +- if (printk_percpu_data_ready()) +- irq_work_queue(&s->work); +-} +- +-/* +- * Add a message to per-CPU context-dependent buffer. NMI and printk-safe +- * have dedicated buffers, because otherwise printk-safe preempted by +- * NMI-printk would have overwritten the NMI messages. +- * +- * The messages are flushed from irq work (or from panic()), possibly, +- * from other CPU, concurrently with printk_safe_log_store(). Should this +- * happen, printk_safe_log_store() will notice the buffer->len mismatch +- * and repeat the write. +- */ +-static __printf(2, 0) int printk_safe_log_store(struct printk_safe_seq_buf *s, +- const char *fmt, va_list args) +-{ +- int add; +- size_t len; +- va_list ap; +- +-again: +- len = atomic_read(&s->len); +- +- /* The trailing '\0' is not counted into len. */ +- if (len >= sizeof(s->buffer) - 1) { +- atomic_inc(&s->message_lost); +- queue_flush_work(s); +- return 0; +- } +- +- /* +- * Make sure that all old data have been read before the buffer +- * was reset. This is not needed when we just append data. +- */ +- if (!len) +- smp_rmb(); +- +- va_copy(ap, args); +- add = vscnprintf(s->buffer + len, sizeof(s->buffer) - len, fmt, ap); +- va_end(ap); +- if (!add) +- return 0; +- +- /* +- * Do it once again if the buffer has been flushed in the meantime. +- * Note that atomic_cmpxchg() is an implicit memory barrier that +- * makes sure that the data were written before updating s->len. +- */ +- if (atomic_cmpxchg(&s->len, len, len + add) != len) +- goto again; +- +- queue_flush_work(s); +- return add; +-} +- +-static inline void printk_safe_flush_line(const char *text, int len) +-{ +- /* +- * Avoid any console drivers calls from here, because we may be +- * in NMI or printk_safe context (when in panic). The messages +- * must go only into the ring buffer at this stage. Consoles will +- * get explicitly called later when a crashdump is not generated. +- */ +- printk_deferred("%.*s", len, text); +-} +- +-/* printk part of the temporary buffer line by line */ +-static int printk_safe_flush_buffer(const char *start, size_t len) +-{ +- const char *c, *end; +- bool header; +- +- c = start; +- end = start + len; +- header = true; +- +- /* Print line by line. */ +- while (c < end) { +- if (*c == '\n') { +- printk_safe_flush_line(start, c - start + 1); +- start = ++c; +- header = true; +- continue; +- } +- +- /* Handle continuous lines or missing new line. */ +- if ((c + 1 < end) && printk_get_level(c)) { +- if (header) { +- c = printk_skip_level(c); +- continue; +- } +- +- printk_safe_flush_line(start, c - start); +- start = c++; +- header = true; +- continue; +- } +- +- header = false; +- c++; +- } +- +- /* Check if there was a partial line. Ignore pure header. */ +- if (start < end && !header) { +- static const char newline[] = KERN_CONT "\n"; +- +- printk_safe_flush_line(start, end - start); +- printk_safe_flush_line(newline, strlen(newline)); +- } +- +- return len; +-} +- +-static void report_message_lost(struct printk_safe_seq_buf *s) +-{ +- int lost = atomic_xchg(&s->message_lost, 0); +- +- if (lost) +- printk_deferred("Lost %d message(s)!\n", lost); +-} +- +-/* +- * Flush data from the associated per-CPU buffer. The function +- * can be called either via IRQ work or independently. +- */ +-static void __printk_safe_flush(struct irq_work *work) +-{ +- struct printk_safe_seq_buf *s = +- container_of(work, struct printk_safe_seq_buf, work); +- unsigned long flags; +- size_t len; +- int i; +- +- /* +- * The lock has two functions. First, one reader has to flush all +- * available message to make the lockless synchronization with +- * writers easier. Second, we do not want to mix messages from +- * different CPUs. This is especially important when printing +- * a backtrace. +- */ +- raw_spin_lock_irqsave(&safe_read_lock, flags); +- +- i = 0; +-more: +- len = atomic_read(&s->len); +- +- /* +- * This is just a paranoid check that nobody has manipulated +- * the buffer an unexpected way. If we printed something then +- * @len must only increase. Also it should never overflow the +- * buffer size. +- */ +- if ((i && i >= len) || len > sizeof(s->buffer)) { +- const char *msg = "printk_safe_flush: internal error\n"; +- +- printk_safe_flush_line(msg, strlen(msg)); +- len = 0; +- } +- +- if (!len) +- goto out; /* Someone else has already flushed the buffer. */ +- +- /* Make sure that data has been written up to the @len */ +- smp_rmb(); +- i += printk_safe_flush_buffer(s->buffer + i, len - i); +- +- /* +- * Check that nothing has got added in the meantime and truncate +- * the buffer. Note that atomic_cmpxchg() is an implicit memory +- * barrier that makes sure that the data were copied before +- * updating s->len. +- */ +- if (atomic_cmpxchg(&s->len, len, 0) != len) +- goto more; +- +-out: +- report_message_lost(s); +- raw_spin_unlock_irqrestore(&safe_read_lock, flags); +-} +- +-/** +- * printk_safe_flush - flush all per-cpu nmi buffers. +- * +- * The buffers are flushed automatically via IRQ work. This function +- * is useful only when someone wants to be sure that all buffers have +- * been flushed at some point. +- */ +-void printk_safe_flush(void) +-{ +- int cpu; +- +- for_each_possible_cpu(cpu) { +-#ifdef CONFIG_PRINTK_NMI +- __printk_safe_flush(&per_cpu(nmi_print_seq, cpu).work); +-#endif +- __printk_safe_flush(&per_cpu(safe_print_seq, cpu).work); +- } +-} +- +-/** +- * printk_safe_flush_on_panic - flush all per-cpu nmi buffers when the system +- * goes down. +- * +- * Similar to printk_safe_flush() but it can be called even in NMI context when +- * the system goes down. It does the best effort to get NMI messages into +- * the main ring buffer. +- * +- * Note that it could try harder when there is only one CPU online. +- */ +-void printk_safe_flush_on_panic(void) +-{ +- /* +- * Make sure that we could access the main ring buffer. +- * Do not risk a double release when more CPUs are up. +- */ +- if (raw_spin_is_locked(&logbuf_lock)) { +- if (num_online_cpus() > 1) +- return; +- +- debug_locks_off(); +- raw_spin_lock_init(&logbuf_lock); +- } +- +- if (raw_spin_is_locked(&safe_read_lock)) { +- if (num_online_cpus() > 1) +- return; +- +- debug_locks_off(); +- raw_spin_lock_init(&safe_read_lock); +- } +- +- printk_safe_flush(); +-} +- +-#ifdef CONFIG_PRINTK_NMI +-/* +- * Safe printk() for NMI context. It uses a per-CPU buffer to +- * store the message. NMIs are not nested, so there is always only +- * one writer running. But the buffer might get flushed from another +- * CPU, so we need to be careful. +- */ +-static __printf(1, 0) int vprintk_nmi(const char *fmt, va_list args) +-{ +- struct printk_safe_seq_buf *s = this_cpu_ptr(&nmi_print_seq); +- +- return printk_safe_log_store(s, fmt, args); +-} +- +-void noinstr printk_nmi_enter(void) +-{ +- this_cpu_add(printk_context, PRINTK_NMI_CONTEXT_OFFSET); +-} +- +-void noinstr printk_nmi_exit(void) +-{ +- this_cpu_sub(printk_context, PRINTK_NMI_CONTEXT_OFFSET); +-} +- +-/* +- * Marks a code that might produce many messages in NMI context +- * and the risk of losing them is more critical than eventual +- * reordering. +- * +- * It has effect only when called in NMI context. Then printk() +- * will try to store the messages into the main logbuf directly +- * and use the per-CPU buffers only as a fallback when the lock +- * is not available. +- */ +-void printk_nmi_direct_enter(void) +-{ +- if (this_cpu_read(printk_context) & PRINTK_NMI_CONTEXT_MASK) +- this_cpu_or(printk_context, PRINTK_NMI_DIRECT_CONTEXT_MASK); +-} +- +-void printk_nmi_direct_exit(void) +-{ +- this_cpu_and(printk_context, ~PRINTK_NMI_DIRECT_CONTEXT_MASK); +-} +- +-#else +- +-static __printf(1, 0) int vprintk_nmi(const char *fmt, va_list args) +-{ +- return 0; +-} +- +-#endif /* CONFIG_PRINTK_NMI */ +- +-/* +- * Lock-less printk(), to avoid deadlocks should the printk() recurse +- * into itself. It uses a per-CPU buffer to store the message, just like +- * NMI. +- */ +-static __printf(1, 0) int vprintk_safe(const char *fmt, va_list args) +-{ +- struct printk_safe_seq_buf *s = this_cpu_ptr(&safe_print_seq); +- +- return printk_safe_log_store(s, fmt, args); +-} +- +-/* Can be preempted by NMI. */ +-void __printk_safe_enter(void) +-{ +- this_cpu_inc(printk_context); +-} +- +-/* Can be preempted by NMI. */ +-void __printk_safe_exit(void) +-{ +- this_cpu_dec(printk_context); +-} +- +-__printf(1, 0) int vprintk_func(const char *fmt, va_list args) +-{ +-#ifdef CONFIG_KGDB_KDB +- /* Allow to pass printk() to kdb but avoid a recursion. */ +- if (unlikely(kdb_trap_printk && kdb_printf_cpu < 0)) +- return vkdb_printf(KDB_MSGSRC_PRINTK, fmt, args); +-#endif +- +- /* +- * Try to use the main logbuf even in NMI. But avoid calling console +- * drivers that might have their own locks. +- */ +- if ((this_cpu_read(printk_context) & PRINTK_NMI_DIRECT_CONTEXT_MASK) && +- raw_spin_trylock(&logbuf_lock)) { +- int len; +- +- len = vprintk_store(0, LOGLEVEL_DEFAULT, NULL, fmt, args); +- raw_spin_unlock(&logbuf_lock); +- defer_console_output(); +- return len; +- } +- +- /* Use extra buffer in NMI when logbuf_lock is taken or in safe mode. */ +- if (this_cpu_read(printk_context) & PRINTK_NMI_CONTEXT_MASK) +- return vprintk_nmi(fmt, args); +- +- /* Use extra buffer to prevent a recursion deadlock in safe mode. */ +- if (this_cpu_read(printk_context) & PRINTK_SAFE_CONTEXT_MASK) +- return vprintk_safe(fmt, args); +- +- /* No obstacles. */ +- return vprintk_default(fmt, args); +-} +- +-void __init printk_safe_init(void) +-{ +- int cpu; +- +- for_each_possible_cpu(cpu) { +- struct printk_safe_seq_buf *s; +- +- s = &per_cpu(safe_print_seq, cpu); +- init_irq_work(&s->work, __printk_safe_flush); +- +-#ifdef CONFIG_PRINTK_NMI +- s = &per_cpu(nmi_print_seq, cpu); +- init_irq_work(&s->work, __printk_safe_flush); +-#endif +- } +- +- /* Flush pending messages that did not have scheduled IRQ works. */ +- printk_safe_flush(); +-} +diff -Naur --no-dereference a/kernel/ptrace.c b/kernel/ptrace.c +--- a/kernel/ptrace.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/ptrace.c 2024-11-24 20:19:38.246228958 -0500 +@@ -196,7 +196,14 @@ + spin_lock_irq(&task->sighand->siglock); + if (task_is_traced(task) && !looks_like_a_spurious_pid(task) && + !__fatal_signal_pending(task)) { +- task->state = __TASK_TRACED; ++ unsigned long flags; ++ ++ raw_spin_lock_irqsave(&task->pi_lock, flags); ++ if (task->state & __TASK_TRACED) ++ task->state = __TASK_TRACED; ++ else ++ task->saved_state = __TASK_TRACED; ++ raw_spin_unlock_irqrestore(&task->pi_lock, flags); + ret = true; + } + spin_unlock_irq(&task->sighand->siglock); +@@ -206,8 +213,8 @@ + + static void ptrace_unfreeze_traced(struct task_struct *task) + { +- if (task->state != __TASK_TRACED) +- return; ++ unsigned long flags; ++ bool frozen = true; + + WARN_ON(!task->ptrace || task->parent != current); + +@@ -216,12 +223,19 @@ + * Recheck state under the lock to close this race. + */ + spin_lock_irq(&task->sighand->siglock); +- if (task->state == __TASK_TRACED) { +- if (__fatal_signal_pending(task)) +- wake_up_state(task, __TASK_TRACED); +- else +- task->state = TASK_TRACED; +- } ++ ++ raw_spin_lock_irqsave(&task->pi_lock, flags); ++ if (task->state == __TASK_TRACED) ++ task->state = TASK_TRACED; ++ else if (task->saved_state == __TASK_TRACED) ++ task->saved_state = TASK_TRACED; ++ else ++ frozen = false; ++ raw_spin_unlock_irqrestore(&task->pi_lock, flags); ++ ++ if (frozen && __fatal_signal_pending(task)) ++ wake_up_state(task, __TASK_TRACED); ++ + spin_unlock_irq(&task->sighand->siglock); + } + +diff -Naur --no-dereference a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig +--- a/kernel/rcu/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/rcu/Kconfig 2024-11-24 20:19:38.246228958 -0500 +@@ -189,8 +189,8 @@ + + config RCU_BOOST + bool "Enable RCU priority boosting" +- depends on RT_MUTEXES && PREEMPT_RCU && RCU_EXPERT +- default n ++ depends on (RT_MUTEXES && PREEMPT_RCU && RCU_EXPERT) || PREEMPT_RT ++ default y if PREEMPT_RT + help + This option boosts the priority of preempted RCU readers that + block the current preemptible RCU grace period for too long. +diff -Naur --no-dereference a/kernel/rcu/tree.c b/kernel/rcu/tree.c +--- a/kernel/rcu/tree.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/rcu/tree.c 2024-11-24 20:19:38.246228958 -0500 +@@ -100,8 +100,10 @@ + static bool dump_tree; + module_param(dump_tree, bool, 0444); + /* By default, use RCU_SOFTIRQ instead of rcuc kthreads. */ +-static bool use_softirq = true; ++static bool use_softirq = !IS_ENABLED(CONFIG_PREEMPT_RT); ++#ifndef CONFIG_PREEMPT_RT + module_param(use_softirq, bool, 0444); ++#endif + /* Control rcu_node-tree auto-balancing at boot time. */ + static bool rcu_fanout_exact; + module_param(rcu_fanout_exact, bool, 0444); +diff -Naur --no-dereference a/kernel/rcu/update.c b/kernel/rcu/update.c +--- a/kernel/rcu/update.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/rcu/update.c 2024-11-24 20:19:38.246228958 -0500 +@@ -56,8 +56,10 @@ + #ifndef CONFIG_TINY_RCU + module_param(rcu_expedited, int, 0); + module_param(rcu_normal, int, 0); +-static int rcu_normal_after_boot; ++static int rcu_normal_after_boot = IS_ENABLED(CONFIG_PREEMPT_RT); ++#ifndef CONFIG_PREEMPT_RT + module_param(rcu_normal_after_boot, int, 0); ++#endif + #endif /* #ifndef CONFIG_TINY_RCU */ + + #ifdef CONFIG_DEBUG_LOCK_ALLOC +diff -Naur --no-dereference a/kernel/sched/core.c b/kernel/sched/core.c +--- a/kernel/sched/core.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/sched/core.c 2024-11-24 20:19:38.246228958 -0500 +@@ -65,7 +65,11 @@ + * Number of tasks to iterate in a single balance run. + * Limited because this is done with IRQs disabled. + */ ++#ifdef CONFIG_PREEMPT_RT ++const_debug unsigned int sysctl_sched_nr_migrate = 8; ++#else + const_debug unsigned int sysctl_sched_nr_migrate = 32; ++#endif + + /* + * period over which we measure -rt task CPU usage in us. +@@ -511,9 +515,15 @@ + #endif + #endif + +-static bool __wake_q_add(struct wake_q_head *head, struct task_struct *task) ++static bool __wake_q_add(struct wake_q_head *head, struct task_struct *task, ++ bool sleeper) + { +- struct wake_q_node *node = &task->wake_q; ++ struct wake_q_node *node; ++ ++ if (sleeper) ++ node = &task->wake_q_sleeper; ++ else ++ node = &task->wake_q; + + /* + * Atomically grab the task, if ->wake_q is !nil already it means +@@ -549,7 +559,13 @@ + */ + void wake_q_add(struct wake_q_head *head, struct task_struct *task) + { +- if (__wake_q_add(head, task)) ++ if (__wake_q_add(head, task, false)) ++ get_task_struct(task); ++} ++ ++void wake_q_add_sleeper(struct wake_q_head *head, struct task_struct *task) ++{ ++ if (__wake_q_add(head, task, true)) + get_task_struct(task); + } + +@@ -572,28 +588,39 @@ + */ + void wake_q_add_safe(struct wake_q_head *head, struct task_struct *task) + { +- if (!__wake_q_add(head, task)) ++ if (!__wake_q_add(head, task, false)) + put_task_struct(task); + } + +-void wake_up_q(struct wake_q_head *head) ++void __wake_up_q(struct wake_q_head *head, bool sleeper) + { + struct wake_q_node *node = head->first; + + while (node != WAKE_Q_TAIL) { + struct task_struct *task; + +- task = container_of(node, struct task_struct, wake_q); ++ if (sleeper) ++ task = container_of(node, struct task_struct, wake_q_sleeper); ++ else ++ task = container_of(node, struct task_struct, wake_q); ++ + BUG_ON(!task); + /* Task can safely be re-inserted now: */ + node = node->next; +- task->wake_q.next = NULL; + ++ if (sleeper) ++ task->wake_q_sleeper.next = NULL; ++ else ++ task->wake_q.next = NULL; + /* + * wake_up_process() executes a full barrier, which pairs with + * the queueing in wake_q_add() so as not to miss wakeups. + */ +- wake_up_process(task); ++ if (sleeper) ++ wake_up_lock_sleeper(task); ++ else ++ wake_up_process(task); ++ + put_task_struct(task); + } + } +@@ -629,6 +656,48 @@ + trace_sched_wake_idle_without_ipi(cpu); + } + ++#ifdef CONFIG_PREEMPT_LAZY ++ ++static int tsk_is_polling(struct task_struct *p) ++{ ++#ifdef TIF_POLLING_NRFLAG ++ return test_tsk_thread_flag(p, TIF_POLLING_NRFLAG); ++#else ++ return 0; ++#endif ++} ++ ++void resched_curr_lazy(struct rq *rq) ++{ ++ struct task_struct *curr = rq->curr; ++ int cpu; ++ ++ if (!sched_feat(PREEMPT_LAZY)) { ++ resched_curr(rq); ++ return; ++ } ++ ++ lockdep_assert_held(&rq->lock); ++ ++ if (test_tsk_need_resched(curr)) ++ return; ++ ++ if (test_tsk_need_resched_lazy(curr)) ++ return; ++ ++ set_tsk_need_resched_lazy(curr); ++ ++ cpu = cpu_of(rq); ++ if (cpu == smp_processor_id()) ++ return; ++ ++ /* NEED_RESCHED_LAZY must be visible before we test polling */ ++ smp_mb(); ++ if (!tsk_is_polling(curr)) ++ smp_send_reschedule(cpu); ++} ++#endif ++ + void resched_cpu(int cpu) + { + struct rq *rq = cpu_rq(cpu); +@@ -1707,6 +1776,82 @@ + + #ifdef CONFIG_SMP + ++static void ++__do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask, u32 flags); ++ ++static int __set_cpus_allowed_ptr(struct task_struct *p, ++ const struct cpumask *new_mask, ++ u32 flags); ++ ++static void migrate_disable_switch(struct rq *rq, struct task_struct *p) ++{ ++ if (likely(!p->migration_disabled)) ++ return; ++ ++ if (p->cpus_ptr != &p->cpus_mask) ++ return; ++ ++ /* ++ * Violates locking rules! see comment in __do_set_cpus_allowed(). ++ */ ++ __do_set_cpus_allowed(p, cpumask_of(rq->cpu), SCA_MIGRATE_DISABLE); ++} ++ ++void migrate_disable(void) ++{ ++ struct task_struct *p = current; ++ ++ if (p->migration_disabled) { ++ p->migration_disabled++; ++ return; ++ } ++ ++ trace_sched_migrate_disable_tp(p); ++ ++ preempt_disable(); ++ this_rq()->nr_pinned++; ++ p->migration_disabled = 1; ++ preempt_lazy_disable(); ++ preempt_enable(); ++} ++EXPORT_SYMBOL_GPL(migrate_disable); ++ ++void migrate_enable(void) ++{ ++ struct task_struct *p = current; ++ ++ if (p->migration_disabled > 1) { ++ p->migration_disabled--; ++ return; ++ } ++ ++ /* ++ * Ensure stop_task runs either before or after this, and that ++ * __set_cpus_allowed_ptr(SCA_MIGRATE_ENABLE) doesn't schedule(). ++ */ ++ preempt_disable(); ++ if (p->cpus_ptr != &p->cpus_mask) ++ __set_cpus_allowed_ptr(p, &p->cpus_mask, SCA_MIGRATE_ENABLE); ++ /* ++ * Mustn't clear migration_disabled() until cpus_ptr points back at the ++ * regular cpus_mask, otherwise things that race (eg. ++ * select_fallback_rq) get confused. ++ */ ++ barrier(); ++ p->migration_disabled = 0; ++ this_rq()->nr_pinned--; ++ preempt_lazy_enable(); ++ preempt_enable(); ++ ++ trace_sched_migrate_enable_tp(p); ++} ++EXPORT_SYMBOL_GPL(migrate_enable); ++ ++static inline bool rq_has_pinned_tasks(struct rq *rq) ++{ ++ return rq->nr_pinned; ++} ++ + /* + * Per-CPU kthreads are allowed to run on !active && online CPUs, see + * __set_cpus_allowed_ptr() and select_fallback_rq(). +@@ -1716,7 +1861,7 @@ + if (!cpumask_test_cpu(cpu, p->cpus_ptr)) + return false; + +- if (is_per_cpu_kthread(p)) ++ if (is_per_cpu_kthread(p) || is_migration_disabled(p)) + return cpu_online(cpu); + + return cpu_active(cpu); +@@ -1761,8 +1906,21 @@ + } + + struct migration_arg { +- struct task_struct *task; +- int dest_cpu; ++ struct task_struct *task; ++ int dest_cpu; ++ struct set_affinity_pending *pending; ++}; ++ ++/* ++ * @refs: number of wait_for_completion() ++ * @stop_pending: is @stop_work in use ++ */ ++struct set_affinity_pending { ++ refcount_t refs; ++ unsigned int stop_pending; ++ struct completion done; ++ struct cpu_stop_work stop_work; ++ struct migration_arg arg; + }; + + /* +@@ -1795,15 +1953,17 @@ + static int migration_cpu_stop(void *data) + { + struct migration_arg *arg = data; ++ struct set_affinity_pending *pending = arg->pending; + struct task_struct *p = arg->task; + struct rq *rq = this_rq(); ++ bool complete = false; + struct rq_flags rf; + + /* + * The original target CPU might have gone down and we might + * be on another CPU but it doesn't matter. + */ +- local_irq_disable(); ++ local_irq_save(rf.flags); + /* + * We need to explicitly wake pending tasks before running + * __migrate_task() such that we will not miss enforcing cpus_ptr +@@ -1813,21 +1973,121 @@ + + raw_spin_lock(&p->pi_lock); + rq_lock(rq, &rf); ++ + /* + * If task_rq(p) != rq, it cannot be migrated here, because we're + * holding rq->lock, if p->on_rq == 0 it cannot get enqueued because + * we're holding p->pi_lock. + */ + if (task_rq(p) == rq) { ++ if (is_migration_disabled(p)) ++ goto out; ++ ++ if (pending) { ++ if (p->migration_pending == pending) ++ p->migration_pending = NULL; ++ complete = true; ++ ++ if (cpumask_test_cpu(task_cpu(p), &p->cpus_mask)) ++ goto out; ++ } ++ + if (task_on_rq_queued(p)) + rq = __migrate_task(rq, &rf, p, arg->dest_cpu); + else + p->wake_cpu = arg->dest_cpu; ++ ++ /* ++ * XXX __migrate_task() can fail, at which point we might end ++ * up running on a dodgy CPU, AFAICT this can only happen ++ * during CPU hotplug, at which point we'll get pushed out ++ * anyway, so it's probably not a big deal. ++ */ ++ ++ } else if (pending) { ++ /* ++ * This happens when we get migrated between migrate_enable()'s ++ * preempt_enable() and scheduling the stopper task. At that ++ * point we're a regular task again and not current anymore. ++ * ++ * A !PREEMPT kernel has a giant hole here, which makes it far ++ * more likely. ++ */ ++ ++ /* ++ * The task moved before the stopper got to run. We're holding ++ * ->pi_lock, so the allowed mask is stable - if it got ++ * somewhere allowed, we're done. ++ */ ++ if (cpumask_test_cpu(task_cpu(p), p->cpus_ptr)) { ++ if (p->migration_pending == pending) ++ p->migration_pending = NULL; ++ complete = true; ++ goto out; ++ } ++ ++ /* ++ * When migrate_enable() hits a rq mis-match we can't reliably ++ * determine is_migration_disabled() and so have to chase after ++ * it. ++ */ ++ WARN_ON_ONCE(!pending->stop_pending); ++ task_rq_unlock(rq, p, &rf); ++ stop_one_cpu_nowait(task_cpu(p), migration_cpu_stop, ++ &pending->arg, &pending->stop_work); ++ return 0; + } +- rq_unlock(rq, &rf); +- raw_spin_unlock(&p->pi_lock); ++out: ++ if (pending) ++ pending->stop_pending = false; ++ task_rq_unlock(rq, p, &rf); ++ ++ if (complete) ++ complete_all(&pending->done); ++ ++ return 0; ++} ++ ++int push_cpu_stop(void *arg) ++{ ++ struct rq *lowest_rq = NULL, *rq = this_rq(); ++ struct task_struct *p = arg; ++ ++ raw_spin_lock_irq(&p->pi_lock); ++ raw_spin_lock(&rq->lock); ++ ++ if (task_rq(p) != rq) ++ goto out_unlock; ++ ++ if (is_migration_disabled(p)) { ++ p->migration_flags |= MDF_PUSH; ++ goto out_unlock; ++ } ++ ++ p->migration_flags &= ~MDF_PUSH; ++ ++ if (p->sched_class->find_lock_rq) ++ lowest_rq = p->sched_class->find_lock_rq(p, rq); ++ ++ if (!lowest_rq) ++ goto out_unlock; ++ ++ // XXX validate p is still the highest prio task ++ if (task_rq(p) == rq) { ++ deactivate_task(rq, p, 0); ++ set_task_cpu(p, lowest_rq->cpu); ++ activate_task(lowest_rq, p, 0); ++ resched_curr(lowest_rq); ++ } ++ ++ double_unlock_balance(rq, lowest_rq); + +- local_irq_enable(); ++out_unlock: ++ rq->push_busy = false; ++ raw_spin_unlock(&rq->lock); ++ raw_spin_unlock_irq(&p->pi_lock); ++ ++ put_task_struct(p); + return 0; + } + +@@ -1835,18 +2095,39 @@ + * sched_class::set_cpus_allowed must do the below, but is not required to + * actually call this function. + */ +-void set_cpus_allowed_common(struct task_struct *p, const struct cpumask *new_mask) ++void set_cpus_allowed_common(struct task_struct *p, const struct cpumask *new_mask, u32 flags) + { ++ if (flags & (SCA_MIGRATE_ENABLE | SCA_MIGRATE_DISABLE)) { ++ p->cpus_ptr = new_mask; ++ return; ++ } ++ + cpumask_copy(&p->cpus_mask, new_mask); + p->nr_cpus_allowed = cpumask_weight(new_mask); + } + +-void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) ++static void ++__do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask, u32 flags) + { + struct rq *rq = task_rq(p); + bool queued, running; + +- lockdep_assert_held(&p->pi_lock); ++ /* ++ * This here violates the locking rules for affinity, since we're only ++ * supposed to change these variables while holding both rq->lock and ++ * p->pi_lock. ++ * ++ * HOWEVER, it magically works, because ttwu() is the only code that ++ * accesses these variables under p->pi_lock and only does so after ++ * smp_cond_load_acquire(&p->on_cpu, !VAL), and we're in __schedule() ++ * before finish_task(). ++ * ++ * XXX do further audits, this smells like something putrid. ++ */ ++ if (flags & SCA_MIGRATE_DISABLE) ++ SCHED_WARN_ON(!p->on_cpu); ++ else ++ lockdep_assert_held(&p->pi_lock); + + queued = task_on_rq_queued(p); + running = task_current(rq, p); +@@ -1862,7 +2143,7 @@ + if (running) + put_prev_task(rq, p); + +- p->sched_class->set_cpus_allowed(p, new_mask); ++ p->sched_class->set_cpus_allowed(p, new_mask, flags); + + if (queued) + enqueue_task(rq, p, ENQUEUE_RESTORE | ENQUEUE_NOCLOCK); +@@ -1870,6 +2151,222 @@ + set_next_task(rq, p); + } + ++void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) ++{ ++ __do_set_cpus_allowed(p, new_mask, 0); ++} ++ ++/* ++ * This function is wildly self concurrent; here be dragons. ++ * ++ * ++ * When given a valid mask, __set_cpus_allowed_ptr() must block until the ++ * designated task is enqueued on an allowed CPU. If that task is currently ++ * running, we have to kick it out using the CPU stopper. ++ * ++ * Migrate-Disable comes along and tramples all over our nice sandcastle. ++ * Consider: ++ * ++ * Initial conditions: P0->cpus_mask = [0, 1] ++ * ++ * P0@CPU0 P1 ++ * ++ * migrate_disable(); ++ * ++ * set_cpus_allowed_ptr(P0, [1]); ++ * ++ * P1 *cannot* return from this set_cpus_allowed_ptr() call until P0 executes ++ * its outermost migrate_enable() (i.e. it exits its Migrate-Disable region). ++ * This means we need the following scheme: ++ * ++ * P0@CPU0 P1 ++ * ++ * migrate_disable(); ++ * ++ * set_cpus_allowed_ptr(P0, [1]); ++ * ++ * ++ * migrate_enable(); ++ * __set_cpus_allowed_ptr(); ++ * ++ * `--> ++ * ++ * Now the fun stuff: there may be several P1-like tasks, i.e. multiple ++ * concurrent set_cpus_allowed_ptr(P0, [*]) calls. CPU affinity changes of any ++ * task p are serialized by p->pi_lock, which we can leverage: the one that ++ * should come into effect at the end of the Migrate-Disable region is the last ++ * one. This means we only need to track a single cpumask (i.e. p->cpus_mask), ++ * but we still need to properly signal those waiting tasks at the appropriate ++ * moment. ++ * ++ * This is implemented using struct set_affinity_pending. The first ++ * __set_cpus_allowed_ptr() caller within a given Migrate-Disable region will ++ * setup an instance of that struct and install it on the targeted task_struct. ++ * Any and all further callers will reuse that instance. Those then wait for ++ * a completion signaled at the tail of the CPU stopper callback (1), triggered ++ * on the end of the Migrate-Disable region (i.e. outermost migrate_enable()). ++ * ++ * ++ * (1) In the cases covered above. There is one more where the completion is ++ * signaled within affine_move_task() itself: when a subsequent affinity request ++ * cancels the need for an active migration. Consider: ++ * ++ * Initial conditions: P0->cpus_mask = [0, 1] ++ * ++ * P0@CPU0 P1 P2 ++ * ++ * migrate_disable(); ++ * ++ * set_cpus_allowed_ptr(P0, [1]); ++ * ++ * set_cpus_allowed_ptr(P0, [0, 1]); ++ * ++ * ++ * ++ * Note that the above is safe vs a concurrent migrate_enable(), as any ++ * pending affinity completion is preceded an uninstallion of ++ * p->migration_pending done with p->pi_lock held. ++ */ ++static int affine_move_task(struct rq *rq, struct task_struct *p, struct rq_flags *rf, ++ int dest_cpu, unsigned int flags) ++{ ++ struct set_affinity_pending my_pending = { }, *pending = NULL; ++ bool stop_pending, complete = false; ++ ++ /* Can the task run on the task's current CPU? If so, we're done */ ++ if (cpumask_test_cpu(task_cpu(p), &p->cpus_mask)) { ++ struct task_struct *push_task = NULL; ++ ++ if ((flags & SCA_MIGRATE_ENABLE) && ++ (p->migration_flags & MDF_PUSH) && !rq->push_busy) { ++ rq->push_busy = true; ++ push_task = get_task_struct(p); ++ } ++ ++ /* ++ * If there are pending waiters, but no pending stop_work, ++ * then complete now. ++ */ ++ pending = p->migration_pending; ++ if (pending && !pending->stop_pending) { ++ p->migration_pending = NULL; ++ complete = true; ++ } ++ ++ task_rq_unlock(rq, p, rf); ++ ++ if (push_task) { ++ stop_one_cpu_nowait(rq->cpu, push_cpu_stop, ++ p, &rq->push_work); ++ } ++ ++ if (complete) ++ complete_all(&pending->done); ++ ++ return 0; ++ } ++ ++ if (!(flags & SCA_MIGRATE_ENABLE)) { ++ /* serialized by p->pi_lock */ ++ if (!p->migration_pending) { ++ /* Install the request */ ++ refcount_set(&my_pending.refs, 1); ++ init_completion(&my_pending.done); ++ my_pending.arg = (struct migration_arg) { ++ .task = p, ++ .dest_cpu = dest_cpu, ++ .pending = &my_pending, ++ }; ++ ++ p->migration_pending = &my_pending; ++ } else { ++ pending = p->migration_pending; ++ refcount_inc(&pending->refs); ++ /* ++ * Affinity has changed, but we've already installed a ++ * pending. migration_cpu_stop() *must* see this, else ++ * we risk a completion of the pending despite having a ++ * task on a disallowed CPU. ++ * ++ * Serialized by p->pi_lock, so this is safe. ++ */ ++ pending->arg.dest_cpu = dest_cpu; ++ } ++ } ++ pending = p->migration_pending; ++ /* ++ * - !MIGRATE_ENABLE: ++ * we'll have installed a pending if there wasn't one already. ++ * ++ * - MIGRATE_ENABLE: ++ * we're here because the current CPU isn't matching anymore, ++ * the only way that can happen is because of a concurrent ++ * set_cpus_allowed_ptr() call, which should then still be ++ * pending completion. ++ * ++ * Either way, we really should have a @pending here. ++ */ ++ if (WARN_ON_ONCE(!pending)) { ++ task_rq_unlock(rq, p, rf); ++ return -EINVAL; ++ } ++ ++ if (task_running(rq, p) || p->state == TASK_WAKING) { ++ /* ++ * MIGRATE_ENABLE gets here because 'p == current', but for ++ * anything else we cannot do is_migration_disabled(), punt ++ * and have the stopper function handle it all race-free. ++ */ ++ stop_pending = pending->stop_pending; ++ if (!stop_pending) ++ pending->stop_pending = true; ++ ++ if (flags & SCA_MIGRATE_ENABLE) ++ p->migration_flags &= ~MDF_PUSH; ++ ++ task_rq_unlock(rq, p, rf); ++ ++ if (!stop_pending) { ++ stop_one_cpu_nowait(cpu_of(rq), migration_cpu_stop, ++ &pending->arg, &pending->stop_work); ++ } ++ ++ if (flags & SCA_MIGRATE_ENABLE) ++ return 0; ++ } else { ++ ++ if (!is_migration_disabled(p)) { ++ if (task_on_rq_queued(p)) ++ rq = move_queued_task(rq, rf, p, dest_cpu); ++ ++ if (!pending->stop_pending) { ++ p->migration_pending = NULL; ++ complete = true; ++ } ++ } ++ task_rq_unlock(rq, p, rf); ++ ++ if (complete) ++ complete_all(&pending->done); ++ } ++ ++ wait_for_completion(&pending->done); ++ ++ if (refcount_dec_and_test(&pending->refs)) ++ wake_up_var(&pending->refs); /* No UaF, just an address */ ++ ++ /* ++ * Block the original owner of &pending until all subsequent callers ++ * have seen the completion and decremented the refcount ++ */ ++ wait_var_event(&my_pending.refs, !refcount_read(&my_pending.refs)); ++ ++ /* ARGH */ ++ WARN_ON_ONCE(my_pending.stop_pending); ++ ++ return 0; ++} ++ + /* + * Change a given task's CPU affinity. Migrate the thread to a + * proper CPU and schedule it away if the CPU it's executing on +@@ -1880,7 +2377,8 @@ + * call is not atomic; no spinlocks may be held. + */ + static int __set_cpus_allowed_ptr(struct task_struct *p, +- const struct cpumask *new_mask, bool check) ++ const struct cpumask *new_mask, ++ u32 flags) + { + const struct cpumask *cpu_valid_mask = cpu_active_mask; + unsigned int dest_cpu; +@@ -1891,9 +2389,14 @@ + rq = task_rq_lock(p, &rf); + update_rq_clock(rq); + +- if (p->flags & PF_KTHREAD) { ++ if (p->flags & PF_KTHREAD || is_migration_disabled(p)) { + /* +- * Kernel threads are allowed on online && !active CPUs ++ * Kernel threads are allowed on online && !active CPUs. ++ * ++ * Specifically, migration_disabled() tasks must not fail the ++ * cpumask_any_and_distribute() pick below, esp. so on ++ * SCA_MIGRATE_ENABLE, otherwise we'll not call ++ * set_cpus_allowed_common() and actually reset p->cpus_ptr. + */ + cpu_valid_mask = cpu_online_mask; + } +@@ -1902,13 +2405,22 @@ + * Must re-check here, to close a race against __kthread_bind(), + * sched_setaffinity() is not guaranteed to observe the flag. + */ +- if (check && (p->flags & PF_NO_SETAFFINITY)) { ++ if ((flags & SCA_CHECK) && (p->flags & PF_NO_SETAFFINITY)) { + ret = -EINVAL; + goto out; + } + +- if (cpumask_equal(&p->cpus_mask, new_mask)) +- goto out; ++ if (!(flags & SCA_MIGRATE_ENABLE)) { ++ if (cpumask_equal(&p->cpus_mask, new_mask)) ++ goto out; ++ ++ if (WARN_ON_ONCE(p == current && ++ is_migration_disabled(p) && ++ !cpumask_test_cpu(task_cpu(p), new_mask))) { ++ ret = -EBUSY; ++ goto out; ++ } ++ } + + /* + * Picking a ~random cpu helps in cases where we are changing affinity +@@ -1921,7 +2433,7 @@ + goto out; + } + +- do_set_cpus_allowed(p, new_mask); ++ __do_set_cpus_allowed(p, new_mask, flags); + + if (p->flags & PF_KTHREAD) { + /* +@@ -1933,23 +2445,8 @@ + p->nr_cpus_allowed != 1); + } + +- /* Can the task run on the task's current CPU? If so, we're done */ +- if (cpumask_test_cpu(task_cpu(p), new_mask)) +- goto out; ++ return affine_move_task(rq, p, &rf, dest_cpu, flags); + +- if (task_running(rq, p) || p->state == TASK_WAKING) { +- struct migration_arg arg = { p, dest_cpu }; +- /* Need help from migration thread: drop lock and wait. */ +- task_rq_unlock(rq, p, &rf); +- stop_one_cpu(cpu_of(rq), migration_cpu_stop, &arg); +- return 0; +- } else if (task_on_rq_queued(p)) { +- /* +- * OK, since we're going to drop the lock immediately +- * afterwards anyway. +- */ +- rq = move_queued_task(rq, &rf, p, dest_cpu); +- } + out: + task_rq_unlock(rq, p, &rf); + +@@ -1958,7 +2455,7 @@ + + int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask) + { +- return __set_cpus_allowed_ptr(p, new_mask, false); ++ return __set_cpus_allowed_ptr(p, new_mask, 0); + } + EXPORT_SYMBOL_GPL(set_cpus_allowed_ptr); + +@@ -1999,6 +2496,8 @@ + * Clearly, migrating tasks to offline CPUs is a fairly daft thing. + */ + WARN_ON_ONCE(!cpu_online(new_cpu)); ++ ++ WARN_ON_ONCE(is_migration_disabled(p)); + #endif + + trace_sched_migrate_task(p, new_cpu); +@@ -2131,6 +2630,18 @@ + } + #endif /* CONFIG_NUMA_BALANCING */ + ++static bool check_task_state(struct task_struct *p, long match_state) ++{ ++ bool match = false; ++ ++ raw_spin_lock_irq(&p->pi_lock); ++ if (p->state == match_state || p->saved_state == match_state) ++ match = true; ++ raw_spin_unlock_irq(&p->pi_lock); ++ ++ return match; ++} ++ + /* + * wait_task_inactive - wait for a thread to unschedule. + * +@@ -2175,7 +2686,7 @@ + * is actually now running somewhere else! + */ + while (task_running(rq, p)) { +- if (match_state && unlikely(p->state != match_state)) ++ if (match_state && !check_task_state(p, match_state)) + return 0; + cpu_relax(); + } +@@ -2190,7 +2701,8 @@ + running = task_running(rq, p); + queued = task_on_rq_queued(p); + ncsw = 0; +- if (!match_state || p->state == match_state) ++ if (!match_state || p->state == match_state || ++ p->saved_state == match_state) + ncsw = p->nvcsw | LONG_MIN; /* sets MSB */ + task_rq_unlock(rq, p, &rf); + +@@ -2224,7 +2736,7 @@ + ktime_t to = NSEC_PER_SEC / HZ; + + set_current_state(TASK_UNINTERRUPTIBLE); +- schedule_hrtimeout(&to, HRTIMER_MODE_REL); ++ schedule_hrtimeout(&to, HRTIMER_MODE_REL_HARD); + continue; + } + +@@ -2329,6 +2841,12 @@ + } + fallthrough; + case possible: ++ /* ++ * XXX When called from select_task_rq() we only ++ * hold p->pi_lock and again violate locking order. ++ * ++ * More yuck to audit. ++ */ + do_set_cpus_allowed(p, cpu_possible_mask); + state = fail; + break; +@@ -2363,7 +2881,7 @@ + { + lockdep_assert_held(&p->pi_lock); + +- if (p->nr_cpus_allowed > 1) ++ if (p->nr_cpus_allowed > 1 && !is_migration_disabled(p)) + cpu = p->sched_class->select_task_rq(p, cpu, sd_flags, wake_flags); + else + cpu = cpumask_any(p->cpus_ptr); +@@ -2386,6 +2904,7 @@ + + void sched_set_stop_task(int cpu, struct task_struct *stop) + { ++ static struct lock_class_key stop_pi_lock; + struct sched_param param = { .sched_priority = MAX_RT_PRIO - 1 }; + struct task_struct *old_stop = cpu_rq(cpu)->stop; + +@@ -2401,6 +2920,20 @@ + sched_setscheduler_nocheck(stop, SCHED_FIFO, ¶m); + + stop->sched_class = &stop_sched_class; ++ ++ /* ++ * The PI code calls rt_mutex_setprio() with ->pi_lock held to ++ * adjust the effective priority of a task. As a result, ++ * rt_mutex_setprio() can trigger (RT) balancing operations, ++ * which can then trigger wakeups of the stop thread to push ++ * around the current task. ++ * ++ * The stop task itself will never be part of the PI-chain, it ++ * never blocks, therefore that ->pi_lock recursion is safe. ++ * Tell lockdep about this by placing the stop->pi_lock in its ++ * own class. ++ */ ++ lockdep_set_class(&stop->pi_lock, &stop_pi_lock); + } + + cpu_rq(cpu)->stop = stop; +@@ -2414,15 +2947,23 @@ + } + } + +-#else ++#else /* CONFIG_SMP */ + + static inline int __set_cpus_allowed_ptr(struct task_struct *p, +- const struct cpumask *new_mask, bool check) ++ const struct cpumask *new_mask, ++ u32 flags) + { + return set_cpus_allowed_ptr(p, new_mask); + } + +-#endif /* CONFIG_SMP */ ++static inline void migrate_disable_switch(struct rq *rq, struct task_struct *p) { } ++ ++static inline bool rq_has_pinned_tasks(struct rq *rq) ++{ ++ return false; ++} ++ ++#endif /* !CONFIG_SMP */ + + static void + ttwu_stat(struct task_struct *p, int cpu, int wake_flags) +@@ -2847,7 +3388,7 @@ + int cpu, success = 0; + + preempt_disable(); +- if (p == current) { ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT) && p == current) { + /* + * We're waking current, this means 'p->on_rq' and 'task_cpu(p) + * == smp_processor_id()'. Together this means we can special +@@ -2877,8 +3418,26 @@ + */ + raw_spin_lock_irqsave(&p->pi_lock, flags); + smp_mb__after_spinlock(); +- if (!(p->state & state)) ++ if (!(p->state & state)) { ++ /* ++ * The task might be running due to a spinlock sleeper ++ * wakeup. Check the saved state and set it to running ++ * if the wakeup condition is true. ++ */ ++ if (!(wake_flags & WF_LOCK_SLEEPER)) { ++ if (p->saved_state & state) { ++ p->saved_state = TASK_RUNNING; ++ success = 1; ++ } ++ } + goto unlock; ++ } ++ /* ++ * If this is a regular wakeup, then we can unconditionally ++ * clear the saved state of a "lock sleeper". ++ */ ++ if (!(wake_flags & WF_LOCK_SLEEPER)) ++ p->saved_state = TASK_RUNNING; + + trace_sched_waking(p); + +@@ -3067,6 +3626,18 @@ + } + EXPORT_SYMBOL(wake_up_process); + ++/** ++ * wake_up_lock_sleeper - Wake up a specific process blocked on a "sleeping lock" ++ * @p: The process to be woken up. ++ * ++ * Same as wake_up_process() above, but wake_flags=WF_LOCK_SLEEPER to indicate ++ * the nature of the wakeup. ++ */ ++int wake_up_lock_sleeper(struct task_struct *p) ++{ ++ return try_to_wake_up(p, TASK_UNINTERRUPTIBLE, WF_LOCK_SLEEPER); ++} ++ + int wake_up_state(struct task_struct *p, unsigned int state) + { + return try_to_wake_up(p, state, 0); +@@ -3120,6 +3691,7 @@ + init_numa_balancing(clone_flags, p); + #ifdef CONFIG_SMP + p->wake_entry.u_flags = CSD_TYPE_TTWU; ++ p->migration_pending = NULL; + #endif + } + +@@ -3293,6 +3865,9 @@ + p->on_cpu = 0; + #endif + init_task_preempt_count(p); ++#ifdef CONFIG_HAVE_PREEMPT_LAZY ++ task_thread_info(p)->preempt_lazy_count = 0; ++#endif + #ifdef CONFIG_SMP + plist_node_init(&p->pushable_tasks, MAX_PRIO); + RB_CLEAR_NODE(&p->pushable_dl_tasks); +@@ -3508,6 +4083,90 @@ + #endif + } + ++#ifdef CONFIG_SMP ++ ++static void do_balance_callbacks(struct rq *rq, struct callback_head *head) ++{ ++ void (*func)(struct rq *rq); ++ struct callback_head *next; ++ ++ lockdep_assert_held(&rq->lock); ++ ++ while (head) { ++ func = (void (*)(struct rq *))head->func; ++ next = head->next; ++ head->next = NULL; ++ head = next; ++ ++ func(rq); ++ } ++} ++ ++static inline struct callback_head *splice_balance_callbacks(struct rq *rq) ++{ ++ struct callback_head *head = rq->balance_callback; ++ ++ lockdep_assert_held(&rq->lock); ++ if (head) { ++ rq->balance_callback = NULL; ++ rq->balance_flags &= ~BALANCE_WORK; ++ } ++ ++ return head; ++} ++ ++static void __balance_callbacks(struct rq *rq) ++{ ++ do_balance_callbacks(rq, splice_balance_callbacks(rq)); ++} ++ ++static inline void balance_callbacks(struct rq *rq, struct callback_head *head) ++{ ++ unsigned long flags; ++ ++ if (unlikely(head)) { ++ raw_spin_lock_irqsave(&rq->lock, flags); ++ do_balance_callbacks(rq, head); ++ raw_spin_unlock_irqrestore(&rq->lock, flags); ++ } ++} ++ ++static void balance_push(struct rq *rq); ++ ++static inline void balance_switch(struct rq *rq) ++{ ++ if (likely(!rq->balance_flags)) ++ return; ++ ++ if (rq->balance_flags & BALANCE_PUSH) { ++ balance_push(rq); ++ return; ++ } ++ ++ __balance_callbacks(rq); ++} ++ ++#else ++ ++static inline void __balance_callbacks(struct rq *rq) ++{ ++} ++ ++static inline struct callback_head *splice_balance_callbacks(struct rq *rq) ++{ ++ return NULL; ++} ++ ++static inline void balance_callbacks(struct rq *rq, struct callback_head *head) ++{ ++} ++ ++static inline void balance_switch(struct rq *rq) ++{ ++} ++ ++#endif ++ + static inline void + prepare_lock_switch(struct rq *rq, struct task_struct *next, struct rq_flags *rf) + { +@@ -3533,6 +4192,7 @@ + * prev into current: + */ + spin_acquire(&rq->lock.dep_map, 0, 0, _THIS_IP_); ++ balance_switch(rq); + raw_spin_unlock_irq(&rq->lock); + } + +@@ -3548,6 +4208,22 @@ + # define finish_arch_post_lock_switch() do { } while (0) + #endif + ++static inline void kmap_local_sched_out(void) ++{ ++#ifdef CONFIG_KMAP_LOCAL ++ if (unlikely(current->kmap_ctrl.idx)) ++ __kmap_local_sched_out(); ++#endif ++} ++ ++static inline void kmap_local_sched_in(void) ++{ ++#ifdef CONFIG_KMAP_LOCAL ++ if (unlikely(current->kmap_ctrl.idx)) ++ __kmap_local_sched_in(); ++#endif ++} ++ + /** + * prepare_task_switch - prepare to switch tasks + * @rq: the runqueue preparing to switch +@@ -3570,6 +4246,7 @@ + perf_event_task_sched_out(prev, next); + rseq_preempt(prev); + fire_sched_out_preempt_notifiers(prev, next); ++ kmap_local_sched_out(); + prepare_task(next); + prepare_arch_switch(next); + } +@@ -3636,6 +4313,7 @@ + finish_lock_switch(rq); + finish_arch_post_lock_switch(); + kcov_finish_switch(current); ++ kmap_local_sched_in(); + + fire_sched_in_preempt_notifiers(current); + /* +@@ -3650,23 +4328,18 @@ + * provided by mmdrop(), + * - a sync_core for SYNC_CORE. + */ ++ /* ++ * We use mmdrop_delayed() here so we don't have to do the ++ * full __mmdrop() when we are the last user. ++ */ + if (mm) { + membarrier_mm_sync_core_before_usermode(mm); +- mmdrop(mm); ++ mmdrop_delayed(mm); + } + if (unlikely(prev_state == TASK_DEAD)) { + if (prev->sched_class->task_dead) + prev->sched_class->task_dead(prev); + +- /* +- * Remove function-return probe instances associated with this +- * task and put them back on the free list. +- */ +- kprobe_flush_task(prev); +- +- /* Task is done with its stack. */ +- put_task_stack(prev); +- + put_task_struct_rcu_user(prev); + } + +@@ -3674,43 +4347,6 @@ + return rq; + } + +-#ifdef CONFIG_SMP +- +-/* rq->lock is NOT held, but preemption is disabled */ +-static void __balance_callback(struct rq *rq) +-{ +- struct callback_head *head, *next; +- void (*func)(struct rq *rq); +- unsigned long flags; +- +- raw_spin_lock_irqsave(&rq->lock, flags); +- head = rq->balance_callback; +- rq->balance_callback = NULL; +- while (head) { +- func = (void (*)(struct rq *))head->func; +- next = head->next; +- head->next = NULL; +- head = next; +- +- func(rq); +- } +- raw_spin_unlock_irqrestore(&rq->lock, flags); +-} +- +-static inline void balance_callback(struct rq *rq) +-{ +- if (unlikely(rq->balance_callback)) +- __balance_callback(rq); +-} +- +-#else +- +-static inline void balance_callback(struct rq *rq) +-{ +-} +- +-#endif +- + /** + * schedule_tail - first thing a freshly forked thread must call. + * @prev: the thread we just switched away from. +@@ -3730,7 +4366,6 @@ + */ + + rq = finish_task_switch(prev); +- balance_callback(rq); + preempt_enable(); + + if (current->set_child_tid) +@@ -4424,7 +5059,7 @@ + * + * WARNING: must be called with preemption disabled! + */ +-static void __sched notrace __schedule(bool preempt) ++static void __sched notrace __schedule(bool preempt, bool spinning_lock) + { + struct task_struct *prev, *next; + unsigned long *switch_count; +@@ -4477,7 +5112,7 @@ + * - ptrace_{,un}freeze_traced() can change ->state underneath us. + */ + prev_state = prev->state; +- if (!preempt && prev_state) { ++ if ((!preempt || spinning_lock) && prev_state) { + if (signal_pending_state(prev_state, prev)) { + prev->state = TASK_RUNNING; + } else { +@@ -4512,6 +5147,7 @@ + + next = pick_next_task(rq, prev, &rf); + clear_tsk_need_resched(prev); ++ clear_tsk_need_resched_lazy(prev); + clear_preempt_need_resched(); + + if (likely(prev != next)) { +@@ -4537,6 +5173,7 @@ + */ + ++*switch_count; + ++ migrate_disable_switch(rq, prev); + psi_sched_switch(prev, next, !task_on_rq_queued(prev)); + + trace_sched_switch(preempt, prev, next); +@@ -4545,10 +5182,11 @@ + rq = context_switch(rq, prev, next, &rf); + } else { + rq->clock_update_flags &= ~(RQCF_ACT_SKIP|RQCF_REQ_SKIP); +- rq_unlock_irq(rq, &rf); +- } + +- balance_callback(rq); ++ rq_unpin_lock(rq, &rf); ++ __balance_callbacks(rq); ++ raw_spin_unlock_irq(&rq->lock); ++ } + } + + void __noreturn do_task_dead(void) +@@ -4559,7 +5197,7 @@ + /* Tell freezer to ignore us: */ + current->flags |= PF_NOFREEZE; + +- __schedule(false); ++ __schedule(false, false); + BUG(); + + /* Avoid "noreturn function does return" - but don't continue if BUG() is a NOP: */ +@@ -4592,9 +5230,6 @@ + preempt_enable_no_resched(); + } + +- if (tsk_is_pi_blocked(tsk)) +- return; +- + /* + * If we are going to sleep and we have plugged IO queued, + * make sure to submit it to avoid deadlocks. +@@ -4620,7 +5255,7 @@ + sched_submit_work(tsk); + do { + preempt_disable(); +- __schedule(false); ++ __schedule(false, false); + sched_preempt_enable_no_resched(); + } while (need_resched()); + sched_update_worker(tsk); +@@ -4648,7 +5283,7 @@ + */ + WARN_ON_ONCE(current->state); + do { +- __schedule(false); ++ __schedule(false, false); + } while (need_resched()); + } + +@@ -4701,7 +5336,7 @@ + */ + preempt_disable_notrace(); + preempt_latency_start(1); +- __schedule(true); ++ __schedule(true, false); + preempt_latency_stop(1); + preempt_enable_no_resched_notrace(); + +@@ -4712,6 +5347,30 @@ + } while (need_resched()); + } + ++#ifdef CONFIG_PREEMPT_LAZY ++/* ++ * If TIF_NEED_RESCHED is then we allow to be scheduled away since this is ++ * set by a RT task. Oterwise we try to avoid beeing scheduled out as long as ++ * preempt_lazy_count counter >0. ++ */ ++static __always_inline int preemptible_lazy(void) ++{ ++ if (test_thread_flag(TIF_NEED_RESCHED)) ++ return 1; ++ if (current_thread_info()->preempt_lazy_count) ++ return 0; ++ return 1; ++} ++ ++#else ++ ++static inline int preemptible_lazy(void) ++{ ++ return 1; ++} ++ ++#endif ++ + #ifdef CONFIG_PREEMPTION + /* + * This is the entry point to schedule() from in-kernel preemption +@@ -4725,12 +5384,26 @@ + */ + if (likely(!preemptible())) + return; +- ++ if (!preemptible_lazy()) ++ return; + preempt_schedule_common(); + } + NOKPROBE_SYMBOL(preempt_schedule); + EXPORT_SYMBOL(preempt_schedule); + ++#ifdef CONFIG_PREEMPT_RT ++void __sched notrace preempt_schedule_lock(void) ++{ ++ do { ++ preempt_disable(); ++ __schedule(true, true); ++ sched_preempt_enable_no_resched(); ++ } while (need_resched()); ++} ++NOKPROBE_SYMBOL(preempt_schedule_lock); ++EXPORT_SYMBOL(preempt_schedule_lock); ++#endif ++ + /** + * preempt_schedule_notrace - preempt_schedule called by tracing + * +@@ -4752,6 +5425,9 @@ + if (likely(!preemptible())) + return; + ++ if (!preemptible_lazy()) ++ return; ++ + do { + /* + * Because the function tracer can trace preempt_count_sub() +@@ -4774,7 +5450,7 @@ + * an infinite recursion. + */ + prev_ctx = exception_enter(); +- __schedule(true); ++ __schedule(true, false); + exception_exit(prev_ctx); + + preempt_latency_stop(1); +@@ -4803,7 +5479,7 @@ + do { + preempt_disable(); + local_irq_enable(); +- __schedule(true); ++ __schedule(true, false); + local_irq_disable(); + sched_preempt_enable_no_resched(); + } while (need_resched()); +@@ -4969,9 +5645,11 @@ + out_unlock: + /* Avoid rq from going away on us: */ + preempt_disable(); +- __task_rq_unlock(rq, &rf); + +- balance_callback(rq); ++ rq_unpin_lock(rq, &rf); ++ __balance_callbacks(rq); ++ raw_spin_unlock(&rq->lock); ++ + preempt_enable(); + } + #else +@@ -5214,6 +5892,7 @@ + int oldpolicy = -1, policy = attr->sched_policy; + int retval, oldprio, newprio, queued, running; + const struct sched_class *prev_class; ++ struct callback_head *head; + struct rq_flags rf; + int reset_on_fork; + int queue_flags = DEQUEUE_SAVE | DEQUEUE_MOVE | DEQUEUE_NOCLOCK; +@@ -5456,6 +6135,7 @@ + + /* Avoid rq from going away on us: */ + preempt_disable(); ++ head = splice_balance_callbacks(rq); + task_rq_unlock(rq, p, &rf); + + if (pi) { +@@ -5464,7 +6144,7 @@ + } + + /* Run balance callbacks after we've adjusted the PI chain: */ +- balance_callback(rq); ++ balance_callbacks(rq, head); + preempt_enable(); + + return 0; +@@ -5959,7 +6639,7 @@ + } + #endif + again: +- retval = __set_cpus_allowed_ptr(p, new_mask, true); ++ retval = __set_cpus_allowed_ptr(p, new_mask, SCA_CHECK); + + if (!retval) { + cpuset_cpus_allowed(p, cpus_allowed); +@@ -6535,7 +7215,7 @@ + * + * And since this is boot we can forgo the serialization. + */ +- set_cpus_allowed_common(idle, cpumask_of(cpu)); ++ set_cpus_allowed_common(idle, cpumask_of(cpu), 0); + #endif + /* + * We're having a chicken and egg problem, even though we are +@@ -6562,7 +7242,9 @@ + + /* Set the preempt count _outside_ the spinlocks! */ + init_idle_preempt_count(idle, cpu); +- ++#ifdef CONFIG_HAVE_PREEMPT_LAZY ++ task_thread_info(idle)->preempt_lazy_count = 0; ++#endif + /* + * The idle tasks have their own, simple scheduling class: + */ +@@ -6672,6 +7354,7 @@ + #endif /* CONFIG_NUMA_BALANCING */ + + #ifdef CONFIG_HOTPLUG_CPU ++ + /* + * Ensure that the idle task is using init_mm right before its CPU goes + * offline. +@@ -6691,119 +7374,126 @@ + /* finish_cpu(), as ran on the BP, will clean up the active_mm state */ + } + +-/* +- * Since this CPU is going 'away' for a while, fold any nr_active delta +- * we might have. Assumes we're called after migrate_tasks() so that the +- * nr_active count is stable. We need to take the teardown thread which +- * is calling this into account, so we hand in adjust = 1 to the load +- * calculation. +- * +- * Also see the comment "Global load-average calculations". +- */ +-static void calc_load_migrate(struct rq *rq) ++static int __balance_push_cpu_stop(void *arg) + { +- long delta = calc_load_fold_active(rq, 1); +- if (delta) +- atomic_long_add(delta, &calc_load_tasks); +-} ++ struct task_struct *p = arg; ++ struct rq *rq = this_rq(); ++ struct rq_flags rf; ++ int cpu; + +-static struct task_struct *__pick_migrate_task(struct rq *rq) +-{ +- const struct sched_class *class; +- struct task_struct *next; ++ raw_spin_lock_irq(&p->pi_lock); ++ rq_lock(rq, &rf); + +- for_each_class(class) { +- next = class->pick_next_task(rq); +- if (next) { +- next->sched_class->put_prev_task(rq, next); +- return next; +- } ++ update_rq_clock(rq); ++ ++ if (task_rq(p) == rq && task_on_rq_queued(p)) { ++ cpu = select_fallback_rq(rq->cpu, p); ++ rq = __migrate_task(rq, &rf, p, cpu); + } + +- /* The idle class should always have a runnable task */ +- BUG(); ++ rq_unlock(rq, &rf); ++ raw_spin_unlock_irq(&p->pi_lock); ++ ++ put_task_struct(p); ++ ++ return 0; + } + ++static DEFINE_PER_CPU(struct cpu_stop_work, push_work); ++ + /* +- * Migrate all tasks from the rq, sleeping tasks will be migrated by +- * try_to_wake_up()->select_task_rq(). +- * +- * Called with rq->lock held even though we'er in stop_machine() and +- * there's no concurrency possible, we hold the required locks anyway +- * because of lock validation efforts. +- */ +-static void migrate_tasks(struct rq *dead_rq, struct rq_flags *rf) +-{ +- struct rq *rq = dead_rq; +- struct task_struct *next, *stop = rq->stop; +- struct rq_flags orf = *rf; +- int dest_cpu; ++ * Ensure we only run per-cpu kthreads once the CPU goes !active. ++ */ ++static void balance_push(struct rq *rq) ++{ ++ struct task_struct *push_task = rq->curr; ++ ++ lockdep_assert_held(&rq->lock); ++ SCHED_WARN_ON(rq->cpu != smp_processor_id()); + + /* +- * Fudge the rq selection such that the below task selection loop +- * doesn't get stuck on the currently eligible stop task. +- * +- * We're currently inside stop_machine() and the rq is either stuck +- * in the stop_machine_cpu_stop() loop, or we're executing this code, +- * either way we should never end up calling schedule() until we're +- * done here. ++ * Both the cpu-hotplug and stop task are in this case and are ++ * required to complete the hotplug process. + */ +- rq->stop = NULL; ++ if (is_per_cpu_kthread(push_task) || is_migration_disabled(push_task)) { ++ /* ++ * If this is the idle task on the outgoing CPU try to wake ++ * up the hotplug control thread which might wait for the ++ * last task to vanish. The rcuwait_active() check is ++ * accurate here because the waiter is pinned on this CPU ++ * and can't obviously be running in parallel. ++ * ++ * On RT kernels this also has to check whether there are ++ * pinned and scheduled out tasks on the runqueue. They ++ * need to leave the migrate disabled section first. ++ */ ++ if (!rq->nr_running && !rq_has_pinned_tasks(rq) && ++ rcuwait_active(&rq->hotplug_wait)) { ++ raw_spin_unlock(&rq->lock); ++ rcuwait_wake_up(&rq->hotplug_wait); ++ raw_spin_lock(&rq->lock); ++ } ++ return; ++ } + ++ get_task_struct(push_task); + /* +- * put_prev_task() and pick_next_task() sched +- * class method both need to have an up-to-date +- * value of rq->clock[_task] ++ * Temporarily drop rq->lock such that we can wake-up the stop task. ++ * Both preemption and IRQs are still disabled. + */ +- update_rq_clock(rq); ++ raw_spin_unlock(&rq->lock); ++ stop_one_cpu_nowait(rq->cpu, __balance_push_cpu_stop, push_task, ++ this_cpu_ptr(&push_work)); ++ /* ++ * At this point need_resched() is true and we'll take the loop in ++ * schedule(). The next pick is obviously going to be the stop task ++ * which is_per_cpu_kthread() and will push this task away. ++ */ ++ raw_spin_lock(&rq->lock); ++} + +- for (;;) { +- /* +- * There's this thread running, bail when that's the only +- * remaining thread: +- */ +- if (rq->nr_running == 1) +- break; ++static void balance_push_set(int cpu, bool on) ++{ ++ struct rq *rq = cpu_rq(cpu); ++ struct rq_flags rf; + +- next = __pick_migrate_task(rq); ++ rq_lock_irqsave(rq, &rf); ++ if (on) ++ rq->balance_flags |= BALANCE_PUSH; ++ else ++ rq->balance_flags &= ~BALANCE_PUSH; ++ rq_unlock_irqrestore(rq, &rf); ++} + +- /* +- * Rules for changing task_struct::cpus_mask are holding +- * both pi_lock and rq->lock, such that holding either +- * stabilizes the mask. +- * +- * Drop rq->lock is not quite as disastrous as it usually is +- * because !cpu_active at this point, which means load-balance +- * will not interfere. Also, stop-machine. +- */ +- rq_unlock(rq, rf); +- raw_spin_lock(&next->pi_lock); +- rq_relock(rq, rf); ++/* ++ * Invoked from a CPUs hotplug control thread after the CPU has been marked ++ * inactive. All tasks which are not per CPU kernel threads are either ++ * pushed off this CPU now via balance_push() or placed on a different CPU ++ * during wakeup. Wait until the CPU is quiescent. ++ */ ++static void balance_hotplug_wait(void) ++{ ++ struct rq *rq = this_rq(); + +- /* +- * Since we're inside stop-machine, _nothing_ should have +- * changed the task, WARN if weird stuff happened, because in +- * that case the above rq->lock drop is a fail too. +- */ +- if (WARN_ON(task_rq(next) != rq || !task_on_rq_queued(next))) { +- raw_spin_unlock(&next->pi_lock); +- continue; +- } ++ rcuwait_wait_event(&rq->hotplug_wait, ++ rq->nr_running == 1 && !rq_has_pinned_tasks(rq), ++ TASK_UNINTERRUPTIBLE); ++} + +- /* Find suitable destination for @next, with force if needed. */ +- dest_cpu = select_fallback_rq(dead_rq->cpu, next); +- rq = __migrate_task(rq, rf, next, dest_cpu); +- if (rq != dead_rq) { +- rq_unlock(rq, rf); +- rq = dead_rq; +- *rf = orf; +- rq_relock(rq, rf); +- } +- raw_spin_unlock(&next->pi_lock); +- } ++#else + +- rq->stop = stop; ++static inline void balance_push(struct rq *rq) ++{ + } ++ ++static inline void balance_push_set(int cpu, bool on) ++{ ++} ++ ++static inline void balance_hotplug_wait(void) ++{ ++} ++ + #endif /* CONFIG_HOTPLUG_CPU */ + + void set_rq_online(struct rq *rq) +@@ -6891,6 +7581,8 @@ + struct rq *rq = cpu_rq(cpu); + struct rq_flags rf; + ++ balance_push_set(cpu, false); ++ + #ifdef CONFIG_SCHED_SMT + /* + * When going up, increment the number of cores with SMT present. +@@ -6926,6 +7618,8 @@ + + int sched_cpu_deactivate(unsigned int cpu) + { ++ struct rq *rq = cpu_rq(cpu); ++ struct rq_flags rf; + int ret; + + set_cpu_active(cpu, false); +@@ -6938,6 +7632,16 @@ + */ + synchronize_rcu(); + ++ balance_push_set(cpu, true); ++ ++ rq_lock_irqsave(rq, &rf); ++ if (rq->rd) { ++ update_rq_clock(rq); ++ BUG_ON(!cpumask_test_cpu(cpu, rq->rd->span)); ++ set_rq_offline(rq); ++ } ++ rq_unlock_irqrestore(rq, &rf); ++ + #ifdef CONFIG_SCHED_SMT + /* + * When going down, decrement the number of cores with SMT present. +@@ -6951,6 +7655,7 @@ + + ret = cpuset_cpu_inactive(cpu); + if (ret) { ++ balance_push_set(cpu, false); + set_cpu_active(cpu, true); + return ret; + } +@@ -6974,6 +7679,41 @@ + } + + #ifdef CONFIG_HOTPLUG_CPU ++ ++/* ++ * Invoked immediately before the stopper thread is invoked to bring the ++ * CPU down completely. At this point all per CPU kthreads except the ++ * hotplug thread (current) and the stopper thread (inactive) have been ++ * either parked or have been unbound from the outgoing CPU. Ensure that ++ * any of those which might be on the way out are gone. ++ * ++ * If after this point a bound task is being woken on this CPU then the ++ * responsible hotplug callback has failed to do it's job. ++ * sched_cpu_dying() will catch it with the appropriate fireworks. ++ */ ++int sched_cpu_wait_empty(unsigned int cpu) ++{ ++ balance_hotplug_wait(); ++ return 0; ++} ++ ++/* ++ * Since this CPU is going 'away' for a while, fold any nr_active delta we ++ * might have. Called from the CPU stopper task after ensuring that the ++ * stopper is the last running task on the CPU, so nr_active count is ++ * stable. We need to take the teardown thread which is calling this into ++ * account, so we hand in adjust = 1 to the load calculation. ++ * ++ * Also see the comment "Global load-average calculations". ++ */ ++static void calc_load_migrate(struct rq *rq) ++{ ++ long delta = calc_load_fold_active(rq, 1); ++ ++ if (delta) ++ atomic_long_add(delta, &calc_load_tasks); ++} ++ + int sched_cpu_dying(unsigned int cpu) + { + struct rq *rq = cpu_rq(cpu); +@@ -6983,12 +7723,7 @@ + sched_tick_stop(cpu); + + rq_lock_irqsave(rq, &rf); +- if (rq->rd) { +- BUG_ON(!cpumask_test_cpu(cpu, rq->rd->span)); +- set_rq_offline(rq); +- } +- migrate_tasks(rq, &rf); +- BUG_ON(rq->nr_running != 1); ++ BUG_ON(rq->nr_running != 1 || rq_has_pinned_tasks(rq)); + rq_unlock_irqrestore(rq, &rf); + + calc_load_migrate(rq); +@@ -7195,6 +7930,9 @@ + + rq_csd_init(rq, &rq->nohz_csd, nohz_csd_func); + #endif ++#ifdef CONFIG_HOTPLUG_CPU ++ rcuwait_init(&rq->hotplug_wait); ++#endif + #endif /* CONFIG_SMP */ + hrtick_rq_init(rq); + atomic_set(&rq->nr_iowait, 0); +@@ -7235,7 +7973,7 @@ + #ifdef CONFIG_DEBUG_ATOMIC_SLEEP + static inline int preempt_count_equals(int preempt_offset) + { +- int nested = preempt_count() + rcu_preempt_depth(); ++ int nested = preempt_count() + sched_rcu_preempt_depth(); + + return (nested == preempt_offset); + } +@@ -7332,6 +8070,39 @@ + add_taint(TAINT_WARN, LOCKDEP_STILL_OK); + } + EXPORT_SYMBOL_GPL(__cant_sleep); ++ ++#ifdef CONFIG_SMP ++void __cant_migrate(const char *file, int line) ++{ ++ static unsigned long prev_jiffy; ++ ++ if (irqs_disabled()) ++ return; ++ ++ if (is_migration_disabled(current)) ++ return; ++ ++ if (!IS_ENABLED(CONFIG_PREEMPT_COUNT)) ++ return; ++ ++ if (preempt_count() > 0) ++ return; ++ ++ if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy) ++ return; ++ prev_jiffy = jiffies; ++ ++ pr_err("BUG: assuming non migratable context at %s:%d\n", file, line); ++ pr_err("in_atomic(): %d, irqs_disabled(): %d, migration_disabled() %u pid: %d, name: %s\n", ++ in_atomic(), irqs_disabled(), is_migration_disabled(current), ++ current->pid, current->comm); ++ ++ debug_show_held_locks(current); ++ dump_stack(); ++ add_taint(TAINT_WARN, LOCKDEP_STILL_OK); ++} ++EXPORT_SYMBOL_GPL(__cant_migrate); ++#endif + #endif + + #ifdef CONFIG_MAGIC_SYSRQ +diff -Naur --no-dereference a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c +--- a/kernel/sched/cpudeadline.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/sched/cpudeadline.c 2024-11-24 20:19:38.247228960 -0500 +@@ -120,7 +120,7 @@ + const struct sched_dl_entity *dl_se = &p->dl; + + if (later_mask && +- cpumask_and(later_mask, cp->free_cpus, p->cpus_ptr)) { ++ cpumask_and(later_mask, cp->free_cpus, &p->cpus_mask)) { + unsigned long cap, max_cap = 0; + int cpu, max_cpu = -1; + +@@ -151,7 +151,7 @@ + + WARN_ON(best_cpu != -1 && !cpu_present(best_cpu)); + +- if (cpumask_test_cpu(best_cpu, p->cpus_ptr) && ++ if (cpumask_test_cpu(best_cpu, &p->cpus_mask) && + dl_time_before(dl_se->deadline, cp->elements[0].dl)) { + if (later_mask) + cpumask_set_cpu(best_cpu, later_mask); +diff -Naur --no-dereference a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c +--- a/kernel/sched/cpupri.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/sched/cpupri.c 2024-11-24 20:19:38.247228960 -0500 +@@ -73,11 +73,11 @@ + if (skip) + return 0; + +- if (cpumask_any_and(p->cpus_ptr, vec->mask) >= nr_cpu_ids) ++ if (cpumask_any_and(&p->cpus_mask, vec->mask) >= nr_cpu_ids) + return 0; + + if (lowest_mask) { +- cpumask_and(lowest_mask, p->cpus_ptr, vec->mask); ++ cpumask_and(lowest_mask, &p->cpus_mask, vec->mask); + + /* + * We have to ensure that we have at least one bit +diff -Naur --no-dereference a/kernel/sched/cputime.c b/kernel/sched/cputime.c +--- a/kernel/sched/cputime.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/sched/cputime.c 2024-11-24 20:19:38.247228960 -0500 +@@ -44,12 +44,13 @@ + } + + /* +- * Called before incrementing preempt_count on {soft,}irq_enter ++ * Called after incrementing preempt_count on {soft,}irq_enter + * and before decrementing preempt_count on {soft,}irq_exit. + */ +-void irqtime_account_irq(struct task_struct *curr) ++void irqtime_account_irq(struct task_struct *curr, unsigned int offset) + { + struct irqtime *irqtime = this_cpu_ptr(&cpu_irqtime); ++ unsigned int pc; + s64 delta; + int cpu; + +@@ -59,6 +60,7 @@ + cpu = smp_processor_id(); + delta = sched_clock_cpu(cpu) - irqtime->irq_start_time; + irqtime->irq_start_time += delta; ++ pc = irq_count() - offset; + + /* + * We do not account for softirq time from ksoftirqd here. +@@ -66,12 +68,11 @@ + * in that case, so as not to confuse scheduler with a special task + * that do not consume any time, but still wants to run. + */ +- if (hardirq_count()) ++ if (pc & HARDIRQ_MASK) + irqtime_account_delta(irqtime, delta, CPUTIME_IRQ); +- else if (in_serving_softirq() && curr != this_cpu_ksoftirqd()) ++ else if ((pc & SOFTIRQ_OFFSET) && curr != this_cpu_ksoftirqd()) + irqtime_account_delta(irqtime, delta, CPUTIME_SOFTIRQ); + } +-EXPORT_SYMBOL_GPL(irqtime_account_irq); + + static u64 irqtime_tick_accounted(u64 maxtime) + { +@@ -418,24 +419,21 @@ + } + # endif + +-/* +- * Archs that account the whole time spent in the idle task +- * (outside irq) as idle time can rely on this and just implement +- * vtime_account_kernel() and vtime_account_idle(). Archs that +- * have other meaning of the idle time (s390 only includes the +- * time spent by the CPU when it's in low power mode) must override +- * vtime_account(). +- */ +-#ifndef __ARCH_HAS_VTIME_ACCOUNT +-void vtime_account_irq_enter(struct task_struct *tsk) ++void vtime_account_irq(struct task_struct *tsk, unsigned int offset) + { +- if (!in_interrupt() && is_idle_task(tsk)) ++ unsigned int pc = irq_count() - offset; ++ ++ if (pc & HARDIRQ_OFFSET) { ++ vtime_account_hardirq(tsk); ++ } else if (pc & SOFTIRQ_OFFSET) { ++ vtime_account_softirq(tsk); ++ } else if (!IS_ENABLED(CONFIG_HAVE_VIRT_CPU_ACCOUNTING_IDLE) && ++ is_idle_task(tsk)) { + vtime_account_idle(tsk); +- else ++ } else { + vtime_account_kernel(tsk); ++ } + } +-EXPORT_SYMBOL_GPL(vtime_account_irq_enter); +-#endif /* __ARCH_HAS_VTIME_ACCOUNT */ + + void cputime_adjust(struct task_cputime *curr, struct prev_cputime *prev, + u64 *ut, u64 *st) +diff -Naur --no-dereference a/kernel/sched/deadline.c b/kernel/sched/deadline.c +--- a/kernel/sched/deadline.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/sched/deadline.c 2024-11-24 20:19:38.247228960 -0500 +@@ -565,7 +565,7 @@ + + static inline bool need_pull_dl_task(struct rq *rq, struct task_struct *prev) + { +- return dl_task(prev); ++ return rq->online && dl_task(prev); + } + + static DEFINE_PER_CPU(struct callback_head, dl_push_head); +@@ -1922,7 +1922,7 @@ + static int pick_dl_task(struct rq *rq, struct task_struct *p, int cpu) + { + if (!task_running(rq, p) && +- cpumask_test_cpu(cpu, p->cpus_ptr)) ++ cpumask_test_cpu(cpu, &p->cpus_mask)) + return 1; + return 0; + } +@@ -2012,8 +2012,8 @@ + return this_cpu; + } + +- best_cpu = cpumask_first_and(later_mask, +- sched_domain_span(sd)); ++ best_cpu = cpumask_any_and_distribute(later_mask, ++ sched_domain_span(sd)); + /* + * Last chance: if a CPU being in both later_mask + * and current sd span is valid, that becomes our +@@ -2035,7 +2035,7 @@ + if (this_cpu != -1) + return this_cpu; + +- cpu = cpumask_any(later_mask); ++ cpu = cpumask_any_distribute(later_mask); + if (cpu < nr_cpu_ids) + return cpu; + +@@ -2072,7 +2072,7 @@ + /* Retry if something changed. */ + if (double_lock_balance(rq, later_rq)) { + if (unlikely(task_rq(task) != rq || +- !cpumask_test_cpu(later_rq->cpu, task->cpus_ptr) || ++ !cpumask_test_cpu(later_rq->cpu, &task->cpus_mask) || + task_running(rq, task) || + !dl_task(task) || + !task_on_rq_queued(task))) { +@@ -2139,6 +2139,9 @@ + return 0; + + retry: ++ if (is_migration_disabled(next_task)) ++ return 0; ++ + if (WARN_ON(next_task == rq->curr)) + return 0; + +@@ -2216,7 +2219,7 @@ + static void pull_dl_task(struct rq *this_rq) + { + int this_cpu = this_rq->cpu, cpu; +- struct task_struct *p; ++ struct task_struct *p, *push_task; + bool resched = false; + struct rq *src_rq; + u64 dmin = LONG_MAX; +@@ -2246,6 +2249,7 @@ + continue; + + /* Might drop this_rq->lock */ ++ push_task = NULL; + double_lock_balance(this_rq, src_rq); + + /* +@@ -2277,17 +2281,28 @@ + src_rq->curr->dl.deadline)) + goto skip; + +- resched = true; +- +- deactivate_task(src_rq, p, 0); +- set_task_cpu(p, this_cpu); +- activate_task(this_rq, p, 0); +- dmin = p->dl.deadline; ++ if (is_migration_disabled(p)) { ++ trace_sched_migrate_pull_tp(p); ++ push_task = get_push_task(src_rq); ++ } else { ++ deactivate_task(src_rq, p, 0); ++ set_task_cpu(p, this_cpu); ++ activate_task(this_rq, p, 0); ++ dmin = p->dl.deadline; ++ resched = true; ++ } + + /* Is there any other task even earlier? */ + } + skip: + double_unlock_balance(this_rq, src_rq); ++ ++ if (push_task) { ++ raw_spin_unlock(&this_rq->lock); ++ stop_one_cpu_nowait(src_rq->cpu, push_cpu_stop, ++ push_task, &src_rq->push_work); ++ raw_spin_lock(&this_rq->lock); ++ } + } + + if (resched) +@@ -2311,7 +2326,8 @@ + } + + static void set_cpus_allowed_dl(struct task_struct *p, +- const struct cpumask *new_mask) ++ const struct cpumask *new_mask, ++ u32 flags) + { + struct root_domain *src_rd; + struct rq *rq; +@@ -2340,7 +2356,7 @@ + raw_spin_unlock(&src_dl_b->lock); + } + +- set_cpus_allowed_common(p, new_mask); ++ set_cpus_allowed_common(p, new_mask, flags); + } + + /* Assumes rq->lock is held */ +@@ -2535,6 +2551,7 @@ + .rq_online = rq_online_dl, + .rq_offline = rq_offline_dl, + .task_woken = task_woken_dl, ++ .find_lock_rq = find_lock_later_rq, + #endif + + .task_tick = task_tick_dl, +diff -Naur --no-dereference a/kernel/sched/fair.c b/kernel/sched/fair.c +--- a/kernel/sched/fair.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/sched/fair.c 2024-11-24 20:19:38.247228960 -0500 +@@ -4531,7 +4531,7 @@ + ideal_runtime = sched_slice(cfs_rq, curr); + delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime; + if (delta_exec > ideal_runtime) { +- resched_curr(rq_of(cfs_rq)); ++ resched_curr_lazy(rq_of(cfs_rq)); + /* + * The current task ran long enough, ensure it doesn't get + * re-elected due to buddy favours. +@@ -4555,7 +4555,7 @@ + return; + + if (delta > ideal_runtime) +- resched_curr(rq_of(cfs_rq)); ++ resched_curr_lazy(rq_of(cfs_rq)); + } + + static void +@@ -4698,7 +4698,7 @@ + * validating it and just reschedule. + */ + if (queued) { +- resched_curr(rq_of(cfs_rq)); ++ resched_curr_lazy(rq_of(cfs_rq)); + return; + } + /* +@@ -4835,7 +4835,7 @@ + * hierarchy can be throttled + */ + if (!assign_cfs_rq_runtime(cfs_rq) && likely(cfs_rq->curr)) +- resched_curr(rq_of(cfs_rq)); ++ resched_curr_lazy(rq_of(cfs_rq)); + } + + static __always_inline +@@ -5570,7 +5570,7 @@ + + if (delta < 0) { + if (rq->curr == p) +- resched_curr(rq); ++ resched_curr_lazy(rq); + return; + } + hrtick_start(rq, delta); +@@ -7153,7 +7153,7 @@ + return; + + preempt: +- resched_curr(rq); ++ resched_curr_lazy(rq); + /* + * Only set the backward buddy when the current task is still + * on the rq. This can happen when a wakeup gets interleaved +@@ -10913,7 +10913,7 @@ + * 'current' within the tree based on its new key value. + */ + swap(curr->vruntime, se->vruntime); +- resched_curr(rq); ++ resched_curr_lazy(rq); + } + + se->vruntime -= cfs_rq->min_vruntime; +@@ -10940,7 +10940,7 @@ + */ + if (rq->curr == p) { + if (p->prio > oldprio) +- resched_curr(rq); ++ resched_curr_lazy(rq); + } else + check_preempt_curr(rq, p, 0); + } +diff -Naur --no-dereference a/kernel/sched/features.h b/kernel/sched/features.h +--- a/kernel/sched/features.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/sched/features.h 2024-11-24 20:19:38.248228962 -0500 +@@ -45,11 +45,19 @@ + */ + SCHED_FEAT(NONTASK_CAPACITY, true) + ++#ifdef CONFIG_PREEMPT_RT ++SCHED_FEAT(TTWU_QUEUE, false) ++# ifdef CONFIG_PREEMPT_LAZY ++SCHED_FEAT(PREEMPT_LAZY, true) ++# endif ++#else ++ + /* + * Queue remote wakeups on the target CPU and process them + * using the scheduler IPI. Reduces rq->lock contention/bounces. + */ + SCHED_FEAT(TTWU_QUEUE, true) ++#endif + + /* + * When doing wakeups, attempt to limit superfluous scans of the LLC domain. +diff -Naur --no-dereference a/kernel/sched/rt.c b/kernel/sched/rt.c +--- a/kernel/sched/rt.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/sched/rt.c 2024-11-24 20:19:38.248228962 -0500 +@@ -270,7 +270,7 @@ + static inline bool need_pull_rt_task(struct rq *rq, struct task_struct *prev) + { + /* Try to pull RT tasks here if we lower this rq's prio */ +- return rq->rt.highest_prio.curr > prev->prio; ++ return rq->online && rq->rt.highest_prio.curr > prev->prio; + } + + static inline int rt_overloaded(struct rq *rq) +@@ -1670,7 +1670,7 @@ + static int pick_rt_task(struct rq *rq, struct task_struct *p, int cpu) + { + if (!task_running(rq, p) && +- cpumask_test_cpu(cpu, p->cpus_ptr)) ++ cpumask_test_cpu(cpu, &p->cpus_mask)) + return 1; + + return 0; +@@ -1764,8 +1764,8 @@ + return this_cpu; + } + +- best_cpu = cpumask_first_and(lowest_mask, +- sched_domain_span(sd)); ++ best_cpu = cpumask_any_and_distribute(lowest_mask, ++ sched_domain_span(sd)); + if (best_cpu < nr_cpu_ids) { + rcu_read_unlock(); + return best_cpu; +@@ -1782,7 +1782,7 @@ + if (this_cpu != -1) + return this_cpu; + +- cpu = cpumask_any(lowest_mask); ++ cpu = cpumask_any_distribute(lowest_mask); + if (cpu < nr_cpu_ids) + return cpu; + +@@ -1823,7 +1823,7 @@ + * Also make sure that it wasn't scheduled on its rq. + */ + if (unlikely(task_rq(task) != rq || +- !cpumask_test_cpu(lowest_rq->cpu, task->cpus_ptr) || ++ !cpumask_test_cpu(lowest_rq->cpu, &task->cpus_mask) || + task_running(rq, task) || + !rt_task(task) || + !task_on_rq_queued(task))) { +@@ -1871,7 +1871,7 @@ + * running task can migrate over to a CPU that is running a task + * of lesser priority. + */ +-static int push_rt_task(struct rq *rq) ++static int push_rt_task(struct rq *rq, bool pull) + { + struct task_struct *next_task; + struct rq *lowest_rq; +@@ -1885,6 +1885,39 @@ + return 0; + + retry: ++ if (is_migration_disabled(next_task)) { ++ struct task_struct *push_task = NULL; ++ int cpu; ++ ++ if (!pull) ++ return 0; ++ ++ trace_sched_migrate_pull_tp(next_task); ++ ++ if (rq->push_busy) ++ return 0; ++ ++ cpu = find_lowest_rq(rq->curr); ++ if (cpu == -1 || cpu == rq->cpu) ++ return 0; ++ ++ /* ++ * Given we found a CPU with lower priority than @next_task, ++ * therefore it should be running. However we cannot migrate it ++ * to this other CPU, instead attempt to push the current ++ * running task on this CPU away. ++ */ ++ push_task = get_push_task(rq); ++ if (push_task) { ++ raw_spin_unlock(&rq->lock); ++ stop_one_cpu_nowait(rq->cpu, push_cpu_stop, ++ push_task, &rq->push_work); ++ raw_spin_lock(&rq->lock); ++ } ++ ++ return 0; ++ } ++ + if (WARN_ON(next_task == rq->curr)) + return 0; + +@@ -1939,12 +1972,10 @@ + deactivate_task(rq, next_task, 0); + set_task_cpu(next_task, lowest_rq->cpu); + activate_task(lowest_rq, next_task, 0); +- ret = 1; +- + resched_curr(lowest_rq); ++ ret = 1; + + double_unlock_balance(rq, lowest_rq); +- + out: + put_task_struct(next_task); + +@@ -1954,7 +1985,7 @@ + static void push_rt_tasks(struct rq *rq) + { + /* push_rt_task will return true if it moved an RT */ +- while (push_rt_task(rq)) ++ while (push_rt_task(rq, false)) + ; + } + +@@ -2107,7 +2138,8 @@ + */ + if (has_pushable_tasks(rq)) { + raw_spin_lock(&rq->lock); +- push_rt_tasks(rq); ++ while (push_rt_task(rq, true)) ++ ; + raw_spin_unlock(&rq->lock); + } + +@@ -2132,7 +2164,7 @@ + { + int this_cpu = this_rq->cpu, cpu; + bool resched = false; +- struct task_struct *p; ++ struct task_struct *p, *push_task; + struct rq *src_rq; + int rt_overload_count = rt_overloaded(this_rq); + +@@ -2179,6 +2211,7 @@ + * double_lock_balance, and another CPU could + * alter this_rq + */ ++ push_task = NULL; + double_lock_balance(this_rq, src_rq); + + /* +@@ -2206,11 +2239,15 @@ + if (p->prio < src_rq->curr->prio) + goto skip; + +- resched = true; +- +- deactivate_task(src_rq, p, 0); +- set_task_cpu(p, this_cpu); +- activate_task(this_rq, p, 0); ++ if (is_migration_disabled(p)) { ++ trace_sched_migrate_pull_tp(p); ++ push_task = get_push_task(src_rq); ++ } else { ++ deactivate_task(src_rq, p, 0); ++ set_task_cpu(p, this_cpu); ++ activate_task(this_rq, p, 0); ++ resched = true; ++ } + /* + * We continue with the search, just in + * case there's an even higher prio task +@@ -2220,6 +2257,13 @@ + } + skip: + double_unlock_balance(this_rq, src_rq); ++ ++ if (push_task) { ++ raw_spin_unlock(&this_rq->lock); ++ stop_one_cpu_nowait(src_rq->cpu, push_cpu_stop, ++ push_task, &src_rq->push_work); ++ raw_spin_lock(&this_rq->lock); ++ } + } + + if (resched) +@@ -2468,6 +2512,7 @@ + .rq_offline = rq_offline_rt, + .task_woken = task_woken_rt, + .switched_from = switched_from_rt, ++ .find_lock_rq = find_lock_lowest_rq, + #endif + + .task_tick = task_tick_rt, +diff -Naur --no-dereference a/kernel/sched/sched.h b/kernel/sched/sched.h +--- a/kernel/sched/sched.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/sched/sched.h 2024-11-24 20:19:38.248228962 -0500 +@@ -975,6 +975,7 @@ + unsigned long cpu_capacity_orig; + + struct callback_head *balance_callback; ++ unsigned char balance_flags; + + unsigned char nohz_idle_balance; + unsigned char idle_balance; +@@ -1005,6 +1006,10 @@ + + /* This is used to determine avg_idle's max value */ + u64 max_idle_balance_cost; ++ ++#ifdef CONFIG_HOTPLUG_CPU ++ struct rcuwait hotplug_wait; ++#endif + #endif /* CONFIG_SMP */ + + #ifdef CONFIG_IRQ_TIME_ACCOUNTING +@@ -1051,6 +1056,12 @@ + /* Must be inspected within a rcu lock section */ + struct cpuidle_state *idle_state; + #endif ++ ++#ifdef CONFIG_SMP ++ unsigned int nr_pinned; ++#endif ++ unsigned int push_busy; ++ struct cpu_stop_work push_work; + }; + + #ifdef CONFIG_FAIR_GROUP_SCHED +@@ -1078,6 +1089,16 @@ + #endif + } + ++#define MDF_PUSH 0x01 ++ ++static inline bool is_migration_disabled(struct task_struct *p) ++{ ++#ifdef CONFIG_SMP ++ return p->migration_disabled; ++#else ++ return false; ++#endif ++} + + #ifdef CONFIG_SCHED_SMT + extern void __update_idle_core(struct rq *rq); +@@ -1224,6 +1245,9 @@ + rq->clock_update_flags &= (RQCF_REQ_SKIP|RQCF_ACT_SKIP); + rf->clock_update_flags = 0; + #endif ++#ifdef CONFIG_SMP ++ SCHED_WARN_ON(rq->balance_callback); ++#endif + } + + static inline void rq_unpin_lock(struct rq *rq, struct rq_flags *rf) +@@ -1385,6 +1409,9 @@ + + #ifdef CONFIG_SMP + ++#define BALANCE_WORK 0x01 ++#define BALANCE_PUSH 0x02 ++ + static inline void + queue_balance_callback(struct rq *rq, + struct callback_head *head, +@@ -1392,12 +1419,13 @@ + { + lockdep_assert_held(&rq->lock); + +- if (unlikely(head->next)) ++ if (unlikely(head->next || (rq->balance_flags & BALANCE_PUSH))) + return; + + head->func = (void (*)(struct callback_head *))func; + head->next = rq->balance_callback; + rq->balance_callback = head; ++ rq->balance_flags |= BALANCE_WORK; + } + + #define rcu_dereference_check_sched_domain(p) \ +@@ -1724,6 +1752,7 @@ + #define WF_FORK 0x02 /* Child wakeup after fork */ + #define WF_MIGRATED 0x04 /* Internal use, task got migrated */ + #define WF_ON_CPU 0x08 /* Wakee is on_cpu */ ++#define WF_LOCK_SLEEPER 0x10 /* Wakeup spinlock "sleeper" */ + + /* + * To aid in avoiding the subversion of "niceness" due to uneven distribution +@@ -1805,10 +1834,13 @@ + void (*task_woken)(struct rq *this_rq, struct task_struct *task); + + void (*set_cpus_allowed)(struct task_struct *p, +- const struct cpumask *newmask); ++ const struct cpumask *newmask, ++ u32 flags); + + void (*rq_online)(struct rq *rq); + void (*rq_offline)(struct rq *rq); ++ ++ struct rq *(*find_lock_rq)(struct task_struct *p, struct rq *rq); + #endif + + void (*task_tick)(struct rq *rq, struct task_struct *p, int queued); +@@ -1892,13 +1924,38 @@ + extern struct task_struct *pick_next_task_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf); + extern struct task_struct *pick_next_task_idle(struct rq *rq); + ++#define SCA_CHECK 0x01 ++#define SCA_MIGRATE_DISABLE 0x02 ++#define SCA_MIGRATE_ENABLE 0x04 ++ + #ifdef CONFIG_SMP + + extern void update_group_capacity(struct sched_domain *sd, int cpu); + + extern void trigger_load_balance(struct rq *rq); + +-extern void set_cpus_allowed_common(struct task_struct *p, const struct cpumask *new_mask); ++extern void set_cpus_allowed_common(struct task_struct *p, const struct cpumask *new_mask, u32 flags); ++ ++static inline struct task_struct *get_push_task(struct rq *rq) ++{ ++ struct task_struct *p = rq->curr; ++ ++ lockdep_assert_held(&rq->lock); ++ ++ if (rq->push_busy) ++ return NULL; ++ ++ if (p->nr_cpus_allowed == 1) ++ return NULL; ++ ++ if (p->migration_disabled) ++ return NULL; ++ ++ rq->push_busy = true; ++ return get_task_struct(p); ++} ++ ++extern int push_cpu_stop(void *arg); + + #endif + +@@ -1942,6 +1999,15 @@ + extern void resched_curr(struct rq *rq); + extern void resched_cpu(int cpu); + ++#ifdef CONFIG_PREEMPT_LAZY ++extern void resched_curr_lazy(struct rq *rq); ++#else ++static inline void resched_curr_lazy(struct rq *rq) ++{ ++ resched_curr(rq); ++} ++#endif ++ + extern struct rt_bandwidth def_rt_bandwidth; + extern void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 runtime); + +diff -Naur --no-dereference a/kernel/sched/swait.c b/kernel/sched/swait.c +--- a/kernel/sched/swait.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/sched/swait.c 2024-11-24 20:19:38.248228962 -0500 +@@ -64,6 +64,7 @@ + struct swait_queue *curr; + LIST_HEAD(tmp); + ++ WARN_ON(irqs_disabled()); + raw_spin_lock_irq(&q->lock); + list_splice_init(&q->task_list, &tmp); + while (!list_empty(&tmp)) { +diff -Naur --no-dereference a/kernel/sched/topology.c b/kernel/sched/topology.c +--- a/kernel/sched/topology.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/sched/topology.c 2024-11-24 20:19:38.248228962 -0500 +@@ -514,6 +514,7 @@ + rd->rto_cpu = -1; + raw_spin_lock_init(&rd->rto_lock); + init_irq_work(&rd->rto_push_work, rto_push_irq_work_func); ++ atomic_or(IRQ_WORK_HARD_IRQ, &rd->rto_push_work.flags); + #endif + + init_dl_bw(&rd->dl_bw); +diff -Naur --no-dereference a/kernel/signal.c b/kernel/signal.c +--- a/kernel/signal.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/signal.c 2024-11-24 20:19:38.248228962 -0500 +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -404,13 +405,30 @@ + task_set_jobctl_pending(task, mask | JOBCTL_STOP_PENDING); + } + ++static inline struct sigqueue *get_task_cache(struct task_struct *t) ++{ ++ struct sigqueue *q = t->sigqueue_cache; ++ ++ if (cmpxchg(&t->sigqueue_cache, q, NULL) != q) ++ return NULL; ++ return q; ++} ++ ++static inline int put_task_cache(struct task_struct *t, struct sigqueue *q) ++{ ++ if (cmpxchg(&t->sigqueue_cache, NULL, q) == NULL) ++ return 0; ++ return 1; ++} ++ + /* + * allocate a new signal queue record + * - this may be called without locks if and only if t == current, otherwise an + * appropriate lock must be held to stop the target task from exiting + */ + static struct sigqueue * +-__sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, int override_rlimit) ++__sigqueue_do_alloc(int sig, struct task_struct *t, gfp_t flags, ++ int override_rlimit, int fromslab) + { + struct sigqueue *q = NULL; + struct user_struct *user; +@@ -432,7 +450,10 @@ + rcu_read_unlock(); + + if (override_rlimit || likely(sigpending <= task_rlimit(t, RLIMIT_SIGPENDING))) { +- q = kmem_cache_alloc(sigqueue_cachep, flags); ++ if (!fromslab) ++ q = get_task_cache(t); ++ if (!q) ++ q = kmem_cache_alloc(sigqueue_cachep, flags); + } else { + print_dropped_signal(sig); + } +@@ -449,6 +470,13 @@ + return q; + } + ++static struct sigqueue * ++__sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, ++ int override_rlimit) ++{ ++ return __sigqueue_do_alloc(sig, t, flags, override_rlimit, 0); ++} ++ + static void __sigqueue_free(struct sigqueue *q) + { + if (q->flags & SIGQUEUE_PREALLOC) +@@ -458,6 +486,21 @@ + kmem_cache_free(sigqueue_cachep, q); + } + ++static void sigqueue_free_current(struct sigqueue *q) ++{ ++ struct user_struct *up; ++ ++ if (q->flags & SIGQUEUE_PREALLOC) ++ return; ++ ++ up = q->user; ++ if (rt_prio(current->normal_prio) && !put_task_cache(current, q)) { ++ if (atomic_dec_and_test(&up->sigpending)) ++ free_uid(up); ++ } else ++ __sigqueue_free(q); ++} ++ + void flush_sigqueue(struct sigpending *queue) + { + struct sigqueue *q; +@@ -471,6 +514,21 @@ + } + + /* ++ * Called from __exit_signal. Flush tsk->pending and ++ * tsk->sigqueue_cache ++ */ ++void flush_task_sigqueue(struct task_struct *tsk) ++{ ++ struct sigqueue *q; ++ ++ flush_sigqueue(&tsk->pending); ++ ++ q = get_task_cache(tsk); ++ if (q) ++ kmem_cache_free(sigqueue_cachep, q); ++} ++ ++/* + * Flush all pending signals for this kthread. + */ + void flush_signals(struct task_struct *t) +@@ -594,7 +652,7 @@ + (info->si_code == SI_TIMER) && + (info->si_sys_private); + +- __sigqueue_free(first); ++ sigqueue_free_current(first); + } else { + /* + * Ok, it wasn't in the queue. This must be +@@ -631,6 +689,8 @@ + bool resched_timer = false; + int signr; + ++ WARN_ON_ONCE(tsk != current); ++ + /* We only dequeue private signals from ourselves, we don't let + * signalfd steal them + */ +@@ -1314,6 +1374,34 @@ + struct k_sigaction *action; + int sig = info->si_signo; + ++ /* ++ * On some archs, PREEMPT_RT has to delay sending a signal from a trap ++ * since it can not enable preemption, and the signal code's spin_locks ++ * turn into mutexes. Instead, it must set TIF_NOTIFY_RESUME which will ++ * send the signal on exit of the trap. ++ */ ++#ifdef ARCH_RT_DELAYS_SIGNAL_SEND ++ if (in_atomic()) { ++ struct task_struct *t = current; ++ ++ if (WARN_ON_ONCE(t->forced_info.si_signo)) ++ return 0; ++ ++ if (is_si_special(info)) { ++ WARN_ON_ONCE(info != SEND_SIG_PRIV); ++ t->forced_info.si_signo = info->si_signo; ++ t->forced_info.si_errno = 0; ++ t->forced_info.si_code = SI_KERNEL; ++ t->forced_info.si_pid = 0; ++ t->forced_info.si_uid = 0; ++ } else { ++ t->forced_info = *info; ++ } ++ ++ set_tsk_thread_flag(t, TIF_NOTIFY_RESUME); ++ return 0; ++ } ++#endif + spin_lock_irqsave(&t->sighand->siglock, flags); + action = &t->sighand->action[sig-1]; + ignored = action->sa.sa_handler == SIG_IGN; +@@ -1807,7 +1895,8 @@ + */ + struct sigqueue *sigqueue_alloc(void) + { +- struct sigqueue *q = __sigqueue_alloc(-1, current, GFP_KERNEL, 0); ++ /* Preallocated sigqueue objects always from the slabcache ! */ ++ struct sigqueue *q = __sigqueue_do_alloc(-1, current, GFP_KERNEL, 0, 1); + + if (q) + q->flags |= SIGQUEUE_PREALLOC; +@@ -2193,16 +2282,8 @@ + if (gstop_done && ptrace_reparented(current)) + do_notify_parent_cldstop(current, false, why); + +- /* +- * Don't want to allow preemption here, because +- * sys_ptrace() needs this task to be inactive. +- * +- * XXX: implement read_unlock_no_resched(). +- */ +- preempt_disable(); + read_unlock(&tasklist_lock); + cgroup_enter_frozen(); +- preempt_enable_no_resched(); + freezable_schedule(); + cgroup_leave_frozen(true); + } else { +diff -Naur --no-dereference a/kernel/smp.c b/kernel/smp.c +--- a/kernel/smp.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/smp.c 2024-11-24 20:19:38.248228962 -0500 +@@ -450,8 +450,18 @@ + + local_irq_save(flags); + flush_smp_call_function_queue(true); +- if (local_softirq_pending()) +- do_softirq(); ++ ++ if (local_softirq_pending()) { ++ ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) { ++ do_softirq(); ++ } else { ++ struct task_struct *ksoftirqd = this_cpu_ksoftirqd(); ++ ++ if (ksoftirqd && ksoftirqd->state != TASK_RUNNING) ++ wake_up_process(ksoftirqd); ++ } ++ } + + local_irq_restore(flags); + } +diff -Naur --no-dereference a/kernel/softirq.c b/kernel/softirq.c +--- a/kernel/softirq.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/softirq.c 2024-11-24 20:19:38.248228962 -0500 +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -25,6 +26,7 @@ + #include + #include + #include ++#include + + #define CREATE_TRACE_POINTS + #include +@@ -92,30 +94,215 @@ + !__kthread_should_park(tsk); + } + ++#ifdef CONFIG_TRACE_IRQFLAGS ++DEFINE_PER_CPU(int, hardirqs_enabled); ++DEFINE_PER_CPU(int, hardirq_context); ++EXPORT_PER_CPU_SYMBOL_GPL(hardirqs_enabled); ++EXPORT_PER_CPU_SYMBOL_GPL(hardirq_context); ++#endif ++ + /* +- * preempt_count and SOFTIRQ_OFFSET usage: +- * - preempt_count is changed by SOFTIRQ_OFFSET on entering or leaving +- * softirq processing. +- * - preempt_count is changed by SOFTIRQ_DISABLE_OFFSET (= 2 * SOFTIRQ_OFFSET) ++ * SOFTIRQ_OFFSET usage: ++ * ++ * On !RT kernels 'count' is the preempt counter, on RT kernels this applies ++ * to a per CPU counter and to task::softirqs_disabled_cnt. ++ * ++ * - count is changed by SOFTIRQ_OFFSET on entering or leaving softirq ++ * processing. ++ * ++ * - count is changed by SOFTIRQ_DISABLE_OFFSET (= 2 * SOFTIRQ_OFFSET) + * on local_bh_disable or local_bh_enable. ++ * + * This lets us distinguish between whether we are currently processing + * softirq and whether we just have bh disabled. + */ ++#ifdef CONFIG_PREEMPT_RT + + /* +- * This one is for softirq.c-internal use, +- * where hardirqs are disabled legitimately: ++ * RT accounts for BH disabled sections in task::softirqs_disabled_cnt and ++ * also in per CPU softirq_ctrl::cnt. This is necessary to allow tasks in a ++ * softirq disabled section to be preempted. ++ * ++ * The per task counter is used for softirq_count(), in_softirq() and ++ * in_serving_softirqs() because these counts are only valid when the task ++ * holding softirq_ctrl::lock is running. ++ * ++ * The per CPU counter prevents pointless wakeups of ksoftirqd in case that ++ * the task which is in a softirq disabled section is preempted or blocks. + */ +-#ifdef CONFIG_TRACE_IRQFLAGS ++struct softirq_ctrl { ++ local_lock_t lock; ++ int cnt; ++}; + +-DEFINE_PER_CPU(int, hardirqs_enabled); +-DEFINE_PER_CPU(int, hardirq_context); +-EXPORT_PER_CPU_SYMBOL_GPL(hardirqs_enabled); +-EXPORT_PER_CPU_SYMBOL_GPL(hardirq_context); ++static DEFINE_PER_CPU(struct softirq_ctrl, softirq_ctrl) = { ++ .lock = INIT_LOCAL_LOCK(softirq_ctrl.lock), ++}; ++ ++/** ++ * local_bh_blocked() - Check for idle whether BH processing is blocked ++ * ++ * Returns false if the per CPU softirq::cnt is 0 otherwise true. ++ * ++ * This is invoked from the idle task to guard against false positive ++ * softirq pending warnings, which would happen when the task which holds ++ * softirq_ctrl::lock was the only running task on the CPU and blocks on ++ * some other lock. ++ */ ++bool local_bh_blocked(void) ++{ ++ return __this_cpu_read(softirq_ctrl.cnt) != 0; ++} + + void __local_bh_disable_ip(unsigned long ip, unsigned int cnt) + { + unsigned long flags; ++ int newcnt; ++ ++ WARN_ON_ONCE(in_hardirq()); ++ ++ /* First entry of a task into a BH disabled section? */ ++ if (!current->softirq_disable_cnt) { ++ if (preemptible()) { ++ local_lock(&softirq_ctrl.lock); ++ /* Required to meet the RCU bottomhalf requirements. */ ++ rcu_read_lock(); ++ } else { ++ DEBUG_LOCKS_WARN_ON(this_cpu_read(softirq_ctrl.cnt)); ++ } ++ } ++ ++ /* ++ * Track the per CPU softirq disabled state. On RT this is per CPU ++ * state to allow preemption of bottom half disabled sections. ++ */ ++ newcnt = __this_cpu_add_return(softirq_ctrl.cnt, cnt); ++ /* ++ * Reflect the result in the task state to prevent recursion on the ++ * local lock and to make softirq_count() & al work. ++ */ ++ current->softirq_disable_cnt = newcnt; ++ ++ if (IS_ENABLED(CONFIG_TRACE_IRQFLAGS) && newcnt == cnt) { ++ raw_local_irq_save(flags); ++ lockdep_softirqs_off(ip); ++ raw_local_irq_restore(flags); ++ } ++} ++EXPORT_SYMBOL(__local_bh_disable_ip); ++ ++static void __local_bh_enable(unsigned int cnt, bool unlock) ++{ ++ unsigned long flags; ++ int newcnt; ++ ++ DEBUG_LOCKS_WARN_ON(current->softirq_disable_cnt != ++ this_cpu_read(softirq_ctrl.cnt)); ++ ++ if (IS_ENABLED(CONFIG_TRACE_IRQFLAGS) && softirq_count() == cnt) { ++ raw_local_irq_save(flags); ++ lockdep_softirqs_on(_RET_IP_); ++ raw_local_irq_restore(flags); ++ } ++ ++ newcnt = __this_cpu_sub_return(softirq_ctrl.cnt, cnt); ++ current->softirq_disable_cnt = newcnt; ++ ++ if (!newcnt && unlock) { ++ rcu_read_unlock(); ++ local_unlock(&softirq_ctrl.lock); ++ } ++} ++ ++void __local_bh_enable_ip(unsigned long ip, unsigned int cnt) ++{ ++ bool preempt_on = preemptible(); ++ unsigned long flags; ++ u32 pending; ++ int curcnt; ++ ++ WARN_ON_ONCE(in_irq()); ++ lockdep_assert_irqs_enabled(); ++ ++ local_irq_save(flags); ++ curcnt = __this_cpu_read(softirq_ctrl.cnt); ++ ++ /* ++ * If this is not reenabling soft interrupts, no point in trying to ++ * run pending ones. ++ */ ++ if (curcnt != cnt) ++ goto out; ++ ++ pending = local_softirq_pending(); ++ if (!pending || ksoftirqd_running(pending)) ++ goto out; ++ ++ /* ++ * If this was called from non preemptible context, wake up the ++ * softirq daemon. ++ */ ++ if (!preempt_on) { ++ wakeup_softirqd(); ++ goto out; ++ } ++ ++ /* ++ * Adjust softirq count to SOFTIRQ_OFFSET which makes ++ * in_serving_softirq() become true. ++ */ ++ cnt = SOFTIRQ_OFFSET; ++ __local_bh_enable(cnt, false); ++ __do_softirq(); ++ ++out: ++ __local_bh_enable(cnt, preempt_on); ++ local_irq_restore(flags); ++} ++EXPORT_SYMBOL(__local_bh_enable_ip); ++ ++/* ++ * Invoked from ksoftirqd_run() outside of the interrupt disabled section ++ * to acquire the per CPU local lock for reentrancy protection. ++ */ ++static inline void ksoftirqd_run_begin(void) ++{ ++ __local_bh_disable_ip(_RET_IP_, SOFTIRQ_OFFSET); ++ local_irq_disable(); ++} ++ ++/* Counterpart to ksoftirqd_run_begin() */ ++static inline void ksoftirqd_run_end(void) ++{ ++ __local_bh_enable(SOFTIRQ_OFFSET, true); ++ WARN_ON_ONCE(in_interrupt()); ++ local_irq_enable(); ++} ++ ++static inline void softirq_handle_begin(void) { } ++static inline void softirq_handle_end(void) { } ++ ++static inline bool should_wake_ksoftirqd(void) ++{ ++ return !this_cpu_read(softirq_ctrl.cnt); ++} ++ ++static inline void invoke_softirq(void) ++{ ++ if (should_wake_ksoftirqd()) ++ wakeup_softirqd(); ++} ++ ++#else /* CONFIG_PREEMPT_RT */ ++ ++/* ++ * This one is for softirq.c-internal use, where hardirqs are disabled ++ * legitimately: ++ */ ++#ifdef CONFIG_TRACE_IRQFLAGS ++void __local_bh_disable_ip(unsigned long ip, unsigned int cnt) ++{ ++ unsigned long flags; + + WARN_ON_ONCE(in_irq()); + +@@ -203,6 +390,78 @@ + } + EXPORT_SYMBOL(__local_bh_enable_ip); + ++static inline void softirq_handle_begin(void) ++{ ++ __local_bh_disable_ip(_RET_IP_, SOFTIRQ_OFFSET); ++} ++ ++static inline void softirq_handle_end(void) ++{ ++ __local_bh_enable(SOFTIRQ_OFFSET); ++ WARN_ON_ONCE(in_interrupt()); ++} ++ ++static inline void ksoftirqd_run_begin(void) ++{ ++ local_irq_disable(); ++} ++ ++static inline void ksoftirqd_run_end(void) ++{ ++ local_irq_enable(); ++} ++ ++static inline bool should_wake_ksoftirqd(void) ++{ ++ return true; ++} ++ ++static inline void invoke_softirq(void) ++{ ++ if (ksoftirqd_running(local_softirq_pending())) ++ return; ++ ++ if (!force_irqthreads) { ++#ifdef CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK ++ /* ++ * We can safely execute softirq on the current stack if ++ * it is the irq stack, because it should be near empty ++ * at this stage. ++ */ ++ __do_softirq(); ++#else ++ /* ++ * Otherwise, irq_exit() is called on the task stack that can ++ * be potentially deep already. So call softirq in its own stack ++ * to prevent from any overrun. ++ */ ++ do_softirq_own_stack(); ++#endif ++ } else { ++ wakeup_softirqd(); ++ } ++} ++ ++asmlinkage __visible void do_softirq(void) ++{ ++ __u32 pending; ++ unsigned long flags; ++ ++ if (in_interrupt()) ++ return; ++ ++ local_irq_save(flags); ++ ++ pending = local_softirq_pending(); ++ ++ if (pending && !ksoftirqd_running(pending)) ++ do_softirq_own_stack(); ++ ++ local_irq_restore(flags); ++} ++ ++#endif /* !CONFIG_PREEMPT_RT */ ++ + /* + * We restart softirq processing for at most MAX_SOFTIRQ_RESTART times, + * but break the loop if need_resched() is set or after 2 ms. +@@ -270,10 +529,10 @@ + current->flags &= ~PF_MEMALLOC; + + pending = local_softirq_pending(); +- account_irq_enter_time(current); + +- __local_bh_disable_ip(_RET_IP_, SOFTIRQ_OFFSET); ++ softirq_handle_begin(); + in_hardirq = lockdep_softirq_start(); ++ account_softirq_enter(current); + + restart: + /* Reset the pending bitmask before enabling irqs */ +@@ -307,8 +566,10 @@ + pending >>= softirq_bit; + } + +- if (__this_cpu_read(ksoftirqd) == current) ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT) && ++ __this_cpu_read(ksoftirqd) == current) + rcu_softirq_qs(); ++ + local_irq_disable(); + + pending = local_softirq_pending(); +@@ -320,46 +581,23 @@ + wakeup_softirqd(); + } + ++ account_softirq_exit(current); + lockdep_softirq_end(in_hardirq); +- account_irq_exit_time(current); +- __local_bh_enable(SOFTIRQ_OFFSET); +- WARN_ON_ONCE(in_interrupt()); ++ softirq_handle_end(); + current_restore_flags(old_flags, PF_MEMALLOC); + } + +-asmlinkage __visible void do_softirq(void) +-{ +- __u32 pending; +- unsigned long flags; +- +- if (in_interrupt()) +- return; +- +- local_irq_save(flags); +- +- pending = local_softirq_pending(); +- +- if (pending && !ksoftirqd_running(pending)) +- do_softirq_own_stack(); +- +- local_irq_restore(flags); +-} +- + /** + * irq_enter_rcu - Enter an interrupt context with RCU watching + */ + void irq_enter_rcu(void) + { +- if (is_idle_task(current) && !in_interrupt()) { +- /* +- * Prevent raise_softirq from needlessly waking up ksoftirqd +- * here, as softirq will be serviced on return from interrupt. +- */ +- local_bh_disable(); ++ __irq_enter_raw(); ++ ++ if (is_idle_task(current) && (irq_count() == HARDIRQ_OFFSET)) + tick_irq_enter(); +- _local_bh_enable(); +- } +- __irq_enter(); ++ ++ account_hardirq_enter(current); + } + + /** +@@ -371,32 +609,6 @@ + irq_enter_rcu(); + } + +-static inline void invoke_softirq(void) +-{ +- if (ksoftirqd_running(local_softirq_pending())) +- return; +- +- if (!force_irqthreads) { +-#ifdef CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK +- /* +- * We can safely execute softirq on the current stack if +- * it is the irq stack, because it should be near empty +- * at this stage. +- */ +- __do_softirq(); +-#else +- /* +- * Otherwise, irq_exit() is called on the task stack that can +- * be potentially deep already. So call softirq in its own stack +- * to prevent from any overrun. +- */ +- do_softirq_own_stack(); +-#endif +- } else { +- wakeup_softirqd(); +- } +-} +- + static inline void tick_irq_exit(void) + { + #ifdef CONFIG_NO_HZ_COMMON +@@ -417,7 +629,7 @@ + #else + lockdep_assert_irqs_disabled(); + #endif +- account_irq_exit_time(current); ++ account_hardirq_exit(current); + preempt_count_sub(HARDIRQ_OFFSET); + if (!in_interrupt() && local_softirq_pending()) + invoke_softirq(); +@@ -466,7 +678,7 @@ + * Otherwise we wake up ksoftirqd to make sure we + * schedule the softirq soon. + */ +- if (!in_interrupt()) ++ if (!in_interrupt() && should_wake_ksoftirqd()) + wakeup_softirqd(); + } + +@@ -532,6 +744,16 @@ + } + EXPORT_SYMBOL(__tasklet_hi_schedule); + ++static inline bool tasklet_clear_sched(struct tasklet_struct *t) ++{ ++ if (test_and_clear_bit(TASKLET_STATE_SCHED, &t->state)) { ++ wake_up_var(&t->state); ++ return true; ++ } ++ ++ return false; ++} ++ + static void tasklet_action_common(struct softirq_action *a, + struct tasklet_head *tl_head, + unsigned int softirq_nr) +@@ -551,8 +773,7 @@ + + if (tasklet_trylock(t)) { + if (!atomic_read(&t->count)) { +- if (!test_and_clear_bit(TASKLET_STATE_SCHED, +- &t->state)) ++ if (!tasklet_clear_sched(t)) + BUG(); + if (t->use_callback) + t->callback(t); +@@ -607,21 +828,62 @@ + } + EXPORT_SYMBOL(tasklet_init); + ++#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT) ++/* ++ * Do not use in new code. Waiting for tasklets from atomic contexts is ++ * error prone and should be avoided. ++ */ ++void tasklet_unlock_spin_wait(struct tasklet_struct *t) ++{ ++ while (test_bit(TASKLET_STATE_RUN, &(t)->state)) { ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) { ++ /* ++ * Prevent a live lock when current preempted soft ++ * interrupt processing or prevents ksoftirqd from ++ * running. If the tasklet runs on a different CPU ++ * then this has no effect other than doing the BH ++ * disable/enable dance for nothing. ++ */ ++ local_bh_disable(); ++ local_bh_enable(); ++ } else { ++ cpu_relax(); ++ } ++ } ++} ++EXPORT_SYMBOL(tasklet_unlock_spin_wait); ++#endif ++ + void tasklet_kill(struct tasklet_struct *t) + { + if (in_interrupt()) + pr_notice("Attempt to kill tasklet from interrupt\n"); + +- while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) { +- do { +- yield(); +- } while (test_bit(TASKLET_STATE_SCHED, &t->state)); +- } ++ while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) ++ wait_var_event(&t->state, !test_bit(TASKLET_STATE_SCHED, &t->state)); ++ + tasklet_unlock_wait(t); +- clear_bit(TASKLET_STATE_SCHED, &t->state); ++ tasklet_clear_sched(t); + } + EXPORT_SYMBOL(tasklet_kill); + ++#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT) ++void tasklet_unlock(struct tasklet_struct *t) ++{ ++ smp_mb__before_atomic(); ++ clear_bit(TASKLET_STATE_RUN, &t->state); ++ smp_mb__after_atomic(); ++ wake_up_var(&t->state); ++} ++EXPORT_SYMBOL_GPL(tasklet_unlock); ++ ++void tasklet_unlock_wait(struct tasklet_struct *t) ++{ ++ wait_var_event(&t->state, !test_bit(TASKLET_STATE_RUN, &t->state)); ++} ++EXPORT_SYMBOL_GPL(tasklet_unlock_wait); ++#endif ++ + void __init softirq_init(void) + { + int cpu; +@@ -644,18 +906,18 @@ + + static void run_ksoftirqd(unsigned int cpu) + { +- local_irq_disable(); ++ ksoftirqd_run_begin(); + if (local_softirq_pending()) { + /* + * We can safely run softirq on inline stack, as we are not deep + * in the task stack here. + */ + __do_softirq(); +- local_irq_enable(); ++ ksoftirqd_run_end(); + cond_resched(); + return; + } +- local_irq_enable(); ++ ksoftirqd_run_end(); + } + + #ifdef CONFIG_HOTPLUG_CPU +diff -Naur --no-dereference a/kernel/stop_machine.c b/kernel/stop_machine.c +--- a/kernel/stop_machine.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/stop_machine.c 2024-11-24 20:19:38.249228964 -0500 +@@ -42,11 +42,27 @@ + struct list_head works; /* list of pending works */ + + struct cpu_stop_work stop_work; /* for stop_cpus */ ++ unsigned long caller; ++ cpu_stop_fn_t fn; + }; + + static DEFINE_PER_CPU(struct cpu_stopper, cpu_stopper); + static bool stop_machine_initialized = false; + ++void print_stop_info(const char *log_lvl, struct task_struct *task) ++{ ++ /* ++ * If @task is a stopper task, it cannot migrate and task_cpu() is ++ * stable. ++ */ ++ struct cpu_stopper *stopper = per_cpu_ptr(&cpu_stopper, task_cpu(task)); ++ ++ if (task != stopper->thread) ++ return; ++ ++ printk("%sStopper: %pS <- %pS\n", log_lvl, stopper->fn, (void *)stopper->caller); ++} ++ + /* static data for stop_cpus */ + static DEFINE_MUTEX(stop_cpus_mutex); + static bool stop_cpus_in_progress; +@@ -123,7 +139,7 @@ + int stop_one_cpu(unsigned int cpu, cpu_stop_fn_t fn, void *arg) + { + struct cpu_stop_done done; +- struct cpu_stop_work work = { .fn = fn, .arg = arg, .done = &done }; ++ struct cpu_stop_work work = { .fn = fn, .arg = arg, .done = &done, .caller = _RET_IP_ }; + + cpu_stop_init_done(&done, 1); + if (!cpu_stop_queue_work(cpu, &work)) +@@ -331,7 +347,8 @@ + work1 = work2 = (struct cpu_stop_work){ + .fn = multi_cpu_stop, + .arg = &msdata, +- .done = &done ++ .done = &done, ++ .caller = _RET_IP_, + }; + + cpu_stop_init_done(&done, 2); +@@ -367,7 +384,7 @@ + bool stop_one_cpu_nowait(unsigned int cpu, cpu_stop_fn_t fn, void *arg, + struct cpu_stop_work *work_buf) + { +- *work_buf = (struct cpu_stop_work){ .fn = fn, .arg = arg, }; ++ *work_buf = (struct cpu_stop_work){ .fn = fn, .arg = arg, .caller = _RET_IP_, }; + return cpu_stop_queue_work(cpu, work_buf); + } + +@@ -487,6 +504,8 @@ + int ret; + + /* cpu stop callbacks must not sleep, make in_atomic() == T */ ++ stopper->caller = work->caller; ++ stopper->fn = fn; + preempt_count_inc(); + ret = fn(arg); + if (done) { +@@ -495,6 +514,8 @@ + cpu_stop_signal_done(done); + } + preempt_count_dec(); ++ stopper->fn = NULL; ++ stopper->caller = 0; + WARN_ONCE(preempt_count(), + "cpu_stop: %ps(%p) leaked preempt count\n", fn, arg); + goto repeat; +diff -Naur --no-dereference a/kernel/task_work.c b/kernel/task_work.c +--- a/kernel/task_work.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/task_work.c 2024-11-24 20:19:38.249228964 -0500 +@@ -164,3 +164,4 @@ + } while (work); + } + } ++EXPORT_SYMBOL_GPL(task_work_run); +diff -Naur --no-dereference a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c +--- a/kernel/time/hrtimer.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/time/hrtimer.c 2024-11-24 20:19:38.249228964 -0500 +@@ -2052,6 +2052,36 @@ + } + #endif + ++#ifdef CONFIG_PREEMPT_RT ++/* ++ * Sleep for 1 ms in hope whoever holds what we want will let it go. ++ */ ++void cpu_chill(void) ++{ ++ unsigned int freeze_flag = current->flags & PF_NOFREEZE; ++ struct task_struct *self = current; ++ ktime_t chill_time; ++ ++ raw_spin_lock_irq(&self->pi_lock); ++ self->saved_state = self->state; ++ __set_current_state_no_track(TASK_UNINTERRUPTIBLE); ++ raw_spin_unlock_irq(&self->pi_lock); ++ ++ chill_time = ktime_set(0, NSEC_PER_MSEC); ++ ++ current->flags |= PF_NOFREEZE; ++ schedule_hrtimeout(&chill_time, HRTIMER_MODE_REL_HARD); ++ if (!freeze_flag) ++ current->flags &= ~PF_NOFREEZE; ++ ++ raw_spin_lock_irq(&self->pi_lock); ++ __set_current_state_no_track(self->saved_state); ++ self->saved_state = TASK_RUNNING; ++ raw_spin_unlock_irq(&self->pi_lock); ++} ++EXPORT_SYMBOL(cpu_chill); ++#endif ++ + /* + * Functions related to boot-time initialization: + */ +diff -Naur --no-dereference a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c +--- a/kernel/time/tick-sched.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/time/tick-sched.c 2024-11-24 20:19:38.249228964 -0500 +@@ -924,7 +924,7 @@ + if (unlikely(local_softirq_pending())) { + static int ratelimit; + +- if (ratelimit < 10 && ++ if (ratelimit < 10 && !local_bh_blocked() && + (local_softirq_pending() & SOFTIRQ_STOP_IDLE_MASK)) { + pr_warn("NOHZ tick-stop error: Non-RCU local softirq work is pending, handler #%02x!!!\n", + (unsigned int) local_softirq_pending()); +diff -Naur --no-dereference a/kernel/time/timer.c b/kernel/time/timer.c +--- a/kernel/time/timer.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/time/timer.c 2024-11-24 20:19:38.249228964 -0500 +@@ -1287,7 +1287,7 @@ + u32 tf; + + tf = READ_ONCE(timer->flags); +- if (!(tf & TIMER_MIGRATING)) { ++ if (!(tf & (TIMER_MIGRATING | TIMER_IRQSAFE))) { + struct timer_base *base = get_timer_base(tf); + + /* +@@ -1371,6 +1371,13 @@ + */ + WARN_ON(in_irq() && !(timer->flags & TIMER_IRQSAFE)); + ++ /* ++ * Must be able to sleep on PREEMPT_RT because of the slowpath in ++ * del_timer_wait_running(). ++ */ ++ if (IS_ENABLED(CONFIG_PREEMPT_RT) && !(timer->flags & TIMER_IRQSAFE)) ++ lockdep_assert_preemption_enabled(); ++ + do { + ret = try_to_del_timer_sync(timer); + +diff -Naur --no-dereference a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c +--- a/kernel/trace/blktrace.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/blktrace.c 2024-11-24 20:19:38.249228964 -0500 +@@ -72,17 +72,17 @@ + struct blk_io_trace *t; + struct ring_buffer_event *event = NULL; + struct trace_buffer *buffer = NULL; +- int pc = 0; ++ unsigned int trace_ctx = 0; + int cpu = smp_processor_id(); + bool blk_tracer = blk_tracer_enabled; + ssize_t cgid_len = cgid ? sizeof(cgid) : 0; + + if (blk_tracer) { + buffer = blk_tr->array_buffer.buffer; +- pc = preempt_count(); ++ trace_ctx = tracing_gen_ctx_flags(0); + event = trace_buffer_lock_reserve(buffer, TRACE_BLK, + sizeof(*t) + len + cgid_len, +- 0, pc); ++ trace_ctx); + if (!event) + return; + t = ring_buffer_event_data(event); +@@ -107,7 +107,7 @@ + memcpy((void *) t + sizeof(*t) + cgid_len, data, len); + + if (blk_tracer) +- trace_buffer_unlock_commit(blk_tr, buffer, event, 0, pc); ++ trace_buffer_unlock_commit(blk_tr, buffer, event, trace_ctx); + } + } + +@@ -222,8 +222,9 @@ + struct blk_io_trace *t; + unsigned long flags = 0; + unsigned long *sequence; ++ unsigned int trace_ctx = 0; + pid_t pid; +- int cpu, pc = 0; ++ int cpu; + bool blk_tracer = blk_tracer_enabled; + ssize_t cgid_len = cgid ? sizeof(cgid) : 0; + +@@ -252,10 +253,10 @@ + tracing_record_cmdline(current); + + buffer = blk_tr->array_buffer.buffer; +- pc = preempt_count(); ++ trace_ctx = tracing_gen_ctx_flags(0); + event = trace_buffer_lock_reserve(buffer, TRACE_BLK, + sizeof(*t) + pdu_len + cgid_len, +- 0, pc); ++ trace_ctx); + if (!event) + return; + t = ring_buffer_event_data(event); +@@ -301,7 +302,7 @@ + memcpy((void *)t + sizeof(*t) + cgid_len, pdu_data, pdu_len); + + if (blk_tracer) { +- trace_buffer_unlock_commit(blk_tr, buffer, event, 0, pc); ++ trace_buffer_unlock_commit(blk_tr, buffer, event, trace_ctx); + return; + } + } +diff -Naur --no-dereference a/kernel/trace/trace_branch.c b/kernel/trace/trace_branch.c +--- a/kernel/trace/trace_branch.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_branch.c 2024-11-24 20:19:38.250228965 -0500 +@@ -37,7 +37,7 @@ + struct ring_buffer_event *event; + struct trace_branch *entry; + unsigned long flags; +- int pc; ++ unsigned int trace_ctx; + const char *p; + + if (current->trace_recursion & TRACE_BRANCH_BIT) +@@ -59,10 +59,10 @@ + if (atomic_read(&data->disabled)) + goto out; + +- pc = preempt_count(); ++ trace_ctx = tracing_gen_ctx_flags(flags); + buffer = tr->array_buffer.buffer; + event = trace_buffer_lock_reserve(buffer, TRACE_BRANCH, +- sizeof(*entry), flags, pc); ++ sizeof(*entry), trace_ctx); + if (!event) + goto out; + +diff -Naur --no-dereference a/kernel/trace/trace.c b/kernel/trace/trace.c +--- a/kernel/trace/trace.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace.c 2024-11-24 20:19:38.249228964 -0500 +@@ -176,7 +176,7 @@ + int tracing_set_tracer(struct trace_array *tr, const char *buf); + static void ftrace_trace_userstack(struct trace_array *tr, + struct trace_buffer *buffer, +- unsigned long flags, int pc); ++ unsigned int trace_ctx); + + #define MAX_TRACER_SIZE 100 + static char bootup_tracer_buf[MAX_TRACER_SIZE] __initdata; +@@ -909,23 +909,23 @@ + + #ifdef CONFIG_STACKTRACE + static void __ftrace_trace_stack(struct trace_buffer *buffer, +- unsigned long flags, +- int skip, int pc, struct pt_regs *regs); ++ unsigned int trace_ctx, ++ int skip, struct pt_regs *regs); + static inline void ftrace_trace_stack(struct trace_array *tr, + struct trace_buffer *buffer, +- unsigned long flags, +- int skip, int pc, struct pt_regs *regs); ++ unsigned int trace_ctx, ++ int skip, struct pt_regs *regs); + + #else + static inline void __ftrace_trace_stack(struct trace_buffer *buffer, +- unsigned long flags, +- int skip, int pc, struct pt_regs *regs) ++ unsigned int trace_ctx, ++ int skip, struct pt_regs *regs) + { + } + static inline void ftrace_trace_stack(struct trace_array *tr, + struct trace_buffer *buffer, +- unsigned long flags, +- int skip, int pc, struct pt_regs *regs) ++ unsigned long trace_ctx, ++ int skip, struct pt_regs *regs) + { + } + +@@ -933,24 +933,24 @@ + + static __always_inline void + trace_event_setup(struct ring_buffer_event *event, +- int type, unsigned long flags, int pc) ++ int type, unsigned int trace_ctx) + { + struct trace_entry *ent = ring_buffer_event_data(event); + +- tracing_generic_entry_update(ent, type, flags, pc); ++ tracing_generic_entry_update(ent, type, trace_ctx); + } + + static __always_inline struct ring_buffer_event * + __trace_buffer_lock_reserve(struct trace_buffer *buffer, + int type, + unsigned long len, +- unsigned long flags, int pc) ++ unsigned int trace_ctx) + { + struct ring_buffer_event *event; + + event = ring_buffer_lock_reserve(buffer, len); + if (event != NULL) +- trace_event_setup(event, type, flags, pc); ++ trace_event_setup(event, type, trace_ctx); + + return event; + } +@@ -1011,25 +1011,22 @@ + struct ring_buffer_event *event; + struct trace_buffer *buffer; + struct print_entry *entry; +- unsigned long irq_flags; ++ unsigned int trace_ctx; + int alloc; +- int pc; + + if (!(global_trace.trace_flags & TRACE_ITER_PRINTK)) + return 0; + +- pc = preempt_count(); +- + if (unlikely(tracing_selftest_running || tracing_disabled)) + return 0; + + alloc = sizeof(*entry) + size + 2; /* possible \n added */ + +- local_save_flags(irq_flags); ++ trace_ctx = tracing_gen_ctx(); + buffer = global_trace.array_buffer.buffer; + ring_buffer_nest_start(buffer); +- event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc, +- irq_flags, pc); ++ event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc, ++ trace_ctx); + if (!event) { + size = 0; + goto out; +@@ -1048,7 +1045,7 @@ + entry->buf[size] = '\0'; + + __buffer_unlock_commit(buffer, event); +- ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL); ++ ftrace_trace_stack(&global_trace, buffer, trace_ctx, 4, NULL); + out: + ring_buffer_nest_end(buffer); + return size; +@@ -1065,25 +1062,22 @@ + struct ring_buffer_event *event; + struct trace_buffer *buffer; + struct bputs_entry *entry; +- unsigned long irq_flags; ++ unsigned int trace_ctx; + int size = sizeof(struct bputs_entry); + int ret = 0; +- int pc; + + if (!(global_trace.trace_flags & TRACE_ITER_PRINTK)) + return 0; + +- pc = preempt_count(); +- + if (unlikely(tracing_selftest_running || tracing_disabled)) + return 0; + +- local_save_flags(irq_flags); ++ trace_ctx = tracing_gen_ctx(); + buffer = global_trace.array_buffer.buffer; + + ring_buffer_nest_start(buffer); + event = __trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size, +- irq_flags, pc); ++ trace_ctx); + if (!event) + goto out; + +@@ -1092,7 +1086,7 @@ + entry->str = str; + + __buffer_unlock_commit(buffer, event); +- ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL); ++ ftrace_trace_stack(&global_trace, buffer, trace_ctx, 4, NULL); + + ret = 1; + out: +@@ -2613,36 +2607,52 @@ + } + EXPORT_SYMBOL_GPL(trace_handle_return); + +-void +-tracing_generic_entry_update(struct trace_entry *entry, unsigned short type, +- unsigned long flags, int pc) ++static unsigned short migration_disable_value(void) + { +- struct task_struct *tsk = current; +- +- entry->preempt_count = pc & 0xff; +- entry->pid = (tsk) ? tsk->pid : 0; +- entry->type = type; +- entry->flags = +-#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT +- (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) | ++#if defined(CONFIG_SMP) && defined(CONFIG_PREEMPT_RT) ++ return current->migration_disabled; + #else +- TRACE_FLAG_IRQS_NOSUPPORT | ++ return 0; + #endif +- ((pc & NMI_MASK ) ? TRACE_FLAG_NMI : 0) | +- ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) | +- ((pc & SOFTIRQ_OFFSET) ? TRACE_FLAG_SOFTIRQ : 0) | +- (tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) | +- (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0); + } +-EXPORT_SYMBOL_GPL(tracing_generic_entry_update); ++ ++unsigned int tracing_gen_ctx_irq_test(unsigned int irqs_status) ++{ ++ unsigned int trace_flags = irqs_status; ++ unsigned int pc; ++ ++ pc = preempt_count(); ++ ++ if (pc & NMI_MASK) ++ trace_flags |= TRACE_FLAG_NMI; ++ if (pc & HARDIRQ_MASK) ++ trace_flags |= TRACE_FLAG_HARDIRQ; ++ if (in_serving_softirq()) ++ trace_flags |= TRACE_FLAG_SOFTIRQ; ++ ++ if (tif_need_resched()) ++ trace_flags |= TRACE_FLAG_NEED_RESCHED; ++ if (test_preempt_need_resched()) ++ trace_flags |= TRACE_FLAG_PREEMPT_RESCHED; ++ ++#ifdef CONFIG_PREEMPT_LAZY ++ if (need_resched_lazy()) ++ trace_flags |= TRACE_FLAG_NEED_RESCHED_LAZY; ++#endif ++ ++ return (pc & 0xff) | ++ (migration_disable_value() & 0xff) << 8 | ++ (preempt_lazy_count() & 0xff) << 16 | ++ (trace_flags << 24); ++} + + struct ring_buffer_event * + trace_buffer_lock_reserve(struct trace_buffer *buffer, + int type, + unsigned long len, +- unsigned long flags, int pc) ++ unsigned int trace_ctx) + { +- return __trace_buffer_lock_reserve(buffer, type, len, flags, pc); ++ return __trace_buffer_lock_reserve(buffer, type, len, trace_ctx); + } + + DEFINE_PER_CPU(struct ring_buffer_event *, trace_buffered_event); +@@ -2762,7 +2772,7 @@ + trace_event_buffer_lock_reserve(struct trace_buffer **current_rb, + struct trace_event_file *trace_file, + int type, unsigned long len, +- unsigned long flags, int pc) ++ unsigned int trace_ctx) + { + struct ring_buffer_event *entry; + int val; +@@ -2775,7 +2785,7 @@ + /* Try to use the per cpu buffer first */ + val = this_cpu_inc_return(trace_buffered_event_cnt); + if ((len < (PAGE_SIZE - sizeof(*entry) - sizeof(entry->array[0]))) && val == 1) { +- trace_event_setup(entry, type, flags, pc); ++ trace_event_setup(entry, type, trace_ctx); + entry->array[0] = len; + return entry; + } +@@ -2783,7 +2793,7 @@ + } + + entry = __trace_buffer_lock_reserve(*current_rb, +- type, len, flags, pc); ++ type, len, trace_ctx); + /* + * If tracing is off, but we have triggers enabled + * we still need to look at the event data. Use the temp_buffer +@@ -2792,8 +2802,8 @@ + */ + if (!entry && trace_file->flags & EVENT_FILE_FL_TRIGGER_COND) { + *current_rb = temp_buffer; +- entry = __trace_buffer_lock_reserve(*current_rb, +- type, len, flags, pc); ++ entry = __trace_buffer_lock_reserve(*current_rb, type, len, ++ trace_ctx); + } + return entry; + } +@@ -2879,7 +2889,7 @@ + ftrace_exports(fbuffer->event, TRACE_EXPORT_EVENT); + event_trigger_unlock_commit_regs(fbuffer->trace_file, fbuffer->buffer, + fbuffer->event, fbuffer->entry, +- fbuffer->flags, fbuffer->pc, fbuffer->regs); ++ fbuffer->trace_ctx, fbuffer->regs); + } + EXPORT_SYMBOL_GPL(trace_event_buffer_commit); + +@@ -2895,7 +2905,7 @@ + void trace_buffer_unlock_commit_regs(struct trace_array *tr, + struct trace_buffer *buffer, + struct ring_buffer_event *event, +- unsigned long flags, int pc, ++ unsigned int trace_ctx, + struct pt_regs *regs) + { + __buffer_unlock_commit(buffer, event); +@@ -2906,8 +2916,8 @@ + * and mmiotrace, but that's ok if they lose a function or + * two. They are not that meaningful. + */ +- ftrace_trace_stack(tr, buffer, flags, regs ? 0 : STACK_SKIP, pc, regs); +- ftrace_trace_userstack(tr, buffer, flags, pc); ++ ftrace_trace_stack(tr, buffer, trace_ctx, regs ? 0 : STACK_SKIP, regs); ++ ftrace_trace_userstack(tr, buffer, trace_ctx); + } + + /* +@@ -2921,9 +2931,8 @@ + } + + void +-trace_function(struct trace_array *tr, +- unsigned long ip, unsigned long parent_ip, unsigned long flags, +- int pc) ++trace_function(struct trace_array *tr, unsigned long ip, unsigned long ++ parent_ip, unsigned int trace_ctx) + { + struct trace_event_call *call = &event_function; + struct trace_buffer *buffer = tr->array_buffer.buffer; +@@ -2931,7 +2940,7 @@ + struct ftrace_entry *entry; + + event = __trace_buffer_lock_reserve(buffer, TRACE_FN, sizeof(*entry), +- flags, pc); ++ trace_ctx); + if (!event) + return; + entry = ring_buffer_event_data(event); +@@ -2965,8 +2974,8 @@ + static DEFINE_PER_CPU(int, ftrace_stack_reserve); + + static void __ftrace_trace_stack(struct trace_buffer *buffer, +- unsigned long flags, +- int skip, int pc, struct pt_regs *regs) ++ unsigned int trace_ctx, ++ int skip, struct pt_regs *regs) + { + struct trace_event_call *call = &event_kernel_stack; + struct ring_buffer_event *event; +@@ -3014,7 +3023,7 @@ + size = nr_entries * sizeof(unsigned long); + event = __trace_buffer_lock_reserve(buffer, TRACE_STACK, + (sizeof(*entry) - sizeof(entry->caller)) + size, +- flags, pc); ++ trace_ctx); + if (!event) + goto out; + entry = ring_buffer_event_data(event); +@@ -3035,22 +3044,22 @@ + + static inline void ftrace_trace_stack(struct trace_array *tr, + struct trace_buffer *buffer, +- unsigned long flags, +- int skip, int pc, struct pt_regs *regs) ++ unsigned int trace_ctx, ++ int skip, struct pt_regs *regs) + { + if (!(tr->trace_flags & TRACE_ITER_STACKTRACE)) + return; + +- __ftrace_trace_stack(buffer, flags, skip, pc, regs); ++ __ftrace_trace_stack(buffer, trace_ctx, skip, regs); + } + +-void __trace_stack(struct trace_array *tr, unsigned long flags, int skip, +- int pc) ++void __trace_stack(struct trace_array *tr, unsigned int trace_ctx, ++ int skip) + { + struct trace_buffer *buffer = tr->array_buffer.buffer; + + if (rcu_is_watching()) { +- __ftrace_trace_stack(buffer, flags, skip, pc, NULL); ++ __ftrace_trace_stack(buffer, trace_ctx, skip, NULL); + return; + } + +@@ -3064,7 +3073,7 @@ + return; + + rcu_irq_enter_irqson(); +- __ftrace_trace_stack(buffer, flags, skip, pc, NULL); ++ __ftrace_trace_stack(buffer, trace_ctx, skip, NULL); + rcu_irq_exit_irqson(); + } + +@@ -3074,19 +3083,15 @@ + */ + void trace_dump_stack(int skip) + { +- unsigned long flags; +- + if (tracing_disabled || tracing_selftest_running) + return; + +- local_save_flags(flags); +- + #ifndef CONFIG_UNWINDER_ORC + /* Skip 1 to skip this function. */ + skip++; + #endif + __ftrace_trace_stack(global_trace.array_buffer.buffer, +- flags, skip, preempt_count(), NULL); ++ tracing_gen_ctx(), skip, NULL); + } + EXPORT_SYMBOL_GPL(trace_dump_stack); + +@@ -3095,7 +3100,7 @@ + + static void + ftrace_trace_userstack(struct trace_array *tr, +- struct trace_buffer *buffer, unsigned long flags, int pc) ++ struct trace_buffer *buffer, unsigned int trace_ctx) + { + struct trace_event_call *call = &event_user_stack; + struct ring_buffer_event *event; +@@ -3122,7 +3127,7 @@ + __this_cpu_inc(user_stack_count); + + event = __trace_buffer_lock_reserve(buffer, TRACE_USER_STACK, +- sizeof(*entry), flags, pc); ++ sizeof(*entry), trace_ctx); + if (!event) + goto out_drop_count; + entry = ring_buffer_event_data(event); +@@ -3142,7 +3147,7 @@ + #else /* CONFIG_USER_STACKTRACE_SUPPORT */ + static void ftrace_trace_userstack(struct trace_array *tr, + struct trace_buffer *buffer, +- unsigned long flags, int pc) ++ unsigned int trace_ctx) + { + } + #endif /* !CONFIG_USER_STACKTRACE_SUPPORT */ +@@ -3272,9 +3277,9 @@ + struct trace_buffer *buffer; + struct trace_array *tr = &global_trace; + struct bprint_entry *entry; +- unsigned long flags; ++ unsigned int trace_ctx; + char *tbuffer; +- int len = 0, size, pc; ++ int len = 0, size; + + if (unlikely(tracing_selftest_running || tracing_disabled)) + return 0; +@@ -3282,7 +3287,7 @@ + /* Don't pollute graph traces with trace_vprintk internals */ + pause_graph_tracing(); + +- pc = preempt_count(); ++ trace_ctx = tracing_gen_ctx(); + preempt_disable_notrace(); + + tbuffer = get_trace_buf(); +@@ -3296,12 +3301,11 @@ + if (len > TRACE_BUF_SIZE/sizeof(int) || len < 0) + goto out_put; + +- local_save_flags(flags); + size = sizeof(*entry) + sizeof(u32) * len; + buffer = tr->array_buffer.buffer; + ring_buffer_nest_start(buffer); + event = __trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size, +- flags, pc); ++ trace_ctx); + if (!event) + goto out; + entry = ring_buffer_event_data(event); +@@ -3311,7 +3315,7 @@ + memcpy(entry->buf, tbuffer, sizeof(u32) * len); + if (!call_filter_check_discard(call, entry, buffer, event)) { + __buffer_unlock_commit(buffer, event); +- ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL); ++ ftrace_trace_stack(tr, buffer, trace_ctx, 6, NULL); + } + + out: +@@ -3334,9 +3338,9 @@ + { + struct trace_event_call *call = &event_print; + struct ring_buffer_event *event; +- int len = 0, size, pc; ++ int len = 0, size; + struct print_entry *entry; +- unsigned long flags; ++ unsigned int trace_ctx; + char *tbuffer; + + if (tracing_disabled || tracing_selftest_running) +@@ -3345,7 +3349,7 @@ + /* Don't pollute graph traces with trace_vprintk internals */ + pause_graph_tracing(); + +- pc = preempt_count(); ++ trace_ctx = tracing_gen_ctx(); + preempt_disable_notrace(); + + +@@ -3357,11 +3361,10 @@ + + len = vscnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args); + +- local_save_flags(flags); + size = sizeof(*entry) + len + 1; + ring_buffer_nest_start(buffer); + event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, size, +- flags, pc); ++ trace_ctx); + if (!event) + goto out; + entry = ring_buffer_event_data(event); +@@ -3370,7 +3373,7 @@ + memcpy(&entry->buf, tbuffer, len + 1); + if (!call_filter_check_discard(call, entry, buffer, event)) { + __buffer_unlock_commit(buffer, event); +- ftrace_trace_stack(&global_trace, buffer, flags, 6, pc, NULL); ++ ftrace_trace_stack(&global_trace, buffer, trace_ctx, 6, NULL); + } + + out: +@@ -3836,14 +3839,17 @@ + + static void print_lat_help_header(struct seq_file *m) + { +- seq_puts(m, "# _------=> CPU# \n" +- "# / _-----=> irqs-off \n" +- "# | / _----=> need-resched \n" +- "# || / _---=> hardirq/softirq \n" +- "# ||| / _--=> preempt-depth \n" +- "# |||| / delay \n" +- "# cmd pid ||||| time | caller \n" +- "# \\ / ||||| \\ | / \n"); ++ seq_puts(m, "# _--------=> CPU# \n" ++ "# / _-------=> irqs-off \n" ++ "# | / _------=> need-resched \n" ++ "# || / _-----=> need-resched-lazy\n" ++ "# ||| / _----=> hardirq/softirq \n" ++ "# |||| / _---=> preempt-depth \n" ++ "# ||||| / _--=> preempt-lazy-depth\n" ++ "# |||||| / _-=> migrate-disable \n" ++ "# ||||||| / delay \n" ++ "# cmd pid |||||||| time | caller \n" ++ "# \\ / |||||||| \\ | / \n"); + } + + static void print_event_info(struct array_buffer *buf, struct seq_file *m) +@@ -3877,13 +3883,16 @@ + + print_event_info(buf, m); + +- seq_printf(m, "# %.*s _-----=> irqs-off\n", prec, space); +- seq_printf(m, "# %.*s / _----=> need-resched\n", prec, space); +- seq_printf(m, "# %.*s| / _---=> hardirq/softirq\n", prec, space); +- seq_printf(m, "# %.*s|| / _--=> preempt-depth\n", prec, space); +- seq_printf(m, "# %.*s||| / delay\n", prec, space); +- seq_printf(m, "# TASK-PID %.*s CPU# |||| TIMESTAMP FUNCTION\n", prec, " TGID "); +- seq_printf(m, "# | | %.*s | |||| | |\n", prec, " | "); ++ seq_printf(m, "# %.*s _-------=> irqs-off\n", prec, space); ++ seq_printf(m, "# %.*s / _------=> need-resched\n", prec, space); ++ seq_printf(m, "# %.*s| / _-----=> need-resched-lazy\n", prec, space); ++ seq_printf(m, "# %.*s|| / _----=> hardirq/softirq\n", prec, space); ++ seq_printf(m, "# %.*s||| / _---=> preempt-depth\n", prec, space); ++ seq_printf(m, "# %.*s|||| / _--=> preempt-lazy-depth\n", prec, space); ++ seq_printf(m, "# %.*s||||| / _-=> migrate-disable\n", prec, space); ++ seq_printf(m, "# %.*s|||||| / delay\n", prec, space); ++ seq_printf(m, "# TASK-PID %.*s CPU# ||||||| TIMESTAMP FUNCTION\n", prec, " TGID "); ++ seq_printf(m, "# | | %.*s | ||||||| | |\n", prec, " | "); + } + + void +@@ -6701,7 +6710,6 @@ + enum event_trigger_type tt = ETT_NONE; + struct trace_buffer *buffer; + struct print_entry *entry; +- unsigned long irq_flags; + ssize_t written; + int size; + int len; +@@ -6721,7 +6729,6 @@ + + BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE); + +- local_save_flags(irq_flags); + size = sizeof(*entry) + cnt + 2; /* add '\0' and possible '\n' */ + + /* If less than "", then make sure we can still add that */ +@@ -6730,7 +6737,7 @@ + + buffer = tr->array_buffer.buffer; + event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, size, +- irq_flags, preempt_count()); ++ tracing_gen_ctx()); + if (unlikely(!event)) + /* Ring buffer disabled, return as if not open for write */ + return -EBADF; +@@ -6782,7 +6789,6 @@ + struct ring_buffer_event *event; + struct trace_buffer *buffer; + struct raw_data_entry *entry; +- unsigned long irq_flags; + ssize_t written; + int size; + int len; +@@ -6804,14 +6810,13 @@ + + BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE); + +- local_save_flags(irq_flags); + size = sizeof(*entry) + cnt; + if (cnt < FAULT_SIZE_ID) + size += FAULT_SIZE_ID - cnt; + + buffer = tr->array_buffer.buffer; + event = __trace_buffer_lock_reserve(buffer, TRACE_RAW_DATA, size, +- irq_flags, preempt_count()); ++ tracing_gen_ctx()); + if (!event) + /* Ring buffer disabled, return as if not open for write */ + return -EBADF; +@@ -9365,7 +9370,6 @@ + tracing_off(); + + local_irq_save(flags); +- printk_nmi_direct_enter(); + + /* Simulate the iterator */ + trace_init_global_iter(&iter); +@@ -9445,7 +9449,6 @@ + atomic_dec(&per_cpu_ptr(iter.array_buffer->data, cpu)->disabled); + } + atomic_dec(&dump_running); +- printk_nmi_direct_exit(); + local_irq_restore(flags); + } + EXPORT_SYMBOL_GPL(ftrace_dump); +diff -Naur --no-dereference a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c +--- a/kernel/trace/trace_event_perf.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_event_perf.c 2024-11-24 20:19:38.250228965 -0500 +@@ -421,11 +421,8 @@ + void perf_trace_buf_update(void *record, u16 type) + { + struct trace_entry *entry = record; +- int pc = preempt_count(); +- unsigned long flags; + +- local_save_flags(flags); +- tracing_generic_entry_update(entry, type, flags, pc); ++ tracing_generic_entry_update(entry, type, tracing_gen_ctx()); + } + NOKPROBE_SYMBOL(perf_trace_buf_update); + +diff -Naur --no-dereference a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c +--- a/kernel/trace/trace_events.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_events.c 2024-11-24 20:19:38.250228965 -0500 +@@ -184,6 +184,8 @@ + __common_field(unsigned char, flags); + __common_field(unsigned char, preempt_count); + __common_field(int, pid); ++ __common_field(unsigned char, migrate_disable); ++ __common_field(unsigned char, preempt_lazy_count); + + return ret; + } +@@ -259,22 +261,19 @@ + trace_event_ignore_this_pid(trace_file)) + return NULL; + +- local_save_flags(fbuffer->flags); +- fbuffer->pc = preempt_count(); + /* + * If CONFIG_PREEMPTION is enabled, then the tracepoint itself disables + * preemption (adding one to the preempt_count). Since we are + * interested in the preempt_count at the time the tracepoint was + * hit, we need to subtract one to offset the increment. + */ +- if (IS_ENABLED(CONFIG_PREEMPTION)) +- fbuffer->pc--; ++ fbuffer->trace_ctx = tracing_gen_ctx_dec(); + fbuffer->trace_file = trace_file; + + fbuffer->event = + trace_event_buffer_lock_reserve(&fbuffer->buffer, trace_file, + event_call->event.type, len, +- fbuffer->flags, fbuffer->pc); ++ fbuffer->trace_ctx); + if (!fbuffer->event) + return NULL; + +@@ -3699,12 +3698,11 @@ + struct trace_buffer *buffer; + struct ring_buffer_event *event; + struct ftrace_entry *entry; +- unsigned long flags; ++ unsigned int trace_ctx; + long disabled; + int cpu; +- int pc; + +- pc = preempt_count(); ++ trace_ctx = tracing_gen_ctx(); + preempt_disable_notrace(); + cpu = raw_smp_processor_id(); + disabled = atomic_inc_return(&per_cpu(ftrace_test_event_disable, cpu)); +@@ -3712,11 +3710,9 @@ + if (disabled != 1) + goto out; + +- local_save_flags(flags); +- + event = trace_event_buffer_lock_reserve(&buffer, &event_trace_file, + TRACE_FN, sizeof(*entry), +- flags, pc); ++ trace_ctx); + if (!event) + goto out; + entry = ring_buffer_event_data(event); +@@ -3724,7 +3720,7 @@ + entry->parent_ip = parent_ip; + + event_trigger_unlock_commit(&event_trace_file, buffer, event, +- entry, flags, pc); ++ entry, trace_ctx); + out: + atomic_dec(&per_cpu(ftrace_test_event_disable, cpu)); + preempt_enable_notrace(); +diff -Naur --no-dereference a/kernel/trace/trace_events_inject.c b/kernel/trace/trace_events_inject.c +--- a/kernel/trace/trace_events_inject.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_events_inject.c 2024-11-24 20:19:38.250228965 -0500 +@@ -192,7 +192,6 @@ + static int parse_entry(char *str, struct trace_event_call *call, void **pentry) + { + struct ftrace_event_field *field; +- unsigned long irq_flags; + void *entry = NULL; + int entry_size; + u64 val = 0; +@@ -203,9 +202,8 @@ + if (!entry) + return -ENOMEM; + +- local_save_flags(irq_flags); +- tracing_generic_entry_update(entry, call->event.type, irq_flags, +- preempt_count()); ++ tracing_generic_entry_update(entry, call->event.type, ++ tracing_gen_ctx()); + + while ((len = parse_field(str, call, &field, &val)) > 0) { + if (is_function_field(field)) +diff -Naur --no-dereference a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c +--- a/kernel/trace/trace_events_trigger.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_events_trigger.c 2024-11-24 20:19:38.250228965 -0500 +@@ -1220,12 +1220,10 @@ + struct ring_buffer_event *event) + { + struct trace_event_file *file = data->private_data; +- unsigned long flags; + +- if (file) { +- local_save_flags(flags); +- __trace_stack(file->tr, flags, STACK_SKIP, preempt_count()); +- } else ++ if (file) ++ __trace_stack(file->tr, tracing_gen_ctx(), STACK_SKIP); ++ else + trace_dump_stack(STACK_SKIP); + } + +diff -Naur --no-dereference a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c +--- a/kernel/trace/trace_functions.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_functions.c 2024-11-24 20:19:38.250228965 -0500 +@@ -133,15 +133,14 @@ + { + struct trace_array *tr = op->private; + struct trace_array_cpu *data; +- unsigned long flags; ++ unsigned int trace_ctx; + int bit; + int cpu; +- int pc; + + if (unlikely(!tr->function_enabled)) + return; + +- pc = preempt_count(); ++ trace_ctx = tracing_gen_ctx(); + preempt_disable_notrace(); + + bit = trace_test_and_set_recursion(TRACE_FTRACE_START); +@@ -150,10 +149,9 @@ + + cpu = smp_processor_id(); + data = per_cpu_ptr(tr->array_buffer.data, cpu); +- if (!atomic_read(&data->disabled)) { +- local_save_flags(flags); +- trace_function(tr, ip, parent_ip, flags, pc); +- } ++ if (!atomic_read(&data->disabled)) ++ trace_function(tr, ip, parent_ip, trace_ctx); ++ + trace_clear_recursion(bit); + + out: +@@ -187,7 +185,7 @@ + unsigned long flags; + long disabled; + int cpu; +- int pc; ++ unsigned int trace_ctx; + + if (unlikely(!tr->function_enabled)) + return; +@@ -202,9 +200,9 @@ + disabled = atomic_inc_return(&data->disabled); + + if (likely(disabled == 1)) { +- pc = preempt_count(); +- trace_function(tr, ip, parent_ip, flags, pc); +- __trace_stack(tr, flags, STACK_SKIP, pc); ++ trace_ctx = tracing_gen_ctx_flags(flags); ++ trace_function(tr, ip, parent_ip, trace_ctx); ++ __trace_stack(tr, trace_ctx, STACK_SKIP); + } + + atomic_dec(&data->disabled); +@@ -407,13 +405,11 @@ + + static __always_inline void trace_stack(struct trace_array *tr) + { +- unsigned long flags; +- int pc; ++ unsigned int trace_ctx; + +- local_save_flags(flags); +- pc = preempt_count(); ++ trace_ctx = tracing_gen_ctx(); + +- __trace_stack(tr, flags, FTRACE_STACK_SKIP, pc); ++ __trace_stack(tr, trace_ctx, FTRACE_STACK_SKIP); + } + + static void +diff -Naur --no-dereference a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c +--- a/kernel/trace/trace_functions_graph.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_functions_graph.c 2024-11-24 20:19:38.250228965 -0500 +@@ -96,8 +96,7 @@ + + int __trace_graph_entry(struct trace_array *tr, + struct ftrace_graph_ent *trace, +- unsigned long flags, +- int pc) ++ unsigned int trace_ctx) + { + struct trace_event_call *call = &event_funcgraph_entry; + struct ring_buffer_event *event; +@@ -105,7 +104,7 @@ + struct ftrace_graph_ent_entry *entry; + + event = trace_buffer_lock_reserve(buffer, TRACE_GRAPH_ENT, +- sizeof(*entry), flags, pc); ++ sizeof(*entry), trace_ctx); + if (!event) + return 0; + entry = ring_buffer_event_data(event); +@@ -129,10 +128,10 @@ + struct trace_array *tr = graph_array; + struct trace_array_cpu *data; + unsigned long flags; ++ unsigned int trace_ctx; + long disabled; + int ret; + int cpu; +- int pc; + + if (trace_recursion_test(TRACE_GRAPH_NOTRACE_BIT)) + return 0; +@@ -174,8 +173,8 @@ + data = per_cpu_ptr(tr->array_buffer.data, cpu); + disabled = atomic_inc_return(&data->disabled); + if (likely(disabled == 1)) { +- pc = preempt_count(); +- ret = __trace_graph_entry(tr, trace, flags, pc); ++ trace_ctx = tracing_gen_ctx_flags(flags); ++ ret = __trace_graph_entry(tr, trace, trace_ctx); + } else { + ret = 0; + } +@@ -188,7 +187,7 @@ + + static void + __trace_graph_function(struct trace_array *tr, +- unsigned long ip, unsigned long flags, int pc) ++ unsigned long ip, unsigned int trace_ctx) + { + u64 time = trace_clock_local(); + struct ftrace_graph_ent ent = { +@@ -202,22 +201,21 @@ + .rettime = time, + }; + +- __trace_graph_entry(tr, &ent, flags, pc); +- __trace_graph_return(tr, &ret, flags, pc); ++ __trace_graph_entry(tr, &ent, trace_ctx); ++ __trace_graph_return(tr, &ret, trace_ctx); + } + + void + trace_graph_function(struct trace_array *tr, + unsigned long ip, unsigned long parent_ip, +- unsigned long flags, int pc) ++ unsigned int trace_ctx) + { +- __trace_graph_function(tr, ip, flags, pc); ++ __trace_graph_function(tr, ip, trace_ctx); + } + + void __trace_graph_return(struct trace_array *tr, + struct ftrace_graph_ret *trace, +- unsigned long flags, +- int pc) ++ unsigned int trace_ctx) + { + struct trace_event_call *call = &event_funcgraph_exit; + struct ring_buffer_event *event; +@@ -225,7 +223,7 @@ + struct ftrace_graph_ret_entry *entry; + + event = trace_buffer_lock_reserve(buffer, TRACE_GRAPH_RET, +- sizeof(*entry), flags, pc); ++ sizeof(*entry), trace_ctx); + if (!event) + return; + entry = ring_buffer_event_data(event); +@@ -239,9 +237,9 @@ + struct trace_array *tr = graph_array; + struct trace_array_cpu *data; + unsigned long flags; ++ unsigned int trace_ctx; + long disabled; + int cpu; +- int pc; + + ftrace_graph_addr_finish(trace); + +@@ -255,8 +253,8 @@ + data = per_cpu_ptr(tr->array_buffer.data, cpu); + disabled = atomic_inc_return(&data->disabled); + if (likely(disabled == 1)) { +- pc = preempt_count(); +- __trace_graph_return(tr, trace, flags, pc); ++ trace_ctx = tracing_gen_ctx_flags(flags); ++ __trace_graph_return(tr, trace, trace_ctx); + } + atomic_dec(&data->disabled); + local_irq_restore(flags); +diff -Naur --no-dereference a/kernel/trace/trace.h b/kernel/trace/trace.h +--- a/kernel/trace/trace.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace.h 2024-11-24 20:19:38.250228965 -0500 +@@ -136,25 +136,6 @@ + unsigned long ret_ip; + }; + +-/* +- * trace_flag_type is an enumeration that holds different +- * states when a trace occurs. These are: +- * IRQS_OFF - interrupts were disabled +- * IRQS_NOSUPPORT - arch does not support irqs_disabled_flags +- * NEED_RESCHED - reschedule is requested +- * HARDIRQ - inside an interrupt handler +- * SOFTIRQ - inside a softirq handler +- */ +-enum trace_flag_type { +- TRACE_FLAG_IRQS_OFF = 0x01, +- TRACE_FLAG_IRQS_NOSUPPORT = 0x02, +- TRACE_FLAG_NEED_RESCHED = 0x04, +- TRACE_FLAG_HARDIRQ = 0x08, +- TRACE_FLAG_SOFTIRQ = 0x10, +- TRACE_FLAG_PREEMPT_RESCHED = 0x20, +- TRACE_FLAG_NMI = 0x40, +-}; +- + #define TRACE_BUF_SIZE 1024 + + struct trace_array; +@@ -745,8 +726,7 @@ + trace_buffer_lock_reserve(struct trace_buffer *buffer, + int type, + unsigned long len, +- unsigned long flags, +- int pc); ++ unsigned int trace_ctx); + + struct trace_entry *tracing_get_trace_entry(struct trace_array *tr, + struct trace_array_cpu *data); +@@ -771,11 +751,11 @@ + void trace_function(struct trace_array *tr, + unsigned long ip, + unsigned long parent_ip, +- unsigned long flags, int pc); ++ unsigned int trace_ctx); + void trace_graph_function(struct trace_array *tr, + unsigned long ip, + unsigned long parent_ip, +- unsigned long flags, int pc); ++ unsigned int trace_ctx); + void trace_latency_header(struct seq_file *m); + void trace_default_header(struct seq_file *m); + void print_trace_header(struct seq_file *m, struct trace_iterator *iter); +@@ -843,11 +823,10 @@ + #endif + + #ifdef CONFIG_STACKTRACE +-void __trace_stack(struct trace_array *tr, unsigned long flags, int skip, +- int pc); ++void __trace_stack(struct trace_array *tr, unsigned int trace_ctx, int skip); + #else +-static inline void __trace_stack(struct trace_array *tr, unsigned long flags, +- int skip, int pc) ++static inline void __trace_stack(struct trace_array *tr, unsigned int trace_ctx, ++ int skip) + { + } + #endif /* CONFIG_STACKTRACE */ +@@ -987,10 +966,10 @@ + extern void graph_trace_close(struct trace_iterator *iter); + extern int __trace_graph_entry(struct trace_array *tr, + struct ftrace_graph_ent *trace, +- unsigned long flags, int pc); ++ unsigned int trace_ctx); + extern void __trace_graph_return(struct trace_array *tr, + struct ftrace_graph_ret *trace, +- unsigned long flags, int pc); ++ unsigned int trace_ctx); + + #ifdef CONFIG_DYNAMIC_FTRACE + extern struct ftrace_hash __rcu *ftrace_graph_hash; +@@ -1453,15 +1432,15 @@ + void trace_buffer_unlock_commit_regs(struct trace_array *tr, + struct trace_buffer *buffer, + struct ring_buffer_event *event, +- unsigned long flags, int pc, ++ unsigned int trcace_ctx, + struct pt_regs *regs); + + static inline void trace_buffer_unlock_commit(struct trace_array *tr, + struct trace_buffer *buffer, + struct ring_buffer_event *event, +- unsigned long flags, int pc) ++ unsigned int trace_ctx) + { +- trace_buffer_unlock_commit_regs(tr, buffer, event, flags, pc, NULL); ++ trace_buffer_unlock_commit_regs(tr, buffer, event, trace_ctx, NULL); + } + + DECLARE_PER_CPU(struct ring_buffer_event *, trace_buffered_event); +@@ -1534,8 +1513,7 @@ + * @buffer: The ring buffer that the event is being written to + * @event: The event meta data in the ring buffer + * @entry: The event itself +- * @irq_flags: The state of the interrupts at the start of the event +- * @pc: The state of the preempt count at the start of the event. ++ * @trace_ctx: The tracing context flags. + * + * This is a helper function to handle triggers that require data + * from the event itself. It also tests the event against filters and +@@ -1545,12 +1523,12 @@ + event_trigger_unlock_commit(struct trace_event_file *file, + struct trace_buffer *buffer, + struct ring_buffer_event *event, +- void *entry, unsigned long irq_flags, int pc) ++ void *entry, unsigned int trace_ctx) + { + enum event_trigger_type tt = ETT_NONE; + + if (!__event_trigger_test_discard(file, buffer, event, entry, &tt)) +- trace_buffer_unlock_commit(file->tr, buffer, event, irq_flags, pc); ++ trace_buffer_unlock_commit(file->tr, buffer, event, trace_ctx); + + if (tt) + event_triggers_post_call(file, tt); +@@ -1562,8 +1540,7 @@ + * @buffer: The ring buffer that the event is being written to + * @event: The event meta data in the ring buffer + * @entry: The event itself +- * @irq_flags: The state of the interrupts at the start of the event +- * @pc: The state of the preempt count at the start of the event. ++ * @trace_ctx: The tracing context flags. + * + * This is a helper function to handle triggers that require data + * from the event itself. It also tests the event against filters and +@@ -1576,14 +1553,14 @@ + event_trigger_unlock_commit_regs(struct trace_event_file *file, + struct trace_buffer *buffer, + struct ring_buffer_event *event, +- void *entry, unsigned long irq_flags, int pc, ++ void *entry, unsigned int trace_ctx, + struct pt_regs *regs) + { + enum event_trigger_type tt = ETT_NONE; + + if (!__event_trigger_test_discard(file, buffer, event, entry, &tt)) + trace_buffer_unlock_commit_regs(file->tr, buffer, event, +- irq_flags, pc, regs); ++ trace_ctx, regs); + + if (tt) + event_triggers_post_call(file, tt); +diff -Naur --no-dereference a/kernel/trace/trace_hwlat.c b/kernel/trace/trace_hwlat.c +--- a/kernel/trace/trace_hwlat.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_hwlat.c 2024-11-24 20:19:38.250228965 -0500 +@@ -108,14 +108,9 @@ + struct trace_buffer *buffer = tr->array_buffer.buffer; + struct ring_buffer_event *event; + struct hwlat_entry *entry; +- unsigned long flags; +- int pc; +- +- pc = preempt_count(); +- local_save_flags(flags); + + event = trace_buffer_lock_reserve(buffer, TRACE_HWLAT, sizeof(*entry), +- flags, pc); ++ tracing_gen_ctx()); + if (!event) + return; + entry = ring_buffer_event_data(event); +diff -Naur --no-dereference a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c +--- a/kernel/trace/trace_irqsoff.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_irqsoff.c 2024-11-24 20:19:38.250228965 -0500 +@@ -143,11 +143,14 @@ + struct trace_array *tr = irqsoff_trace; + struct trace_array_cpu *data; + unsigned long flags; ++ unsigned int trace_ctx; + + if (!func_prolog_dec(tr, &data, &flags)) + return; + +- trace_function(tr, ip, parent_ip, flags, preempt_count()); ++ trace_ctx = tracing_gen_ctx_flags(flags); ++ ++ trace_function(tr, ip, parent_ip, trace_ctx); + + atomic_dec(&data->disabled); + } +@@ -177,8 +180,8 @@ + struct trace_array *tr = irqsoff_trace; + struct trace_array_cpu *data; + unsigned long flags; ++ unsigned int trace_ctx; + int ret; +- int pc; + + if (ftrace_graph_ignore_func(trace)) + return 0; +@@ -195,8 +198,8 @@ + if (!func_prolog_dec(tr, &data, &flags)) + return 0; + +- pc = preempt_count(); +- ret = __trace_graph_entry(tr, trace, flags, pc); ++ trace_ctx = tracing_gen_ctx_flags(flags); ++ ret = __trace_graph_entry(tr, trace, trace_ctx); + atomic_dec(&data->disabled); + + return ret; +@@ -207,15 +210,15 @@ + struct trace_array *tr = irqsoff_trace; + struct trace_array_cpu *data; + unsigned long flags; +- int pc; ++ unsigned int trace_ctx; + + ftrace_graph_addr_finish(trace); + + if (!func_prolog_dec(tr, &data, &flags)) + return; + +- pc = preempt_count(); +- __trace_graph_return(tr, trace, flags, pc); ++ trace_ctx = tracing_gen_ctx_flags(flags); ++ __trace_graph_return(tr, trace, trace_ctx); + atomic_dec(&data->disabled); + } + +@@ -267,12 +270,12 @@ + static void + __trace_function(struct trace_array *tr, + unsigned long ip, unsigned long parent_ip, +- unsigned long flags, int pc) ++ unsigned int trace_ctx) + { + if (is_graph(tr)) +- trace_graph_function(tr, ip, parent_ip, flags, pc); ++ trace_graph_function(tr, ip, parent_ip, trace_ctx); + else +- trace_function(tr, ip, parent_ip, flags, pc); ++ trace_function(tr, ip, parent_ip, trace_ctx); + } + + #else +@@ -322,15 +325,13 @@ + { + u64 T0, T1, delta; + unsigned long flags; +- int pc; ++ unsigned int trace_ctx; + + T0 = data->preempt_timestamp; + T1 = ftrace_now(cpu); + delta = T1-T0; + +- local_save_flags(flags); +- +- pc = preempt_count(); ++ trace_ctx = tracing_gen_ctx(); + + if (!report_latency(tr, delta)) + goto out; +@@ -341,9 +342,9 @@ + if (!report_latency(tr, delta)) + goto out_unlock; + +- __trace_function(tr, CALLER_ADDR0, parent_ip, flags, pc); ++ __trace_function(tr, CALLER_ADDR0, parent_ip, trace_ctx); + /* Skip 5 functions to get to the irq/preempt enable function */ +- __trace_stack(tr, flags, 5, pc); ++ __trace_stack(tr, trace_ctx, 5); + + if (data->critical_sequence != max_sequence) + goto out_unlock; +@@ -363,16 +364,15 @@ + out: + data->critical_sequence = max_sequence; + data->preempt_timestamp = ftrace_now(cpu); +- __trace_function(tr, CALLER_ADDR0, parent_ip, flags, pc); ++ __trace_function(tr, CALLER_ADDR0, parent_ip, trace_ctx); + } + + static nokprobe_inline void +-start_critical_timing(unsigned long ip, unsigned long parent_ip, int pc) ++start_critical_timing(unsigned long ip, unsigned long parent_ip) + { + int cpu; + struct trace_array *tr = irqsoff_trace; + struct trace_array_cpu *data; +- unsigned long flags; + + if (!tracer_enabled || !tracing_is_enabled()) + return; +@@ -393,9 +393,7 @@ + data->preempt_timestamp = ftrace_now(cpu); + data->critical_start = parent_ip ? : ip; + +- local_save_flags(flags); +- +- __trace_function(tr, ip, parent_ip, flags, pc); ++ __trace_function(tr, ip, parent_ip, tracing_gen_ctx()); + + per_cpu(tracing_cpu, cpu) = 1; + +@@ -403,12 +401,12 @@ + } + + static nokprobe_inline void +-stop_critical_timing(unsigned long ip, unsigned long parent_ip, int pc) ++stop_critical_timing(unsigned long ip, unsigned long parent_ip) + { + int cpu; + struct trace_array *tr = irqsoff_trace; + struct trace_array_cpu *data; +- unsigned long flags; ++ unsigned int trace_ctx; + + cpu = raw_smp_processor_id(); + /* Always clear the tracing cpu on stopping the trace */ +@@ -428,8 +426,8 @@ + + atomic_inc(&data->disabled); + +- local_save_flags(flags); +- __trace_function(tr, ip, parent_ip, flags, pc); ++ trace_ctx = tracing_gen_ctx(); ++ __trace_function(tr, ip, parent_ip, trace_ctx); + check_critical_timing(tr, data, parent_ip ? : ip, cpu); + data->critical_start = 0; + atomic_dec(&data->disabled); +@@ -438,20 +436,16 @@ + /* start and stop critical timings used to for stoppage (in idle) */ + void start_critical_timings(void) + { +- int pc = preempt_count(); +- +- if (preempt_trace(pc) || irq_trace()) +- start_critical_timing(CALLER_ADDR0, CALLER_ADDR1, pc); ++ if (preempt_trace(preempt_count()) || irq_trace()) ++ start_critical_timing(CALLER_ADDR0, CALLER_ADDR1); + } + EXPORT_SYMBOL_GPL(start_critical_timings); + NOKPROBE_SYMBOL(start_critical_timings); + + void stop_critical_timings(void) + { +- int pc = preempt_count(); +- +- if (preempt_trace(pc) || irq_trace()) +- stop_critical_timing(CALLER_ADDR0, CALLER_ADDR1, pc); ++ if (preempt_trace(preempt_count()) || irq_trace()) ++ stop_critical_timing(CALLER_ADDR0, CALLER_ADDR1); + } + EXPORT_SYMBOL_GPL(stop_critical_timings); + NOKPROBE_SYMBOL(stop_critical_timings); +@@ -613,19 +607,15 @@ + */ + void tracer_hardirqs_on(unsigned long a0, unsigned long a1) + { +- unsigned int pc = preempt_count(); +- +- if (!preempt_trace(pc) && irq_trace()) +- stop_critical_timing(a0, a1, pc); ++ if (!preempt_trace(preempt_count()) && irq_trace()) ++ stop_critical_timing(a0, a1); + } + NOKPROBE_SYMBOL(tracer_hardirqs_on); + + void tracer_hardirqs_off(unsigned long a0, unsigned long a1) + { +- unsigned int pc = preempt_count(); +- +- if (!preempt_trace(pc) && irq_trace()) +- start_critical_timing(a0, a1, pc); ++ if (!preempt_trace(preempt_count()) && irq_trace()) ++ start_critical_timing(a0, a1); + } + NOKPROBE_SYMBOL(tracer_hardirqs_off); + +@@ -665,18 +655,14 @@ + #ifdef CONFIG_PREEMPT_TRACER + void tracer_preempt_on(unsigned long a0, unsigned long a1) + { +- int pc = preempt_count(); +- +- if (preempt_trace(pc) && !irq_trace()) +- stop_critical_timing(a0, a1, pc); ++ if (preempt_trace(preempt_count()) && !irq_trace()) ++ stop_critical_timing(a0, a1); + } + + void tracer_preempt_off(unsigned long a0, unsigned long a1) + { +- int pc = preempt_count(); +- +- if (preempt_trace(pc) && !irq_trace()) +- start_critical_timing(a0, a1, pc); ++ if (preempt_trace(preempt_count()) && !irq_trace()) ++ start_critical_timing(a0, a1); + } + + static int preemptoff_tracer_init(struct trace_array *tr) +diff -Naur --no-dereference a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c +--- a/kernel/trace/trace_kprobe.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_kprobe.c 2024-11-24 20:19:38.250228965 -0500 +@@ -1393,8 +1393,7 @@ + if (trace_trigger_soft_disabled(trace_file)) + return; + +- local_save_flags(fbuffer.flags); +- fbuffer.pc = preempt_count(); ++ fbuffer.trace_ctx = tracing_gen_ctx(); + fbuffer.trace_file = trace_file; + + dsize = __get_data_size(&tk->tp, regs); +@@ -1403,7 +1402,7 @@ + trace_event_buffer_lock_reserve(&fbuffer.buffer, trace_file, + call->event.type, + sizeof(*entry) + tk->tp.size + dsize, +- fbuffer.flags, fbuffer.pc); ++ fbuffer.trace_ctx); + if (!fbuffer.event) + return; + +@@ -1441,8 +1440,7 @@ + if (trace_trigger_soft_disabled(trace_file)) + return; + +- local_save_flags(fbuffer.flags); +- fbuffer.pc = preempt_count(); ++ fbuffer.trace_ctx = tracing_gen_ctx(); + fbuffer.trace_file = trace_file; + + dsize = __get_data_size(&tk->tp, regs); +@@ -1450,7 +1448,7 @@ + trace_event_buffer_lock_reserve(&fbuffer.buffer, trace_file, + call->event.type, + sizeof(*entry) + tk->tp.size + dsize, +- fbuffer.flags, fbuffer.pc); ++ fbuffer.trace_ctx); + if (!fbuffer.event) + return; + +diff -Naur --no-dereference a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c +--- a/kernel/trace/trace_mmiotrace.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_mmiotrace.c 2024-11-24 20:19:38.251228967 -0500 +@@ -300,10 +300,11 @@ + struct trace_buffer *buffer = tr->array_buffer.buffer; + struct ring_buffer_event *event; + struct trace_mmiotrace_rw *entry; +- int pc = preempt_count(); ++ unsigned int trace_ctx; + ++ trace_ctx = tracing_gen_ctx_flags(0); + event = trace_buffer_lock_reserve(buffer, TRACE_MMIO_RW, +- sizeof(*entry), 0, pc); ++ sizeof(*entry), trace_ctx); + if (!event) { + atomic_inc(&dropped_count); + return; +@@ -312,7 +313,7 @@ + entry->rw = *rw; + + if (!call_filter_check_discard(call, entry, buffer, event)) +- trace_buffer_unlock_commit(tr, buffer, event, 0, pc); ++ trace_buffer_unlock_commit(tr, buffer, event, trace_ctx); + } + + void mmio_trace_rw(struct mmiotrace_rw *rw) +@@ -330,10 +331,11 @@ + struct trace_buffer *buffer = tr->array_buffer.buffer; + struct ring_buffer_event *event; + struct trace_mmiotrace_map *entry; +- int pc = preempt_count(); ++ unsigned int trace_ctx; + ++ trace_ctx = tracing_gen_ctx_flags(0); + event = trace_buffer_lock_reserve(buffer, TRACE_MMIO_MAP, +- sizeof(*entry), 0, pc); ++ sizeof(*entry), trace_ctx); + if (!event) { + atomic_inc(&dropped_count); + return; +@@ -342,7 +344,7 @@ + entry->map = *map; + + if (!call_filter_check_discard(call, entry, buffer, event)) +- trace_buffer_unlock_commit(tr, buffer, event, 0, pc); ++ trace_buffer_unlock_commit(tr, buffer, event, trace_ctx); + } + + void mmio_trace_mapping(struct mmiotrace_map *map) +diff -Naur --no-dereference a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c +--- a/kernel/trace/trace_output.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_output.c 2024-11-24 20:19:38.251228967 -0500 +@@ -441,6 +441,7 @@ + { + char hardsoft_irq; + char need_resched; ++ char need_resched_lazy; + char irqs_off; + int hardirq; + int softirq; +@@ -471,6 +472,9 @@ + break; + } + ++ need_resched_lazy = ++ (entry->flags & TRACE_FLAG_NEED_RESCHED_LAZY) ? 'L' : '.'; ++ + hardsoft_irq = + (nmi && hardirq) ? 'Z' : + nmi ? 'z' : +@@ -479,14 +483,25 @@ + softirq ? 's' : + '.' ; + +- trace_seq_printf(s, "%c%c%c", +- irqs_off, need_resched, hardsoft_irq); ++ trace_seq_printf(s, "%c%c%c%c", ++ irqs_off, need_resched, need_resched_lazy, ++ hardsoft_irq); + + if (entry->preempt_count) + trace_seq_printf(s, "%x", entry->preempt_count); + else + trace_seq_putc(s, '.'); + ++ if (entry->preempt_lazy_count) ++ trace_seq_printf(s, "%x", entry->preempt_lazy_count); ++ else ++ trace_seq_putc(s, '.'); ++ ++ if (entry->migrate_disable) ++ trace_seq_printf(s, "%x", entry->migrate_disable); ++ else ++ trace_seq_putc(s, '.'); ++ + return !trace_seq_has_overflowed(s); + } + +diff -Naur --no-dereference a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c +--- a/kernel/trace/trace_sched_wakeup.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_sched_wakeup.c 2024-11-24 20:19:38.251228967 -0500 +@@ -67,7 +67,7 @@ + static int + func_prolog_preempt_disable(struct trace_array *tr, + struct trace_array_cpu **data, +- int *pc) ++ unsigned int *trace_ctx) + { + long disabled; + int cpu; +@@ -75,7 +75,7 @@ + if (likely(!wakeup_task)) + return 0; + +- *pc = preempt_count(); ++ *trace_ctx = tracing_gen_ctx(); + preempt_disable_notrace(); + + cpu = raw_smp_processor_id(); +@@ -116,8 +116,8 @@ + { + struct trace_array *tr = wakeup_trace; + struct trace_array_cpu *data; +- unsigned long flags; +- int pc, ret = 0; ++ unsigned int trace_ctx; ++ int ret = 0; + + if (ftrace_graph_ignore_func(trace)) + return 0; +@@ -131,11 +131,10 @@ + if (ftrace_graph_notrace_addr(trace->func)) + return 1; + +- if (!func_prolog_preempt_disable(tr, &data, &pc)) ++ if (!func_prolog_preempt_disable(tr, &data, &trace_ctx)) + return 0; + +- local_save_flags(flags); +- ret = __trace_graph_entry(tr, trace, flags, pc); ++ ret = __trace_graph_entry(tr, trace, trace_ctx); + atomic_dec(&data->disabled); + preempt_enable_notrace(); + +@@ -146,16 +145,14 @@ + { + struct trace_array *tr = wakeup_trace; + struct trace_array_cpu *data; +- unsigned long flags; +- int pc; ++ unsigned int trace_ctx; + + ftrace_graph_addr_finish(trace); + +- if (!func_prolog_preempt_disable(tr, &data, &pc)) ++ if (!func_prolog_preempt_disable(tr, &data, &trace_ctx)) + return; + +- local_save_flags(flags); +- __trace_graph_return(tr, trace, flags, pc); ++ __trace_graph_return(tr, trace, trace_ctx); + atomic_dec(&data->disabled); + + preempt_enable_notrace(); +@@ -217,13 +214,13 @@ + struct trace_array *tr = wakeup_trace; + struct trace_array_cpu *data; + unsigned long flags; +- int pc; ++ unsigned int trace_ctx; + +- if (!func_prolog_preempt_disable(tr, &data, &pc)) ++ if (!func_prolog_preempt_disable(tr, &data, &trace_ctx)) + return; + + local_irq_save(flags); +- trace_function(tr, ip, parent_ip, flags, pc); ++ trace_function(tr, ip, parent_ip, trace_ctx); + local_irq_restore(flags); + + atomic_dec(&data->disabled); +@@ -303,12 +300,12 @@ + static void + __trace_function(struct trace_array *tr, + unsigned long ip, unsigned long parent_ip, +- unsigned long flags, int pc) ++ unsigned int trace_ctx) + { + if (is_graph(tr)) +- trace_graph_function(tr, ip, parent_ip, flags, pc); ++ trace_graph_function(tr, ip, parent_ip, trace_ctx); + else +- trace_function(tr, ip, parent_ip, flags, pc); ++ trace_function(tr, ip, parent_ip, trace_ctx); + } + + static int wakeup_flag_changed(struct trace_array *tr, u32 mask, int set) +@@ -375,7 +372,7 @@ + tracing_sched_switch_trace(struct trace_array *tr, + struct task_struct *prev, + struct task_struct *next, +- unsigned long flags, int pc) ++ unsigned int trace_ctx) + { + struct trace_event_call *call = &event_context_switch; + struct trace_buffer *buffer = tr->array_buffer.buffer; +@@ -383,7 +380,7 @@ + struct ctx_switch_entry *entry; + + event = trace_buffer_lock_reserve(buffer, TRACE_CTX, +- sizeof(*entry), flags, pc); ++ sizeof(*entry), trace_ctx); + if (!event) + return; + entry = ring_buffer_event_data(event); +@@ -396,14 +393,14 @@ + entry->next_cpu = task_cpu(next); + + if (!call_filter_check_discard(call, entry, buffer, event)) +- trace_buffer_unlock_commit(tr, buffer, event, flags, pc); ++ trace_buffer_unlock_commit(tr, buffer, event, trace_ctx); + } + + static void + tracing_sched_wakeup_trace(struct trace_array *tr, + struct task_struct *wakee, + struct task_struct *curr, +- unsigned long flags, int pc) ++ unsigned int trace_ctx) + { + struct trace_event_call *call = &event_wakeup; + struct ring_buffer_event *event; +@@ -411,7 +408,7 @@ + struct trace_buffer *buffer = tr->array_buffer.buffer; + + event = trace_buffer_lock_reserve(buffer, TRACE_WAKE, +- sizeof(*entry), flags, pc); ++ sizeof(*entry), trace_ctx); + if (!event) + return; + entry = ring_buffer_event_data(event); +@@ -424,7 +421,7 @@ + entry->next_cpu = task_cpu(wakee); + + if (!call_filter_check_discard(call, entry, buffer, event)) +- trace_buffer_unlock_commit(tr, buffer, event, flags, pc); ++ trace_buffer_unlock_commit(tr, buffer, event, trace_ctx); + } + + static void notrace +@@ -436,7 +433,7 @@ + unsigned long flags; + long disabled; + int cpu; +- int pc; ++ unsigned int trace_ctx; + + tracing_record_cmdline(prev); + +@@ -455,8 +452,6 @@ + if (next != wakeup_task) + return; + +- pc = preempt_count(); +- + /* disable local data, not wakeup_cpu data */ + cpu = raw_smp_processor_id(); + disabled = atomic_inc_return(&per_cpu_ptr(wakeup_trace->array_buffer.data, cpu)->disabled); +@@ -464,6 +459,8 @@ + goto out; + + local_irq_save(flags); ++ trace_ctx = tracing_gen_ctx_flags(flags); ++ + arch_spin_lock(&wakeup_lock); + + /* We could race with grabbing wakeup_lock */ +@@ -473,9 +470,9 @@ + /* The task we are waiting for is waking up */ + data = per_cpu_ptr(wakeup_trace->array_buffer.data, wakeup_cpu); + +- __trace_function(wakeup_trace, CALLER_ADDR0, CALLER_ADDR1, flags, pc); +- tracing_sched_switch_trace(wakeup_trace, prev, next, flags, pc); +- __trace_stack(wakeup_trace, flags, 0, pc); ++ __trace_function(wakeup_trace, CALLER_ADDR0, CALLER_ADDR1, trace_ctx); ++ tracing_sched_switch_trace(wakeup_trace, prev, next, trace_ctx); ++ __trace_stack(wakeup_trace, trace_ctx, 0); + + T0 = data->preempt_timestamp; + T1 = ftrace_now(cpu); +@@ -527,9 +524,8 @@ + { + struct trace_array_cpu *data; + int cpu = smp_processor_id(); +- unsigned long flags; + long disabled; +- int pc; ++ unsigned int trace_ctx; + + if (likely(!tracer_enabled)) + return; +@@ -550,11 +546,12 @@ + (!dl_task(p) && (p->prio >= wakeup_prio || p->prio >= current->prio))) + return; + +- pc = preempt_count(); + disabled = atomic_inc_return(&per_cpu_ptr(wakeup_trace->array_buffer.data, cpu)->disabled); + if (unlikely(disabled != 1)) + goto out; + ++ trace_ctx = tracing_gen_ctx(); ++ + /* interrupts should be off from try_to_wake_up */ + arch_spin_lock(&wakeup_lock); + +@@ -581,19 +578,17 @@ + + wakeup_task = get_task_struct(p); + +- local_save_flags(flags); +- + data = per_cpu_ptr(wakeup_trace->array_buffer.data, wakeup_cpu); + data->preempt_timestamp = ftrace_now(cpu); +- tracing_sched_wakeup_trace(wakeup_trace, p, current, flags, pc); +- __trace_stack(wakeup_trace, flags, 0, pc); ++ tracing_sched_wakeup_trace(wakeup_trace, p, current, trace_ctx); ++ __trace_stack(wakeup_trace, trace_ctx, 0); + + /* + * We must be careful in using CALLER_ADDR2. But since wake_up + * is not called by an assembly function (where as schedule is) + * it should be safe to use it here. + */ +- __trace_function(wakeup_trace, CALLER_ADDR1, CALLER_ADDR2, flags, pc); ++ __trace_function(wakeup_trace, CALLER_ADDR1, CALLER_ADDR2, trace_ctx); + + out_locked: + arch_spin_unlock(&wakeup_lock); +diff -Naur --no-dereference a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c +--- a/kernel/trace/trace_syscalls.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_syscalls.c 2024-11-24 20:19:38.251228967 -0500 +@@ -298,9 +298,8 @@ + struct syscall_metadata *sys_data; + struct ring_buffer_event *event; + struct trace_buffer *buffer; +- unsigned long irq_flags; ++ unsigned int trace_ctx; + unsigned long args[6]; +- int pc; + int syscall_nr; + int size; + +@@ -322,12 +321,11 @@ + + size = sizeof(*entry) + sizeof(unsigned long) * sys_data->nb_args; + +- local_save_flags(irq_flags); +- pc = preempt_count(); ++ trace_ctx = tracing_gen_ctx(); + + buffer = tr->array_buffer.buffer; + event = trace_buffer_lock_reserve(buffer, +- sys_data->enter_event->event.type, size, irq_flags, pc); ++ sys_data->enter_event->event.type, size, trace_ctx); + if (!event) + return; + +@@ -337,7 +335,7 @@ + memcpy(entry->args, args, sizeof(unsigned long) * sys_data->nb_args); + + event_trigger_unlock_commit(trace_file, buffer, event, entry, +- irq_flags, pc); ++ trace_ctx); + } + + static void ftrace_syscall_exit(void *data, struct pt_regs *regs, long ret) +@@ -348,8 +346,7 @@ + struct syscall_metadata *sys_data; + struct ring_buffer_event *event; + struct trace_buffer *buffer; +- unsigned long irq_flags; +- int pc; ++ unsigned int trace_ctx; + int syscall_nr; + + syscall_nr = trace_get_syscall_nr(current, regs); +@@ -368,13 +365,12 @@ + if (!sys_data) + return; + +- local_save_flags(irq_flags); +- pc = preempt_count(); ++ trace_ctx = tracing_gen_ctx(); + + buffer = tr->array_buffer.buffer; + event = trace_buffer_lock_reserve(buffer, + sys_data->exit_event->event.type, sizeof(*entry), +- irq_flags, pc); ++ trace_ctx); + if (!event) + return; + +@@ -383,7 +379,7 @@ + entry->ret = syscall_get_return_value(current, regs); + + event_trigger_unlock_commit(trace_file, buffer, event, entry, +- irq_flags, pc); ++ trace_ctx); + } + + static int reg_event_syscall_enter(struct trace_event_file *file, +diff -Naur --no-dereference a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c +--- a/kernel/trace/trace_uprobe.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/trace/trace_uprobe.c 2024-11-24 20:19:38.251228967 -0500 +@@ -965,7 +965,7 @@ + esize = SIZEOF_TRACE_ENTRY(is_ret_probe(tu)); + size = esize + tu->tp.size + dsize; + event = trace_event_buffer_lock_reserve(&buffer, trace_file, +- call->event.type, size, 0, 0); ++ call->event.type, size, 0); + if (!event) + return; + +@@ -981,7 +981,7 @@ + + memcpy(data, ucb->buf, tu->tp.size + dsize); + +- event_trigger_unlock_commit(trace_file, buffer, event, entry, 0, 0); ++ event_trigger_unlock_commit(trace_file, buffer, event, entry, 0); + } + + /* uprobe handler */ +diff -Naur --no-dereference a/kernel/workqueue.c b/kernel/workqueue.c +--- a/kernel/workqueue.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/kernel/workqueue.c 2024-11-24 20:19:38.251228967 -0500 +@@ -4926,6 +4926,10 @@ + pool->flags |= POOL_DISASSOCIATED; + + raw_spin_unlock_irq(&pool->lock); ++ ++ for_each_pool_worker(worker, pool) ++ WARN_ON_ONCE(set_cpus_allowed_ptr(worker->task, cpu_active_mask) < 0); ++ + mutex_unlock(&wq_pool_attach_mutex); + + /* +diff -Naur --no-dereference a/lib/bug.c b/lib/bug.c +--- a/lib/bug.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/bug.c 2024-11-24 20:19:38.251228967 -0500 +@@ -202,6 +202,7 @@ + else + pr_crit("Kernel BUG at %pB [verbose debug info unavailable]\n", + (void *)bugaddr); ++ pr_flush(1000, true); + + return BUG_TRAP_TYPE_BUG; + } +diff -Naur --no-dereference a/lib/cpumask.c b/lib/cpumask.c +--- a/lib/cpumask.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/cpumask.c 2024-11-24 20:19:38.252228969 -0500 +@@ -261,3 +261,21 @@ + return next; + } + EXPORT_SYMBOL(cpumask_any_and_distribute); ++ ++int cpumask_any_distribute(const struct cpumask *srcp) ++{ ++ int next, prev; ++ ++ /* NOTE: our first selection will skip 0. */ ++ prev = __this_cpu_read(distribute_cpu_mask_prev); ++ ++ next = cpumask_next(prev, srcp); ++ if (next >= nr_cpu_ids) ++ next = cpumask_first(srcp); ++ ++ if (next < nr_cpu_ids) ++ __this_cpu_write(distribute_cpu_mask_prev, next); ++ ++ return next; ++} ++EXPORT_SYMBOL(cpumask_any_distribute); +diff -Naur --no-dereference a/lib/debugobjects.c b/lib/debugobjects.c +--- a/lib/debugobjects.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/debugobjects.c 2024-11-24 20:19:38.252228969 -0500 +@@ -564,7 +564,10 @@ + struct debug_obj *obj; + unsigned long flags; + +- fill_pool(); ++#ifdef CONFIG_PREEMPT_RT ++ if (preempt_count() == 0 && !irqs_disabled()) ++#endif ++ fill_pool(); + + db = get_bucket((unsigned long) addr); + +diff -Naur --no-dereference a/lib/dump_stack.c b/lib/dump_stack.c +--- a/lib/dump_stack.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/dump_stack.c 2024-11-24 20:19:38.252228969 -0500 +@@ -12,6 +12,7 @@ + #include + #include + #include ++#include + + static char dump_stack_arch_desc_str[128]; + +@@ -57,6 +58,7 @@ + log_lvl, dump_stack_arch_desc_str); + + print_worker_info(log_lvl, current); ++ print_stop_info(log_lvl, current); + } + + /** +diff -Naur --no-dereference a/lib/irq_poll.c b/lib/irq_poll.c +--- a/lib/irq_poll.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/irq_poll.c 2024-11-24 20:19:38.252228969 -0500 +@@ -37,6 +37,7 @@ + list_add_tail(&iop->list, this_cpu_ptr(&blk_cpu_iopoll)); + raise_softirq_irqoff(IRQ_POLL_SOFTIRQ); + local_irq_restore(flags); ++ preempt_check_resched_rt(); + } + EXPORT_SYMBOL(irq_poll_sched); + +@@ -72,6 +73,7 @@ + local_irq_save(flags); + __irq_poll_complete(iop); + local_irq_restore(flags); ++ preempt_check_resched_rt(); + } + EXPORT_SYMBOL(irq_poll_complete); + +@@ -96,6 +98,7 @@ + } + + local_irq_enable(); ++ preempt_check_resched_rt(); + + /* Even though interrupts have been re-enabled, this + * access is safe because interrupts can only add new +@@ -133,6 +136,7 @@ + __raise_softirq_irqoff(IRQ_POLL_SOFTIRQ); + + local_irq_enable(); ++ preempt_check_resched_rt(); + } + + /** +@@ -196,6 +200,7 @@ + this_cpu_ptr(&blk_cpu_iopoll)); + __raise_softirq_irqoff(IRQ_POLL_SOFTIRQ); + local_irq_enable(); ++ preempt_check_resched_rt(); + + return 0; + } +diff -Naur --no-dereference a/lib/Kconfig.debug b/lib/Kconfig.debug +--- a/lib/Kconfig.debug 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/Kconfig.debug 2024-11-24 20:19:38.251228967 -0500 +@@ -1370,7 +1370,7 @@ + + config DEBUG_LOCKING_API_SELFTESTS + bool "Locking API boot-time self-tests" +- depends on DEBUG_KERNEL ++ depends on DEBUG_KERNEL && !PREEMPT_RT + help + Say Y here if you want the kernel to run a short self-test during + bootup. The self-test checks whether common types of locking bugs +diff -Naur --no-dereference a/lib/kstrtox.c b/lib/kstrtox.c +--- a/lib/kstrtox.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/kstrtox.c 2024-11-24 20:19:38.252228969 -0500 +@@ -14,11 +14,12 @@ + */ + #include + #include +-#include +-#include + #include ++#include ++#include + #include + #include ++ + #include "kstrtox.h" + + const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) +diff -Naur --no-dereference a/lib/locking-selftest.c b/lib/locking-selftest.c +--- a/lib/locking-selftest.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/locking-selftest.c 2024-11-24 20:19:38.252228969 -0500 +@@ -787,6 +787,8 @@ + #include "locking-selftest-spin-hardirq.h" + GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_hard_spin) + ++#ifndef CONFIG_PREEMPT_RT ++ + #include "locking-selftest-rlock-hardirq.h" + GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_hard_rlock) + +@@ -802,9 +804,12 @@ + #include "locking-selftest-wlock-softirq.h" + GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_soft_wlock) + ++#endif ++ + #undef E1 + #undef E2 + ++#ifndef CONFIG_PREEMPT_RT + /* + * Enabling hardirqs with a softirq-safe lock held: + */ +@@ -837,6 +842,8 @@ + #undef E1 + #undef E2 + ++#endif ++ + /* + * Enabling irqs with an irq-safe lock held: + */ +@@ -860,6 +867,8 @@ + #include "locking-selftest-spin-hardirq.h" + GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_hard_spin) + ++#ifndef CONFIG_PREEMPT_RT ++ + #include "locking-selftest-rlock-hardirq.h" + GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_hard_rlock) + +@@ -875,6 +884,8 @@ + #include "locking-selftest-wlock-softirq.h" + GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_soft_wlock) + ++#endif ++ + #undef E1 + #undef E2 + +@@ -906,6 +917,8 @@ + #include "locking-selftest-spin-hardirq.h" + GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_hard_spin) + ++#ifndef CONFIG_PREEMPT_RT ++ + #include "locking-selftest-rlock-hardirq.h" + GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_hard_rlock) + +@@ -921,6 +934,8 @@ + #include "locking-selftest-wlock-softirq.h" + GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_soft_wlock) + ++#endif ++ + #undef E1 + #undef E2 + #undef E3 +@@ -954,6 +969,8 @@ + #include "locking-selftest-spin-hardirq.h" + GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_hard_spin) + ++#ifndef CONFIG_PREEMPT_RT ++ + #include "locking-selftest-rlock-hardirq.h" + GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_hard_rlock) + +@@ -969,10 +986,14 @@ + #include "locking-selftest-wlock-softirq.h" + GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_soft_wlock) + ++#endif ++ + #undef E1 + #undef E2 + #undef E3 + ++#ifndef CONFIG_PREEMPT_RT ++ + /* + * read-lock / write-lock irq inversion. + * +@@ -1162,6 +1183,11 @@ + #undef E1 + #undef E2 + #undef E3 ++ ++#endif ++ ++#ifndef CONFIG_PREEMPT_RT ++ + /* + * read-lock / write-lock recursion that is actually safe. + */ +@@ -1208,6 +1234,8 @@ + #undef E2 + #undef E3 + ++#endif ++ + /* + * read-lock / write-lock recursion that is unsafe. + */ +@@ -2456,6 +2484,7 @@ + + printk(" --------------------------------------------------------------------------\n"); + ++#ifndef CONFIG_PREEMPT_RT + /* + * irq-context testcases: + */ +@@ -2470,6 +2499,28 @@ + DO_TESTCASE_6x2x2RW("irq read-recursion #2", irq_read_recursion2); + DO_TESTCASE_6x2x2RW("irq read-recursion #3", irq_read_recursion3); + ++#else ++ /* On -rt, we only do hardirq context test for raw spinlock */ ++ DO_TESTCASE_1B("hard-irqs-on + irq-safe-A", irqsafe1_hard_spin, 12); ++ DO_TESTCASE_1B("hard-irqs-on + irq-safe-A", irqsafe1_hard_spin, 21); ++ ++ DO_TESTCASE_1B("hard-safe-A + irqs-on", irqsafe2B_hard_spin, 12); ++ DO_TESTCASE_1B("hard-safe-A + irqs-on", irqsafe2B_hard_spin, 21); ++ ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 123); ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 132); ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 213); ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 231); ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 312); ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 321); ++ ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 123); ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 132); ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 213); ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 231); ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 312); ++ DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 321); ++#endif + ww_tests(); + + force_read_lock_recursive = 0; +diff -Naur --no-dereference a/lib/nmi_backtrace.c b/lib/nmi_backtrace.c +--- a/lib/nmi_backtrace.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/nmi_backtrace.c 2024-11-24 20:19:38.252228969 -0500 +@@ -75,12 +75,6 @@ + touch_softlockup_watchdog(); + } + +- /* +- * Force flush any remote buffers that might be stuck in IRQ context +- * and therefore could not run their irq_work. +- */ +- printk_safe_flush(); +- + clear_bit_unlock(0, &backtrace_flag); + put_cpu(); + } +diff -Naur --no-dereference a/lib/parser.c b/lib/parser.c +--- a/lib/parser.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/parser.c 2024-11-24 20:19:38.252228969 -0500 +@@ -6,6 +6,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff -Naur --no-dereference a/lib/scatterlist.c b/lib/scatterlist.c +--- a/lib/scatterlist.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/scatterlist.c 2024-11-24 20:19:38.252228969 -0500 +@@ -892,7 +892,7 @@ + flush_kernel_dcache_page(miter->page); + + if (miter->__flags & SG_MITER_ATOMIC) { +- WARN_ON_ONCE(preemptible()); ++ WARN_ON_ONCE(!pagefault_disabled()); + kunmap_atomic(miter->addr); + } else + kunmap(miter->page); +diff -Naur --no-dereference a/lib/smp_processor_id.c b/lib/smp_processor_id.c +--- a/lib/smp_processor_id.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/smp_processor_id.c 2024-11-24 20:19:38.252228969 -0500 +@@ -26,6 +26,11 @@ + if (current->nr_cpus_allowed == 1) + goto out; + ++#ifdef CONFIG_SMP ++ if (current->migration_disabled) ++ goto out; ++#endif ++ + /* + * It is valid to assume CPU-locality during early bootup: + */ +diff -Naur --no-dereference a/lib/test_lockup.c b/lib/test_lockup.c +--- a/lib/test_lockup.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/lib/test_lockup.c 2024-11-24 20:19:38.252228969 -0500 +@@ -485,6 +485,21 @@ + return -EINVAL; + + #ifdef CONFIG_DEBUG_SPINLOCK ++#ifdef CONFIG_PREEMPT_RT ++ if (test_magic(lock_spinlock_ptr, ++ offsetof(spinlock_t, lock.wait_lock.magic), ++ SPINLOCK_MAGIC) || ++ test_magic(lock_rwlock_ptr, ++ offsetof(rwlock_t, rtmutex.wait_lock.magic), ++ SPINLOCK_MAGIC) || ++ test_magic(lock_mutex_ptr, ++ offsetof(struct mutex, lock.wait_lock.magic), ++ SPINLOCK_MAGIC) || ++ test_magic(lock_rwsem_ptr, ++ offsetof(struct rw_semaphore, rtmutex.wait_lock.magic), ++ SPINLOCK_MAGIC)) ++ return -EINVAL; ++#else + if (test_magic(lock_spinlock_ptr, + offsetof(spinlock_t, rlock.magic), + SPINLOCK_MAGIC) || +@@ -499,6 +514,7 @@ + SPINLOCK_MAGIC)) + return -EINVAL; + #endif ++#endif + + if ((wait_state != TASK_RUNNING || + (call_cond_resched && !reacquire_locks) || +diff -Naur --no-dereference a/MAINTAINERS b/MAINTAINERS +--- a/MAINTAINERS 2023-02-15 11:22:27.000000000 -0500 ++++ b/MAINTAINERS 2024-11-24 20:19:38.091228679 -0500 +@@ -297,8 +297,6 @@ + M: Syed Nayyar Waris + L: linux-iio@vger.kernel.org + S: Maintained +-F: Documentation/ABI/testing/sysfs-bus-counter-104-quad-8 +-F: Documentation/ABI/testing/sysfs-bus-iio-counter-104-quad-8 + F: drivers/counter/104-quad-8.c + + ACCES PCI-IDIO-16 GPIO DRIVER +@@ -2609,8 +2607,8 @@ + F: drivers/power/reset/keystone-reset.c + + ARM/TEXAS INSTRUMENTS K3 ARCHITECTURE +-M: Tero Kristo + M: Nishanth Menon ++M: Tero Kristo + L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) + S: Supported + F: Documentation/devicetree/bindings/arm/ti/k3.yaml +@@ -3009,6 +3007,19 @@ + F: include/uapi/linux/audit.h + F: kernel/audit* + ++AUFS (advanced multi layered unification filesystem) FILESYSTEM ++M: "J. R. Okajima" ++L: aufs-users@lists.sourceforge.net (members only) ++L: linux-unionfs@vger.kernel.org ++S: Supported ++W: http://aufs.sourceforge.net ++T: git://github.com/sfjro/aufs4-linux.git ++F: Documentation/ABI/testing/debugfs-aufs ++F: Documentation/ABI/testing/sysfs-aufs ++F: Documentation/filesystems/aufs/ ++F: fs/aufs/ ++F: include/uapi/linux/aufs_type.h ++ + AUXILIARY DISPLAY DRIVERS + M: Miguel Ojeda Sandonis + S: Maintained +@@ -3864,7 +3875,8 @@ + CADENCE USB3 DRD IP DRIVER + M: Peter Chen + M: Pawel Laszczak +-M: Roger Quadros ++R: Roger Quadros ++R: Aswath Govindraju + L: linux-usb@vger.kernel.org + S: Maintained + T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git +@@ -3911,7 +3923,9 @@ + T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git + T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git + F: Documentation/devicetree/bindings/net/can/ ++F: Documentation/devicetree/bindings/phy/ti,tcan104x-can.yaml + F: drivers/net/can/ ++F: drivers/phy/phy-can-transceiver.c + F: include/linux/can/dev.h + F: include/linux/can/led.h + F: include/linux/can/platform/ +@@ -4515,11 +4529,12 @@ + M: William Breathitt Gray + L: linux-iio@vger.kernel.org + S: Maintained +-F: Documentation/ABI/testing/sysfs-bus-counter* ++F: Documentation/ABI/testing/sysfs-bus-counter + F: Documentation/driver-api/generic-counter.rst + F: drivers/counter/ + F: include/linux/counter.h +-F: include/linux/counter_enum.h ++F: include/uapi/linux/counter.h ++F: tools/counter/ + + CPMAC ETHERNET DRIVER + M: Florian Fainelli +@@ -6413,9 +6428,9 @@ + F: drivers/edac/skx_*.c + + EDAC-TI +-M: Tero Kristo ++M: Tero Kristo + L: linux-edac@vger.kernel.org +-S: Maintained ++S: Odd Fixes + F: drivers/edac/ti_edac.c + + EDIROL UA-101/UA-1000 DRIVER +@@ -6865,7 +6880,6 @@ + M: Patrick Havelange + L: linux-iio@vger.kernel.org + S: Maintained +-F: Documentation/ABI/testing/sysfs-bus-counter-ftm-quaddec + F: Documentation/devicetree/bindings/counter/ftm-quaddec.txt + F: drivers/counter/ftm-quaddec.c + +@@ -9028,6 +9042,11 @@ + S: Supported + F: drivers/cpufreq/intel_pstate.c + ++INTEL QUADRATURE ENCODER PERIPHERAL DRIVER ++M: Jarkko Nikula ++L: linux-iio@vger.kernel.org ++F: drivers/counter/intel-qep.c ++ + INTEL RDMA RNIC DRIVER + M: Faisal Latif + M: Shiraz Saleem +@@ -9145,6 +9164,13 @@ + F: include/linux/interconnect-provider.h + F: include/linux/interconnect.h + ++INTERRUPT COUNTER DRIVER ++M: Oleksij Rempel ++R: Pengutronix Kernel Team ++L: linux-iio@vger.kernel.org ++F: Documentation/devicetree/bindings/counter/interrupt-counter.yaml ++F: drivers/counter/interrupt-cnt.c ++ + INVENSENSE ICM-426xx IMU DRIVER + M: Jean-Baptiste Maneyrol + L: linux-iio@vger.kernel.org +@@ -12654,7 +12680,7 @@ + F: include/uapi/misc/ocxl.h + + OMAP AUDIO SUPPORT +-M: Peter Ujfalusi ++M: Peter Ujfalusi + M: Jarkko Nikula + L: alsa-devel@alsa-project.org (moderated for non-subscribers) + L: linux-omap@vger.kernel.org +@@ -12698,7 +12724,7 @@ + F: drivers/video/fbdev/omap/ + + OMAP GENERAL PURPOSE MEMORY CONTROLLER SUPPORT +-M: Roger Quadros ++M: Roger Quadros + M: Tony Lindgren + L: linux-omap@vger.kernel.org + S: Maintained +@@ -12826,12 +12852,15 @@ + F: arch/arm/plat-omap/ + F: drivers/bus/ti-sysc.c + F: drivers/i2c/busses/i2c-omap.c ++F: drivers/input/misc/tps65218-pwrbutton.c ++F: drivers/input/misc/tps65219-pwrbutton.c + F: drivers/irqchip/irq-omap-intc.c + F: drivers/mfd/*omap*.c + F: drivers/mfd/menelaus.c + F: drivers/mfd/palmas.c + F: drivers/mfd/tps65217.c + F: drivers/mfd/tps65218.c ++F: drivers/mfd/tps65219.c + F: drivers/mfd/tps65910.c + F: drivers/mfd/twl-core.[ch] + F: drivers/mfd/twl4030*.c +@@ -12841,6 +12870,7 @@ + F: drivers/regulator/pbias-regulator.c + F: drivers/regulator/tps65217-regulator.c + F: drivers/regulator/tps65218-regulator.c ++F: drivers/regulator/tps65219-regulator.c + F: drivers/regulator/tps65910-regulator.c + F: drivers/regulator/twl-regulator.c + F: drivers/regulator/twl6030-regulator.c +@@ -12866,6 +12896,15 @@ + S: Maintained + F: drivers/char/pcmcia/cm4040_cs.* + ++OMNIVISION OV1063x SENSOR DRIVER ++M: Benoit Parrot ++L: linux-media@vger.kernel.org ++S: Maintained ++T: git git://linuxtv.org/media_tree.git ++F: Documentation/devicetree/bindings/media/i2c/ov1063x.yaml ++F: drivers/media/i2c/ov1063x.c ++F: drivers/media/i2c/ov1063x_regs.h ++ + OMNIVISION OV13858 SENSOR DRIVER + M: Sakari Ailus + L: linux-media@vger.kernel.org +@@ -17284,7 +17323,7 @@ + F: drivers/irqchip/irq-xtensa-* + + TEXAS INSTRUMENTS ASoC DRIVERS +-M: Peter Ujfalusi ++M: Peter Ujfalusi + L: alsa-devel@alsa-project.org (moderated for non-subscribers) + S: Maintained + F: sound/soc/ti/ +@@ -17296,9 +17335,22 @@ + F: Documentation/devicetree/bindings/iio/dac/ti,dac7612.txt + F: drivers/iio/dac/ti-dac7612.c + ++TEXAS INSTRUMENTS DMA DRIVERS ++M: Peter Ujfalusi ++L: dmaengine@vger.kernel.org ++S: Maintained ++F: Documentation/devicetree/bindings/dma/ti-dma-crossbar.txt ++F: Documentation/devicetree/bindings/dma/ti-edma.txt ++F: Documentation/devicetree/bindings/dma/ti/ ++F: drivers/dma/ti/ ++X: drivers/dma/ti/cppi41.c ++F: include/linux/dma/k3-udma-glue.h ++F: include/linux/dma/ti-cppi5.h ++F: include/linux/dma/k3-psil.h ++ + TEXAS INSTRUMENTS' SYSTEM CONTROL INTERFACE (TISCI) PROTOCOL DRIVER + M: Nishanth Menon +-M: Tero Kristo ++M: Tero Kristo + M: Santosh Shilimkar + L: linux-arm-kernel@lists.infradead.org + S: Maintained +@@ -17436,12 +17488,19 @@ + F: drivers/clk/clk-cdce706.c + + TI CLOCK DRIVER +-M: Tero Kristo ++M: Tero Kristo + L: linux-omap@vger.kernel.org +-S: Maintained ++S: Odd Fixes + F: drivers/clk/ti/ + F: include/linux/clk/ti.h + ++TI J721E CSI2RX DRIVER ++M: Pratyush Yadav ++L: linux-media@vger.kernel.org ++S: Supported ++F: Documentation/devicetree/bindings/media/ti,j721e-csi2rx.yaml ++F: drivers/media/platform/ti/j721e-csi2rx/ ++ + TI DAVINCI MACHINE SUPPORT + M: Sekhar Nori + R: Bartosz Golaszewski +@@ -17464,7 +17523,7 @@ + M: Keerthy + L: linux-gpio@vger.kernel.org + S: Maintained +-F: Documentation/devicetree/bindings/gpio/gpio-davinci.txt ++F: Documentation/devicetree/bindings/gpio/gpio-davinci.yaml + F: drivers/gpio/gpio-davinci.c + + TI DAVINCI SERIES MEDIA DRIVER +@@ -17575,7 +17634,7 @@ + F: drivers/nfc/trf7970a.c + + TI TWL4030 SERIES SOC CODEC DRIVER +-M: Peter Ujfalusi ++M: Peter Ujfalusi + L: alsa-devel@alsa-project.org (moderated for non-subscribers) + S: Maintained + F: sound/soc/codecs/twl4030* +@@ -17587,8 +17646,10 @@ + W: http://linuxtv.org/ + Q: http://patchwork.linuxtv.org/project/linux-media/list/ + F: Documentation/devicetree/bindings/media/ti,cal.yaml ++F: Documentation/devicetree/bindings/media/ti,vip.yaml + F: Documentation/devicetree/bindings/media/ti,vpe.yaml +-F: drivers/media/platform/ti-vpe/ ++F: drivers/media/platform/ti/cal/ ++F: drivers/media/platform/ti/vpe/ + + TI WILINK WIRELESS DRIVERS + L: linux-wireless@vger.kernel.org +@@ -18877,6 +18938,15 @@ + F: include/linux/watchdog.h + F: include/uapi/linux/watchdog.h + ++WAVE5 VPU CODEC DRIVER ++M: Nas Chung ++M: Robert Beckett ++M: Sebastian Fricke ++L: linux-media@vger.kernel.org ++S: Maintained ++F: Documentation/devicetree/bindings/media/cnm,wave5.yaml ++F: drivers/media/platform/chips-media/wave5/ ++ + WHISKEYCOVE PMIC GPIO DRIVER + M: Kuppuswamy Sathyanarayanan + L: linux-gpio@vger.kernel.org +diff -Naur --no-dereference a/Makefile b/Makefile +--- a/Makefile 2023-02-15 11:22:27.000000000 -0500 ++++ b/Makefile 2024-11-24 20:19:38.092228681 -0500 +@@ -1369,6 +1369,9 @@ + %.dtb: include/config/kernel.release scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ + ++%.dtbo: include/config/kernel.release scripts_dtc ++ $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ ++ + PHONY += dtbs dtbs_install dtbs_check + dtbs: include/config/kernel.release scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) +@@ -1830,7 +1833,7 @@ + @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ + \( -name '*.[aios]' -o -name '*.ko' -o -name '.*.cmd' \ + -o -name '*.ko.*' \ +- -o -name '*.dtb' -o -name '*.dtb.S' -o -name '*.dt.yaml' \ ++ -o -name '*.dtb' -o -name '*.dtbo' -o -name '*.dtb.S' -o -name '*.dt.yaml' \ + -o -name '*.dwo' -o -name '*.lst' \ + -o -name '*.su' -o -name '*.mod' \ + -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ +diff -Naur --no-dereference a/mm/filemap.c b/mm/filemap.c +--- a/mm/filemap.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/filemap.c 2024-11-24 20:19:38.252228969 -0500 +@@ -2913,7 +2913,7 @@ + vm_fault_t ret = VM_FAULT_LOCKED; + + sb_start_pagefault(inode->i_sb); +- file_update_time(vmf->vma->vm_file); ++ vma_file_update_time(vmf->vma); + lock_page(page); + if (page->mapping != inode->i_mapping) { + unlock_page(page); +diff -Naur --no-dereference a/mm/highmem.c b/mm/highmem.c +--- a/mm/highmem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/highmem.c 2024-11-24 20:19:38.253228971 -0500 +@@ -31,10 +31,6 @@ + #include + #include + +-#if defined(CONFIG_HIGHMEM) || defined(CONFIG_X86_32) +-DEFINE_PER_CPU(int, __kmap_atomic_idx); +-#endif +- + /* + * Virtual_count is not a pure "count". + * 0 means that it is not mapped, and has not been mapped +@@ -108,9 +104,7 @@ + atomic_long_t _totalhigh_pages __read_mostly; + EXPORT_SYMBOL(_totalhigh_pages); + +-EXPORT_PER_CPU_SYMBOL(__kmap_atomic_idx); +- +-unsigned int nr_free_highpages (void) ++unsigned int __nr_free_highpages (void) + { + struct zone *zone; + unsigned int pages = 0; +@@ -147,7 +141,7 @@ + do { spin_unlock(&kmap_lock); (void)(flags); } while (0) + #endif + +-struct page *kmap_to_page(void *vaddr) ++struct page *__kmap_to_page(void *vaddr) + { + unsigned long addr = (unsigned long)vaddr; + +@@ -158,7 +152,7 @@ + + return virt_to_page(addr); + } +-EXPORT_SYMBOL(kmap_to_page); ++EXPORT_SYMBOL(__kmap_to_page); + + static void flush_all_zero_pkmaps(void) + { +@@ -200,10 +194,7 @@ + flush_tlb_kernel_range(PKMAP_ADDR(0), PKMAP_ADDR(LAST_PKMAP)); + } + +-/** +- * kmap_flush_unused - flush all unused kmap mappings in order to remove stray mappings +- */ +-void kmap_flush_unused(void) ++void __kmap_flush_unused(void) + { + lock_kmap(); + flush_all_zero_pkmaps(); +@@ -367,9 +358,250 @@ + if (need_wakeup) + wake_up(pkmap_map_wait); + } +- + EXPORT_SYMBOL(kunmap_high); +-#endif /* CONFIG_HIGHMEM */ ++#endif /* CONFIG_HIGHMEM */ ++ ++#ifdef CONFIG_KMAP_LOCAL ++ ++#include ++ ++/* ++ * With DEBUG_HIGHMEM the stack depth is doubled and every second ++ * slot is unused which acts as a guard page ++ */ ++#ifdef CONFIG_DEBUG_HIGHMEM ++# define KM_INCR 2 ++#else ++# define KM_INCR 1 ++#endif ++ ++static inline int kmap_local_idx_push(void) ++{ ++ WARN_ON_ONCE(in_irq() && !irqs_disabled()); ++ current->kmap_ctrl.idx += KM_INCR; ++ BUG_ON(current->kmap_ctrl.idx >= KM_MAX_IDX); ++ return current->kmap_ctrl.idx - 1; ++} ++ ++static inline int kmap_local_idx(void) ++{ ++ return current->kmap_ctrl.idx - 1; ++} ++ ++static inline void kmap_local_idx_pop(void) ++{ ++ current->kmap_ctrl.idx -= KM_INCR; ++ BUG_ON(current->kmap_ctrl.idx < 0); ++} ++ ++#ifndef arch_kmap_local_post_map ++# define arch_kmap_local_post_map(vaddr, pteval) do { } while (0) ++#endif ++ ++#ifndef arch_kmap_local_pre_unmap ++# define arch_kmap_local_pre_unmap(vaddr) do { } while (0) ++#endif ++ ++#ifndef arch_kmap_local_post_unmap ++# define arch_kmap_local_post_unmap(vaddr) do { } while (0) ++#endif ++ ++#ifndef arch_kmap_local_map_idx ++#define arch_kmap_local_map_idx(idx, pfn) kmap_local_calc_idx(idx) ++#endif ++ ++#ifndef arch_kmap_local_unmap_idx ++#define arch_kmap_local_unmap_idx(idx, vaddr) kmap_local_calc_idx(idx) ++#endif ++ ++#ifndef arch_kmap_local_high_get ++static inline void *arch_kmap_local_high_get(struct page *page) ++{ ++ return NULL; ++} ++#endif ++ ++/* Unmap a local mapping which was obtained by kmap_high_get() */ ++static inline bool kmap_high_unmap_local(unsigned long vaddr) ++{ ++#ifdef ARCH_NEEDS_KMAP_HIGH_GET ++ if (vaddr >= PKMAP_ADDR(0) && vaddr < PKMAP_ADDR(LAST_PKMAP)) { ++ kunmap_high(pte_page(pkmap_page_table[PKMAP_NR(vaddr)])); ++ return true; ++ } ++#endif ++ return false; ++} ++ ++static inline int kmap_local_calc_idx(int idx) ++{ ++ return idx + KM_MAX_IDX * smp_processor_id(); ++} ++ ++static pte_t *__kmap_pte; ++ ++static pte_t *kmap_get_pte(void) ++{ ++ if (!__kmap_pte) ++ __kmap_pte = virt_to_kpte(__fix_to_virt(FIX_KMAP_BEGIN)); ++ return __kmap_pte; ++} ++ ++void *__kmap_local_pfn_prot(unsigned long pfn, pgprot_t prot) ++{ ++ pte_t pteval, *kmap_pte = kmap_get_pte(); ++ unsigned long vaddr; ++ int idx; ++ ++ /* ++ * Disable migration so resulting virtual address is stable ++ * accross preemption. ++ */ ++ migrate_disable(); ++ preempt_disable(); ++ idx = arch_kmap_local_map_idx(kmap_local_idx_push(), pfn); ++ vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); ++ BUG_ON(!pte_none(*(kmap_pte - idx))); ++ pteval = pfn_pte(pfn, prot); ++ set_pte_at(&init_mm, vaddr, kmap_pte - idx, pteval); ++ arch_kmap_local_post_map(vaddr, pteval); ++ current->kmap_ctrl.pteval[kmap_local_idx()] = pteval; ++ preempt_enable(); ++ ++ return (void *)vaddr; ++} ++EXPORT_SYMBOL_GPL(__kmap_local_pfn_prot); ++ ++void *__kmap_local_page_prot(struct page *page, pgprot_t prot) ++{ ++ void *kmap; ++ ++ if (!PageHighMem(page)) ++ return page_address(page); ++ ++ /* Try kmap_high_get() if architecture has it enabled */ ++ kmap = arch_kmap_local_high_get(page); ++ if (kmap) ++ return kmap; ++ ++ return __kmap_local_pfn_prot(page_to_pfn(page), prot); ++} ++EXPORT_SYMBOL(__kmap_local_page_prot); ++ ++void kunmap_local_indexed(void *vaddr) ++{ ++ unsigned long addr = (unsigned long) vaddr & PAGE_MASK; ++ pte_t *kmap_pte = kmap_get_pte(); ++ int idx; ++ ++ if (addr < __fix_to_virt(FIX_KMAP_END) || ++ addr > __fix_to_virt(FIX_KMAP_BEGIN)) { ++ /* ++ * Handle mappings which were obtained by kmap_high_get() ++ * first as the virtual address of such mappings is below ++ * PAGE_OFFSET. Warn for all other addresses which are in ++ * the user space part of the virtual address space. ++ */ ++ if (!kmap_high_unmap_local(addr)) ++ WARN_ON_ONCE(addr < PAGE_OFFSET); ++ return; ++ } ++ ++ preempt_disable(); ++ idx = arch_kmap_local_unmap_idx(kmap_local_idx(), addr); ++ WARN_ON_ONCE(addr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); ++ ++ arch_kmap_local_pre_unmap(addr); ++ pte_clear(&init_mm, addr, kmap_pte - idx); ++ arch_kmap_local_post_unmap(addr); ++ current->kmap_ctrl.pteval[kmap_local_idx()] = __pte(0); ++ kmap_local_idx_pop(); ++ preempt_enable(); ++ migrate_enable(); ++} ++EXPORT_SYMBOL(kunmap_local_indexed); ++ ++/* ++ * Invoked before switch_to(). This is safe even when during or after ++ * clearing the maps an interrupt which needs a kmap_local happens because ++ * the task::kmap_ctrl.idx is not modified by the unmapping code so a ++ * nested kmap_local will use the next unused index and restore the index ++ * on unmap. The already cleared kmaps of the outgoing task are irrelevant ++ * because the interrupt context does not know about them. The same applies ++ * when scheduling back in for an interrupt which happens before the ++ * restore is complete. ++ */ ++void __kmap_local_sched_out(void) ++{ ++ struct task_struct *tsk = current; ++ pte_t *kmap_pte = kmap_get_pte(); ++ int i; ++ ++ /* Clear kmaps */ ++ for (i = 0; i < tsk->kmap_ctrl.idx; i++) { ++ pte_t pteval = tsk->kmap_ctrl.pteval[i]; ++ unsigned long addr; ++ int idx; ++ ++ /* With debug all even slots are unmapped and act as guard */ ++ if (IS_ENABLED(CONFIG_DEBUG_HIGHMEM) && !(i & 0x01)) { ++ WARN_ON_ONCE(!pte_none(pteval)); ++ continue; ++ } ++ if (WARN_ON_ONCE(pte_none(pteval))) ++ continue; ++ ++ /* ++ * This is a horrible hack for XTENSA to calculate the ++ * coloured PTE index. Uses the PFN encoded into the pteval ++ * and the map index calculation because the actual mapped ++ * virtual address is not stored in task::kmap_ctrl. ++ * For any sane architecture this is optimized out. ++ */ ++ idx = arch_kmap_local_map_idx(i, pte_pfn(pteval)); ++ ++ addr = __fix_to_virt(FIX_KMAP_BEGIN + idx); ++ arch_kmap_local_pre_unmap(addr); ++ pte_clear(&init_mm, addr, kmap_pte - idx); ++ arch_kmap_local_post_unmap(addr); ++ } ++} ++ ++void __kmap_local_sched_in(void) ++{ ++ struct task_struct *tsk = current; ++ pte_t *kmap_pte = kmap_get_pte(); ++ int i; ++ ++ /* Restore kmaps */ ++ for (i = 0; i < tsk->kmap_ctrl.idx; i++) { ++ pte_t pteval = tsk->kmap_ctrl.pteval[i]; ++ unsigned long addr; ++ int idx; ++ ++ /* With debug all even slots are unmapped and act as guard */ ++ if (IS_ENABLED(CONFIG_DEBUG_HIGHMEM) && !(i & 0x01)) { ++ WARN_ON_ONCE(!pte_none(pteval)); ++ continue; ++ } ++ if (WARN_ON_ONCE(pte_none(pteval))) ++ continue; ++ ++ /* See comment in __kmap_local_sched_out() */ ++ idx = arch_kmap_local_map_idx(i, pte_pfn(pteval)); ++ addr = __fix_to_virt(FIX_KMAP_BEGIN + idx); ++ set_pte_at(&init_mm, addr, kmap_pte - idx, pteval); ++ arch_kmap_local_post_map(addr, pteval); ++ } ++} ++ ++void kmap_local_fork(struct task_struct *tsk) ++{ ++ if (WARN_ON_ONCE(tsk->kmap_ctrl.idx)) ++ memset(&tsk->kmap_ctrl, 0, sizeof(tsk->kmap_ctrl)); ++} ++ ++#endif + + #if defined(HASHED_PAGE_VIRTUAL) + +diff -Naur --no-dereference a/mm/Kconfig b/mm/Kconfig +--- a/mm/Kconfig 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/Kconfig 2024-11-24 20:19:38.252228969 -0500 +@@ -387,7 +387,7 @@ + + config TRANSPARENT_HUGEPAGE + bool "Transparent Hugepage Support" +- depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE ++ depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE && !PREEMPT_RT + select COMPACTION + select XARRAY_MULTI + help +@@ -859,4 +859,7 @@ + config MAPPING_DIRTY_HELPERS + bool + ++config KMAP_LOCAL ++ bool ++ + endmenu +diff -Naur --no-dereference a/mm/Makefile b/mm/Makefile +--- a/mm/Makefile 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/Makefile 2024-11-24 20:19:38.252228969 -0500 +@@ -120,3 +120,4 @@ + obj-$(CONFIG_MAPPING_DIRTY_HELPERS) += mapping_dirty_helpers.o + obj-$(CONFIG_PTDUMP_CORE) += ptdump.o + obj-$(CONFIG_PAGE_REPORTING) += page_reporting.o ++obj-y += prfile.o +diff -Naur --no-dereference a/mm/memcontrol.c b/mm/memcontrol.c +--- a/mm/memcontrol.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/memcontrol.c 2024-11-24 20:19:38.253228971 -0500 +@@ -63,6 +63,7 @@ + #include + #include + #include "slab.h" ++#include + + #include + +@@ -93,6 +94,13 @@ + static DECLARE_WAIT_QUEUE_HEAD(memcg_cgwb_frn_waitq); + #endif + ++struct event_lock { ++ local_lock_t l; ++}; ++static DEFINE_PER_CPU(struct event_lock, event_lock) = { ++ .l = INIT_LOCAL_LOCK(l), ++}; ++ + /* Whether legacy memory+swap accounting is active */ + static bool do_memsw_account(void) + { +@@ -816,6 +824,7 @@ + pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec); + memcg = pn->memcg; + ++ preempt_disable_rt(); + /* Update memcg */ + __mod_memcg_state(memcg, idx, val); + +@@ -835,6 +844,7 @@ + x = 0; + } + __this_cpu_write(pn->lruvec_stat_cpu->count[idx], x); ++ preempt_enable_rt(); + } + + /** +@@ -2200,6 +2210,7 @@ + EXPORT_SYMBOL(unlock_page_memcg); + + struct memcg_stock_pcp { ++ local_lock_t lock; + struct mem_cgroup *cached; /* this never be root cgroup */ + unsigned int nr_pages; + +@@ -2251,7 +2262,7 @@ + if (nr_pages > MEMCG_CHARGE_BATCH) + return ret; + +- local_irq_save(flags); ++ local_lock_irqsave(&memcg_stock.lock, flags); + + stock = this_cpu_ptr(&memcg_stock); + if (memcg == stock->cached && stock->nr_pages >= nr_pages) { +@@ -2259,7 +2270,7 @@ + ret = true; + } + +- local_irq_restore(flags); ++ local_unlock_irqrestore(&memcg_stock.lock, flags); + + return ret; + } +@@ -2294,14 +2305,14 @@ + * The only protection from memory hotplug vs. drain_stock races is + * that we always operate on local CPU stock here with IRQ disabled + */ +- local_irq_save(flags); ++ local_lock_irqsave(&memcg_stock.lock, flags); + + stock = this_cpu_ptr(&memcg_stock); + drain_obj_stock(stock); + drain_stock(stock); + clear_bit(FLUSHING_CACHED_CHARGE, &stock->flags); + +- local_irq_restore(flags); ++ local_unlock_irqrestore(&memcg_stock.lock, flags); + } + + /* +@@ -2313,7 +2324,7 @@ + struct memcg_stock_pcp *stock; + unsigned long flags; + +- local_irq_save(flags); ++ local_lock_irqsave(&memcg_stock.lock, flags); + + stock = this_cpu_ptr(&memcg_stock); + if (stock->cached != memcg) { /* reset if necessary */ +@@ -2326,7 +2337,7 @@ + if (stock->nr_pages > MEMCG_CHARGE_BATCH) + drain_stock(stock); + +- local_irq_restore(flags); ++ local_unlock_irqrestore(&memcg_stock.lock, flags); + } + + /* +@@ -2346,7 +2357,7 @@ + * as well as workers from this path always operate on the local + * per-cpu data. CPU up doesn't touch memcg_stock at all. + */ +- curcpu = get_cpu(); ++ curcpu = get_cpu_light(); + for_each_online_cpu(cpu) { + struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu); + struct mem_cgroup *memcg; +@@ -2369,7 +2380,7 @@ + schedule_work_on(cpu, &stock->work); + } + } +- put_cpu(); ++ put_cpu_light(); + mutex_unlock(&percpu_charge_mutex); + } + +@@ -3134,7 +3145,7 @@ + unsigned long flags; + bool ret = false; + +- local_irq_save(flags); ++ local_lock_irqsave(&memcg_stock.lock, flags); + + stock = this_cpu_ptr(&memcg_stock); + if (objcg == stock->cached_objcg && stock->nr_bytes >= nr_bytes) { +@@ -3142,7 +3153,7 @@ + ret = true; + } + +- local_irq_restore(flags); ++ local_unlock_irqrestore(&memcg_stock.lock, flags); + + return ret; + } +@@ -3209,7 +3220,7 @@ + struct memcg_stock_pcp *stock; + unsigned long flags; + +- local_irq_save(flags); ++ local_lock_irqsave(&memcg_stock.lock, flags); + + stock = this_cpu_ptr(&memcg_stock); + if (stock->cached_objcg != objcg) { /* reset if necessary */ +@@ -3223,7 +3234,7 @@ + if (stock->nr_bytes > PAGE_SIZE) + drain_obj_stock(stock); + +- local_irq_restore(flags); ++ local_unlock_irqrestore(&memcg_stock.lock, flags); + } + + int obj_cgroup_charge(struct obj_cgroup *objcg, gfp_t gfp, size_t size) +@@ -5739,12 +5750,12 @@ + + ret = 0; + +- local_irq_disable(); ++ local_lock_irq(&event_lock.l); + mem_cgroup_charge_statistics(to, page, nr_pages); + memcg_check_events(to, page); + mem_cgroup_charge_statistics(from, page, -nr_pages); + memcg_check_events(from, page); +- local_irq_enable(); ++ local_unlock_irq(&event_lock.l); + out_unlock: + unlock_page(page); + out: +@@ -6814,10 +6825,10 @@ + css_get(&memcg->css); + commit_charge(page, memcg); + +- local_irq_disable(); ++ local_lock_irq(&event_lock.l); + mem_cgroup_charge_statistics(memcg, page, nr_pages); + memcg_check_events(memcg, page); +- local_irq_enable(); ++ local_unlock_irq(&event_lock.l); + + /* + * Cgroup1's unified memory+swap counter has been charged with the +@@ -6873,11 +6884,11 @@ + memcg_oom_recover(ug->memcg); + } + +- local_irq_save(flags); ++ local_lock_irqsave(&event_lock.l, flags); + __count_memcg_events(ug->memcg, PGPGOUT, ug->pgpgout); + __this_cpu_add(ug->memcg->vmstats_percpu->nr_page_events, ug->nr_pages); + memcg_check_events(ug->memcg, ug->dummy_page); +- local_irq_restore(flags); ++ local_unlock_irqrestore(&event_lock.l, flags); + + /* drop reference from uncharge_page */ + css_put(&ug->memcg->css); +@@ -7031,10 +7042,10 @@ + css_get(&memcg->css); + commit_charge(newpage, memcg); + +- local_irq_save(flags); ++ local_lock_irqsave(&event_lock.l, flags); + mem_cgroup_charge_statistics(memcg, newpage, nr_pages); + memcg_check_events(memcg, newpage); +- local_irq_restore(flags); ++ local_unlock_irqrestore(&event_lock.l, flags); + } + + DEFINE_STATIC_KEY_FALSE(memcg_sockets_enabled_key); +@@ -7154,9 +7165,13 @@ + cpuhp_setup_state_nocalls(CPUHP_MM_MEMCQ_DEAD, "mm/memctrl:dead", NULL, + memcg_hotplug_cpu_dead); + +- for_each_possible_cpu(cpu) +- INIT_WORK(&per_cpu_ptr(&memcg_stock, cpu)->work, +- drain_local_stock); ++ for_each_possible_cpu(cpu) { ++ struct memcg_stock_pcp *stock; ++ ++ stock = per_cpu_ptr(&memcg_stock, cpu); ++ INIT_WORK(&stock->work, drain_local_stock); ++ local_lock_init(&stock->lock); ++ } + + for_each_node(node) { + struct mem_cgroup_tree_per_node *rtpn; +@@ -7205,6 +7220,7 @@ + struct mem_cgroup *memcg, *swap_memcg; + unsigned int nr_entries; + unsigned short oldid; ++ unsigned long flags; + + VM_BUG_ON_PAGE(PageLRU(page), page); + VM_BUG_ON_PAGE(page_count(page), page); +@@ -7250,9 +7266,13 @@ + * important here to have the interrupts disabled because it is the + * only synchronisation we have for updating the per-CPU variables. + */ ++ local_lock_irqsave(&event_lock.l, flags); ++#ifndef CONFIG_PREEMPT_RT + VM_BUG_ON(!irqs_disabled()); ++#endif + mem_cgroup_charge_statistics(memcg, page, -nr_entries); + memcg_check_events(memcg, page); ++ local_unlock_irqrestore(&event_lock.l, flags); + + css_put(&memcg->css); + } +diff -Naur --no-dereference a/mm/mmap.c b/mm/mmap.c +--- a/mm/mmap.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/mmap.c 2024-11-24 20:19:38.253228971 -0500 +@@ -179,7 +179,7 @@ + if (vma->vm_ops && vma->vm_ops->close) + vma->vm_ops->close(vma); + if (vma->vm_file) +- fput(vma->vm_file); ++ vma_fput(vma); + mpol_put(vma_policy(vma)); + vm_area_free(vma); + return next; +@@ -951,7 +951,7 @@ + if (remove_next) { + if (file) { + uprobe_munmap(next, next->vm_start, next->vm_end); +- fput(file); ++ vma_fput(vma); + } + if (next->anon_vma) + anon_vma_merge(vma, next); +@@ -1834,7 +1834,7 @@ + * fput the vma->vm_file here or we would add an extra fput for file + * and cause general protection fault ultimately. + */ +- fput(vma->vm_file); ++ vma_fput(vma); + vm_area_free(vma); + vma = merge; + /* Update vm_flags to pick up the change. */ +@@ -1904,8 +1904,8 @@ + if (vma->vm_ops && vma->vm_ops->close) + vma->vm_ops->close(vma); + unmap_and_free_vma: ++ vma_fput(vma); + vma->vm_file = NULL; +- fput(file); + + /* Undo any partial mapping done by a device driver. */ + unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end); +@@ -2772,7 +2772,7 @@ + goto out_free_mpol; + + if (new->vm_file) +- get_file(new->vm_file); ++ vma_get_file(new); + + if (new->vm_ops && new->vm_ops->open) + new->vm_ops->open(new); +@@ -2791,7 +2791,7 @@ + if (new->vm_ops && new->vm_ops->close) + new->vm_ops->close(new); + if (new->vm_file) +- fput(new->vm_file); ++ vma_fput(new); + unlink_anon_vmas(new); + out_free_mpol: + mpol_put(vma_policy(new)); +@@ -2985,6 +2985,9 @@ + unsigned long populate = 0; + unsigned long ret = -EINVAL; + struct file *file; ++#if 1 /* IS_ENABLED(CONFIG_AUFS_FS) */ ++ struct file *prfile; ++#endif + + pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/vm/remap_file_pages.rst.\n", + current->comm, current->pid); +@@ -3059,10 +3062,34 @@ + } + } + ++#if 1 /* IS_ENABLED(CONFIG_AUFS_FS) */ ++ vma_get_file(vma); ++ file = vma->vm_file; ++ prfile = vma->vm_prfile; ++ ret = do_mmap(vma->vm_file, start, size, ++ prot, flags, pgoff, &populate, NULL); ++ if (!IS_ERR_VALUE(ret) && file && prfile) { ++ struct vm_area_struct *new_vma; ++ ++ new_vma = find_vma(mm, ret); ++ if (!new_vma->vm_prfile) ++ new_vma->vm_prfile = prfile; ++ if (prfile) ++ get_file(prfile); ++ } ++ /* ++ * two fput()s instead of vma_fput(vma), ++ * coz vma may not be available anymore. ++ */ ++ fput(file); ++ if (prfile) ++ fput(prfile); ++#else + file = get_file(vma->vm_file); + ret = do_mmap(vma->vm_file, start, size, + prot, flags, pgoff, &populate, NULL); + fput(file); ++#endif /* CONFIG_AUFS_FS */ + out: + mmap_write_unlock(mm); + if (populate) +@@ -3349,7 +3376,7 @@ + if (anon_vma_clone(new_vma, vma)) + goto out_free_mempol; + if (new_vma->vm_file) +- get_file(new_vma->vm_file); ++ vma_get_file(new_vma); + if (new_vma->vm_ops && new_vma->vm_ops->open) new_vma->vm_ops->open(new_vma); vma_link(mm, new_vma, prev, rb_link, rb_parent); diff -Naur --no-dereference a/mm/nommu.c b/mm/nommu.c --- a/mm/nommu.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/mm/nommu.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/mm/nommu.c 2024-11-24 20:19:38.253228971 -0500 @@ -533,7 +533,7 @@ up_write(&nommu_region_sem); @@ -468041,9 +492701,380 @@ diff -Naur --no-dereference a/mm/nommu.c b/mm/nommu.c vm_area_free(vma); return ret; +diff -Naur --no-dereference a/mm/page_alloc.c b/mm/page_alloc.c +--- a/mm/page_alloc.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/page_alloc.c 2024-11-24 20:19:38.253228971 -0500 +@@ -61,6 +61,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -386,6 +387,13 @@ + EXPORT_SYMBOL(nr_online_nodes); + #endif + ++struct pa_lock { ++ local_lock_t l; ++}; ++static DEFINE_PER_CPU(struct pa_lock, pa_lock) = { ++ .l = INIT_LOCAL_LOCK(l), ++}; ++ + int page_group_by_mobility_disabled __read_mostly; + + #ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT +@@ -1331,7 +1339,7 @@ + } + + /* +- * Frees a number of pages from the PCP lists ++ * Frees a number of pages which have been collected from the pcp lists. + * Assumes all pages on list are in same zone, and of same order. + * count is the number of pages to free. + * +@@ -1341,15 +1349,56 @@ + * And clear the zone's pages_scanned counter, to hold off the "all pages are + * pinned" detection logic. + */ +-static void free_pcppages_bulk(struct zone *zone, int count, +- struct per_cpu_pages *pcp) ++static void free_pcppages_bulk(struct zone *zone, struct list_head *head, ++ bool zone_retry) ++{ ++ bool isolated_pageblocks; ++ struct page *page, *tmp; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&zone->lock, flags); ++ isolated_pageblocks = has_isolate_pageblock(zone); ++ ++ /* ++ * Use safe version since after __free_one_page(), ++ * page->lru.next will not point to original list. ++ */ ++ list_for_each_entry_safe(page, tmp, head, lru) { ++ int mt = get_pcppage_migratetype(page); ++ ++ if (page_zone(page) != zone) { ++ /* ++ * free_unref_page_list() sorts pages by zone. If we end ++ * up with pages from a different NUMA nodes belonging ++ * to the same ZONE index then we need to redo with the ++ * correct ZONE pointer. Skip the page for now, redo it ++ * on the next iteration. ++ */ ++ WARN_ON_ONCE(zone_retry == false); ++ if (zone_retry) ++ continue; ++ } ++ ++ /* MIGRATE_ISOLATE page should not go to pcplists */ ++ VM_BUG_ON_PAGE(is_migrate_isolate(mt), page); ++ /* Pageblock could have been isolated meanwhile */ ++ if (unlikely(isolated_pageblocks)) ++ mt = get_pageblock_migratetype(page); ++ ++ list_del(&page->lru); ++ __free_one_page(page, page_to_pfn(page), zone, 0, mt, FPI_NONE); ++ trace_mm_page_pcpu_drain(page, 0, mt); ++ } ++ spin_unlock_irqrestore(&zone->lock, flags); ++} ++ ++static void isolate_pcp_pages(int count, struct per_cpu_pages *pcp, ++ struct list_head *dst) + { + int migratetype = 0; + int batch_free = 0; + int prefetch_nr = 0; +- bool isolated_pageblocks; +- struct page *page, *tmp; +- LIST_HEAD(head); ++ struct page *page; + + /* + * Ensure proper count is passed which otherwise would stuck in the +@@ -1386,7 +1435,7 @@ + if (bulkfree_pcp_prepare(page)) + continue; + +- list_add_tail(&page->lru, &head); ++ list_add_tail(&page->lru, dst); + + /* + * We are going to put the page back to the global +@@ -1401,26 +1450,6 @@ + prefetch_buddy(page); + } while (--count && --batch_free && !list_empty(list)); + } +- +- spin_lock(&zone->lock); +- isolated_pageblocks = has_isolate_pageblock(zone); +- +- /* +- * Use safe version since after __free_one_page(), +- * page->lru.next will not point to original list. +- */ +- list_for_each_entry_safe(page, tmp, &head, lru) { +- int mt = get_pcppage_migratetype(page); +- /* MIGRATE_ISOLATE page should not go to pcplists */ +- VM_BUG_ON_PAGE(is_migrate_isolate(mt), page); +- /* Pageblock could have been isolated meanwhile */ +- if (unlikely(isolated_pageblocks)) +- mt = get_pageblock_migratetype(page); +- +- __free_one_page(page, page_to_pfn(page), zone, 0, mt, FPI_NONE); +- trace_mm_page_pcpu_drain(page, 0, mt); +- } +- spin_unlock(&zone->lock); + } + + static void free_one_page(struct zone *zone, +@@ -1522,11 +1551,11 @@ + return; + + migratetype = get_pfnblock_migratetype(page, pfn); +- local_irq_save(flags); ++ local_lock_irqsave(&pa_lock.l, flags); + __count_vm_events(PGFREE, 1 << order); + free_one_page(page_zone(page), page, pfn, order, migratetype, + fpi_flags); +- local_irq_restore(flags); ++ local_unlock_irqrestore(&pa_lock.l, flags); + } + + void __free_pages_core(struct page *page, unsigned int order) +@@ -2938,13 +2967,18 @@ + { + unsigned long flags; + int to_drain, batch; ++ LIST_HEAD(dst); + +- local_irq_save(flags); ++ local_lock_irqsave(&pa_lock.l, flags); + batch = READ_ONCE(pcp->batch); + to_drain = min(pcp->count, batch); + if (to_drain > 0) +- free_pcppages_bulk(zone, to_drain, pcp); +- local_irq_restore(flags); ++ isolate_pcp_pages(to_drain, pcp, &dst); ++ ++ local_unlock_irqrestore(&pa_lock.l, flags); ++ ++ if (to_drain > 0) ++ free_pcppages_bulk(zone, &dst, false); + } + #endif + +@@ -2960,14 +2994,21 @@ + unsigned long flags; + struct per_cpu_pageset *pset; + struct per_cpu_pages *pcp; ++ LIST_HEAD(dst); ++ int count; + +- local_irq_save(flags); ++ local_lock_irqsave(&pa_lock.l, flags); + pset = per_cpu_ptr(zone->pageset, cpu); + + pcp = &pset->pcp; +- if (pcp->count) +- free_pcppages_bulk(zone, pcp->count, pcp); +- local_irq_restore(flags); ++ count = pcp->count; ++ if (count) ++ isolate_pcp_pages(count, pcp, &dst); ++ ++ local_unlock_irqrestore(&pa_lock.l, flags); ++ ++ if (count) ++ free_pcppages_bulk(zone, &dst, false); + } + + /* +@@ -3015,9 +3056,9 @@ + * cpu which is allright but we also have to make sure to not move to + * a different one. + */ +- preempt_disable(); ++ migrate_disable(); + drain_local_pages(drain->zone); +- preempt_enable(); ++ migrate_enable(); + } + + /* +@@ -3166,7 +3207,8 @@ + return true; + } + +-static void free_unref_page_commit(struct page *page, unsigned long pfn) ++static void free_unref_page_commit(struct page *page, unsigned long pfn, ++ struct list_head *dst) + { + struct zone *zone = page_zone(page); + struct per_cpu_pages *pcp; +@@ -3196,7 +3238,8 @@ + pcp->count++; + if (pcp->count >= pcp->high) { + unsigned long batch = READ_ONCE(pcp->batch); +- free_pcppages_bulk(zone, batch, pcp); ++ ++ isolate_pcp_pages(batch, pcp, dst); + } + } + +@@ -3207,13 +3250,17 @@ + { + unsigned long flags; + unsigned long pfn = page_to_pfn(page); ++ struct zone *zone = page_zone(page); ++ LIST_HEAD(dst); + + if (!free_unref_page_prepare(page, pfn)) + return; + +- local_irq_save(flags); +- free_unref_page_commit(page, pfn); +- local_irq_restore(flags); ++ local_lock_irqsave(&pa_lock.l, flags); ++ free_unref_page_commit(page, pfn, &dst); ++ local_unlock_irqrestore(&pa_lock.l, flags); ++ if (!list_empty(&dst)) ++ free_pcppages_bulk(zone, &dst, false); + } + + /* +@@ -3224,6 +3271,11 @@ + struct page *page, *next; + unsigned long flags, pfn; + int batch_count = 0; ++ struct list_head dsts[__MAX_NR_ZONES]; ++ int i; ++ ++ for (i = 0; i < __MAX_NR_ZONES; i++) ++ INIT_LIST_HEAD(&dsts[i]); + + /* Prepare pages for freeing */ + list_for_each_entry_safe(page, next, list, lru) { +@@ -3233,25 +3285,42 @@ + set_page_private(page, pfn); + } + +- local_irq_save(flags); ++ local_lock_irqsave(&pa_lock.l, flags); + list_for_each_entry_safe(page, next, list, lru) { + unsigned long pfn = page_private(page); ++ enum zone_type type; + + set_page_private(page, 0); + trace_mm_page_free_batched(page); +- free_unref_page_commit(page, pfn); ++ type = page_zonenum(page); ++ free_unref_page_commit(page, pfn, &dsts[type]); + + /* + * Guard against excessive IRQ disabled times when we get + * a large list of pages to free. + */ + if (++batch_count == SWAP_CLUSTER_MAX) { +- local_irq_restore(flags); ++ local_unlock_irqrestore(&pa_lock.l, flags); + batch_count = 0; +- local_irq_save(flags); ++ local_lock_irqsave(&pa_lock.l, flags); + } + } +- local_irq_restore(flags); ++ local_unlock_irqrestore(&pa_lock.l, flags); ++ ++ for (i = 0; i < __MAX_NR_ZONES; ) { ++ struct page *page; ++ struct zone *zone; ++ ++ if (list_empty(&dsts[i])) { ++ i++; ++ continue; ++ } ++ ++ page = list_first_entry(&dsts[i], struct page, lru); ++ zone = page_zone(page); ++ ++ free_pcppages_bulk(zone, &dsts[i], true); ++ } + } + + /* +@@ -3407,7 +3476,7 @@ + struct page *page; + unsigned long flags; + +- local_irq_save(flags); ++ local_lock_irqsave(&pa_lock.l, flags); + pcp = &this_cpu_ptr(zone->pageset)->pcp; + list = &pcp->lists[migratetype]; + page = __rmqueue_pcplist(zone, migratetype, alloc_flags, pcp, list); +@@ -3415,7 +3484,7 @@ + __count_zid_vm_events(PGALLOC, page_zonenum(page), 1); + zone_statistics(preferred_zone, zone); + } +- local_irq_restore(flags); ++ local_unlock_irqrestore(&pa_lock.l, flags); + return page; + } + +@@ -3449,7 +3518,8 @@ + * allocate greater than order-1 page units with __GFP_NOFAIL. + */ + WARN_ON_ONCE((gfp_flags & __GFP_NOFAIL) && (order > 1)); +- spin_lock_irqsave(&zone->lock, flags); ++ local_lock_irqsave(&pa_lock.l, flags); ++ spin_lock(&zone->lock); + + do { + page = NULL; +@@ -3475,7 +3545,7 @@ + + __count_zid_vm_events(PGALLOC, page_zonenum(page), 1 << order); + zone_statistics(preferred_zone, zone); +- local_irq_restore(flags); ++ local_unlock_irqrestore(&pa_lock.l, flags); + + out: + /* Separate test+clear to avoid unnecessary atomics */ +@@ -3488,7 +3558,7 @@ + return page; + + failed: +- local_irq_restore(flags); ++ local_unlock_irqrestore(&pa_lock.l, flags); + return NULL; + } + +@@ -8815,7 +8885,7 @@ + struct per_cpu_pageset *pset; + + /* avoid races with drain_pages() */ +- local_irq_save(flags); ++ local_lock_irqsave(&pa_lock.l, flags); + if (zone->pageset != &boot_pageset) { + for_each_online_cpu(cpu) { + pset = per_cpu_ptr(zone->pageset, cpu); +@@ -8824,7 +8894,7 @@ + free_percpu(zone->pageset); + zone->pageset = &boot_pageset; + } +- local_irq_restore(flags); ++ local_unlock_irqrestore(&pa_lock.l, flags); + } + + #ifdef CONFIG_MEMORY_HOTREMOVE diff -Naur --no-dereference a/mm/prfile.c b/mm/prfile.c --- a/mm/prfile.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/mm/prfile.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/mm/prfile.c 2024-11-24 20:19:38.254228972 -0500 @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: GPL-2.0 +/* @@ -468131,9 +493162,1658 @@ diff -Naur --no-dereference a/mm/prfile.c b/mm/prfile.c + fput(pr); +} +#endif /* !CONFIG_MMU */ +diff -Naur --no-dereference a/mm/shmem.c b/mm/shmem.c +--- a/mm/shmem.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/shmem.c 2024-11-24 20:19:38.254228972 -0500 +@@ -278,10 +278,10 @@ + ino_t ino; + + if (!(sb->s_flags & SB_KERNMOUNT)) { +- spin_lock(&sbinfo->stat_lock); ++ raw_spin_lock(&sbinfo->stat_lock); + if (sbinfo->max_inodes) { + if (!sbinfo->free_inodes) { +- spin_unlock(&sbinfo->stat_lock); ++ raw_spin_unlock(&sbinfo->stat_lock); + return -ENOSPC; + } + sbinfo->free_inodes--; +@@ -304,7 +304,7 @@ + } + *inop = ino; + } +- spin_unlock(&sbinfo->stat_lock); ++ raw_spin_unlock(&sbinfo->stat_lock); + } else if (inop) { + /* + * __shmem_file_setup, one of our callers, is lock-free: it +@@ -319,13 +319,14 @@ + * to worry about things like glibc compatibility. + */ + ino_t *next_ino; ++ + next_ino = per_cpu_ptr(sbinfo->ino_batch, get_cpu()); + ino = *next_ino; + if (unlikely(ino % SHMEM_INO_BATCH == 0)) { +- spin_lock(&sbinfo->stat_lock); ++ raw_spin_lock(&sbinfo->stat_lock); + ino = sbinfo->next_ino; + sbinfo->next_ino += SHMEM_INO_BATCH; +- spin_unlock(&sbinfo->stat_lock); ++ raw_spin_unlock(&sbinfo->stat_lock); + if (unlikely(is_zero_ino(ino))) + ino++; + } +@@ -341,9 +342,9 @@ + { + struct shmem_sb_info *sbinfo = SHMEM_SB(sb); + if (sbinfo->max_inodes) { +- spin_lock(&sbinfo->stat_lock); ++ raw_spin_lock(&sbinfo->stat_lock); + sbinfo->free_inodes++; +- spin_unlock(&sbinfo->stat_lock); ++ raw_spin_unlock(&sbinfo->stat_lock); + } + } + +@@ -1484,10 +1485,10 @@ + { + struct mempolicy *mpol = NULL; + if (sbinfo->mpol) { +- spin_lock(&sbinfo->stat_lock); /* prevent replace/use races */ ++ raw_spin_lock(&sbinfo->stat_lock); /* prevent replace/use races */ + mpol = sbinfo->mpol; + mpol_get(mpol); +- spin_unlock(&sbinfo->stat_lock); ++ raw_spin_unlock(&sbinfo->stat_lock); + } + return mpol; + } +@@ -3593,9 +3594,10 @@ + struct shmem_options *ctx = fc->fs_private; + struct shmem_sb_info *sbinfo = SHMEM_SB(fc->root->d_sb); + unsigned long inodes; ++ struct mempolicy *mpol = NULL; + const char *err; + +- spin_lock(&sbinfo->stat_lock); ++ raw_spin_lock(&sbinfo->stat_lock); + inodes = sbinfo->max_inodes - sbinfo->free_inodes; + if ((ctx->seen & SHMEM_SEEN_BLOCKS) && ctx->blocks) { + if (!sbinfo->max_blocks) { +@@ -3640,14 +3642,15 @@ + * Preserve previous mempolicy unless mpol remount option was specified. + */ + if (ctx->mpol) { +- mpol_put(sbinfo->mpol); ++ mpol = sbinfo->mpol; + sbinfo->mpol = ctx->mpol; /* transfers initial ref */ + ctx->mpol = NULL; + } +- spin_unlock(&sbinfo->stat_lock); ++ raw_spin_unlock(&sbinfo->stat_lock); ++ mpol_put(mpol); + return 0; + out: +- spin_unlock(&sbinfo->stat_lock); ++ raw_spin_unlock(&sbinfo->stat_lock); + return invalfc(fc, "%s", err); + } + +@@ -3764,7 +3767,7 @@ + sbinfo->mpol = ctx->mpol; + ctx->mpol = NULL; + +- spin_lock_init(&sbinfo->stat_lock); ++ raw_spin_lock_init(&sbinfo->stat_lock); + if (percpu_counter_init(&sbinfo->used_blocks, 0, GFP_KERNEL)) + goto failed; + spin_lock_init(&sbinfo->shrinklist_lock); +diff -Naur --no-dereference a/mm/slab.c b/mm/slab.c +--- a/mm/slab.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/slab.c 2024-11-24 20:19:38.254228972 -0500 +@@ -233,7 +233,7 @@ + parent->shared = NULL; + parent->alien = NULL; + parent->colour_next = 0; +- spin_lock_init(&parent->list_lock); ++ raw_spin_lock_init(&parent->list_lock); + parent->free_objects = 0; + parent->free_touched = 0; + } +@@ -558,9 +558,9 @@ + page_node = page_to_nid(page); + n = get_node(cachep, page_node); + +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + free_block(cachep, &objp, 1, page_node, &list); +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + + slabs_destroy(cachep, &list); + } +@@ -698,7 +698,7 @@ + struct kmem_cache_node *n = get_node(cachep, node); + + if (ac->avail) { +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + /* + * Stuff objects into the remote nodes shared array first. + * That way we could avoid the overhead of putting the objects +@@ -709,7 +709,7 @@ + + free_block(cachep, ac->entry, ac->avail, node, list); + ac->avail = 0; +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + } + } + +@@ -782,9 +782,9 @@ + slabs_destroy(cachep, &list); + } else { + n = get_node(cachep, page_node); +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + free_block(cachep, &objp, 1, page_node, &list); +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + slabs_destroy(cachep, &list); + } + return 1; +@@ -825,10 +825,10 @@ + */ + n = get_node(cachep, node); + if (n) { +- spin_lock_irq(&n->list_lock); ++ raw_spin_lock_irq(&n->list_lock); + n->free_limit = (1 + nr_cpus_node(node)) * cachep->batchcount + + cachep->num; +- spin_unlock_irq(&n->list_lock); ++ raw_spin_unlock_irq(&n->list_lock); + + return 0; + } +@@ -907,7 +907,7 @@ + goto fail; + + n = get_node(cachep, node); +- spin_lock_irq(&n->list_lock); ++ raw_spin_lock_irq(&n->list_lock); + if (n->shared && force_change) { + free_block(cachep, n->shared->entry, + n->shared->avail, node, &list); +@@ -925,7 +925,7 @@ + new_alien = NULL; + } + +- spin_unlock_irq(&n->list_lock); ++ raw_spin_unlock_irq(&n->list_lock); + slabs_destroy(cachep, &list); + + /* +@@ -964,7 +964,7 @@ + if (!n) + continue; + +- spin_lock_irq(&n->list_lock); ++ raw_spin_lock_irq(&n->list_lock); + + /* Free limit for this kmem_cache_node */ + n->free_limit -= cachep->batchcount; +@@ -975,7 +975,7 @@ + nc->avail = 0; + + if (!cpumask_empty(mask)) { +- spin_unlock_irq(&n->list_lock); ++ raw_spin_unlock_irq(&n->list_lock); + goto free_slab; + } + +@@ -989,7 +989,7 @@ + alien = n->alien; + n->alien = NULL; + +- spin_unlock_irq(&n->list_lock); ++ raw_spin_unlock_irq(&n->list_lock); + + kfree(shared); + if (alien) { +@@ -1173,7 +1173,7 @@ + /* + * Do not assume that spinlocks can be initialized via memcpy: + */ +- spin_lock_init(&ptr->list_lock); ++ raw_spin_lock_init(&ptr->list_lock); + + MAKE_ALL_LISTS(cachep, ptr, nodeid); + cachep->node[nodeid] = ptr; +@@ -1344,11 +1344,11 @@ + for_each_kmem_cache_node(cachep, node, n) { + unsigned long total_slabs, free_slabs, free_objs; + +- spin_lock_irqsave(&n->list_lock, flags); ++ raw_spin_lock_irqsave(&n->list_lock, flags); + total_slabs = n->total_slabs; + free_slabs = n->free_slabs; + free_objs = n->free_objects; +- spin_unlock_irqrestore(&n->list_lock, flags); ++ raw_spin_unlock_irqrestore(&n->list_lock, flags); + + pr_warn(" node %d: slabs: %ld/%ld, objs: %ld/%ld\n", + node, total_slabs - free_slabs, total_slabs, +@@ -2105,7 +2105,7 @@ + { + #ifdef CONFIG_SMP + check_irq_off(); +- assert_spin_locked(&get_node(cachep, numa_mem_id())->list_lock); ++ assert_raw_spin_locked(&get_node(cachep, numa_mem_id())->list_lock); + #endif + } + +@@ -2113,7 +2113,7 @@ + { + #ifdef CONFIG_SMP + check_irq_off(); +- assert_spin_locked(&get_node(cachep, node)->list_lock); ++ assert_raw_spin_locked(&get_node(cachep, node)->list_lock); + #endif + } + +@@ -2153,9 +2153,9 @@ + check_irq_off(); + ac = cpu_cache_get(cachep); + n = get_node(cachep, node); +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + free_block(cachep, ac->entry, ac->avail, node, &list); +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + ac->avail = 0; + slabs_destroy(cachep, &list); + } +@@ -2173,9 +2173,9 @@ + drain_alien_cache(cachep, n->alien); + + for_each_kmem_cache_node(cachep, node, n) { +- spin_lock_irq(&n->list_lock); ++ raw_spin_lock_irq(&n->list_lock); + drain_array_locked(cachep, n->shared, node, true, &list); +- spin_unlock_irq(&n->list_lock); ++ raw_spin_unlock_irq(&n->list_lock); + + slabs_destroy(cachep, &list); + } +@@ -2197,10 +2197,10 @@ + nr_freed = 0; + while (nr_freed < tofree && !list_empty(&n->slabs_free)) { + +- spin_lock_irq(&n->list_lock); ++ raw_spin_lock_irq(&n->list_lock); + p = n->slabs_free.prev; + if (p == &n->slabs_free) { +- spin_unlock_irq(&n->list_lock); ++ raw_spin_unlock_irq(&n->list_lock); + goto out; + } + +@@ -2213,7 +2213,7 @@ + * to the cache. + */ + n->free_objects -= cache->num; +- spin_unlock_irq(&n->list_lock); ++ raw_spin_unlock_irq(&n->list_lock); + slab_destroy(cache, page); + nr_freed++; + } +@@ -2649,7 +2649,7 @@ + INIT_LIST_HEAD(&page->slab_list); + n = get_node(cachep, page_to_nid(page)); + +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + n->total_slabs++; + if (!page->active) { + list_add_tail(&page->slab_list, &n->slabs_free); +@@ -2659,7 +2659,7 @@ + + STATS_INC_GROWN(cachep); + n->free_objects += cachep->num - page->active; +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + + fixup_objfreelist_debug(cachep, &list); + } +@@ -2825,7 +2825,7 @@ + { + struct page *page; + +- assert_spin_locked(&n->list_lock); ++ assert_raw_spin_locked(&n->list_lock); + page = list_first_entry_or_null(&n->slabs_partial, struct page, + slab_list); + if (!page) { +@@ -2852,10 +2852,10 @@ + if (!gfp_pfmemalloc_allowed(flags)) + return NULL; + +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + page = get_first_slab(n, true); + if (!page) { +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + return NULL; + } + +@@ -2864,7 +2864,7 @@ + + fixup_slab_list(cachep, n, page, &list); + +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + fixup_objfreelist_debug(cachep, &list); + + return obj; +@@ -2923,7 +2923,7 @@ + if (!n->free_objects && (!shared || !shared->avail)) + goto direct_grow; + +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + shared = READ_ONCE(n->shared); + + /* See if we can refill from the shared array */ +@@ -2947,7 +2947,7 @@ + must_grow: + n->free_objects -= ac->avail; + alloc_done: +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + fixup_objfreelist_debug(cachep, &list); + + direct_grow: +@@ -3172,7 +3172,7 @@ + BUG_ON(!n); + + check_irq_off(); +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + page = get_first_slab(n, false); + if (!page) + goto must_grow; +@@ -3190,12 +3190,12 @@ + + fixup_slab_list(cachep, n, page, &list); + +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + fixup_objfreelist_debug(cachep, &list); + return obj; + + must_grow: +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + page = cache_grow_begin(cachep, gfp_exact_node(flags), nodeid); + if (page) { + /* This slab isn't counted yet so don't update free_objects */ +@@ -3373,7 +3373,7 @@ + + check_irq_off(); + n = get_node(cachep, node); +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + if (n->shared) { + struct array_cache *shared_array = n->shared; + int max = shared_array->limit - shared_array->avail; +@@ -3402,7 +3402,7 @@ + STATS_SET_FREEABLE(cachep, i); + } + #endif +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + ac->avail -= batchcount; + memmove(ac->entry, &(ac->entry[batchcount]), sizeof(void *)*ac->avail); + slabs_destroy(cachep, &list); +@@ -3831,9 +3831,9 @@ + + node = cpu_to_mem(cpu); + n = get_node(cachep, node); +- spin_lock_irq(&n->list_lock); ++ raw_spin_lock_irq(&n->list_lock); + free_block(cachep, ac->entry, ac->avail, node, &list); +- spin_unlock_irq(&n->list_lock); ++ raw_spin_unlock_irq(&n->list_lock); + slabs_destroy(cachep, &list); + } + free_percpu(prev); +@@ -3928,9 +3928,9 @@ + return; + } + +- spin_lock_irq(&n->list_lock); ++ raw_spin_lock_irq(&n->list_lock); + drain_array_locked(cachep, ac, node, false, &list); +- spin_unlock_irq(&n->list_lock); ++ raw_spin_unlock_irq(&n->list_lock); + + slabs_destroy(cachep, &list); + } +@@ -4014,7 +4014,7 @@ + + for_each_kmem_cache_node(cachep, node, n) { + check_irq_on(); +- spin_lock_irq(&n->list_lock); ++ raw_spin_lock_irq(&n->list_lock); + + total_slabs += n->total_slabs; + free_slabs += n->free_slabs; +@@ -4023,7 +4023,7 @@ + if (n->shared) + shared_avail += n->shared->avail; + +- spin_unlock_irq(&n->list_lock); ++ raw_spin_unlock_irq(&n->list_lock); + } + num_objs = total_slabs * cachep->num; + active_slabs = total_slabs - free_slabs; +diff -Naur --no-dereference a/mm/slab.h b/mm/slab.h +--- a/mm/slab.h 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/slab.h 2024-11-24 20:19:38.254228972 -0500 +@@ -543,7 +543,7 @@ + * The slab lists for all objects. + */ + struct kmem_cache_node { +- spinlock_t list_lock; ++ raw_spinlock_t list_lock; + + #ifdef CONFIG_SLAB + struct list_head slabs_partial; /* partial list first, better asm code */ +diff -Naur --no-dereference a/mm/slub.c b/mm/slub.c +--- a/mm/slub.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/slub.c 2024-11-24 20:19:38.254228972 -0500 +@@ -435,7 +435,7 @@ + + #ifdef CONFIG_SLUB_DEBUG + static unsigned long object_map[BITS_TO_LONGS(MAX_OBJS_PER_PAGE)]; +-static DEFINE_SPINLOCK(object_map_lock); ++static DEFINE_RAW_SPINLOCK(object_map_lock); + + /* + * Determine a map of object in use on a page. +@@ -451,7 +451,7 @@ + + VM_BUG_ON(!irqs_disabled()); + +- spin_lock(&object_map_lock); ++ raw_spin_lock(&object_map_lock); + + bitmap_zero(object_map, page->objects); + +@@ -464,7 +464,7 @@ + static void put_map(unsigned long *map) __releases(&object_map_lock) + { + VM_BUG_ON(map != object_map); +- spin_unlock(&object_map_lock); ++ raw_spin_unlock(&object_map_lock); + } + + static inline unsigned int size_from_object(struct kmem_cache *s) +@@ -1214,7 +1214,7 @@ + unsigned long flags; + int ret = 0; + +- spin_lock_irqsave(&n->list_lock, flags); ++ raw_spin_lock_irqsave(&n->list_lock, flags); + slab_lock(page); + + if (s->flags & SLAB_CONSISTENCY_CHECKS) { +@@ -1249,7 +1249,7 @@ + bulk_cnt, cnt); + + slab_unlock(page); +- spin_unlock_irqrestore(&n->list_lock, flags); ++ raw_spin_unlock_irqrestore(&n->list_lock, flags); + if (!ret) + slab_fix(s, "Object at 0x%p not freed", object); + return ret; +@@ -1494,6 +1494,12 @@ + } + #endif /* CONFIG_SLUB_DEBUG */ + ++struct slub_free_list { ++ raw_spinlock_t lock; ++ struct list_head list; ++}; ++static DEFINE_PER_CPU(struct slub_free_list, slub_free_list); ++ + /* + * Hooks for other subsystems that check memory allocations. In a typical + * production configuration these hooks all should produce no code at all. +@@ -1744,10 +1750,18 @@ + void *start, *p, *next; + int idx; + bool shuffle; ++ bool enableirqs = false; + + flags &= gfp_allowed_mask; + + if (gfpflags_allow_blocking(flags)) ++ enableirqs = true; ++ ++#ifdef CONFIG_PREEMPT_RT ++ if (system_state > SYSTEM_BOOTING && system_state < SYSTEM_SUSPEND) ++ enableirqs = true; ++#endif ++ if (enableirqs) + local_irq_enable(); + + flags |= s->allocflags; +@@ -1806,7 +1820,7 @@ + page->frozen = 1; + + out: +- if (gfpflags_allow_blocking(flags)) ++ if (enableirqs) + local_irq_disable(); + if (!page) + return NULL; +@@ -1849,6 +1863,16 @@ + __free_pages(page, order); + } + ++static void free_delayed(struct list_head *h) ++{ ++ while (!list_empty(h)) { ++ struct page *page = list_first_entry(h, struct page, lru); ++ ++ list_del(&page->lru); ++ __free_slab(page->slab_cache, page); ++ } ++} ++ + static void rcu_free_slab(struct rcu_head *h) + { + struct page *page = container_of(h, struct page, rcu_head); +@@ -1860,6 +1884,12 @@ + { + if (unlikely(s->flags & SLAB_TYPESAFE_BY_RCU)) { + call_rcu(&page->rcu_head, rcu_free_slab); ++ } else if (irqs_disabled()) { ++ struct slub_free_list *f = this_cpu_ptr(&slub_free_list); ++ ++ raw_spin_lock(&f->lock); ++ list_add(&page->lru, &f->list); ++ raw_spin_unlock(&f->lock); + } else + __free_slab(s, page); + } +@@ -1967,7 +1997,7 @@ + if (!n || !n->nr_partial) + return NULL; + +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + list_for_each_entry_safe(page, page2, &n->partial, slab_list) { + void *t; + +@@ -1992,7 +2022,7 @@ + break; + + } +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + return object; + } + +@@ -2246,7 +2276,7 @@ + * that acquire_slab() will see a slab page that + * is frozen + */ +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + } + } else { + m = M_FULL; +@@ -2258,7 +2288,7 @@ + * slabs from diagnostic functions will not see + * any frozen slabs. + */ +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + } + #endif + } +@@ -2283,7 +2313,7 @@ + goto redo; + + if (lock) +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + + if (m == M_PARTIAL) + stat(s, tail); +@@ -2323,10 +2353,10 @@ + n2 = get_node(s, page_to_nid(page)); + if (n != n2) { + if (n) +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + + n = n2; +- spin_lock(&n->list_lock); ++ raw_spin_lock(&n->list_lock); + } + + do { +@@ -2355,7 +2385,7 @@ + } + + if (n) +- spin_unlock(&n->list_lock); ++ raw_spin_unlock(&n->list_lock); + + while (discard_page) { + page = discard_page; +@@ -2392,14 +2422,21 @@ + pobjects = oldpage->pobjects; + pages = oldpage->pages; + if (drain && pobjects > slub_cpu_partial(s)) { ++ struct slub_free_list *f; + unsigned long flags; ++ LIST_HEAD(tofree); + /* + * partial array is full. Move the existing + * set to the per node partial list. + */ + local_irq_save(flags); + unfreeze_partials(s, this_cpu_ptr(s->cpu_slab)); ++ f = this_cpu_ptr(&slub_free_list); ++ raw_spin_lock(&f->lock); ++ list_splice_init(&f->list, &tofree); ++ raw_spin_unlock(&f->lock); + local_irq_restore(flags); ++ free_delayed(&tofree); + oldpage = NULL; + pobjects = 0; + pages = 0; +@@ -2465,7 +2502,19 @@ + + static void flush_all(struct kmem_cache *s) + { ++ LIST_HEAD(tofree); ++ int cpu; ++ + on_each_cpu_cond(has_cpu_slab, flush_cpu_slab, s, 1); ++ for_each_online_cpu(cpu) { ++ struct slub_free_list *f; ++ ++ f = &per_cpu(slub_free_list, cpu); ++ raw_spin_lock_irq(&f->lock); ++ list_splice_init(&f->list, &tofree); ++ raw_spin_unlock_irq(&f->lock); ++ free_delayed(&tofree); ++ } + } + + /* +@@ -2520,10 +2569,10 @@ + unsigned long x = 0; + struct page *page; + +- spin_lock_irqsave(&n->list_lock, flags); ++ raw_spin_lock_irqsave(&n->list_lock, flags); + list_for_each_entry(page, &n->partial, slab_list) + x += get_count(page); +- spin_unlock_irqrestore(&n->list_lock, flags); ++ raw_spin_unlock_irqrestore(&n->list_lock, flags); + return x; + } + #endif /* CONFIG_SLUB_DEBUG || CONFIG_SYSFS */ +@@ -2662,8 +2711,10 @@ + * already disabled (which is the case for bulk allocation). + */ + static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, +- unsigned long addr, struct kmem_cache_cpu *c) ++ unsigned long addr, struct kmem_cache_cpu *c, ++ struct list_head *to_free) + { ++ struct slub_free_list *f; + void *freelist; + struct page *page; + +@@ -2732,6 +2783,13 @@ + VM_BUG_ON(!c->page->frozen); + c->freelist = get_freepointer(s, freelist); + c->tid = next_tid(c->tid); ++ ++out: ++ f = this_cpu_ptr(&slub_free_list); ++ raw_spin_lock(&f->lock); ++ list_splice_init(&f->list, to_free); ++ raw_spin_unlock(&f->lock); ++ + return freelist; + + new_slab: +@@ -2747,7 +2805,7 @@ + + if (unlikely(!freelist)) { + slab_out_of_memory(s, gfpflags, node); +- return NULL; ++ goto out; + } + + page = c->page; +@@ -2760,7 +2818,7 @@ + goto new_slab; /* Slab failed checks. Next slab needed */ + + deactivate_slab(s, page, get_freepointer(s, freelist), c); +- return freelist; ++ goto out; + } + + /* +@@ -2772,6 +2830,7 @@ + { + void *p; + unsigned long flags; ++ LIST_HEAD(tofree); + + local_irq_save(flags); + #ifdef CONFIG_PREEMPTION +@@ -2783,8 +2842,9 @@ + c = this_cpu_ptr(s->cpu_slab); + #endif + +- p = ___slab_alloc(s, gfpflags, node, addr, c); ++ p = ___slab_alloc(s, gfpflags, node, addr, c, &tofree); + local_irq_restore(flags); ++ free_delayed(&tofree); + return p; + } + +@@ -2818,6 +2878,10 @@ + unsigned long tid; + struct obj_cgroup *objcg = NULL; + ++ if (IS_ENABLED(CONFIG_PREEMPT_RT) && IS_ENABLED(CONFIG_DEBUG_ATOMIC_SLEEP)) ++ WARN_ON_ONCE(!preemptible() && ++ (system_state > SYSTEM_BOOTING && system_state < SYSTEM_SUSPEND)); ++ + s = slab_pre_alloc_hook(s, &objcg, 1, gfpflags); + if (!s) + return NULL; +@@ -2983,7 +3047,7 @@ + + do { + if (unlikely(n)) { +- spin_unlock_irqrestore(&n->list_lock, flags); ++ raw_spin_unlock_irqrestore(&n->list_lock, flags); + n = NULL; + } + prior = page->freelist; +@@ -3015,7 +3079,7 @@ + * Otherwise the list_lock will synchronize with + * other processors updating the list of slabs. + */ +- spin_lock_irqsave(&n->list_lock, flags); ++ raw_spin_lock_irqsave(&n->list_lock, flags); + + } + } +@@ -3057,7 +3121,7 @@ + add_partial(n, page, DEACTIVATE_TO_TAIL); + stat(s, FREE_ADD_PARTIAL); + } +- spin_unlock_irqrestore(&n->list_lock, flags); ++ raw_spin_unlock_irqrestore(&n->list_lock, flags); + return; + + slab_empty: +@@ -3072,7 +3136,7 @@ + remove_full(s, n, page); + } + +- spin_unlock_irqrestore(&n->list_lock, flags); ++ raw_spin_unlock_irqrestore(&n->list_lock, flags); + stat(s, FREE_SLAB); + discard_slab(s, page); + } +@@ -3282,9 +3346,14 @@ + void **p) + { + struct kmem_cache_cpu *c; ++ LIST_HEAD(to_free); + int i; + struct obj_cgroup *objcg = NULL; + ++ if (IS_ENABLED(CONFIG_PREEMPT_RT) && IS_ENABLED(CONFIG_DEBUG_ATOMIC_SLEEP)) ++ WARN_ON_ONCE(!preemptible() && ++ (system_state > SYSTEM_BOOTING && system_state < SYSTEM_SUSPEND)); ++ + /* memcg and kmem_cache debug support */ + s = slab_pre_alloc_hook(s, &objcg, size, flags); + if (unlikely(!s)) +@@ -3315,7 +3384,7 @@ + * of re-populating per CPU c->freelist + */ + p[i] = ___slab_alloc(s, flags, NUMA_NO_NODE, +- _RET_IP_, c); ++ _RET_IP_, c, &to_free); + if (unlikely(!p[i])) + goto error; + +@@ -3330,6 +3399,7 @@ + } + c->tid = next_tid(c->tid); + local_irq_enable(); ++ free_delayed(&to_free); + + /* Clear memory outside IRQ disabled fastpath loop */ + if (unlikely(slab_want_init_on_alloc(flags, s))) { +@@ -3344,6 +3414,7 @@ + return i; + error: + local_irq_enable(); ++ free_delayed(&to_free); + slab_post_alloc_hook(s, objcg, flags, i, p); + __kmem_cache_free_bulk(s, i, p); + return 0; +@@ -3479,7 +3550,7 @@ + init_kmem_cache_node(struct kmem_cache_node *n) + { + n->nr_partial = 0; +- spin_lock_init(&n->list_lock); ++ raw_spin_lock_init(&n->list_lock); + INIT_LIST_HEAD(&n->partial); + #ifdef CONFIG_SLUB_DEBUG + atomic_long_set(&n->nr_slabs, 0); +@@ -3874,7 +3945,7 @@ + struct page *page, *h; + + BUG_ON(irqs_disabled()); +- spin_lock_irq(&n->list_lock); ++ raw_spin_lock_irq(&n->list_lock); + list_for_each_entry_safe(page, h, &n->partial, slab_list) { + if (!page->inuse) { + remove_partial(n, page); +@@ -3884,7 +3955,7 @@ + "Objects remaining in %s on __kmem_cache_shutdown()"); + } + } +- spin_unlock_irq(&n->list_lock); ++ raw_spin_unlock_irq(&n->list_lock); + + list_for_each_entry_safe(page, h, &discard, slab_list) + discard_slab(s, page); +@@ -4155,7 +4226,7 @@ + for (i = 0; i < SHRINK_PROMOTE_MAX; i++) + INIT_LIST_HEAD(promote + i); + +- spin_lock_irqsave(&n->list_lock, flags); ++ raw_spin_lock_irqsave(&n->list_lock, flags); + + /* + * Build lists of slabs to discard or promote. +@@ -4186,7 +4257,7 @@ + for (i = SHRINK_PROMOTE_MAX - 1; i >= 0; i--) + list_splice(promote + i, &n->partial); + +- spin_unlock_irqrestore(&n->list_lock, flags); ++ raw_spin_unlock_irqrestore(&n->list_lock, flags); + + /* Release empty slabs */ + list_for_each_entry_safe(page, t, &discard, slab_list) +@@ -4361,6 +4432,12 @@ + { + static __initdata struct kmem_cache boot_kmem_cache, + boot_kmem_cache_node; ++ int cpu; ++ ++ for_each_possible_cpu(cpu) { ++ raw_spin_lock_init(&per_cpu(slub_free_list, cpu).lock); ++ INIT_LIST_HEAD(&per_cpu(slub_free_list, cpu).list); ++ } + + if (debug_guardpage_minorder()) + slub_max_order = 0; +@@ -4548,7 +4625,7 @@ + struct page *page; + unsigned long flags; + +- spin_lock_irqsave(&n->list_lock, flags); ++ raw_spin_lock_irqsave(&n->list_lock, flags); + + list_for_each_entry(page, &n->partial, slab_list) { + validate_slab(s, page); +@@ -4570,7 +4647,7 @@ + s->name, count, atomic_long_read(&n->nr_slabs)); + + out: +- spin_unlock_irqrestore(&n->list_lock, flags); ++ raw_spin_unlock_irqrestore(&n->list_lock, flags); + return count; + } + +@@ -4621,6 +4698,9 @@ + struct location *l; + int order; + ++ if (IS_ENABLED(CONFIG_PREEMPT_RT) && flags == GFP_ATOMIC) ++ return 0; ++ + order = get_order(sizeof(struct location) * max); + + l = (void *)__get_free_pages(flags, order); +@@ -4749,12 +4829,12 @@ + if (!atomic_long_read(&n->nr_slabs)) + continue; + +- spin_lock_irqsave(&n->list_lock, flags); ++ raw_spin_lock_irqsave(&n->list_lock, flags); + list_for_each_entry(page, &n->partial, slab_list) + process_slab(&t, s, page, alloc); + list_for_each_entry(page, &n->full, slab_list) + process_slab(&t, s, page, alloc); +- spin_unlock_irqrestore(&n->list_lock, flags); ++ raw_spin_unlock_irqrestore(&n->list_lock, flags); + } + + for (i = 0; i < t.count; i++) { +diff -Naur --no-dereference a/mm/vmalloc.c b/mm/vmalloc.c +--- a/mm/vmalloc.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/vmalloc.c 2024-11-24 20:19:38.255228974 -0500 +@@ -1542,7 +1542,7 @@ + struct vmap_block *vb; + struct vmap_area *va; + unsigned long vb_idx; +- int node, err; ++ int node, err, cpu; + void *vaddr; + + node = numa_node_id(); +@@ -1579,11 +1579,12 @@ + return ERR_PTR(err); + } + +- vbq = &get_cpu_var(vmap_block_queue); ++ cpu = get_cpu_light(); ++ vbq = this_cpu_ptr(&vmap_block_queue); + spin_lock(&vbq->lock); + list_add_tail_rcu(&vb->free_list, &vbq->free); + spin_unlock(&vbq->lock); +- put_cpu_var(vmap_block_queue); ++ put_cpu_light(); + + return vaddr; + } +@@ -1648,6 +1649,7 @@ + struct vmap_block *vb; + void *vaddr = NULL; + unsigned int order; ++ int cpu; + + BUG_ON(offset_in_page(size)); + BUG_ON(size > PAGE_SIZE*VMAP_MAX_ALLOC); +@@ -1662,7 +1664,8 @@ + order = get_order(size); + + rcu_read_lock(); +- vbq = &get_cpu_var(vmap_block_queue); ++ cpu = get_cpu_light(); ++ vbq = this_cpu_ptr(&vmap_block_queue); + list_for_each_entry_rcu(vb, &vbq->free, free_list) { + unsigned long pages_off; + +@@ -1685,7 +1688,7 @@ + break; + } + +- put_cpu_var(vmap_block_queue); ++ put_cpu_light(); + rcu_read_unlock(); + + /* Allocate new block if nothing was found */ +diff -Naur --no-dereference a/mm/vmstat.c b/mm/vmstat.c +--- a/mm/vmstat.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/vmstat.c 2024-11-24 20:19:38.255228974 -0500 +@@ -321,6 +321,7 @@ + long x; + long t; + ++ preempt_disable_rt(); + x = delta + __this_cpu_read(*p); + + t = __this_cpu_read(pcp->stat_threshold); +@@ -330,6 +331,7 @@ + x = 0; + } + __this_cpu_write(*p, x); ++ preempt_enable_rt(); + } + EXPORT_SYMBOL(__mod_zone_page_state); + +@@ -346,6 +348,7 @@ + delta >>= PAGE_SHIFT; + } + ++ preempt_disable_rt(); + x = delta + __this_cpu_read(*p); + + t = __this_cpu_read(pcp->stat_threshold); +@@ -355,6 +358,7 @@ + x = 0; + } + __this_cpu_write(*p, x); ++ preempt_enable_rt(); + } + EXPORT_SYMBOL(__mod_node_page_state); + +@@ -387,6 +391,7 @@ + s8 __percpu *p = pcp->vm_stat_diff + item; + s8 v, t; + ++ preempt_disable_rt(); + v = __this_cpu_inc_return(*p); + t = __this_cpu_read(pcp->stat_threshold); + if (unlikely(v > t)) { +@@ -395,6 +400,7 @@ + zone_page_state_add(v + overstep, zone, item); + __this_cpu_write(*p, -overstep); + } ++ preempt_enable_rt(); + } + + void __inc_node_state(struct pglist_data *pgdat, enum node_stat_item item) +@@ -405,6 +411,7 @@ + + VM_WARN_ON_ONCE(vmstat_item_in_bytes(item)); + ++ preempt_disable_rt(); + v = __this_cpu_inc_return(*p); + t = __this_cpu_read(pcp->stat_threshold); + if (unlikely(v > t)) { +@@ -413,6 +420,7 @@ + node_page_state_add(v + overstep, pgdat, item); + __this_cpu_write(*p, -overstep); + } ++ preempt_enable_rt(); + } + + void __inc_zone_page_state(struct page *page, enum zone_stat_item item) +@@ -433,6 +441,7 @@ + s8 __percpu *p = pcp->vm_stat_diff + item; + s8 v, t; + ++ preempt_disable_rt(); + v = __this_cpu_dec_return(*p); + t = __this_cpu_read(pcp->stat_threshold); + if (unlikely(v < - t)) { +@@ -441,6 +450,7 @@ + zone_page_state_add(v - overstep, zone, item); + __this_cpu_write(*p, overstep); + } ++ preempt_enable_rt(); + } + + void __dec_node_state(struct pglist_data *pgdat, enum node_stat_item item) +@@ -451,6 +461,7 @@ + + VM_WARN_ON_ONCE(vmstat_item_in_bytes(item)); + ++ preempt_disable_rt(); + v = __this_cpu_dec_return(*p); + t = __this_cpu_read(pcp->stat_threshold); + if (unlikely(v < - t)) { +@@ -459,6 +470,7 @@ + node_page_state_add(v - overstep, pgdat, item); + __this_cpu_write(*p, overstep); + } ++ preempt_enable_rt(); + } + + void __dec_zone_page_state(struct page *page, enum zone_stat_item item) +diff -Naur --no-dereference a/mm/workingset.c b/mm/workingset.c +--- a/mm/workingset.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/workingset.c 2024-11-24 20:19:38.255228974 -0500 +@@ -432,6 +432,8 @@ + + void workingset_update_node(struct xa_node *node) + { ++ struct address_space *mapping; ++ + /* + * Track non-empty nodes that contain only shadow entries; + * unlink those that contain pages or are being freed. +@@ -440,7 +442,8 @@ + * already where they should be. The list_empty() test is safe + * as node->private_list is protected by the i_pages lock. + */ +- VM_WARN_ON_ONCE(!irqs_disabled()); /* For __inc_lruvec_page_state */ ++ mapping = container_of(node->array, struct address_space, i_pages); ++ lockdep_assert_held(&mapping->i_pages.xa_lock); + + if (node->count && node->count == node->nr_values) { + if (list_empty(&node->private_list)) { +diff -Naur --no-dereference a/mm/z3fold.c b/mm/z3fold.c +--- a/mm/z3fold.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/z3fold.c 2024-11-24 20:19:38.255228974 -0500 +@@ -623,14 +623,16 @@ + { + if (zhdr->first_chunks == 0 || zhdr->last_chunks == 0 || + zhdr->middle_chunks == 0) { +- struct list_head *unbuddied = get_cpu_ptr(pool->unbuddied); +- ++ struct list_head *unbuddied; + int freechunks = num_free_chunks(zhdr); ++ ++ migrate_disable(); ++ unbuddied = this_cpu_ptr(pool->unbuddied); + spin_lock(&pool->lock); + list_add(&zhdr->buddy, &unbuddied[freechunks]); + spin_unlock(&pool->lock); + zhdr->cpu = smp_processor_id(); +- put_cpu_ptr(pool->unbuddied); ++ migrate_enable(); + } + } + +@@ -880,8 +882,9 @@ + int chunks = size_to_chunks(size), i; + + lookup: ++ migrate_disable(); + /* First, try to find an unbuddied z3fold page. */ +- unbuddied = get_cpu_ptr(pool->unbuddied); ++ unbuddied = this_cpu_ptr(pool->unbuddied); + for_each_unbuddied_list(i, chunks) { + struct list_head *l = &unbuddied[i]; + +@@ -899,7 +902,7 @@ + !z3fold_page_trylock(zhdr)) { + spin_unlock(&pool->lock); + zhdr = NULL; +- put_cpu_ptr(pool->unbuddied); ++ migrate_enable(); + if (can_sleep) + cond_resched(); + goto lookup; +@@ -913,7 +916,7 @@ + test_bit(PAGE_CLAIMED, &page->private)) { + z3fold_page_unlock(zhdr); + zhdr = NULL; +- put_cpu_ptr(pool->unbuddied); ++ migrate_enable(); + if (can_sleep) + cond_resched(); + goto lookup; +@@ -928,7 +931,7 @@ + kref_get(&zhdr->refcount); + break; + } +- put_cpu_ptr(pool->unbuddied); ++ migrate_enable(); + + if (!zhdr) { + int cpu; +diff -Naur --no-dereference a/mm/zsmalloc.c b/mm/zsmalloc.c +--- a/mm/zsmalloc.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/zsmalloc.c 2024-11-24 20:19:38.255228974 -0500 +@@ -57,6 +57,7 @@ + #include + #include + #include ++#include + + #define ZSPAGE_MAGIC 0x58 + +@@ -77,6 +78,20 @@ + + #define ZS_HANDLE_SIZE (sizeof(unsigned long)) + ++#ifdef CONFIG_PREEMPT_RT ++ ++struct zsmalloc_handle { ++ unsigned long addr; ++ spinlock_t lock; ++}; ++ ++#define ZS_HANDLE_ALLOC_SIZE (sizeof(struct zsmalloc_handle)) ++ ++#else ++ ++#define ZS_HANDLE_ALLOC_SIZE (sizeof(unsigned long)) ++#endif ++ + /* + * Object location (, ) is encoded as + * a single (unsigned long) handle value. +@@ -293,6 +308,7 @@ + }; + + struct mapping_area { ++ local_lock_t lock; + char *vm_buf; /* copy buffer for objects that span pages */ + char *vm_addr; /* address of kmap_atomic()'ed pages */ + enum zs_mapmode vm_mm; /* mapping mode */ +@@ -322,7 +338,7 @@ + + static int create_cache(struct zs_pool *pool) + { +- pool->handle_cachep = kmem_cache_create("zs_handle", ZS_HANDLE_SIZE, ++ pool->handle_cachep = kmem_cache_create("zs_handle", ZS_HANDLE_ALLOC_SIZE, + 0, 0, NULL); + if (!pool->handle_cachep) + return 1; +@@ -346,10 +362,27 @@ + + static unsigned long cache_alloc_handle(struct zs_pool *pool, gfp_t gfp) + { +- return (unsigned long)kmem_cache_alloc(pool->handle_cachep, +- gfp & ~(__GFP_HIGHMEM|__GFP_MOVABLE)); ++ void *p; ++ ++ p = kmem_cache_alloc(pool->handle_cachep, ++ gfp & ~(__GFP_HIGHMEM|__GFP_MOVABLE)); ++#ifdef CONFIG_PREEMPT_RT ++ if (p) { ++ struct zsmalloc_handle *zh = p; ++ ++ spin_lock_init(&zh->lock); ++ } ++#endif ++ return (unsigned long)p; + } + ++#ifdef CONFIG_PREEMPT_RT ++static struct zsmalloc_handle *zs_get_pure_handle(unsigned long handle) ++{ ++ return (void *)(handle &~((1 << OBJ_TAG_BITS) - 1)); ++} ++#endif ++ + static void cache_free_handle(struct zs_pool *pool, unsigned long handle) + { + kmem_cache_free(pool->handle_cachep, (void *)handle); +@@ -368,12 +401,18 @@ + + static void record_obj(unsigned long handle, unsigned long obj) + { ++#ifdef CONFIG_PREEMPT_RT ++ struct zsmalloc_handle *zh = zs_get_pure_handle(handle); ++ ++ WRITE_ONCE(zh->addr, obj); ++#else + /* + * lsb of @obj represents handle lock while other bits + * represent object value the handle is pointing so + * updating shouldn't do store tearing. + */ + WRITE_ONCE(*(unsigned long *)handle, obj); ++#endif + } + + /* zpool driver */ +@@ -455,7 +494,10 @@ + #endif /* CONFIG_ZPOOL */ + + /* per-cpu VM mapping areas for zspage accesses that cross page boundaries */ +-static DEFINE_PER_CPU(struct mapping_area, zs_map_area); ++static DEFINE_PER_CPU(struct mapping_area, zs_map_area) = { ++ /* XXX remove this and use a spin_lock_t in pin_tag() */ ++ .lock = INIT_LOCAL_LOCK(lock), ++}; + + static bool is_zspage_isolated(struct zspage *zspage) + { +@@ -865,7 +907,13 @@ + + static unsigned long handle_to_obj(unsigned long handle) + { ++#ifdef CONFIG_PREEMPT_RT ++ struct zsmalloc_handle *zh = zs_get_pure_handle(handle); ++ ++ return zh->addr; ++#else + return *(unsigned long *)handle; ++#endif + } + + static unsigned long obj_to_head(struct page *page, void *obj) +@@ -879,22 +927,46 @@ + + static inline int testpin_tag(unsigned long handle) + { ++#ifdef CONFIG_PREEMPT_RT ++ struct zsmalloc_handle *zh = zs_get_pure_handle(handle); ++ ++ return spin_is_locked(&zh->lock); ++#else + return bit_spin_is_locked(HANDLE_PIN_BIT, (unsigned long *)handle); ++#endif + } + + static inline int trypin_tag(unsigned long handle) + { ++#ifdef CONFIG_PREEMPT_RT ++ struct zsmalloc_handle *zh = zs_get_pure_handle(handle); ++ ++ return spin_trylock(&zh->lock); ++#else + return bit_spin_trylock(HANDLE_PIN_BIT, (unsigned long *)handle); ++#endif + } + + static void pin_tag(unsigned long handle) __acquires(bitlock) + { ++#ifdef CONFIG_PREEMPT_RT ++ struct zsmalloc_handle *zh = zs_get_pure_handle(handle); ++ ++ return spin_lock(&zh->lock); ++#else + bit_spin_lock(HANDLE_PIN_BIT, (unsigned long *)handle); ++#endif + } + + static void unpin_tag(unsigned long handle) __releases(bitlock) + { ++#ifdef CONFIG_PREEMPT_RT ++ struct zsmalloc_handle *zh = zs_get_pure_handle(handle); ++ ++ return spin_unlock(&zh->lock); ++#else + bit_spin_unlock(HANDLE_PIN_BIT, (unsigned long *)handle); ++#endif + } + + static void reset_page(struct page *page) +@@ -1278,7 +1350,8 @@ + class = pool->size_class[class_idx]; + off = (class->size * obj_idx) & ~PAGE_MASK; + +- area = &get_cpu_var(zs_map_area); ++ local_lock(&zs_map_area.lock); ++ area = this_cpu_ptr(&zs_map_area); + area->vm_mm = mm; + if (off + class->size <= PAGE_SIZE) { + /* this object is contained entirely within a page */ +@@ -1332,7 +1405,7 @@ + + __zs_unmap_object(area, pages, off, class->size); + } +- put_cpu_var(zs_map_area); ++ local_unlock(&zs_map_area.lock); + + migrate_read_unlock(zspage); + unpin_tag(handle); +diff -Naur --no-dereference a/mm/zswap.c b/mm/zswap.c +--- a/mm/zswap.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/mm/zswap.c 2024-11-24 20:19:38.255228974 -0500 +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -387,27 +388,37 @@ + /********************************* + * per-cpu code + **********************************/ +-static DEFINE_PER_CPU(u8 *, zswap_dstmem); ++struct zswap_comp { ++ /* Used for per-CPU dstmem and tfm */ ++ local_lock_t lock; ++ u8 *dstmem; ++}; ++ ++static DEFINE_PER_CPU(struct zswap_comp, zswap_comp) = { ++ .lock = INIT_LOCAL_LOCK(lock), ++}; + + static int zswap_dstmem_prepare(unsigned int cpu) + { ++ struct zswap_comp *zcomp; + u8 *dst; + + dst = kmalloc_node(PAGE_SIZE * 2, GFP_KERNEL, cpu_to_node(cpu)); + if (!dst) + return -ENOMEM; + +- per_cpu(zswap_dstmem, cpu) = dst; ++ zcomp = per_cpu_ptr(&zswap_comp, cpu); ++ zcomp->dstmem = dst; + return 0; + } + + static int zswap_dstmem_dead(unsigned int cpu) + { +- u8 *dst; ++ struct zswap_comp *zcomp; + +- dst = per_cpu(zswap_dstmem, cpu); +- kfree(dst); +- per_cpu(zswap_dstmem, cpu) = NULL; ++ zcomp = per_cpu_ptr(&zswap_comp, cpu); ++ kfree(zcomp->dstmem); ++ zcomp->dstmem = NULL; + + return 0; + } +@@ -919,10 +930,11 @@ + dlen = PAGE_SIZE; + src = (u8 *)zhdr + sizeof(struct zswap_header); + dst = kmap_atomic(page); +- tfm = *get_cpu_ptr(entry->pool->tfm); ++ local_lock(&zswap_comp.lock); ++ tfm = *this_cpu_ptr(entry->pool->tfm); + ret = crypto_comp_decompress(tfm, src, entry->length, + dst, &dlen); +- put_cpu_ptr(entry->pool->tfm); ++ local_unlock(&zswap_comp.lock); + kunmap_atomic(dst); + BUG_ON(ret); + BUG_ON(dlen != PAGE_SIZE); +@@ -1074,12 +1086,12 @@ + } + + /* compress */ +- dst = get_cpu_var(zswap_dstmem); +- tfm = *get_cpu_ptr(entry->pool->tfm); ++ local_lock(&zswap_comp.lock); ++ dst = *this_cpu_ptr(&zswap_comp.dstmem); ++ tfm = *this_cpu_ptr(entry->pool->tfm); + src = kmap_atomic(page); + ret = crypto_comp_compress(tfm, src, PAGE_SIZE, dst, &dlen); + kunmap_atomic(src); +- put_cpu_ptr(entry->pool->tfm); + if (ret) { + ret = -EINVAL; + goto put_dstmem; +@@ -1103,7 +1115,7 @@ + memcpy(buf, &zhdr, hlen); + memcpy(buf + hlen, dst, dlen); + zpool_unmap_handle(entry->pool->zpool, handle); +- put_cpu_var(zswap_dstmem); ++ local_unlock(&zswap_comp.lock); + + /* populate entry */ + entry->offset = offset; +@@ -1131,7 +1143,7 @@ + return 0; + + put_dstmem: +- put_cpu_var(zswap_dstmem); ++ local_unlock(&zswap_comp.lock); + zswap_pool_put(entry->pool); + freepage: + zswap_entry_cache_free(entry); +@@ -1176,9 +1188,10 @@ + if (zpool_evictable(entry->pool->zpool)) + src += sizeof(struct zswap_header); + dst = kmap_atomic(page); +- tfm = *get_cpu_ptr(entry->pool->tfm); ++ local_lock(&zswap_comp.lock); ++ tfm = *this_cpu_ptr(entry->pool->tfm); + ret = crypto_comp_decompress(tfm, src, entry->length, dst, &dlen); +- put_cpu_ptr(entry->pool->tfm); ++ local_unlock(&zswap_comp.lock); + kunmap_atomic(dst); + zpool_unmap_handle(entry->pool->zpool, entry->handle); + BUG_ON(ret); +diff -Naur --no-dereference a/net/core/dev.c b/net/core/dev.c +--- a/net/core/dev.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/net/core/dev.c 2024-11-24 20:19:38.255228974 -0500 +@@ -221,14 +221,14 @@ + static inline void rps_lock(struct softnet_data *sd) + { + #ifdef CONFIG_RPS +- spin_lock(&sd->input_pkt_queue.lock); ++ raw_spin_lock(&sd->input_pkt_queue.raw_lock); + #endif + } + + static inline void rps_unlock(struct softnet_data *sd) + { + #ifdef CONFIG_RPS +- spin_unlock(&sd->input_pkt_queue.lock); ++ raw_spin_unlock(&sd->input_pkt_queue.raw_lock); + #endif + } + +@@ -3050,6 +3050,7 @@ + sd->output_queue_tailp = &q->next_sched; + raise_softirq_irqoff(NET_TX_SOFTIRQ); + local_irq_restore(flags); ++ preempt_check_resched_rt(); + } + + void __netif_schedule(struct Qdisc *q) +@@ -3112,6 +3113,7 @@ + __this_cpu_write(softnet_data.completion_queue, skb); + raise_softirq_irqoff(NET_TX_SOFTIRQ); + local_irq_restore(flags); ++ preempt_check_resched_rt(); + } + EXPORT_SYMBOL(__dev_kfree_skb_irq); + +@@ -3790,7 +3792,11 @@ + * This permits qdisc->running owner to get the lock more + * often and dequeue packets faster. + */ ++#ifdef CONFIG_PREEMPT_RT ++ contended = true; ++#else + contended = qdisc_is_running(q); ++#endif + if (unlikely(contended)) + spin_lock(&q->busylock); + +@@ -4590,6 +4596,7 @@ + rps_unlock(sd); + + local_irq_restore(flags); ++ preempt_check_resched_rt(); + + atomic_long_inc(&skb->dev->rx_dropped); + kfree_skb(skb); +@@ -4805,7 +4812,7 @@ + struct rps_dev_flow voidflow, *rflow = &voidflow; + int cpu; + +- preempt_disable(); ++ migrate_disable(); + rcu_read_lock(); + + cpu = get_rps_cpu(skb->dev, skb, &rflow); +@@ -4815,14 +4822,14 @@ + ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail); + + rcu_read_unlock(); +- preempt_enable(); ++ migrate_enable(); + } else + #endif + { + unsigned int qtail; + +- ret = enqueue_to_backlog(skb, get_cpu(), &qtail); +- put_cpu(); ++ ret = enqueue_to_backlog(skb, get_cpu_light(), &qtail); ++ put_cpu_light(); + } + return ret; + } +@@ -4861,11 +4868,9 @@ + + trace_netif_rx_ni_entry(skb); + +- preempt_disable(); ++ local_bh_disable(); + err = netif_rx_internal(skb); +- if (local_softirq_pending()) +- do_softirq(); +- preempt_enable(); ++ local_bh_enable(); + trace_netif_rx_ni_exit(err); + + return err; +@@ -6341,12 +6346,14 @@ + sd->rps_ipi_list = NULL; + + local_irq_enable(); ++ preempt_check_resched_rt(); + + /* Send pending IPI's to kick RPS processing on remote cpus. */ + net_rps_send_ipi(remsd); + } else + #endif + local_irq_enable(); ++ preempt_check_resched_rt(); + } + + static bool sd_has_rps_ipi_waiting(struct softnet_data *sd) +@@ -6424,6 +6431,7 @@ + local_irq_save(flags); + ____napi_schedule(this_cpu_ptr(&softnet_data), n); + local_irq_restore(flags); ++ preempt_check_resched_rt(); + } + EXPORT_SYMBOL(__napi_schedule); + +@@ -10957,6 +10965,7 @@ + + raise_softirq_irqoff(NET_TX_SOFTIRQ); + local_irq_enable(); ++ preempt_check_resched_rt(); + + #ifdef CONFIG_RPS + remsd = oldsd->rps_ipi_list; +@@ -10970,7 +10979,7 @@ + netif_rx_ni(skb); + input_queue_head_incr(oldsd); + } +- while ((skb = skb_dequeue(&oldsd->input_pkt_queue))) { ++ while ((skb = __skb_dequeue(&oldsd->input_pkt_queue))) { + netif_rx_ni(skb); + input_queue_head_incr(oldsd); + } +@@ -11286,7 +11295,7 @@ + + INIT_WORK(flush, flush_backlog); + +- skb_queue_head_init(&sd->input_pkt_queue); ++ skb_queue_head_init_raw(&sd->input_pkt_queue); + skb_queue_head_init(&sd->process_queue); + #ifdef CONFIG_XFRM_OFFLOAD + skb_queue_head_init(&sd->xfrm_backlog); diff -Naur --no-dereference a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c --- a/net/core/dev_ioctl.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/core/dev_ioctl.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/core/dev_ioctl.c 2024-11-24 20:19:38.256228976 -0500 @@ -308,6 +308,7 @@ cmd == SIOCBRDELIF || cmd == SIOCSHWTSTAMP || @@ -468155,9 +494835,88 @@ diff -Naur --no-dereference a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c /* * Unknown or private ioctl. */ +diff -Naur --no-dereference a/net/core/gen_estimator.c b/net/core/gen_estimator.c +--- a/net/core/gen_estimator.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/net/core/gen_estimator.c 2024-11-24 20:19:38.256228976 -0500 +@@ -42,7 +42,7 @@ + struct net_rate_estimator { + struct gnet_stats_basic_packed *bstats; + spinlock_t *stats_lock; +- seqcount_t *running; ++ net_seqlock_t *running; + struct gnet_stats_basic_cpu __percpu *cpu_bstats; + u8 ewma_log; + u8 intvl_log; /* period : (250ms << intvl_log) */ +@@ -125,7 +125,7 @@ + struct gnet_stats_basic_cpu __percpu *cpu_bstats, + struct net_rate_estimator __rcu **rate_est, + spinlock_t *lock, +- seqcount_t *running, ++ net_seqlock_t *running, + struct nlattr *opt) + { + struct gnet_estimator *parm = nla_data(opt); +@@ -226,7 +226,7 @@ + struct gnet_stats_basic_cpu __percpu *cpu_bstats, + struct net_rate_estimator __rcu **rate_est, + spinlock_t *lock, +- seqcount_t *running, struct nlattr *opt) ++ net_seqlock_t *running, struct nlattr *opt) + { + return gen_new_estimator(bstats, cpu_bstats, rate_est, + lock, running, opt); +diff -Naur --no-dereference a/net/core/gen_stats.c b/net/core/gen_stats.c +--- a/net/core/gen_stats.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/net/core/gen_stats.c 2024-11-24 20:19:38.256228976 -0500 +@@ -137,7 +137,7 @@ + } + + void +-__gnet_stats_copy_basic(const seqcount_t *running, ++__gnet_stats_copy_basic(net_seqlock_t *running, + struct gnet_stats_basic_packed *bstats, + struct gnet_stats_basic_cpu __percpu *cpu, + struct gnet_stats_basic_packed *b) +@@ -150,15 +150,15 @@ + } + do { + if (running) +- seq = read_seqcount_begin(running); ++ seq = net_seq_begin(running); + bstats->bytes = b->bytes; + bstats->packets = b->packets; +- } while (running && read_seqcount_retry(running, seq)); ++ } while (running && net_seq_retry(running, seq)); + } + EXPORT_SYMBOL(__gnet_stats_copy_basic); + + static int +-___gnet_stats_copy_basic(const seqcount_t *running, ++___gnet_stats_copy_basic(net_seqlock_t *running, + struct gnet_dump *d, + struct gnet_stats_basic_cpu __percpu *cpu, + struct gnet_stats_basic_packed *b, +@@ -204,7 +204,7 @@ + * if the room in the socket buffer was not sufficient. + */ + int +-gnet_stats_copy_basic(const seqcount_t *running, ++gnet_stats_copy_basic(net_seqlock_t *running, + struct gnet_dump *d, + struct gnet_stats_basic_cpu __percpu *cpu, + struct gnet_stats_basic_packed *b) +@@ -228,7 +228,7 @@ + * if the room in the socket buffer was not sufficient. + */ + int +-gnet_stats_copy_basic_hw(const seqcount_t *running, ++gnet_stats_copy_basic_hw(net_seqlock_t *running, + struct gnet_dump *d, + struct gnet_stats_basic_cpu __percpu *cpu, + struct gnet_stats_basic_packed *b) diff -Naur --no-dereference a/net/core/skbuff.c b/net/core/skbuff.c --- a/net/core/skbuff.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/core/skbuff.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/core/skbuff.c 2024-11-24 20:19:38.256228976 -0500 @@ -4727,6 +4727,7 @@ { struct sk_buff *skb; @@ -468182,7 +494941,7 @@ diff -Naur --no-dereference a/net/core/skbuff.c b/net/core/skbuff.c else diff -Naur --no-dereference a/net/core/sock.c b/net/core/sock.c --- a/net/core/sock.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/core/sock.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/core/sock.c 2024-11-24 20:19:38.257228978 -0500 @@ -224,7 +224,7 @@ x "AF_IEEE802154", x "AF_CAIF" , x "AF_ALG" , \ x "AF_NFC" , x "AF_VSOCK" , x "AF_KCM" , \ @@ -468216,7 +494975,35 @@ diff -Naur --no-dereference a/net/core/sock.c b/net/core/sock.c default: return -EINVAL; } -@@ -3184,6 +3194,7 @@ +@@ -3058,12 +3068,11 @@ + if (sk->sk_lock.owned) + __lock_sock(sk); + sk->sk_lock.owned = 1; +- spin_unlock(&sk->sk_lock.slock); ++ spin_unlock_bh(&sk->sk_lock.slock); + /* + * The sk_lock has mutex_lock() semantics here: + */ + mutex_acquire(&sk->sk_lock.dep_map, subclass, 0, _RET_IP_); +- local_bh_enable(); + } + EXPORT_SYMBOL(lock_sock_nested); + +@@ -3112,12 +3121,11 @@ + + __lock_sock(sk); + sk->sk_lock.owned = 1; +- spin_unlock(&sk->sk_lock.slock); ++ spin_unlock_bh(&sk->sk_lock.slock); + /* + * The sk_lock has mutex_lock() semantics here: + */ + mutex_acquire(&sk->sk_lock.dep_map, 0, 0, _RET_IP_); +- local_bh_enable(); + return true; + } + EXPORT_SYMBOL(lock_sock_fast); +@@ -3184,6 +3192,7 @@ struct sock_exterr_skb *serr; struct sk_buff *skb; int copied, err; @@ -468224,7 +495011,7 @@ diff -Naur --no-dereference a/net/core/sock.c b/net/core/sock.c err = -EAGAIN; skb = sock_dequeue_err_skb(sk); -@@ -3201,6 +3212,9 @@ +@@ -3201,6 +3210,9 @@ sock_recv_timestamp(msg, sk, skb); @@ -468236,7 +495023,7 @@ diff -Naur --no-dereference a/net/core/sock.c b/net/core/sock.c diff -Naur --no-dereference a/net/ethtool/common.c b/net/ethtool/common.c --- a/net/ethtool/common.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/ethtool/common.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/ethtool/common.c 2024-11-24 20:19:38.257228978 -0500 @@ -68,6 +68,10 @@ [NETIF_F_HW_TLS_RX_BIT] = "tls-hw-rx-offload", [NETIF_F_GRO_FRAGLIST_BIT] = "rx-gro-list", @@ -468258,7 +495045,7 @@ diff -Naur --no-dereference a/net/ethtool/common.c b/net/ethtool/common.c { diff -Naur --no-dereference a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c --- a/net/ethtool/ioctl.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/ethtool/ioctl.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/ethtool/ioctl.c 2024-11-24 20:19:38.257228978 -0500 @@ -366,7 +366,7 @@ /* return false if ksettings link modes had higher bits * set. legacy_settings always updated (best effort) @@ -468278,7 +495065,7 @@ diff -Naur --no-dereference a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c #define __ETHTOOL_LINK_MODE_MASK_NU32 \ diff -Naur --no-dereference a/net/hsr/hsr_debugfs.c b/net/hsr/hsr_debugfs.c --- a/net/hsr/hsr_debugfs.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/hsr_debugfs.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_debugfs.c 2024-11-24 20:19:38.257228978 -0500 @@ -20,7 +20,7 @@ #include "hsr_main.h" #include "hsr_framereg.h" @@ -468441,7 +495228,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_debugfs.c b/net/hsr/hsr_debugfs.c } diff -Naur --no-dereference a/net/hsr/hsr_device.c b/net/hsr/hsr_device.c --- a/net/hsr/hsr_device.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/hsr_device.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_device.c 2024-11-24 20:19:38.257228978 -0500 @@ -12,12 +12,19 @@ #include #include @@ -469110,7 +495897,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_device.c b/net/hsr/hsr_device.c return res; diff -Naur --no-dereference a/net/hsr/hsr_device.h b/net/hsr/hsr_device.h --- a/net/hsr/hsr_device.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/hsr_device.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_device.h 2024-11-24 20:19:38.257228978 -0500 @@ -13,12 +13,12 @@ #include #include "hsr_main.h" @@ -469129,7 +495916,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_device.h b/net/hsr/hsr_device.h #endif /* __HSR_DEVICE_H */ diff -Naur --no-dereference a/net/hsr/hsr_forward.c b/net/hsr/hsr_forward.c --- a/net/hsr/hsr_forward.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/hsr_forward.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_forward.c 2024-11-24 20:19:38.257228978 -0500 @@ -17,6 +17,16 @@ struct hsr_node; @@ -469691,7 +496478,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_forward.c b/net/hsr/hsr_forward.c kfree_skb(skb); diff -Naur --no-dereference a/net/hsr/hsr_forward.h b/net/hsr/hsr_forward.h --- a/net/hsr/hsr_forward.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/hsr_forward.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_forward.h 2024-11-24 20:19:38.258228980 -0500 @@ -23,6 +23,7 @@ struct sk_buff *prp_get_untagged_frame(struct hsr_frame_info *frame, struct hsr_port *port); @@ -469702,7 +496489,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_forward.h b/net/hsr/hsr_forward.h int hsr_fill_frame_info(__be16 proto, struct sk_buff *skb, diff -Naur --no-dereference a/net/hsr/hsr_framereg.c b/net/hsr/hsr_framereg.c --- a/net/hsr/hsr_framereg.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/hsr_framereg.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_framereg.c 2024-11-24 20:19:38.258228980 -0500 @@ -280,6 +280,8 @@ skb = frame->skb_hsr; else if (frame->skb_prp) @@ -469714,7 +496501,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_framereg.c b/net/hsr/hsr_framereg.c diff -Naur --no-dereference a/net/hsr/hsr_framereg.h b/net/hsr/hsr_framereg.h --- a/net/hsr/hsr_framereg.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/hsr_framereg.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_framereg.h 2024-11-24 20:19:38.258228980 -0500 @@ -75,6 +75,10 @@ unsigned char macaddress_B[ETH_ALEN]; /* Local slave through which AddrB frames are received from this node */ @@ -469728,7 +496515,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_framereg.h b/net/hsr/hsr_framereg.h unsigned long time_out[HSR_PT_PORTS]; diff -Naur --no-dereference a/net/hsr/hsr_main.c b/net/hsr/hsr_main.c --- a/net/hsr/hsr_main.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/hsr_main.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_main.c 2024-11-24 20:19:38.258228980 -0500 @@ -131,6 +131,17 @@ return NULL; } @@ -469749,7 +496536,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_main.c b/net/hsr/hsr_main.c }; diff -Naur --no-dereference a/net/hsr/hsr_main.h b/net/hsr/hsr_main.h --- a/net/hsr/hsr_main.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/hsr_main.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_main.h 2024-11-24 20:19:38.258228980 -0500 @@ -13,6 +13,8 @@ #include #include @@ -469922,7 +496709,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_main.h b/net/hsr/hsr_main.h +#endif /* __HSR_PRP_MAIN_H */ diff -Naur --no-dereference a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c --- a/net/hsr/hsr_netlink.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/hsr_netlink.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_netlink.c 2024-11-24 20:19:38.258228980 -0500 @@ -23,6 +23,9 @@ [IFLA_HSR_SUPERVISION_ADDR] = { .len = ETH_ALEN }, [IFLA_HSR_SEQ_NR] = { .type = NLA_U16 }, @@ -469998,7 +496785,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c hsr_del_nodes(&hsr->node_db); diff -Naur --no-dereference a/net/hsr/hsr_proc.c b/net/hsr/hsr_proc.c --- a/net/hsr/hsr_proc.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/net/hsr/hsr_proc.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_proc.c 2024-11-24 20:19:38.258228980 -0500 @@ -0,0 +1,673 @@ +// SPDX-License-Identifier: GPL-2.0 +/* hsr_proc.c : procfs file for HSR and PRP driver @@ -470675,7 +497462,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_proc.c b/net/hsr/hsr_proc.c +} diff -Naur --no-dereference a/net/hsr/hsr_slave.c b/net/hsr/hsr_slave.c --- a/net/hsr/hsr_slave.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/hsr_slave.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/hsr_slave.c 2024-11-24 20:19:38.258228980 -0500 @@ -23,9 +23,9 @@ static rx_handler_result_t hsr_handle_frame(struct sk_buff **pskb) @@ -470758,7 +497545,7 @@ diff -Naur --no-dereference a/net/hsr/hsr_slave.c b/net/hsr/hsr_slave.c diff -Naur --no-dereference a/net/hsr/Makefile b/net/hsr/Makefile --- a/net/hsr/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/hsr/Makefile 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/hsr/Makefile 2024-11-24 20:19:38.257228978 -0500 @@ -8,3 +8,4 @@ hsr-y := hsr_main.o hsr_framereg.o hsr_device.o \ hsr_netlink.o hsr_slave.o hsr_forward.o @@ -470766,7 +497553,16 @@ diff -Naur --no-dereference a/net/hsr/Makefile b/net/hsr/Makefile +hsr-$(CONFIG_PROC_FS) += hsr_proc.o diff -Naur --no-dereference a/net/Kconfig b/net/Kconfig --- a/net/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/Kconfig 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/Kconfig 2024-11-24 20:19:38.255228974 -0500 +@@ -282,7 +282,7 @@ + + config NET_RX_BUSY_POLL + bool +- default y ++ default y if !PREEMPT_RT + + config BQL + bool @@ -391,6 +391,7 @@ source "net/rfkill/Kconfig" source "net/9p/Kconfig" @@ -470777,7 +497573,7 @@ diff -Naur --no-dereference a/net/Kconfig b/net/Kconfig source "net/psample/Kconfig" diff -Naur --no-dereference a/net/mac80211/aead_api.c b/net/mac80211/aead_api.c --- a/net/mac80211/aead_api.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/aead_api.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/aead_api.c 2024-11-24 20:19:38.258228980 -0500 @@ -23,7 +23,6 @@ struct aead_request *aead_req; int reqsize = sizeof(*aead_req) + crypto_aead_reqsize(tfm); @@ -470801,7 +497597,7 @@ diff -Naur --no-dereference a/net/mac80211/aead_api.c b/net/mac80211/aead_api.c int aead_decrypt(struct crypto_aead *tfm, u8 *b_0, u8 *aad, size_t aad_len, diff -Naur --no-dereference a/net/mac80211/aes_gmac.c b/net/mac80211/aes_gmac.c --- a/net/mac80211/aes_gmac.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/aes_gmac.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/aes_gmac.c 2024-11-24 20:19:38.258228980 -0500 @@ -22,7 +22,6 @@ struct aead_request *aead_req; int reqsize = sizeof(*aead_req) + crypto_aead_reqsize(tfm); @@ -470825,7 +497621,7 @@ diff -Naur --no-dereference a/net/mac80211/aes_gmac.c b/net/mac80211/aes_gmac.c struct crypto_aead *ieee80211_aes_gmac_key_setup(const u8 key[], diff -Naur --no-dereference a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c --- a/net/mac80211/agg-rx.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/agg-rx.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/agg-rx.c 2024-11-24 20:19:38.258228980 -0500 @@ -9,7 +9,7 @@ * Copyright 2007, Michael Wu * Copyright 2007-2010, Intel Corporation @@ -470847,7 +497643,7 @@ diff -Naur --no-dereference a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c diff -Naur --no-dereference a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c --- a/net/mac80211/agg-tx.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/agg-tx.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/agg-tx.c 2024-11-24 20:19:38.258228980 -0500 @@ -9,7 +9,7 @@ * Copyright 2007, Michael Wu * Copyright 2007-2010, Intel Corporation @@ -470963,7 +497759,7 @@ diff -Naur --no-dereference a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c WLAN_BACK_INITIATOR, WLAN_REASON_QSTA_NOT_USE); diff -Naur --no-dereference a/net/mac80211/airtime.c b/net/mac80211/airtime.c --- a/net/mac80211/airtime.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/airtime.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/airtime.c 2024-11-24 20:19:38.258228980 -0500 @@ -457,9 +457,6 @@ (status->encoding == RX_ENC_HE && streams > 8))) return 0; @@ -470976,7 +497772,7 @@ diff -Naur --no-dereference a/net/mac80211/airtime.c b/net/mac80211/airtime.c *overhead = 36 + (streams << 2); diff -Naur --no-dereference a/net/mac80211/cfg.c b/net/mac80211/cfg.c --- a/net/mac80211/cfg.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/cfg.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/cfg.c 2024-11-24 20:19:38.258228980 -0500 @@ -152,8 +152,6 @@ struct vif_params *params) { @@ -471086,7 +497882,7 @@ diff -Naur --no-dereference a/net/mac80211/cfg.c b/net/mac80211/cfg.c params->chandef.chan->band) diff -Naur --no-dereference a/net/mac80211/chan.c b/net/mac80211/chan.c --- a/net/mac80211/chan.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/chan.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/chan.c 2024-11-24 20:19:38.259228981 -0500 @@ -1652,9 +1652,12 @@ if (new_ctx->replace_state == IEEE80211_CHANCTX_REPLACE_NONE) { @@ -471104,7 +497900,7 @@ diff -Naur --no-dereference a/net/mac80211/chan.c b/net/mac80211/chan.c /* diff -Naur --no-dereference a/net/mac80211/debugfs.c b/net/mac80211/debugfs.c --- a/net/mac80211/debugfs.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/debugfs.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/debugfs.c 2024-11-24 20:19:38.259228981 -0500 @@ -120,17 +120,18 @@ { struct ieee80211_local *local = file->private_data; @@ -471205,7 +498001,7 @@ diff -Naur --no-dereference a/net/mac80211/debugfs.c b/net/mac80211/debugfs.c local->force_tx_status = 0; diff -Naur --no-dereference a/net/mac80211/driver-ops.c b/net/mac80211/driver-ops.c --- a/net/mac80211/driver-ops.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/driver-ops.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/driver-ops.c 2024-11-24 20:19:38.259228981 -0500 @@ -125,11 +125,8 @@ } else if (old_state == IEEE80211_STA_AUTH && new_state == IEEE80211_STA_ASSOC) { @@ -471231,7 +498027,7 @@ diff -Naur --no-dereference a/net/mac80211/driver-ops.c b/net/mac80211/driver-op return -EIO; diff -Naur --no-dereference a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h --- a/net/mac80211/driver-ops.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/driver-ops.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/driver-ops.h 2024-11-24 20:19:38.259228981 -0500 @@ -1201,11 +1201,8 @@ { struct ieee80211_sub_if_data *sdata = vif_to_sdata(txq->txq.vif); @@ -471247,7 +498043,7 @@ diff -Naur --no-dereference a/net/mac80211/driver-ops.h b/net/mac80211/driver-op return; diff -Naur --no-dereference a/net/mac80211/ibss.c b/net/mac80211/ibss.c --- a/net/mac80211/ibss.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/ibss.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/ibss.c 2024-11-24 20:19:38.259228981 -0500 @@ -541,10 +541,6 @@ sdata_assert_lock(sdata); @@ -471270,7 +498066,7 @@ diff -Naur --no-dereference a/net/mac80211/ibss.c b/net/mac80211/ibss.c memset(&ifibss->ht_capa, 0, sizeof(ifibss->ht_capa)); diff -Naur --no-dereference a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h --- a/net/mac80211/ieee80211_i.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/ieee80211_i.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/ieee80211_i.h 2024-11-24 20:19:38.259228981 -0500 @@ -50,6 +50,12 @@ #define IEEE80211_ENCRYPT_HEADROOM 8 #define IEEE80211_ENCRYPT_TAILROOM 18 @@ -471421,7 +498217,7 @@ diff -Naur --no-dereference a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee8021 #endif /* IEEE80211_I_H */ diff -Naur --no-dereference a/net/mac80211/iface.c b/net/mac80211/iface.c --- a/net/mac80211/iface.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/iface.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/iface.c 2024-11-24 20:19:38.259228981 -0500 @@ -8,7 +8,7 @@ * Copyright 2008, Johannes Berg * Copyright 2013-2014 Intel Mobile Communications GmbH @@ -471500,7 +498296,7 @@ diff -Naur --no-dereference a/net/mac80211/iface.c b/net/mac80211/iface.c if (ret) { diff -Naur --no-dereference a/net/mac80211/Kconfig b/net/mac80211/Kconfig --- a/net/mac80211/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/Kconfig 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/Kconfig 2024-11-24 20:19:38.258228980 -0500 @@ -69,7 +69,7 @@ config MAC80211_LEDS bool "Enable LED triggers" @@ -471512,7 +498308,7 @@ diff -Naur --no-dereference a/net/mac80211/Kconfig b/net/mac80211/Kconfig This option enables a few LED triggers for different diff -Naur --no-dereference a/net/mac80211/key.c b/net/mac80211/key.c --- a/net/mac80211/key.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/key.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/key.c 2024-11-24 20:19:38.259228981 -0500 @@ -799,7 +799,6 @@ struct ieee80211_sub_if_data *sdata, struct sta_info *sta) @@ -471536,7 +498332,7 @@ diff -Naur --no-dereference a/net/mac80211/key.c b/net/mac80211/key.c ret = ieee80211_key_replace(sdata, sta, pairwise, old_key, key); diff -Naur --no-dereference a/net/mac80211/key.h b/net/mac80211/key.h --- a/net/mac80211/key.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/key.h 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/key.h 2024-11-24 20:19:38.259228981 -0500 @@ -128,8 +128,6 @@ } debugfs; #endif @@ -471548,7 +498344,7 @@ diff -Naur --no-dereference a/net/mac80211/key.h b/net/mac80211/key.h * material as variable length member diff -Naur --no-dereference a/net/mac80211/main.c b/net/mac80211/main.c --- a/net/mac80211/main.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/main.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/main.c 2024-11-24 20:19:38.260228983 -0500 @@ -982,19 +982,8 @@ continue; @@ -471610,7 +498406,7 @@ diff -Naur --no-dereference a/net/mac80211/main.c b/net/mac80211/main.c ieee80211_free_ack_frame, NULL); diff -Naur --no-dereference a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c --- a/net/mac80211/mesh_hwmp.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/mesh_hwmp.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/mesh_hwmp.c 2024-11-24 20:19:38.260228983 -0500 @@ -356,7 +356,7 @@ */ tx_time = (device_constant + 10 * test_frame_len / rate); @@ -471622,7 +498418,7 @@ diff -Naur --no-dereference a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp. diff -Naur --no-dereference a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c --- a/net/mac80211/mesh_pathtbl.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/mesh_pathtbl.c 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/mac80211/mesh_pathtbl.c 2024-11-24 20:19:38.260228983 -0500 @@ -60,10 +60,7 @@ atomic_set(&newtbl->entries, 0); spin_lock_init(&newtbl->gates_lock); @@ -471646,7 +498442,7 @@ diff -Naur --no-dereference a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pa diff -Naur --no-dereference a/net/mac80211/mesh_ps.c b/net/mac80211/mesh_ps.c --- a/net/mac80211/mesh_ps.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/mesh_ps.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/mesh_ps.c 2024-11-24 20:19:38.260228983 -0500 @@ -2,7 +2,6 @@ /* * Copyright 2012-2013, Marco Porsch @@ -471666,7 +498462,7 @@ diff -Naur --no-dereference a/net/mac80211/mesh_ps.c b/net/mac80211/mesh_ps.c if (!test_sta_flag(sta, WLAN_STA_MPSP_OWNER)) diff -Naur --no-dereference a/net/mac80211/mlme.c b/net/mac80211/mlme.c --- a/net/mac80211/mlme.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/mlme.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/mlme.c 2024-11-24 20:19:38.260228983 -0500 @@ -37,7 +37,6 @@ #define IEEE80211_AUTH_TIMEOUT_SAE (HZ * 2) #define IEEE80211_AUTH_MAX_TRIES 3 @@ -471930,7 +498726,7 @@ diff -Naur --no-dereference a/net/mac80211/mlme.c b/net/mac80211/mlme.c assoc_data->timeout_started = true; diff -Naur --no-dereference a/net/mac80211/rate.c b/net/mac80211/rate.c --- a/net/mac80211/rate.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/rate.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/rate.c 2024-11-24 20:19:38.260228983 -0500 @@ -960,8 +960,7 @@ if (old) kfree_rcu(old, rcu_head); @@ -471943,7 +498739,7 @@ diff -Naur --no-dereference a/net/mac80211/rate.c b/net/mac80211/rate.c diff -Naur --no-dereference a/net/mac80211/rx.c b/net/mac80211/rx.c --- a/net/mac80211/rx.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/rx.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/rx.c 2024-11-24 20:19:38.260228983 -0500 @@ -6,7 +6,7 @@ * Copyright 2007-2010 Johannes Berg * Copyright 2013-2014 Intel Mobile Communications GmbH @@ -472351,7 +499147,7 @@ diff -Naur --no-dereference a/net/mac80211/rx.c b/net/mac80211/rx.c "Rate marked as a VHT rate but data is invalid: MCS: %d, NSS: %d\n", diff -Naur --no-dereference a/net/mac80211/scan.c b/net/mac80211/scan.c --- a/net/mac80211/scan.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/scan.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/scan.c 2024-11-24 20:19:38.261228985 -0500 @@ -227,8 +227,6 @@ rx_status, beacon); } @@ -472472,7 +499268,7 @@ diff -Naur --no-dereference a/net/mac80211/scan.c b/net/mac80211/scan.c /* if no more bands/channels left, complete scan */ diff -Naur --no-dereference a/net/mac80211/spectmgmt.c b/net/mac80211/spectmgmt.c --- a/net/mac80211/spectmgmt.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/spectmgmt.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/spectmgmt.c 2024-11-24 20:19:38.261228985 -0500 @@ -133,20 +133,16 @@ } @@ -472499,7 +499295,7 @@ diff -Naur --no-dereference a/net/mac80211/spectmgmt.c b/net/mac80211/spectmgmt. * to the previously parsed chandef diff -Naur --no-dereference a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c --- a/net/mac80211/sta_info.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/sta_info.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/sta_info.c 2024-11-24 20:19:38.261228985 -0500 @@ -4,7 +4,7 @@ * Copyright 2006-2007 Jiri Benc * Copyright 2013-2014 Intel Mobile Communications GmbH @@ -472632,7 +499428,7 @@ diff -Naur --no-dereference a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c for_each_possible_cpu(cpu) { diff -Naur --no-dereference a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h --- a/net/mac80211/sta_info.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/sta_info.h 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/sta_info.h 2024-11-24 20:19:38.261228985 -0500 @@ -3,7 +3,7 @@ * Copyright 2002-2005, Devicescape Software, Inc. * Copyright 2013-2014 Intel Mobile Communications GmbH @@ -472704,7 +499500,7 @@ diff -Naur --no-dereference a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h }; diff -Naur --no-dereference a/net/mac80211/tx.c b/net/mac80211/tx.c --- a/net/mac80211/tx.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/tx.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/tx.c 2024-11-24 20:19:38.261228985 -0500 @@ -662,7 +662,7 @@ if (!skip_hw && tx->key && tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) @@ -472914,7 +499710,7 @@ diff -Naur --no-dereference a/net/mac80211/tx.c b/net/mac80211/tx.c diff -Naur --no-dereference a/net/mac80211/util.c b/net/mac80211/util.c --- a/net/mac80211/util.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/util.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/util.c 2024-11-24 20:19:38.261228985 -0500 @@ -950,16 +950,11 @@ struct ieee802_11_elems *elems) { @@ -473075,7 +499871,7 @@ diff -Naur --no-dereference a/net/mac80211/util.c b/net/mac80211/util.c } diff -Naur --no-dereference a/net/mac80211/wme.c b/net/mac80211/wme.c --- a/net/mac80211/wme.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/wme.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/wme.c 2024-11-24 20:19:38.261228985 -0500 @@ -145,8 +145,8 @@ bool qos; @@ -473089,7 +499885,7 @@ diff -Naur --no-dereference a/net/mac80211/wme.c b/net/mac80211/wme.c qos = sta->sta.wme; diff -Naur --no-dereference a/net/mac80211/wpa.c b/net/mac80211/wpa.c --- a/net/mac80211/wpa.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/mac80211/wpa.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/mac80211/wpa.c 2024-11-24 20:19:38.262228987 -0500 @@ -3,7 +3,6 @@ * Copyright 2002-2004, Instant802 Networks, Inc. * Copyright 2008, Jouni Malinen @@ -473160,7 +499956,7 @@ diff -Naur --no-dereference a/net/mac80211/wpa.c b/net/mac80211/wpa.c /* Remove GCMP header and MIC */ diff -Naur --no-dereference a/net/Makefile b/net/Makefile --- a/net/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/Makefile 2024-08-28 19:44:05.668038268 -0400 ++++ b/net/Makefile 2024-11-24 20:19:38.255228974 -0500 @@ -88,3 +88,4 @@ obj-$(CONFIG_NET_NCSI) += ncsi/ obj-$(CONFIG_XDP_SOCKETS) += xdp/ @@ -473168,7 +499964,7 @@ diff -Naur --no-dereference a/net/Makefile b/net/Makefile +obj-$(CONFIG_RPMSG_PROTO) += rpmsg/ diff -Naur --no-dereference a/net/packet/af_packet.c b/net/packet/af_packet.c --- a/net/packet/af_packet.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/packet/af_packet.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/packet/af_packet.c 2024-11-24 20:19:38.262228987 -0500 @@ -3003,6 +3003,8 @@ skb_setup_tx_timestamp(skb, sockc.tsflags); @@ -473189,7 +499985,7 @@ diff -Naur --no-dereference a/net/packet/af_packet.c b/net/packet/af_packet.c sizeof(struct sockaddr_storage)); diff -Naur --no-dereference a/net/rpmsg/Kconfig b/net/rpmsg/Kconfig --- a/net/rpmsg/Kconfig 1969-12-31 19:00:00.000000000 -0500 -+++ b/net/rpmsg/Kconfig 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/rpmsg/Kconfig 2024-11-24 20:19:38.262228987 -0500 @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: GPL-2.0-only +# @@ -473212,13 +500008,13 @@ diff -Naur --no-dereference a/net/rpmsg/Kconfig b/net/rpmsg/Kconfig + If unsure, say N. diff -Naur --no-dereference a/net/rpmsg/Makefile b/net/rpmsg/Makefile --- a/net/rpmsg/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/net/rpmsg/Makefile 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/rpmsg/Makefile 2024-11-24 20:19:38.262228987 -0500 @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0-only +obj-$(CONFIG_RPMSG_PROTO) += rpmsg_proto.o diff -Naur --no-dereference a/net/rpmsg/rpmsg_proto.c b/net/rpmsg/rpmsg_proto.c --- a/net/rpmsg/rpmsg_proto.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/net/rpmsg/rpmsg_proto.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/rpmsg/rpmsg_proto.c 2024-11-24 20:19:38.262228987 -0500 @@ -0,0 +1,745 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* AF_RPMSG: Remote processor messaging sockets @@ -473965,9 +500761,52 @@ diff -Naur --no-dereference a/net/rpmsg/rpmsg_proto.c b/net/rpmsg/rpmsg_proto.c +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("rpmsg:rpmsg-proto"); +MODULE_ALIAS_NETPROTO(AF_RPMSG); +diff -Naur --no-dereference a/net/sched/sch_api.c b/net/sched/sch_api.c +--- a/net/sched/sch_api.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/net/sched/sch_api.c 2024-11-24 20:19:38.262228987 -0500 +@@ -1270,7 +1270,7 @@ + rcu_assign_pointer(sch->stab, stab); + } + if (tca[TCA_RATE]) { +- seqcount_t *running; ++ net_seqlock_t *running; + + err = -EOPNOTSUPP; + if (sch->flags & TCQ_F_MQROOT) { +diff -Naur --no-dereference a/net/sched/sch_generic.c b/net/sched/sch_generic.c +--- a/net/sched/sch_generic.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/net/sched/sch_generic.c 2024-11-24 20:19:38.262228987 -0500 +@@ -578,7 +578,11 @@ + .ops = &noop_qdisc_ops, + .q.lock = __SPIN_LOCK_UNLOCKED(noop_qdisc.q.lock), + .dev_queue = &noop_netdev_queue, ++#ifdef CONFIG_PREEMPT_RT ++ .running = __SEQLOCK_UNLOCKED(noop_qdisc.running), ++#else + .running = SEQCNT_ZERO(noop_qdisc.running), ++#endif + .busylock = __SPIN_LOCK_UNLOCKED(noop_qdisc.busylock), + .gso_skb = { + .next = (struct sk_buff *)&noop_qdisc.gso_skb, +@@ -889,9 +893,15 @@ + lockdep_set_class(&sch->seqlock, + dev->qdisc_tx_busylock ?: &qdisc_tx_busylock); + ++#ifdef CONFIG_PREEMPT_RT ++ seqlock_init(&sch->running); ++ lockdep_set_class(&sch->running.lock, ++ dev->qdisc_running_key ?: &qdisc_running_key); ++#else + seqcount_init(&sch->running); + lockdep_set_class(&sch->running, + dev->qdisc_running_key ?: &qdisc_running_key); ++#endif + + sch->ops = ops; + sch->flags = ops->static_flags; diff -Naur --no-dereference a/net/socket.c b/net/socket.c --- a/net/socket.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/socket.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/socket.c 2024-11-24 20:19:38.262228987 -0500 @@ -843,6 +843,34 @@ } EXPORT_SYMBOL_GPL(__sock_recv_timestamp); @@ -474003,9 +500842,30 @@ diff -Naur --no-dereference a/net/socket.c b/net/socket.c void __sock_recv_wifi_status(struct msghdr *msg, struct sock *sk, struct sk_buff *skb) { +diff -Naur --no-dereference a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c +--- a/net/sunrpc/svc_xprt.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/net/sunrpc/svc_xprt.c 2024-11-24 20:19:38.263228989 -0500 +@@ -422,7 +422,7 @@ + if (test_and_set_bit(XPT_BUSY, &xprt->xpt_flags)) + return; + +- cpu = get_cpu(); ++ cpu = get_cpu_light(); + pool = svc_pool_for_cpu(xprt->xpt_server, cpu); + + atomic_long_inc(&pool->sp_stats.packets); +@@ -446,7 +446,7 @@ + rqstp = NULL; + out_unlock: + rcu_read_unlock(); +- put_cpu(); ++ put_cpu_light(); + trace_svc_xprt_do_enqueue(xprt, rqstp); + } + EXPORT_SYMBOL_GPL(svc_xprt_do_enqueue); diff -Naur --no-dereference a/net/wireless/chan.c b/net/wireless/chan.c --- a/net/wireless/chan.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/chan.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/chan.c 2024-11-24 20:19:38.263228989 -0500 @@ -874,7 +874,8 @@ for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) { @@ -474018,7 +500878,7 @@ diff -Naur --no-dereference a/net/wireless/chan.c b/net/wireless/chan.c diff -Naur --no-dereference a/net/wireless/core.c b/net/wireless/core.c --- a/net/wireless/core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/core.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/core.c 2024-11-24 20:19:38.263228989 -0500 @@ -5,7 +5,7 @@ * Copyright 2006-2010 Johannes Berg * Copyright 2013-2014 Intel Mobile Communications GmbH @@ -474066,7 +500926,7 @@ diff -Naur --no-dereference a/net/wireless/core.c b/net/wireless/core.c INIT_WORK(&wdev->pmsr_free_wk, cfg80211_pmsr_free_wk); diff -Naur --no-dereference a/net/wireless/core.h b/net/wireless/core.h --- a/net/wireless/core.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/core.h 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/core.h 2024-11-24 20:19:38.263228989 -0500 @@ -101,8 +101,6 @@ struct work_struct propagate_cac_done_wk; @@ -474078,7 +500938,7 @@ diff -Naur --no-dereference a/net/wireless/core.h b/net/wireless/core.h * and it should at least be aligned to NETDEV_ALIGN */ diff -Naur --no-dereference a/net/wireless/debugfs.c b/net/wireless/debugfs.c --- a/net/wireless/debugfs.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/debugfs.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/debugfs.c 2024-11-24 20:19:38.263228989 -0500 @@ -65,10 +65,9 @@ { struct wiphy *wiphy = file->private_data; @@ -474093,7 +500953,7 @@ diff -Naur --no-dereference a/net/wireless/debugfs.c b/net/wireless/debugfs.c if (!buf) diff -Naur --no-dereference a/net/wireless/mlme.c b/net/wireless/mlme.c --- a/net/wireless/mlme.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/mlme.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/mlme.c 2024-11-24 20:19:38.263228989 -0500 @@ -448,9 +448,9 @@ ASSERT_RTNL(); @@ -474207,7 +501067,7 @@ diff -Naur --no-dereference a/net/wireless/mlme.c b/net/wireless/mlme.c return result; diff -Naur --no-dereference a/net/wireless/nl80211.c b/net/wireless/nl80211.c --- a/net/wireless/nl80211.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/nl80211.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/nl80211.c 2024-11-24 20:19:38.263228989 -0500 @@ -5,7 +5,7 @@ * Copyright 2006-2010 Johannes Berg * Copyright 2013-2014 Intel Mobile Communications GmbH @@ -474386,7 +501246,7 @@ diff -Naur --no-dereference a/net/wireless/nl80211.c b/net/wireless/nl80211.c diff -Naur --no-dereference a/net/wireless/pmsr.c b/net/wireless/pmsr.c --- a/net/wireless/pmsr.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/pmsr.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/pmsr.c 2024-11-24 20:19:38.264228990 -0500 @@ -324,7 +324,6 @@ gfp_t gfp) { @@ -474420,7 +501280,7 @@ diff -Naur --no-dereference a/net/wireless/pmsr.c b/net/wireless/pmsr.c diff -Naur --no-dereference a/net/wireless/reg.c b/net/wireless/reg.c --- a/net/wireless/reg.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/reg.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/reg.c 2024-11-24 20:19:38.264228990 -0500 @@ -787,8 +787,6 @@ return 0; } @@ -474490,7 +501350,7 @@ diff -Naur --no-dereference a/net/wireless/reg.c b/net/wireless/reg.c err = regulatory_hint_core(cfg80211_world_regdom->alpha2); diff -Naur --no-dereference a/net/wireless/scan.c b/net/wireless/scan.c --- a/net/wireless/scan.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/scan.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/scan.c 2024-11-24 20:19:38.264228990 -0500 @@ -143,12 +143,18 @@ lockdep_assert_held(&rdev->bss_lock); @@ -474766,7 +501626,7 @@ diff -Naur --no-dereference a/net/wireless/scan.c b/net/wireless/scan.c return res; diff -Naur --no-dereference a/net/wireless/sme.c b/net/wireless/sme.c --- a/net/wireless/sme.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/sme.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/sme.c 2024-11-24 20:19:38.264228990 -0500 @@ -530,7 +530,7 @@ cfg80211_sme_free(wdev); } @@ -474794,7 +501654,7 @@ diff -Naur --no-dereference a/net/wireless/sme.c b/net/wireless/sme.c list_add_tail(&ev->list, &wdev->event_list); diff -Naur --no-dereference a/net/wireless/util.c b/net/wireless/util.c --- a/net/wireless/util.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/util.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/util.c 2024-11-24 20:19:38.265228992 -0500 @@ -541,7 +541,7 @@ int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr, @@ -474920,7 +501780,7 @@ diff -Naur --no-dereference a/net/wireless/util.c b/net/wireless/util.c +EXPORT_SYMBOL(cfg80211_is_gratuitous_arp_unsolicited_na); diff -Naur --no-dereference a/net/wireless/wext-core.c b/net/wireless/wext-core.c --- a/net/wireless/wext-core.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/wext-core.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/wext-core.c 2024-11-24 20:19:38.265228992 -0500 @@ -896,9 +896,8 @@ int call_commit_handler(struct net_device *dev) { @@ -474935,7 +501795,7 @@ diff -Naur --no-dereference a/net/wireless/wext-core.c b/net/wireless/wext-core. NULL, NULL); diff -Naur --no-dereference a/net/wireless/wext-spy.c b/net/wireless/wext-spy.c --- a/net/wireless/wext-spy.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/net/wireless/wext-spy.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/net/wireless/wext-spy.c 2024-11-24 20:19:38.265228992 -0500 @@ -120,8 +120,8 @@ return -EOPNOTSUPP; @@ -474972,16 +501832,29 @@ diff -Naur --no-dereference a/net/wireless/wext-spy.c b/net/wireless/wext-spy.c /* Send event to user space */ wireless_send_event(dev, SIOCGIWTHRSPY, &wrqu, (char *) &threshold); +diff -Naur --no-dereference a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c +--- a/net/xfrm/xfrm_state.c 2023-02-15 11:22:27.000000000 -0500 ++++ b/net/xfrm/xfrm_state.c 2024-11-24 20:19:38.265228992 -0500 +@@ -2694,7 +2694,8 @@ + net->xfrm.state_num = 0; + INIT_WORK(&net->xfrm.state_hash_work, xfrm_hash_resize); + spin_lock_init(&net->xfrm.xfrm_state_lock); +- seqcount_init(&net->xfrm.xfrm_state_hash_generation); ++ seqcount_spinlock_init(&net->xfrm.xfrm_state_hash_generation, ++ &net->xfrm.xfrm_state_lock); + return 0; + + out_byspi: diff -Naur --no-dereference a/README.md b/README.md --- a/README.md 1969-12-31 19:00:00.000000000 -0500 -+++ b/README.md 2024-08-28 19:44:05.592037860 -0400 ++++ b/README.md 2024-11-24 20:19:38.092228681 -0500 @@ -0,0 +1,3 @@ +# Gitlab CI + +Job Status: https://git.beagleboard.org/beagleboard/linux/-/jobs diff -Naur --no-dereference a/samples/rpmsg/rpmsg_client_sample.c b/samples/rpmsg/rpmsg_client_sample.c --- a/samples/rpmsg/rpmsg_client_sample.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/samples/rpmsg/rpmsg_client_sample.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/samples/rpmsg/rpmsg_client_sample.c 2024-11-24 20:19:38.265228992 -0500 @@ -79,6 +79,7 @@ static struct rpmsg_device_id rpmsg_driver_sample_id_table[] = { @@ -474992,7 +501865,7 @@ diff -Naur --no-dereference a/samples/rpmsg/rpmsg_client_sample.c b/samples/rpms MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table); diff -Naur --no-dereference a/scripts/dtb-merge b/scripts/dtb-merge --- a/scripts/dtb-merge 1969-12-31 19:00:00.000000000 -0500 -+++ b/scripts/dtb-merge 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtb-merge 2024-11-24 20:19:38.265228992 -0500 @@ -0,0 +1,53 @@ +#!/usr/bin/perl +# SPDX-License-Identifier: GPL-2.0 @@ -475049,7 +501922,7 @@ diff -Naur --no-dereference a/scripts/dtb-merge b/scripts/dtb-merge +exit system($cmd); diff -Naur --no-dereference a/scripts/dtc/checks.c b/scripts/dtc/checks.c --- a/scripts/dtc/checks.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/checks.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/checks.c 2024-11-24 20:19:38.265228992 -0500 @@ -1740,7 +1740,8 @@ if (node->bus != &graph_port_bus) return; @@ -475062,7 +501935,7 @@ diff -Naur --no-dereference a/scripts/dtc/checks.c b/scripts/dtc/checks.c check_graph_reg(c, dti, node); diff -Naur --no-dereference a/scripts/dtc/data.c b/scripts/dtc/data.c --- a/scripts/dtc/data.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/data.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/data.c 2024-11-24 20:19:38.265228992 -0500 @@ -21,10 +21,10 @@ free(d.val); } @@ -475087,7 +501960,7 @@ diff -Naur --no-dereference a/scripts/dtc/data.c b/scripts/dtc/data.c chunksize = maxlen - d.len; diff -Naur --no-dereference a/scripts/dtc/dtc.c b/scripts/dtc/dtc.c --- a/scripts/dtc/dtc.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/dtc.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/dtc.c 2024-11-24 20:19:38.265228992 -0500 @@ -122,6 +122,8 @@ return "dts"; if (!strcasecmp(s, ".yaml")) @@ -475108,7 +501981,7 @@ diff -Naur --no-dereference a/scripts/dtc/dtc.c b/scripts/dtc/dtc.c } else if (streq(outform, "null")) { diff -Naur --no-dereference a/scripts/dtc/dtc.h b/scripts/dtc/dtc.h --- a/scripts/dtc/dtc.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/dtc.h 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/dtc.h 2024-11-24 20:19:38.265228992 -0500 @@ -105,13 +105,13 @@ struct marker { @@ -475145,7 +502018,7 @@ diff -Naur --no-dereference a/scripts/dtc/dtc.h b/scripts/dtc/dtc.h struct marker *get_marker_label(struct node *tree, const char *label, diff -Naur --no-dereference a/scripts/dtc/fdtoverlay.c b/scripts/dtc/fdtoverlay.c --- a/scripts/dtc/fdtoverlay.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/scripts/dtc/fdtoverlay.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/fdtoverlay.c 2024-11-24 20:19:38.266228994 -0500 @@ -0,0 +1,208 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* @@ -475357,7 +502230,7 @@ diff -Naur --no-dereference a/scripts/dtc/fdtoverlay.c b/scripts/dtc/fdtoverlay. +} diff -Naur --no-dereference a/scripts/dtc/flattree.c b/scripts/dtc/flattree.c --- a/scripts/dtc/flattree.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/flattree.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/flattree.c 2024-11-24 20:19:38.266228994 -0500 @@ -149,7 +149,7 @@ static void asm_emit_data(void *e, struct data d) { @@ -475396,14 +502269,14 @@ diff -Naur --no-dereference a/scripts/dtc/flattree.c b/scripts/dtc/flattree.c const char *symprefix = "dt"; diff -Naur --no-dereference a/scripts/dtc/.gitignore b/scripts/dtc/.gitignore --- a/scripts/dtc/.gitignore 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/.gitignore 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/.gitignore 2024-11-24 20:19:38.265228992 -0500 @@ -1,2 +1,3 @@ # SPDX-License-Identifier: GPL-2.0-only dtc +fdtoverlay diff -Naur --no-dereference a/scripts/dtc/libfdt/fdt.c b/scripts/dtc/libfdt/fdt.c --- a/scripts/dtc/libfdt/fdt.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/libfdt/fdt.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/libfdt/fdt.c 2024-11-24 20:19:38.266228994 -0500 @@ -22,6 +22,10 @@ if (can_assume(VALID_DTB)) return totalsize; @@ -475417,7 +502290,7 @@ diff -Naur --no-dereference a/scripts/dtc/libfdt/fdt.c b/scripts/dtc/libfdt/fdt. if (!can_assume(LATEST)) { diff -Naur --no-dereference a/scripts/dtc/libfdt/fdt_ro.c b/scripts/dtc/libfdt/fdt_ro.c --- a/scripts/dtc/libfdt/fdt_ro.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/libfdt/fdt_ro.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/libfdt/fdt_ro.c 2024-11-24 20:19:38.266228994 -0500 @@ -181,8 +181,8 @@ if (!can_assume(VALID_INPUT) && !re) return -FDT_ERR_BADOFFSET; @@ -475501,7 +502374,7 @@ diff -Naur --no-dereference a/scripts/dtc/libfdt/fdt_ro.c b/scripts/dtc/libfdt/f const char *fdt_get_alias_namelen(const void *fdt, diff -Naur --no-dereference a/scripts/dtc/libfdt/fdt_rw.c b/scripts/dtc/libfdt/fdt_rw.c --- a/scripts/dtc/libfdt/fdt_rw.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/libfdt/fdt_rw.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/libfdt/fdt_rw.c 2024-11-24 20:19:38.266228994 -0500 @@ -428,12 +428,14 @@ if (can_assume(LATEST) || fdt_version(fdt) >= 17) { @@ -475520,7 +502393,7 @@ diff -Naur --no-dereference a/scripts/dtc/libfdt/fdt_rw.c b/scripts/dtc/libfdt/f if (can_assume(LIBFDT_ORDER) || diff -Naur --no-dereference a/scripts/dtc/libfdt/fdt_sw.c b/scripts/dtc/libfdt/fdt_sw.c --- a/scripts/dtc/libfdt/fdt_sw.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/libfdt/fdt_sw.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/libfdt/fdt_sw.c 2024-11-24 20:19:38.266228994 -0500 @@ -377,7 +377,7 @@ fdt_set_totalsize(fdt, newstroffset + fdt_size_dt_strings(fdt)); @@ -475532,7 +502405,7 @@ diff -Naur --no-dereference a/scripts/dtc/libfdt/fdt_sw.c b/scripts/dtc/libfdt/f return 0; diff -Naur --no-dereference a/scripts/dtc/libfdt/libfdt.h b/scripts/dtc/libfdt/libfdt.h --- a/scripts/dtc/libfdt/libfdt.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/libfdt/libfdt.h 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/libfdt/libfdt.h 2024-11-24 20:19:38.266228994 -0500 @@ -14,6 +14,7 @@ #endif @@ -475909,7 +502782,7 @@ diff -Naur --no-dereference a/scripts/dtc/libfdt/libfdt.h b/scripts/dtc/libfdt/l * success diff -Naur --no-dereference a/scripts/dtc/libfdt/libfdt_internal.h b/scripts/dtc/libfdt/libfdt_internal.h --- a/scripts/dtc/libfdt/libfdt_internal.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/libfdt/libfdt_internal.h 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/libfdt/libfdt_internal.h 2024-11-24 20:19:38.266228994 -0500 @@ -46,6 +46,25 @@ return (void *)(uintptr_t)fdt_mem_rsv_(fdt, n); } @@ -475938,7 +502811,7 @@ diff -Naur --no-dereference a/scripts/dtc/libfdt/libfdt_internal.h b/scripts/dtc /**********************************************************************/ diff -Naur --no-dereference a/scripts/dtc/livetree.c b/scripts/dtc/livetree.c --- a/scripts/dtc/livetree.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/livetree.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/livetree.c 2024-11-24 20:19:38.266228994 -0500 @@ -438,7 +438,7 @@ return fdt32_to_cpu(*((fdt32_t *)prop->val.val)); } @@ -475950,7 +502823,7 @@ diff -Naur --no-dereference a/scripts/dtc/livetree.c b/scripts/dtc/livetree.c return fdt32_to_cpu(*((fdt32_t *)prop->val.val + n)); diff -Naur --no-dereference a/scripts/dtc/Makefile b/scripts/dtc/Makefile --- a/scripts/dtc/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/Makefile 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/Makefile 2024-11-24 20:19:38.265228992 -0500 @@ -1,13 +1,20 @@ # SPDX-License-Identifier: GPL-2.0 # scripts/dtc makefile @@ -475975,7 +502848,7 @@ diff -Naur --no-dereference a/scripts/dtc/Makefile b/scripts/dtc/Makefile diff -Naur --no-dereference a/scripts/dtc/srcpos.c b/scripts/dtc/srcpos.c --- a/scripts/dtc/srcpos.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/srcpos.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/srcpos.c 2024-11-24 20:19:38.266228994 -0500 @@ -20,7 +20,7 @@ static struct search_path *search_path_head, **search_path_tail; @@ -475987,7 +502860,7 @@ diff -Naur --no-dereference a/scripts/dtc/srcpos.c b/scripts/dtc/srcpos.c static char *get_dirname(const char *path) diff -Naur --no-dereference a/scripts/dtc/update-dtc-source.sh b/scripts/dtc/update-dtc-source.sh --- a/scripts/dtc/update-dtc-source.sh 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/update-dtc-source.sh 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/update-dtc-source.sh 2024-11-24 20:19:38.266228994 -0500 @@ -37,6 +37,7 @@ LIBFDT_SOURCE="fdt.c fdt.h fdt_addresses.c fdt_empty_tree.c \ fdt_overlay.c fdt_ro.c fdt_rw.c fdt_strerror.c fdt_sw.c \ @@ -476007,13 +502880,13 @@ diff -Naur --no-dereference a/scripts/dtc/update-dtc-source.sh b/scripts/dtc/upd done diff -Naur --no-dereference a/scripts/dtc/version_gen.h b/scripts/dtc/version_gen.h --- a/scripts/dtc/version_gen.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/version_gen.h 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/version_gen.h 2024-11-24 20:19:38.266228994 -0500 @@ -1 +1 @@ -#define DTC_VERSION "DTC 1.6.0-gcbca977e" +#define DTC_VERSION "DTC 1.6.0-g183df9e9" diff -Naur --no-dereference a/scripts/dtc/yamltree.c b/scripts/dtc/yamltree.c --- a/scripts/dtc/yamltree.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/dtc/yamltree.c 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/dtc/yamltree.c 2024-11-24 20:19:38.266228994 -0500 @@ -29,11 +29,11 @@ (emitter)->problem, __func__, __LINE__); \ }) @@ -476039,7 +502912,7 @@ diff -Naur --no-dereference a/scripts/dtc/yamltree.c b/scripts/dtc/yamltree.c /* Emit the property name */ diff -Naur --no-dereference a/scripts/Makefile.dtbinst b/scripts/Makefile.dtbinst --- a/scripts/Makefile.dtbinst 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/Makefile.dtbinst 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/Makefile.dtbinst 2024-11-24 20:19:38.265228992 -0500 @@ -18,9 +18,10 @@ include $(src)/Makefile @@ -476064,7 +502937,7 @@ diff -Naur --no-dereference a/scripts/Makefile.dtbinst b/scripts/Makefile.dtbins $(Q)$(MAKE) $(dtbinst)=$@ dst=$(patsubst $(obj)/%,$(dst)/%,$@) diff -Naur --no-dereference a/scripts/Makefile.lib b/scripts/Makefile.lib --- a/scripts/Makefile.lib 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/Makefile.lib 2024-08-28 19:44:05.672038290 -0400 ++++ b/scripts/Makefile.lib 2024-11-24 20:19:38.265228992 -0500 @@ -341,6 +341,24 @@ $(obj)/%.dt.yaml: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE $(call if_changed_rule,dtc,yaml) @@ -476092,7 +502965,7 @@ diff -Naur --no-dereference a/scripts/Makefile.lib b/scripts/Makefile.lib # Bzip2 diff -Naur --no-dereference a/scripts/package/builddeb b/scripts/package/builddeb --- a/scripts/package/builddeb 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/package/builddeb 2024-08-28 19:44:05.676038312 -0400 ++++ b/scripts/package/builddeb 2024-11-24 20:19:38.266228994 -0500 @@ -67,7 +67,7 @@ ) > debian/hdrsrcfiles @@ -476112,7 +502985,7 @@ diff -Naur --no-dereference a/scripts/package/builddeb b/scripts/package/buildde diff -Naur --no-dereference a/scripts/package/buildtar b/scripts/package/buildtar --- a/scripts/package/buildtar 2023-02-15 11:22:27.000000000 -0500 -+++ b/scripts/package/buildtar 2024-08-28 19:44:05.676038312 -0400 ++++ b/scripts/package/buildtar 2024-11-24 20:19:38.266228994 -0500 @@ -39,6 +39,10 @@ opts="-I ${XZ}" tarball=${tarball}.xz @@ -476141,7 +503014,7 @@ diff -Naur --no-dereference a/scripts/package/buildtar b/scripts/package/buildta [ -f "${KBUILD_IMAGE}" ] && cp -v -- "${KBUILD_IMAGE}" "${tmpdir}/boot/vmlinux-kbuild-${KERNELRELEASE}" diff -Naur --no-dereference a/security/security.c b/security/security.c --- a/security/security.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/security/security.c 2024-08-28 19:44:05.676038312 -0400 ++++ b/security/security.c 2024-11-24 20:19:38.267228996 -0500 @@ -1109,6 +1109,7 @@ return 0; return call_int_hook(path_rmdir, 0, dir, dentry); @@ -476208,7 +503081,7 @@ diff -Naur --no-dereference a/security/security.c b/security/security.c { diff -Naur --no-dereference a/security/selinux/hooks.c b/security/selinux/hooks.c --- a/security/selinux/hooks.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/security/selinux/hooks.c 2024-08-28 19:44:05.676038312 -0400 ++++ b/security/selinux/hooks.c 2024-11-24 20:19:38.267228996 -0500 @@ -1279,7 +1279,9 @@ return SECCLASS_SMC_SOCKET; case PF_XDP: @@ -476222,7 +503095,7 @@ diff -Naur --no-dereference a/security/selinux/hooks.c b/security/selinux/hooks. } diff -Naur --no-dereference a/security/selinux/include/classmap.h b/security/selinux/include/classmap.h --- a/security/selinux/include/classmap.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/security/selinux/include/classmap.h 2024-08-28 19:44:05.676038312 -0400 ++++ b/security/selinux/include/classmap.h 2024-11-24 20:19:38.267228996 -0500 @@ -237,6 +237,8 @@ { COMMON_SOCK_PERMS, NULL } }, { "smc_socket", @@ -476242,7 +503115,7 @@ diff -Naur --no-dereference a/security/selinux/include/classmap.h b/security/sel #endif diff -Naur --no-dereference a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig --- a/sound/soc/codecs/Kconfig 2023-02-15 11:22:27.000000000 -0500 -+++ b/sound/soc/codecs/Kconfig 2024-08-28 19:44:05.676038312 -0400 ++++ b/sound/soc/codecs/Kconfig 2024-11-24 20:19:38.267228996 -0500 @@ -1007,7 +1007,7 @@ select REGMAP_SPI @@ -476254,7 +503127,7 @@ diff -Naur --no-dereference a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfi tristate diff -Naur --no-dereference a/sound/soc/ti/davinci-mcasp.c b/sound/soc/ti/davinci-mcasp.c --- a/sound/soc/ti/davinci-mcasp.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/sound/soc/ti/davinci-mcasp.c 2024-08-28 19:44:05.676038312 -0400 ++++ b/sound/soc/ti/davinci-mcasp.c 2024-11-24 20:19:38.267228996 -0500 @@ -1919,6 +1919,8 @@ return PCM_SDMA; else if (strstr(tmp, "udmap")) @@ -476266,7 +503139,7 @@ diff -Naur --no-dereference a/sound/soc/ti/davinci-mcasp.c b/sound/soc/ti/davinc } diff -Naur --no-dereference a/ti_config_fragments/am33xx_only.cfg b/ti_config_fragments/am33xx_only.cfg --- a/ti_config_fragments/am33xx_only.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/am33xx_only.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/am33xx_only.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,10 @@ +################################################## +# TI AM33XX specific config options @@ -476280,7 +503153,7 @@ diff -Naur --no-dereference a/ti_config_fragments/am33xx_only.cfg b/ti_config_fr +CONFIG_CPUSETS=n diff -Naur --no-dereference a/ti_config_fragments/am43xx_only.cfg b/ti_config_fragments/am43xx_only.cfg --- a/ti_config_fragments/am43xx_only.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/am43xx_only.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/am43xx_only.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,10 @@ +################################################## +# TI AM43XX specific config options @@ -476294,7 +503167,7 @@ diff -Naur --no-dereference a/ti_config_fragments/am43xx_only.cfg b/ti_config_fr +CONFIG_CPUSETS=n diff -Naur --no-dereference a/ti_config_fragments/arm64_prune.cfg b/ti_config_fragments/arm64_prune.cfg --- a/ti_config_fragments/arm64_prune.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/arm64_prune.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/arm64_prune.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,107 @@ +CONFIG_ARCH_ACTIONS=n +CONFIG_ARCH_SUNXI=n @@ -476405,7 +503278,7 @@ diff -Naur --no-dereference a/ti_config_fragments/arm64_prune.cfg b/ti_config_fr +CONFIG_SND_SOC_TAS571X=n diff -Naur --no-dereference a/ti_config_fragments/audio_display.cfg b/ti_config_fragments/audio_display.cfg --- a/ti_config_fragments/audio_display.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/audio_display.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/audio_display.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,136 @@ +################################################## +# TI Audio/Display config options @@ -476545,7 +503418,7 @@ diff -Naur --no-dereference a/ti_config_fragments/audio_display.cfg b/ti_config_ +CONFIG_RPMSG_KDRV_DISPLAY=y diff -Naur --no-dereference a/ti_config_fragments/baseport.cfg b/ti_config_fragments/baseport.cfg --- a/ti_config_fragments/baseport.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/baseport.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/baseport.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,210 @@ +################################################## +# TI Baseport Config Options @@ -476759,7 +503632,7 @@ diff -Naur --no-dereference a/ti_config_fragments/baseport.cfg b/ti_config_fragm +CONFIG_DMA_BUF_PHYS=y diff -Naur --no-dereference a/ti_config_fragments/connectivity.cfg b/ti_config_fragments/connectivity.cfg --- a/ti_config_fragments/connectivity.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/connectivity.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/connectivity.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,534 @@ +################################################## +# TI Connectivity Configs @@ -477297,7 +504170,7 @@ diff -Naur --no-dereference a/ti_config_fragments/connectivity.cfg b/ti_config_f +CONFIG_XDP_SOCKETS=y diff -Naur --no-dereference a/ti_config_fragments/containers.cfg b/ti_config_fragments/containers.cfg --- a/ti_config_fragments/containers.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/containers.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/containers.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,32 @@ +############################################## +# @@ -477333,7 +504206,7 @@ diff -Naur --no-dereference a/ti_config_fragments/containers.cfg b/ti_config_fra +CONFIG_INET_XFRM_MODE_TRANSPORT=m diff -Naur --no-dereference a/ti_config_fragments/debug_ftrace.cfg b/ti_config_fragments/debug_ftrace.cfg --- a/ti_config_fragments/debug_ftrace.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/debug_ftrace.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/debug_ftrace.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,14 @@ +################################################## +# Debug FTRACE options @@ -477351,7 +504224,7 @@ diff -Naur --no-dereference a/ti_config_fragments/debug_ftrace.cfg b/ti_config_f +CONFIG_STACK_TRACER=y diff -Naur --no-dereference a/ti_config_fragments/debug_options.cfg b/ti_config_fragments/debug_options.cfg --- a/ti_config_fragments/debug_options.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/debug_options.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/debug_options.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,99 @@ +################################################## +# Common Debug options considered generically @@ -477454,7 +504327,7 @@ diff -Naur --no-dereference a/ti_config_fragments/debug_options.cfg b/ti_config_ +CONFIG_PM_DEBUG=y diff -Naur --no-dereference a/ti_config_fragments/defconfig_builder.sh b/ti_config_fragments/defconfig_builder.sh --- a/ti_config_fragments/defconfig_builder.sh 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/defconfig_builder.sh 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/defconfig_builder.sh 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,510 @@ +#!/bin/bash +# @@ -477968,7 +504841,7 @@ diff -Naur --no-dereference a/ti_config_fragments/defconfig_builder.sh b/ti_conf +build_defconfig diff -Naur --no-dereference a/ti_config_fragments/defconfig_map.txt b/ti_config_fragments/defconfig_map.txt --- a/ti_config_fragments/defconfig_map.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/defconfig_map.txt 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/defconfig_map.txt 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,34 @@ +# Release Defconfigs +classification: SDK_Release_Defconfigs type: ti_sdk_am3x_release defconfig: multi_v7_defconfig config_file: None extra_configs: multi_v7_prune.cfg baseport.cfg ipc.cfg connectivity.cfg audio_display.cfg omap_soc.cfg am33xx_only.cfg systemd.cfg containers.cfg @@ -478006,7 +504879,7 @@ diff -Naur --no-dereference a/ti_config_fragments/defconfig_map.txt b/ti_config_ +classification: SDK_Debug_Defconfigs type: ti_sdk_am57x_android_debug defconfig: multi_v7_defconfig config_file: None extra_configs: multi_v7_prune.cfg baseport.cfg ipc.cfg connectivity.cfg audio_display.cfg omap_soc.cfg dra7_only.cfg systemd.cfg debug_options.cfg ../kernel/configs/android-base.config ../kernel/configs/android-recommended.config android.cfg diff -Naur --no-dereference a/ti_config_fragments/dra7_only.cfg b/ti_config_fragments/dra7_only.cfg --- a/ti_config_fragments/dra7_only.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/dra7_only.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/dra7_only.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,23 @@ +################################################## +# TI DRA7 specific config options @@ -478033,7 +504906,7 @@ diff -Naur --no-dereference a/ti_config_fragments/dra7_only.cfg b/ti_config_frag +CONFIG_EDAC_TI=m diff -Naur --no-dereference a/ti_config_fragments/ipc.cfg b/ti_config_fragments/ipc.cfg --- a/ti_config_fragments/ipc.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/ipc.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/ipc.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,39 @@ +################################################## +# TI RPMsg/IPC Config Options @@ -478076,7 +504949,7 @@ diff -Naur --no-dereference a/ti_config_fragments/ipc.cfg b/ti_config_fragments/ +CONFIG_UIO=m diff -Naur --no-dereference a/ti_config_fragments/k2g_only.cfg b/ti_config_fragments/k2g_only.cfg --- a/ti_config_fragments/k2g_only.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/k2g_only.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/k2g_only.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,8 @@ +################################################## +# TI K2G (UP) specific config options @@ -478088,7 +504961,7 @@ diff -Naur --no-dereference a/ti_config_fragments/k2g_only.cfg b/ti_config_fragm +CONFIG_POWER_SUPPLY=n diff -Naur --no-dereference a/ti_config_fragments/keystone.cfg b/ti_config_fragments/keystone.cfg --- a/ti_config_fragments/keystone.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/keystone.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/keystone.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,25 @@ +################################################## +# TI Base Keystone generation SoCs generic default @@ -478117,7 +504990,7 @@ diff -Naur --no-dereference a/ti_config_fragments/keystone.cfg b/ti_config_fragm +CONFIG_ARM_LPAE=y diff -Naur --no-dereference a/ti_config_fragments/multi_v7_prune.cfg b/ti_config_fragments/multi_v7_prune.cfg --- a/ti_config_fragments/multi_v7_prune.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/multi_v7_prune.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/multi_v7_prune.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,168 @@ +# Add config flags here that only appear in the multi_v7_defconfig +CONFIG_ARCH_ALPINE=n @@ -478289,7 +505162,7 @@ diff -Naur --no-dereference a/ti_config_fragments/multi_v7_prune.cfg b/ti_config +CONFIG_XEN_FBDEV_FRONTEND=n diff -Naur --no-dereference a/ti_config_fragments/omap_soc.cfg b/ti_config_fragments/omap_soc.cfg --- a/ti_config_fragments/omap_soc.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/omap_soc.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/omap_soc.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,20 @@ +################################################## +# TI Base OMAP generation SoCs generic default @@ -478313,7 +505186,7 @@ diff -Naur --no-dereference a/ti_config_fragments/omap_soc.cfg b/ti_config_fragm +CONFIG_KEXEC=y diff -Naur --no-dereference a/ti_config_fragments/README b/ti_config_fragments/README --- a/ti_config_fragments/README 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/README 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/README 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,96 @@ +################################## +# Introduction @@ -478413,7 +505286,7 @@ diff -Naur --no-dereference a/ti_config_fragments/README b/ti_config_fragments/R +classification: SDK_release type: ti_sdk_am3x_release defconfig: multi_v7_defconfig config_file: None extra_configs: multi_v7_prune.cfg baseport.cfg ipc.cfg connectivity.cfg audio_display.cfg omap_soc.cfg am33xx_only.cfg systemd.cfg diff -Naur --no-dereference a/ti_config_fragments/real_time.cfg b/ti_config_fragments/real_time.cfg --- a/ti_config_fragments/real_time.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/real_time.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/real_time.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,36 @@ +################################################## +# Real Time Linux Configs @@ -478453,7 +505326,7 @@ diff -Naur --no-dereference a/ti_config_fragments/real_time.cfg b/ti_config_frag +# CONFIG_RCU_NOCB_CPU_ALL=y diff -Naur --no-dereference a/ti_config_fragments/systemd.cfg b/ti_config_fragments/systemd.cfg --- a/ti_config_fragments/systemd.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/systemd.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/systemd.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,88 @@ +############################################## +# @@ -478545,7 +505418,7 @@ diff -Naur --no-dereference a/ti_config_fragments/systemd.cfg b/ti_config_fragme +CONFIG_AUDIT=n diff -Naur --no-dereference a/ti_config_fragments/v8_audio_display.cfg b/ti_config_fragments/v8_audio_display.cfg --- a/ti_config_fragments/v8_audio_display.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/v8_audio_display.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/v8_audio_display.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,80 @@ +################################################## +# TI Audio/Display config options @@ -478629,7 +505502,7 @@ diff -Naur --no-dereference a/ti_config_fragments/v8_audio_display.cfg b/ti_conf +CONFIG_RPMSG_KDRV_DISPLAY=y diff -Naur --no-dereference a/ti_config_fragments/v8_baseport.cfg b/ti_config_fragments/v8_baseport.cfg --- a/ti_config_fragments/v8_baseport.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/v8_baseport.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/v8_baseport.cfg 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,112 @@ +################################################## +# TI Baseport Config Options @@ -478745,7 +505618,7 @@ diff -Naur --no-dereference a/ti_config_fragments/v8_baseport.cfg b/ti_config_fr +CONFIG_CRYPTO_USER_API_HASH=m diff -Naur --no-dereference a/ti_config_fragments/v8_defconfig_map.txt b/ti_config_fragments/v8_defconfig_map.txt --- a/ti_config_fragments/v8_defconfig_map.txt 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/v8_defconfig_map.txt 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/v8_defconfig_map.txt 2024-11-24 20:19:38.268228998 -0500 @@ -0,0 +1,12 @@ +# Release Defconfigs +classification: SDK_Release_Defconfigs type: ti_sdk_arm64_release defconfig: defconfig config_file: None extra_configs: arm64_prune.cfg v8_baseport.cfg v8_ipc.cfg connectivity.cfg v8_audio_display.cfg v8_multimedia.cfg systemd.cfg containers.cfg @@ -478761,7 +505634,7 @@ diff -Naur --no-dereference a/ti_config_fragments/v8_defconfig_map.txt b/ti_conf +classification: SDK_Debug_Defconfigs type: ti_sdk_arm64_android_debug defconfig: defconfig config_file: None extra_configs: arm64_prune.cfg v8_baseport.cfg v8_ipc.cfg connectivity.cfg v8_audio_display.cfg v8_multimedia.cfg debug_options.cfg ../kernel/configs/android-base.config ../kernel/configs/android-recommended.config v8_android.cfg diff -Naur --no-dereference a/ti_config_fragments/v8_ipc.cfg b/ti_config_fragments/v8_ipc.cfg --- a/ti_config_fragments/v8_ipc.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/v8_ipc.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/v8_ipc.cfg 2024-11-24 20:19:38.269228999 -0500 @@ -0,0 +1,30 @@ +################################################## +# TI RPMsg/IPC Config Options @@ -478795,7 +505668,7 @@ diff -Naur --no-dereference a/ti_config_fragments/v8_ipc.cfg b/ti_config_fragmen +CONFIG_SAMPLE_RPMSG_CLIENT=m diff -Naur --no-dereference a/ti_config_fragments/v8_multimedia.cfg b/ti_config_fragments/v8_multimedia.cfg --- a/ti_config_fragments/v8_multimedia.cfg 1969-12-31 19:00:00.000000000 -0500 -+++ b/ti_config_fragments/v8_multimedia.cfg 2024-08-28 19:44:05.676038312 -0400 ++++ b/ti_config_fragments/v8_multimedia.cfg 2024-11-24 20:19:38.269228999 -0500 @@ -0,0 +1,14 @@ +################################################## +# TI Multimedia (Video Decode, Encode) Configs @@ -478813,12 +505686,12 @@ diff -Naur --no-dereference a/ti_config_fragments/v8_multimedia.cfg b/ti_config_ +CONFIG_VIDEO_WAVE_VPU=m diff -Naur --no-dereference a/tools/counter/Build b/tools/counter/Build --- a/tools/counter/Build 1969-12-31 19:00:00.000000000 -0500 -+++ b/tools/counter/Build 2024-08-28 19:44:05.676038312 -0400 ++++ b/tools/counter/Build 2024-11-24 20:19:38.269228999 -0500 @@ -0,0 +1 @@ +counter_example-y += counter_example.o diff -Naur --no-dereference a/tools/counter/counter_example.c b/tools/counter/counter_example.c --- a/tools/counter/counter_example.c 1969-12-31 19:00:00.000000000 -0500 -+++ b/tools/counter/counter_example.c 2024-08-28 19:44:05.676038312 -0400 ++++ b/tools/counter/counter_example.c 2024-11-24 20:19:38.269228999 -0500 @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* Counter - example userspace application @@ -478914,7 +505787,7 @@ diff -Naur --no-dereference a/tools/counter/counter_example.c b/tools/counter/co +} diff -Naur --no-dereference a/tools/counter/Makefile b/tools/counter/Makefile --- a/tools/counter/Makefile 1969-12-31 19:00:00.000000000 -0500 -+++ b/tools/counter/Makefile 2024-08-28 19:44:05.676038312 -0400 ++++ b/tools/counter/Makefile 2024-11-24 20:19:38.269228999 -0500 @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: GPL-2.0 +include ../scripts/Makefile.include @@ -478971,7 +505844,7 @@ diff -Naur --no-dereference a/tools/counter/Makefile b/tools/counter/Makefile +.PHONY: all install clean FORCE prepare diff -Naur --no-dereference a/tools/include/uapi/asm-generic/socket.h b/tools/include/uapi/asm-generic/socket.h --- a/tools/include/uapi/asm-generic/socket.h 2023-02-15 11:22:27.000000000 -0500 -+++ b/tools/include/uapi/asm-generic/socket.h 2024-08-28 19:44:05.676038312 -0400 ++++ b/tools/include/uapi/asm-generic/socket.h 2024-11-24 20:19:38.269228999 -0500 @@ -144,4 +144,10 @@ #endif @@ -478985,7 +505858,7 @@ diff -Naur --no-dereference a/tools/include/uapi/asm-generic/socket.h b/tools/in #endif /* __ASM_GENERIC_SOCKET_H */ diff -Naur --no-dereference a/tools/Makefile b/tools/Makefile --- a/tools/Makefile 2023-02-15 11:22:27.000000000 -0500 -+++ b/tools/Makefile 2024-08-28 19:44:05.676038312 -0400 ++++ b/tools/Makefile 2024-11-24 20:19:38.269228999 -0500 @@ -12,6 +12,7 @@ @echo ' acpi - ACPI tools' @echo ' bpf - misc BPF tools' @@ -479050,7 +505923,7 @@ diff -Naur --no-dereference a/tools/Makefile b/tools/Makefile freefall_clean build_clean libbpf_clean libsubcmd_clean liblockdep_clean \ diff -Naur --no-dereference a/tools/testing/selftests/net/timestamping.c b/tools/testing/selftests/net/timestamping.c --- a/tools/testing/selftests/net/timestamping.c 2023-02-15 11:22:27.000000000 -0500 -+++ b/tools/testing/selftests/net/timestamping.c 2024-08-28 19:44:05.676038312 -0400 ++++ b/tools/testing/selftests/net/timestamping.c 2024-11-24 20:19:38.269228999 -0500 @@ -59,7 +59,8 @@ " SOF_TIMESTAMPING_SOFTWARE - request reporting of software time stamps\n" " SOF_TIMESTAMPING_RAW_HARDWARE - request reporting of raw HW time stamps\n" diff --git a/linux/linux-5.10.defconfig b/linux/linux-5.10.defconfig index 42e5fd7..203b473 100644 --- a/linux/linux-5.10.defconfig +++ b/linux/linux-5.10.defconfig @@ -4,12 +4,11 @@ CONFIG_SYSVIPC=y CONFIG_POSIX_MQUEUE=y CONFIG_NO_HZ_IDLE=y CONFIG_HIGH_RES_TIMERS=y -CONFIG_PREEMPT=y +CONFIG_PREEMPT_RT=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_MEMCG=y CONFIG_BLK_CGROUP=y -CONFIG_RT_GROUP_SCHED=y CONFIG_CGROUP_PIDS=y CONFIG_CGROUP_FREEZER=y CONFIG_CGROUP_DEVICE=y @@ -50,7 +49,6 @@ CONFIG_ARM_CPUIDLE=y CONFIG_ARM_PSCI_CPUIDLE=y CONFIG_KERNEL_MODE_NEON=y # CONFIG_SUSPEND is not set -CONFIG_JUMP_LABEL=y CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y CONFIG_MODVERSIONS=y diff --git a/linux/update-kernel-patch.sh b/linux/update-kernel-patch.sh index c455a9e..e0fd911 100755 --- a/linux/update-kernel-patch.sh +++ b/linux/update-kernel-patch.sh @@ -60,6 +60,6 @@ update_kernel_patch() { return 0 } -update_kernel_patch 5.10.168-ti-r72 5.10.168 0001-rcn-linux-5.10.168-ti-r72.patch +update_kernel_patch 5.10.168-ti-rt-r72 5.10.168 0001-rcn-linux-5.10.168-ti-rt-r72.patch echo "Updated patches. Now rebuild the linux kernel."