From 224e3e98c6925f0eb422c8cdc39804a2f88d1d58 Mon Sep 17 00:00:00 2001 From: zhangyu Date: Wed, 20 Nov 2024 09:58:27 +0800 Subject: [PATCH] kernel-rt:update to 5.10.0-236.0.0.64 && rpi-rt:update to 5.10.0-236.0.0.12 --- 0001-apply-preempt-RT-patch.patch | 1041 +++++++++-------- ...-modify-openeuler_defconfig-for-rt62.patch | 39 +- kernel-rt.spec | 7 +- raspberrypi-kernel-rt.spec | 7 +- 4 files changed, 557 insertions(+), 537 deletions(-) diff --git a/0001-apply-preempt-RT-patch.patch b/0001-apply-preempt-RT-patch.patch index 19a70db..1fe1b9f 100644 --- a/0001-apply-preempt-RT-patch.patch +++ b/0001-apply-preempt-RT-patch.patch @@ -1,7 +1,7 @@ -From 64abc394122dd07c1eb0bd5c6455c87149133fdc Mon Sep 17 00:00:00 2001 +From 9ab4249a2de8f19956276e268b56739e2fdc68f9 Mon Sep 17 00:00:00 2001 From: zhangyu -Date: Thu, 16 May 2024 16:33:21 +0800 -Subject: [PATCH 1/2] zzzy1 +Date: Tue, 19 Nov 2024 12:08:53 +0800 +Subject: [PATCH 1/2] 20241119-rt1 --- .../Expedited-Grace-Periods.rst | 4 +- @@ -341,7 +341,7 @@ Subject: [PATCH 1/2] zzzy1 kernel/panic.c | 32 +- kernel/printk/Makefile | 1 - kernel/printk/internal.h | 4 - - kernel/printk/printk.c | 1794 +++++++++-------- + kernel/printk/printk.c | 1796 +++++++++-------- kernel/printk/printk_safe.c | 349 +--- kernel/ptrace.c | 32 +- kernel/rcu/Kconfig | 4 +- @@ -403,7 +403,7 @@ Subject: [PATCH 1/2] zzzy1 net/sched/sch_generic.c | 10 + net/sunrpc/svc_xprt.c | 4 +- net/xfrm/xfrm_state.c | 3 +- - 399 files changed, 8958 insertions(+), 4850 deletions(-) + 399 files changed, 8957 insertions(+), 4853 deletions(-) delete mode 100644 arch/alpha/include/asm/kmap_types.h delete mode 100644 arch/arc/include/asm/kmap_types.h delete mode 100644 arch/arm/include/asm/kmap_types.h @@ -665,10 +665,10 @@ index fb3ff76c3..3b2b1479f 100644 read-side critical sections. It also permits spinlocks blocking while in RCU read-side critical diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt -index 5ad5cd51d..7b2a88060 100644 +index 1bcc53b0c..b5249966e 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt -@@ -4403,6 +4403,10 @@ +@@ -4431,6 +4431,10 @@ value, meaning that RCU_SOFTIRQ is used by default. Specify rcutree.use_softirq=0 to use rcuc kthreads. @@ -679,7 +679,7 @@ index 5ad5cd51d..7b2a88060 100644 rcutree.rcu_fanout_exact= [KNL] Disable autobalancing of the rcu_node combining tree. This is used by rcutorture, and might -@@ -4787,6 +4791,13 @@ +@@ -4815,6 +4819,13 @@ only normal grace-period primitives. No effect on CONFIG_TINY_RCU kernels. @@ -1417,10 +1417,10 @@ index 581473165..f34845da3 100644 return va + (pa_offset >> (32 - PAGE_SHIFT)); #else diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c -index 91965fb04..d34166682 100644 +index 4c64d9015..f068759a3 100644 --- a/arch/arm/mm/fault.c +++ b/arch/arm/mm/fault.c -@@ -430,6 +430,9 @@ do_translation_fault(unsigned long addr, unsigned int fsr, +@@ -444,6 +444,9 @@ do_translation_fault(unsigned long addr, unsigned int fsr, if (addr < TASK_SIZE) return do_page_fault(addr, fsr, regs); @@ -1558,7 +1558,7 @@ index 187fab227..000000000 - return (void *)vaddr; -} diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 273a58b74..3a7e5d162 100644 +index c57dfa479..2fa733957 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -78,6 +78,7 @@ config ARM64 @@ -1577,7 +1577,7 @@ index 273a58b74..3a7e5d162 100644 select HAVE_REGS_AND_STACK_ACCESS_API select HAVE_FUNCTION_ARG_ACCESS_API select HAVE_FUTEX_CMPXCHG if FUTEX -@@ -209,6 +211,7 @@ config ARM64 +@@ -210,6 +212,7 @@ config ARM64 select PCI_DOMAINS_GENERIC if PCI select PCI_ECAM if (ACPI && PCI) select PCI_SYSCALL if PCI @@ -1722,10 +1722,10 @@ index c247e1113..a15c83111 100644 DEFINE(TSK_TI_TTBR0, offsetof(struct task_struct, thread_info.ttbr0)); #endif diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S -index ab8ed1b62..02c180547 100644 +index eb4ba8308..cf0c9fbed 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S -@@ -517,9 +517,18 @@ alternative_if ARM64_HAS_IRQ_PRIO_MASKING +@@ -521,9 +521,18 @@ alternative_if ARM64_HAS_IRQ_PRIO_MASKING orr x24, x24, x0 alternative_else_nop_endif #endif @@ -1806,7 +1806,7 @@ index 9a8f7c256..c0753dcdb 100644 static DEFINE_PER_CPU(call_single_data_t, cpu_backtrace_csd) = diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c -index 7437291ff..d84d24413 100644 +index a0c85bb01..d315329ba 100644 --- a/arch/arm64/kernel/signal.c +++ b/arch/arm64/kernel/signal.c @@ -861,7 +861,7 @@ asmlinkage void do_notify_resume(struct pt_regs *regs, @@ -1819,10 +1819,10 @@ index 7437291ff..d84d24413 100644 local_daif_restore(DAIF_PROCCTX_NOIRQ); diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c -index 5372a53a6..4f4c1cd0f 100644 +index 11a2c3b0e..2683be020 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c -@@ -966,7 +966,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) +@@ -957,7 +957,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) * involves poking the GIC, which must be done in a * non-preemptible context. */ @@ -1831,7 +1831,7 @@ index 5372a53a6..4f4c1cd0f 100644 kvm_pmu_flush_hwstate(vcpu); #ifdef CONFIG_CVM_HOST -@@ -994,7 +994,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) +@@ -985,7 +985,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) kvm_timer_sync_user(vcpu); kvm_vgic_sync_hwstate(vcpu); local_irq_enable(); @@ -1840,7 +1840,7 @@ index 5372a53a6..4f4c1cd0f 100644 continue; } -@@ -1082,7 +1082,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) +@@ -1073,7 +1073,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) #ifdef CONFIG_CVM_HOST } #endif @@ -2513,7 +2513,7 @@ index 5fec7f45d..57e2f08f0 100644 - kmap_pte = virt_to_kpte(kmap_vstart); -} diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c -index 07e84a774..bc80893e5 100644 +index 32e7b869a..f0fcf36dd 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c @@ -36,7 +36,6 @@ @@ -3191,7 +3191,7 @@ diff --git a/arch/powerpc/kernel/syscall_64.c b/arch/powerpc/kernel/syscall_64.c index 310bcd768..ae3212dcf 100644 --- a/arch/powerpc/kernel/syscall_64.c +++ b/arch/powerpc/kernel/syscall_64.c -@@ -193,7 +193,7 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3, +@@ -193,7 +193,7 @@ again: ti_flags = READ_ONCE(*ti_flagsp); while (unlikely(ti_flags & (_TIF_USER_WORK_MASK & ~_TIF_RESTORE_TM))) { local_irq_enable(); @@ -3200,7 +3200,7 @@ index 310bcd768..ae3212dcf 100644 schedule(); } else { /* -@@ -277,7 +277,7 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs, unsigned +@@ -277,7 +277,7 @@ again: 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 */ @@ -3325,7 +3325,7 @@ index ba9b54d35..588e081ca 100644 struct cpu_accounting_data *acct) { diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c -index d2f6b2e30..6a028453f 100644 +index 43d1a1e0f..b4973058e 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c @@ -173,7 +173,6 @@ extern void panic_flush_kmsg_start(void) @@ -4258,7 +4258,7 @@ index e4abac6c9..173999422 100644 static struct kmsg_dumper kmsg_dumper = { diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 5d1efac90..bbc313958 100644 +index 8ec8cdf83..4ef6aa311 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -16,6 +16,7 @@ config X86_32 @@ -4830,10 +4830,10 @@ index 6fd8410a3..f3bf2f515 100644 typedef sigset_t compat_sigset_t; #endif diff --git a/arch/x86/include/asm/stackprotector.h b/arch/x86/include/asm/stackprotector.h -index 7fb482f0f..3df0a95c9 100644 +index b6ffe58c7..e79e75ede 100644 --- a/arch/x86/include/asm/stackprotector.h +++ b/arch/x86/include/asm/stackprotector.h -@@ -65,7 +65,7 @@ +@@ -50,7 +50,7 @@ */ static __always_inline void boot_init_stack_canary(void) { @@ -4842,7 +4842,7 @@ index 7fb482f0f..3df0a95c9 100644 u64 tsc; #ifdef CONFIG_X86_64 -@@ -76,8 +76,14 @@ static __always_inline void boot_init_stack_canary(void) +@@ -61,8 +61,14 @@ static __always_inline void boot_init_stack_canary(void) * 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. @@ -5049,10 +5049,10 @@ index 440eed558..7cfc4e6b7 100644 } +#endif diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c -index 6c78e7987..452ac8e76 100644 +index d2d206ff6..06479a5e2 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c -@@ -8394,6 +8394,14 @@ int kvm_arch_init(void *opaque) +@@ -8573,6 +8573,14 @@ int kvm_arch_init(void *opaque) goto out; } @@ -5141,7 +5141,7 @@ diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index 7c055259d..da31c2635 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c -@@ -394,19 +394,6 @@ kernel_physical_mapping_init(unsigned long start, +@@ -394,19 +394,6 @@ repeat: return last_map_addr; } @@ -5402,7 +5402,7 @@ index 673196fe8..0735ca5e8 100644 kmap_waitqueues_init(); } diff --git a/block/blk-mq.c b/block/blk-mq.c -index a28957dfb..aa6ef04db 100644 +index 376f16616..083f13d8e 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -47,7 +47,7 @@ @@ -5414,7 +5414,7 @@ index a28957dfb..aa6ef04db 100644 static void blk_mq_poll_stats_start(struct request_queue *q); static void blk_mq_poll_stats_fn(struct blk_stat_callback *cb); -@@ -654,80 +654,29 @@ void blk_mq_end_request(struct request *rq, blk_status_t error) +@@ -655,80 +655,29 @@ void blk_mq_end_request(struct request *rq, blk_status_t error) } EXPORT_SYMBOL(blk_mq_end_request); @@ -5503,7 +5503,7 @@ index a28957dfb..aa6ef04db 100644 } static inline bool blk_mq_complete_need_ipi(struct request *rq) -@@ -737,6 +686,14 @@ static inline bool blk_mq_complete_need_ipi(struct request *rq) +@@ -738,6 +687,14 @@ static inline bool blk_mq_complete_need_ipi(struct request *rq) if (!IS_ENABLED(CONFIG_SMP) || !test_bit(QUEUE_FLAG_SAME_COMP, &rq->q->queue_flags)) return false; @@ -5518,7 +5518,7 @@ index a28957dfb..aa6ef04db 100644 /* same CPU or cache domain? Complete locally */ if (cpu == rq->mq_ctx->cpu || -@@ -748,6 +705,31 @@ static inline bool blk_mq_complete_need_ipi(struct request *rq) +@@ -749,6 +706,31 @@ static inline bool blk_mq_complete_need_ipi(struct request *rq) return cpu_online(rq->mq_ctx->cpu); } @@ -5550,7 +5550,7 @@ index a28957dfb..aa6ef04db 100644 bool blk_mq_complete_request_remote(struct request *rq) { WRITE_ONCE(rq->state, MQ_RQ_COMPLETE); -@@ -760,15 +742,15 @@ bool blk_mq_complete_request_remote(struct request *rq) +@@ -761,15 +743,15 @@ bool blk_mq_complete_request_remote(struct request *rq) return false; if (blk_mq_complete_need_ipi(rq)) { @@ -5573,7 +5573,7 @@ index a28957dfb..aa6ef04db 100644 } EXPORT_SYMBOL_GPL(blk_mq_complete_request_remote); -@@ -1701,14 +1683,14 @@ static void __blk_mq_delay_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async, +@@ -1708,14 +1690,14 @@ static void __blk_mq_delay_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async, return; if (!async && !(hctx->flags & BLK_MQ_F_BLOCKING)) { @@ -5591,7 +5591,7 @@ index a28957dfb..aa6ef04db 100644 } /* -@@ -4261,7 +4243,7 @@ static int __init blk_mq_init(void) +@@ -4266,7 +4248,7 @@ static int __init blk_mq_init(void) int i; for_each_possible_cpu(i) @@ -5670,7 +5670,7 @@ index 9fcc49be4..a31ffe16e 100644 tasklet_enable(&ENI_DEV(vcc->dev)->task); if (res == enq_ok) return 0; diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c -index 955f0c4d3..42c6b87bf 100644 +index 8b1ef1dc7..4f0f77971 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -59,6 +59,40 @@ static void zram_free_page(struct zram *zram, size_t index); @@ -5809,10 +5809,10 @@ index 3e1bb28b7..c26ed0ce6 100644 return 0; } diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c -index 9811c4095..17c9d8251 100644 +index 9b2471d12..7d94e1cbc 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c -@@ -2545,7 +2545,7 @@ static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet) +@@ -2597,7 +2597,7 @@ static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet) struct driver_data *driver_data = packet->driver_data; int ret = -ENOENT; @@ -5821,7 +5821,7 @@ index 9811c4095..17c9d8251 100644 if (packet->ack != 0) goto out; -@@ -3465,7 +3465,7 @@ static int ohci_flush_iso_completions(struct fw_iso_context *base) +@@ -3517,7 +3517,7 @@ static int ohci_flush_iso_completions(struct fw_iso_context *base) struct iso_context *ctx = container_of(base, struct iso_context, base); int ret = 0; @@ -5953,7 +5953,7 @@ index 0040b4765..3f4f85478 100644 GEM_BUG_ON(!list_empty(&b->signalers)); } diff --git a/drivers/gpu/drm/i915/gt/intel_engine_pm.c b/drivers/gpu/drm/i915/gt/intel_engine_pm.c -index f7b2e07e2..313d8a28e 100644 +index f9fdbd79c..fe7118415 100644 --- a/drivers/gpu/drm/i915/gt/intel_engine_pm.c +++ b/drivers/gpu/drm/i915/gt/intel_engine_pm.c @@ -60,9 +60,10 @@ static int __engine_unpark(struct intel_wakeref *wf) @@ -6524,7 +6524,7 @@ index e8d66182c..71dba228f 100644 return ret; } diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h -index 7845fa5de..043e058bb 100644 +index 601660bca..0829e7dde 100644 --- a/drivers/hv/hyperv_vmbus.h +++ b/drivers/hv/hyperv_vmbus.h @@ -19,6 +19,7 @@ @@ -6601,10 +6601,10 @@ index ce9429ca6..29ccbd6ac 100644 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 --git a/drivers/md/raid5.c b/drivers/md/raid5.c -index c4938b1a5..f30f1b03b 100644 +index 126b9ecfe..19c90abbd 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c -@@ -2218,8 +2218,9 @@ static void raid_run_ops(struct stripe_head *sh, unsigned long ops_request) +@@ -2217,8 +2217,9 @@ static void raid_run_ops(struct stripe_head *sh, unsigned long ops_request) struct raid5_percpu *percpu; unsigned long cpu; @@ -6615,7 +6615,7 @@ index c4938b1a5..f30f1b03b 100644 if (test_bit(STRIPE_OP_BIOFILL, &ops_request)) { ops_run_biofill(sh); overlap_clear++; -@@ -2278,7 +2279,8 @@ static void raid_run_ops(struct stripe_head *sh, unsigned long ops_request) +@@ -2277,7 +2278,8 @@ static void raid_run_ops(struct stripe_head *sh, unsigned long ops_request) if (test_and_clear_bit(R5_Overlap, &dev->flags)) wake_up(&sh->raid_conf->wait_for_overlap); } @@ -6625,7 +6625,7 @@ index c4938b1a5..f30f1b03b 100644 } static void free_stripe(struct kmem_cache *sc, struct stripe_head *sh) -@@ -7100,6 +7102,7 @@ static int raid456_cpu_up_prepare(unsigned int cpu, struct hlist_node *node) +@@ -7097,6 +7099,7 @@ static int raid456_cpu_up_prepare(unsigned int cpu, struct hlist_node *node) __func__, cpu); return -ENOMEM; } @@ -7136,7 +7136,7 @@ diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c index 30afcbbe1..4ae5b8152 100644 --- a/drivers/scsi/fcoe/fcoe.c +++ b/drivers/scsi/fcoe/fcoe.c -@@ -1452,11 +1452,11 @@ static int fcoe_rcv(struct sk_buff *skb, struct net_device *netdev, +@@ -1452,11 +1452,11 @@ err2: static int fcoe_alloc_paged_crc_eof(struct sk_buff *skb, int tlen) { struct fcoe_percpu_s *fps; @@ -7191,10 +7191,10 @@ index 30afcbbe1..4ae5b8152 100644 } diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c -index 53fa29c80..1b8410181 100644 +index 5ea426eff..0d6b9acc7 100644 --- a/drivers/scsi/fcoe/fcoe_ctlr.c +++ b/drivers/scsi/fcoe/fcoe_ctlr.c -@@ -830,7 +830,7 @@ static unsigned long fcoe_ctlr_age_fcfs(struct fcoe_ctlr *fip) +@@ -828,7 +828,7 @@ static unsigned long fcoe_ctlr_age_fcfs(struct fcoe_ctlr *fip) INIT_LIST_HEAD(&del_list); @@ -7203,7 +7203,7 @@ index 53fa29c80..1b8410181 100644 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) { deadline = fcf->time + fcf->fka_period + fcf->fka_period / 2; -@@ -866,7 +866,7 @@ static unsigned long fcoe_ctlr_age_fcfs(struct fcoe_ctlr *fip) +@@ -864,7 +864,7 @@ static unsigned long fcoe_ctlr_age_fcfs(struct fcoe_ctlr *fip) sel_time = fcf->time; } } @@ -7300,7 +7300,7 @@ index 61b11490a..32c534b87 100644 } diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c -index 43f2eed6d..687119fe2 100644 +index 355ee338d..5c1bb9e06 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -275,10 +275,8 @@ static void serial8250_backup_timeout(struct timer_list *t) @@ -7442,7 +7442,7 @@ index de48a5846..d246f2755 100644 static void mtk8250_set_flow_ctrl(struct uart_8250_port *up, int mode) diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c -index 8b49ac485..947737d0e 100644 +index 6098e87a3..8eee07321 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -730,7 +730,7 @@ static void serial8250_set_sleep(struct uart_8250_port *p, int sleep) @@ -7454,7 +7454,7 @@ index 8b49ac485..947737d0e 100644 if (p->capabilities & UART_CAP_EFR) { serial_out(p, UART_LCR, UART_LCR_CONF_MODE_B); serial_out(p, UART_EFR, efr); -@@ -1405,7 +1405,7 @@ static void serial8250_stop_rx(struct uart_port *port) +@@ -1399,7 +1399,7 @@ static void serial8250_stop_rx(struct uart_port *port) up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); up->port.read_status_mask &= ~UART_LSR_DR; @@ -7463,7 +7463,7 @@ index 8b49ac485..947737d0e 100644 serial8250_rpm_put(up); } -@@ -1435,7 +1435,7 @@ void serial8250_em485_stop_tx(struct uart_8250_port *p) +@@ -1429,7 +1429,7 @@ void serial8250_em485_stop_tx(struct uart_8250_port *p) serial8250_clear_and_reinit_fifos(p); p->ier |= UART_IER_RLSI | UART_IER_RDI; @@ -7472,7 +7472,7 @@ index 8b49ac485..947737d0e 100644 } } EXPORT_SYMBOL_GPL(serial8250_em485_stop_tx); -@@ -1677,7 +1677,7 @@ static void serial8250_disable_ms(struct uart_port *port) +@@ -1671,7 +1671,7 @@ static void serial8250_disable_ms(struct uart_port *port) mctrl_gpio_disable_ms(up->gpios); up->ier &= ~UART_IER_MSI; @@ -7481,7 +7481,7 @@ index 8b49ac485..947737d0e 100644 } static void serial8250_enable_ms(struct uart_port *port) -@@ -1693,7 +1693,7 @@ static void serial8250_enable_ms(struct uart_port *port) +@@ -1687,7 +1687,7 @@ static void serial8250_enable_ms(struct uart_port *port) up->ier |= UART_IER_MSI; serial8250_rpm_get(up); @@ -7490,7 +7490,7 @@ index 8b49ac485..947737d0e 100644 serial8250_rpm_put(up); } -@@ -2129,14 +2129,7 @@ static void serial8250_put_poll_char(struct uart_port *port, +@@ -2123,14 +2123,7 @@ static void serial8250_put_poll_char(struct uart_port *port, struct uart_8250_port *up = up_to_u8250p(port); serial8250_rpm_get(up); @@ -7506,7 +7506,7 @@ index 8b49ac485..947737d0e 100644 wait_for_xmitr(up, BOTH_EMPTY); /* -@@ -2149,7 +2142,7 @@ static void serial8250_put_poll_char(struct uart_port *port, +@@ -2143,7 +2136,7 @@ static void serial8250_put_poll_char(struct uart_port *port, * and restore the IER */ wait_for_xmitr(up, BOTH_EMPTY); @@ -7515,7 +7515,7 @@ index 8b49ac485..947737d0e 100644 serial8250_rpm_put(up); } -@@ -2454,7 +2447,7 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2448,7 +2441,7 @@ void serial8250_do_shutdown(struct uart_port *port) */ spin_lock_irqsave(&port->lock, flags); up->ier = 0; @@ -7524,7 +7524,7 @@ index 8b49ac485..947737d0e 100644 spin_unlock_irqrestore(&port->lock, flags); synchronize_irq(port->irq); -@@ -2806,7 +2799,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2800,7 +2793,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, if (up->capabilities & UART_CAP_RTOIE) up->ier |= UART_IER_RTOIE; @@ -7533,7 +7533,7 @@ index 8b49ac485..947737d0e 100644 if (up->capabilities & UART_CAP_EFR) { unsigned char efr = 0; -@@ -3271,7 +3264,7 @@ EXPORT_SYMBOL_GPL(serial8250_set_defaults); +@@ -3265,7 +3258,7 @@ EXPORT_SYMBOL_GPL(serial8250_set_defaults); #ifdef CONFIG_SERIAL_8250_CONSOLE @@ -7542,7 +7542,7 @@ index 8b49ac485..947737d0e 100644 { struct uart_8250_port *up = up_to_u8250p(port); -@@ -3279,6 +3272,18 @@ static void serial8250_console_putchar(struct uart_port *port, int ch) +@@ -3273,6 +3266,18 @@ static void serial8250_console_putchar(struct uart_port *port, int ch) serial_port_out(port, UART_TX, ch); } @@ -7561,7 +7561,7 @@ index 8b49ac485..947737d0e 100644 /* * Restore serial console when h/w power-off detected */ -@@ -3305,6 +3310,32 @@ static void serial8250_console_restore(struct uart_8250_port *up) +@@ -3299,6 +3304,32 @@ static void serial8250_console_restore(struct uart_8250_port *up) serial8250_out_MCR(up, up->mcr | UART_MCR_DTR | UART_MCR_RTS); } @@ -7594,7 +7594,7 @@ index 8b49ac485..947737d0e 100644 /* * Print a string to the serial port trying not to disturb * any possible real use of the port... -@@ -3321,24 +3352,12 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3315,24 +3346,12 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, struct uart_port *port = &up->port; unsigned long flags; unsigned int ier; @@ -7621,7 +7621,7 @@ index 8b49ac485..947737d0e 100644 /* check scratch reg to see if port powered off during system sleep */ if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { -@@ -3352,7 +3371,9 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3346,7 +3365,9 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, mdelay(port->rs485.delay_rts_before_send); } @@ -7631,7 +7631,7 @@ index 8b49ac485..947737d0e 100644 /* * Finally, wait for transmitter to become empty -@@ -3365,8 +3386,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3359,8 +3380,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, if (em485->tx_stopped) up->rs485_stop_tx(up); } @@ -7641,7 +7641,7 @@ index 8b49ac485..947737d0e 100644 /* * The receive handling will happen properly because the -@@ -3378,8 +3398,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3372,8 +3392,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, if (up->msr_saved_flags) serial8250_modem_status(up); @@ -7651,7 +7651,7 @@ index 8b49ac485..947737d0e 100644 } static unsigned int probe_baud(struct uart_port *port) -@@ -3399,6 +3418,7 @@ static unsigned int probe_baud(struct uart_port *port) +@@ -3393,6 +3412,7 @@ static unsigned int probe_baud(struct uart_port *port) int serial8250_console_setup(struct uart_port *port, char *options, bool probe) { @@ -7659,7 +7659,7 @@ index 8b49ac485..947737d0e 100644 int baud = 9600; int bits = 8; int parity = 'n'; -@@ -3408,6 +3428,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) +@@ -3402,6 +3422,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) if (!port->iobase && !port->membase) return -ENODEV; @@ -7773,7 +7773,7 @@ index dae9a57d7..9a6a0ec4d 100644 _enter("%p{%pd},%llx", dentry, dentry, vnode->fid.vnode); diff --git a/fs/aio.c b/fs/aio.c -index 00641a1ad..3bbe5e65d 100644 +index 78aaeaf35..d3229b5ca 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -43,7 +43,6 @@ @@ -7794,7 +7794,7 @@ index 00641a1ad..3bbe5e65d 100644 INIT_WORK(&req->work, aio_poll_put_work); schedule_work(&req->work); diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h -index 5f810526a..3bd1dfbd6 100644 +index abc1e72a4..82b3b7523 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -17,7 +17,6 @@ @@ -7819,10 +7819,10 @@ index 799be3a5d..d5165a7da 100644 cifs_dbg(FYI, "%s: for %s\n", __func__, name->name); diff --git a/fs/dcache.c b/fs/dcache.c -index cc5ba31d9..9e9b2cf26 100644 +index 5dccce5bc..12a576121 100644 --- a/fs/dcache.c +++ b/fs/dcache.c -@@ -2596,9 +2596,10 @@ EXPORT_SYMBOL(d_rehash); +@@ -2597,9 +2597,10 @@ EXPORT_SYMBOL(d_rehash); static inline unsigned start_dir_add(struct inode *dir) { @@ -7835,7 +7835,7 @@ index cc5ba31d9..9e9b2cf26 100644 return n; cpu_relax(); } -@@ -2606,26 +2607,30 @@ static inline unsigned start_dir_add(struct inode *dir) +@@ -2607,26 +2608,30 @@ static inline unsigned start_dir_add(struct inode *dir) static inline void end_dir_add(struct inode *dir, unsigned n) { @@ -7878,7 +7878,7 @@ index cc5ba31d9..9e9b2cf26 100644 { unsigned int hash = name->hash; struct hlist_bl_head *b = in_lookup_hash(parent, hash); -@@ -2639,7 +2644,7 @@ struct dentry *d_alloc_parallel(struct dentry *parent, +@@ -2640,7 +2645,7 @@ struct dentry *d_alloc_parallel(struct dentry *parent, retry: rcu_read_lock(); @@ -7887,7 +7887,7 @@ index cc5ba31d9..9e9b2cf26 100644 r_seq = read_seqbegin(&rename_lock); dentry = __d_lookup_rcu(parent, name, &d_seq); if (unlikely(dentry)) { -@@ -2667,7 +2672,7 @@ struct dentry *d_alloc_parallel(struct dentry *parent, +@@ -2668,7 +2673,7 @@ retry: } hlist_bl_lock(b); @@ -7896,7 +7896,7 @@ index cc5ba31d9..9e9b2cf26 100644 hlist_bl_unlock(b); rcu_read_unlock(); goto retry; -@@ -2740,7 +2745,7 @@ void __d_lookup_done(struct dentry *dentry) +@@ -2741,7 +2746,7 @@ void __d_lookup_done(struct dentry *dentry) hlist_bl_lock(b); dentry->d_flags &= ~DCACHE_PAR_LOOKUP; __hlist_bl_del(&dentry->d_u.d_in_lookup_hash); @@ -8046,7 +8046,7 @@ index 14e99ffa5..eb899feaf 100644 if (!o->nodeid) { /* diff --git a/fs/inode.c b/fs/inode.c -index bec790bde..8528c6e32 100644 +index 6bec245f9..65582767a 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -158,7 +158,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode) @@ -8081,7 +8081,7 @@ index 3588e12d6..7a171441c 100644 if (unlikely(IS_DEADDIR(dir_inode))) return ERR_PTR(-ENOENT); diff --git a/fs/namespace.c b/fs/namespace.c -index 6e76f2a72..dbd1119a5 100644 +index 61c88343c..4750c6fc5 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -14,6 +14,7 @@ @@ -8151,7 +8151,7 @@ index b27ebdcce..f86c98a7e 100644 status = -EBUSY; spin_lock(&dentry->d_lock); diff --git a/fs/proc/array.c b/fs/proc/array.c -index 989f76020..d638d2c26 100644 +index d5fed9281..74629a413 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -384,9 +384,9 @@ static inline void task_context_switch_counts(struct seq_file *m, @@ -8189,10 +8189,10 @@ index 4e0054a37..2cb62db96 100644 if (IS_ERR(child)) goto end_instantiate; diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c -index 1b9bc52ba..54f690765 100644 +index d018184a1..10052f549 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c -@@ -684,7 +684,7 @@ static bool proc_sys_fill_cache(struct file *file, +@@ -682,7 +682,7 @@ static bool proc_sys_fill_cache(struct file *file, child = d_lookup(dir, &qname); if (!child) { @@ -8306,7 +8306,7 @@ index b4d43a4af..ac255e889 100644 #define __preempt_schedule() preempt_schedule() extern asmlinkage void preempt_schedule_notrace(void); diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h -index 50b4fd0a0..f38b1bd30 100644 +index f27a0916a..5ee68b9ce 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -166,7 +166,7 @@ struct request { @@ -8400,7 +8400,7 @@ index b540e5a60..dacf87c92 100644 CPUHP_AP_X86_VDSO_VMA_ONLINE, CPUHP_AP_IRQ_AFFINITY_ONLINE, diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h -index 2e50162d9..d39f4c9a7 100644 +index f74e45ae5..56e598d17 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h @@ -210,6 +210,11 @@ static inline int cpumask_any_and_distribute(const struct cpumask *src1p, @@ -8529,10 +8529,10 @@ index c1bd4883e..842d223df 100644 static inline void eventfd_ctx_do_read(struct eventfd_ctx *ctx, __u64 *cnt) diff --git a/include/linux/fs.h b/include/linux/fs.h -index 382a0d4dd..a203b3347 100644 +index 7e8684e3f..07783fbe1 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h -@@ -726,7 +726,7 @@ struct inode { +@@ -730,7 +730,7 @@ struct inode { struct block_device *i_bdev; struct cdev *i_cdev; char *i_link; @@ -8819,7 +8819,7 @@ index 000000000..f9bc6acd3 + +#endif diff --git a/include/linux/highmem.h b/include/linux/highmem.h -index ebfee2b67..5ebb6facc 100644 +index 336781ec8..e60bf7e2a 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -11,217 +11,137 @@ @@ -9369,7 +9369,7 @@ index 8710502b3..db4c4d3f8 100644 struct cpumask *percpu_enabled; const struct cpumask *percpu_affinity; diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h -index fef2d43a7..741aa2008 100644 +index eea9adf9d..5fee7ff9c 100644 --- a/include/linux/irqflags.h +++ b/include/linux/irqflags.h @@ -71,14 +71,6 @@ do { \ @@ -9755,10 +9755,10 @@ index d1c5946ad..f8099b6c1 100644 atomic_long_t hugetlb_usage; #endif diff --git a/include/linux/mutex.h b/include/linux/mutex.h -index 4d671fba3..90923d300 100644 +index a8f1516ee..6faec5aa0 100644 --- a/include/linux/mutex.h +++ b/include/linux/mutex.h -@@ -22,6 +22,20 @@ +@@ -24,6 +24,20 @@ struct device; struct ww_acquire_ctx; @@ -9779,7 +9779,7 @@ index 4d671fba3..90923d300 100644 /* * Simple, straightforward mutexes with strict semantics: * -@@ -68,14 +82,6 @@ struct mutex { +@@ -70,14 +84,6 @@ struct mutex { struct ww_class; struct ww_acquire_ctx; @@ -9794,7 +9794,7 @@ index 4d671fba3..90923d300 100644 /* * This is the control structure for tasks blocked on mutex, * which resides on the blocked task's kernel stack: -@@ -119,16 +125,6 @@ do { \ +@@ -121,16 +127,6 @@ do { \ __mutex_init((mutex), #mutex, &__key); \ } while (0) @@ -9811,7 +9811,7 @@ index 4d671fba3..90923d300 100644 #define __MUTEX_INITIALIZER(lockname) \ { .owner = ATOMIC_LONG_INIT(0) \ , .wait_lock = __SPIN_LOCK_UNLOCKED(lockname.wait_lock) \ -@@ -224,4 +220,6 @@ enum mutex_trylock_recursive_enum { +@@ -251,4 +247,6 @@ enum mutex_trylock_recursive_enum { extern /* __deprecated */ __must_check enum mutex_trylock_recursive_enum mutex_trylock_recursive(struct mutex *lock); @@ -10454,7 +10454,7 @@ index 000000000..77a89dd2c + +#endif diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h -index ef8d56b18..cbeea5c61 100644 +index 8716a1706..23f5f07f1 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -54,6 +54,11 @@ void __rcu_read_unlock(void); @@ -10892,7 +10892,7 @@ index 4c715be48..9323af8a9 100644 * lock for reading */ diff --git a/include/linux/sched.h b/include/linux/sched.h -index b4ab407ca..2988e27ba 100644 +index e3170b7f8..6c5c484fe 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -36,6 +36,7 @@ @@ -10936,7 +10936,7 @@ index b4ab407ca..2988e27ba 100644 /* * 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 -@@ -679,6 +682,13 @@ struct wake_q_node { +@@ -683,6 +686,13 @@ struct wake_q_node { struct wake_q_node *next; }; @@ -10950,7 +10950,7 @@ index b4ab407ca..2988e27ba 100644 /** * struct task_struct_resvd - KABI extension struct */ -@@ -704,6 +714,8 @@ struct task_struct { +@@ -708,6 +718,8 @@ struct task_struct { #endif /* -1 unrunnable, 0 runnable, >0 stopped: */ volatile long state; @@ -10959,7 +10959,7 @@ index b4ab407ca..2988e27ba 100644 /* * This begins the randomizable portion of task_struct. Only -@@ -776,6 +788,11 @@ struct task_struct { +@@ -780,6 +792,11 @@ struct task_struct { int nr_cpus_allowed; const cpumask_t *cpus_ptr; cpumask_t cpus_mask; @@ -10971,7 +10971,7 @@ index b4ab407ca..2988e27ba 100644 #ifdef CONFIG_PREEMPT_RCU int rcu_read_lock_nesting; -@@ -884,6 +901,10 @@ struct task_struct { +@@ -888,6 +905,10 @@ struct task_struct { #ifdef CONFIG_IOMMU_SVA KABI_FILL_HOLE(unsigned pasid_activated:1) #endif @@ -10982,7 +10982,7 @@ index b4ab407ca..2988e27ba 100644 unsigned long atomic_flags; /* Flags requiring atomic access. */ -@@ -1025,11 +1046,16 @@ struct task_struct { +@@ -1029,11 +1050,16 @@ struct task_struct { /* Signal handlers: */ struct signal_struct *signal; struct sighand_struct __rcu *sighand; @@ -10999,7 +10999,7 @@ index b4ab407ca..2988e27ba 100644 unsigned long sas_ss_sp; size_t sas_ss_size; unsigned int sas_ss_flags; -@@ -1056,6 +1082,7 @@ struct task_struct { +@@ -1060,6 +1086,7 @@ struct task_struct { raw_spinlock_t pi_lock; struct wake_q_node wake_q; @@ -11007,7 +11007,7 @@ index b4ab407ca..2988e27ba 100644 #ifdef CONFIG_RT_MUTEXES /* PI waiters blocked on a rt_mutex held by this task: */ -@@ -1083,6 +1110,9 @@ struct task_struct { +@@ -1087,6 +1114,9 @@ struct task_struct { int softirq_context; int irq_config; #endif @@ -11017,7 +11017,7 @@ index b4ab407ca..2988e27ba 100644 #ifdef CONFIG_LOCKDEP # define MAX_LOCK_DEPTH 48UL -@@ -1368,6 +1398,7 @@ struct task_struct { +@@ -1372,6 +1402,7 @@ struct task_struct { unsigned int sequential_io; unsigned int sequential_io_avg; #endif @@ -11025,7 +11025,7 @@ index b4ab407ca..2988e27ba 100644 #ifdef CONFIG_DEBUG_ATOMIC_SLEEP unsigned long task_state_change; #endif -@@ -1870,6 +1901,7 @@ extern struct task_struct *find_get_task_by_vpid(pid_t nr); +@@ -1882,6 +1913,7 @@ extern struct task_struct *find_get_task_by_vpid(pid_t nr); extern int wake_up_state(struct task_struct *tsk, unsigned int state); extern int wake_up_process(struct task_struct *tsk); @@ -11033,7 +11033,7 @@ index b4ab407ca..2988e27ba 100644 extern void wake_up_new_task(struct task_struct *tsk); #ifdef CONFIG_SMP -@@ -1971,6 +2003,89 @@ static inline int test_tsk_need_resched(struct task_struct *tsk) +@@ -1983,6 +2015,89 @@ static inline int test_tsk_need_resched(struct task_struct *tsk) return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); } @@ -11123,7 +11123,7 @@ index b4ab407ca..2988e27ba 100644 /* * cond_resched() and cond_resched_lock(): latency reduction via * explicit rescheduling in places that are safe. The return -@@ -2061,11 +2176,7 @@ static inline int spin_needbreak(spinlock_t *lock) +@@ -2073,11 +2188,7 @@ static inline int spin_needbreak(spinlock_t *lock) */ static inline int rwlock_needbreak(rwlock_t *lock) { @@ -11276,7 +11276,7 @@ index 3038a0610..fff1656c6 100644 /* Test if 'sig' is valid signal. Use this instead of testing _NSIG directly */ static inline int valid_signal(unsigned long sig) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h -index ce3dfed6b..e1efd8598 100644 +index 4a7a2ff7a..116b3f6f8 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -299,6 +299,7 @@ struct sk_buff_head { @@ -11287,7 +11287,7 @@ index ce3dfed6b..e1efd8598 100644 }; struct sk_buff; -@@ -1931,6 +1932,12 @@ static inline void skb_queue_head_init(struct sk_buff_head *list) +@@ -1938,6 +1939,12 @@ static inline void skb_queue_head_init(struct sk_buff_head *list) __skb_queue_head_init(list); } @@ -11835,12 +11835,12 @@ index 2959b9e52..f9f7c954b 100644 /* diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h -index 19f76d87f..7c841bf0a 100644 +index af3ca6429..a8a76b4be 100644 --- a/include/linux/thread_info.h +++ b/include/linux/thread_info.h -@@ -36,7 +36,17 @@ static inline long set_restart_fn(struct restart_block *restart, - - #define THREADINFO_GFP (GFP_KERNEL_ACCOUNT | __GFP_ZERO) +@@ -51,7 +51,17 @@ static __always_inline unsigned long read_ti_thread_flags(struct thread_info *ti + #define read_task_thread_flags(t) \ + read_ti_thread_flags(task_thread_info(t)) -#define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED) +#ifdef CONFIG_PREEMPT_LAZY @@ -11858,7 +11858,7 @@ index 19f76d87f..7c841bf0a 100644 #ifndef CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES static inline int arch_within_stack_frames(const void * const stack, diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h -index aad99130c..def86e994 100644 +index 9be53cc71..d52cfe995 100644 --- a/include/linux/trace_events.h +++ b/include/linux/trace_events.h @@ -67,6 +67,8 @@ struct trace_entry { @@ -11945,7 +11945,7 @@ index aad99130c..def86e994 100644 struct trace_event_file; diff --git a/include/linux/u64_stats_sync.h b/include/linux/u64_stats_sync.h -index e81856c0b..66eb968a0 100644 +index 7c6f81b89..f23192d55 100644 --- a/include/linux/u64_stats_sync.h +++ b/include/linux/u64_stats_sync.h @@ -66,7 +66,7 @@ @@ -11963,10 +11963,10 @@ index e81856c0b..66eb968a0 100644 -#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_init(struct u64_stats_sync *syncp) + #define u64_stats_init(syncp) \ + do { \ + struct u64_stats_sync *__s = (syncp); \ +@@ -129,15 +129,19 @@ static inline void u64_stats_init(struct u64_stats_sync *syncp) static inline void u64_stats_update_begin(struct u64_stats_sync *syncp) { @@ -11988,7 +11988,7 @@ index e81856c0b..66eb968a0 100644 #endif } -@@ -142,8 +146,11 @@ u64_stats_update_begin_irqsave(struct u64_stats_sync *syncp) +@@ -146,8 +150,11 @@ u64_stats_update_begin_irqsave(struct u64_stats_sync *syncp) { unsigned long flags = 0; @@ -12002,7 +12002,7 @@ index e81856c0b..66eb968a0 100644 write_seqcount_begin(&syncp->seq); #endif return flags; -@@ -153,15 +160,18 @@ static inline void +@@ -157,15 +164,18 @@ static inline void u64_stats_update_end_irqrestore(struct u64_stats_sync *syncp, unsigned long flags) { @@ -12024,7 +12024,7 @@ index e81856c0b..66eb968a0 100644 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 * +@@ -174,7 +184,7 @@ static inline unsigned int __u64_stats_fetch_begin(const struct u64_stats_sync * static inline unsigned int u64_stats_fetch_begin(const struct u64_stats_sync *syncp) { @@ -12033,7 +12033,7 @@ index e81856c0b..66eb968a0 100644 preempt_disable(); #endif return __u64_stats_fetch_begin(syncp); -@@ -179,7 +189,7 @@ static inline unsigned int u64_stats_fetch_begin(const struct u64_stats_sync *sy +@@ -183,7 +193,7 @@ static inline unsigned int u64_stats_fetch_begin(const struct u64_stats_sync *sy static inline bool __u64_stats_fetch_retry(const struct u64_stats_sync *syncp, unsigned int start) { @@ -12042,7 +12042,7 @@ index e81856c0b..66eb968a0 100644 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, +@@ -193,7 +203,7 @@ static inline bool __u64_stats_fetch_retry(const struct u64_stats_sync *syncp, static inline bool u64_stats_fetch_retry(const struct u64_stats_sync *syncp, unsigned int start) { @@ -12051,7 +12051,7 @@ index e81856c0b..66eb968a0 100644 preempt_enable(); #endif return __u64_stats_fetch_retry(syncp, start); -@@ -203,7 +213,9 @@ static inline bool u64_stats_fetch_retry(const struct u64_stats_sync *syncp, +@@ -207,7 +217,9 @@ static inline bool u64_stats_fetch_retry(const struct u64_stats_sync *syncp, */ static inline unsigned int u64_stats_fetch_begin_irq(const struct u64_stats_sync *syncp) { @@ -12062,7 +12062,7 @@ index e81856c0b..66eb968a0 100644 local_irq_disable(); #endif return __u64_stats_fetch_begin(syncp); -@@ -212,7 +224,9 @@ static inline unsigned int u64_stats_fetch_begin_irq(const struct u64_stats_sync +@@ -216,7 +228,9 @@ static inline unsigned int u64_stats_fetch_begin_irq(const struct u64_stats_sync static inline bool u64_stats_fetch_retry_irq(const struct u64_stats_sync *syncp, unsigned int start) { @@ -12309,7 +12309,7 @@ index efacdfee3..02871f48c 100644 } static inline bool qdisc_is_percpu_stats(const struct Qdisc *q) -@@ -187,17 +192,35 @@ static inline bool qdisc_run_begin(struct Qdisc *qdisc) +@@ -187,17 +192,35 @@ nolock_empty: } else if (qdisc_is_running(qdisc)) { return false; } @@ -12378,7 +12378,7 @@ index eb5ec1fb6..122d96db9 100644 /* This part must be outside protection */ diff --git a/init/Kconfig b/init/Kconfig -index 69bd400da..c3f511a69 100644 +index be284bca4..cbe7ad86b 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -899,7 +899,7 @@ config NUMA_BALANCING @@ -12390,7 +12390,7 @@ index 69bd400da..c3f511a69 100644 help This option adds support for automatic NUMA aware memory/task placement. The mechanism is quite primitive and is based on migrating memory when -@@ -1056,6 +1056,7 @@ config CFS_BANDWIDTH +@@ -1066,6 +1066,7 @@ config CFS_BANDWIDTH config RT_GROUP_SCHED bool "Group scheduling for SCHED_RR/FIFO" depends on CGROUP_SCHED @@ -12398,7 +12398,7 @@ index 69bd400da..c3f511a69 100644 default n help This feature lets you explicitly allocate real CPU bandwidth -@@ -2051,6 +2052,7 @@ choice +@@ -2108,6 +2109,7 @@ choice config SLAB bool "SLAB" @@ -12406,7 +12406,7 @@ index 69bd400da..c3f511a69 100644 select HAVE_HARDENED_USERCOPY_ALLOCATOR help The regular slab allocator that is established and known to work -@@ -2071,6 +2073,7 @@ config SLUB +@@ -2128,6 +2130,7 @@ config SLUB config SLOB depends on EXPERT bool "SLOB (Simple Allocator)" @@ -12414,7 +12414,7 @@ index 69bd400da..c3f511a69 100644 help SLOB replaces the stock allocator with a drastically simpler allocator. SLOB is generally more space efficient but -@@ -2137,7 +2140,7 @@ config SHUFFLE_PAGE_ALLOCATOR +@@ -2194,7 +2197,7 @@ config SHUFFLE_PAGE_ALLOCATOR config SLUB_CPU_PARTIAL default y @@ -12461,10 +12461,10 @@ index e62a62303..b95f8784c 100644 This option turns the kernel into a real-time kernel by replacing various locking primitives (spinlocks, rwlocks, etc.) with diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c -index 038efca71..dc4b7da03 100644 +index 7ecff06d2..a9fe99b9f 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c -@@ -380,7 +380,7 @@ void cpuset_unlock(void) +@@ -381,7 +381,7 @@ void cpuset_unlock(void) mutex_unlock(&cpuset_mutex); } @@ -12473,7 +12473,7 @@ index 038efca71..dc4b7da03 100644 static struct workqueue_struct *cpuset_migrate_mm_wq; -@@ -759,9 +759,9 @@ static int update_prefer_cpumask(struct cpuset *cs, struct cpuset *trialcs, +@@ -760,9 +760,9 @@ static int update_prefer_cpumask(struct cpuset *cs, struct cpuset *trialcs, if (!cpumask_empty(trialcs->prefer_cpus)) dynamic_affinity_enable(); @@ -12485,7 +12485,7 @@ index 038efca71..dc4b7da03 100644 return 0; } -@@ -1431,7 +1431,7 @@ static int update_parent_subparts_cpumask(struct cpuset *cpuset, int cmd, +@@ -1432,7 +1432,7 @@ static int update_parent_subparts_cpumask(struct cpuset *cpuset, int cmd, * Newly added CPUs will be removed from effective_cpus and * newly deleted ones will be added back to effective_cpus. */ @@ -12494,7 +12494,7 @@ index 038efca71..dc4b7da03 100644 if (adding) { cpumask_or(parent->subparts_cpus, parent->subparts_cpus, tmp->addmask); -@@ -1453,7 +1453,7 @@ static int update_parent_subparts_cpumask(struct cpuset *cpuset, int cmd, +@@ -1454,7 +1454,7 @@ static int update_parent_subparts_cpumask(struct cpuset *cpuset, int cmd, if (cpuset->partition_root_state != new_prs) cpuset->partition_root_state = new_prs; @@ -12503,7 +12503,7 @@ index 038efca71..dc4b7da03 100644 return cmd == partcmd_update; } -@@ -1556,7 +1556,7 @@ static void update_cpumasks_hier(struct cpuset *cs, struct tmpmasks *tmp) +@@ -1557,7 +1557,7 @@ static void update_cpumasks_hier(struct cpuset *cs, struct tmpmasks *tmp) continue; rcu_read_unlock(); @@ -12512,7 +12512,7 @@ index 038efca71..dc4b7da03 100644 cpumask_copy(cp->effective_cpus, tmp->new_cpus); if (cp->nr_subparts_cpus && (new_prs != PRS_ENABLED)) { -@@ -1590,7 +1590,7 @@ static void update_cpumasks_hier(struct cpuset *cs, struct tmpmasks *tmp) +@@ -1591,7 +1591,7 @@ static void update_cpumasks_hier(struct cpuset *cs, struct tmpmasks *tmp) if (new_prs != cp->partition_root_state) cp->partition_root_state = new_prs; @@ -12521,7 +12521,7 @@ index 038efca71..dc4b7da03 100644 WARN_ON(!is_in_v2_mode() && !cpumask_equal(cp->cpus_allowed, cp->effective_cpus)); -@@ -1718,7 +1718,7 @@ static int update_cpumask(struct cpuset *cs, struct cpuset *trialcs, +@@ -1719,7 +1719,7 @@ static int update_cpumask(struct cpuset *cs, struct cpuset *trialcs, return -EINVAL; } @@ -12530,7 +12530,7 @@ index 038efca71..dc4b7da03 100644 cpumask_copy(cs->cpus_allowed, trialcs->cpus_allowed); /* -@@ -1728,7 +1728,7 @@ static int update_cpumask(struct cpuset *cs, struct cpuset *trialcs, +@@ -1729,7 +1729,7 @@ static int update_cpumask(struct cpuset *cs, struct cpuset *trialcs, cpumask_and(cs->subparts_cpus, cs->subparts_cpus, cs->cpus_allowed); cs->nr_subparts_cpus = cpumask_weight(cs->subparts_cpus); } @@ -12539,7 +12539,7 @@ index 038efca71..dc4b7da03 100644 update_cpumasks_hier(cs, &tmp); -@@ -1922,9 +1922,9 @@ static void update_nodemasks_hier(struct cpuset *cs, nodemask_t *new_mems) +@@ -1923,9 +1923,9 @@ static void update_nodemasks_hier(struct cpuset *cs, nodemask_t *new_mems) continue; rcu_read_unlock(); @@ -12551,7 +12551,7 @@ index 038efca71..dc4b7da03 100644 WARN_ON(!is_in_v2_mode() && !nodes_equal(cp->mems_allowed, cp->effective_mems)); -@@ -1992,9 +1992,9 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs, +@@ -1993,9 +1993,9 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs, if (retval < 0) goto done; @@ -12563,7 +12563,7 @@ index 038efca71..dc4b7da03 100644 /* use trialcs->mems_allowed as a temp variable */ update_nodemasks_hier(cs, &trialcs->mems_allowed); -@@ -2085,9 +2085,9 @@ static int update_flag(cpuset_flagbits_t bit, struct cpuset *cs, +@@ -2086,9 +2086,9 @@ static int update_flag(cpuset_flagbits_t bit, struct cpuset *cs, spread_flag_changed = ((is_spread_slab(cs) != is_spread_slab(trialcs)) || (is_spread_page(cs) != is_spread_page(trialcs))); @@ -12575,7 +12575,7 @@ index 038efca71..dc4b7da03 100644 if (!cpumask_empty(trialcs->cpus_allowed) && balance_flag_changed) rebuild_sched_domains_locked(); -@@ -2173,9 +2173,9 @@ static int update_prstate(struct cpuset *cs, int new_prs) +@@ -2174,9 +2174,9 @@ static int update_prstate(struct cpuset *cs, int new_prs) rebuild_sched_domains_locked(); out: if (!err) { @@ -12587,7 +12587,7 @@ index 038efca71..dc4b7da03 100644 } free_cpumasks(NULL, &tmpmask); -@@ -2657,7 +2657,7 @@ static int cpuset_common_seq_show(struct seq_file *sf, void *v) +@@ -2658,7 +2658,7 @@ static int cpuset_common_seq_show(struct seq_file *sf, void *v) cpuset_filetype_t type = seq_cft(sf)->private; int ret = 0; @@ -12596,7 +12596,7 @@ index 038efca71..dc4b7da03 100644 switch (type) { case FILE_CPULIST: -@@ -2684,7 +2684,7 @@ static int cpuset_common_seq_show(struct seq_file *sf, void *v) +@@ -2685,7 +2685,7 @@ static int cpuset_common_seq_show(struct seq_file *sf, void *v) ret = -EINVAL; } @@ -12605,7 +12605,7 @@ index 038efca71..dc4b7da03 100644 return ret; } -@@ -3005,14 +3005,14 @@ static int cpuset_css_online(struct cgroup_subsys_state *css) +@@ -3006,14 +3006,14 @@ static int cpuset_css_online(struct cgroup_subsys_state *css) cpuset_inc(); @@ -12622,7 +12622,7 @@ index 038efca71..dc4b7da03 100644 if (!test_bit(CGRP_CPUSET_CLONE_CHILDREN, &css->cgroup->flags)) goto out_unlock; -@@ -3039,7 +3039,7 @@ static int cpuset_css_online(struct cgroup_subsys_state *css) +@@ -3040,7 +3040,7 @@ static int cpuset_css_online(struct cgroup_subsys_state *css) } rcu_read_unlock(); @@ -12631,7 +12631,7 @@ index 038efca71..dc4b7da03 100644 cs->mems_allowed = parent->mems_allowed; cs->effective_mems = parent->mems_allowed; cpumask_copy(cs->cpus_allowed, parent->cpus_allowed); -@@ -3047,7 +3047,7 @@ static int cpuset_css_online(struct cgroup_subsys_state *css) +@@ -3048,7 +3048,7 @@ static int cpuset_css_online(struct cgroup_subsys_state *css) #ifdef CONFIG_QOS_SCHED_DYNAMIC_AFFINITY cpumask_copy(cs->prefer_cpus, parent->prefer_cpus); #endif @@ -12640,7 +12640,7 @@ index 038efca71..dc4b7da03 100644 out_unlock: mutex_unlock(&cpuset_mutex); put_online_cpus(); -@@ -3103,7 +3103,7 @@ static void cpuset_css_free(struct cgroup_subsys_state *css) +@@ -3104,7 +3104,7 @@ static void cpuset_css_free(struct cgroup_subsys_state *css) static void cpuset_bind(struct cgroup_subsys_state *root_css) { mutex_lock(&cpuset_mutex); @@ -12649,7 +12649,7 @@ index 038efca71..dc4b7da03 100644 if (is_in_v2_mode()) { cpumask_copy(top_cpuset.cpus_allowed, cpu_possible_mask); -@@ -3114,7 +3114,7 @@ static void cpuset_bind(struct cgroup_subsys_state *root_css) +@@ -3115,7 +3115,7 @@ static void cpuset_bind(struct cgroup_subsys_state *root_css) top_cpuset.mems_allowed = top_cpuset.effective_mems; } @@ -12658,7 +12658,7 @@ index 038efca71..dc4b7da03 100644 mutex_unlock(&cpuset_mutex); } -@@ -3224,12 +3224,12 @@ hotplug_update_tasks_legacy(struct cpuset *cs, +@@ -3225,12 +3225,12 @@ hotplug_update_tasks_legacy(struct cpuset *cs, #endif bool is_empty; @@ -12673,7 +12673,7 @@ index 038efca71..dc4b7da03 100644 /* * Don't call update_tasks_cpumask() if the cpuset becomes empty, -@@ -3273,10 +3273,10 @@ hotplug_update_tasks(struct cpuset *cs, +@@ -3274,10 +3274,10 @@ hotplug_update_tasks(struct cpuset *cs, if (nodes_empty(*new_mems)) *new_mems = parent_cs(cs)->effective_mems; @@ -12686,7 +12686,7 @@ index 038efca71..dc4b7da03 100644 if (cpus_updated) update_tasks_cpumask(cs); -@@ -3343,10 +3343,10 @@ static void cpuset_hotplug_update_tasks(struct cpuset *cs, struct tmpmasks *tmp) +@@ -3344,10 +3344,10 @@ retry: if (is_partition_root(cs) && (cpumask_empty(&new_cpus) || (parent->partition_root_state == PRS_ERROR))) { if (cs->nr_subparts_cpus) { @@ -12699,7 +12699,7 @@ index 038efca71..dc4b7da03 100644 compute_effective_cpumask(&new_cpus, cs, parent); } -@@ -3360,9 +3360,9 @@ static void cpuset_hotplug_update_tasks(struct cpuset *cs, struct tmpmasks *tmp) +@@ -3361,9 +3361,9 @@ retry: cpumask_empty(&new_cpus)) { update_parent_subparts_cpumask(cs, partcmd_disable, NULL, tmp); @@ -12711,7 +12711,7 @@ index 038efca71..dc4b7da03 100644 } cpuset_force_rebuild(); } -@@ -3442,7 +3442,7 @@ static void cpuset_hotplug_workfn(struct work_struct *work) +@@ -3443,7 +3443,7 @@ static void cpuset_hotplug_workfn(struct work_struct *work) /* synchronize cpus_allowed to cpu_active_mask */ if (cpus_updated) { @@ -12720,7 +12720,7 @@ index 038efca71..dc4b7da03 100644 if (!on_dfl) cpumask_copy(top_cpuset.cpus_allowed, &new_cpus); /* -@@ -3462,17 +3462,17 @@ static void cpuset_hotplug_workfn(struct work_struct *work) +@@ -3463,17 +3463,17 @@ static void cpuset_hotplug_workfn(struct work_struct *work) } } cpumask_copy(top_cpuset.effective_cpus, &new_cpus); @@ -12741,7 +12741,7 @@ index 038efca71..dc4b7da03 100644 update_tasks_nodemask(&top_cpuset); } -@@ -3576,11 +3576,11 @@ void cpuset_cpus_allowed(struct task_struct *tsk, struct cpumask *pmask) +@@ -3577,11 +3577,11 @@ void cpuset_cpus_allowed(struct task_struct *tsk, struct cpumask *pmask) { unsigned long flags; @@ -12755,7 +12755,7 @@ index 038efca71..dc4b7da03 100644 } /** -@@ -3641,11 +3641,11 @@ nodemask_t cpuset_mems_allowed(struct task_struct *tsk) +@@ -3642,11 +3642,11 @@ nodemask_t cpuset_mems_allowed(struct task_struct *tsk) nodemask_t mask; unsigned long flags; @@ -12769,7 +12769,7 @@ index 038efca71..dc4b7da03 100644 return mask; } -@@ -3737,14 +3737,14 @@ bool __cpuset_node_allowed(int node, gfp_t gfp_mask) +@@ -3738,14 +3738,14 @@ bool __cpuset_node_allowed(int node, gfp_t gfp_mask) return true; /* Not hardwall and node outside mems_allowed: scan up cpusets */ @@ -12811,10 +12811,10 @@ index d2ae14d0b..7b3bea56d 100644 /* if @may_sleep, play nice and yield if necessary */ if (may_sleep && (need_resched() || diff --git a/kernel/cpu.c b/kernel/cpu.c -index 89a8e7b9f..885b23d8a 100644 +index 137baebde..a3190708d 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c -@@ -1700,7 +1700,7 @@ static struct cpuhp_step cpuhp_hp_states[] = { +@@ -1731,7 +1731,7 @@ static struct cpuhp_step cpuhp_hp_states[] = { .name = "ap:online", }, /* @@ -12823,7 +12823,7 @@ index 89a8e7b9f..885b23d8a 100644 * this itself. */ [CPUHP_TEARDOWN_CPU] = { -@@ -1709,6 +1709,13 @@ static struct cpuhp_step cpuhp_hp_states[] = { +@@ -1740,6 +1740,13 @@ static struct cpuhp_step cpuhp_hp_states[] = { .teardown.single = takedown_cpu, .cant_stop = true, }, @@ -12838,10 +12838,10 @@ index 89a8e7b9f..885b23d8a 100644 [CPUHP_AP_SMPBOOT_THREADS] = { .name = "smpboot/threads:online", diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c -index 4e09fab52..1f5c577b9 100644 +index c27b3dfa1..b97d05072 100644 --- a/kernel/debug/kdb/kdb_main.c +++ b/kernel/debug/kdb/kdb_main.c -@@ -2157,7 +2157,7 @@ static int kdb_dmesg(int argc, const char **argv) +@@ -2155,7 +2155,7 @@ static int kdb_dmesg(int argc, const char **argv) int adjust = 0; int n = 0; int skip = 0; @@ -12850,7 +12850,7 @@ index 4e09fab52..1f5c577b9 100644 size_t len; char buf[201]; -@@ -2182,8 +2182,8 @@ static int kdb_dmesg(int argc, const char **argv) +@@ -2180,8 +2180,8 @@ static int kdb_dmesg(int argc, const char **argv) kdb_set(2, setargs); } @@ -12861,7 +12861,7 @@ index 4e09fab52..1f5c577b9 100644 n++; if (lines < 0) { -@@ -2215,8 +2215,8 @@ static int kdb_dmesg(int argc, const char **argv) +@@ -2213,8 +2213,8 @@ static int kdb_dmesg(int argc, const char **argv) if (skip >= n || skip < 0) return 0; @@ -12873,7 +12873,7 @@ index 4e09fab52..1f5c577b9 100644 skip--; continue; diff --git a/kernel/entry/common.c b/kernel/entry/common.c -index a028b28da..382c0284a 100644 +index b3690d7ea..23eb61839 100644 --- a/kernel/entry/common.c +++ b/kernel/entry/common.c @@ -2,6 +2,7 @@ @@ -12903,7 +12903,7 @@ index a028b28da..382c0284a 100644 if (ti_work & _TIF_UPROBE) uprobe_notify_resume(regs); -@@ -209,6 +218,7 @@ static void exit_to_user_mode_prepare(struct pt_regs *regs) +@@ -210,6 +219,7 @@ static void exit_to_user_mode_prepare(struct pt_regs *regs) /* Ensure that the address limit is intact and no locks are held */ addr_limit_user_check(); @@ -12911,7 +12911,7 @@ index a028b28da..382c0284a 100644 lockdep_assert_irqs_disabled(); lockdep_sys_exit(); } -@@ -368,7 +378,7 @@ void irqentry_exit_cond_resched(void) +@@ -369,7 +379,7 @@ void irqentry_exit_cond_resched(void) rcu_irq_exit_check_preempt(); if (IS_ENABLED(CONFIG_DEBUG_ENTRY)) WARN_ON_ONCE(!on_thread_stack()); @@ -12934,7 +12934,7 @@ index 26a81ea63..c15ca5450 100644 spin_unlock(&sighand->siglock); diff --git a/kernel/fork.c b/kernel/fork.c -index 079b71813..5ee8b29f0 100644 +index 9b1ea79de..009c07729 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -42,6 +42,7 @@ @@ -12945,7 +12945,7 @@ index 079b71813..5ee8b29f0 100644 #include #include #include -@@ -293,7 +294,7 @@ static inline void free_thread_stack(struct task_struct *tsk) +@@ -294,7 +295,7 @@ static inline void free_thread_stack(struct task_struct *tsk) return; } @@ -12954,7 +12954,7 @@ index 079b71813..5ee8b29f0 100644 return; } #endif -@@ -704,6 +705,19 @@ void __mmdrop(struct mm_struct *mm) +@@ -707,6 +708,19 @@ void __mmdrop(struct mm_struct *mm) } EXPORT_SYMBOL_GPL(__mmdrop); @@ -12974,7 +12974,7 @@ index 079b71813..5ee8b29f0 100644 static void mmdrop_async_fn(struct work_struct *work) { struct mm_struct *mm; -@@ -745,6 +759,15 @@ void __put_task_struct(struct task_struct *tsk) +@@ -748,6 +762,15 @@ void __put_task_struct(struct task_struct *tsk) WARN_ON(refcount_read(&tsk->usage)); WARN_ON(tsk == current); @@ -12990,7 +12990,7 @@ index 079b71813..5ee8b29f0 100644 io_uring_free(tsk); cgroup_free(tsk); task_numa_free(tsk, true); -@@ -974,11 +997,13 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node) +@@ -986,11 +1009,13 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node) tsk->task_frag.page = NULL; tsk->wake_q.next = NULL; tsk->pf_io_worker = NULL; @@ -13004,7 +13004,7 @@ index 079b71813..5ee8b29f0 100644 #ifdef CONFIG_FAULT_INJECTION tsk->fail_nth = 0; #endif -@@ -2121,6 +2146,7 @@ static __latent_entropy struct task_struct *copy_process( +@@ -2139,6 +2164,7 @@ static __latent_entropy struct task_struct *copy_process( spin_lock_init(&p->alloc_lock); init_sigpending(&p->pending); @@ -13042,7 +13042,7 @@ index cde0ca876..909dcd708 100644 return ret; } -@@ -2165,6 +2167,16 @@ static int futex_requeue(u32 __user *uaddr1, unsigned int flags, +@@ -2165,6 +2167,16 @@ retry_private: */ requeue_pi_wake_futex(this, &key2, hb2); continue; @@ -13059,7 +13059,7 @@ index cde0ca876..909dcd708 100644 } else if (ret) { /* * rt_mutex_start_proxy_lock() detected a -@@ -2857,7 +2869,7 @@ static int futex_lock_pi(u32 __user *uaddr, unsigned int flags, +@@ -2857,7 +2869,7 @@ retry_private: goto no_block; } @@ -14024,7 +14024,7 @@ index fc549713b..659e93e25 100644 - debug_rt_mutex_print_deadlock(w); -} diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c -index 9d24d2263..0f863d020 100644 +index b909b559a..dd68a5665 100644 --- a/kernel/locking/rtmutex.c +++ b/kernel/locking/rtmutex.c @@ -8,6 +8,11 @@ @@ -14206,7 +14206,7 @@ index 9d24d2263..0f863d020 100644 /* * The current top waiter stays enqueued. We * don't have to change anything in the lock -@@ -934,6 +976,329 @@ static int try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task, +@@ -934,6 +976,329 @@ takeit: return 1; } @@ -14685,10 +14685,10 @@ index 9d24d2263..0f863d020 100644 schedule(); raw_spin_lock_irq(&lock->wait_lock); -@@ -1229,43 +1617,110 @@ static void rt_mutex_handle_deadlock(int res, int detect_deadlock, - if (res != -EDEADLOCK || detect_deadlock) +@@ -1231,43 +1619,110 @@ static void rt_mutex_handle_deadlock(int res, int detect_deadlock, return; + raw_spin_unlock_irq(&lock->wait_lock); - /* - * Yell lowdly and stop the task right here. - */ @@ -14819,7 +14819,7 @@ index 9d24d2263..0f863d020 100644 return 0; } -@@ -1275,16 +1730,26 @@ rt_mutex_slowlock(struct rt_mutex *lock, int state, +@@ -1277,16 +1732,26 @@ rt_mutex_slowlock(struct rt_mutex *lock, int state, if (unlikely(timeout)) hrtimer_start_expires(&timeout->timer, HRTIMER_MODE_ABS); @@ -14841,17 +14841,17 @@ index 9d24d2263..0f863d020 100644 if (unlikely(ret)) { __set_current_state(TASK_RUNNING); - remove_waiter(lock, &waiter); -- rt_mutex_handle_deadlock(ret, chwalk, &waiter); +- rt_mutex_handle_deadlock(ret, chwalk, lock, &waiter); + remove_waiter(lock, waiter); + /* ww_mutex wants to report EDEADLK/EALREADY, let it */ + if (!ww_ctx) -+ rt_mutex_handle_deadlock(ret, chwalk, waiter); ++ rt_mutex_handle_deadlock(ret, chwalk, lock, waiter); + } else if (ww_ctx) { + ww_mutex_account_lock(lock, ww_ctx); } /* -@@ -1292,7 +1757,36 @@ rt_mutex_slowlock(struct rt_mutex *lock, int state, +@@ -1294,7 +1759,36 @@ rt_mutex_slowlock(struct rt_mutex *lock, int state, * unconditionally. We might have to fix that up. */ fixup_rt_mutex_waiters(lock, true); @@ -14888,7 +14888,7 @@ index 9d24d2263..0f863d020 100644 raw_spin_unlock_irqrestore(&lock->wait_lock, flags); /* Remove pending timer: */ -@@ -1352,7 +1846,8 @@ static inline int rt_mutex_slowtrylock(struct rt_mutex *lock) +@@ -1354,7 +1848,8 @@ static inline int rt_mutex_slowtrylock(struct rt_mutex *lock) * Return whether the current task needs to call rt_mutex_postunlock(). */ static bool __sched rt_mutex_slowunlock(struct rt_mutex *lock, @@ -14898,7 +14898,7 @@ index 9d24d2263..0f863d020 100644 { unsigned long flags; -@@ -1406,7 +1901,7 @@ static bool __sched rt_mutex_slowunlock(struct rt_mutex *lock, +@@ -1408,7 +1903,7 @@ static bool __sched rt_mutex_slowunlock(struct rt_mutex *lock, * * Queue the next waiter for wakeup once we release the wait_lock. */ @@ -14907,7 +14907,7 @@ index 9d24d2263..0f863d020 100644 raw_spin_unlock_irqrestore(&lock->wait_lock, flags); return true; /* call rt_mutex_postunlock() */ -@@ -1420,29 +1915,16 @@ static bool __sched rt_mutex_slowunlock(struct rt_mutex *lock, +@@ -1422,29 +1917,16 @@ static bool __sched rt_mutex_slowunlock(struct rt_mutex *lock, */ static inline int rt_mutex_fastlock(struct rt_mutex *lock, int state, @@ -14941,7 +14941,7 @@ index 9d24d2263..0f863d020 100644 } static inline int -@@ -1458,9 +1940,11 @@ rt_mutex_fasttrylock(struct rt_mutex *lock, +@@ -1460,9 +1942,11 @@ rt_mutex_fasttrylock(struct rt_mutex *lock, /* * Performs the wakeup of the top-waiter and re-enables preemption. */ @@ -14954,7 +14954,7 @@ index 9d24d2263..0f863d020 100644 /* Pairs with preempt_disable() in rt_mutex_slowunlock() */ preempt_enable(); -@@ -1469,23 +1953,46 @@ void rt_mutex_postunlock(struct wake_q_head *wake_q) +@@ -1471,23 +1955,46 @@ void rt_mutex_postunlock(struct wake_q_head *wake_q) static inline void rt_mutex_fastunlock(struct rt_mutex *lock, bool (*slowfn)(struct rt_mutex *lock, @@ -15006,7 +15006,7 @@ index 9d24d2263..0f863d020 100644 } #ifdef CONFIG_DEBUG_LOCK_ALLOC -@@ -1526,16 +2033,7 @@ EXPORT_SYMBOL_GPL(rt_mutex_lock); +@@ -1528,16 +2035,7 @@ EXPORT_SYMBOL_GPL(rt_mutex_lock); */ int __sched rt_mutex_lock_interruptible(struct rt_mutex *lock) { @@ -15024,7 +15024,7 @@ index 9d24d2263..0f863d020 100644 } EXPORT_SYMBOL_GPL(rt_mutex_lock_interruptible); -@@ -1552,36 +2050,17 @@ int __sched __rt_mutex_futex_trylock(struct rt_mutex *lock) +@@ -1554,36 +2052,17 @@ int __sched __rt_mutex_futex_trylock(struct rt_mutex *lock) return __rt_mutex_slowtrylock(lock); } @@ -15069,7 +15069,7 @@ index 9d24d2263..0f863d020 100644 /** * rt_mutex_trylock - try to lock a rt_mutex -@@ -1598,10 +2077,7 @@ int __sched rt_mutex_trylock(struct rt_mutex *lock) +@@ -1600,10 +2079,7 @@ int __sched rt_mutex_trylock(struct rt_mutex *lock) { int ret; @@ -15081,7 +15081,7 @@ index 9d24d2263..0f863d020 100644 if (ret) mutex_acquire(&lock->dep_map, 0, 1, _RET_IP_); -@@ -1609,6 +2085,11 @@ int __sched rt_mutex_trylock(struct rt_mutex *lock) +@@ -1611,6 +2087,11 @@ int __sched rt_mutex_trylock(struct rt_mutex *lock) } EXPORT_SYMBOL_GPL(rt_mutex_trylock); @@ -15093,7 +15093,7 @@ index 9d24d2263..0f863d020 100644 /** * rt_mutex_unlock - unlock a rt_mutex * -@@ -1617,16 +2098,13 @@ EXPORT_SYMBOL_GPL(rt_mutex_trylock); +@@ -1619,16 +2100,13 @@ EXPORT_SYMBOL_GPL(rt_mutex_trylock); void __sched rt_mutex_unlock(struct rt_mutex *lock) { mutex_release(&lock->dep_map, _RET_IP_); @@ -15114,7 +15114,7 @@ index 9d24d2263..0f863d020 100644 { lockdep_assert_held(&lock->wait_lock); -@@ -1643,23 +2121,35 @@ bool __sched __rt_mutex_futex_unlock(struct rt_mutex *lock, +@@ -1645,23 +2123,35 @@ bool __sched __rt_mutex_futex_unlock(struct rt_mutex *lock, * avoid inversion prior to the wakeup. preempt_disable() * therein pairs with rt_mutex_postunlock(). */ @@ -15153,7 +15153,7 @@ index 9d24d2263..0f863d020 100644 } /** -@@ -1673,9 +2163,6 @@ void __sched rt_mutex_futex_unlock(struct rt_mutex *lock) +@@ -1675,9 +2165,6 @@ void __sched rt_mutex_futex_unlock(struct rt_mutex *lock) void rt_mutex_destroy(struct rt_mutex *lock) { WARN_ON(rt_mutex_is_locked(lock)); @@ -15163,7 +15163,7 @@ index 9d24d2263..0f863d020 100644 } EXPORT_SYMBOL_GPL(rt_mutex_destroy); -@@ -1698,7 +2185,7 @@ void __rt_mutex_init(struct rt_mutex *lock, const char *name, +@@ -1700,7 +2187,7 @@ void __rt_mutex_init(struct rt_mutex *lock, const char *name, if (name && key) debug_rt_mutex_init(lock, name, key); } @@ -15172,7 +15172,7 @@ index 9d24d2263..0f863d020 100644 /** * rt_mutex_init_proxy_locked - initialize and lock a rt_mutex on behalf of a -@@ -1718,6 +2205,14 @@ void rt_mutex_init_proxy_locked(struct rt_mutex *lock, +@@ -1720,6 +2207,14 @@ void rt_mutex_init_proxy_locked(struct rt_mutex *lock, struct task_struct *proxy_owner) { __rt_mutex_init(lock, NULL, NULL); @@ -15187,7 +15187,7 @@ index 9d24d2263..0f863d020 100644 debug_rt_mutex_proxy_lock(lock, proxy_owner); rt_mutex_set_owner(lock, proxy_owner); } -@@ -1740,6 +2235,26 @@ void rt_mutex_proxy_unlock(struct rt_mutex *lock) +@@ -1742,6 +2237,26 @@ void rt_mutex_proxy_unlock(struct rt_mutex *lock) rt_mutex_clear_owner(lock); } @@ -15214,7 +15214,7 @@ index 9d24d2263..0f863d020 100644 /** * __rt_mutex_start_proxy_lock() - Start lock acquisition for another task * @lock: the rt_mutex to take -@@ -1770,6 +2285,34 @@ int __rt_mutex_start_proxy_lock(struct rt_mutex *lock, +@@ -1772,6 +2287,34 @@ int __rt_mutex_start_proxy_lock(struct rt_mutex *lock, if (try_to_take_rt_mutex(lock, task, NULL)) return 1; @@ -15249,7 +15249,7 @@ index 9d24d2263..0f863d020 100644 /* We enforce deadlock detection for futexes */ ret = task_blocks_on_rt_mutex(lock, waiter, task, RT_MUTEX_FULL_CHAINWALK); -@@ -1784,7 +2327,8 @@ int __rt_mutex_start_proxy_lock(struct rt_mutex *lock, +@@ -1786,7 +2329,8 @@ int __rt_mutex_start_proxy_lock(struct rt_mutex *lock, ret = 0; } @@ -15259,7 +15259,7 @@ index 9d24d2263..0f863d020 100644 return ret; } -@@ -1869,7 +2413,7 @@ int rt_mutex_wait_proxy_lock(struct rt_mutex *lock, +@@ -1871,7 +2415,7 @@ int rt_mutex_wait_proxy_lock(struct rt_mutex *lock, raw_spin_lock_irq(&lock->wait_lock); /* sleep on the mutex */ set_current_state(TASK_INTERRUPTIBLE); @@ -15268,7 +15268,7 @@ index 9d24d2263..0f863d020 100644 /* * try_to_take_rt_mutex() sets the waiter bit unconditionally. We might * have to fix that up. -@@ -1936,3 +2480,97 @@ bool rt_mutex_cleanup_proxy_lock(struct rt_mutex *lock, +@@ -1938,3 +2482,97 @@ bool rt_mutex_cleanup_proxy_lock(struct rt_mutex *lock, return cleanup; } @@ -16271,7 +16271,7 @@ index 1b019cbca..c20782f07 100644 return ret; } diff --git a/kernel/panic.c b/kernel/panic.c -index 2005a2029..9a7c9fd7c 100644 +index 6d7127667..abb1be02e 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -241,11 +241,26 @@ void check_panic_on_warn(const char *origin) @@ -16343,7 +16343,7 @@ index 2005a2029..9a7c9fd7c 100644 kmsg_dump(KMSG_DUMP_PANIC); /* -@@ -643,9 +644,11 @@ static u64 oops_id; +@@ -651,9 +652,11 @@ static u64 oops_id; static int init_oops_id(void) { @@ -16355,7 +16355,7 @@ index 2005a2029..9a7c9fd7c 100644 oops_id++; return 0; -@@ -656,6 +659,7 @@ static void print_oops_end_marker(void) +@@ -664,6 +667,7 @@ static void print_oops_end_marker(void) { init_oops_id(); pr_warn("---[ end trace %016llx ]---\n", (unsigned long long)oops_id); @@ -16402,7 +16402,7 @@ index b1c155328..059c3d876 100644 static inline bool printk_percpu_data_ready(void) { return false; } #endif /* CONFIG_PRINTK */ diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c -index ffd7f90b8..80c97bc3e 100644 +index d6727b715..88a877fdc 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -44,6 +44,9 @@ @@ -16645,7 +16645,7 @@ index ffd7f90b8..80c97bc3e 100644 int dmesg_restrict = IS_ENABLED(CONFIG_SECURITY_DMESG_RESTRICT); static int syslog_action_restricted(int type) -@@ -680,7 +622,7 @@ static ssize_t msg_print_ext_body(char *buf, size_t size, +@@ -680,7 +622,7 @@ out: /* /dev/kmsg - userspace message inject/listen interface */ struct devkmsg_user { @@ -17010,7 +17010,7 @@ index ffd7f90b8..80c97bc3e 100644 break; /* Size of the log buffer */ case SYSLOG_ACTION_SIZE_BUFFER: -@@ -1742,369 +1715,439 @@ SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len) +@@ -1742,169 +1715,308 @@ SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len) return do_syslog(type, buf, len, SYSLOG_FROM_READER); } @@ -17076,7 +17076,6 @@ index ffd7f90b8..80c97bc3e 100644 -static DEFINE_RAW_SPINLOCK(console_owner_lock); -static struct task_struct *console_owner; -static bool console_waiter; - +static bool have_atomic_console(void) + { + @@ -17137,6 +17136,7 @@ index ffd7f90b8..80c97bc3e 100644 + console_atomic_unlock(flags); +} + + #if defined(CONFIG_X86) || defined(CONFIG_ARM64_PSEUDO_NMI) void zap_locks(void) { @@ -17144,6 +17144,10 @@ index ffd7f90b8..80c97bc3e 100644 - debug_locks_off(); - raw_spin_lock_init(&logbuf_lock); - } +- +- if (raw_spin_is_locked(&console_owner_lock)) { +- raw_spin_lock_init(&console_owner_lock); +- } +// if (raw_spin_is_locked(&logbuf_lock)) { +// debug_locks_off(); +// raw_spin_lock_init(&logbuf_lock); @@ -17152,18 +17156,10 @@ index ffd7f90b8..80c97bc3e 100644 +// if (raw_spin_is_locked(&console_owner_lock)) { +// raw_spin_lock_init(&console_owner_lock); +// } - -- if (raw_spin_is_locked(&console_owner_lock)) { -- raw_spin_lock_init(&console_owner_lock); -- } -- -- console_owner = NULL; -- console_waiter = false; ++ +// console_owner = NULL; +// console_waiter = false; - -- sema_init(&console_sem, 1); --} ++ +// sema_init(&console_sem, 1); + } +#endif @@ -17172,7 +17168,7 @@ index ffd7f90b8..80c97bc3e 100644 +#define NUM_RECURSION_CTX 2 +#else +#define NUM_RECURSION_CTX 1 - #endif ++#endif + +struct printk_recursion { + char count[NUM_RECURSION_CTX]; @@ -17190,6 +17186,23 @@ index ffd7f90b8..80c97bc3e 100644 + count = &printk_recursion_count[0]; + } else { + rec = this_cpu_ptr(&percpu_printk_recursion); ++ count = &rec->count[0]; ++ } + +- console_owner = NULL; +- console_waiter = false; ++#ifdef CONFIG_PRINTK_NMI ++ if (in_nmi()) ++ count++; ++#endif + +- sema_init(&console_sem, 1); ++ return count; + } +-#endif ++ ++static bool printk_enter_irqsave(unsigned long *flags) ++ { -/** - * console_lock_spinning_enable - mark beginning of code where another @@ -17205,12 +17218,21 @@ index ffd7f90b8..80c97bc3e 100644 - raw_spin_lock(&console_owner_lock); - console_owner = current; - raw_spin_unlock(&console_owner_lock); -+ count = &rec->count[0]; ++ char *count; ++ ++ local_irq_save(*flags); ++ count = printk_recursion_counter(); ++ /* Only 1 level of recursion allowed. */ ++ if (*count > 1) { ++ local_irq_restore(*flags); ++ return false; + } ++ (*count)++; - /* The waiter may spin on us after setting console_owner */ - spin_acquire(&console_owner_dep_map, 0, 0, _THIS_IP_); --} ++ return true; + } -/** - * console_lock_spinning_disable_and_check - mark end of code where another @@ -17228,53 +17250,30 @@ index ffd7f90b8..80c97bc3e 100644 - * Return: 1 if the lock rights were passed, 0 otherwise. - */ -static int console_lock_spinning_disable_and_check(void) --{ ++static void printk_exit_irqrestore(unsigned long flags) + { - int waiter; -+#ifdef CONFIG_PRINTK_NMI -+ if (in_nmi()) -+ count++; -+#endif -+ -+ return count; -+} -+ -+static bool printk_enter_irqsave(unsigned long *flags) -+ { - +- - raw_spin_lock(&console_owner_lock); - waiter = READ_ONCE(console_waiter); - console_owner = NULL; - raw_spin_unlock(&console_owner_lock); -+ char *count; -+ -+ local_irq_save(*flags); -+ count = printk_recursion_counter(); -+ /* Only 1 level of recursion allowed. */ -+ if (*count > 1) { -+ local_irq_restore(*flags); -+ return false; -+ } -+ (*count)++; - +- - if (!waiter) { - spin_release(&console_owner_dep_map, _THIS_IP_); - return 0; - } -+ return true; -+} ++ char *count; - /* The waiter is now free to continue */ - WRITE_ONCE(console_waiter, false); -+static void printk_exit_irqrestore(unsigned long flags) -+{ -+ char *count; - -- spin_release(&console_owner_dep_map, _THIS_IP_); + count = printk_recursion_counter(); + (*count)--; + local_irq_restore(flags); + } +- spin_release(&console_owner_dep_map, _THIS_IP_); +- - /* - * Hand off console_lock to waiter. The waiter will perform - * the up(). After this, the waiter is the console_lock owner. @@ -17287,24 +17286,25 @@ index ffd7f90b8..80c97bc3e 100644 + 0x80000000 + raw_smp_processor_id(); } -+ /** - * 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 + * 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. - * -- * 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. ++ * + * @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. - * -- * Return: 1 if we got the lock, 0 othrewise ++ * + * @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. @@ -17408,7 +17408,8 @@ index ffd7f90b8..80c97bc3e 100644 - return 0; - - printk_safe_enter_irqsave(flags); -- ++ ts_nsec = local_clock(); + - raw_spin_lock(&console_owner_lock); - owner = READ_ONCE(console_owner); - waiter = READ_ONCE(console_waiter); @@ -17417,8 +17418,7 @@ index ffd7f90b8..80c97bc3e 100644 - spin = true; - } - raw_spin_unlock(&console_owner_lock); -+ ts_nsec = local_clock(); - +- - /* - * If there is an active printk() writing to the - * consoles, instead of having it write our data too, @@ -17433,14 +17433,14 @@ index ffd7f90b8..80c97bc3e 100644 + if (!printk_enter_irqsave(&irqflags)) return 0; - } - +- - /* 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_); -- + - printk_safe_exit_irqrestore(flags); /* - * The owner passed the console lock to us. @@ -17452,7 +17452,13 @@ index ffd7f90b8..80c97bc3e 100644 + * later the vscnprintf() into the reserved buffer has room for the + * terminating '\0', which is not counted by vsnprintf(). */ -- mutex_acquire(&console_lock_dep_map, 0, 1, _THIS_IP_); + mutex_acquire(&console_lock_dep_map, 0, 1, _THIS_IP_); + +@@ -1912,205 +2024,134 @@ static int console_trylock_spinning(void) + * Update @console_may_schedule for trylock because the previous + * owner may have been schedulable. + */ +- console_may_schedule = 0; - - return 1; -} @@ -17551,11 +17557,10 @@ index ffd7f90b8..80c97bc3e 100644 + 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; ++ final_commit = true; } else { prb_commit(&e); } @@ -17580,7 +17585,7 @@ index ffd7f90b8..80c97bc3e 100644 - 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. @@ -17589,7 +17594,11 @@ index ffd7f90b8..80c97bc3e 100644 + * 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--; @@ -17609,11 +17618,7 @@ index ffd7f90b8..80c97bc3e 100644 - case 'c': /* KERN_CONT */ - lflags |= LOG_CONT; - } -+ 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); - +- - text_len -= 2; - text += 2; - } @@ -17625,7 +17630,7 @@ index ffd7f90b8..80c97bc3e 100644 - if (level == LOGLEVEL_DEFAULT) - level = default_message_loglevel; + seq = r.info->seq; - ++ + /* fill message */ + text_len = printk_sprint(&r.text_buf[0], reserve_size, facility, &lflags, fmt, args); + if (trunc_msg_len) @@ -17636,6 +17641,7 @@ index ffd7f90b8..80c97bc3e 100644 + r.info->flags = lflags & 0x1f; + r.info->ts_nsec = ts_nsec; + r.info->caller_id = caller_id; + if (dev_info) - lflags |= LOG_NEWLINE; - @@ -17750,7 +17756,7 @@ index ffd7f90b8..80c97bc3e 100644 asmlinkage int vprintk(const char *fmt, va_list args) { -@@ -2112,12 +2155,6 @@ asmlinkage int vprintk(const char *fmt, va_list args) +@@ -2118,12 +2159,6 @@ asmlinkage int vprintk(const char *fmt, va_list args) } EXPORT_SYMBOL(vprintk); @@ -17763,7 +17769,7 @@ index ffd7f90b8..80c97bc3e 100644 /** * printk - print a kernel message * @fmt: format string -@@ -2152,38 +2189,158 @@ asmlinkage __visible int printk(const char *fmt, ...) +@@ -2158,38 +2193,158 @@ asmlinkage __visible int printk(const char *fmt, ...) } EXPORT_SYMBOL(printk); @@ -17784,7 +17790,10 @@ index ffd7f90b8..80c97bc3e 100644 + 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) @@ -17795,22 +17804,19 @@ index ffd7f90b8..80c97bc3e 100644 + if (!text || !dropped_text) + goto out; --#define LOG_LINE_MAX 0 --#define PREFIX_MAX 0 --#define printk_time false +-#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; --#define prb_read_valid(rb, seq, r) false --#define prb_first_valid_seq(rb) 0 -+ seq = atomic64_read(&con->printk_seq); - -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 (;;) { @@ -17829,12 +17835,12 @@ index ffd7f90b8..80c97bc3e 100644 + } + + seq++; ++ ++ if (!(con->flags & CON_ENABLED)) ++ continue; -static size_t record_print_text(const struct printk_record *r, - bool syslog, bool time) -+ if (!(con->flags & CON_ENABLED)) -+ continue; -+ + if (suppress_message_printing(r.info->level)) + continue; + @@ -17946,7 +17952,7 @@ index ffd7f90b8..80c97bc3e 100644 #endif /* CONFIG_PRINTK */ -@@ -2428,21 +2585,6 @@ int is_console_locked(void) +@@ -2434,21 +2589,6 @@ int is_console_locked(void) } EXPORT_SYMBOL(is_console_locked); @@ -17968,7 +17974,7 @@ index ffd7f90b8..80c97bc3e 100644 /* * Return true when this CPU should unlock console_sem without pushing all -@@ -2463,17 +2605,6 @@ static bool abandon_console_lock_in_panic(void) +@@ -2469,17 +2609,6 @@ static bool abandon_console_lock_in_panic(void) return atomic_read(&panic_cpu) != raw_smp_processor_id(); } @@ -17986,7 +17992,7 @@ index ffd7f90b8..80c97bc3e 100644 /** * console_unlock - unlock the console system -@@ -2491,154 +2622,12 @@ static inline int can_use_console(void) +@@ -2497,154 +2626,12 @@ static inline int can_use_console(void) */ void console_unlock(void) { @@ -18146,7 +18152,7 @@ index ffd7f90b8..80c97bc3e 100644 } EXPORT_SYMBOL(console_unlock); -@@ -2688,23 +2677,20 @@ void console_unblank(void) +@@ -2694,23 +2681,20 @@ void console_unblank(void) */ void console_flush_on_panic(enum con_flush_mode mode) { @@ -18181,7 +18187,7 @@ index ffd7f90b8..80c97bc3e 100644 console_unlock(); } EXPORT_SYMBOL(console_flush_on_panic); -@@ -2840,7 +2826,6 @@ static int try_enable_new_console(struct console *newcon, bool user_specified) +@@ -2879,7 +2863,6 @@ static void try_enable_default_console(struct console *newcon) */ void register_console(struct console *newcon) { @@ -18189,7 +18195,7 @@ index ffd7f90b8..80c97bc3e 100644 struct console *bcon = NULL; int err; -@@ -2864,6 +2849,8 @@ void register_console(struct console *newcon) +@@ -2903,6 +2886,8 @@ void register_console(struct console *newcon) } } @@ -18198,7 +18204,7 @@ index ffd7f90b8..80c97bc3e 100644 if (console_drivers && console_drivers->flags & CON_BOOT) bcon = console_drivers; -@@ -2905,8 +2892,10 @@ void register_console(struct console *newcon) +@@ -2934,8 +2919,10 @@ void register_console(struct console *newcon) * the real console are the same physical device, it's annoying to * see the beginning boot messages twice */ @@ -18210,7 +18216,7 @@ index ffd7f90b8..80c97bc3e 100644 /* * Put this console in the list - keep the -@@ -2928,26 +2917,12 @@ void register_console(struct console *newcon) +@@ -2957,26 +2944,12 @@ void register_console(struct console *newcon) if (newcon->flags & CON_EXTENDED) nr_ext_console_drivers++; @@ -18243,7 +18249,7 @@ index ffd7f90b8..80c97bc3e 100644 console_unlock(); console_sysfs_notify(); -@@ -3021,6 +2996,9 @@ int unregister_console(struct console *console) +@@ -3050,6 +3023,9 @@ int unregister_console(struct console *console) console_unlock(); console_sysfs_notify(); @@ -18253,7 +18259,7 @@ index ffd7f90b8..80c97bc3e 100644 if (console->exit) res = console->exit(console); -@@ -3103,6 +3081,15 @@ static int __init printk_late_init(void) +@@ -3132,6 +3108,15 @@ static int __init printk_late_init(void) unregister_console(con); } } @@ -18269,7 +18275,7 @@ index ffd7f90b8..80c97bc3e 100644 ret = cpuhp_setup_state_nocalls(CPUHP_PRINTK_DEAD, "printk:dead", NULL, console_cpu_notify); WARN_ON(ret < 0); -@@ -3118,7 +3105,6 @@ late_initcall(printk_late_init); +@@ -3147,7 +3132,6 @@ late_initcall(printk_late_init); * Delayed printk version, for scheduler-internal messages: */ #define PRINTK_PENDING_WAKEUP 0x01 @@ -18277,7 +18283,7 @@ index ffd7f90b8..80c97bc3e 100644 static DEFINE_PER_CPU(int, printk_pending); -@@ -3126,14 +3112,8 @@ static void wake_up_klogd_work_func(struct irq_work *irq_work) +@@ -3155,14 +3139,8 @@ static void wake_up_klogd_work_func(struct irq_work *irq_work) { int pending = __this_cpu_xchg(printk_pending, 0); @@ -18293,7 +18299,7 @@ index ffd7f90b8..80c97bc3e 100644 } static DEFINE_PER_CPU(struct irq_work, wake_up_klogd_work) = -@@ -3152,25 +3132,10 @@ void wake_up_klogd(void) +@@ -3181,25 +3159,10 @@ void wake_up_klogd(void) preempt_enable(); } @@ -18322,7 +18328,7 @@ index ffd7f90b8..80c97bc3e 100644 } int printk_deferred(const char *fmt, ...) -@@ -3309,8 +3274,26 @@ EXPORT_SYMBOL_GPL(kmsg_dump_reason_str); +@@ -3338,8 +3301,26 @@ EXPORT_SYMBOL_GPL(kmsg_dump_reason_str); */ void kmsg_dump(enum kmsg_dump_reason reason) { @@ -18350,7 +18356,7 @@ index ffd7f90b8..80c97bc3e 100644 rcu_read_lock(); list_for_each_entry_rcu(dumper, &dump_list, list) { -@@ -3328,25 +3311,18 @@ void kmsg_dump(enum kmsg_dump_reason reason) +@@ -3357,25 +3338,18 @@ void kmsg_dump(enum kmsg_dump_reason reason) continue; /* initialize iterator with data about the stored records */ @@ -18381,7 +18387,7 @@ index ffd7f90b8..80c97bc3e 100644 * @syslog: include the "<4>" prefixes * @line: buffer to copy the line to * @size: maximum size of the buffer -@@ -3360,11 +3336,9 @@ void kmsg_dump(enum kmsg_dump_reason reason) +@@ -3389,11 +3363,9 @@ void kmsg_dump(enum kmsg_dump_reason reason) * * A return value of FALSE indicates that there are no more records to * read. @@ -18395,7 +18401,7 @@ index ffd7f90b8..80c97bc3e 100644 { struct printk_info info; unsigned int line_count; -@@ -3374,16 +3348,16 @@ bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog, +@@ -3403,16 +3375,16 @@ bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog, prb_rec_init_rd(&r, &info, line, size); @@ -18415,7 +18421,7 @@ index ffd7f90b8..80c97bc3e 100644 &info, &line_count)) { goto out; } -@@ -3392,48 +3366,18 @@ bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog, +@@ -3421,48 +3393,18 @@ bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog, } @@ -18466,7 +18472,7 @@ index ffd7f90b8..80c97bc3e 100644 * @syslog: include the "<4>" prefixes * @buf: buffer to copy the line to * @size: maximum size of the buffer -@@ -3450,116 +3394,256 @@ EXPORT_SYMBOL_GPL(kmsg_dump_get_line); +@@ -3479,116 +3421,256 @@ EXPORT_SYMBOL_GPL(kmsg_dump_get_line); * A return value of FALSE indicates that there are no more records to * read. */ @@ -18509,7 +18515,7 @@ index ffd7f90b8..80c97bc3e 100644 + 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)) { @@ -18518,7 +18524,7 @@ index ffd7f90b8..80c97bc3e 100644 - 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, @@ -18641,14 +18647,14 @@ index ffd7f90b8..80c97bc3e 100644 + * 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. - * -- * The function is similar to kmsg_dump_rewind(), but grabs no locks. ++ * + * 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) @@ -19257,7 +19263,7 @@ index b1d7aef10..5e11e30f4 100644 This option boosts the priority of preempted RCU readers that block the current preemptible RCU grace period for too long. diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c -index 81e3550ea..6b47b4627 100644 +index 44a89a72e..3fa502e5e 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -101,8 +101,10 @@ static struct rcu_state rcu_state = { @@ -19289,10 +19295,10 @@ index 0e3821783..2beba0dfd 100644 #ifdef CONFIG_DEBUG_LOCK_ALLOC diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index fa71c7c51..24c390638 100644 +index 457eeebc7..bf88a1034 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -66,7 +66,11 @@ const_debug unsigned int sysctl_sched_features = +@@ -67,7 +67,11 @@ const_debug unsigned int sysctl_sched_features = * Number of tasks to iterate in a single balance run. * Limited because this is done with IRQs disabled. */ @@ -19304,7 +19310,7 @@ index fa71c7c51..24c390638 100644 /* * period over which we measure -rt task CPU usage in us. -@@ -859,9 +863,15 @@ static bool set_nr_if_polling(struct task_struct *p) +@@ -860,9 +864,15 @@ static bool set_nr_if_polling(struct task_struct *p) #endif #endif @@ -19322,7 +19328,7 @@ index fa71c7c51..24c390638 100644 /* * Atomically grab the task, if ->wake_q is !nil already it means -@@ -897,7 +907,13 @@ static bool __wake_q_add(struct wake_q_head *head, struct task_struct *task) +@@ -898,7 +908,13 @@ static bool __wake_q_add(struct wake_q_head *head, struct task_struct *task) */ void wake_q_add(struct wake_q_head *head, struct task_struct *task) { @@ -19337,7 +19343,7 @@ index fa71c7c51..24c390638 100644 get_task_struct(task); } -@@ -920,28 +936,39 @@ void wake_q_add(struct wake_q_head *head, struct task_struct *task) +@@ -921,28 +937,39 @@ void wake_q_add(struct wake_q_head *head, struct task_struct *task) */ void wake_q_add_safe(struct wake_q_head *head, struct task_struct *task) { @@ -19382,7 +19388,7 @@ index fa71c7c51..24c390638 100644 put_task_struct(task); } } -@@ -977,6 +1004,48 @@ void resched_curr(struct rq *rq) +@@ -978,6 +1005,48 @@ void resched_curr(struct rq *rq) trace_sched_wake_idle_without_ipi(cpu); } @@ -19431,7 +19437,7 @@ index fa71c7c51..24c390638 100644 void resched_cpu(int cpu) { struct rq *rq = cpu_rq(cpu); -@@ -2069,6 +2138,82 @@ void check_preempt_curr(struct rq *rq, struct task_struct *p, int flags) +@@ -2070,6 +2139,82 @@ void check_preempt_curr(struct rq *rq, struct task_struct *p, int flags) #ifdef CONFIG_SMP @@ -19514,7 +19520,7 @@ index fa71c7c51..24c390638 100644 /* * Per-CPU kthreads are allowed to run on !active && online CPUs, see * __set_cpus_allowed_ptr() and select_fallback_rq(). -@@ -2078,7 +2223,7 @@ static inline bool is_cpu_allowed(struct task_struct *p, int cpu) +@@ -2079,7 +2224,7 @@ static inline bool is_cpu_allowed(struct task_struct *p, int cpu) if (!cpumask_test_cpu(cpu, p->cpus_ptr)) return false; @@ -19523,7 +19529,7 @@ index fa71c7c51..24c390638 100644 return cpu_online(cpu); return cpu_active(cpu); -@@ -2123,8 +2268,21 @@ static struct rq *move_queued_task(struct rq *rq, struct rq_flags *rf, +@@ -2124,8 +2269,21 @@ static struct rq *move_queued_task(struct rq *rq, struct rq_flags *rf, } struct migration_arg { @@ -19547,7 +19553,7 @@ index fa71c7c51..24c390638 100644 }; /* -@@ -2157,15 +2315,17 @@ static struct rq *__migrate_task(struct rq *rq, struct rq_flags *rf, +@@ -2158,15 +2316,17 @@ static struct rq *__migrate_task(struct rq *rq, struct rq_flags *rf, static int migration_cpu_stop(void *data) { struct migration_arg *arg = data; @@ -19566,7 +19572,7 @@ index fa71c7c51..24c390638 100644 /* * We need to explicitly wake pending tasks before running * __migrate_task() such that we will not miss enforcing cpus_ptr -@@ -2175,21 +2335,121 @@ static int migration_cpu_stop(void *data) +@@ -2176,21 +2336,121 @@ static int migration_cpu_stop(void *data) raw_spin_lock(&p->pi_lock); rq_lock(rq, &rf); @@ -19640,11 +19646,11 @@ index fa71c7c51..24c390638 100644 + if (pending) + pending->stop_pending = false; + task_rq_unlock(rq, p, &rf); -+ -+ if (complete) -+ complete_all(&pending->done); - local_irq_enable(); ++ if (complete) ++ complete_all(&pending->done); ++ + return 0; +} + @@ -19691,7 +19697,7 @@ index fa71c7c51..24c390638 100644 return 0; } -@@ -2197,18 +2457,39 @@ static int migration_cpu_stop(void *data) +@@ -2198,18 +2458,39 @@ static int migration_cpu_stop(void *data) * sched_class::set_cpus_allowed must do the below, but is not required to * actually call this function. */ @@ -19734,7 +19740,7 @@ index fa71c7c51..24c390638 100644 queued = task_on_rq_queued(p); running = task_current(rq, p); -@@ -2224,7 +2505,7 @@ void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) +@@ -2225,7 +2506,7 @@ void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) if (running) put_prev_task(rq, p); @@ -19743,7 +19749,7 @@ index fa71c7c51..24c390638 100644 if (queued) enqueue_task(rq, p, ENQUEUE_RESTORE | ENQUEUE_NOCLOCK); -@@ -2232,6 +2513,222 @@ void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) +@@ -2233,6 +2514,222 @@ void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) set_next_task(rq, p); } @@ -19966,7 +19972,7 @@ index fa71c7c51..24c390638 100644 /* * 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 -@@ -2242,7 +2739,8 @@ void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) +@@ -2243,7 +2740,8 @@ void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) * call is not atomic; no spinlocks may be held. */ static int __set_cpus_allowed_ptr(struct task_struct *p, @@ -19976,7 +19982,7 @@ index fa71c7c51..24c390638 100644 { const struct cpumask *cpu_valid_mask = cpu_active_mask; unsigned int dest_cpu; -@@ -2253,9 +2751,14 @@ static int __set_cpus_allowed_ptr(struct task_struct *p, +@@ -2254,9 +2752,14 @@ static int __set_cpus_allowed_ptr(struct task_struct *p, rq = task_rq_lock(p, &rf); update_rq_clock(rq); @@ -19993,7 +19999,7 @@ index fa71c7c51..24c390638 100644 */ cpu_valid_mask = cpu_online_mask; } -@@ -2264,13 +2767,22 @@ static int __set_cpus_allowed_ptr(struct task_struct *p, +@@ -2265,13 +2768,22 @@ static int __set_cpus_allowed_ptr(struct task_struct *p, * Must re-check here, to close a race against __kthread_bind(), * sched_setaffinity() is not guaranteed to observe the flag. */ @@ -20019,7 +20025,7 @@ index fa71c7c51..24c390638 100644 /* * Picking a ~random cpu helps in cases where we are changing affinity -@@ -2283,7 +2795,7 @@ static int __set_cpus_allowed_ptr(struct task_struct *p, +@@ -2284,7 +2796,7 @@ static int __set_cpus_allowed_ptr(struct task_struct *p, goto out; } @@ -20028,7 +20034,7 @@ index fa71c7c51..24c390638 100644 if (p->flags & PF_KTHREAD) { /* -@@ -2295,23 +2807,8 @@ static int __set_cpus_allowed_ptr(struct task_struct *p, +@@ -2296,23 +2808,8 @@ static int __set_cpus_allowed_ptr(struct task_struct *p, p->nr_cpus_allowed != 1); } @@ -20053,7 +20059,7 @@ index fa71c7c51..24c390638 100644 out: task_rq_unlock(rq, p, &rf); -@@ -2320,7 +2817,7 @@ static int __set_cpus_allowed_ptr(struct task_struct *p, +@@ -2321,7 +2818,7 @@ out: int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask) { @@ -20062,7 +20068,7 @@ index fa71c7c51..24c390638 100644 } EXPORT_SYMBOL_GPL(set_cpus_allowed_ptr); -@@ -2361,6 +2858,8 @@ void set_task_cpu(struct task_struct *p, unsigned int new_cpu) +@@ -2362,6 +2859,8 @@ void set_task_cpu(struct task_struct *p, unsigned int new_cpu) * Clearly, migrating tasks to offline CPUs is a fairly daft thing. */ WARN_ON_ONCE(!cpu_online(new_cpu)); @@ -20071,7 +20077,7 @@ index fa71c7c51..24c390638 100644 #endif trace_sched_migrate_task(p, new_cpu); -@@ -2493,6 +2992,18 @@ int migrate_swap(struct task_struct *cur, struct task_struct *p, +@@ -2494,6 +2993,18 @@ out: } #endif /* CONFIG_NUMA_BALANCING */ @@ -20090,7 +20096,7 @@ index fa71c7c51..24c390638 100644 /* * wait_task_inactive - wait for a thread to unschedule. * -@@ -2537,7 +3048,7 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state) +@@ -2538,7 +3049,7 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state) * is actually now running somewhere else! */ while (task_running(rq, p)) { @@ -20099,7 +20105,7 @@ index fa71c7c51..24c390638 100644 return 0; cpu_relax(); } -@@ -2552,7 +3063,8 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state) +@@ -2553,7 +3064,8 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state) running = task_running(rq, p); queued = task_on_rq_queued(p); ncsw = 0; @@ -20109,7 +20115,7 @@ index fa71c7c51..24c390638 100644 ncsw = p->nvcsw | LONG_MIN; /* sets MSB */ task_rq_unlock(rq, p, &rf); -@@ -2586,7 +3098,7 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state) +@@ -2587,7 +3099,7 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state) ktime_t to = NSEC_PER_SEC / HZ; set_current_state(TASK_UNINTERRUPTIBLE); @@ -20118,7 +20124,7 @@ index fa71c7c51..24c390638 100644 continue; } -@@ -2691,6 +3203,12 @@ static int select_fallback_rq(int cpu, struct task_struct *p) +@@ -2692,6 +3204,12 @@ static int select_fallback_rq(int cpu, struct task_struct *p) } fallthrough; case possible: @@ -20131,7 +20137,7 @@ index fa71c7c51..24c390638 100644 do_set_cpus_allowed(p, cpu_possible_mask); state = fail; break; -@@ -2725,7 +3243,7 @@ int select_task_rq(struct task_struct *p, int cpu, int sd_flags, int wake_flags) +@@ -2726,7 +3244,7 @@ int select_task_rq(struct task_struct *p, int cpu, int sd_flags, int wake_flags) { lockdep_assert_held(&p->pi_lock); @@ -20140,7 +20146,7 @@ index fa71c7c51..24c390638 100644 cpu = p->sched_class->select_task_rq(p, cpu, sd_flags, wake_flags); else cpu = cpumask_any(p->cpus_ptr); -@@ -2748,6 +3266,7 @@ int select_task_rq(struct task_struct *p, int cpu, int sd_flags, int wake_flags) +@@ -2749,6 +3267,7 @@ int select_task_rq(struct task_struct *p, int cpu, int sd_flags, int wake_flags) void sched_set_stop_task(int cpu, struct task_struct *stop) { @@ -20148,7 +20154,7 @@ index fa71c7c51..24c390638 100644 struct sched_param param = { .sched_priority = MAX_RT_PRIO - 1 }; struct task_struct *old_stop = cpu_rq(cpu)->stop; -@@ -2763,6 +3282,20 @@ void sched_set_stop_task(int cpu, struct task_struct *stop) +@@ -2764,6 +3283,20 @@ void sched_set_stop_task(int cpu, struct task_struct *stop) sched_setscheduler_nocheck(stop, SCHED_FIFO, ¶m); stop->sched_class = &stop_sched_class; @@ -20169,7 +20175,7 @@ index fa71c7c51..24c390638 100644 } cpu_rq(cpu)->stop = stop; -@@ -2776,15 +3309,23 @@ void sched_set_stop_task(int cpu, struct task_struct *stop) +@@ -2777,15 +3310,23 @@ void sched_set_stop_task(int cpu, struct task_struct *stop) } } @@ -20196,7 +20202,7 @@ index fa71c7c51..24c390638 100644 static void ttwu_stat(struct task_struct *p, int cpu, int wake_flags) -@@ -3226,7 +3767,7 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) +@@ -3227,7 +3768,7 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) int cpu, success = 0; preempt_disable(); @@ -20205,7 +20211,7 @@ index fa71c7c51..24c390638 100644 /* * We're waking current, this means 'p->on_rq' and 'task_cpu(p) * == smp_processor_id()'. Together this means we can special -@@ -3256,8 +3797,26 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) +@@ -3257,8 +3798,26 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) */ raw_spin_lock_irqsave(&p->pi_lock, flags); smp_mb__after_spinlock(); @@ -20233,7 +20239,7 @@ index fa71c7c51..24c390638 100644 trace_sched_waking(p); -@@ -3446,6 +4005,18 @@ int wake_up_process(struct task_struct *p) +@@ -3447,6 +4006,18 @@ int wake_up_process(struct task_struct *p) } EXPORT_SYMBOL(wake_up_process); @@ -20252,7 +20258,7 @@ index fa71c7c51..24c390638 100644 int wake_up_state(struct task_struct *p, unsigned int state) { return try_to_wake_up(p, state, 0); -@@ -3499,6 +4070,7 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p) +@@ -3500,6 +4071,7 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p) init_numa_balancing(clone_flags, p); #ifdef CONFIG_SMP p->wake_entry.u_flags = CSD_TYPE_TTWU; @@ -20260,7 +20266,7 @@ index fa71c7c51..24c390638 100644 #endif #ifdef CONFIG_BPF_SCHED p->tag = 0; -@@ -3718,6 +4290,9 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p) +@@ -3719,6 +4291,9 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p) p->on_cpu = 0; #endif init_task_preempt_count(p); @@ -20270,7 +20276,7 @@ index fa71c7c51..24c390638 100644 #ifdef CONFIG_SMP plist_node_init(&p->pushable_tasks, MAX_PRIO); RB_CLEAR_NODE(&p->pushable_dl_tasks); -@@ -3888,60 +4463,145 @@ __fire_sched_out_preempt_notifiers(struct task_struct *curr, +@@ -3889,60 +4464,145 @@ __fire_sched_out_preempt_notifiers(struct task_struct *curr, notifier->ops->sched_out(notifier, next); } @@ -20454,7 +20460,7 @@ index fa71c7c51..24c390638 100644 static inline void prepare_lock_switch(struct rq *rq, struct task_struct *next, struct rq_flags *rf) { -@@ -3982,6 +4642,22 @@ static inline void finish_lock_switch(struct rq *rq) +@@ -3983,6 +4643,22 @@ static inline void finish_lock_switch(struct rq *rq) # define finish_arch_post_lock_switch() do { } while (0) #endif @@ -20477,7 +20483,7 @@ index fa71c7c51..24c390638 100644 /** * prepare_task_switch - prepare to switch tasks * @rq: the runqueue preparing to switch -@@ -4004,6 +4680,7 @@ prepare_task_switch(struct rq *rq, struct task_struct *prev, +@@ -4005,6 +4681,7 @@ prepare_task_switch(struct rq *rq, struct task_struct *prev, perf_event_task_sched_out(prev, next); rseq_preempt(prev); fire_sched_out_preempt_notifiers(prev, next); @@ -20485,7 +20491,7 @@ index fa71c7c51..24c390638 100644 prepare_task(next); prepare_arch_switch(next); } -@@ -4071,6 +4748,7 @@ static struct rq *finish_task_switch(struct task_struct *prev) +@@ -4073,6 +4750,7 @@ static struct rq *finish_task_switch(struct task_struct *prev) finish_lock_switch(rq); finish_arch_post_lock_switch(); kcov_finish_switch(current); @@ -20493,7 +20499,7 @@ index fa71c7c51..24c390638 100644 fire_sched_in_preempt_notifiers(current); /* -@@ -4087,63 +4765,19 @@ static struct rq *finish_task_switch(struct task_struct *prev) +@@ -4089,63 +4767,19 @@ static struct rq *finish_task_switch(struct task_struct *prev) */ if (mm) { membarrier_mm_sync_core_before_usermode(mm); @@ -20558,7 +20564,7 @@ index fa71c7c51..24c390638 100644 /** * schedule_tail - first thing a freshly forked thread must call. -@@ -4164,7 +4798,6 @@ asmlinkage __visible void schedule_tail(struct task_struct *prev) +@@ -4166,7 +4800,6 @@ asmlinkage __visible void schedule_tail(struct task_struct *prev) */ rq = finish_task_switch(prev); @@ -20566,7 +20572,7 @@ index fa71c7c51..24c390638 100644 preempt_enable(); if (current->set_child_tid) -@@ -5325,7 +5958,7 @@ pick_next_task(struct rq *rq, struct task_struct *prev, struct rq_flags *rf) +@@ -5327,7 +5960,7 @@ pick_next_task(struct rq *rq, struct task_struct *prev, struct rq_flags *rf) * * WARNING: must be called with preemption disabled! */ @@ -20575,7 +20581,7 @@ index fa71c7c51..24c390638 100644 { struct task_struct *prev, *next; unsigned long *switch_count; -@@ -5378,7 +6011,7 @@ static void __sched notrace __schedule(bool preempt) +@@ -5380,7 +6013,7 @@ static void __sched notrace __schedule(bool preempt) * - ptrace_{,un}freeze_traced() can change ->state underneath us. */ prev_state = prev->state; @@ -20584,7 +20590,7 @@ index fa71c7c51..24c390638 100644 if (signal_pending_state(prev_state, prev)) { prev->state = TASK_RUNNING; } else { -@@ -5413,6 +6046,7 @@ static void __sched notrace __schedule(bool preempt) +@@ -5415,6 +6048,7 @@ static void __sched notrace __schedule(bool preempt) next = pick_next_task(rq, prev, &rf); clear_tsk_need_resched(prev); @@ -20592,7 +20598,7 @@ index fa71c7c51..24c390638 100644 clear_preempt_need_resched(); if (likely(prev != next)) { -@@ -5438,6 +6072,7 @@ static void __sched notrace __schedule(bool preempt) +@@ -5440,6 +6074,7 @@ static void __sched notrace __schedule(bool preempt) */ ++*switch_count; @@ -20600,7 +20606,7 @@ index fa71c7c51..24c390638 100644 psi_sched_switch(prev, next, !task_on_rq_queued(prev)); trace_sched_switch(preempt, prev, next); -@@ -5446,10 +6081,11 @@ static void __sched notrace __schedule(bool preempt) +@@ -5448,10 +6083,11 @@ static void __sched notrace __schedule(bool preempt) rq = context_switch(rq, prev, next, &rf); } else { rq->clock_update_flags &= ~(RQCF_ACT_SKIP|RQCF_REQ_SKIP); @@ -20615,7 +20621,7 @@ index fa71c7c51..24c390638 100644 } void __noreturn do_task_dead(void) -@@ -5460,7 +6096,7 @@ void __noreturn do_task_dead(void) +@@ -5462,7 +6098,7 @@ void __noreturn do_task_dead(void) /* Tell freezer to ignore us: */ current->flags |= PF_NOFREEZE; @@ -20624,7 +20630,7 @@ index fa71c7c51..24c390638 100644 BUG(); /* Avoid "noreturn function does return" - but don't continue if BUG() is a NOP: */ -@@ -5493,9 +6129,6 @@ static inline void sched_submit_work(struct task_struct *tsk) +@@ -5495,9 +6131,6 @@ static inline void sched_submit_work(struct task_struct *tsk) preempt_enable_no_resched(); } @@ -20634,7 +20640,7 @@ index fa71c7c51..24c390638 100644 /* * If we are going to sleep and we have plugged IO queued, * make sure to submit it to avoid deadlocks. -@@ -5521,7 +6154,7 @@ asmlinkage __visible void __sched schedule(void) +@@ -5523,7 +6156,7 @@ asmlinkage __visible void __sched schedule(void) sched_submit_work(tsk); do { preempt_disable(); @@ -20643,7 +20649,7 @@ index fa71c7c51..24c390638 100644 sched_preempt_enable_no_resched(); } while (need_resched()); sched_update_worker(tsk); -@@ -5549,7 +6182,7 @@ void __sched schedule_idle(void) +@@ -5551,7 +6184,7 @@ void __sched schedule_idle(void) */ WARN_ON_ONCE(current->state); do { @@ -20652,7 +20658,7 @@ index fa71c7c51..24c390638 100644 } while (need_resched()); } -@@ -5602,7 +6235,7 @@ static void __sched notrace preempt_schedule_common(void) +@@ -5604,7 +6237,7 @@ static void __sched notrace preempt_schedule_common(void) */ preempt_disable_notrace(); preempt_latency_start(1); @@ -20661,7 +20667,7 @@ index fa71c7c51..24c390638 100644 preempt_latency_stop(1); preempt_enable_no_resched_notrace(); -@@ -5613,6 +6246,30 @@ static void __sched notrace preempt_schedule_common(void) +@@ -5615,6 +6248,30 @@ static void __sched notrace preempt_schedule_common(void) } while (need_resched()); } @@ -20692,7 +20698,7 @@ index fa71c7c51..24c390638 100644 #ifdef CONFIG_PREEMPTION /* * This is the entry point to schedule() from in-kernel preemption -@@ -5626,12 +6283,26 @@ asmlinkage __visible void __sched notrace preempt_schedule(void) +@@ -5628,12 +6285,26 @@ asmlinkage __visible void __sched notrace preempt_schedule(void) */ if (likely(!preemptible())) return; @@ -20720,7 +20726,7 @@ index fa71c7c51..24c390638 100644 #ifdef CONFIG_PREEMPT_DYNAMIC DEFINE_STATIC_CALL(preempt_schedule, __preempt_schedule_func); EXPORT_STATIC_CALL(preempt_schedule); -@@ -5659,6 +6330,9 @@ asmlinkage __visible void __sched notrace preempt_schedule_notrace(void) +@@ -5661,6 +6332,9 @@ asmlinkage __visible void __sched notrace preempt_schedule_notrace(void) if (likely(!preemptible())) return; @@ -20730,7 +20736,7 @@ index fa71c7c51..24c390638 100644 do { /* * Because the function tracer can trace preempt_count_sub() -@@ -5681,7 +6355,7 @@ asmlinkage __visible void __sched notrace preempt_schedule_notrace(void) +@@ -5683,7 +6357,7 @@ asmlinkage __visible void __sched notrace preempt_schedule_notrace(void) * an infinite recursion. */ prev_ctx = exception_enter(); @@ -20739,7 +20745,7 @@ index fa71c7c51..24c390638 100644 exception_exit(prev_ctx); preempt_latency_stop(1); -@@ -5899,7 +6573,7 @@ asmlinkage __visible void __sched preempt_schedule_irq(void) +@@ -5901,7 +6575,7 @@ asmlinkage __visible void __sched preempt_schedule_irq(void) do { preempt_disable(); local_irq_enable(); @@ -20748,7 +20754,7 @@ index fa71c7c51..24c390638 100644 local_irq_disable(); sched_preempt_enable_no_resched(); } while (need_resched()); -@@ -6065,9 +6739,11 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task) +@@ -6067,9 +6741,11 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task) out_unlock: /* Avoid rq from going away on us: */ preempt_disable(); @@ -20762,7 +20768,7 @@ index fa71c7c51..24c390638 100644 preempt_enable(); } #else -@@ -6310,6 +6986,7 @@ static int __sched_setscheduler(struct task_struct *p, +@@ -6312,6 +6988,7 @@ static int __sched_setscheduler(struct task_struct *p, int oldpolicy = -1, policy = attr->sched_policy; int retval, oldprio, newprio, queued, running; const struct sched_class *prev_class; @@ -20770,7 +20776,7 @@ index fa71c7c51..24c390638 100644 struct rq_flags rf; int reset_on_fork; int queue_flags = DEQUEUE_SAVE | DEQUEUE_MOVE | DEQUEUE_NOCLOCK; -@@ -6571,6 +7248,7 @@ static int __sched_setscheduler(struct task_struct *p, +@@ -6573,6 +7250,7 @@ change: /* Avoid rq from going away on us: */ preempt_disable(); @@ -20778,7 +20784,7 @@ index fa71c7c51..24c390638 100644 task_rq_unlock(rq, p, &rf); if (pi) { -@@ -6580,7 +7258,7 @@ static int __sched_setscheduler(struct task_struct *p, +@@ -6582,7 +7260,7 @@ change: } /* Run balance callbacks after we've adjusted the PI chain: */ @@ -20787,7 +20793,7 @@ index fa71c7c51..24c390638 100644 preempt_enable(); return 0; -@@ -7075,7 +7753,7 @@ long sched_setaffinity(pid_t pid, const struct cpumask *in_mask) +@@ -7077,7 +7755,7 @@ long sched_setaffinity(pid_t pid, const struct cpumask *in_mask) } #endif again: @@ -20796,7 +20802,7 @@ index fa71c7c51..24c390638 100644 if (!retval) { cpuset_cpus_allowed(p, cpus_allowed); -@@ -7701,7 +8379,7 @@ void __init init_idle(struct task_struct *idle, int cpu) +@@ -7703,7 +8381,7 @@ void __init init_idle(struct task_struct *idle, int cpu) * * And since this is boot we can forgo the serialization. */ @@ -20805,7 +20811,7 @@ index fa71c7c51..24c390638 100644 #endif /* * We're having a chicken and egg problem, even though we are -@@ -7728,7 +8406,9 @@ void __init init_idle(struct task_struct *idle, int cpu) +@@ -7730,7 +8408,9 @@ void __init init_idle(struct task_struct *idle, int cpu) /* Set the preempt count _outside_ the spinlocks! */ init_idle_preempt_count(idle, cpu); @@ -20816,7 +20822,7 @@ index fa71c7c51..24c390638 100644 /* * The idle tasks have their own, simple scheduling class: */ -@@ -7825,6 +8505,7 @@ void sched_setnuma(struct task_struct *p, int nid) +@@ -7827,6 +8507,7 @@ void sched_setnuma(struct task_struct *p, int nid) #endif /* CONFIG_NUMA_BALANCING */ #ifdef CONFIG_HOTPLUG_CPU @@ -20824,7 +20830,7 @@ index fa71c7c51..24c390638 100644 /* * Ensure that the idle task is using init_mm right before its CPU goes * offline. -@@ -7844,119 +8525,126 @@ void idle_task_exit(void) +@@ -7846,119 +8527,126 @@ void idle_task_exit(void) /* finish_cpu(), as ran on the BP, will clean up the active_mm state */ } @@ -21028,12 +21034,12 @@ index fa71c7c51..24c390638 100644 +static inline void balance_push(struct rq *rq) +{ +} - -- rq->stop = stop; ++ +static inline void balance_push_set(int cpu, bool on) +{ +} -+ + +- rq->stop = stop; +static inline void balance_hotplug_wait(void) +{ } @@ -21041,16 +21047,17 @@ index fa71c7c51..24c390638 100644 #endif /* CONFIG_HOTPLUG_CPU */ void set_rq_online(struct rq *rq) -@@ -8044,6 +8732,8 @@ int sched_cpu_activate(unsigned int cpu) +@@ -8061,7 +8749,8 @@ int sched_cpu_activate(unsigned int cpu) + { struct rq *rq = cpu_rq(cpu); struct rq_flags rf; - -+ balance_push_set(cpu, false); -+ - #ifdef CONFIG_SCHED_SMT +- ++ ++ balance_push_set(cpu, false); /* * When going up, increment the number of cores with SMT present. -@@ -8080,6 +8770,8 @@ int sched_cpu_activate(unsigned int cpu) + */ +@@ -8097,6 +8786,8 @@ int sched_cpu_activate(unsigned int cpu) int sched_cpu_deactivate(unsigned int cpu) { @@ -21059,10 +21066,10 @@ index fa71c7c51..24c390638 100644 int ret; set_cpu_active(cpu, false); -@@ -8092,6 +8784,16 @@ int sched_cpu_deactivate(unsigned int cpu) +@@ -8108,6 +8799,15 @@ int sched_cpu_deactivate(unsigned int cpu) + * Do sync before park smpboot threads to take care the rcu boost case. */ synchronize_rcu(); - + balance_push_set(cpu, true); + + rq_lock_irqsave(rq, &rf); @@ -21072,11 +21079,10 @@ index fa71c7c51..24c390638 100644 + set_rq_offline(rq); + } + rq_unlock_irqrestore(rq, &rf); -+ - #ifdef CONFIG_SCHED_SMT + /* * When going down, decrement the number of cores with SMT present. -@@ -8136,6 +8838,41 @@ int sched_cpu_starting(unsigned int cpu) +@@ -8151,6 +8851,41 @@ int sched_cpu_starting(unsigned int cpu) } #ifdef CONFIG_HOTPLUG_CPU @@ -21118,7 +21124,7 @@ index fa71c7c51..24c390638 100644 int sched_cpu_dying(unsigned int cpu) { struct rq *rq = cpu_rq(cpu); -@@ -8145,12 +8882,7 @@ int sched_cpu_dying(unsigned int cpu) +@@ -8160,12 +8895,7 @@ int sched_cpu_dying(unsigned int cpu) sched_tick_stop(cpu); rq_lock_irqsave(rq, &rf); @@ -21132,7 +21138,7 @@ index fa71c7c51..24c390638 100644 rq_unlock_irqrestore(rq, &rf); calc_load_migrate(rq); -@@ -8371,6 +9103,9 @@ void __init sched_init(void) +@@ -8399,6 +9129,9 @@ void __init sched_init(void) INIT_CSD(&rq->nohz_csd, nohz_csd_func, rq); #endif @@ -21142,7 +21148,7 @@ index fa71c7c51..24c390638 100644 #endif /* CONFIG_SMP */ hrtick_rq_init(rq); atomic_set(&rq->nr_iowait, 0); -@@ -8421,7 +9156,7 @@ void __init sched_init(void) +@@ -8449,7 +9182,7 @@ void __init sched_init(void) #ifdef CONFIG_DEBUG_ATOMIC_SLEEP static inline int preempt_count_equals(int preempt_offset) { @@ -21151,7 +21157,7 @@ index fa71c7c51..24c390638 100644 return (nested == preempt_offset); } -@@ -8518,6 +9253,39 @@ void __cant_sleep(const char *file, int line, int preempt_offset) +@@ -8546,6 +9279,39 @@ void __cant_sleep(const char *file, int line, int preempt_offset) add_taint(TAINT_WARN, LOCKDEP_STILL_OK); } EXPORT_SYMBOL_GPL(__cant_sleep); @@ -21232,7 +21238,7 @@ index 0033731a0..11c4df201 100644 /* * We have to ensure that we have at least one bit diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c -index ca0eef7d3..02a5aa60f 100644 +index f03b3af2f..e1ffc9caf 100644 --- a/kernel/sched/cputime.c +++ b/kernel/sched/cputime.c @@ -44,12 +44,13 @@ static void irqtime_account_delta(struct irqtime *irqtime, u64 delta, @@ -21311,7 +21317,7 @@ index ca0eef7d3..02a5aa60f 100644 void cputime_adjust(struct task_cputime *curr, struct prev_cputime *prev, u64 *ut, u64 *st) diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c -index 71b55d9de..e89bba62a 100644 +index cff58dba2..f89cbba9b 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -552,7 +552,7 @@ static int push_dl_task(struct rq *rq); @@ -21323,7 +21329,7 @@ index 71b55d9de..e89bba62a 100644 } static DEFINE_PER_CPU(struct callback_head, dl_push_head); -@@ -1913,7 +1913,7 @@ static void task_fork_dl(struct task_struct *p) +@@ -1917,7 +1917,7 @@ static void task_fork_dl(struct task_struct *p) static int pick_dl_task(struct rq *rq, struct task_struct *p, int cpu) { if (!task_running(rq, p) && @@ -21332,7 +21338,7 @@ index 71b55d9de..e89bba62a 100644 return 1; return 0; } -@@ -2003,8 +2003,8 @@ static int find_later_rq(struct task_struct *task) +@@ -2007,8 +2007,8 @@ static int find_later_rq(struct task_struct *task) return this_cpu; } @@ -21343,7 +21349,7 @@ index 71b55d9de..e89bba62a 100644 /* * Last chance: if a CPU being in both later_mask * and current sd span is valid, that becomes our -@@ -2026,7 +2026,7 @@ static int find_later_rq(struct task_struct *task) +@@ -2030,7 +2030,7 @@ static int find_later_rq(struct task_struct *task) if (this_cpu != -1) return this_cpu; @@ -21352,7 +21358,7 @@ index 71b55d9de..e89bba62a 100644 if (cpu < nr_cpu_ids) return cpu; -@@ -2091,7 +2091,7 @@ static struct rq *find_lock_later_rq(struct task_struct *task, struct rq *rq) +@@ -2095,7 +2095,7 @@ static struct rq *find_lock_later_rq(struct task_struct *task, struct rq *rq) */ next_task = pick_next_pushable_dl_task(rq); if (unlikely(next_task != task || @@ -21361,7 +21367,7 @@ index 71b55d9de..e89bba62a 100644 double_unlock_balance(rq, later_rq); later_rq = NULL; break; -@@ -2135,6 +2135,9 @@ static int push_dl_task(struct rq *rq) +@@ -2139,6 +2139,9 @@ static int push_dl_task(struct rq *rq) return 0; retry: @@ -21371,7 +21377,7 @@ index 71b55d9de..e89bba62a 100644 if (WARN_ON(next_task == rq->curr)) return 0; -@@ -2212,7 +2215,7 @@ static void push_dl_tasks(struct rq *rq) +@@ -2216,7 +2219,7 @@ static void push_dl_tasks(struct rq *rq) static void pull_dl_task(struct rq *this_rq) { int this_cpu = this_rq->cpu, cpu; @@ -21380,7 +21386,7 @@ index 71b55d9de..e89bba62a 100644 bool resched = false; struct rq *src_rq; u64 dmin = LONG_MAX; -@@ -2242,6 +2245,7 @@ static void pull_dl_task(struct rq *this_rq) +@@ -2246,6 +2249,7 @@ static void pull_dl_task(struct rq *this_rq) continue; /* Might drop this_rq->lock */ @@ -21388,7 +21394,7 @@ index 71b55d9de..e89bba62a 100644 double_lock_balance(this_rq, src_rq); /* -@@ -2273,17 +2277,28 @@ static void pull_dl_task(struct rq *this_rq) +@@ -2277,17 +2281,28 @@ static void pull_dl_task(struct rq *this_rq) src_rq->curr->dl.deadline)) goto skip; @@ -21423,7 +21429,7 @@ index 71b55d9de..e89bba62a 100644 } if (resched) -@@ -2307,7 +2322,8 @@ static void task_woken_dl(struct rq *rq, struct task_struct *p) +@@ -2311,7 +2326,8 @@ static void task_woken_dl(struct rq *rq, struct task_struct *p) } static void set_cpus_allowed_dl(struct task_struct *p, @@ -21433,7 +21439,7 @@ index 71b55d9de..e89bba62a 100644 { struct root_domain *src_rd; struct rq *rq; -@@ -2336,7 +2352,7 @@ static void set_cpus_allowed_dl(struct task_struct *p, +@@ -2340,7 +2356,7 @@ static void set_cpus_allowed_dl(struct task_struct *p, raw_spin_unlock(&src_dl_b->lock); } @@ -21442,7 +21448,7 @@ index 71b55d9de..e89bba62a 100644 } /* Assumes rq->lock is held */ -@@ -2544,6 +2560,7 @@ const struct sched_class dl_sched_class +@@ -2548,6 +2564,7 @@ const struct sched_class dl_sched_class .rq_online = rq_online_dl, .rq_offline = rq_offline_dl, .task_woken = task_woken_dl, @@ -21451,10 +21457,10 @@ index 71b55d9de..e89bba62a 100644 .task_tick = task_tick_dl, diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index f39e75475..f11af1d78 100644 +index a518d636f..7433aa10e 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c -@@ -4718,7 +4718,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) +@@ -4915,7 +4915,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) #endif if (delta_exec > ideal_runtime) { @@ -21463,7 +21469,7 @@ index f39e75475..f11af1d78 100644 /* * The current task ran long enough, ensure it doesn't get * re-elected due to buddy favours. -@@ -4742,7 +4742,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) +@@ -4939,7 +4939,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) return; if (delta > ideal_runtime) @@ -21472,7 +21478,7 @@ index f39e75475..f11af1d78 100644 } static void -@@ -4885,7 +4885,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) +@@ -5082,7 +5082,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) * validating it and just reschedule. */ if (queued) { @@ -21481,7 +21487,7 @@ index f39e75475..f11af1d78 100644 return; } /* -@@ -5034,7 +5034,7 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec) +@@ -5231,7 +5231,7 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec) * hierarchy can be throttled */ if (!assign_cfs_rq_runtime(cfs_rq) && likely(cfs_rq->curr)) @@ -21490,7 +21496,7 @@ index f39e75475..f11af1d78 100644 } static __always_inline -@@ -6282,7 +6282,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) +@@ -6545,7 +6545,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) if (delta < 0) { if (rq->curr == p) @@ -21499,7 +21505,7 @@ index f39e75475..f11af1d78 100644 return; } hrtick_start(rq, delta); -@@ -8270,7 +8270,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ +@@ -8575,7 +8575,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ return; preempt: @@ -21508,7 +21514,7 @@ index f39e75475..f11af1d78 100644 /* * Only set the backward buddy when the current task is still * on the rq. This can happen when a wakeup gets interleaved -@@ -13161,7 +13161,7 @@ static void task_fork_fair(struct task_struct *p) +@@ -13534,7 +13534,7 @@ static void task_fork_fair(struct task_struct *p) * 'current' within the tree based on its new key value. */ swap(curr->vruntime, se->vruntime); @@ -21517,7 +21523,7 @@ index f39e75475..f11af1d78 100644 } se->vruntime -= cfs_rq->min_vruntime; -@@ -13188,7 +13188,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) +@@ -13561,7 +13561,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) */ if (rq->curr == p) { if (p->prio > oldprio) @@ -21527,7 +21533,7 @@ index f39e75475..f11af1d78 100644 check_preempt_curr(rq, p, 0); } diff --git a/kernel/sched/features.h b/kernel/sched/features.h -index 76fade025..0a20427ef 100644 +index fb885b20b..51fd2ba3a 100644 --- a/kernel/sched/features.h +++ b/kernel/sched/features.h @@ -45,11 +45,19 @@ SCHED_FEAT(DOUBLE_TICK, false) @@ -21551,7 +21557,7 @@ index 76fade025..0a20427ef 100644 /* * When doing wakeups, attempt to limit superfluous scans of the LLC domain. diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c -index 52062b910..7488bcf38 100644 +index ddbc857a2..9dc62a542 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -270,7 +270,7 @@ static void pull_rt_task(struct rq *this_rq); @@ -21650,7 +21656,7 @@ index 52062b910..7488bcf38 100644 if (WARN_ON(next_task == rq->curr)) return 0; -@@ -1949,12 +1982,10 @@ static int push_rt_task(struct rq *rq) +@@ -1949,12 +1982,10 @@ retry: deactivate_task(rq, next_task, 0); set_task_cpu(next_task, lowest_rq->cpu); activate_task(lowest_rq, next_task, 0); @@ -21664,7 +21670,7 @@ index 52062b910..7488bcf38 100644 out: put_task_struct(next_task); -@@ -1964,7 +1995,7 @@ static int push_rt_task(struct rq *rq) +@@ -1964,7 +1995,7 @@ out: static void push_rt_tasks(struct rq *rq) { /* push_rt_task will return true if it moved an RT */ @@ -21746,10 +21752,10 @@ index 52062b910..7488bcf38 100644 .task_tick = task_tick_rt, diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index e6f934af7..eefb192ec 100644 +index fe6342305..269837135 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h -@@ -1095,6 +1095,7 @@ struct rq { +@@ -1112,6 +1112,7 @@ struct rq { unsigned long cpu_capacity_orig; struct callback_head *balance_callback; @@ -21757,7 +21763,7 @@ index e6f934af7..eefb192ec 100644 unsigned char nohz_idle_balance; unsigned char idle_balance; -@@ -1125,6 +1126,10 @@ struct rq { +@@ -1142,6 +1143,10 @@ struct rq { /* This is used to determine avg_idle's max value */ u64 max_idle_balance_cost; @@ -21768,7 +21774,7 @@ index e6f934af7..eefb192ec 100644 #endif /* CONFIG_SMP */ #ifdef CONFIG_IRQ_TIME_ACCOUNTING -@@ -1198,6 +1203,11 @@ struct rq { +@@ -1215,6 +1220,11 @@ struct rq { unsigned char core_forceidle; unsigned int core_forceidle_seq; #endif @@ -21780,7 +21786,7 @@ index e6f934af7..eefb192ec 100644 #if defined(CONFIG_QOS_SCHED_PRIO_LB) && !defined(__GENKSYMS__) struct list_head cfs_offline_tasks; -@@ -1237,6 +1247,16 @@ static inline int cpu_of(struct rq *rq) +@@ -1254,6 +1264,16 @@ static inline int cpu_of(struct rq *rq) return 0; #endif } @@ -21797,7 +21803,7 @@ index e6f934af7..eefb192ec 100644 #ifdef CONFIG_QOS_SCHED #ifdef CONFIG_QOS_SCHED_MULTILEVEL -@@ -1654,6 +1674,9 @@ static inline void rq_pin_lock(struct rq *rq, struct rq_flags *rf) +@@ -1671,6 +1691,9 @@ static inline void rq_pin_lock(struct rq *rq, struct rq_flags *rf) rq->clock_update_flags &= (RQCF_REQ_SKIP|RQCF_ACT_SKIP); rf->clock_update_flags = 0; #endif @@ -21807,7 +21813,7 @@ index e6f934af7..eefb192ec 100644 } static inline void rq_unpin_lock(struct rq *rq, struct rq_flags *rf) -@@ -1825,6 +1848,9 @@ init_numa_balancing(unsigned long clone_flags, struct task_struct *p) +@@ -1851,6 +1874,9 @@ init_numa_balancing(unsigned long clone_flags, struct task_struct *p) #ifdef CONFIG_SMP @@ -21817,7 +21823,7 @@ index e6f934af7..eefb192ec 100644 static inline void queue_balance_callback(struct rq *rq, struct callback_head *head, -@@ -1832,12 +1858,13 @@ queue_balance_callback(struct rq *rq, +@@ -1858,12 +1884,13 @@ queue_balance_callback(struct rq *rq, { lockdep_assert_rq_held(rq); @@ -21832,7 +21838,7 @@ index e6f934af7..eefb192ec 100644 } #define rcu_dereference_check_sched_domain(p) \ -@@ -2163,7 +2190,7 @@ static inline int task_on_rq_migrating(struct task_struct *p) +@@ -2189,7 +2216,7 @@ static inline int task_on_rq_migrating(struct task_struct *p) #define WF_SYNC 0x01 /* Waker goes to sleep after wakeup */ #define WF_FORK 0x02 /* Child wakeup after fork */ #define WF_MIGRATED 0x04 /* Internal use, task got migrated */ @@ -21841,7 +21847,7 @@ index e6f934af7..eefb192ec 100644 /* * To aid in avoiding the subversion of "niceness" due to uneven distribution * of tasks with abnormal "nice" values across CPUs the contribution that -@@ -2244,10 +2271,13 @@ struct sched_class { +@@ -2270,10 +2297,13 @@ struct sched_class { void (*task_woken)(struct rq *this_rq, struct task_struct *task); void (*set_cpus_allowed)(struct task_struct *p, @@ -21856,7 +21862,7 @@ index e6f934af7..eefb192ec 100644 #endif void (*task_tick)(struct rq *rq, struct task_struct *p, int queued); -@@ -2337,13 +2367,38 @@ static inline bool sched_fair_runnable(struct rq *rq) +@@ -2363,13 +2393,38 @@ static inline bool sched_fair_runnable(struct rq *rq) 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); @@ -21896,7 +21902,7 @@ index e6f934af7..eefb192ec 100644 #endif -@@ -2387,6 +2442,15 @@ extern void reweight_task(struct task_struct *p, int prio); +@@ -2413,6 +2468,15 @@ extern void reweight_task(struct task_struct *p, int prio); extern void resched_curr(struct rq *rq); extern void resched_cpu(int cpu); @@ -21925,7 +21931,7 @@ index e1c655f92..f230b1ac7 100644 list_splice_init(&q->task_list, &tmp); while (!list_empty(&tmp)) { diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c -index e7413d6dd..9e877e033 100644 +index 4bf575e4e..77f50c703 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -528,7 +528,8 @@ static int init_rootdomain(struct root_domain *rd) @@ -22052,7 +22058,7 @@ index eed7a3a38..9769b462e 100644 /* * Flush all pending signals for this kthread. */ -@@ -596,7 +654,7 @@ static void collect_signal(int sig, struct sigpending *list, kernel_siginfo_t *i +@@ -596,7 +654,7 @@ still_pending: (info->si_code == SI_TIMER) && (info->si_sys_private); @@ -22133,10 +22139,10 @@ index eed7a3a38..9769b462e 100644 cgroup_leave_frozen(true); } else { diff --git a/kernel/smp.c b/kernel/smp.c -index 4b13a7ef6..e5cbabb4a 100644 +index d9ba6935f..cf034c161 100644 --- a/kernel/smp.c +++ b/kernel/smp.c -@@ -487,8 +487,18 @@ void flush_smp_call_function_from_idle(void) +@@ -488,8 +488,18 @@ void flush_smp_call_function_from_idle(void) local_irq_save(flags); flush_smp_call_function_queue(true); @@ -22493,7 +22499,7 @@ index 4196b9f84..aebf2d468 100644 restart: /* Reset the pending bitmask before enabling irqs */ -@@ -307,8 +566,10 @@ asmlinkage __visible void __softirq_entry __do_softirq(void) +@@ -307,8 +566,10 @@ restart: pending >>= softirq_bit; } @@ -22505,7 +22511,7 @@ index 4196b9f84..aebf2d468 100644 local_irq_disable(); pending = local_softirq_pending(); -@@ -320,29 +581,10 @@ asmlinkage __visible void __softirq_entry __do_softirq(void) +@@ -320,29 +581,10 @@ restart: wakeup_softirqd(); } @@ -22790,7 +22796,7 @@ index d0bf6da49..7a74b501a 100644 return cpu_stop_queue_work(cpu, work_buf); } -@@ -500,6 +517,8 @@ static void cpu_stopper_thread(unsigned int cpu) +@@ -500,6 +517,8 @@ repeat: int ret; /* cpu stop callbacks must not sleep, make in_atomic() == T */ @@ -22799,7 +22805,7 @@ index d0bf6da49..7a74b501a 100644 preempt_count_inc(); ret = fn(arg); if (done) { -@@ -508,6 +527,8 @@ static void cpu_stopper_thread(unsigned int cpu) +@@ -508,6 +527,8 @@ repeat: cpu_stop_signal_done(done); } preempt_count_dec(); @@ -22809,7 +22815,7 @@ index d0bf6da49..7a74b501a 100644 "cpu_stop: %ps(%p) leaked preempt count\n", fn, arg); goto repeat; diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c -index ede09dda3..9dcc62155 100644 +index 0aebb88f1..7bc5b47cd 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -2054,6 +2054,36 @@ SYSCALL_DEFINE2(nanosleep_time32, struct old_timespec32 __user *, rqtp, @@ -22850,10 +22856,10 @@ index ede09dda3..9dcc62155 100644 * Functions related to boot-time initialization: */ diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c -index f50dc8f36..401d8e9ee 100644 +index d6dcce984..1a98eca9e 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c -@@ -1029,7 +1029,7 @@ static bool can_stop_idle_tick(int cpu, struct tick_sched *ts) +@@ -1031,7 +1031,7 @@ static bool can_stop_idle_tick(int cpu, struct tick_sched *ts) if (unlikely(local_softirq_pending())) { static int ratelimit; @@ -22889,10 +22895,10 @@ index c1b52dab3..101a73eea 100644 do { ret = __try_to_del_timer_sync(timer, shutdown); diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c -index 689c8a0f7..74383d48d 100644 +index a470950b8..5d90301ad 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c -@@ -2589,60 +2589,43 @@ enum print_line_t trace_handle_return(struct trace_seq *s) +@@ -2603,60 +2603,43 @@ enum print_line_t trace_handle_return(struct trace_seq *s) } EXPORT_SYMBOL_GPL(trace_handle_return); @@ -22972,7 +22978,7 @@ index 689c8a0f7..74383d48d 100644 } struct ring_buffer_event * -@@ -3844,14 +3827,17 @@ unsigned long trace_total_entries(struct trace_array *tr) +@@ -3858,14 +3841,17 @@ unsigned long trace_total_entries(struct trace_array *tr) static void print_lat_help_header(struct seq_file *m) { @@ -22998,7 +23004,7 @@ index 689c8a0f7..74383d48d 100644 } static void print_event_info(struct array_buffer *buf, struct seq_file *m) -@@ -3885,13 +3871,16 @@ static void print_func_help_header_irq(struct array_buffer *buf, struct seq_file +@@ -3899,13 +3885,16 @@ static void print_func_help_header_irq(struct array_buffer *buf, struct seq_file print_event_info(buf, m); @@ -23022,7 +23028,7 @@ index 689c8a0f7..74383d48d 100644 } void -@@ -9545,7 +9534,6 @@ void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) +@@ -9556,7 +9545,6 @@ void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) tracing_off(); local_irq_save(flags); @@ -23030,7 +23036,7 @@ index 689c8a0f7..74383d48d 100644 /* Simulate the iterator */ trace_init_global_iter(&iter); -@@ -9625,7 +9613,6 @@ void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) +@@ -9636,7 +9624,6 @@ void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) atomic_dec(&per_cpu_ptr(iter.array_buffer->data, cpu)->disabled); } atomic_dec(&dump_running); @@ -23082,7 +23088,7 @@ index c9ee8b730..8f98de8da 100644 return ret; } diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c -index 4778cecee..0c4cc486c 100644 +index 74adb873e..995a4caf4 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c @@ -441,6 +441,7 @@ int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry) @@ -23224,12 +23230,12 @@ index fb22fb266..c3c76b833 100644 +} +EXPORT_SYMBOL(cpumask_any_distribute); diff --git a/lib/debugobjects.c b/lib/debugobjects.c -index 4dd9283f6..84077ef82 100644 +index b055741a5..1a7594541 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c -@@ -616,7 +616,9 @@ __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack +@@ -615,7 +615,9 @@ __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack + struct debug_obj *obj, o; struct debug_bucket *db; - struct debug_obj *obj; unsigned long flags; - +#ifdef CONFIG_PREEMPT_RT @@ -23536,7 +23542,7 @@ index 78a630bbd..d27a80502 100644 if ((wait_state != TASK_RUNNING || diff --git a/mm/Kconfig b/mm/Kconfig -index 70c85533a..8f4fbaeaa 100644 +index cc43f5124..8510a7395 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -404,7 +404,7 @@ config NOMMU_INITIAL_TRIM_EXCESS @@ -23548,7 +23554,7 @@ index 70c85533a..8f4fbaeaa 100644 select COMPACTION select XARRAY_MULTI help -@@ -952,6 +952,9 @@ config ARCH_HAS_HUGEPD +@@ -958,6 +958,9 @@ config ARCH_HAS_HUGEPD config MAPPING_DIRTY_HELPERS bool @@ -23867,7 +23873,7 @@ index efe38ab47..ad72e587c 100644 #if defined(HASHED_PAGE_VIRTUAL) diff --git a/mm/memcontrol.c b/mm/memcontrol.c -index db44ade93..5ebc66382 100644 +index daa104384..4e6661d0f 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -67,6 +67,7 @@ @@ -23988,7 +23994,7 @@ index db44ade93..5ebc66382 100644 mutex_unlock(&percpu_charge_mutex); } -@@ -3161,7 +3173,7 @@ static bool consume_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes) +@@ -3182,7 +3194,7 @@ static bool consume_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes) unsigned long flags; bool ret = false; @@ -23997,7 +24003,7 @@ index db44ade93..5ebc66382 100644 stock = this_cpu_ptr(&memcg_stock); if (objcg == stock->cached_objcg && stock->nr_bytes >= nr_bytes) { -@@ -3169,7 +3181,7 @@ static bool consume_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes) +@@ -3190,7 +3202,7 @@ static bool consume_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes) ret = true; } @@ -24006,7 +24012,7 @@ index db44ade93..5ebc66382 100644 return ret; } -@@ -3225,7 +3237,7 @@ static void refill_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes) +@@ -3246,7 +3258,7 @@ static void refill_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes) struct memcg_stock_pcp *stock; unsigned long flags; @@ -24015,7 +24021,7 @@ index db44ade93..5ebc66382 100644 stock = this_cpu_ptr(&memcg_stock); if (stock->cached_objcg != objcg) { /* reset if necessary */ -@@ -3239,7 +3251,7 @@ static void refill_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes) +@@ -3260,7 +3272,7 @@ static void refill_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes) if (stock->nr_bytes > PAGE_SIZE) drain_obj_stock(stock); @@ -24024,7 +24030,7 @@ index db44ade93..5ebc66382 100644 } int obj_cgroup_charge(struct obj_cgroup *objcg, gfp_t gfp, size_t size) -@@ -6873,12 +6885,12 @@ static int mem_cgroup_move_account(struct page *page, +@@ -6989,12 +7001,12 @@ static int mem_cgroup_move_account(struct page *page, ret = 0; @@ -24039,7 +24045,7 @@ index db44ade93..5ebc66382 100644 out_unlock: unlock_page(page); out: -@@ -7857,10 +7869,10 @@ int mem_cgroup_charge(struct page *page, struct mm_struct *mm, gfp_t gfp_mask) +@@ -7983,10 +7995,10 @@ int mem_cgroup_charge(struct page *page, struct mm_struct *mm, gfp_t gfp_mask) css_get(&memcg->css); commit_charge(page, memcg); @@ -24052,7 +24058,7 @@ index db44ade93..5ebc66382 100644 /* * Cgroup1's unified memory+swap counter has been charged with the -@@ -7916,11 +7928,11 @@ static void uncharge_batch(const struct uncharge_gather *ug) +@@ -8042,11 +8054,11 @@ static void uncharge_batch(const struct uncharge_gather *ug) memcg_oom_recover(ug->memcg); } @@ -24066,7 +24072,7 @@ index db44ade93..5ebc66382 100644 /* drop reference from uncharge_page */ css_put(&ug->memcg->css); -@@ -8092,10 +8104,10 @@ void mem_cgroup_migrate(struct page *oldpage, struct page *newpage) +@@ -8218,10 +8230,10 @@ void mem_cgroup_migrate(struct page *oldpage, struct page *newpage) css_get(&memcg->css); commit_charge(newpage, memcg); @@ -24079,7 +24085,7 @@ index db44ade93..5ebc66382 100644 } DEFINE_STATIC_KEY_FALSE(memcg_sockets_enabled_key); -@@ -8225,9 +8237,13 @@ static int __init mem_cgroup_init(void) +@@ -8351,9 +8363,13 @@ static int __init mem_cgroup_init(void) cpuhp_setup_state_nocalls(CPUHP_MM_MEMCQ_DEAD, "mm/memctrl:dead", NULL, memcg_hotplug_cpu_dead); @@ -24096,7 +24102,7 @@ index db44ade93..5ebc66382 100644 for_each_node(node) { struct mem_cgroup_tree_per_node *rtpn; -@@ -8277,6 +8293,7 @@ void mem_cgroup_swapout(struct page *page, swp_entry_t entry) +@@ -8403,6 +8419,7 @@ void mem_cgroup_swapout(struct page *page, swp_entry_t entry) struct mem_cgroup *memcg, *swap_memcg; unsigned int nr_entries; unsigned short oldid; @@ -24104,7 +24110,7 @@ index db44ade93..5ebc66382 100644 VM_BUG_ON_PAGE(PageLRU(page), page); VM_BUG_ON_PAGE(page_count(page), page); -@@ -8322,9 +8339,13 @@ void mem_cgroup_swapout(struct page *page, swp_entry_t entry) +@@ -8448,9 +8465,13 @@ void mem_cgroup_swapout(struct page *page, swp_entry_t entry) * important here to have the interrupts disabled because it is the * only synchronisation we have for updating the per-CPU variables. */ @@ -24119,7 +24125,7 @@ index db44ade93..5ebc66382 100644 css_put(&memcg->css); } diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index 1ba392f11..1eccb26ea 100644 +index 7cf3cd1d0..024baa31c 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -61,6 +61,7 @@ @@ -24466,7 +24472,7 @@ index 1ba392f11..1eccb26ea 100644 out: /* Separate test+clear to avoid unnecessary atomics */ -@@ -3522,7 +3592,7 @@ struct page *rmqueue(struct zone *preferred_zone, +@@ -3522,7 +3592,7 @@ out: return page; failed: @@ -24475,7 +24481,7 @@ index 1ba392f11..1eccb26ea 100644 return NULL; } -@@ -9411,7 +9481,7 @@ void zone_pcp_reset(struct zone *zone) +@@ -9414,7 +9484,7 @@ void zone_pcp_reset(struct zone *zone) struct per_cpu_pageset *pset; /* avoid races with drain_pages() */ @@ -24484,7 +24490,7 @@ index 1ba392f11..1eccb26ea 100644 if (zone->pageset != &boot_pageset) { for_each_online_cpu(cpu) { pset = per_cpu_ptr(zone->pageset, cpu); -@@ -9420,7 +9490,7 @@ void zone_pcp_reset(struct zone *zone) +@@ -9423,7 +9493,7 @@ void zone_pcp_reset(struct zone *zone) free_percpu(zone->pageset); zone->pageset = &boot_pageset; } @@ -24602,7 +24608,7 @@ index 9cb612d11..22abbff47 100644 goto failed; spin_lock_init(&sbinfo->shrinklist_lock); diff --git a/mm/slab.c b/mm/slab.c -index ae84578f3..a65a5f169 100644 +index ca71d3f3e..c2653a84b 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -234,7 +234,7 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent) @@ -24901,7 +24907,7 @@ index ae84578f3..a65a5f169 100644 if (n->shared) { struct array_cache *shared_array = n->shared; int max = shared_array->limit - shared_array->avail; -@@ -3413,7 +3413,7 @@ static void cache_flusharray(struct kmem_cache *cachep, struct array_cache *ac) +@@ -3413,7 +3413,7 @@ free_done: STATS_SET_FREEABLE(cachep, i); } #endif @@ -24953,10 +24959,10 @@ index ae84578f3..a65a5f169 100644 num_objs = total_slabs * cachep->num; active_slabs = total_slabs - free_slabs; diff --git a/mm/slab.h b/mm/slab.h -index 8414c3451..d937f8673 100644 +index a0e92203e..7d5d941de 100644 --- a/mm/slab.h +++ b/mm/slab.h -@@ -523,7 +523,7 @@ static inline void slab_post_alloc_hook(struct kmem_cache *s, +@@ -524,7 +524,7 @@ static inline void slab_post_alloc_hook(struct kmem_cache *s, * The slab lists for all objects. */ struct kmem_cache_node { @@ -24966,7 +24972,7 @@ index 8414c3451..d937f8673 100644 #ifdef CONFIG_SLAB struct list_head slabs_partial; /* partial list first, better asm code */ diff --git a/mm/slub.c b/mm/slub.c -index ec1c3a376..559fcc2a3 100644 +index 9dd4cc478..46764081e 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -458,7 +458,7 @@ static inline bool cmpxchg_double_slab(struct kmem_cache *s, struct page *page, @@ -25005,7 +25011,7 @@ index ec1c3a376..559fcc2a3 100644 slab_lock(page); if (s->flags & SLAB_CONSISTENCY_CHECKS) { -@@ -1273,7 +1273,7 @@ static noinline int free_debug_processing( +@@ -1273,7 +1273,7 @@ out: bulk_cnt, cnt); slab_unlock(page); @@ -25103,7 +25109,7 @@ index ec1c3a376..559fcc2a3 100644 return object; } -@@ -2267,7 +2297,7 @@ static void deactivate_slab(struct kmem_cache *s, struct page *page, +@@ -2267,7 +2297,7 @@ redo: * that acquire_slab() will see a slab page that * is frozen */ @@ -25112,7 +25118,7 @@ index ec1c3a376..559fcc2a3 100644 } } else { m = M_FULL; -@@ -2279,7 +2309,7 @@ static void deactivate_slab(struct kmem_cache *s, struct page *page, +@@ -2279,7 +2309,7 @@ redo: * slabs from diagnostic functions will not see * any frozen slabs. */ @@ -25121,7 +25127,7 @@ index ec1c3a376..559fcc2a3 100644 } #endif } -@@ -2304,7 +2334,7 @@ static void deactivate_slab(struct kmem_cache *s, struct page *page, +@@ -2304,7 +2334,7 @@ redo: goto redo; if (lock) @@ -25219,7 +25225,7 @@ index ec1c3a376..559fcc2a3 100644 void *freelist; struct page *page; -@@ -2753,6 +2804,13 @@ static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, +@@ -2753,6 +2804,13 @@ load_freelist: VM_BUG_ON(!c->page->frozen); c->freelist = get_freepointer(s, freelist); c->tid = next_tid(c->tid); @@ -25233,7 +25239,7 @@ index ec1c3a376..559fcc2a3 100644 return freelist; new_slab: -@@ -2768,7 +2826,7 @@ static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, +@@ -2768,7 +2826,7 @@ new_slab: if (unlikely(!freelist)) { slab_out_of_memory(s, gfpflags, node); @@ -25242,7 +25248,7 @@ index ec1c3a376..559fcc2a3 100644 } page = c->page; -@@ -2781,7 +2839,7 @@ static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, +@@ -2781,7 +2839,7 @@ new_slab: goto new_slab; /* Slab failed checks. Next slab needed */ deactivate_slab(s, page, get_freepointer(s, freelist), c); @@ -25308,7 +25314,7 @@ index ec1c3a376..559fcc2a3 100644 return; slab_empty: -@@ -3102,7 +3166,7 @@ static void __slab_free(struct kmem_cache *s, struct page *page, +@@ -3102,7 +3166,7 @@ slab_empty: remove_full(s, n, page); } @@ -25671,7 +25677,7 @@ index f75c638c6..6fdf4774f 100644 for_each_unbuddied_list(i, chunks) { struct list_head *l = &unbuddied[i]; -@@ -899,7 +902,7 @@ static inline struct z3fold_header *__z3fold_alloc(struct z3fold_pool *pool, +@@ -899,7 +902,7 @@ lookup: !z3fold_page_trylock(zhdr)) { spin_unlock(&pool->lock); zhdr = NULL; @@ -25680,7 +25686,7 @@ index f75c638c6..6fdf4774f 100644 if (can_sleep) cond_resched(); goto lookup; -@@ -913,7 +916,7 @@ static inline struct z3fold_header *__z3fold_alloc(struct z3fold_pool *pool, +@@ -913,7 +916,7 @@ lookup: test_bit(PAGE_CLAIMED, &page->private)) { z3fold_page_unlock(zhdr); zhdr = NULL; @@ -25689,7 +25695,7 @@ index f75c638c6..6fdf4774f 100644 if (can_sleep) cond_resched(); goto lookup; -@@ -928,7 +931,7 @@ static inline struct z3fold_header *__z3fold_alloc(struct z3fold_pool *pool, +@@ -928,7 +931,7 @@ lookup: kref_get(&zhdr->refcount); break; } @@ -25890,7 +25896,7 @@ index 6079f5625..a928c7136 100644 migrate_read_unlock(zspage); unpin_tag(handle); diff --git a/net/Kconfig b/net/Kconfig -index 232075ae1..4221c79b7 100644 +index 51a934426..9db79194a 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -280,7 +280,7 @@ config CGROUP_NET_CLASSID @@ -25903,10 +25909,10 @@ index 232075ae1..4221c79b7 100644 config BQL bool diff --git a/net/core/dev.c b/net/core/dev.c -index 1f1f93aad..0c2d4beda 100644 +index c49f3d306..5f9b8d26f 100644 --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -221,14 +221,14 @@ static inline struct hlist_head *dev_index_hash(struct net *net, int ifindex) +@@ -222,14 +222,14 @@ static inline struct hlist_head *dev_index_hash(struct net *net, int ifindex) static inline void rps_lock(struct softnet_data *sd) { #ifdef CONFIG_RPS @@ -25923,7 +25929,7 @@ index 1f1f93aad..0c2d4beda 100644 #endif } -@@ -3053,6 +3053,7 @@ static void __netif_reschedule(struct Qdisc *q) +@@ -3054,6 +3054,7 @@ static void __netif_reschedule(struct Qdisc *q) sd->output_queue_tailp = &q->next_sched; raise_softirq_irqoff(NET_TX_SOFTIRQ); local_irq_restore(flags); @@ -25931,7 +25937,7 @@ index 1f1f93aad..0c2d4beda 100644 } void __netif_schedule(struct Qdisc *q) -@@ -3115,6 +3116,7 @@ void __dev_kfree_skb_irq(struct sk_buff *skb, enum skb_free_reason reason) +@@ -3116,6 +3117,7 @@ void __dev_kfree_skb_irq(struct sk_buff *skb, enum skb_free_reason reason) __this_cpu_write(softnet_data.completion_queue, skb); raise_softirq_irqoff(NET_TX_SOFTIRQ); local_irq_restore(flags); @@ -25939,7 +25945,7 @@ index 1f1f93aad..0c2d4beda 100644 } EXPORT_SYMBOL(__dev_kfree_skb_irq); -@@ -3807,7 +3809,11 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q, +@@ -3814,7 +3816,11 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q, * This permits qdisc->running owner to get the lock more * often and dequeue packets faster. */ @@ -25951,7 +25957,7 @@ index 1f1f93aad..0c2d4beda 100644 if (unlikely(contended)) spin_lock(&q->busylock); -@@ -4611,6 +4617,7 @@ static int enqueue_to_backlog(struct sk_buff *skb, int cpu, +@@ -4618,6 +4624,7 @@ drop: rps_unlock(sd); local_irq_restore(flags); @@ -25959,7 +25965,7 @@ index 1f1f93aad..0c2d4beda 100644 atomic_long_inc(&skb->dev->rx_dropped); kfree_skb(skb); -@@ -4830,7 +4837,7 @@ static int netif_rx_internal(struct sk_buff *skb) +@@ -5047,7 +5054,7 @@ static int netif_rx_internal(struct sk_buff *skb) struct rps_dev_flow voidflow, *rflow = &voidflow; int cpu; @@ -25968,7 +25974,7 @@ index 1f1f93aad..0c2d4beda 100644 rcu_read_lock(); cpu = get_rps_cpu(skb->dev, skb, &rflow); -@@ -4840,14 +4847,14 @@ static int netif_rx_internal(struct sk_buff *skb) +@@ -5057,14 +5064,14 @@ static int netif_rx_internal(struct sk_buff *skb) ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail); rcu_read_unlock(); @@ -25986,7 +25992,7 @@ index 1f1f93aad..0c2d4beda 100644 } return ret; } -@@ -4886,11 +4893,9 @@ int netif_rx_ni(struct sk_buff *skb) +@@ -5103,11 +5110,9 @@ int netif_rx_ni(struct sk_buff *skb) trace_netif_rx_ni_entry(skb); @@ -26000,7 +26006,7 @@ index 1f1f93aad..0c2d4beda 100644 trace_netif_rx_ni_exit(err); return err; -@@ -6367,12 +6372,14 @@ static void net_rps_action_and_irq_enable(struct softnet_data *sd) +@@ -6585,12 +6590,14 @@ static void net_rps_action_and_irq_enable(struct softnet_data *sd) sd->rps_ipi_list = NULL; local_irq_enable(); @@ -26015,7 +26021,7 @@ index 1f1f93aad..0c2d4beda 100644 } static bool sd_has_rps_ipi_waiting(struct softnet_data *sd) -@@ -6450,6 +6457,7 @@ void __napi_schedule(struct napi_struct *n) +@@ -6668,6 +6675,7 @@ void __napi_schedule(struct napi_struct *n) local_irq_save(flags); ____napi_schedule(this_cpu_ptr(&softnet_data), n); local_irq_restore(flags); @@ -26023,7 +26029,7 @@ index 1f1f93aad..0c2d4beda 100644 } EXPORT_SYMBOL(__napi_schedule); -@@ -11000,6 +11008,7 @@ static int dev_cpu_dead(unsigned int oldcpu) +@@ -11218,6 +11226,7 @@ static int dev_cpu_dead(unsigned int oldcpu) raise_softirq_irqoff(NET_TX_SOFTIRQ); local_irq_enable(); @@ -26031,7 +26037,7 @@ index 1f1f93aad..0c2d4beda 100644 #ifdef CONFIG_RPS remsd = oldsd->rps_ipi_list; -@@ -11013,7 +11022,7 @@ static int dev_cpu_dead(unsigned int oldcpu) +@@ -11231,7 +11240,7 @@ static int dev_cpu_dead(unsigned int oldcpu) netif_rx_ni(skb); input_queue_head_incr(oldsd); } @@ -26040,7 +26046,7 @@ index 1f1f93aad..0c2d4beda 100644 netif_rx_ni(skb); input_queue_head_incr(oldsd); } -@@ -11329,7 +11338,7 @@ static int __init net_dev_init(void) +@@ -11547,7 +11556,7 @@ static int __init net_dev_init(void) INIT_WORK(flush, flush_backlog); @@ -26131,10 +26137,10 @@ index e491b083b..ef432cea2 100644 struct gnet_stats_basic_cpu __percpu *cpu, struct gnet_stats_basic_packed *b) diff --git a/net/core/sock.c b/net/core/sock.c -index a15e984bd..18d65a4fb 100644 +index 2e39845d0..6f5d884b3 100644 --- a/net/core/sock.c +++ b/net/core/sock.c -@@ -3087,12 +3087,11 @@ void lock_sock_nested(struct sock *sk, int subclass) +@@ -3128,12 +3128,11 @@ void lock_sock_nested(struct sock *sk, int subclass) if (sk->sk_lock.owned) __lock_sock(sk); sk->sk_lock.owned = 1; @@ -26148,7 +26154,7 @@ index a15e984bd..18d65a4fb 100644 } EXPORT_SYMBOL(lock_sock_nested); -@@ -3141,12 +3140,11 @@ bool lock_sock_fast(struct sock *sk) +@@ -3182,12 +3181,11 @@ bool lock_sock_fast(struct sock *sk) __lock_sock(sk); sk->sk_lock.owned = 1; @@ -26176,7 +26182,7 @@ index cfb4904ee..260c6ae49 100644 err = -EOPNOTSUPP; if (sch->flags & TCQ_F_MQROOT) { diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c -index a3e9dd348..1a3b93750 100644 +index ec55f306a..920d10ec9 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -578,7 +578,11 @@ struct Qdisc noop_qdisc = { @@ -26191,7 +26197,7 @@ index a3e9dd348..1a3b93750 100644 .busylock = __SPIN_LOCK_UNLOCKED(noop_qdisc.busylock), .gso_skb = { .next = (struct sk_buff *)&noop_qdisc.gso_skb, -@@ -889,9 +893,15 @@ struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue, +@@ -890,9 +894,15 @@ struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue, lockdep_set_class(&sch->seqlock, dev->qdisc_tx_busylock ?: &qdisc_tx_busylock); @@ -26245,4 +26251,3 @@ index 73f5cbae6..a976e2389 100644 out_byspi: -- 2.41.0 - diff --git a/0001-modify-openeuler_defconfig-for-rt62.patch b/0001-modify-openeuler_defconfig-for-rt62.patch index 36a9af6..8127fcf 100644 --- a/0001-modify-openeuler_defconfig-for-rt62.patch +++ b/0001-modify-openeuler_defconfig-for-rt62.patch @@ -1,19 +1,19 @@ -From d59dd9d1db2cbc2171e5dd22b522d2c1e8f5e4ae Mon Sep 17 00:00:00 2001 +From 3847d04e7d950d5aa85193b4154acd1682984e83 Mon Sep 17 00:00:00 2001 From: zhangyu -Date: Thu, 16 May 2024 16:33:51 +0800 -Subject: [PATCH 2/2] zzzy2 +Date: Tue, 19 Nov 2024 20:45:34 +0800 +Subject: [PATCH] hhhhhhh --- - arch/arm64/configs/openeuler_defconfig | 6 +++--- + arch/arm64/configs/openeuler_defconfig | 8 ++++---- arch/arm64/kernel/fpsimd.c | 4 ++-- arch/x86/configs/openeuler_defconfig | 8 ++++---- arch/x86/include/asm/preempt.h | 16 +++++++++++++--- include/linux/printk.h | 2 +- kernel/printk/printk.c | 2 +- - 6 files changed, 24 insertions(+), 14 deletions(-) + 6 files changed, 25 insertions(+), 15 deletions(-) diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig -index 34061d75a..58ece1076 100644 +index 4c117f2f5..541af5c5c 100644 --- a/arch/arm64/configs/openeuler_defconfig +++ b/arch/arm64/configs/openeuler_defconfig @@ -87,7 +87,7 @@ CONFIG_HIGH_RES_TIMERS=y @@ -25,8 +25,8 @@ index 34061d75a..58ece1076 100644 # # CPU/Task time and stats accounting # -@@ -760,7 +760,7 @@ CONFIG_ACPI_MPAM=y - CONFIG_ACPI_PPTT=y +@@ -774,7 +774,7 @@ CONFIG_ACPI_PPTT=y + CONFIG_ACPI_PCC=y # CONFIG_PMIC_OPREGION is not set CONFIG_IRQ_BYPASS_MANAGER=y -CONFIG_VIRTUALIZATION=y @@ -34,7 +34,7 @@ index 34061d75a..58ece1076 100644 CONFIG_KVM=y CONFIG_CVM_HOST=y CONFIG_CVM_GUEST=y -@@ -1159,7 +1159,7 @@ CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y +@@ -1177,7 +1177,7 @@ CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y # CONFIG_GUP_BENCHMARK is not set # CONFIG_READ_ONLY_THP_FOR_FS is not set CONFIG_ARCH_HAS_PTE_SPECIAL=y @@ -43,6 +43,15 @@ index 34061d75a..58ece1076 100644 CONFIG_PID_RESERVE=y CONFIG_MEMORY_RELIABLE=y # CONFIG_CLEAR_FREELIST_PAGE is not set +@@ -6121,7 +6121,7 @@ CONFIG_HISI_HBMDEV=m + CONFIG_HISI_HBMCACHE=m + CONFIG_HISI_HBMDEV_ACLS=y + CONFIG_HISI_L3T=m +-CONFIG_HISI_L0=m ++#CONFIG_HISI_L0 is not set + CONFIG_HISI_MEM_RAS=m + # end of Hisilicon SoC drivers + # end of SOC (System On Chip) specific Drivers diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index 131b2dda3..992c11f2c 100644 --- a/arch/arm64/kernel/fpsimd.c @@ -66,7 +75,7 @@ index 131b2dda3..992c11f2c 100644 static bool have_cpu_fpsimd_context(void) diff --git a/arch/x86/configs/openeuler_defconfig b/arch/x86/configs/openeuler_defconfig -index 91c85e1c2..ca197fcaf 100644 +index bfaadb4b2..7f5b8e327 100644 --- a/arch/x86/configs/openeuler_defconfig +++ b/arch/x86/configs/openeuler_defconfig @@ -89,10 +89,10 @@ CONFIG_HIGH_RES_TIMERS=y @@ -82,7 +91,7 @@ index 91c85e1c2..ca197fcaf 100644 # # CPU/Task time and stats accounting # -@@ -212,7 +212,7 @@ CONFIG_HAVE_UID16=y +@@ -218,7 +218,7 @@ CONFIG_HAVE_UID16=y CONFIG_SYSCTL_EXCEPTION_TRACE=y CONFIG_HAVE_PCSPKR_PLATFORM=y CONFIG_BPF=y @@ -91,7 +100,7 @@ index 91c85e1c2..ca197fcaf 100644 CONFIG_UID16=y CONFIG_MULTIUSER=y CONFIG_SGETMASK_SYSCALL=y -@@ -749,7 +749,7 @@ CONFIG_KVM_COMPAT=y +@@ -760,7 +760,7 @@ CONFIG_KVM_COMPAT=y CONFIG_HAVE_KVM_IRQ_BYPASS=y CONFIG_HAVE_KVM_NO_POLL=y CONFIG_KVM_XFER_TO_GUEST_WORK=y @@ -147,15 +156,15 @@ index 26c70fd11..c82c971e8 100644 #else static inline void zap_locks(void) { } diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c -index 80c97bc3e..86380c37f 100644 +index 88a877fdc..515fea620 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -1826,7 +1826,7 @@ static void print_sync_until(struct console *con, u64 seq) - console_atomic_unlock(flags); } + -#if defined(CONFIG_X86) || defined(CONFIG_ARM64_PSEUDO_NMI) -+#if (defined(CONFIG_X86) || defined(CONFIG_ARM64_PSEUDO_NMI)) && !defined(CONFIG_PREEMPT_RT) ++#if 0 //(defined(CONFIG_X86) || defined(CONFIG_ARM64_PSEUDO_NMI)) && !defined(CONFIG_PREEMPT_RT) void zap_locks(void) { // if (raw_spin_is_locked(&logbuf_lock)) { diff --git a/kernel-rt.spec b/kernel-rt.spec index 10ea2b3..1f4c645 100644 --- a/kernel-rt.spec +++ b/kernel-rt.spec @@ -10,9 +10,9 @@ %global upstream_version 5.10 %global upstream_sublevel 0 -%global devel_release 199 +%global devel_release 236 %global maintenance_release .0.0 -%global pkg_release .63 +%global pkg_release .64 %global rt_release .rt62 %define with_debuginfo 1 @@ -891,6 +891,9 @@ fi %endif %changelog +* Mon Nov 18 2024 zhangyu - 5.10.0-236.0.0.64 +- update kernel-rt version to 5.10.0-236.0.0 + * Thu May 16 2024 zhangyu - 5.10.0-199.0.0.63 - update kernel-rt version to 5.10.0-199.0.0 diff --git a/raspberrypi-kernel-rt.spec b/raspberrypi-kernel-rt.spec index e6344c7..90f7bb3 100644 --- a/raspberrypi-kernel-rt.spec +++ b/raspberrypi-kernel-rt.spec @@ -2,13 +2,13 @@ %global KernelVer %{version}-%{release}.raspi.%{_target_cpu} -%global hulkrelease 177.0.0 +%global hulkrelease 236.0.0 %global debug_package %{nil} Name: raspberrypi-kernel-rt Version: 5.10.0 -Release: %{hulkrelease}.rt62.11 +Release: %{hulkrelease}.rt62.12 Summary: Linux Kernel License: GPLv2 URL: http://www.kernel.org/ @@ -172,6 +172,9 @@ install -m 644 /boot/dtb-%{KernelVer}/overlays/README /boot/overlays/ /lib/modules/%{KernelVer} %changelog +* Mon Nov 18 2024 zhangyu - 5.10.0-236.0.0.12 +- - update preempt-RT to openEuler 5.10.0-236.0.0 + * Fri Dec 12 2023 zhangyu - 5.10.0-177.0.0.11 - - update preempt-RT to openEuler 5.10.0-177.0.0