summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt')
-rw-r--r--debian/patches-rt/0001-ARM-vfp-Provide-vfp_lock-for-VFP-locking.patch2
-rw-r--r--debian/patches-rt/0001-arm-Disable-jump-label-on-PREEMPT_RT.patch4
-rw-r--r--debian/patches-rt/0001-drm-amd-display-Remove-migrate_en-dis-from-dc_fpu_be.patch86
-rw-r--r--debian/patches-rt/0001-printk-nbcon-Relocate-32bit-seq-macros.patch (renamed from debian/patches-rt/0085-printk-nbcon-Relocate-32bit-seq-macros.patch)4
-rw-r--r--debian/patches-rt/0001-sched-Constrain-locks-in-sched_submit_work.patch49
-rw-r--r--debian/patches-rt/0001-sched-core-Provide-a-method-to-check-if-a-task-is-PI.patch6
-rw-r--r--debian/patches-rt/0001-signal-Add-proper-comment-about-the-preempt-disable-.patch47
-rw-r--r--debian/patches-rt/0002-ARM-vfp-Use-vfp_lock-in-vfp_sync_hwstate.patch2
-rw-r--r--debian/patches-rt/0002-drm-amd-display-Simplify-the-per-CPU-usage.patch127
-rw-r--r--debian/patches-rt/0002-locking-rtmutex-Avoid-unconditional-slowpath-for-DEB.patch79
-rw-r--r--debian/patches-rt/0002-printk-Adjust-mapping-for-32bit-seq-macros.patch (renamed from debian/patches-rt/0086-printk-Adjust-mapping-for-32bit-seq-macros.patch)4
-rw-r--r--debian/patches-rt/0002-serial-core-Use-lock-wrappers.patch93
-rw-r--r--debian/patches-rt/0002-signal-Don-t-disable-preemption-in-ptrace_stop-on-PR.patch48
-rw-r--r--debian/patches-rt/0002-softirq-Add-function-to-preempt-serving-softirqs.patch2
-rw-r--r--debian/patches-rt/0003-ARM-vfp-Use-vfp_lock-in-vfp_support_entry.patch2
-rw-r--r--debian/patches-rt/0003-drm-amd-display-Add-a-warning-if-the-FPU-is-used-out.patch26
-rw-r--r--debian/patches-rt/0003-drm-i915-Use-preempt_disable-enable_rt-where-recomme.patch6
-rw-r--r--debian/patches-rt/0003-printk-Use-prb_first_seq-as-base-for-32bit-seq-macro.patch (renamed from debian/patches-rt/0087-printk-Use-prb_first_seq-as-base-for-32bit-seq-macro.patch)4
-rw-r--r--debian/patches-rt/0003-sched-Extract-__schedule_loop.patch58
-rw-r--r--debian/patches-rt/0003-serial-21285-Use-port-lock-wrappers.patch75
-rw-r--r--debian/patches-rt/0003-time-Allow-to-preempt-after-a-callback.patch2
-rw-r--r--debian/patches-rt/0004-ARM-vfp-Move-sending-signals-outside-of-vfp_lock-ed-.patch2
-rw-r--r--debian/patches-rt/0004-drm-amd-display-Move-the-memory-allocation-out-of-dc.patch87
-rw-r--r--debian/patches-rt/0004-drm-i915-Don-t-disable-interrupts-on-PREEMPT_RT-duri.patch16
-rw-r--r--debian/patches-rt/0004-printk-ringbuffer-Do-not-skip-non-finalized-records-.patch (renamed from debian/patches-rt/0088-printk-ringbuffer-Do-not-skip-non-finalized-records-.patch)4
-rw-r--r--debian/patches-rt/0004-sched-Provide-rt_mutex-specific-scheduler-helpers.patch128
-rw-r--r--debian/patches-rt/0004-serial-8250_aspeed_vuart-Use-port-lock-wrappers.patch61
-rw-r--r--debian/patches-rt/0005-drm-amd-display-Move-the-memory-allocation-out-of-dc.patch121
-rw-r--r--debian/patches-rt/0005-drm-i915-Don-t-check-for-atomic-context-on-PREEMPT_R.patch2
-rw-r--r--debian/patches-rt/0005-locking-rtmutex-Use-rt_mutex-specific-scheduler-help.patch177
-rw-r--r--debian/patches-rt/0005-printk-ringbuffer-Clarify-special-lpos-values.patch (renamed from debian/patches-rt/0089-printk-ringbuffer-Clarify-special-lpos-values.patch)4
-rw-r--r--debian/patches-rt/0005-serial-8250_bcm7271-Use-port-lock-wrappers.patch151
-rw-r--r--debian/patches-rt/0006-drm-i915-Disable-tracing-points-on-PREEMPT_RT.patch2
-rw-r--r--debian/patches-rt/0006-locking-rtmutex-Add-a-lockdep-assert-to-catch-potent.patch57
-rw-r--r--debian/patches-rt/0006-printk-For-suppress_panic_printk-check-for-other-CPU.patch (renamed from debian/patches-rt/0090-printk-For-suppress_panic_printk-check-for-other-CPU.patch)8
-rw-r--r--debian/patches-rt/0006-serial-8250-Use-port-lock-wrappers.patch465
-rw-r--r--debian/patches-rt/0007-drm-i915-skip-DRM_I915_LOW_LEVEL_TRACEPOINTS-with-NO.patch2
-rw-r--r--debian/patches-rt/0007-futex-pi-Fix-recursive-rt_mutex-waiter-state.patch198
-rw-r--r--debian/patches-rt/0007-printk-Add-this_cpu_in_panic.patch (renamed from debian/patches-rt/0091-printk-Add-this_cpu_in_panic.patch)6
-rw-r--r--debian/patches-rt/0007-serial-8250_dma-Use-port-lock-wrappers.patch80
-rw-r--r--debian/patches-rt/0008-drm-i915-gt-Queue-and-wait-for-the-irq_work-item.patch2
-rw-r--r--debian/patches-rt/0008-printk-ringbuffer-Cleanup-reader-terminology.patch (renamed from debian/patches-rt/0092-printk-ringbuffer-Cleanup-reader-terminology.patch)4
-rw-r--r--debian/patches-rt/0008-serial-8250_dw-Use-port-lock-wrappers.patch69
-rw-r--r--debian/patches-rt/0009-drm-i915-gt-Use-spin_lock_irq-instead-of-local_irq_d.patch2
-rw-r--r--debian/patches-rt/0009-printk-Wait-for-all-reserved-records-with-pr_flush.patch (renamed from debian/patches-rt/0093-printk-Wait-for-all-reserved-records-with-pr_flush.patch)6
-rw-r--r--debian/patches-rt/0009-serial-8250_exar-Use-port-lock-wrappers.patch52
-rw-r--r--debian/patches-rt/0010-drm-i915-Drop-the-irqs_disabled-check.patch2
-rw-r--r--debian/patches-rt/0010-printk-ringbuffer-Skip-non-finalized-records-in-pani.patch (renamed from debian/patches-rt/0094-printk-ringbuffer-Skip-non-finalized-records-in-pani.patch)5
-rw-r--r--debian/patches-rt/0010-serial-8250_fsl-Use-port-lock-wrappers.patch63
-rw-r--r--debian/patches-rt/0011-printk-ringbuffer-Consider-committed-as-finalized-in.patch (renamed from debian/patches-rt/0095-printk-ringbuffer-Consider-committed-as-finalized-in.patch)6
-rw-r--r--debian/patches-rt/0011-serial-8250_mtk-Use-port-lock-wrappers.patch77
-rw-r--r--debian/patches-rt/0012-printk-Disable-passing-console-lock-owner-completely.patch (renamed from debian/patches-rt/0096-printk-Disable-passing-console-lock-owner-completely.patch)8
-rw-r--r--debian/patches-rt/0012-serial-8250_omap-Use-port-lock-wrappers.patch236
-rw-r--r--debian/patches-rt/0013-printk-Avoid-non-panic-CPUs-writing-to-ringbuffer.patch (renamed from debian/patches-rt/0097-printk-Avoid-non-panic-CPUs-writing-to-ringbuffer.patch)10
-rw-r--r--debian/patches-rt/0013-serial-8250_pci1xxxx-Use-port-lock-wrappers.patch66
-rw-r--r--debian/patches-rt/0014-panic-Flush-kernel-log-buffer-at-the-end.patch (renamed from debian/patches-rt/0098-panic-Flush-kernel-log-buffer-at-the-end.patch)6
-rw-r--r--debian/patches-rt/0014-serial-altera_jtaguart-Use-port-lock-wrappers.patch133
-rw-r--r--debian/patches-rt/0015-printk-Consider-nbcon-boot-consoles-on-seq-init.patch (renamed from debian/patches-rt/0099-printk-Consider-nbcon-boot-consoles-on-seq-init.patch)6
-rw-r--r--debian/patches-rt/0015-serial-altera_uart-Use-port-lock-wrappers.patch116
-rw-r--r--debian/patches-rt/0016-printk-Add-sparse-notation-to-console_srcu-locking.patch (renamed from debian/patches-rt/0100-printk-Add-sparse-notation-to-console_srcu-locking.patch)4
-rw-r--r--debian/patches-rt/0016-serial-amba-pl010-Use-port-lock-wrappers.patch112
-rw-r--r--debian/patches-rt/0017-printk-nbcon-Ensure-ownership-release-on-failed-emit.patch (renamed from debian/patches-rt/0101-printk-nbcon-Ensure-ownership-release-on-failed-emit.patch)5
-rw-r--r--debian/patches-rt/0017-serial-amba-pl011-Use-port-lock-wrappers.patch327
-rw-r--r--debian/patches-rt/0018-printk-Check-printk_deferred_enter-_exit-usage.patch (renamed from debian/patches-rt/0102-printk-Check-printk_deferred_enter-_exit-usage.patch)4
-rw-r--r--debian/patches-rt/0018-serial-apb-Use-port-lock-wrappers.patch76
-rw-r--r--debian/patches-rt/0019-printk-nbcon-Implement-processing-in-port-lock-wrapp.patch (renamed from debian/patches-rt/0103-printk-nbcon-Implement-processing-in-port-lock-wrapp.patch)8
-rw-r--r--debian/patches-rt/0019-serial-ar933x-Use-port-lock-wrappers.patch144
-rw-r--r--debian/patches-rt/0020-printk-nbcon-Add-driver_enter-driver_exit-console-ca.patch (renamed from debian/patches-rt/0104-printk-nbcon-Add-driver_enter-driver_exit-console-ca.patch)8
-rw-r--r--debian/patches-rt/0020-serial-arc_uart-Use-port-lock-wrappers.patch97
-rw-r--r--debian/patches-rt/0021-printk-Make-console_is_usable-available-to-nbcon.patch (renamed from debian/patches-rt/0105-printk-Make-console_is_usable-available-to-nbcon.patch)6
-rw-r--r--debian/patches-rt/0021-serial-atmel-Use-port-lock-wrappers.patch119
-rw-r--r--debian/patches-rt/0022-printk-Let-console_is_usable-handle-nbcon.patch (renamed from debian/patches-rt/0106-printk-Let-console_is_usable-handle-nbcon.patch)4
-rw-r--r--debian/patches-rt/0022-serial-bcm63xx-uart-Use-port-lock-wrappers.patch128
-rw-r--r--debian/patches-rt/0023-printk-Add-flags-argument-for-console_is_usable.patch (renamed from debian/patches-rt/0107-printk-Add-flags-argument-for-console_is_usable.patch)8
-rw-r--r--debian/patches-rt/0023-serial-cpm_uart-Use-port-lock-wrappers.patch70
-rw-r--r--debian/patches-rt/0024-printk-nbcon-Provide-function-to-flush-using-write_a.patch (renamed from debian/patches-rt/0108-printk-nbcon-Provide-function-to-flush-using-write_a.patch)6
-rw-r--r--debian/patches-rt/0024-serial-digicolor-Use-port-lock-wrappers.patch113
-rw-r--r--debian/patches-rt/0025-printk-Track-registered-boot-consoles.patch (renamed from debian/patches-rt/0109-printk-Track-registered-boot-consoles.patch)10
-rw-r--r--debian/patches-rt/0025-serial-dz-Use-port-lock-wrappers.patch161
-rw-r--r--debian/patches-rt/0026-printk-nbcon-Use-nbcon-consoles-in-console_flush_all.patch (renamed from debian/patches-rt/0110-printk-nbcon-Use-nbcon-consoles-in-console_flush_all.patch)12
-rw-r--r--debian/patches-rt/0026-serial-linflexuart-Use-port-lock-wrappers.patch143
-rw-r--r--debian/patches-rt/0027-printk-nbcon-Assign-priority-based-on-CPU-state.patch (renamed from debian/patches-rt/0111-printk-nbcon-Assign-priority-based-on-CPU-state.patch)4
-rw-r--r--debian/patches-rt/0027-serial-fsl_lpuart-Use-port-lock-wrappers.patch389
-rw-r--r--debian/patches-rt/0028-printk-nbcon-Add-unsafe-flushing-on-panic.patch (renamed from debian/patches-rt/0112-printk-nbcon-Add-unsafe-flushing-on-panic.patch)6
-rw-r--r--debian/patches-rt/0028-serial-icom-Use-port-lock-wrappers.patch151
-rw-r--r--debian/patches-rt/0029-printk-Avoid-console_lock-dance-if-no-legacy-or-boot.patch (renamed from debian/patches-rt/0113-printk-Avoid-console_lock-dance-if-no-legacy-or-boot.patch)26
-rw-r--r--debian/patches-rt/0029-serial-imx-Use-port-lock-wrappers.patch354
-rw-r--r--debian/patches-rt/0030-printk-Track-nbcon-consoles.patch (renamed from debian/patches-rt/0114-printk-Track-nbcon-consoles.patch)10
-rw-r--r--debian/patches-rt/0030-serial-ip22zilog-Use-port-lock-wrappers.patch185
-rw-r--r--debian/patches-rt/0031-printk-Coordinate-direct-printing-in-panic.patch (renamed from debian/patches-rt/0115-printk-Coordinate-direct-printing-in-panic.patch)12
-rw-r--r--debian/patches-rt/0031-serial-jsm-Use-port-lock-wrappers.patch124
-rw-r--r--debian/patches-rt/0032-printk-nbcon-Implement-emergency-sections.patch (renamed from debian/patches-rt/0116-printk-nbcon-Implement-emergency-sections.patch)8
-rw-r--r--debian/patches-rt/0032-serial-liteuart-Use-port-lock-wrappers.patch110
-rw-r--r--debian/patches-rt/0033-panic-Mark-emergency-section-in-warn.patch (renamed from debian/patches-rt/0117-panic-Mark-emergency-section-in-warn.patch)8
-rw-r--r--debian/patches-rt/0033-serial-lpc32xx_hs-Use-port-lock-wrappers.patch148
-rw-r--r--debian/patches-rt/0034-panic-Mark-emergency-section-in-oops.patch (renamed from debian/patches-rt/0118-panic-Mark-emergency-section-in-oops.patch)8
-rw-r--r--debian/patches-rt/0034-serial-ma35d1-Use-port-lock-wrappers.patch117
-rw-r--r--debian/patches-rt/0035-rcu-Mark-emergency-section-in-rcu-stalls.patch (renamed from debian/patches-rt/0119-rcu-Mark-emergency-section-in-rcu-stalls.patch)12
-rw-r--r--debian/patches-rt/0035-serial-mcf-Use-port-lock-wrappers.patch127
-rw-r--r--debian/patches-rt/0036-lockdep-Mark-emergency-section-in-lockdep-splats.patch (renamed from debian/patches-rt/0120-lockdep-Mark-emergency-section-in-lockdep-splats.patch)4
-rw-r--r--debian/patches-rt/0036-serial-men_z135_uart-Use-port-lock-wrappers.patch76
-rw-r--r--debian/patches-rt/0037-printk-nbcon-Introduce-printing-kthreads.patch (renamed from debian/patches-rt/0121-printk-nbcon-Introduce-printing-kthreads.patch)16
-rw-r--r--debian/patches-rt/0037-serial-meson-Use-port-lock-wrappers.patch168
-rw-r--r--debian/patches-rt/0038-printk-Atomic-print-in-printk-context-on-shutdown.patch (renamed from debian/patches-rt/0122-printk-Atomic-print-in-printk-context-on-shutdown.patch)6
-rw-r--r--debian/patches-rt/0038-serial-milbeaut_usio-Use-port-lock-wrappers.patch101
-rw-r--r--debian/patches-rt/0039-printk-nbcon-Add-context-to-console_is_usable.patch (renamed from debian/patches-rt/0123-printk-nbcon-Add-context-to-console_is_usable.patch)8
-rw-r--r--debian/patches-rt/0039-serial-mpc52xx-Use-port-lock-wrappers.patch89
-rw-r--r--debian/patches-rt/0040-printk-nbcon-Add-printer-thread-wakeups.patch (renamed from debian/patches-rt/0124-printk-nbcon-Add-printer-thread-wakeups.patch)14
-rw-r--r--debian/patches-rt/0040-serial-mps2-uart-Use-port-lock-wrappers.patch103
-rw-r--r--debian/patches-rt/0041-printk-nbcon-Stop-threads-on-shutdown-reboot.patch (renamed from debian/patches-rt/0125-printk-nbcon-Stop-threads-on-shutdown-reboot.patch)4
-rw-r--r--debian/patches-rt/0041-serial-msm-Use-port-lock-wrappers.patch185
-rw-r--r--debian/patches-rt/0042-printk-nbcon-Start-printing-threads.patch (renamed from debian/patches-rt/0126-printk-nbcon-Start-printing-threads.patch)12
-rw-r--r--debian/patches-rt/0042-serial-mvebu-uart-Use-port-lock-wrappers.patch108
-rw-r--r--debian/patches-rt/0043-proc-Add-nbcon-support-for-proc-consoles.patch (renamed from debian/patches-rt/0127-proc-Add-nbcon-support-for-proc-consoles.patch)4
-rw-r--r--debian/patches-rt/0043-serial-omap-Use-port-lock-wrappers.patch180
-rw-r--r--debian/patches-rt/0044-serial-owl-Use-port-lock-wrappers.patch147
-rw-r--r--debian/patches-rt/0044-tty-sysfs-Add-nbcon-support-for-active.patch (renamed from debian/patches-rt/0128-tty-sysfs-Add-nbcon-support-for-active.patch)6
-rw-r--r--debian/patches-rt/0045-printk-nbcon-Provide-function-to-reacquire-ownership.patch (renamed from debian/patches-rt/0129-printk-nbcon-Provide-function-to-reacquire-ownership.patch)7
-rw-r--r--debian/patches-rt/0045-serial-pch-Use-port-lock-wrappers.patch80
-rw-r--r--debian/patches-rt/0046-serial-core-Provide-low-level-functions-to-port-lock.patch (renamed from debian/patches-rt/0130-serial-core-Provide-low-level-functions-to-port-lock.patch)5
-rw-r--r--debian/patches-rt/0046-serial-pic32-Use-port-lock-wrappers.patch118
-rw-r--r--debian/patches-rt/0047-serial-8250-Switch-to-nbcon-console.patch (renamed from debian/patches-rt/0131-serial-8250-Switch-to-nbcon-console.patch)22
-rw-r--r--debian/patches-rt/0047-serial-pmac_zilog-Use-port-lock-wrappers.patch232
-rw-r--r--debian/patches-rt/0048-printk-Add-kthread-for-all-legacy-consoles.patch (renamed from debian/patches-rt/0132-printk-Add-kthread-for-all-legacy-consoles.patch)30
-rw-r--r--debian/patches-rt/0048-serial-pxa-Use-port-lock-wrappers.patch150
-rw-r--r--debian/patches-rt/0049-serial-8250-revert-drop-lockdep-annotation-from-seri.patch (renamed from debian/patches-rt/0133-serial-8250-revert-drop-lockdep-annotation-from-seri.patch)6
-rw-r--r--debian/patches-rt/0049-serial-qcom-geni-Use-port-lock-wrappers.patch71
-rw-r--r--debian/patches-rt/0050-printk-Avoid-false-positive-lockdep-report-for-legac.patch (renamed from debian/patches-rt/0134-printk-Avoid-false-positive-lockdep-report-for-legac.patch)14
-rw-r--r--debian/patches-rt/0050-serial-rda-Use-port-lock-wrappers.patch177
-rw-r--r--debian/patches-rt/0051-serial-rp2-Use-port-lock-wrappers.patch114
-rw-r--r--debian/patches-rt/0052-serial-sa1100-Use-port-lock-wrappers.patch117
-rw-r--r--debian/patches-rt/0053-serial-samsung_tty-Use-port-lock-wrappers.patch245
-rw-r--r--debian/patches-rt/0054-serial-sb1250-duart-Use-port-lock-wrappers.patch85
-rw-r--r--debian/patches-rt/0056-serial-tegra-Use-port-lock-wrappers.patch176
-rw-r--r--debian/patches-rt/0057-serial-core-Use-port-lock-wrappers.patch365
-rw-r--r--debian/patches-rt/0058-serial-mctrl_gpio-Use-port-lock-wrappers.patch58
-rw-r--r--debian/patches-rt/0059-serial-txx9-Use-port-lock-wrappers.patch134
-rw-r--r--debian/patches-rt/0060-serial-sh-sci-Use-port-lock-wrappers.patch302
-rw-r--r--debian/patches-rt/0061-serial-sifive-Use-port-lock-wrappers.patch102
-rw-r--r--debian/patches-rt/0062-serial-sprd-Use-port-lock-wrappers.patch162
-rw-r--r--debian/patches-rt/0063-serial-st-asc-Use-port-lock-wrappers.patch110
-rw-r--r--debian/patches-rt/0064-serial-stm32-Use-port-lock-wrappers.patch184
-rw-r--r--debian/patches-rt/0065-serial-sunhv-Use-port-lock-wrappers.patch149
-rw-r--r--debian/patches-rt/0066-serial-sunplus-uart-Use-port-lock-wrappers.patch146
-rw-r--r--debian/patches-rt/0067-serial-sunsab-Use-port-lock-wrappers.patch176
-rw-r--r--debian/patches-rt/0068-serial-sunsu-Use-port-lock-wrappers.patch219
-rw-r--r--debian/patches-rt/0069-serial-sunzilog-Use-port-lock-wrappers.patch211
-rw-r--r--debian/patches-rt/0070-serial-timbuart-Use-port-lock-wrappers.patch71
-rw-r--r--debian/patches-rt/0071-serial-uartlite-Use-port-lock-wrappers.patch105
-rw-r--r--debian/patches-rt/0072-serial-ucc_uart-Use-port-lock-wrappers.patch59
-rw-r--r--debian/patches-rt/0073-serial-vt8500-Use-port-lock-wrappers.patch76
-rw-r--r--debian/patches-rt/0074-serial-xilinx_uartps-Use-port-lock-wrappers.patch276
-rw-r--r--debian/patches-rt/0075-printk-Add-non-BKL-nbcon-console-basic-infrastructur.patch261
-rw-r--r--debian/patches-rt/0076-printk-nbcon-Add-acquire-release-logic.patch705
-rw-r--r--debian/patches-rt/0077-printk-Make-static-printk-buffers-available-to-nbcon.patch65
-rw-r--r--debian/patches-rt/0078-printk-nbcon-Add-buffer-management.patch311
-rw-r--r--debian/patches-rt/0079-printk-nbcon-Add-ownership-state-functions.patch179
-rw-r--r--debian/patches-rt/0080-printk-nbcon-Add-sequence-handling.patch311
-rw-r--r--debian/patches-rt/0081-printk-nbcon-Add-emit-function-and-callback-function.patch262
-rw-r--r--debian/patches-rt/0082-printk-nbcon-Allow-drivers-to-mark-unsafe-regions-an.patch136
-rw-r--r--debian/patches-rt/0083-printk-fix-illegal-pbufs-access-for-CONFIG_PRINTK.patch134
-rw-r--r--debian/patches-rt/0084-printk-Reduce-pr_flush-pooling-time.patch102
-rw-r--r--debian/patches-rt/ARM64__Allow_to_enable_RT.patch2
-rw-r--r--debian/patches-rt/ARM__Allow_to_enable_RT.patch6
-rw-r--r--debian/patches-rt/ARM__enable_irq_in_translation_section_permission_fault_handlers.patch2
-rw-r--r--debian/patches-rt/Add_localversion_for_-RT_release.patch4
-rw-r--r--debian/patches-rt/POWERPC__Allow_to_enable_RT.patch4
-rw-r--r--debian/patches-rt/PREEMPT_AUTO.patch56
-rw-r--r--debian/patches-rt/RISC-V-Probe-misaligned-access-speed-in-parallel.patch197
-rw-r--r--debian/patches-rt/Revert-drm-i915-Depend-on-PREEMPT_RT.patch2
-rw-r--r--debian/patches-rt/drm-i915-Do-not-disable-preemption-for-resets.patch99
-rw-r--r--debian/patches-rt/drm-i915-guc-Consider-also-RCU-depth-in-busy-loop.patch4
-rw-r--r--debian/patches-rt/net-Avoid-the-IPI-to-free-the.patch12
-rw-r--r--debian/patches-rt/powerpc-pseries-Select-the-generic-memory-allocator.patch2
-rw-r--r--debian/patches-rt/powerpc__traps__Use_PREEMPT_RT.patch2
-rw-r--r--debian/patches-rt/powerpc_kvm__Disable_in-kernel_MPIC_emulation_for_PREEMPT_RT.patch2
-rw-r--r--debian/patches-rt/powerpc_pseries_iommu__Use_a_locallock_instead_local_irq_save.patch2
-rw-r--r--debian/patches-rt/powerpc_stackprotector__work_around_stack-guard_init_from_atomic.patch2
-rw-r--r--debian/patches-rt/preempt-Put-preempt_enable-within-an-instrumentation.patch2
-rw-r--r--debian/patches-rt/rcutorture-Also-force-sched-priority-to-timersd-on-b.patch4
-rw-r--r--debian/patches-rt/riscv-add-PREEMPT_AUTO-support.patch8
-rw-r--r--debian/patches-rt/riscv-allow-to-enable-RT.patch6
-rw-r--r--debian/patches-rt/sched-rt-Don-t-try-push-tasks-if-there-are-none.patch4
-rw-r--r--debian/patches-rt/series203
-rw-r--r--debian/patches-rt/softirq-Use-a-dedicated-thread-for-timer-wakeups.patch2
-rw-r--r--debian/patches-rt/softirq-Wake-ktimers-thread-also-in-softirq.patch2
-rw-r--r--debian/patches-rt/sysfs__Add__sys_kernel_realtime_entry.patch2
-rw-r--r--debian/patches-rt/tick-Fix-timer-storm-since-introduction-of-timersd.patch4
-rw-r--r--debian/patches-rt/tty_serial_omap__Make_the_locking_RT_aware.patch2
-rw-r--r--debian/patches-rt/tty_serial_pl011__Make_the_locking_work_on_RT.patch2
-rw-r--r--debian/patches-rt/x86__Allow_to_enable_RT.patch4
-rw-r--r--debian/patches-rt/x86__Enable_RT_also_on_32bit.patch14
-rw-r--r--debian/patches-rt/zram-Replace-bit-spinlocks-with-spinlock_t-for-PREEM.patch4
193 files changed, 364 insertions, 15078 deletions
diff --git a/debian/patches-rt/0001-ARM-vfp-Provide-vfp_lock-for-VFP-locking.patch b/debian/patches-rt/0001-ARM-vfp-Provide-vfp_lock-for-VFP-locking.patch
index 03eb551db3..cd81c1d780 100644
--- a/debian/patches-rt/0001-ARM-vfp-Provide-vfp_lock-for-VFP-locking.patch
+++ b/debian/patches-rt/0001-ARM-vfp-Provide-vfp_lock-for-VFP-locking.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri, 19 May 2023 16:57:29 +0200
Subject: [PATCH 1/4] ARM: vfp: Provide vfp_lock() for VFP locking.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
kernel_neon_begin() uses local_bh_disable() to ensure exclusive access
to the VFP unit. This is broken on PREEMPT_RT because a BH disabled
diff --git a/debian/patches-rt/0001-arm-Disable-jump-label-on-PREEMPT_RT.patch b/debian/patches-rt/0001-arm-Disable-jump-label-on-PREEMPT_RT.patch
index 5c8c179aef..c312f1b8a3 100644
--- a/debian/patches-rt/0001-arm-Disable-jump-label-on-PREEMPT_RT.patch
+++ b/debian/patches-rt/0001-arm-Disable-jump-label-on-PREEMPT_RT.patch
@@ -1,7 +1,7 @@
From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 8 Jul 2015 17:14:48 +0200
Subject: [PATCH 1/2] arm: Disable jump-label on PREEMPT_RT.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
jump-labels are used to efficiently switch between two possible code
paths. To achieve this, stop_machine() is used to keep the CPU in a
@@ -25,7 +25,7 @@ Link: https://lkml.kernel.org/r/20220613182447.112191-2-bigeasy@linutronix.de
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
-@@ -73,7 +73,7 @@ config ARM
+@@ -74,7 +74,7 @@ config ARM
select HAS_IOPORT
select HAVE_ARCH_AUDITSYSCALL if AEABI && !OABI_COMPAT
select HAVE_ARCH_BITREVERSE if (CPU_32v7M || CPU_32v7) && !CPU_32v6
diff --git a/debian/patches-rt/0001-drm-amd-display-Remove-migrate_en-dis-from-dc_fpu_be.patch b/debian/patches-rt/0001-drm-amd-display-Remove-migrate_en-dis-from-dc_fpu_be.patch
deleted file mode 100644
index b78f988da5..0000000000
--- a/debian/patches-rt/0001-drm-amd-display-Remove-migrate_en-dis-from-dc_fpu_be.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Thu, 21 Sep 2023 16:15:12 +0200
-Subject: [PATCH 1/5] drm/amd/display: Remove migrate_en/dis from
- dc_fpu_begin().
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-This is a revert of the commit mentioned below while it is not wrong, as
-in the kernel will explode, having migrate_disable() here it is
-complete waste of resources.
-
-Additionally commit message is plain wrong the review tag does not make
-it any better. The migrate_disable() interface has a fat comment
-describing it and it includes the word "undesired" in the headline which
-should tickle people to read it before using it.
-Initially I assumed it is worded too harsh but now I beg to differ.
-
-The reviewer of the original commit, even not understanding what
-migrate_disable() does should ask the following:
-
-- migrate_disable() is added only to the CONFIG_X86 block and it claims
- to protect fpu_recursion_depth. Why are the other the architectures
- excluded?
-
-- migrate_disable() is added after fpu_recursion_depth was modified.
- Shouldn't it be added before the modification or referencing takes
- place?
-
-Moving on.
-Disabling preemption DOES prevent CPU migration. A task, that can not be
-pushed away from the CPU by the scheduler (due to disabled preemption)
-can not be pushed or migrated to another CPU.
-
-Disabling migration DOES NOT ensure consistency of per-CPU variables. It
-only ensures that the task acts always on the same per-CPU variable. The
-task remains preemptible meaning multiple tasks can access the same
-per-CPU variable. This in turn leads to inconsistency for the statement
-
- *pcpu -= 1;
-
-with two tasks on one CPU and a preemption point during the RMW
-operation:
-
- Task A Task B
- read pcpu to reg # 0
- inc reg # 0 -> 1
- read pcpu to reg # 0
- inc reg # 0 -> 1
- write reg to pcpu # 1
- write reg to pcpu # 1
-
-At the end pcpu reads 1 but should read 2 instead. Boom.
-
-get_cpu_ptr() already contains a preempt_disable() statement. That means
-that the per-CPU variable can only be referenced by a single task which
-is currently running. The only inconsistency that can occur if the
-variable is additionally accessed from an interrupt.
-
-Remove migrate_disable/enable() from dc_fpu_begin/end().
-
-Cc: Tianci Yin <tianci.yin@amd.com>
-Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
-Fixes: 0c316556d1249 ("drm/amd/display: Disable migration to ensure consistency of per-CPU variable")
-Link: https://lore.kernel.org/r/20230921141516.520471-2-bigeasy@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c | 2 --
- 1 file changed, 2 deletions(-)
-
---- a/drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c
-+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c
-@@ -91,7 +91,6 @@ void dc_fpu_begin(const char *function_n
-
- if (*pcpu == 1) {
- #if defined(CONFIG_X86) || defined(CONFIG_LOONGARCH)
-- migrate_disable();
- kernel_fpu_begin();
- #elif defined(CONFIG_PPC64)
- if (cpu_has_feature(CPU_FTR_VSX_COMP)) {
-@@ -132,7 +131,6 @@ void dc_fpu_end(const char *function_nam
- if (*pcpu <= 0) {
- #if defined(CONFIG_X86) || defined(CONFIG_LOONGARCH)
- kernel_fpu_end();
-- migrate_enable();
- #elif defined(CONFIG_PPC64)
- if (cpu_has_feature(CPU_FTR_VSX_COMP)) {
- disable_kernel_vsx();
diff --git a/debian/patches-rt/0085-printk-nbcon-Relocate-32bit-seq-macros.patch b/debian/patches-rt/0001-printk-nbcon-Relocate-32bit-seq-macros.patch
index 6d1cf3686b..5de6d46854 100644
--- a/debian/patches-rt/0085-printk-nbcon-Relocate-32bit-seq-macros.patch
+++ b/debian/patches-rt/0001-printk-nbcon-Relocate-32bit-seq-macros.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Wed, 6 Dec 2023 12:01:56 +0000
-Subject: [PATCH 085/134] printk: nbcon: Relocate 32bit seq macros
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 01/50] printk: nbcon: Relocate 32bit seq macros
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The macros __seq_to_nbcon_seq() and __nbcon_seq_to_seq() are
used to provide support for atomic handling of sequence numbers
diff --git a/debian/patches-rt/0001-sched-Constrain-locks-in-sched_submit_work.patch b/debian/patches-rt/0001-sched-Constrain-locks-in-sched_submit_work.patch
deleted file mode 100644
index 73828f0efd..0000000000
--- a/debian/patches-rt/0001-sched-Constrain-locks-in-sched_submit_work.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From: Peter Zijlstra <peterz@infradead.org>
-Date: Fri, 8 Sep 2023 18:22:48 +0200
-Subject: [PATCH 1/7] sched: Constrain locks in sched_submit_work()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-Even though sched_submit_work() is ran from preemptible context,
-it is discouraged to have it use blocking locks due to the recursion
-potential.
-
-Enforce this.
-
-Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
-Link: https://lkml.kernel.org/r/20230908162254.999499-2-bigeasy@linutronix.de
----
- kernel/sched/core.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -6721,11 +6721,18 @@ void __noreturn do_task_dead(void)
-
- static inline void sched_submit_work(struct task_struct *tsk)
- {
-+ static DEFINE_WAIT_OVERRIDE_MAP(sched_map, LD_WAIT_CONFIG);
- unsigned int task_flags;
-
- if (task_is_running(tsk))
- return;
-
-+ /*
-+ * Establish LD_WAIT_CONFIG context to ensure none of the code called
-+ * will use a blocking primitive -- which would lead to recursion.
-+ */
-+ lock_map_acquire_try(&sched_map);
-+
- task_flags = tsk->flags;
- /*
- * If a worker goes to sleep, notify and ask workqueue whether it
-@@ -6750,6 +6757,8 @@ static inline void sched_submit_work(str
- * make sure to submit it to avoid deadlocks.
- */
- blk_flush_plug(tsk->plug, true);
-+
-+ lock_map_release(&sched_map);
- }
-
- static void sched_update_worker(struct task_struct *tsk)
diff --git a/debian/patches-rt/0001-sched-core-Provide-a-method-to-check-if-a-task-is-PI.patch b/debian/patches-rt/0001-sched-core-Provide-a-method-to-check-if-a-task-is-PI.patch
index 35892558e6..9cab94caae 100644
--- a/debian/patches-rt/0001-sched-core-Provide-a-method-to-check-if-a-task-is-PI.patch
+++ b/debian/patches-rt/0001-sched-core-Provide-a-method-to-check-if-a-task-is-PI.patch
@@ -2,7 +2,7 @@ From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri, 4 Aug 2023 13:30:37 +0200
Subject: [PATCH 1/3] sched/core: Provide a method to check if a task is
PI-boosted.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Provide a method to check if a task inherited the priority from another
task. This happens if a task owns a lock which is requested by a task
@@ -20,7 +20,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
-@@ -1905,6 +1905,7 @@ static inline int dl_task_check_affinity
+@@ -1910,6 +1910,7 @@ static inline int dl_task_check_affinity
}
#endif
@@ -30,7 +30,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
extern int task_prio(const struct task_struct *p);
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
-@@ -8923,6 +8923,21 @@ static inline void preempt_dynamic_init(
+@@ -8865,6 +8865,21 @@ static inline void preempt_dynamic_init(
#endif /* #ifdef CONFIG_PREEMPT_DYNAMIC */
diff --git a/debian/patches-rt/0001-signal-Add-proper-comment-about-the-preempt-disable-.patch b/debian/patches-rt/0001-signal-Add-proper-comment-about-the-preempt-disable-.patch
deleted file mode 100644
index e00261d790..0000000000
--- a/debian/patches-rt/0001-signal-Add-proper-comment-about-the-preempt-disable-.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Thu, 3 Aug 2023 12:09:31 +0200
-Subject: [PATCH 1/2] signal: Add proper comment about the preempt-disable in
- ptrace_stop().
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-Commit 53da1d9456fe7 ("fix ptrace slowness") added a preempt-disable section
-between read_unlock() and the following schedule() invocation without
-explaining why it is needed.
-
-Replace the comment with an explanation why this is needed. Clarify that
-it is needed for correctness but for performance reasons.
-
-Acked-by: Oleg Nesterov <oleg@redhat.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Link: https://lore.kernel.org/r/20230803100932.325870-2-bigeasy@linutronix.de
----
- kernel/signal.c | 17 ++++++++++++++---
- 1 file changed, 14 insertions(+), 3 deletions(-)
-
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -2329,10 +2329,21 @@ static int ptrace_stop(int exit_code, in
- do_notify_parent_cldstop(current, false, why);
-
- /*
-- * Don't want to allow preemption here, because
-- * sys_ptrace() needs this task to be inactive.
-+ * The previous do_notify_parent_cldstop() invocation woke ptracer.
-+ * One a PREEMPTION kernel this can result in preemption requirement
-+ * which will be fulfilled after read_unlock() and the ptracer will be
-+ * put on the CPU.
-+ * The ptracer is in wait_task_inactive(, __TASK_TRACED) waiting for
-+ * this task wait in schedule(). If this task gets preempted then it
-+ * remains enqueued on the runqueue. The ptracer will observe this and
-+ * then sleep for a delay of one HZ tick. In the meantime this task
-+ * gets scheduled, enters schedule() and will wait for the ptracer.
- *
-- * XXX: implement read_unlock_no_resched().
-+ * This preemption point is not bad from correctness point of view but
-+ * extends the runtime by one HZ tick time due to the ptracer's sleep.
-+ * The preempt-disable section ensures that there will be no preemption
-+ * between unlock and schedule() and so improving the performance since
-+ * the ptracer has no reason to sleep.
- */
- preempt_disable();
- read_unlock(&tasklist_lock);
diff --git a/debian/patches-rt/0002-ARM-vfp-Use-vfp_lock-in-vfp_sync_hwstate.patch b/debian/patches-rt/0002-ARM-vfp-Use-vfp_lock-in-vfp_sync_hwstate.patch
index a0d93547cd..c9c30ad81c 100644
--- a/debian/patches-rt/0002-ARM-vfp-Use-vfp_lock-in-vfp_sync_hwstate.patch
+++ b/debian/patches-rt/0002-ARM-vfp-Use-vfp_lock-in-vfp_sync_hwstate.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri, 19 May 2023 16:57:30 +0200
Subject: [PATCH 2/4] ARM: vfp: Use vfp_lock() in vfp_sync_hwstate().
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
vfp_sync_hwstate() uses preempt_disable() followed by local_bh_disable()
to ensure that it won't get interrupted while checking the VFP state.
diff --git a/debian/patches-rt/0002-drm-amd-display-Simplify-the-per-CPU-usage.patch b/debian/patches-rt/0002-drm-amd-display-Simplify-the-per-CPU-usage.patch
deleted file mode 100644
index fd18d53e2d..0000000000
--- a/debian/patches-rt/0002-drm-amd-display-Simplify-the-per-CPU-usage.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Thu, 21 Sep 2023 16:15:13 +0200
-Subject: [PATCH 2/5] drm/amd/display: Simplify the per-CPU usage.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-The fpu_recursion_depth counter is used to ensure that dc_fpu_begin()
-can be invoked multiple times while the FPU-disable function itself is
-only invoked once. Also the counter part (dc_fpu_end()) is ballanced
-properly.
-
-Instead of using the get_cpu_ptr() dance around the inc it is simpler to
-increment the per-CPU variable directly. Also the per-CPU variable has
-to be incremented and decremented on the same CPU. This is ensured by
-the inner-part which disables preemption. This is kind of not obvious,
-works and the preempt-counter is touched a few times for no reason.
-
-Disable preemption before incrementing fpu_recursion_depth for the first
-time. Keep preemption disabled until dc_fpu_end() where the counter is
-decremented making it obvious that the preemption has to stay disabled
-while the counter is non-zero.
-Use simple inc/dec functions.
-Remove the nested preempt_disable/enable functions which are now not
-needed.
-
-Link: https://lore.kernel.org/r/20230921141516.520471-3-bigeasy@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c | 50 ++++++++++---------------
- 1 file changed, 20 insertions(+), 30 deletions(-)
-
---- a/drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c
-+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c
-@@ -60,11 +60,9 @@ static DEFINE_PER_CPU(int, fpu_recursion
- */
- inline void dc_assert_fp_enabled(void)
- {
-- int *pcpu, depth = 0;
-+ int depth;
-
-- pcpu = get_cpu_ptr(&fpu_recursion_depth);
-- depth = *pcpu;
-- put_cpu_ptr(&fpu_recursion_depth);
-+ depth = __this_cpu_read(fpu_recursion_depth);
-
- ASSERT(depth >= 1);
- }
-@@ -84,32 +82,27 @@ inline void dc_assert_fp_enabled(void)
- */
- void dc_fpu_begin(const char *function_name, const int line)
- {
-- int *pcpu;
-+ int depth;
-
-- pcpu = get_cpu_ptr(&fpu_recursion_depth);
-- *pcpu += 1;
-+ preempt_disable();
-+ depth = __this_cpu_inc_return(fpu_recursion_depth);
-
-- if (*pcpu == 1) {
-+ if (depth == 1) {
- #if defined(CONFIG_X86) || defined(CONFIG_LOONGARCH)
- kernel_fpu_begin();
- #elif defined(CONFIG_PPC64)
-- if (cpu_has_feature(CPU_FTR_VSX_COMP)) {
-- preempt_disable();
-+ if (cpu_has_feature(CPU_FTR_VSX_COMP))
- enable_kernel_vsx();
-- } else if (cpu_has_feature(CPU_FTR_ALTIVEC_COMP)) {
-- preempt_disable();
-+ else if (cpu_has_feature(CPU_FTR_ALTIVEC_COMP))
- enable_kernel_altivec();
-- } else if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE)) {
-- preempt_disable();
-+ else if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE))
- enable_kernel_fp();
-- }
- #elif defined(CONFIG_ARM64)
- kernel_neon_begin();
- #endif
- }
-
-- TRACE_DCN_FPU(true, function_name, line, *pcpu);
-- put_cpu_ptr(&fpu_recursion_depth);
-+ TRACE_DCN_FPU(true, function_name, line, depth);
- }
-
- /**
-@@ -124,29 +117,26 @@ void dc_fpu_begin(const char *function_n
- */
- void dc_fpu_end(const char *function_name, const int line)
- {
-- int *pcpu;
-+ int depth;
-
-- pcpu = get_cpu_ptr(&fpu_recursion_depth);
-- *pcpu -= 1;
-- if (*pcpu <= 0) {
-+ depth = __this_cpu_dec_return(fpu_recursion_depth);
-+ if (depth == 0) {
- #if defined(CONFIG_X86) || defined(CONFIG_LOONGARCH)
- kernel_fpu_end();
- #elif defined(CONFIG_PPC64)
-- if (cpu_has_feature(CPU_FTR_VSX_COMP)) {
-+ if (cpu_has_feature(CPU_FTR_VSX_COMP))
- disable_kernel_vsx();
-- preempt_enable();
-- } else if (cpu_has_feature(CPU_FTR_ALTIVEC_COMP)) {
-+ else if (cpu_has_feature(CPU_FTR_ALTIVEC_COMP))
- disable_kernel_altivec();
-- preempt_enable();
-- } else if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE)) {
-+ else if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE))
- disable_kernel_fp();
-- preempt_enable();
-- }
- #elif defined(CONFIG_ARM64)
- kernel_neon_end();
- #endif
-+ } else {
-+ WARN_ON_ONCE(depth < 0);
- }
-
-- TRACE_DCN_FPU(false, function_name, line, *pcpu);
-- put_cpu_ptr(&fpu_recursion_depth);
-+ TRACE_DCN_FPU(false, function_name, line, depth);
-+ preempt_enable();
- }
diff --git a/debian/patches-rt/0002-locking-rtmutex-Avoid-unconditional-slowpath-for-DEB.patch b/debian/patches-rt/0002-locking-rtmutex-Avoid-unconditional-slowpath-for-DEB.patch
deleted file mode 100644
index 561d5891b1..0000000000
--- a/debian/patches-rt/0002-locking-rtmutex-Avoid-unconditional-slowpath-for-DEB.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Fri, 8 Sep 2023 18:22:49 +0200
-Subject: [PATCH 2/7] locking/rtmutex: Avoid unconditional slowpath for
- DEBUG_RT_MUTEXES
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-With DEBUG_RT_MUTEXES enabled the fast-path rt_mutex_cmpxchg_acquire()
-always fails and all lock operations take the slow path.
-
-Provide a new helper inline rt_mutex_try_acquire() which maps to
-rt_mutex_cmpxchg_acquire() in the non-debug case. For the debug case
-it invokes rt_mutex_slowtrylock() which can acquire a non-contended
-rtmutex under full debug coverage.
-
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
-Link: https://lkml.kernel.org/r/20230908162254.999499-3-bigeasy@linutronix.de
----
- kernel/locking/rtmutex.c | 21 ++++++++++++++++++++-
- kernel/locking/ww_rt_mutex.c | 2 +-
- 2 files changed, 21 insertions(+), 2 deletions(-)
-
---- a/kernel/locking/rtmutex.c
-+++ b/kernel/locking/rtmutex.c
-@@ -218,6 +218,11 @@ static __always_inline bool rt_mutex_cmp
- return try_cmpxchg_acquire(&lock->owner, &old, new);
- }
-
-+static __always_inline bool rt_mutex_try_acquire(struct rt_mutex_base *lock)
-+{
-+ return rt_mutex_cmpxchg_acquire(lock, NULL, current);
-+}
-+
- static __always_inline bool rt_mutex_cmpxchg_release(struct rt_mutex_base *lock,
- struct task_struct *old,
- struct task_struct *new)
-@@ -297,6 +302,20 @@ static __always_inline bool rt_mutex_cmp
-
- }
-
-+static int __sched rt_mutex_slowtrylock(struct rt_mutex_base *lock);
-+
-+static __always_inline bool rt_mutex_try_acquire(struct rt_mutex_base *lock)
-+{
-+ /*
-+ * With debug enabled rt_mutex_cmpxchg trylock() will always fail.
-+ *
-+ * Avoid unconditionally taking the slow path by using
-+ * rt_mutex_slow_trylock() which is covered by the debug code and can
-+ * acquire a non-contended rtmutex.
-+ */
-+ return rt_mutex_slowtrylock(lock);
-+}
-+
- static __always_inline bool rt_mutex_cmpxchg_release(struct rt_mutex_base *lock,
- struct task_struct *old,
- struct task_struct *new)
-@@ -1755,7 +1774,7 @@ static int __sched rt_mutex_slowlock(str
- static __always_inline int __rt_mutex_lock(struct rt_mutex_base *lock,
- unsigned int state)
- {
-- if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current)))
-+ if (likely(rt_mutex_try_acquire(lock)))
- return 0;
-
- return rt_mutex_slowlock(lock, NULL, state);
---- a/kernel/locking/ww_rt_mutex.c
-+++ b/kernel/locking/ww_rt_mutex.c
-@@ -62,7 +62,7 @@ static int __sched
- }
- mutex_acquire_nest(&rtm->dep_map, 0, 0, nest_lock, ip);
-
-- if (likely(rt_mutex_cmpxchg_acquire(&rtm->rtmutex, NULL, current))) {
-+ if (likely(rt_mutex_try_acquire(&rtm->rtmutex))) {
- if (ww_ctx)
- ww_mutex_set_context_fastpath(lock, ww_ctx);
- return 0;
diff --git a/debian/patches-rt/0086-printk-Adjust-mapping-for-32bit-seq-macros.patch b/debian/patches-rt/0002-printk-Adjust-mapping-for-32bit-seq-macros.patch
index d6ff341f46..610a2d3151 100644
--- a/debian/patches-rt/0086-printk-Adjust-mapping-for-32bit-seq-macros.patch
+++ b/debian/patches-rt/0002-printk-Adjust-mapping-for-32bit-seq-macros.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Thu, 7 Dec 2023 14:15:15 +0000
-Subject: [PATCH 086/134] printk: Adjust mapping for 32bit seq macros
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 02/50] printk: Adjust mapping for 32bit seq macros
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Note: This change only applies to 32bit architectures. On 64bit
architectures the macros are NOPs.
diff --git a/debian/patches-rt/0002-serial-core-Use-lock-wrappers.patch b/debian/patches-rt/0002-serial-core-Use-lock-wrappers.patch
deleted file mode 100644
index ad41a3dc78..0000000000
--- a/debian/patches-rt/0002-serial-core-Use-lock-wrappers.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:19 +0206
-Subject: [PATCH 002/134] serial: core: Use lock wrappers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-3-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- include/linux/serial_core.h | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
---- a/include/linux/serial_core.h
-+++ b/include/linux/serial_core.h
-@@ -1035,14 +1035,14 @@ static inline void uart_unlock_and_check
- u8 sysrq_ch;
-
- if (!port->has_sysrq) {
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- return;
- }
-
- sysrq_ch = port->sysrq_ch;
- port->sysrq_ch = 0;
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- if (sysrq_ch)
- handle_sysrq(sysrq_ch);
-@@ -1054,14 +1054,14 @@ static inline void uart_unlock_and_check
- u8 sysrq_ch;
-
- if (!port->has_sysrq) {
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- return;
- }
-
- sysrq_ch = port->sysrq_ch;
- port->sysrq_ch = 0;
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (sysrq_ch)
- handle_sysrq(sysrq_ch);
-@@ -1077,12 +1077,12 @@ static inline int uart_prepare_sysrq_cha
- }
- static inline void uart_unlock_and_check_sysrq(struct uart_port *port)
- {
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- }
- static inline void uart_unlock_and_check_sysrq_irqrestore(struct uart_port *port,
- unsigned long flags)
- {
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
- #endif /* CONFIG_MAGIC_SYSRQ_SERIAL */
-
diff --git a/debian/patches-rt/0002-signal-Don-t-disable-preemption-in-ptrace_stop-on-PR.patch b/debian/patches-rt/0002-signal-Don-t-disable-preemption-in-ptrace_stop-on-PR.patch
deleted file mode 100644
index 01e89d97ab..0000000000
--- a/debian/patches-rt/0002-signal-Don-t-disable-preemption-in-ptrace_stop-on-PR.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Thu, 3 Aug 2023 12:09:32 +0200
-Subject: [PATCH 2/2] signal: Don't disable preemption in ptrace_stop() on
- PREEMPT_RT.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-On PREEMPT_RT keeping preemption disabled during the invocation of
-cgroup_enter_frozen() is a problem because the function acquires css_set_lock
-which is a sleeping lock on PREEMPT_RT and must not be acquired with disabled
-preemption.
-The preempt-disabled section is only for performance optimisation
-reasons and can be avoided.
-
-Extend the comment and don't disable preemption before scheduling on
-PREEMPT_RT.
-
-Acked-by: Oleg Nesterov <oleg@redhat.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Link: https://lore.kernel.org/r/20230803100932.325870-3-bigeasy@linutronix.de
----
- kernel/signal.c | 13 +++++++++++--
- 1 file changed, 11 insertions(+), 2 deletions(-)
-
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -2344,11 +2344,20 @@ static int ptrace_stop(int exit_code, in
- * The preempt-disable section ensures that there will be no preemption
- * between unlock and schedule() and so improving the performance since
- * the ptracer has no reason to sleep.
-+ *
-+ * On PREEMPT_RT locking tasklist_lock does not disable preemption.
-+ * Therefore the task can be preempted (after
-+ * do_notify_parent_cldstop()) before unlocking tasklist_lock so there
-+ * is no benefit in doing this. The optimisation is harmful on
-+ * PEEMPT_RT because the spinlock_t (in cgroup_enter_frozen()) must not
-+ * be acquired with disabled preemption.
- */
-- preempt_disable();
-+ if (!IS_ENABLED(CONFIG_PREEMPT_RT))
-+ preempt_disable();
- read_unlock(&tasklist_lock);
- cgroup_enter_frozen();
-- preempt_enable_no_resched();
-+ if (!IS_ENABLED(CONFIG_PREEMPT_RT))
-+ preempt_enable_no_resched();
- schedule();
- cgroup_leave_frozen(true);
-
diff --git a/debian/patches-rt/0002-softirq-Add-function-to-preempt-serving-softirqs.patch b/debian/patches-rt/0002-softirq-Add-function-to-preempt-serving-softirqs.patch
index f8cddfa446..642feb6394 100644
--- a/debian/patches-rt/0002-softirq-Add-function-to-preempt-serving-softirqs.patch
+++ b/debian/patches-rt/0002-softirq-Add-function-to-preempt-serving-softirqs.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri, 4 Aug 2023 13:30:38 +0200
Subject: [PATCH 2/3] softirq: Add function to preempt serving softirqs.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Add a functionality for the softirq handler to preempt its current work
if needed. The softirq core has no particular state. It reads and resets
diff --git a/debian/patches-rt/0003-ARM-vfp-Use-vfp_lock-in-vfp_support_entry.patch b/debian/patches-rt/0003-ARM-vfp-Use-vfp_lock-in-vfp_support_entry.patch
index c02278e5a8..45fd3aca6a 100644
--- a/debian/patches-rt/0003-ARM-vfp-Use-vfp_lock-in-vfp_support_entry.patch
+++ b/debian/patches-rt/0003-ARM-vfp-Use-vfp_lock-in-vfp_support_entry.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Wed, 28 Jun 2023 09:36:10 +0200
Subject: [PATCH 3/4] ARM: vfp: Use vfp_lock() in vfp_support_entry().
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
vfp_entry() is invoked from exception handler and is fully preemptible.
It uses local_bh_disable() to remain uninterrupted while checking the
diff --git a/debian/patches-rt/0003-drm-amd-display-Add-a-warning-if-the-FPU-is-used-out.patch b/debian/patches-rt/0003-drm-amd-display-Add-a-warning-if-the-FPU-is-used-out.patch
deleted file mode 100644
index 9e160d5a28..0000000000
--- a/debian/patches-rt/0003-drm-amd-display-Add-a-warning-if-the-FPU-is-used-out.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Thu, 21 Sep 2023 16:15:14 +0200
-Subject: [PATCH 3/5] drm/amd/display: Add a warning if the FPU is used outside
- from task context.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-Add a warning if the FPU is used from any context other than task
-context. This is only precaution since the code is not able to be used
-from softirq while the API allows it on x86 for instance.
-
-Link: https://lore.kernel.org/r/20230921141516.520471-4-bigeasy@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c
-+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c
-@@ -84,6 +84,7 @@ void dc_fpu_begin(const char *function_n
- {
- int depth;
-
-+ WARN_ON_ONCE(!in_task());
- preempt_disable();
- depth = __this_cpu_inc_return(fpu_recursion_depth);
-
diff --git a/debian/patches-rt/0003-drm-i915-Use-preempt_disable-enable_rt-where-recomme.patch b/debian/patches-rt/0003-drm-i915-Use-preempt_disable-enable_rt-where-recomme.patch
index f2752d0901..4e9d58c0b9 100644
--- a/debian/patches-rt/0003-drm-i915-Use-preempt_disable-enable_rt-where-recomme.patch
+++ b/debian/patches-rt/0003-drm-i915-Use-preempt_disable-enable_rt-where-recomme.patch
@@ -2,7 +2,7 @@ From: Mike Galbraith <umgwanakikbuti@gmail.com>
Date: Sat, 27 Feb 2016 08:09:11 +0100
Subject: [PATCH 03/10] drm/i915: Use preempt_disable/enable_rt() where
recommended
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Mario Kleiner suggest in commit
ad3543ede630f ("drm/intel: Push get_scanout_position() timestamping into kms driver.")
@@ -34,7 +34,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/drivers/gpu/drm/i915/display/intel_vblank.c
+++ b/drivers/gpu/drm/i915/display/intel_vblank.c
-@@ -294,7 +294,8 @@ static bool i915_get_crtc_scanoutpos(str
+@@ -308,7 +308,8 @@ static bool i915_get_crtc_scanoutpos(str
*/
spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
@@ -44,7 +44,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/* Get optional system timestamp before query. */
if (stime)
-@@ -358,7 +359,8 @@ static bool i915_get_crtc_scanoutpos(str
+@@ -372,7 +373,8 @@ static bool i915_get_crtc_scanoutpos(str
if (etime)
*etime = ktime_get();
diff --git a/debian/patches-rt/0087-printk-Use-prb_first_seq-as-base-for-32bit-seq-macro.patch b/debian/patches-rt/0003-printk-Use-prb_first_seq-as-base-for-32bit-seq-macro.patch
index 2ed6d52b51..f0412681bf 100644
--- a/debian/patches-rt/0087-printk-Use-prb_first_seq-as-base-for-32bit-seq-macro.patch
+++ b/debian/patches-rt/0003-printk-Use-prb_first_seq-as-base-for-32bit-seq-macro.patch
@@ -1,8 +1,8 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Wed, 22 Nov 2023 16:13:37 +0000
-Subject: [PATCH 087/134] printk: Use prb_first_seq() as base for 32bit seq
+Subject: [PATCH 03/50] printk: Use prb_first_seq() as base for 32bit seq
macros
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Note: This change only applies to 32bit architectures. On 64bit
architectures the macros are NOPs.
diff --git a/debian/patches-rt/0003-sched-Extract-__schedule_loop.patch b/debian/patches-rt/0003-sched-Extract-__schedule_loop.patch
deleted file mode 100644
index a236df5321..0000000000
--- a/debian/patches-rt/0003-sched-Extract-__schedule_loop.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Fri, 8 Sep 2023 18:22:50 +0200
-Subject: [PATCH 3/7] sched: Extract __schedule_loop()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-There are currently two implementations of this basic __schedule()
-loop, and there is soon to be a third.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
-Link: https://lkml.kernel.org/r/20230908162254.999499-4-bigeasy@linutronix.de
----
- kernel/sched/core.c | 21 +++++++++++----------
- 1 file changed, 11 insertions(+), 10 deletions(-)
-
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -6771,16 +6771,21 @@ static void sched_update_worker(struct t
- }
- }
-
--asmlinkage __visible void __sched schedule(void)
-+static __always_inline void __schedule_loop(unsigned int sched_mode)
- {
-- struct task_struct *tsk = current;
--
-- sched_submit_work(tsk);
- do {
- preempt_disable();
-- __schedule(SM_NONE);
-+ __schedule(sched_mode);
- sched_preempt_enable_no_resched();
- } while (need_resched());
-+}
-+
-+asmlinkage __visible void __sched schedule(void)
-+{
-+ struct task_struct *tsk = current;
-+
-+ sched_submit_work(tsk);
-+ __schedule_loop(SM_NONE);
- sched_update_worker(tsk);
- }
- EXPORT_SYMBOL(schedule);
-@@ -6844,11 +6849,7 @@ void __sched schedule_preempt_disabled(v
- #ifdef CONFIG_PREEMPT_RT
- void __sched notrace schedule_rtlock(void)
- {
-- do {
-- preempt_disable();
-- __schedule(SM_RTLOCK_WAIT);
-- sched_preempt_enable_no_resched();
-- } while (need_resched());
-+ __schedule_loop(SM_RTLOCK_WAIT);
- }
- NOKPROBE_SYMBOL(schedule_rtlock);
- #endif
diff --git a/debian/patches-rt/0003-serial-21285-Use-port-lock-wrappers.patch b/debian/patches-rt/0003-serial-21285-Use-port-lock-wrappers.patch
deleted file mode 100644
index e025de601c..0000000000
--- a/debian/patches-rt/0003-serial-21285-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:20 +0206
-Subject: [PATCH 003/134] serial: 21285: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-4-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/21285.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/tty/serial/21285.c
-+++ b/drivers/tty/serial/21285.c
-@@ -185,14 +185,14 @@ static void serial21285_break_ctl(struct
- unsigned long flags;
- unsigned int h_lcr;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- h_lcr = *CSR_H_UBRLCR;
- if (break_state)
- h_lcr |= H_UBRLCR_BREAK;
- else
- h_lcr &= ~H_UBRLCR_BREAK;
- *CSR_H_UBRLCR = h_lcr;
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int serial21285_startup(struct uart_port *port)
-@@ -272,7 +272,7 @@ serial21285_set_termios(struct uart_port
- if (port->fifosize)
- h_lcr |= H_UBRLCR_FIFO;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /*
- * Update the per-port timeout.
-@@ -309,7 +309,7 @@ serial21285_set_termios(struct uart_port
- *CSR_H_UBRLCR = h_lcr;
- *CSR_UARTCON = 1;
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *serial21285_type(struct uart_port *port)
diff --git a/debian/patches-rt/0003-time-Allow-to-preempt-after-a-callback.patch b/debian/patches-rt/0003-time-Allow-to-preempt-after-a-callback.patch
index 7ede7d6ae5..ac1a234ddf 100644
--- a/debian/patches-rt/0003-time-Allow-to-preempt-after-a-callback.patch
+++ b/debian/patches-rt/0003-time-Allow-to-preempt-after-a-callback.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri, 4 Aug 2023 13:30:39 +0200
Subject: [PATCH 3/3] time: Allow to preempt after a callback.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The TIMER_SOFTIRQ handler invokes timer callbacks of the expired timers.
Before each invocation the timer_base::lock is dropped. The only lock
diff --git a/debian/patches-rt/0004-ARM-vfp-Move-sending-signals-outside-of-vfp_lock-ed-.patch b/debian/patches-rt/0004-ARM-vfp-Move-sending-signals-outside-of-vfp_lock-ed-.patch
index f7e006261e..8c9259a872 100644
--- a/debian/patches-rt/0004-ARM-vfp-Move-sending-signals-outside-of-vfp_lock-ed-.patch
+++ b/debian/patches-rt/0004-ARM-vfp-Move-sending-signals-outside-of-vfp_lock-ed-.patch
@@ -2,7 +2,7 @@ From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Wed, 28 Jun 2023 09:39:33 +0200
Subject: [PATCH 4/4] ARM: vfp: Move sending signals outside of vfp_lock()ed
section.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
VFP_bounce() is invoked from within vfp_support_entry() and may send a
signal. Sending a signal uses spinlock_t which becomes a sleeping lock
diff --git a/debian/patches-rt/0004-drm-amd-display-Move-the-memory-allocation-out-of-dc.patch b/debian/patches-rt/0004-drm-amd-display-Move-the-memory-allocation-out-of-dc.patch
deleted file mode 100644
index a1c046b36c..0000000000
--- a/debian/patches-rt/0004-drm-amd-display-Move-the-memory-allocation-out-of-dc.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Thu, 21 Sep 2023 16:15:15 +0200
-Subject: [PATCH 4/5] drm/amd/display: Move the memory allocation out of
- dcn21_validate_bandwidth_fp().
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-dcn21_validate_bandwidth_fp() is invoked while FPU access has been
-enabled. FPU access requires disabling preemption even on PREEMPT_RT.
-It is not possible to allocate memory with disabled preemption even with
-GFP_ATOMIC on PREEMPT_RT.
-
-Move the memory allocation before FPU access is enabled.
-
-Link: https://bugzilla.kernel.org/show_bug.cgi?id=217928
-Link: https://lore.kernel.org/r/20230921141516.520471-5-bigeasy@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c | 10 +++++++++-
- drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c | 7 ++-----
- drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.h | 5 ++---
- 3 files changed, 13 insertions(+), 9 deletions(-)
-
---- a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
-+++ b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
-@@ -953,9 +953,17 @@ static bool dcn21_validate_bandwidth(str
- bool fast_validate)
- {
- bool voltage_supported;
-+ display_e2e_pipe_params_st *pipes;
-+
-+ pipes = kcalloc(dc->res_pool->pipe_count, sizeof(display_e2e_pipe_params_st), GFP_KERNEL);
-+ if (!pipes)
-+ return false;
-+
- DC_FP_START();
-- voltage_supported = dcn21_validate_bandwidth_fp(dc, context, fast_validate);
-+ voltage_supported = dcn21_validate_bandwidth_fp(dc, context, fast_validate, pipes);
- DC_FP_END();
-+
-+ kfree(pipes);
- return voltage_supported;
- }
-
---- a/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c
-+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c
-@@ -2203,9 +2203,8 @@ static void dcn21_calculate_wm(struct dc
- &context->bw_ctx.dml, pipes, pipe_cnt);
- }
-
--bool dcn21_validate_bandwidth_fp(struct dc *dc,
-- struct dc_state *context,
-- bool fast_validate)
-+bool dcn21_validate_bandwidth_fp(struct dc *dc, struct dc_state *context,
-+ bool fast_validate, display_e2e_pipe_params_st *pipes)
- {
- bool out = false;
-
-@@ -2214,7 +2213,6 @@ bool dcn21_validate_bandwidth_fp(struct
- int vlevel = 0;
- int pipe_split_from[MAX_PIPES];
- int pipe_cnt = 0;
-- display_e2e_pipe_params_st *pipes = kzalloc(dc->res_pool->pipe_count * sizeof(display_e2e_pipe_params_st), GFP_ATOMIC);
- DC_LOGGER_INIT(dc->ctx->logger);
-
- BW_VAL_TRACE_COUNT();
-@@ -2254,7 +2252,6 @@ bool dcn21_validate_bandwidth_fp(struct
- out = false;
-
- validate_out:
-- kfree(pipes);
-
- BW_VAL_TRACE_FINISH();
-
---- a/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.h
-+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.h
-@@ -77,9 +77,8 @@ int dcn21_populate_dml_pipes_from_contex
- struct dc_state *context,
- display_e2e_pipe_params_st *pipes,
- bool fast_validate);
--bool dcn21_validate_bandwidth_fp(struct dc *dc,
-- struct dc_state *context,
-- bool fast_validate);
-+bool dcn21_validate_bandwidth_fp(struct dc *dc, struct dc_state *context, bool
-+ fast_validate, display_e2e_pipe_params_st *pipes);
- void dcn21_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_params);
-
- void dcn21_clk_mgr_set_bw_params_wm_table(struct clk_bw_params *bw_params);
diff --git a/debian/patches-rt/0004-drm-i915-Don-t-disable-interrupts-on-PREEMPT_RT-duri.patch b/debian/patches-rt/0004-drm-i915-Don-t-disable-interrupts-on-PREEMPT_RT-duri.patch
index 9c386e5188..a95775d7fe 100644
--- a/debian/patches-rt/0004-drm-i915-Don-t-disable-interrupts-on-PREEMPT_RT-duri.patch
+++ b/debian/patches-rt/0004-drm-i915-Don-t-disable-interrupts-on-PREEMPT_RT-duri.patch
@@ -2,7 +2,7 @@ From: Mike Galbraith <umgwanakikbuti@gmail.com>
Date: Sat, 27 Feb 2016 09:01:42 +0100
Subject: [PATCH 04/10] drm/i915: Don't disable interrupts on PREEMPT_RT during
atomic updates
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Commit
8d7849db3eab7 ("drm/i915: Make sprite updates atomic")
@@ -37,7 +37,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/drivers/gpu/drm/i915/display/intel_crtc.c
+++ b/drivers/gpu/drm/i915/display/intel_crtc.c
-@@ -534,7 +534,8 @@ void intel_pipe_update_start(struct inte
+@@ -573,7 +573,8 @@ void intel_pipe_update_start(struct inte
*/
intel_psr_wait_for_idle_locked(new_crtc_state);
@@ -47,7 +47,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
crtc->debug.min_vbl = min;
crtc->debug.max_vbl = max;
-@@ -559,11 +560,13 @@ void intel_pipe_update_start(struct inte
+@@ -598,11 +599,13 @@ void intel_pipe_update_start(struct inte
break;
}
@@ -63,7 +63,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
finish_wait(wq, &wait);
-@@ -596,7 +599,8 @@ void intel_pipe_update_start(struct inte
+@@ -635,7 +638,8 @@ void intel_pipe_update_start(struct inte
return;
irq_disable:
@@ -73,13 +73,13 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
#if IS_ENABLED(CONFIG_DRM_I915_DEBUG_VBLANK_EVADE)
-@@ -706,7 +710,8 @@ void intel_pipe_update_end(struct intel_
- intel_crtc_update_active_timings(new_crtc_state,
- new_crtc_state->vrr.enable);
+@@ -737,7 +741,8 @@ void intel_pipe_update_end(struct intel_
+ */
+ intel_vrr_send_push(new_crtc_state);
- local_irq_enable();
+ if (!IS_ENABLED(CONFIG_PREEMPT_RT))
+ local_irq_enable();
if (intel_vgpu_active(dev_priv))
- return;
+ goto out;
diff --git a/debian/patches-rt/0088-printk-ringbuffer-Do-not-skip-non-finalized-records-.patch b/debian/patches-rt/0004-printk-ringbuffer-Do-not-skip-non-finalized-records-.patch
index 917f777f1c..3e559a9bb6 100644
--- a/debian/patches-rt/0088-printk-ringbuffer-Do-not-skip-non-finalized-records-.patch
+++ b/debian/patches-rt/0004-printk-ringbuffer-Do-not-skip-non-finalized-records-.patch
@@ -1,8 +1,8 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Thu, 19 Oct 2023 10:32:05 +0000
-Subject: [PATCH 088/134] printk: ringbuffer: Do not skip non-finalized records
+Subject: [PATCH 04/50] printk: ringbuffer: Do not skip non-finalized records
with prb_next_seq()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Commit f244b4dc53e5 ("printk: ringbuffer: Improve
prb_next_seq() performance") introduced an optimization for
diff --git a/debian/patches-rt/0004-sched-Provide-rt_mutex-specific-scheduler-helpers.patch b/debian/patches-rt/0004-sched-Provide-rt_mutex-specific-scheduler-helpers.patch
deleted file mode 100644
index f61a67ea3f..0000000000
--- a/debian/patches-rt/0004-sched-Provide-rt_mutex-specific-scheduler-helpers.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From: Peter Zijlstra <peterz@infradead.org>
-Date: Fri, 8 Sep 2023 18:22:51 +0200
-Subject: [PATCH 4/7] sched: Provide rt_mutex specific scheduler helpers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-With PREEMPT_RT there is a rt_mutex recursion problem where
-sched_submit_work() can use an rtlock (aka spinlock_t). More
-specifically what happens is:
-
- mutex_lock() /* really rt_mutex */
- ...
- __rt_mutex_slowlock_locked()
- task_blocks_on_rt_mutex()
- // enqueue current task as waiter
- // do PI chain walk
- rt_mutex_slowlock_block()
- schedule()
- sched_submit_work()
- ...
- spin_lock() /* really rtlock */
- ...
- __rt_mutex_slowlock_locked()
- task_blocks_on_rt_mutex()
- // enqueue current task as waiter *AGAIN*
- // *CONFUSION*
-
-Fix this by making rt_mutex do the sched_submit_work() early, before
-it enqueues itself as a waiter -- before it even knows *if* it will
-wait.
-
-[[ basically Thomas' patch but with different naming and a few asserts
- added ]]
-
-Originally-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
-Link: https://lkml.kernel.org/r/20230908162254.999499-5-bigeasy@linutronix.de
----
- include/linux/sched.h | 3 +++
- include/linux/sched/rt.h | 4 ++++
- kernel/sched/core.c | 36 ++++++++++++++++++++++++++++++++----
- 3 files changed, 39 insertions(+), 4 deletions(-)
-
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -911,6 +911,9 @@ struct task_struct {
- * ->sched_remote_wakeup gets used, so it can be in this word.
- */
- unsigned sched_remote_wakeup:1;
-+#ifdef CONFIG_RT_MUTEXES
-+ unsigned sched_rt_mutex:1;
-+#endif
-
- /* Bit to tell LSMs we're in execve(): */
- unsigned in_execve:1;
---- a/include/linux/sched/rt.h
-+++ b/include/linux/sched/rt.h
-@@ -30,6 +30,10 @@ static inline bool task_is_realtime(stru
- }
-
- #ifdef CONFIG_RT_MUTEXES
-+extern void rt_mutex_pre_schedule(void);
-+extern void rt_mutex_schedule(void);
-+extern void rt_mutex_post_schedule(void);
-+
- /*
- * Must hold either p->pi_lock or task_rq(p)->lock.
- */
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -6724,9 +6724,6 @@ static inline void sched_submit_work(str
- static DEFINE_WAIT_OVERRIDE_MAP(sched_map, LD_WAIT_CONFIG);
- unsigned int task_flags;
-
-- if (task_is_running(tsk))
-- return;
--
- /*
- * Establish LD_WAIT_CONFIG context to ensure none of the code called
- * will use a blocking primitive -- which would lead to recursion.
-@@ -6784,7 +6781,12 @@ asmlinkage __visible void __sched schedu
- {
- struct task_struct *tsk = current;
-
-- sched_submit_work(tsk);
-+#ifdef CONFIG_RT_MUTEXES
-+ lockdep_assert(!tsk->sched_rt_mutex);
-+#endif
-+
-+ if (!task_is_running(tsk))
-+ sched_submit_work(tsk);
- __schedule_loop(SM_NONE);
- sched_update_worker(tsk);
- }
-@@ -7045,6 +7047,32 @@ static void __setscheduler_prio(struct t
-
- #ifdef CONFIG_RT_MUTEXES
-
-+/*
-+ * Would be more useful with typeof()/auto_type but they don't mix with
-+ * bit-fields. Since it's a local thing, use int. Keep the generic sounding
-+ * name such that if someone were to implement this function we get to compare
-+ * notes.
-+ */
-+#define fetch_and_set(x, v) ({ int _x = (x); (x) = (v); _x; })
-+
-+void rt_mutex_pre_schedule(void)
-+{
-+ lockdep_assert(!fetch_and_set(current->sched_rt_mutex, 1));
-+ sched_submit_work(current);
-+}
-+
-+void rt_mutex_schedule(void)
-+{
-+ lockdep_assert(current->sched_rt_mutex);
-+ __schedule_loop(SM_NONE);
-+}
-+
-+void rt_mutex_post_schedule(void)
-+{
-+ sched_update_worker(current);
-+ lockdep_assert(fetch_and_set(current->sched_rt_mutex, 0));
-+}
-+
- static inline int __rt_effective_prio(struct task_struct *pi_task, int prio)
- {
- if (pi_task)
diff --git a/debian/patches-rt/0004-serial-8250_aspeed_vuart-Use-port-lock-wrappers.patch b/debian/patches-rt/0004-serial-8250_aspeed_vuart-Use-port-lock-wrappers.patch
deleted file mode 100644
index eb65ac58fc..0000000000
--- a/debian/patches-rt/0004-serial-8250_aspeed_vuart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:21 +0206
-Subject: [PATCH 004/134] serial: 8250_aspeed_vuart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-5-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/8250/8250_aspeed_vuart.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_aspeed_vuart.c
-+++ b/drivers/tty/serial/8250/8250_aspeed_vuart.c
-@@ -288,9 +288,9 @@ static void aspeed_vuart_set_throttle(st
- struct uart_8250_port *up = up_to_u8250p(port);
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- __aspeed_vuart_set_throttle(up, throttle);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void aspeed_vuart_throttle(struct uart_port *port)
-@@ -340,7 +340,7 @@ static int aspeed_vuart_handle_irq(struc
- if (iir & UART_IIR_NO_INT)
- return 0;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- lsr = serial_port_in(port, UART_LSR);
-
diff --git a/debian/patches-rt/0005-drm-amd-display-Move-the-memory-allocation-out-of-dc.patch b/debian/patches-rt/0005-drm-amd-display-Move-the-memory-allocation-out-of-dc.patch
deleted file mode 100644
index 1a2babc614..0000000000
--- a/debian/patches-rt/0005-drm-amd-display-Move-the-memory-allocation-out-of-dc.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Thu, 21 Sep 2023 16:15:16 +0200
-Subject: [PATCH 5/5] drm/amd/display: Move the memory allocation out of
- dcn20_validate_bandwidth_fp().
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-dcn20_validate_bandwidth_fp() is invoked while FPU access has been
-enabled. FPU access requires disabling preemption even on PREEMPT_RT.
-It is not possible to allocate memory with disabled preemption even with
-GFP_ATOMIC on PREEMPT_RT.
-
-Move the memory allocation before FPU access is enabled.
-To preserve previous "clean" state of "pipes" add a memset() before the
-second invocation of dcn20_validate_bandwidth_internal() where the
-variable is used.
-
-Link: https://lore.kernel.org/r/20230921141516.520471-6-bigeasy@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c | 10 +++++++++-
- drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c | 16 +++++++---------
- drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.h | 5 ++---
- 3 files changed, 18 insertions(+), 13 deletions(-)
-
---- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
-+++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
-@@ -2141,9 +2141,17 @@ bool dcn20_validate_bandwidth(struct dc
- bool fast_validate)
- {
- bool voltage_supported;
-+ display_e2e_pipe_params_st *pipes;
-+
-+ pipes = kcalloc(dc->res_pool->pipe_count, sizeof(display_e2e_pipe_params_st), GFP_KERNEL);
-+ if (!pipes)
-+ return false;
-+
- DC_FP_START();
-- voltage_supported = dcn20_validate_bandwidth_fp(dc, context, fast_validate);
-+ voltage_supported = dcn20_validate_bandwidth_fp(dc, context, fast_validate, pipes);
- DC_FP_END();
-+
-+ kfree(pipes);
- return voltage_supported;
- }
-
---- a/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c
-+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c
-@@ -1910,7 +1910,7 @@ void dcn20_patch_bounding_box(struct dc
- }
-
- static bool dcn20_validate_bandwidth_internal(struct dc *dc, struct dc_state *context,
-- bool fast_validate)
-+ bool fast_validate, display_e2e_pipe_params_st *pipes)
- {
- bool out = false;
-
-@@ -1919,7 +1919,6 @@ static bool dcn20_validate_bandwidth_int
- int vlevel = 0;
- int pipe_split_from[MAX_PIPES];
- int pipe_cnt = 0;
-- display_e2e_pipe_params_st *pipes = kzalloc(dc->res_pool->pipe_count * sizeof(display_e2e_pipe_params_st), GFP_ATOMIC);
- DC_LOGGER_INIT(dc->ctx->logger);
-
- BW_VAL_TRACE_COUNT();
-@@ -1954,16 +1953,14 @@ static bool dcn20_validate_bandwidth_int
- out = false;
-
- validate_out:
-- kfree(pipes);
-
- BW_VAL_TRACE_FINISH();
-
- return out;
- }
-
--bool dcn20_validate_bandwidth_fp(struct dc *dc,
-- struct dc_state *context,
-- bool fast_validate)
-+bool dcn20_validate_bandwidth_fp(struct dc *dc, struct dc_state *context,
-+ bool fast_validate, display_e2e_pipe_params_st *pipes)
- {
- bool voltage_supported = false;
- bool full_pstate_supported = false;
-@@ -1982,11 +1979,11 @@ bool dcn20_validate_bandwidth_fp(struct
- ASSERT(context != dc->current_state);
-
- if (fast_validate) {
-- return dcn20_validate_bandwidth_internal(dc, context, true);
-+ return dcn20_validate_bandwidth_internal(dc, context, true, pipes);
- }
-
- // Best case, we support full UCLK switch latency
-- voltage_supported = dcn20_validate_bandwidth_internal(dc, context, false);
-+ voltage_supported = dcn20_validate_bandwidth_internal(dc, context, false, pipes);
- full_pstate_supported = context->bw_ctx.bw.dcn.clk.p_state_change_support;
-
- if (context->bw_ctx.dml.soc.dummy_pstate_latency_us == 0 ||
-@@ -1998,7 +1995,8 @@ bool dcn20_validate_bandwidth_fp(struct
- // Fallback: Try to only support G6 temperature read latency
- context->bw_ctx.dml.soc.dram_clock_change_latency_us = context->bw_ctx.dml.soc.dummy_pstate_latency_us;
-
-- voltage_supported = dcn20_validate_bandwidth_internal(dc, context, false);
-+ memset(pipes, 0, dc->res_pool->pipe_count * sizeof(display_e2e_pipe_params_st));
-+ voltage_supported = dcn20_validate_bandwidth_internal(dc, context, false, pipes);
- dummy_pstate_supported = context->bw_ctx.bw.dcn.clk.p_state_change_support;
-
- if (voltage_supported && (dummy_pstate_supported || !(context->stream_count))) {
---- a/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.h
-+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.h
-@@ -61,9 +61,8 @@ void dcn20_update_bounding_box(struct dc
- unsigned int num_states);
- void dcn20_patch_bounding_box(struct dc *dc,
- struct _vcs_dpi_soc_bounding_box_st *bb);
--bool dcn20_validate_bandwidth_fp(struct dc *dc,
-- struct dc_state *context,
-- bool fast_validate);
-+bool dcn20_validate_bandwidth_fp(struct dc *dc, struct dc_state *context,
-+ bool fast_validate, display_e2e_pipe_params_st *pipes);
- void dcn20_fpu_set_wm_ranges(int i,
- struct pp_smu_wm_range_sets *ranges,
- struct _vcs_dpi_soc_bounding_box_st *loaded_bb);
diff --git a/debian/patches-rt/0005-drm-i915-Don-t-check-for-atomic-context-on-PREEMPT_R.patch b/debian/patches-rt/0005-drm-i915-Don-t-check-for-atomic-context-on-PREEMPT_R.patch
index 4af9325678..9a10c838aa 100644
--- a/debian/patches-rt/0005-drm-i915-Don-t-check-for-atomic-context-on-PREEMPT_R.patch
+++ b/debian/patches-rt/0005-drm-i915-Don-t-check-for-atomic-context-on-PREEMPT_R.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Mon, 25 Oct 2021 15:05:18 +0200
Subject: [PATCH 05/10] drm/i915: Don't check for atomic context on PREEMPT_RT
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The !in_atomic() check in _wait_for_atomic() triggers on PREEMPT_RT
because the uncore::lock is a spinlock_t and does not disable
diff --git a/debian/patches-rt/0005-locking-rtmutex-Use-rt_mutex-specific-scheduler-help.patch b/debian/patches-rt/0005-locking-rtmutex-Use-rt_mutex-specific-scheduler-help.patch
deleted file mode 100644
index d84497e5fd..0000000000
--- a/debian/patches-rt/0005-locking-rtmutex-Use-rt_mutex-specific-scheduler-help.patch
+++ /dev/null
@@ -1,177 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Fri, 8 Sep 2023 18:22:52 +0200
-Subject: [PATCH 5/7] locking/rtmutex: Use rt_mutex specific scheduler helpers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-Have rt_mutex use the rt_mutex specific scheduler helpers to avoid
-recursion vs rtlock on the PI state.
-
-[[ peterz: adapted to new names ]]
-
-Reported-by: Crystal Wood <swood@redhat.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
-Link: https://lkml.kernel.org/r/20230908162254.999499-6-bigeasy@linutronix.de
----
- kernel/futex/pi.c | 11 +++++++++++
- kernel/locking/rtmutex.c | 14 ++++++++++++--
- kernel/locking/rwbase_rt.c | 6 ++++++
- kernel/locking/rwsem.c | 8 +++++++-
- kernel/locking/spinlock_rt.c | 4 ++++
- 5 files changed, 40 insertions(+), 3 deletions(-)
-
---- a/kernel/futex/pi.c
-+++ b/kernel/futex/pi.c
-@@ -1,6 +1,7 @@
- // SPDX-License-Identifier: GPL-2.0-or-later
-
- #include <linux/slab.h>
-+#include <linux/sched/rt.h>
- #include <linux/sched/task.h>
-
- #include "futex.h"
-@@ -1002,6 +1003,12 @@ int futex_lock_pi(u32 __user *uaddr, uns
- goto no_block;
- }
-
-+ /*
-+ * Must be done before we enqueue the waiter, here is unfortunately
-+ * under the hb lock, but that *should* work because it does nothing.
-+ */
-+ rt_mutex_pre_schedule();
-+
- rt_mutex_init_waiter(&rt_waiter);
-
- /*
-@@ -1052,6 +1059,10 @@ int futex_lock_pi(u32 __user *uaddr, uns
- if (ret && !rt_mutex_cleanup_proxy_lock(&q.pi_state->pi_mutex, &rt_waiter))
- ret = 0;
-
-+ /*
-+ * Waiter is unqueued.
-+ */
-+ rt_mutex_post_schedule();
- no_block:
- /*
- * Fixup the pi_state owner and possibly acquire the lock if we
---- a/kernel/locking/rtmutex.c
-+++ b/kernel/locking/rtmutex.c
-@@ -1632,7 +1632,7 @@ static int __sched rt_mutex_slowlock_blo
- raw_spin_unlock_irq(&lock->wait_lock);
-
- if (!owner || !rtmutex_spin_on_owner(lock, waiter, owner))
-- schedule();
-+ rt_mutex_schedule();
-
- raw_spin_lock_irq(&lock->wait_lock);
- set_current_state(state);
-@@ -1661,7 +1661,7 @@ static void __sched rt_mutex_handle_dead
- WARN(1, "rtmutex deadlock detected\n");
- while (1) {
- set_current_state(TASK_INTERRUPTIBLE);
-- schedule();
-+ rt_mutex_schedule();
- }
- }
-
-@@ -1757,6 +1757,15 @@ static int __sched rt_mutex_slowlock(str
- int ret;
-
- /*
-+ * Do all pre-schedule work here, before we queue a waiter and invoke
-+ * PI -- any such work that trips on rtlock (PREEMPT_RT spinlock) would
-+ * otherwise recurse back into task_blocks_on_rt_mutex() through
-+ * rtlock_slowlock() and will then enqueue a second waiter for this
-+ * same task and things get really confusing real fast.
-+ */
-+ rt_mutex_pre_schedule();
-+
-+ /*
- * Technically we could use raw_spin_[un]lock_irq() here, but this can
- * be called in early boot if the cmpxchg() fast path is disabled
- * (debug, no architecture support). In this case we will acquire the
-@@ -1767,6 +1776,7 @@ static int __sched rt_mutex_slowlock(str
- raw_spin_lock_irqsave(&lock->wait_lock, flags);
- ret = __rt_mutex_slowlock_locked(lock, ww_ctx, state);
- raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
-+ rt_mutex_post_schedule();
-
- return ret;
- }
---- a/kernel/locking/rwbase_rt.c
-+++ b/kernel/locking/rwbase_rt.c
-@@ -71,6 +71,7 @@ static int __sched __rwbase_read_lock(st
- struct rt_mutex_base *rtm = &rwb->rtmutex;
- int ret;
-
-+ rwbase_pre_schedule();
- raw_spin_lock_irq(&rtm->wait_lock);
-
- /*
-@@ -125,6 +126,7 @@ static int __sched __rwbase_read_lock(st
- rwbase_rtmutex_unlock(rtm);
-
- trace_contention_end(rwb, ret);
-+ rwbase_post_schedule();
- return ret;
- }
-
-@@ -237,6 +239,8 @@ static int __sched rwbase_write_lock(str
- /* Force readers into slow path */
- atomic_sub(READER_BIAS, &rwb->readers);
-
-+ rwbase_pre_schedule();
-+
- raw_spin_lock_irqsave(&rtm->wait_lock, flags);
- if (__rwbase_write_trylock(rwb))
- goto out_unlock;
-@@ -248,6 +252,7 @@ static int __sched rwbase_write_lock(str
- if (rwbase_signal_pending_state(state, current)) {
- rwbase_restore_current_state();
- __rwbase_write_unlock(rwb, 0, flags);
-+ rwbase_post_schedule();
- trace_contention_end(rwb, -EINTR);
- return -EINTR;
- }
-@@ -266,6 +271,7 @@ static int __sched rwbase_write_lock(str
-
- out_unlock:
- raw_spin_unlock_irqrestore(&rtm->wait_lock, flags);
-+ rwbase_post_schedule();
- return 0;
- }
-
---- a/kernel/locking/rwsem.c
-+++ b/kernel/locking/rwsem.c
-@@ -1427,8 +1427,14 @@ static inline void __downgrade_write(str
- #define rwbase_signal_pending_state(state, current) \
- signal_pending_state(state, current)
-
-+#define rwbase_pre_schedule() \
-+ rt_mutex_pre_schedule()
-+
- #define rwbase_schedule() \
-- schedule()
-+ rt_mutex_schedule()
-+
-+#define rwbase_post_schedule() \
-+ rt_mutex_post_schedule()
-
- #include "rwbase_rt.c"
-
---- a/kernel/locking/spinlock_rt.c
-+++ b/kernel/locking/spinlock_rt.c
-@@ -184,9 +184,13 @@ static __always_inline int rwbase_rtmut
-
- #define rwbase_signal_pending_state(state, current) (0)
-
-+#define rwbase_pre_schedule()
-+
- #define rwbase_schedule() \
- schedule_rtlock()
-
-+#define rwbase_post_schedule()
-+
- #include "rwbase_rt.c"
- /*
- * The common functions which get wrapped into the rwlock API.
diff --git a/debian/patches-rt/0089-printk-ringbuffer-Clarify-special-lpos-values.patch b/debian/patches-rt/0005-printk-ringbuffer-Clarify-special-lpos-values.patch
index 397f61984c..f2b8ffcb0e 100644
--- a/debian/patches-rt/0089-printk-ringbuffer-Clarify-special-lpos-values.patch
+++ b/debian/patches-rt/0005-printk-ringbuffer-Clarify-special-lpos-values.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 23 Oct 2023 11:11:05 +0000
-Subject: [PATCH 089/134] printk: ringbuffer: Clarify special lpos values
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 05/50] printk: ringbuffer: Clarify special lpos values
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
For empty line records, no data blocks are created. Instead,
these valid records are identified by special logical position
diff --git a/debian/patches-rt/0005-serial-8250_bcm7271-Use-port-lock-wrappers.patch b/debian/patches-rt/0005-serial-8250_bcm7271-Use-port-lock-wrappers.patch
deleted file mode 100644
index 55ae035b80..0000000000
--- a/debian/patches-rt/0005-serial-8250_bcm7271-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:22 +0206
-Subject: [PATCH 005/134] serial: 8250_bcm7271: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-6-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/8250/8250_bcm7271.c | 28 ++++++++++++++--------------
- 1 file changed, 14 insertions(+), 14 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_bcm7271.c
-+++ b/drivers/tty/serial/8250/8250_bcm7271.c
-@@ -567,7 +567,7 @@ static irqreturn_t brcmuart_isr(int irq,
- if (interrupts == 0)
- return IRQ_NONE;
-
-- spin_lock_irqsave(&up->lock, flags);
-+ uart_port_lock_irqsave(up, &flags);
-
- /* Clear all interrupts */
- udma_writel(priv, REGS_DMA_ISR, UDMA_INTR_CLEAR, interrupts);
-@@ -581,7 +581,7 @@ static irqreturn_t brcmuart_isr(int irq,
- if ((rval | tval) == 0)
- dev_warn(dev, "Spurious interrupt: 0x%x\n", interrupts);
-
-- spin_unlock_irqrestore(&up->lock, flags);
-+ uart_port_unlock_irqrestore(up, flags);
- return IRQ_HANDLED;
- }
-
-@@ -608,10 +608,10 @@ static int brcmuart_startup(struct uart_
- *
- * Synchronize UART_IER access against the console.
- */
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- up->ier &= ~UART_IER_RDI;
- serial_port_out(port, UART_IER, up->ier);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
-
- priv->tx_running = false;
- priv->dma.rx_dma = NULL;
-@@ -629,7 +629,7 @@ static void brcmuart_shutdown(struct uar
- struct brcmuart_priv *priv = up->port.private_data;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- priv->shutdown = true;
- if (priv->dma_enabled) {
- stop_rx_dma(up);
-@@ -645,7 +645,7 @@ static void brcmuart_shutdown(struct uar
- */
- up->dma = NULL;
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- serial8250_do_shutdown(port);
- }
-
-@@ -788,7 +788,7 @@ static int brcmuart_handle_irq(struct ua
- * interrupt but there is no data ready.
- */
- if (((iir & UART_IIR_ID) == UART_IIR_RX_TIMEOUT) && !(priv->shutdown)) {
-- spin_lock_irqsave(&p->lock, flags);
-+ uart_port_lock_irqsave(p, &flags);
- status = serial_port_in(p, UART_LSR);
- if ((status & UART_LSR_DR) == 0) {
-
-@@ -813,7 +813,7 @@ static int brcmuart_handle_irq(struct ua
-
- handled = 1;
- }
-- spin_unlock_irqrestore(&p->lock, flags);
-+ uart_port_unlock_irqrestore(p, flags);
- if (handled)
- return 1;
- }
-@@ -831,7 +831,7 @@ static enum hrtimer_restart brcmuart_hrt
- if (priv->shutdown)
- return HRTIMER_NORESTART;
-
-- spin_lock_irqsave(&p->lock, flags);
-+ uart_port_lock_irqsave(p, &flags);
- status = serial_port_in(p, UART_LSR);
-
- /*
-@@ -855,7 +855,7 @@ static enum hrtimer_restart brcmuart_hrt
- status |= UART_MCR_RTS;
- serial_port_out(p, UART_MCR, status);
- }
-- spin_unlock_irqrestore(&p->lock, flags);
-+ uart_port_unlock_irqrestore(p, flags);
- return HRTIMER_NORESTART;
- }
-
-@@ -1154,10 +1154,10 @@ static int __maybe_unused brcmuart_suspe
- * This will prevent resume from enabling RTS before the
- * baud rate has been restored.
- */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- priv->saved_mctrl = port->mctrl;
- port->mctrl &= ~TIOCM_RTS;
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- serial8250_suspend_port(priv->line);
- clk_disable_unprepare(priv->baud_mux_clk);
-@@ -1196,10 +1196,10 @@ static int __maybe_unused brcmuart_resum
-
- if (priv->saved_mctrl & TIOCM_RTS) {
- /* Restore RTS */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- port->mctrl |= TIOCM_RTS;
- port->ops->set_mctrl(port, port->mctrl);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- return 0;
diff --git a/debian/patches-rt/0006-drm-i915-Disable-tracing-points-on-PREEMPT_RT.patch b/debian/patches-rt/0006-drm-i915-Disable-tracing-points-on-PREEMPT_RT.patch
index f29f29bdfe..5951d04c0c 100644
--- a/debian/patches-rt/0006-drm-i915-Disable-tracing-points-on-PREEMPT_RT.patch
+++ b/debian/patches-rt/0006-drm-i915-Disable-tracing-points-on-PREEMPT_RT.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Thu, 6 Dec 2018 09:52:20 +0100
Subject: [PATCH 06/10] drm/i915: Disable tracing points on PREEMPT_RT
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Luca Abeni reported this:
| BUG: scheduling while atomic: kworker/u8:2/15203/0x00000003
diff --git a/debian/patches-rt/0006-locking-rtmutex-Add-a-lockdep-assert-to-catch-potent.patch b/debian/patches-rt/0006-locking-rtmutex-Add-a-lockdep-assert-to-catch-potent.patch
deleted file mode 100644
index 7d94cdb9de..0000000000
--- a/debian/patches-rt/0006-locking-rtmutex-Add-a-lockdep-assert-to-catch-potent.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Fri, 8 Sep 2023 18:22:53 +0200
-Subject: [PATCH 6/7] locking/rtmutex: Add a lockdep assert to catch potential
- nested blocking
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-There used to be a BUG_ON(current->pi_blocked_on) in the lock acquisition
-functions, but that vanished in one of the rtmutex overhauls.
-
-Bring it back in form of a lockdep assert to catch code paths which take
-rtmutex based locks with current::pi_blocked_on != NULL.
-
-Reported-by: Crystal Wood <swood@redhat.com>
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: "Peter Zijlstra (Intel)" <peterz@infradead.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
-Link: https://lkml.kernel.org/r/20230908162254.999499-7-bigeasy@linutronix.de
----
- kernel/locking/rtmutex.c | 2 ++
- kernel/locking/rwbase_rt.c | 2 ++
- kernel/locking/spinlock_rt.c | 2 ++
- 3 files changed, 6 insertions(+)
-
---- a/kernel/locking/rtmutex.c
-+++ b/kernel/locking/rtmutex.c
-@@ -1784,6 +1784,8 @@ static int __sched rt_mutex_slowlock(str
- static __always_inline int __rt_mutex_lock(struct rt_mutex_base *lock,
- unsigned int state)
- {
-+ lockdep_assert(!current->pi_blocked_on);
-+
- if (likely(rt_mutex_try_acquire(lock)))
- return 0;
-
---- a/kernel/locking/rwbase_rt.c
-+++ b/kernel/locking/rwbase_rt.c
-@@ -133,6 +133,8 @@ static int __sched __rwbase_read_lock(st
- static __always_inline int rwbase_read_lock(struct rwbase_rt *rwb,
- unsigned int state)
- {
-+ lockdep_assert(!current->pi_blocked_on);
-+
- if (rwbase_read_trylock(rwb))
- return 0;
-
---- a/kernel/locking/spinlock_rt.c
-+++ b/kernel/locking/spinlock_rt.c
-@@ -37,6 +37,8 @@
-
- static __always_inline void rtlock_lock(struct rt_mutex_base *rtm)
- {
-+ lockdep_assert(!current->pi_blocked_on);
-+
- if (unlikely(!rt_mutex_cmpxchg_acquire(rtm, NULL, current)))
- rtlock_slowlock(rtm);
- }
diff --git a/debian/patches-rt/0090-printk-For-suppress_panic_printk-check-for-other-CPU.patch b/debian/patches-rt/0006-printk-For-suppress_panic_printk-check-for-other-CPU.patch
index 1fb32b1ace..9906aca51f 100644
--- a/debian/patches-rt/0090-printk-For-suppress_panic_printk-check-for-other-CPU.patch
+++ b/debian/patches-rt/0006-printk-For-suppress_panic_printk-check-for-other-CPU.patch
@@ -1,8 +1,8 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Fri, 13 Oct 2023 20:13:02 +0000
-Subject: [PATCH 090/134] printk: For @suppress_panic_printk check for other
- CPU in panic
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 06/50] printk: For @suppress_panic_printk check for other CPU
+ in panic
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Currently @suppress_panic_printk is checked along with
non-matching @panic_cpu and current CPU. This works
@@ -22,7 +22,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -2271,8 +2271,7 @@ asmlinkage int vprintk_emit(int facility
+@@ -2270,8 +2270,7 @@ asmlinkage int vprintk_emit(int facility
if (unlikely(suppress_printk))
return 0;
diff --git a/debian/patches-rt/0006-serial-8250-Use-port-lock-wrappers.patch b/debian/patches-rt/0006-serial-8250-Use-port-lock-wrappers.patch
deleted file mode 100644
index d6ee818bf9..0000000000
--- a/debian/patches-rt/0006-serial-8250-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,465 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:23 +0206
-Subject: [PATCH 006/134] serial: 8250: Use port lock wrappers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-7-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/8250/8250_core.c | 12 ++--
- drivers/tty/serial/8250/8250_port.c | 100 ++++++++++++++++++------------------
- 2 files changed, 56 insertions(+), 56 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_core.c
-+++ b/drivers/tty/serial/8250/8250_core.c
-@@ -259,7 +259,7 @@ static void serial8250_backup_timeout(st
- unsigned int iir, ier = 0, lsr;
- unsigned long flags;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- /*
- * Must disable interrupts or else we risk racing with the interrupt
-@@ -292,7 +292,7 @@ static void serial8250_backup_timeout(st
- if (up->port.irq)
- serial_out(up, UART_IER, ier);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- /* Standard timer interval plus 0.2s to keep the port running */
- mod_timer(&up->timer,
-@@ -992,11 +992,11 @@ static void serial_8250_overrun_backoff_
- struct uart_port *port = &up->port;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- up->ier |= UART_IER_RLSI | UART_IER_RDI;
- up->port.read_status_mask |= UART_LSR_DR;
- serial_out(up, UART_IER, up->ier);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /**
-@@ -1194,9 +1194,9 @@ void serial8250_unregister_port(int line
- if (uart->em485) {
- unsigned long flags;
-
-- spin_lock_irqsave(&uart->port.lock, flags);
-+ uart_port_lock_irqsave(&uart->port, &flags);
- serial8250_em485_destroy(uart);
-- spin_unlock_irqrestore(&uart->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uart->port, flags);
- }
-
- uart_remove_one_port(&serial8250_reg, &uart->port);
---- a/drivers/tty/serial/8250/8250_port.c
-+++ b/drivers/tty/serial/8250/8250_port.c
-@@ -689,7 +689,7 @@ static void serial8250_set_sleep(struct
-
- if (p->capabilities & UART_CAP_SLEEP) {
- /* Synchronize UART_IER access against the console. */
-- spin_lock_irq(&p->port.lock);
-+ uart_port_lock_irq(&p->port);
- if (p->capabilities & UART_CAP_EFR) {
- lcr = serial_in(p, UART_LCR);
- efr = serial_in(p, UART_EFR);
-@@ -703,7 +703,7 @@ static void serial8250_set_sleep(struct
- serial_out(p, UART_EFR, efr);
- serial_out(p, UART_LCR, lcr);
- }
-- spin_unlock_irq(&p->port.lock);
-+ uart_port_unlock_irq(&p->port);
- }
-
- serial8250_rpm_put(p);
-@@ -746,9 +746,9 @@ static void enable_rsa(struct uart_8250_
- {
- if (up->port.type == PORT_RSA) {
- if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) {
-- spin_lock_irq(&up->port.lock);
-+ uart_port_lock_irq(&up->port);
- __enable_rsa(up);
-- spin_unlock_irq(&up->port.lock);
-+ uart_port_unlock_irq(&up->port);
- }
- if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16)
- serial_out(up, UART_RSA_FRR, 0);
-@@ -768,7 +768,7 @@ static void disable_rsa(struct uart_8250
-
- if (up->port.type == PORT_RSA &&
- up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) {
-- spin_lock_irq(&up->port.lock);
-+ uart_port_lock_irq(&up->port);
-
- mode = serial_in(up, UART_RSA_MSR);
- result = !(mode & UART_RSA_MSR_FIFO);
-@@ -781,7 +781,7 @@ static void disable_rsa(struct uart_8250
-
- if (result)
- up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16;
-- spin_unlock_irq(&up->port.lock);
-+ uart_port_unlock_irq(&up->port);
- }
- }
- #endif /* CONFIG_SERIAL_8250_RSA */
-@@ -1172,7 +1172,7 @@ static void autoconfig(struct uart_8250_
- *
- * Synchronize UART_IER access against the console.
- */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- up->capabilities = 0;
- up->bugs = 0;
-@@ -1211,7 +1211,7 @@ static void autoconfig(struct uart_8250_
- /*
- * We failed; there's nothing here
- */
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- DEBUG_AUTOCONF("IER test failed (%02x, %02x) ",
- scratch2, scratch3);
- goto out;
-@@ -1235,7 +1235,7 @@ static void autoconfig(struct uart_8250_
- status1 = serial_in(up, UART_MSR) & UART_MSR_STATUS_BITS;
- serial8250_out_MCR(up, save_mcr);
- if (status1 != (UART_MSR_DCD | UART_MSR_CTS)) {
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- DEBUG_AUTOCONF("LOOP test failed (%02x) ",
- status1);
- goto out;
-@@ -1304,7 +1304,7 @@ static void autoconfig(struct uart_8250_
- serial8250_clear_IER(up);
-
- out_unlock:
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- /*
- * Check if the device is a Fintek F81216A
-@@ -1344,9 +1344,9 @@ static void autoconfig_irq(struct uart_8
- probe_irq_off(probe_irq_on());
- save_mcr = serial8250_in_MCR(up);
- /* Synchronize UART_IER access against the console. */
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- save_ier = serial_in(up, UART_IER);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- serial8250_out_MCR(up, UART_MCR_OUT1 | UART_MCR_OUT2);
-
- irqs = probe_irq_on();
-@@ -1359,9 +1359,9 @@ static void autoconfig_irq(struct uart_8
- UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2);
- }
- /* Synchronize UART_IER access against the console. */
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- serial_out(up, UART_IER, UART_IER_ALL_INTR);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- serial_in(up, UART_LSR);
- serial_in(up, UART_RX);
- serial_in(up, UART_IIR);
-@@ -1372,9 +1372,9 @@ static void autoconfig_irq(struct uart_8
-
- serial8250_out_MCR(up, save_mcr);
- /* Synchronize UART_IER access against the console. */
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- serial_out(up, UART_IER, save_ier);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
-
- if (port->flags & UPF_FOURPORT)
- outb_p(save_ICP, ICP);
-@@ -1442,13 +1442,13 @@ static enum hrtimer_restart serial8250_e
- unsigned long flags;
-
- serial8250_rpm_get(p);
-- spin_lock_irqsave(&p->port.lock, flags);
-+ uart_port_lock_irqsave(&p->port, &flags);
- if (em485->active_timer == &em485->stop_tx_timer) {
- p->rs485_stop_tx(p);
- em485->active_timer = NULL;
- em485->tx_stopped = true;
- }
-- spin_unlock_irqrestore(&p->port.lock, flags);
-+ uart_port_unlock_irqrestore(&p->port, flags);
- serial8250_rpm_put(p);
-
- return HRTIMER_NORESTART;
-@@ -1630,12 +1630,12 @@ static enum hrtimer_restart serial8250_e
- struct uart_8250_port *p = em485->port;
- unsigned long flags;
-
-- spin_lock_irqsave(&p->port.lock, flags);
-+ uart_port_lock_irqsave(&p->port, &flags);
- if (em485->active_timer == &em485->start_tx_timer) {
- __start_tx(&p->port);
- em485->active_timer = NULL;
- }
-- spin_unlock_irqrestore(&p->port.lock, flags);
-+ uart_port_unlock_irqrestore(&p->port, flags);
-
- return HRTIMER_NORESTART;
- }
-@@ -1918,7 +1918,7 @@ int serial8250_handle_irq(struct uart_po
- if (iir & UART_IIR_NO_INT)
- return 0;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- status = serial_lsr_in(up);
-
-@@ -1988,9 +1988,9 @@ static int serial8250_tx_threshold_handl
- if ((iir & UART_IIR_ID) == UART_IIR_THRI) {
- struct uart_8250_port *up = up_to_u8250p(port);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- serial8250_tx_chars(up);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- iir = serial_port_in(port, UART_IIR);
-@@ -2005,10 +2005,10 @@ static unsigned int serial8250_tx_empty(
-
- serial8250_rpm_get(up);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (!serial8250_tx_dma_running(up) && uart_lsr_tx_empty(serial_lsr_in(up)))
- result = TIOCSER_TEMT;
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- serial8250_rpm_put(up);
-
-@@ -2070,13 +2070,13 @@ static void serial8250_break_ctl(struct
- unsigned long flags;
-
- serial8250_rpm_get(up);
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (break_state == -1)
- up->lcr |= UART_LCR_SBC;
- else
- up->lcr &= ~UART_LCR_SBC;
- serial_port_out(port, UART_LCR, up->lcr);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- serial8250_rpm_put(up);
- }
-
-@@ -2211,7 +2211,7 @@ int serial8250_do_startup(struct uart_po
- *
- * Synchronize UART_IER access against the console.
- */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- up->acr = 0;
- serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B);
- serial_port_out(port, UART_EFR, UART_EFR_ECB);
-@@ -2221,7 +2221,7 @@ int serial8250_do_startup(struct uart_po
- serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B);
- serial_port_out(port, UART_EFR, UART_EFR_ECB);
- serial_port_out(port, UART_LCR, 0);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- if (port->type == PORT_DA830) {
-@@ -2230,10 +2230,10 @@ int serial8250_do_startup(struct uart_po
- *
- * Synchronize UART_IER access against the console.
- */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- serial_port_out(port, UART_IER, 0);
- serial_port_out(port, UART_DA830_PWREMU_MGMT, 0);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- mdelay(10);
-
- /* Enable Tx, Rx and free run mode */
-@@ -2347,7 +2347,7 @@ int serial8250_do_startup(struct uart_po
- *
- * Synchronize UART_IER access against the console.
- */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- wait_for_xmitr(up, UART_LSR_THRE);
- serial_port_out_sync(port, UART_IER, UART_IER_THRI);
-@@ -2359,7 +2359,7 @@ int serial8250_do_startup(struct uart_po
- iir = serial_port_in(port, UART_IIR);
- serial_port_out(port, UART_IER, 0);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (port->irqflags & IRQF_SHARED)
- enable_irq(port->irq);
-@@ -2382,7 +2382,7 @@ int serial8250_do_startup(struct uart_po
- */
- serial_port_out(port, UART_LCR, UART_LCR_WLEN8);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (up->port.flags & UPF_FOURPORT) {
- if (!up->port.irq)
- up->port.mctrl |= TIOCM_OUT1;
-@@ -2428,7 +2428,7 @@ int serial8250_do_startup(struct uart_po
- }
-
- dont_test_tx_en:
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- /*
- * Clear the interrupt registers again for luck, and clear the
-@@ -2499,17 +2499,17 @@ void serial8250_do_shutdown(struct uart_
- *
- * Synchronize UART_IER access against the console.
- */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- up->ier = 0;
- serial_port_out(port, UART_IER, 0);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- synchronize_irq(port->irq);
-
- if (up->dma)
- serial8250_release_dma(up);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (port->flags & UPF_FOURPORT) {
- /* reset interrupts on the AST Fourport board */
- inb((port->iobase & 0xfe0) | 0x1f);
-@@ -2518,7 +2518,7 @@ void serial8250_do_shutdown(struct uart_
- port->mctrl &= ~TIOCM_OUT2;
-
- serial8250_set_mctrl(port, port->mctrl);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- /*
- * Disable break condition and FIFOs
-@@ -2754,14 +2754,14 @@ void serial8250_update_uartclk(struct ua
- quot = serial8250_get_divisor(port, baud, &frac);
-
- serial8250_rpm_get(up);
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- uart_update_timeout(port, termios->c_cflag, baud);
-
- serial8250_set_divisor(port, baud, quot, frac);
- serial_port_out(port, UART_LCR, up->lcr);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- serial8250_rpm_put(up);
-
- out_unlock:
-@@ -2798,7 +2798,7 @@ serial8250_do_set_termios(struct uart_po
- * Synchronize UART_IER access against the console.
- */
- serial8250_rpm_get(up);
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- up->lcr = cval; /* Save computed LCR */
-
-@@ -2901,7 +2901,7 @@ serial8250_do_set_termios(struct uart_po
- serial_port_out(port, UART_FCR, up->fcr); /* set fcr */
- }
- serial8250_set_mctrl(port, port->mctrl);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- serial8250_rpm_put(up);
-
- /* Don't rewrite B0 */
-@@ -2924,15 +2924,15 @@ void serial8250_do_set_ldisc(struct uart
- {
- if (termios->c_line == N_PPS) {
- port->flags |= UPF_HARDPPS_CD;
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- serial8250_enable_ms(port);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- } else {
- port->flags &= ~UPF_HARDPPS_CD;
- if (!UART_ENABLE_MS(port, termios->c_cflag)) {
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- serial8250_disable_ms(port);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- }
- }
- }
-@@ -3406,9 +3406,9 @@ void serial8250_console_write(struct uar
- touch_nmi_watchdog();
-
- if (oops_in_progress)
-- locked = spin_trylock_irqsave(&port->lock, flags);
-+ locked = uart_port_trylock_irqsave(port, &flags);
- else
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /*
- * First save the IER then disable the interrupts
-@@ -3478,7 +3478,7 @@ void serial8250_console_write(struct uar
- serial8250_modem_status(up);
-
- if (locked)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static unsigned int probe_baud(struct uart_port *port)
diff --git a/debian/patches-rt/0007-drm-i915-skip-DRM_I915_LOW_LEVEL_TRACEPOINTS-with-NO.patch b/debian/patches-rt/0007-drm-i915-skip-DRM_I915_LOW_LEVEL_TRACEPOINTS-with-NO.patch
index d784f90a94..c2b03ffbb3 100644
--- a/debian/patches-rt/0007-drm-i915-skip-DRM_I915_LOW_LEVEL_TRACEPOINTS-with-NO.patch
+++ b/debian/patches-rt/0007-drm-i915-skip-DRM_I915_LOW_LEVEL_TRACEPOINTS-with-NO.patch
@@ -2,7 +2,7 @@ From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Wed, 19 Dec 2018 10:47:02 +0100
Subject: [PATCH 07/10] drm/i915: skip DRM_I915_LOW_LEVEL_TRACEPOINTS with
NOTRACE
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The order of the header files is important. If this header file is
included after tracepoint.h was included then the NOTRACE here becomes a
diff --git a/debian/patches-rt/0007-futex-pi-Fix-recursive-rt_mutex-waiter-state.patch b/debian/patches-rt/0007-futex-pi-Fix-recursive-rt_mutex-waiter-state.patch
deleted file mode 100644
index 76a9b60581..0000000000
--- a/debian/patches-rt/0007-futex-pi-Fix-recursive-rt_mutex-waiter-state.patch
+++ /dev/null
@@ -1,198 +0,0 @@
-From: Peter Zijlstra <peterz@infradead.org>
-Date: Fri, 15 Sep 2023 17:19:44 +0200
-Subject: [PATCH 7/7] futex/pi: Fix recursive rt_mutex waiter state
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-Some new assertions pointed out that the existing code has nested rt_mutex wait
-state in the futex code.
-
-Specifically, the futex_lock_pi() cancel case uses spin_lock() while there
-still is a rt_waiter enqueued for this task, resulting in a state where there
-are two waiters for the same task (and task_struct::pi_blocked_on gets
-scrambled).
-
-The reason to take hb->lock at this point is to avoid the wake_futex_pi()
-EAGAIN case.
-
-This happens when futex_top_waiter() and rt_mutex_top_waiter() state becomes
-inconsistent. The current rules are such that this inconsistency will not be
-observed.
-
-Notably the case that needs to be avoided is where futex_lock_pi() and
-futex_unlock_pi() interleave such that unlock will fail to observe a new
-waiter.
-
-*However* the case at hand is where a waiter is leaving, in this case the race
-means a waiter that is going away is not observed -- which is harmless,
-provided this race is explicitly handled.
-
-This is a somewhat dangerous proposition because the converse race is not
-observing a new waiter, which must absolutely not happen. But since the race is
-valid this cannot be asserted.
-
-Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
-Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
-Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Link: https://lkml.kernel.org/r/20230915151943.GD6743@noisy.programming.kicks-ass.net
----
- kernel/futex/pi.c | 76 ++++++++++++++++++++++++++++++-------------------
- kernel/futex/requeue.c | 6 ++-
- 2 files changed, 52 insertions(+), 30 deletions(-)
-
---- a/kernel/futex/pi.c
-+++ b/kernel/futex/pi.c
-@@ -611,29 +611,16 @@ int futex_lock_pi_atomic(u32 __user *uad
- /*
- * Caller must hold a reference on @pi_state.
- */
--static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_pi_state *pi_state)
-+static int wake_futex_pi(u32 __user *uaddr, u32 uval,
-+ struct futex_pi_state *pi_state,
-+ struct rt_mutex_waiter *top_waiter)
- {
-- struct rt_mutex_waiter *top_waiter;
- struct task_struct *new_owner;
- bool postunlock = false;
- DEFINE_RT_WAKE_Q(wqh);
- u32 curval, newval;
- int ret = 0;
-
-- top_waiter = rt_mutex_top_waiter(&pi_state->pi_mutex);
-- if (WARN_ON_ONCE(!top_waiter)) {
-- /*
-- * As per the comment in futex_unlock_pi() this should not happen.
-- *
-- * When this happens, give up our locks and try again, giving
-- * the futex_lock_pi() instance time to complete, either by
-- * waiting on the rtmutex or removing itself from the futex
-- * queue.
-- */
-- ret = -EAGAIN;
-- goto out_unlock;
-- }
--
- new_owner = top_waiter->task;
-
- /*
-@@ -1046,20 +1033,34 @@ int futex_lock_pi(u32 __user *uaddr, uns
- ret = rt_mutex_wait_proxy_lock(&q.pi_state->pi_mutex, to, &rt_waiter);
-
- cleanup:
-- spin_lock(q.lock_ptr);
- /*
- * If we failed to acquire the lock (deadlock/signal/timeout), we must
-- * first acquire the hb->lock before removing the lock from the
-- * rt_mutex waitqueue, such that we can keep the hb and rt_mutex wait
-- * lists consistent.
-+ * must unwind the above, however we canont lock hb->lock because
-+ * rt_mutex already has a waiter enqueued and hb->lock can itself try
-+ * and enqueue an rt_waiter through rtlock.
-+ *
-+ * Doing the cleanup without holding hb->lock can cause inconsistent
-+ * state between hb and pi_state, but only in the direction of not
-+ * seeing a waiter that is leaving.
-+ *
-+ * See futex_unlock_pi(), it deals with this inconsistency.
-+ *
-+ * There be dragons here, since we must deal with the inconsistency on
-+ * the way out (here), it is impossible to detect/warn about the race
-+ * the other way around (missing an incoming waiter).
- *
-- * In particular; it is important that futex_unlock_pi() can not
-- * observe this inconsistency.
-+ * What could possibly go wrong...
- */
- if (ret && !rt_mutex_cleanup_proxy_lock(&q.pi_state->pi_mutex, &rt_waiter))
- ret = 0;
-
- /*
-+ * Now that the rt_waiter has been dequeued, it is safe to use
-+ * spinlock/rtlock (which might enqueue its own rt_waiter) and fix up
-+ * the
-+ */
-+ spin_lock(q.lock_ptr);
-+ /*
- * Waiter is unqueued.
- */
- rt_mutex_post_schedule();
-@@ -1143,6 +1144,7 @@ int futex_unlock_pi(u32 __user *uaddr, u
- top_waiter = futex_top_waiter(hb, &key);
- if (top_waiter) {
- struct futex_pi_state *pi_state = top_waiter->pi_state;
-+ struct rt_mutex_waiter *rt_waiter;
-
- ret = -EINVAL;
- if (!pi_state)
-@@ -1155,22 +1157,39 @@ int futex_unlock_pi(u32 __user *uaddr, u
- if (pi_state->owner != current)
- goto out_unlock;
-
-- get_pi_state(pi_state);
- /*
- * By taking wait_lock while still holding hb->lock, we ensure
-- * there is no point where we hold neither; and therefore
-- * wake_futex_p() must observe a state consistent with what we
-- * observed.
-+ * there is no point where we hold neither; and thereby
-+ * wake_futex_pi() must observe any new waiters.
-+ *
-+ * Since the cleanup: case in futex_lock_pi() removes the
-+ * rt_waiter without holding hb->lock, it is possible for
-+ * wake_futex_pi() to not find a waiter while the above does,
-+ * in this case the waiter is on the way out and it can be
-+ * ignored.
- *
- * In particular; this forces __rt_mutex_start_proxy() to
- * complete such that we're guaranteed to observe the
-- * rt_waiter. Also see the WARN in wake_futex_pi().
-+ * rt_waiter.
- */
- raw_spin_lock_irq(&pi_state->pi_mutex.wait_lock);
-+
-+ /*
-+ * Futex vs rt_mutex waiter state -- if there are no rt_mutex
-+ * waiters even though futex thinks there are, then the waiter
-+ * is leaving and the uncontended path is safe to take.
-+ */
-+ rt_waiter = rt_mutex_top_waiter(&pi_state->pi_mutex);
-+ if (!rt_waiter) {
-+ raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
-+ goto do_uncontended;
-+ }
-+
-+ get_pi_state(pi_state);
- spin_unlock(&hb->lock);
-
- /* drops pi_state->pi_mutex.wait_lock */
-- ret = wake_futex_pi(uaddr, uval, pi_state);
-+ ret = wake_futex_pi(uaddr, uval, pi_state, rt_waiter);
-
- put_pi_state(pi_state);
-
-@@ -1198,6 +1217,7 @@ int futex_unlock_pi(u32 __user *uaddr, u
- return ret;
- }
-
-+do_uncontended:
- /*
- * We have no kernel internal state, i.e. no waiters in the
- * kernel. Waiters which are about to queue themselves are stuck
---- a/kernel/futex/requeue.c
-+++ b/kernel/futex/requeue.c
-@@ -850,11 +850,13 @@ int futex_wait_requeue_pi(u32 __user *ua
- pi_mutex = &q.pi_state->pi_mutex;
- ret = rt_mutex_wait_proxy_lock(pi_mutex, to, &rt_waiter);
-
-- /* Current is not longer pi_blocked_on */
-- spin_lock(q.lock_ptr);
-+ /*
-+ * See futex_unlock_pi()'s cleanup: comment.
-+ */
- if (ret && !rt_mutex_cleanup_proxy_lock(pi_mutex, &rt_waiter))
- ret = 0;
-
-+ spin_lock(q.lock_ptr);
- debug_rt_mutex_free_waiter(&rt_waiter);
- /*
- * Fixup the pi_state owner and possibly acquire the lock if we
diff --git a/debian/patches-rt/0091-printk-Add-this_cpu_in_panic.patch b/debian/patches-rt/0007-printk-Add-this_cpu_in_panic.patch
index 0925911259..4168b8ed07 100644
--- a/debian/patches-rt/0091-printk-Add-this_cpu_in_panic.patch
+++ b/debian/patches-rt/0007-printk-Add-this_cpu_in_panic.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Fri, 13 Oct 2023 14:30:49 +0000
-Subject: [PATCH 091/134] printk: Add this_cpu_in_panic()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 07/50] printk: Add this_cpu_in_panic()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
There is already panic_in_progress() and other_cpu_in_panic(),
but checking if the current CPU is the panic CPU must still be
@@ -59,7 +59,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/*
* This is used for debugging the mess that is the VT code by
* keeping track if we have the console semaphore held. It's
-@@ -2593,26 +2616,6 @@ static int console_cpu_notify(unsigned i
+@@ -2600,26 +2623,6 @@ static int console_cpu_notify(unsigned i
return 0;
}
diff --git a/debian/patches-rt/0007-serial-8250_dma-Use-port-lock-wrappers.patch b/debian/patches-rt/0007-serial-8250_dma-Use-port-lock-wrappers.patch
deleted file mode 100644
index bc8686e892..0000000000
--- a/debian/patches-rt/0007-serial-8250_dma-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:24 +0206
-Subject: [PATCH 007/134] serial: 8250_dma: Use port lock wrappers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-8-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/8250/8250_dma.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_dma.c
-+++ b/drivers/tty/serial/8250/8250_dma.c
-@@ -22,7 +22,7 @@ static void __dma_tx_complete(void *para
- dma_sync_single_for_cpu(dma->txchan->device->dev, dma->tx_addr,
- UART_XMIT_SIZE, DMA_TO_DEVICE);
-
-- spin_lock_irqsave(&p->port.lock, flags);
-+ uart_port_lock_irqsave(&p->port, &flags);
-
- dma->tx_running = 0;
-
-@@ -35,7 +35,7 @@ static void __dma_tx_complete(void *para
- if (ret || !dma->tx_running)
- serial8250_set_THRI(p);
-
-- spin_unlock_irqrestore(&p->port.lock, flags);
-+ uart_port_unlock_irqrestore(&p->port, flags);
- }
-
- static void __dma_rx_complete(struct uart_8250_port *p)
-@@ -70,7 +70,7 @@ static void dma_rx_complete(void *param)
- struct uart_8250_dma *dma = p->dma;
- unsigned long flags;
-
-- spin_lock_irqsave(&p->port.lock, flags);
-+ uart_port_lock_irqsave(&p->port, &flags);
- if (dma->rx_running)
- __dma_rx_complete(p);
-
-@@ -80,7 +80,7 @@ static void dma_rx_complete(void *param)
- */
- if (!dma->rx_running && (serial_lsr_in(p) & UART_LSR_DR))
- p->dma->rx_dma(p);
-- spin_unlock_irqrestore(&p->port.lock, flags);
-+ uart_port_unlock_irqrestore(&p->port, flags);
- }
-
- int serial8250_tx_dma(struct uart_8250_port *p)
diff --git a/debian/patches-rt/0008-drm-i915-gt-Queue-and-wait-for-the-irq_work-item.patch b/debian/patches-rt/0008-drm-i915-gt-Queue-and-wait-for-the-irq_work-item.patch
index 0322ae1544..5610950db5 100644
--- a/debian/patches-rt/0008-drm-i915-gt-Queue-and-wait-for-the-irq_work-item.patch
+++ b/debian/patches-rt/0008-drm-i915-gt-Queue-and-wait-for-the-irq_work-item.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Wed, 8 Sep 2021 17:18:00 +0200
Subject: [PATCH 08/10] drm/i915/gt: Queue and wait for the irq_work item.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Disabling interrupts and invoking the irq_work function directly breaks
on PREEMPT_RT.
diff --git a/debian/patches-rt/0092-printk-ringbuffer-Cleanup-reader-terminology.patch b/debian/patches-rt/0008-printk-ringbuffer-Cleanup-reader-terminology.patch
index 31c6312c46..cfd6ca7a28 100644
--- a/debian/patches-rt/0092-printk-ringbuffer-Cleanup-reader-terminology.patch
+++ b/debian/patches-rt/0008-printk-ringbuffer-Cleanup-reader-terminology.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 6 Nov 2023 15:01:58 +0000
-Subject: [PATCH 092/134] printk: ringbuffer: Cleanup reader terminology
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 08/50] printk: ringbuffer: Cleanup reader terminology
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
With the lockless ringbuffer, it is allowed that multiple
CPUs/contexts write simultaneously into the buffer. This creates
diff --git a/debian/patches-rt/0008-serial-8250_dw-Use-port-lock-wrappers.patch b/debian/patches-rt/0008-serial-8250_dw-Use-port-lock-wrappers.patch
deleted file mode 100644
index d5394fc7a3..0000000000
--- a/debian/patches-rt/0008-serial-8250_dw-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:25 +0206
-Subject: [PATCH 008/134] serial: 8250_dw: Use port lock wrappers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-9-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/8250/8250_dw.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_dw.c
-+++ b/drivers/tty/serial/8250/8250_dw.c
-@@ -263,20 +263,20 @@ static int dw8250_handle_irq(struct uart
- * so we limit the workaround only to non-DMA mode.
- */
- if (!up->dma && rx_timeout) {
-- spin_lock_irqsave(&p->lock, flags);
-+ uart_port_lock_irqsave(p, &flags);
- status = serial_lsr_in(up);
-
- if (!(status & (UART_LSR_DR | UART_LSR_BI)))
- (void) p->serial_in(p, UART_RX);
-
-- spin_unlock_irqrestore(&p->lock, flags);
-+ uart_port_unlock_irqrestore(p, flags);
- }
-
- /* Manually stop the Rx DMA transfer when acting as flow controller */
- if (quirks & DW_UART_QUIRK_IS_DMA_FC && up->dma && up->dma->rx_running && rx_timeout) {
-- spin_lock_irqsave(&p->lock, flags);
-+ uart_port_lock_irqsave(p, &flags);
- status = serial_lsr_in(up);
-- spin_unlock_irqrestore(&p->lock, flags);
-+ uart_port_unlock_irqrestore(p, flags);
-
- if (status & (UART_LSR_DR | UART_LSR_BI)) {
- dw8250_writel_ext(p, RZN1_UART_RDMACR, 0);
diff --git a/debian/patches-rt/0009-drm-i915-gt-Use-spin_lock_irq-instead-of-local_irq_d.patch b/debian/patches-rt/0009-drm-i915-gt-Use-spin_lock_irq-instead-of-local_irq_d.patch
index 3245e145f0..6aa006db93 100644
--- a/debian/patches-rt/0009-drm-i915-gt-Use-spin_lock_irq-instead-of-local_irq_d.patch
+++ b/debian/patches-rt/0009-drm-i915-gt-Use-spin_lock_irq-instead-of-local_irq_d.patch
@@ -2,7 +2,7 @@ From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Wed, 8 Sep 2021 19:03:41 +0200
Subject: [PATCH 09/10] drm/i915/gt: Use spin_lock_irq() instead of
local_irq_disable() + spin_lock()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
execlists_dequeue() is invoked from a function which uses
local_irq_disable() to disable interrupts so the spin_lock() behaves
diff --git a/debian/patches-rt/0093-printk-Wait-for-all-reserved-records-with-pr_flush.patch b/debian/patches-rt/0009-printk-Wait-for-all-reserved-records-with-pr_flush.patch
index 661aea2105..3ae222c891 100644
--- a/debian/patches-rt/0093-printk-Wait-for-all-reserved-records-with-pr_flush.patch
+++ b/debian/patches-rt/0009-printk-Wait-for-all-reserved-records-with-pr_flush.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 6 Nov 2023 14:59:55 +0000
-Subject: [PATCH 093/134] printk: Wait for all reserved records with pr_flush()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 09/50] printk: Wait for all reserved records with pr_flush()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Currently pr_flush() will only wait for records that were
available to readers at the time of the call (using
@@ -27,7 +27,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -3756,7 +3756,7 @@ static bool __pr_flush(struct console *c
+@@ -3763,7 +3763,7 @@ static bool __pr_flush(struct console *c
might_sleep();
diff --git a/debian/patches-rt/0009-serial-8250_exar-Use-port-lock-wrappers.patch b/debian/patches-rt/0009-serial-8250_exar-Use-port-lock-wrappers.patch
deleted file mode 100644
index 80c37fba6c..0000000000
--- a/debian/patches-rt/0009-serial-8250_exar-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:26 +0206
-Subject: [PATCH 009/134] serial: 8250_exar: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-10-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/8250/8250_exar.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_exar.c
-+++ b/drivers/tty/serial/8250/8250_exar.c
-@@ -201,9 +201,9 @@ static int xr17v35x_startup(struct uart_
- *
- * Synchronize UART_IER access against the console.
- */
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- serial_port_out(port, UART_IER, 0);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
-
- return serial8250_do_startup(port);
- }
diff --git a/debian/patches-rt/0010-drm-i915-Drop-the-irqs_disabled-check.patch b/debian/patches-rt/0010-drm-i915-Drop-the-irqs_disabled-check.patch
index 83a516ce8b..a76d765926 100644
--- a/debian/patches-rt/0010-drm-i915-Drop-the-irqs_disabled-check.patch
+++ b/debian/patches-rt/0010-drm-i915-Drop-the-irqs_disabled-check.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri, 1 Oct 2021 20:01:03 +0200
Subject: [PATCH 10/10] drm/i915: Drop the irqs_disabled() check
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The !irqs_disabled() check triggers on PREEMPT_RT even with
i915_sched_engine::lock acquired. The reason is the lock is transformed
diff --git a/debian/patches-rt/0094-printk-ringbuffer-Skip-non-finalized-records-in-pani.patch b/debian/patches-rt/0010-printk-ringbuffer-Skip-non-finalized-records-in-pani.patch
index 56c675cea9..a92123216f 100644
--- a/debian/patches-rt/0094-printk-ringbuffer-Skip-non-finalized-records-in-pani.patch
+++ b/debian/patches-rt/0010-printk-ringbuffer-Skip-non-finalized-records-in-pani.patch
@@ -1,8 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Fri, 13 Oct 2023 10:23:11 +0000
-Subject: [PATCH 094/134] printk: ringbuffer: Skip non-finalized records in
- panic
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 10/50] printk: ringbuffer: Skip non-finalized records in panic
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Normally a reader will stop once reaching a non-finalized
record. However, when a panic happens, writers from other CPUs
diff --git a/debian/patches-rt/0010-serial-8250_fsl-Use-port-lock-wrappers.patch b/debian/patches-rt/0010-serial-8250_fsl-Use-port-lock-wrappers.patch
deleted file mode 100644
index abe7c81a98..0000000000
--- a/debian/patches-rt/0010-serial-8250_fsl-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:27 +0206
-Subject: [PATCH 010/134] serial: 8250_fsl: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-11-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/8250/8250_fsl.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_fsl.c
-+++ b/drivers/tty/serial/8250/8250_fsl.c
-@@ -30,11 +30,11 @@ int fsl8250_handle_irq(struct uart_port
- unsigned int iir;
- struct uart_8250_port *up = up_to_u8250p(port);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- iir = port->serial_in(port, UART_IIR);
- if (iir & UART_IIR_NO_INT) {
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- return 0;
- }
-
-@@ -54,7 +54,7 @@ int fsl8250_handle_irq(struct uart_port
- if (unlikely(up->lsr_saved_flags & UART_LSR_BI)) {
- up->lsr_saved_flags &= ~UART_LSR_BI;
- port->serial_in(port, UART_RX);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- return 1;
- }
-
diff --git a/debian/patches-rt/0095-printk-ringbuffer-Consider-committed-as-finalized-in.patch b/debian/patches-rt/0011-printk-ringbuffer-Consider-committed-as-finalized-in.patch
index 932ba13e7d..405969873c 100644
--- a/debian/patches-rt/0095-printk-ringbuffer-Consider-committed-as-finalized-in.patch
+++ b/debian/patches-rt/0011-printk-ringbuffer-Consider-committed-as-finalized-in.patch
@@ -1,8 +1,8 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 20 Nov 2023 12:46:35 +0100
-Subject: [PATCH 095/134] printk: ringbuffer: Consider committed as finalized
- in panic
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 11/50] printk: ringbuffer: Consider committed as finalized in
+ panic
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
A descriptor in the committed state means the record does not yet
exist for the reader. However, for the panic CPU, committed
diff --git a/debian/patches-rt/0011-serial-8250_mtk-Use-port-lock-wrappers.patch b/debian/patches-rt/0011-serial-8250_mtk-Use-port-lock-wrappers.patch
deleted file mode 100644
index a668182042..0000000000
--- a/debian/patches-rt/0011-serial-8250_mtk-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:28 +0206
-Subject: [PATCH 011/134] serial: 8250_mtk: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-12-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/8250/8250_mtk.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_mtk.c
-+++ b/drivers/tty/serial/8250/8250_mtk.c
-@@ -102,7 +102,7 @@ static void mtk8250_dma_rx_complete(void
- if (data->rx_status == DMA_RX_SHUTDOWN)
- return;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- dmaengine_tx_status(dma->rxchan, dma->rx_cookie, &state);
- total = dma->rx_size - state.residue;
-@@ -128,7 +128,7 @@ static void mtk8250_dma_rx_complete(void
-
- mtk8250_rx_dma(up);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static void mtk8250_rx_dma(struct uart_8250_port *up)
-@@ -368,7 +368,7 @@ mtk8250_set_termios(struct uart_port *po
- * Ok, we're now changing the port state. Do it with
- * interrupts disabled.
- */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /*
- * Update the per-port timeout.
-@@ -416,7 +416,7 @@ mtk8250_set_termios(struct uart_port *po
- if (uart_console(port))
- up->port.cons->cflag = termios->c_cflag;
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- /* Don't rewrite B0 */
- if (tty_termios_baud_rate(termios))
- tty_termios_encode_baud_rate(termios, baud, baud);
diff --git a/debian/patches-rt/0096-printk-Disable-passing-console-lock-owner-completely.patch b/debian/patches-rt/0012-printk-Disable-passing-console-lock-owner-completely.patch
index d5dcdcdccc..adc25ac39d 100644
--- a/debian/patches-rt/0096-printk-Disable-passing-console-lock-owner-completely.patch
+++ b/debian/patches-rt/0012-printk-Disable-passing-console-lock-owner-completely.patch
@@ -1,8 +1,8 @@
From: Petr Mladek <pmladek@suse.com>
Date: Fri, 13 Oct 2023 14:12:05 +0000
-Subject: [PATCH 096/134] printk: Disable passing console lock owner completely
+Subject: [PATCH 12/50] printk: Disable passing console lock owner completely
during panic()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The commit d51507098ff91 ("printk: disable optimistic spin
during panic") added checks to avoid becoming a console waiter
@@ -58,7 +58,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -1870,10 +1870,23 @@ static bool console_waiter;
+@@ -1869,10 +1869,23 @@ static bool console_waiter;
*/
static void console_lock_spinning_enable(void)
{
@@ -82,7 +82,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/* The waiter may spin on us after setting console_owner */
spin_acquire(&console_owner_dep_map, 0, 0, _THIS_IP_);
}
-@@ -1898,6 +1911,22 @@ static int console_lock_spinning_disable
+@@ -1897,6 +1910,22 @@ static int console_lock_spinning_disable
{
int waiter;
diff --git a/debian/patches-rt/0012-serial-8250_omap-Use-port-lock-wrappers.patch b/debian/patches-rt/0012-serial-8250_omap-Use-port-lock-wrappers.patch
deleted file mode 100644
index 10ebd70ea0..0000000000
--- a/debian/patches-rt/0012-serial-8250_omap-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,236 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:29 +0206
-Subject: [PATCH 012/134] serial: 8250_omap: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-13-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/8250/8250_omap.c | 52 ++++++++++++++++++------------------
- 1 file changed, 26 insertions(+), 26 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_omap.c
-+++ b/drivers/tty/serial/8250/8250_omap.c
-@@ -401,7 +401,7 @@ static void omap_8250_set_termios(struct
- * interrupts disabled.
- */
- pm_runtime_get_sync(port->dev);
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
-
- /*
- * Update the per-port timeout.
-@@ -504,7 +504,7 @@ static void omap_8250_set_termios(struct
- }
- omap8250_restore_regs(up);
-
-- spin_unlock_irq(&up->port.lock);
-+ uart_port_unlock_irq(&up->port);
- pm_runtime_mark_last_busy(port->dev);
- pm_runtime_put_autosuspend(port->dev);
-
-@@ -529,7 +529,7 @@ static void omap_8250_pm(struct uart_por
- pm_runtime_get_sync(port->dev);
-
- /* Synchronize UART_IER access against the console. */
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
-
- serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
- efr = serial_in(up, UART_EFR);
-@@ -541,7 +541,7 @@ static void omap_8250_pm(struct uart_por
- serial_out(up, UART_EFR, efr);
- serial_out(up, UART_LCR, 0);
-
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
-
- pm_runtime_mark_last_busy(port->dev);
- pm_runtime_put_autosuspend(port->dev);
-@@ -660,7 +660,7 @@ static irqreturn_t omap8250_irq(int irq,
- unsigned long delay;
-
- /* Synchronize UART_IER access against the console. */
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- up->ier = port->serial_in(port, UART_IER);
- if (up->ier & (UART_IER_RLSI | UART_IER_RDI)) {
- port->ops->stop_rx(port);
-@@ -670,7 +670,7 @@ static irqreturn_t omap8250_irq(int irq,
- */
- cancel_delayed_work(&up->overrun_backoff);
- }
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- delay = msecs_to_jiffies(up->overrun_backoff_time_ms);
- schedule_delayed_work(&up->overrun_backoff, delay);
-@@ -717,10 +717,10 @@ static int omap_8250_startup(struct uart
- }
-
- /* Synchronize UART_IER access against the console. */
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- up->ier = UART_IER_RLSI | UART_IER_RDI;
- serial_out(up, UART_IER, up->ier);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
-
- #ifdef CONFIG_PM
- up->capabilities |= UART_CAP_RPM;
-@@ -733,9 +733,9 @@ static int omap_8250_startup(struct uart
- serial_out(up, UART_OMAP_WER, priv->wer);
-
- if (up->dma && !(priv->habit & UART_HAS_EFR2)) {
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- up->dma->rx_dma(up);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- }
-
- enable_irq(up->port.irq);
-@@ -761,10 +761,10 @@ static void omap_8250_shutdown(struct ua
- serial_out(up, UART_OMAP_EFR2, 0x0);
-
- /* Synchronize UART_IER access against the console. */
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- up->ier = 0;
- serial_out(up, UART_IER, 0);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- disable_irq_nosync(up->port.irq);
- dev_pm_clear_wake_irq(port->dev);
-
-@@ -789,10 +789,10 @@ static void omap_8250_throttle(struct ua
-
- pm_runtime_get_sync(port->dev);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- port->ops->stop_rx(port);
- priv->throttled = true;
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- pm_runtime_mark_last_busy(port->dev);
- pm_runtime_put_autosuspend(port->dev);
-@@ -807,14 +807,14 @@ static void omap_8250_unthrottle(struct
- pm_runtime_get_sync(port->dev);
-
- /* Synchronize UART_IER access against the console. */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- priv->throttled = false;
- if (up->dma)
- up->dma->rx_dma(up);
- up->ier |= UART_IER_RLSI | UART_IER_RDI;
- port->read_status_mask |= UART_LSR_DR;
- serial_out(up, UART_IER, up->ier);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- pm_runtime_mark_last_busy(port->dev);
- pm_runtime_put_autosuspend(port->dev);
-@@ -958,7 +958,7 @@ static void __dma_rx_complete(void *para
- unsigned long flags;
-
- /* Synchronize UART_IER access against the console. */
-- spin_lock_irqsave(&p->port.lock, flags);
-+ uart_port_lock_irqsave(&p->port, &flags);
-
- /*
- * If the tx status is not DMA_COMPLETE, then this is a delayed
-@@ -967,7 +967,7 @@ static void __dma_rx_complete(void *para
- */
- if (dmaengine_tx_status(dma->rxchan, dma->rx_cookie, &state) !=
- DMA_COMPLETE) {
-- spin_unlock_irqrestore(&p->port.lock, flags);
-+ uart_port_unlock_irqrestore(&p->port, flags);
- return;
- }
- __dma_rx_do_complete(p);
-@@ -978,7 +978,7 @@ static void __dma_rx_complete(void *para
- omap_8250_rx_dma(p);
- }
-
-- spin_unlock_irqrestore(&p->port.lock, flags);
-+ uart_port_unlock_irqrestore(&p->port, flags);
- }
-
- static void omap_8250_rx_dma_flush(struct uart_8250_port *p)
-@@ -1083,7 +1083,7 @@ static void omap_8250_dma_tx_complete(vo
- dma_sync_single_for_cpu(dma->txchan->device->dev, dma->tx_addr,
- UART_XMIT_SIZE, DMA_TO_DEVICE);
-
-- spin_lock_irqsave(&p->port.lock, flags);
-+ uart_port_lock_irqsave(&p->port, &flags);
-
- dma->tx_running = 0;
-
-@@ -1112,7 +1112,7 @@ static void omap_8250_dma_tx_complete(vo
- serial8250_set_THRI(p);
- }
-
-- spin_unlock_irqrestore(&p->port.lock, flags);
-+ uart_port_unlock_irqrestore(&p->port, flags);
- }
-
- static int omap_8250_tx_dma(struct uart_8250_port *p)
-@@ -1278,7 +1278,7 @@ static int omap_8250_dma_handle_irq(stru
- return IRQ_HANDLED;
- }
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- status = serial_port_in(port, UART_LSR);
-
-@@ -1756,15 +1756,15 @@ static int omap8250_runtime_resume(struc
- up = serial8250_get_port(priv->line);
-
- if (up && omap8250_lost_context(up)) {
-- spin_lock_irq(&up->port.lock);
-+ uart_port_lock_irq(&up->port);
- omap8250_restore_regs(up);
-- spin_unlock_irq(&up->port.lock);
-+ uart_port_unlock_irq(&up->port);
- }
-
- if (up && up->dma && up->dma->rxchan && !(priv->habit & UART_HAS_EFR2)) {
-- spin_lock_irq(&up->port.lock);
-+ uart_port_lock_irq(&up->port);
- omap_8250_rx_dma(up);
-- spin_unlock_irq(&up->port.lock);
-+ uart_port_unlock_irq(&up->port);
- }
-
- priv->latency = priv->calc_latency;
diff --git a/debian/patches-rt/0097-printk-Avoid-non-panic-CPUs-writing-to-ringbuffer.patch b/debian/patches-rt/0013-printk-Avoid-non-panic-CPUs-writing-to-ringbuffer.patch
index 2f5a4ba17d..94aab97fe8 100644
--- a/debian/patches-rt/0097-printk-Avoid-non-panic-CPUs-writing-to-ringbuffer.patch
+++ b/debian/patches-rt/0013-printk-Avoid-non-panic-CPUs-writing-to-ringbuffer.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Fri, 20 Oct 2023 09:37:05 +0000
-Subject: [PATCH 097/134] printk: Avoid non-panic CPUs writing to ringbuffer
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 13/50] printk: Avoid non-panic CPUs writing to ringbuffer
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Commit 13fb0f74d702 ("printk: Avoid livelock with heavy printk
during panic") introduced a mechanism to silence non-panic CPUs
@@ -35,7 +35,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
DECLARE_WAIT_QUEUE_HEAD(log_wait);
/* All 3 protected by @syslog_lock. */
/* the next printk record to read by syslog(READ) or /proc/kmsg */
-@@ -2323,7 +2317,12 @@ asmlinkage int vprintk_emit(int facility
+@@ -2322,7 +2316,12 @@ asmlinkage int vprintk_emit(int facility
if (unlikely(suppress_printk))
return 0;
@@ -49,7 +49,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
return 0;
if (level == LOGLEVEL_SCHED) {
-@@ -2800,8 +2799,6 @@ void console_prepend_dropped(struct prin
+@@ -2807,8 +2806,6 @@ void console_prepend_dropped(struct prin
bool printk_get_next_message(struct printk_message *pmsg, u64 seq,
bool is_extended, bool may_suppress)
{
@@ -58,7 +58,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
struct printk_buffers *pbufs = pmsg->pbufs;
const size_t scratchbuf_sz = sizeof(pbufs->scratchbuf);
const size_t outbuf_sz = sizeof(pbufs->outbuf);
-@@ -2829,17 +2826,6 @@ bool printk_get_next_message(struct prin
+@@ -2836,17 +2833,6 @@ bool printk_get_next_message(struct prin
pmsg->seq = r.info->seq;
pmsg->dropped = r.info->seq - seq;
diff --git a/debian/patches-rt/0013-serial-8250_pci1xxxx-Use-port-lock-wrappers.patch b/debian/patches-rt/0013-serial-8250_pci1xxxx-Use-port-lock-wrappers.patch
deleted file mode 100644
index 2916387692..0000000000
--- a/debian/patches-rt/0013-serial-8250_pci1xxxx-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:30 +0206
-Subject: [PATCH 013/134] serial: 8250_pci1xxxx: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-14-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/8250/8250_pci1xxxx.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_pci1xxxx.c
-+++ b/drivers/tty/serial/8250/8250_pci1xxxx.c
-@@ -225,10 +225,10 @@ static bool pci1xxxx_port_suspend(int li
- if (port->suspended == 0 && port->dev) {
- wakeup_mask = readb(up->port.membase + UART_WAKE_MASK_REG);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- port->mctrl &= ~TIOCM_OUT2;
- port->ops->set_mctrl(port, port->mctrl);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- ret = (wakeup_mask & UART_WAKE_SRCS) != UART_WAKE_SRCS;
- }
-@@ -251,10 +251,10 @@ static void pci1xxxx_port_resume(int lin
- writeb(UART_WAKE_SRCS, port->membase + UART_WAKE_REG);
-
- if (port->suspended == 0) {
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- port->mctrl |= TIOCM_OUT2;
- port->ops->set_mctrl(port, port->mctrl);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
- mutex_unlock(&tport->mutex);
- }
diff --git a/debian/patches-rt/0098-panic-Flush-kernel-log-buffer-at-the-end.patch b/debian/patches-rt/0014-panic-Flush-kernel-log-buffer-at-the-end.patch
index ec3cbc5dd2..09f528156f 100644
--- a/debian/patches-rt/0098-panic-Flush-kernel-log-buffer-at-the-end.patch
+++ b/debian/patches-rt/0014-panic-Flush-kernel-log-buffer-at-the-end.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Thu, 14 Dec 2023 20:48:23 +0000
-Subject: [PATCH 098/134] panic: Flush kernel log buffer at the end
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 14/50] panic: Flush kernel log buffer at the end
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
If the kernel crashes in a context where printk() calls always
defer printing (such as in NMI or inside a printk_safe section)
@@ -21,7 +21,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/panic.c
+++ b/kernel/panic.c
-@@ -442,6 +442,14 @@ void panic(const char *fmt, ...)
+@@ -446,6 +446,14 @@ void panic(const char *fmt, ...)
/* Do not scroll important messages printed above */
suppress_printk = 1;
diff --git a/debian/patches-rt/0014-serial-altera_jtaguart-Use-port-lock-wrappers.patch b/debian/patches-rt/0014-serial-altera_jtaguart-Use-port-lock-wrappers.patch
deleted file mode 100644
index 46dbf785d0..0000000000
--- a/debian/patches-rt/0014-serial-altera_jtaguart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:31 +0206
-Subject: [PATCH 014/134] serial: altera_jtaguart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-15-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/altera_jtaguart.c | 28 ++++++++++++++--------------
- 1 file changed, 14 insertions(+), 14 deletions(-)
-
---- a/drivers/tty/serial/altera_jtaguart.c
-+++ b/drivers/tty/serial/altera_jtaguart.c
-@@ -147,14 +147,14 @@ static irqreturn_t altera_jtaguart_inter
- isr = (readl(port->membase + ALTERA_JTAGUART_CONTROL_REG) >>
- ALTERA_JTAGUART_CONTROL_RI_OFF) & port->read_status_mask;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- if (isr & ALTERA_JTAGUART_CONTROL_RE_MSK)
- altera_jtaguart_rx_chars(port);
- if (isr & ALTERA_JTAGUART_CONTROL_WE_MSK)
- altera_jtaguart_tx_chars(port);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_RETVAL(isr);
- }
-@@ -180,14 +180,14 @@ static int altera_jtaguart_startup(struc
- return ret;
- }
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Enable RX interrupts now */
- port->read_status_mask = ALTERA_JTAGUART_CONTROL_RE_MSK;
- writel(port->read_status_mask,
- port->membase + ALTERA_JTAGUART_CONTROL_REG);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return 0;
- }
-@@ -196,14 +196,14 @@ static void altera_jtaguart_shutdown(str
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Disable all interrupts now */
- port->read_status_mask = 0;
- writel(port->read_status_mask,
- port->membase + ALTERA_JTAGUART_CONTROL_REG);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- free_irq(port->irq, port);
- }
-@@ -264,33 +264,33 @@ static void altera_jtaguart_console_putc
- unsigned long flags;
- u32 status;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- while (!altera_jtaguart_tx_space(port, &status)) {
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if ((status & ALTERA_JTAGUART_CONTROL_AC_MSK) == 0) {
- return; /* no connection activity */
- }
-
- cpu_relax();
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- }
- writel(c, port->membase + ALTERA_JTAGUART_DATA_REG);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
- #else
- static void altera_jtaguart_console_putc(struct uart_port *port, unsigned char c)
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- while (!altera_jtaguart_tx_space(port, NULL)) {
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- cpu_relax();
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- }
- writel(c, port->membase + ALTERA_JTAGUART_DATA_REG);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
- #endif
-
diff --git a/debian/patches-rt/0099-printk-Consider-nbcon-boot-consoles-on-seq-init.patch b/debian/patches-rt/0015-printk-Consider-nbcon-boot-consoles-on-seq-init.patch
index b4e61c7689..0f0519c5e3 100644
--- a/debian/patches-rt/0099-printk-Consider-nbcon-boot-consoles-on-seq-init.patch
+++ b/debian/patches-rt/0015-printk-Consider-nbcon-boot-consoles-on-seq-init.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Wed, 22 Nov 2023 11:23:43 +0000
-Subject: [PATCH 099/134] printk: Consider nbcon boot consoles on seq init
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 15/50] printk: Consider nbcon boot consoles on seq init
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
If a non-boot console is registering and boot consoles exist, the
consoles are flushed before being unregistered. This allows the
@@ -24,7 +24,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -3392,11 +3392,20 @@ static void console_init_seq(struct cons
+@@ -3399,11 +3399,20 @@ static void console_init_seq(struct cons
newcon->seq = prb_next_seq(prb);
for_each_console(con) {
diff --git a/debian/patches-rt/0015-serial-altera_uart-Use-port-lock-wrappers.patch b/debian/patches-rt/0015-serial-altera_uart-Use-port-lock-wrappers.patch
deleted file mode 100644
index 95e2c031f5..0000000000
--- a/debian/patches-rt/0015-serial-altera_uart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:32 +0206
-Subject: [PATCH 015/134] serial: altera_uart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-16-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/altera_uart.c | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
---- a/drivers/tty/serial/altera_uart.c
-+++ b/drivers/tty/serial/altera_uart.c
-@@ -164,13 +164,13 @@ static void altera_uart_break_ctl(struct
- struct altera_uart *pp = container_of(port, struct altera_uart, port);
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (break_state == -1)
- pp->imr |= ALTERA_UART_CONTROL_TRBK_MSK;
- else
- pp->imr &= ~ALTERA_UART_CONTROL_TRBK_MSK;
- altera_uart_update_ctrl_reg(pp);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void altera_uart_set_termios(struct uart_port *port,
-@@ -187,10 +187,10 @@ static void altera_uart_set_termios(stru
- tty_termios_copy_hw(termios, old);
- tty_termios_encode_baud_rate(termios, baud, baud);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- uart_update_timeout(port, termios->c_cflag, baud);
- altera_uart_writel(port, baudclk, ALTERA_UART_DIVISOR_REG);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- /*
- * FIXME: port->read_status_mask and port->ignore_status_mask
-@@ -264,12 +264,12 @@ static irqreturn_t altera_uart_interrupt
-
- isr = altera_uart_readl(port, ALTERA_UART_STATUS_REG) & pp->imr;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (isr & ALTERA_UART_STATUS_RRDY_MSK)
- altera_uart_rx_chars(port);
- if (isr & ALTERA_UART_STATUS_TRDY_MSK)
- altera_uart_tx_chars(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return IRQ_RETVAL(isr);
- }
-@@ -313,13 +313,13 @@ static int altera_uart_startup(struct ua
- }
- }
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Enable RX interrupts now */
- pp->imr = ALTERA_UART_CONTROL_RRDY_MSK;
- altera_uart_update_ctrl_reg(pp);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return 0;
- }
-@@ -329,13 +329,13 @@ static void altera_uart_shutdown(struct
- struct altera_uart *pp = container_of(port, struct altera_uart, port);
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Disable all interrupts now */
- pp->imr = 0;
- altera_uart_update_ctrl_reg(pp);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (port->irq)
- free_irq(port->irq, port);
diff --git a/debian/patches-rt/0100-printk-Add-sparse-notation-to-console_srcu-locking.patch b/debian/patches-rt/0016-printk-Add-sparse-notation-to-console_srcu-locking.patch
index 8a1473c93d..02fb6c51e1 100644
--- a/debian/patches-rt/0100-printk-Add-sparse-notation-to-console_srcu-locking.patch
+++ b/debian/patches-rt/0016-printk-Add-sparse-notation-to-console_srcu-locking.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 9 Oct 2023 13:55:19 +0000
-Subject: [PATCH 100/134] printk: Add sparse notation to console_srcu locking
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 16/50] printk: Add sparse notation to console_srcu locking
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
kernel/printk/printk.c:284:5: sparse: sparse: context imbalance in
'console_srcu_read_lock' - wrong count at exit
diff --git a/debian/patches-rt/0016-serial-amba-pl010-Use-port-lock-wrappers.patch b/debian/patches-rt/0016-serial-amba-pl010-Use-port-lock-wrappers.patch
deleted file mode 100644
index f3ba735bfc..0000000000
--- a/debian/patches-rt/0016-serial-amba-pl010-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:33 +0206
-Subject: [PATCH 016/134] serial: amba-pl010: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-17-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/amba-pl010.c | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
---- a/drivers/tty/serial/amba-pl010.c
-+++ b/drivers/tty/serial/amba-pl010.c
-@@ -207,7 +207,7 @@ static irqreturn_t pl010_int(int irq, vo
- unsigned int status, pass_counter = AMBA_ISR_PASS_LIMIT;
- int handled = 0;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- status = readb(port->membase + UART010_IIR);
- if (status) {
-@@ -228,7 +228,7 @@ static irqreturn_t pl010_int(int irq, vo
- handled = 1;
- }
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_RETVAL(handled);
- }
-@@ -270,14 +270,14 @@ static void pl010_break_ctl(struct uart_
- unsigned long flags;
- unsigned int lcr_h;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- lcr_h = readb(port->membase + UART010_LCRH);
- if (break_state == -1)
- lcr_h |= UART01x_LCRH_BRK;
- else
- lcr_h &= ~UART01x_LCRH_BRK;
- writel(lcr_h, port->membase + UART010_LCRH);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int pl010_startup(struct uart_port *port)
-@@ -385,7 +385,7 @@ pl010_set_termios(struct uart_port *port
- if (port->fifosize > 1)
- lcr_h |= UART01x_LCRH_FEN;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /*
- * Update the per-port timeout.
-@@ -438,22 +438,22 @@ pl010_set_termios(struct uart_port *port
- writel(lcr_h, port->membase + UART010_LCRH);
- writel(old_cr, port->membase + UART010_CR);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void pl010_set_ldisc(struct uart_port *port, struct ktermios *termios)
- {
- if (termios->c_line == N_PPS) {
- port->flags |= UPF_HARDPPS_CD;
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- pl010_enable_ms(port);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- } else {
- port->flags &= ~UPF_HARDPPS_CD;
- if (!UART_ENABLE_MS(port, termios->c_cflag)) {
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- pl010_disable_ms(port);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- }
- }
- }
diff --git a/debian/patches-rt/0101-printk-nbcon-Ensure-ownership-release-on-failed-emit.patch b/debian/patches-rt/0017-printk-nbcon-Ensure-ownership-release-on-failed-emit.patch
index d96f2dc2b9..65553848f5 100644
--- a/debian/patches-rt/0101-printk-nbcon-Ensure-ownership-release-on-failed-emit.patch
+++ b/debian/patches-rt/0017-printk-nbcon-Ensure-ownership-release-on-failed-emit.patch
@@ -1,8 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Fri, 20 Oct 2023 09:52:59 +0000
-Subject: [PATCH 101/134] printk: nbcon: Ensure ownership release on failed
- emit
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 17/50] printk: nbcon: Ensure ownership release on failed emit
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Until now it was assumed that ownership has been lost when the
write_atomic() callback fails. nbcon_emit_next_record() only
diff --git a/debian/patches-rt/0017-serial-amba-pl011-Use-port-lock-wrappers.patch b/debian/patches-rt/0017-serial-amba-pl011-Use-port-lock-wrappers.patch
deleted file mode 100644
index 2a5e3a85ea..0000000000
--- a/debian/patches-rt/0017-serial-amba-pl011-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,327 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:34 +0206
-Subject: [PATCH 017/134] serial: amba-pl011: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-18-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/amba-pl011.c | 72 ++++++++++++++++++++--------------------
- 1 file changed, 36 insertions(+), 36 deletions(-)
-
---- a/drivers/tty/serial/amba-pl011.c
-+++ b/drivers/tty/serial/amba-pl011.c
-@@ -347,9 +347,9 @@ static int pl011_fifo_to_tty(struct uart
- flag = TTY_FRAME;
- }
-
-- spin_unlock(&uap->port.lock);
-+ uart_port_unlock(&uap->port);
- sysrq = uart_handle_sysrq_char(&uap->port, ch & 255);
-- spin_lock(&uap->port.lock);
-+ uart_port_lock(&uap->port);
-
- if (!sysrq)
- uart_insert_char(&uap->port, ch, UART011_DR_OE, ch, flag);
-@@ -544,7 +544,7 @@ static void pl011_dma_tx_callback(void *
- unsigned long flags;
- u16 dmacr;
-
-- spin_lock_irqsave(&uap->port.lock, flags);
-+ uart_port_lock_irqsave(&uap->port, &flags);
- if (uap->dmatx.queued)
- dma_unmap_single(dmatx->chan->device->dev, dmatx->dma,
- dmatx->len, DMA_TO_DEVICE);
-@@ -565,7 +565,7 @@ static void pl011_dma_tx_callback(void *
- if (!(dmacr & UART011_TXDMAE) || uart_tx_stopped(&uap->port) ||
- uart_circ_empty(&uap->port.state->xmit)) {
- uap->dmatx.queued = false;
-- spin_unlock_irqrestore(&uap->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uap->port, flags);
- return;
- }
-
-@@ -576,7 +576,7 @@ static void pl011_dma_tx_callback(void *
- */
- pl011_start_tx_pio(uap);
-
-- spin_unlock_irqrestore(&uap->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uap->port, flags);
- }
-
- /*
-@@ -1004,7 +1004,7 @@ static void pl011_dma_rx_callback(void *
- * routine to flush out the secondary DMA buffer while
- * we immediately trigger the next DMA job.
- */
-- spin_lock_irq(&uap->port.lock);
-+ uart_port_lock_irq(&uap->port);
- /*
- * Rx data can be taken by the UART interrupts during
- * the DMA irq handler. So we check the residue here.
-@@ -1020,7 +1020,7 @@ static void pl011_dma_rx_callback(void *
- ret = pl011_dma_rx_trigger_dma(uap);
-
- pl011_dma_rx_chars(uap, pending, lastbuf, false);
-- spin_unlock_irq(&uap->port.lock);
-+ uart_port_unlock_irq(&uap->port);
- /*
- * Do this check after we picked the DMA chars so we don't
- * get some IRQ immediately from RX.
-@@ -1086,11 +1086,11 @@ static void pl011_dma_rx_poll(struct tim
- if (jiffies_to_msecs(jiffies - dmarx->last_jiffies)
- > uap->dmarx.poll_timeout) {
-
-- spin_lock_irqsave(&uap->port.lock, flags);
-+ uart_port_lock_irqsave(&uap->port, &flags);
- pl011_dma_rx_stop(uap);
- uap->im |= UART011_RXIM;
- pl011_write(uap->im, uap, REG_IMSC);
-- spin_unlock_irqrestore(&uap->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uap->port, flags);
-
- uap->dmarx.running = false;
- dmaengine_terminate_all(rxchan);
-@@ -1186,10 +1186,10 @@ static void pl011_dma_shutdown(struct ua
- while (pl011_read(uap, REG_FR) & uap->vendor->fr_busy)
- cpu_relax();
-
-- spin_lock_irq(&uap->port.lock);
-+ uart_port_lock_irq(&uap->port);
- uap->dmacr &= ~(UART011_DMAONERR | UART011_RXDMAE | UART011_TXDMAE);
- pl011_write(uap->dmacr, uap, REG_DMACR);
-- spin_unlock_irq(&uap->port.lock);
-+ uart_port_unlock_irq(&uap->port);
-
- if (uap->using_tx_dma) {
- /* In theory, this should already be done by pl011_dma_flush_buffer */
-@@ -1370,9 +1370,9 @@ static void pl011_throttle_rx(struct uar
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- pl011_stop_rx(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void pl011_enable_ms(struct uart_port *port)
-@@ -1390,7 +1390,7 @@ static void pl011_rx_chars(struct uart_a
- {
- pl011_fifo_to_tty(uap);
-
-- spin_unlock(&uap->port.lock);
-+ uart_port_unlock(&uap->port);
- tty_flip_buffer_push(&uap->port.state->port);
- /*
- * If we were temporarily out of DMA mode for a while,
-@@ -1415,7 +1415,7 @@ static void pl011_rx_chars(struct uart_a
- #endif
- }
- }
-- spin_lock(&uap->port.lock);
-+ uart_port_lock(&uap->port);
- }
-
- static bool pl011_tx_char(struct uart_amba_port *uap, unsigned char c,
-@@ -1551,7 +1551,7 @@ static irqreturn_t pl011_int(int irq, vo
- unsigned int status, pass_counter = AMBA_ISR_PASS_LIMIT;
- int handled = 0;
-
-- spin_lock_irqsave(&uap->port.lock, flags);
-+ uart_port_lock_irqsave(&uap->port, &flags);
- status = pl011_read(uap, REG_RIS) & uap->im;
- if (status) {
- do {
-@@ -1581,7 +1581,7 @@ static irqreturn_t pl011_int(int irq, vo
- handled = 1;
- }
-
-- spin_unlock_irqrestore(&uap->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uap->port, flags);
-
- return IRQ_RETVAL(handled);
- }
-@@ -1653,14 +1653,14 @@ static void pl011_break_ctl(struct uart_
- unsigned long flags;
- unsigned int lcr_h;
-
-- spin_lock_irqsave(&uap->port.lock, flags);
-+ uart_port_lock_irqsave(&uap->port, &flags);
- lcr_h = pl011_read(uap, REG_LCRH_TX);
- if (break_state == -1)
- lcr_h |= UART01x_LCRH_BRK;
- else
- lcr_h &= ~UART01x_LCRH_BRK;
- pl011_write(lcr_h, uap, REG_LCRH_TX);
-- spin_unlock_irqrestore(&uap->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uap->port, flags);
- }
-
- #ifdef CONFIG_CONSOLE_POLL
-@@ -1799,7 +1799,7 @@ static void pl011_enable_interrupts(stru
- unsigned long flags;
- unsigned int i;
-
-- spin_lock_irqsave(&uap->port.lock, flags);
-+ uart_port_lock_irqsave(&uap->port, &flags);
-
- /* Clear out any spuriously appearing RX interrupts */
- pl011_write(UART011_RTIS | UART011_RXIS, uap, REG_ICR);
-@@ -1821,7 +1821,7 @@ static void pl011_enable_interrupts(stru
- if (!pl011_dma_rx_running(uap))
- uap->im |= UART011_RXIM;
- pl011_write(uap->im, uap, REG_IMSC);
-- spin_unlock_irqrestore(&uap->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uap->port, flags);
- }
-
- static void pl011_unthrottle_rx(struct uart_port *port)
-@@ -1829,7 +1829,7 @@ static void pl011_unthrottle_rx(struct u
- struct uart_amba_port *uap = container_of(port, struct uart_amba_port, port);
- unsigned long flags;
-
-- spin_lock_irqsave(&uap->port.lock, flags);
-+ uart_port_lock_irqsave(&uap->port, &flags);
-
- uap->im = UART011_RTIM;
- if (!pl011_dma_rx_running(uap))
-@@ -1837,7 +1837,7 @@ static void pl011_unthrottle_rx(struct u
-
- pl011_write(uap->im, uap, REG_IMSC);
-
-- spin_unlock_irqrestore(&uap->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uap->port, flags);
- }
-
- static int pl011_startup(struct uart_port *port)
-@@ -1857,7 +1857,7 @@ static int pl011_startup(struct uart_por
-
- pl011_write(uap->vendor->ifls, uap, REG_IFLS);
-
-- spin_lock_irq(&uap->port.lock);
-+ uart_port_lock_irq(&uap->port);
-
- cr = pl011_read(uap, REG_CR);
- cr &= UART011_CR_RTS | UART011_CR_DTR;
-@@ -1868,7 +1868,7 @@ static int pl011_startup(struct uart_por
-
- pl011_write(cr, uap, REG_CR);
-
-- spin_unlock_irq(&uap->port.lock);
-+ uart_port_unlock_irq(&uap->port);
-
- /*
- * initialise the old status of the modem signals
-@@ -1929,12 +1929,12 @@ static void pl011_disable_uart(struct ua
- unsigned int cr;
-
- uap->port.status &= ~(UPSTAT_AUTOCTS | UPSTAT_AUTORTS);
-- spin_lock_irq(&uap->port.lock);
-+ uart_port_lock_irq(&uap->port);
- cr = pl011_read(uap, REG_CR);
- cr &= UART011_CR_RTS | UART011_CR_DTR;
- cr |= UART01x_CR_UARTEN | UART011_CR_TXE;
- pl011_write(cr, uap, REG_CR);
-- spin_unlock_irq(&uap->port.lock);
-+ uart_port_unlock_irq(&uap->port);
-
- /*
- * disable break condition and fifos
-@@ -1946,14 +1946,14 @@ static void pl011_disable_uart(struct ua
-
- static void pl011_disable_interrupts(struct uart_amba_port *uap)
- {
-- spin_lock_irq(&uap->port.lock);
-+ uart_port_lock_irq(&uap->port);
-
- /* mask all interrupts and clear all pending ones */
- uap->im = 0;
- pl011_write(uap->im, uap, REG_IMSC);
- pl011_write(0xffff, uap, REG_ICR);
-
-- spin_unlock_irq(&uap->port.lock);
-+ uart_port_unlock_irq(&uap->port);
- }
-
- static void pl011_shutdown(struct uart_port *port)
-@@ -2098,7 +2098,7 @@ pl011_set_termios(struct uart_port *port
-
- bits = tty_get_frame_size(termios->c_cflag);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /*
- * Update the per-port timeout.
-@@ -2172,7 +2172,7 @@ pl011_set_termios(struct uart_port *port
- old_cr |= UART011_CR_RXE;
- pl011_write(old_cr, uap, REG_CR);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void
-@@ -2190,10 +2190,10 @@ sbsa_uart_set_termios(struct uart_port *
- termios->c_cflag &= ~(CMSPAR | CRTSCTS);
- termios->c_cflag |= CS8 | CLOCAL;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- uart_update_timeout(port, CS8, uap->fixed_baud);
- pl011_setup_status_masks(port, termios);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *pl011_type(struct uart_port *port)
-@@ -2332,9 +2332,9 @@ pl011_console_write(struct console *co,
- if (uap->port.sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock(&uap->port.lock);
-+ locked = uart_port_trylock(&uap->port);
- else
-- spin_lock(&uap->port.lock);
-+ uart_port_lock(&uap->port);
-
- /*
- * First save the CR then disable the interrupts
-@@ -2360,7 +2360,7 @@ pl011_console_write(struct console *co,
- pl011_write(old_cr, uap, REG_CR);
-
- if (locked)
-- spin_unlock(&uap->port.lock);
-+ uart_port_unlock(&uap->port);
- local_irq_restore(flags);
-
- clk_disable(uap->clk);
diff --git a/debian/patches-rt/0102-printk-Check-printk_deferred_enter-_exit-usage.patch b/debian/patches-rt/0018-printk-Check-printk_deferred_enter-_exit-usage.patch
index 2e1d736ea7..55ecab4cd5 100644
--- a/debian/patches-rt/0102-printk-Check-printk_deferred_enter-_exit-usage.patch
+++ b/debian/patches-rt/0018-printk-Check-printk_deferred_enter-_exit-usage.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri, 22 Sep 2023 14:58:18 +0000
-Subject: [PATCH 102/134] printk: Check printk_deferred_enter()/_exit() usage
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 18/50] printk: Check printk_deferred_enter()/_exit() usage
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Add validation that printk_deferred_enter()/_exit() are called in
non-migration contexts.
diff --git a/debian/patches-rt/0018-serial-apb-Use-port-lock-wrappers.patch b/debian/patches-rt/0018-serial-apb-Use-port-lock-wrappers.patch
deleted file mode 100644
index 4dcf54a895..0000000000
--- a/debian/patches-rt/0018-serial-apb-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:35 +0206
-Subject: [PATCH 018/134] serial: apb: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-19-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/apbuart.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/tty/serial/apbuart.c
-+++ b/drivers/tty/serial/apbuart.c
-@@ -133,7 +133,7 @@ static irqreturn_t apbuart_int(int irq,
- struct uart_port *port = dev_id;
- unsigned int status;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- status = UART_GET_STATUS(port);
- if (status & UART_STATUS_DR)
-@@ -141,7 +141,7 @@ static irqreturn_t apbuart_int(int irq,
- if (status & UART_STATUS_THE)
- apbuart_tx_chars(port);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -228,7 +228,7 @@ static void apbuart_set_termios(struct u
- if (termios->c_cflag & CRTSCTS)
- cr |= UART_CTRL_FL;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Update the per-port timeout. */
- uart_update_timeout(port, termios->c_cflag, baud);
-@@ -251,7 +251,7 @@ static void apbuart_set_termios(struct u
- UART_PUT_SCAL(port, quot);
- UART_PUT_CTRL(port, cr);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *apbuart_type(struct uart_port *port)
diff --git a/debian/patches-rt/0103-printk-nbcon-Implement-processing-in-port-lock-wrapp.patch b/debian/patches-rt/0019-printk-nbcon-Implement-processing-in-port-lock-wrapp.patch
index cee70cb44e..f20a359c21 100644
--- a/debian/patches-rt/0103-printk-nbcon-Implement-processing-in-port-lock-wrapp.patch
+++ b/debian/patches-rt/0019-printk-nbcon-Implement-processing-in-port-lock-wrapp.patch
@@ -1,8 +1,8 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Wed, 13 Sep 2023 08:35:23 +0000
-Subject: [PATCH 103/134] printk: nbcon: Implement processing in port->lock
+Subject: [PATCH 19/50] printk: nbcon: Implement processing in port->lock
wrapper
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Currently the port->lock wrappers uart_port_lock(),
uart_port_unlock() (and their variants) only lock/unlock
@@ -24,7 +24,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/include/linux/console.h
+++ b/include/linux/console.h
-@@ -299,6 +299,7 @@ struct nbcon_write_context {
+@@ -306,6 +306,7 @@ struct nbcon_write_context {
* @nbcon_state: State for nbcon consoles
* @nbcon_seq: Sequence number of the next record for nbcon to print
* @pbufs: Pointer to nbcon private buffer
@@ -32,7 +32,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
*/
struct console {
char name[16];
-@@ -325,6 +326,7 @@ struct console {
+@@ -332,6 +333,7 @@ struct console {
atomic_t __private nbcon_state;
atomic_long_t __private nbcon_seq;
struct printk_buffers *pbufs;
diff --git a/debian/patches-rt/0019-serial-ar933x-Use-port-lock-wrappers.patch b/debian/patches-rt/0019-serial-ar933x-Use-port-lock-wrappers.patch
deleted file mode 100644
index 61a5d3b1a6..0000000000
--- a/debian/patches-rt/0019-serial-ar933x-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:36 +0206
-Subject: [PATCH 019/134] serial: ar933x: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-20-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/ar933x_uart.c | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
---- a/drivers/tty/serial/ar933x_uart.c
-+++ b/drivers/tty/serial/ar933x_uart.c
-@@ -133,9 +133,9 @@ static unsigned int ar933x_uart_tx_empty
- unsigned long flags;
- unsigned int rdata;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- rdata = ar933x_uart_read(up, AR933X_UART_DATA_REG);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- return (rdata & AR933X_UART_DATA_TX_CSR) ? 0 : TIOCSER_TEMT;
- }
-@@ -220,14 +220,14 @@ static void ar933x_uart_break_ctl(struct
- container_of(port, struct ar933x_uart_port, port);
- unsigned long flags;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- if (break_state == -1)
- ar933x_uart_rmw_set(up, AR933X_UART_CS_REG,
- AR933X_UART_CS_TX_BREAK);
- else
- ar933x_uart_rmw_clear(up, AR933X_UART_CS_REG,
- AR933X_UART_CS_TX_BREAK);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- /*
-@@ -318,7 +318,7 @@ static void ar933x_uart_set_termios(stru
- * Ok, we're now changing the port state. Do it with
- * interrupts disabled.
- */
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- /* disable the UART */
- ar933x_uart_rmw_clear(up, AR933X_UART_CS_REG,
-@@ -352,7 +352,7 @@ static void ar933x_uart_set_termios(stru
- AR933X_UART_CS_IF_MODE_M << AR933X_UART_CS_IF_MODE_S,
- AR933X_UART_CS_IF_MODE_DCE << AR933X_UART_CS_IF_MODE_S);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- if (tty_termios_baud_rate(new))
- tty_termios_encode_baud_rate(new, baud, baud);
-@@ -450,7 +450,7 @@ static irqreturn_t ar933x_uart_interrupt
- if ((status & AR933X_UART_CS_HOST_INT) == 0)
- return IRQ_NONE;
-
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
-
- status = ar933x_uart_read(up, AR933X_UART_INT_REG);
- status &= ar933x_uart_read(up, AR933X_UART_INT_EN_REG);
-@@ -468,7 +468,7 @@ static irqreturn_t ar933x_uart_interrupt
- ar933x_uart_tx_chars(up);
- }
-
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
-
- return IRQ_HANDLED;
- }
-@@ -485,7 +485,7 @@ static int ar933x_uart_startup(struct ua
- if (ret)
- return ret;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- /* Enable HOST interrupts */
- ar933x_uart_rmw_set(up, AR933X_UART_CS_REG,
-@@ -498,7 +498,7 @@ static int ar933x_uart_startup(struct ua
- /* Enable RX interrupts */
- ar933x_uart_start_rx_interrupt(up);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- return 0;
- }
-@@ -632,9 +632,9 @@ static void ar933x_uart_console_write(st
- if (up->port.sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock(&up->port.lock);
-+ locked = uart_port_trylock(&up->port);
- else
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
-
- /*
- * First save the IER then disable the interrupts
-@@ -654,7 +654,7 @@ static void ar933x_uart_console_write(st
- ar933x_uart_write(up, AR933X_UART_INT_REG, AR933X_UART_INT_ALLINTS);
-
- if (locked)
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
-
- local_irq_restore(flags);
- }
diff --git a/debian/patches-rt/0104-printk-nbcon-Add-driver_enter-driver_exit-console-ca.patch b/debian/patches-rt/0020-printk-nbcon-Add-driver_enter-driver_exit-console-ca.patch
index d314cb53d4..04dcbc620a 100644
--- a/debian/patches-rt/0104-printk-nbcon-Add-driver_enter-driver_exit-console-ca.patch
+++ b/debian/patches-rt/0020-printk-nbcon-Add-driver_enter-driver_exit-console-ca.patch
@@ -1,8 +1,8 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Fri, 8 Dec 2023 15:54:27 +0000
-Subject: [PATCH 104/134] printk: nbcon: Add driver_enter/driver_exit console
+Subject: [PATCH 20/50] printk: nbcon: Add driver_enter/driver_exit console
callbacks
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Console drivers need some mechanism to synchronize between "normal
driver activity" and console printing. For uart serial drivers it
@@ -22,7 +22,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/include/linux/console.h
+++ b/include/linux/console.h
-@@ -296,6 +296,8 @@ struct nbcon_write_context {
+@@ -303,6 +303,8 @@ struct nbcon_write_context {
* @node: hlist node for the console list
*
* @write_atomic: Write callback for atomic context
@@ -31,7 +31,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
* @nbcon_state: State for nbcon consoles
* @nbcon_seq: Sequence number of the next record for nbcon to print
* @pbufs: Pointer to nbcon private buffer
-@@ -323,6 +325,8 @@ struct console {
+@@ -330,6 +332,8 @@ struct console {
/* nbcon console specific members */
bool (*write_atomic)(struct console *con,
struct nbcon_write_context *wctxt);
diff --git a/debian/patches-rt/0020-serial-arc_uart-Use-port-lock-wrappers.patch b/debian/patches-rt/0020-serial-arc_uart-Use-port-lock-wrappers.patch
deleted file mode 100644
index bc7be2c4d3..0000000000
--- a/debian/patches-rt/0020-serial-arc_uart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:37 +0206
-Subject: [PATCH 020/134] serial: arc_uart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-21-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/arc_uart.c | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
---- a/drivers/tty/serial/arc_uart.c
-+++ b/drivers/tty/serial/arc_uart.c
-@@ -279,9 +279,9 @@ static irqreturn_t arc_serial_isr(int ir
- if (status & RXIENB) {
-
- /* already in ISR, no need of xx_irqsave */
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- arc_serial_rx_chars(port, status);
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- }
-
- if ((status & TXIENB) && (status & TXEMPTY)) {
-@@ -291,12 +291,12 @@ static irqreturn_t arc_serial_isr(int ir
- */
- UART_TX_IRQ_DISABLE(port);
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- if (!uart_tx_stopped(port))
- arc_serial_tx_chars(port);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- }
-
- return IRQ_HANDLED;
-@@ -366,7 +366,7 @@ arc_serial_set_termios(struct uart_port
- uartl = hw_val & 0xFF;
- uarth = (hw_val >> 8) & 0xFF;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- UART_ALL_IRQ_DISABLE(port);
-
-@@ -391,7 +391,7 @@ arc_serial_set_termios(struct uart_port
-
- uart_update_timeout(port, new->c_cflag, baud);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *arc_serial_type(struct uart_port *port)
-@@ -521,9 +521,9 @@ static void arc_serial_console_write(str
- struct uart_port *port = &arc_uart_ports[co->index].port;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- uart_console_write(port, s, count, arc_serial_console_putchar);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static struct console arc_console = {
diff --git a/debian/patches-rt/0105-printk-Make-console_is_usable-available-to-nbcon.patch b/debian/patches-rt/0021-printk-Make-console_is_usable-available-to-nbcon.patch
index a0bf51492a..c3fecf4e31 100644
--- a/debian/patches-rt/0105-printk-Make-console_is_usable-available-to-nbcon.patch
+++ b/debian/patches-rt/0021-printk-Make-console_is_usable-available-to-nbcon.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Tue, 12 Sep 2023 13:25:41 +0000
-Subject: [PATCH 105/134] printk: Make console_is_usable() available to nbcon
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 21/50] printk: Make console_is_usable() available to nbcon
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Move console_is_usable() as-is into internal.h so that it can
be used by nbcon printing functions as well.
@@ -64,7 +64,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
extern struct printk_buffers printk_shared_pbufs;
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -2695,36 +2695,6 @@ int is_console_locked(void)
+@@ -2702,36 +2702,6 @@ int is_console_locked(void)
}
EXPORT_SYMBOL(is_console_locked);
diff --git a/debian/patches-rt/0021-serial-atmel-Use-port-lock-wrappers.patch b/debian/patches-rt/0021-serial-atmel-Use-port-lock-wrappers.patch
deleted file mode 100644
index ab70954a10..0000000000
--- a/debian/patches-rt/0021-serial-atmel-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,119 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:38 +0206
-Subject: [PATCH 021/134] serial: atmel: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-22-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/atmel_serial.c | 24 ++++++++++++------------
- 1 file changed, 12 insertions(+), 12 deletions(-)
-
---- a/drivers/tty/serial/atmel_serial.c
-+++ b/drivers/tty/serial/atmel_serial.c
-@@ -861,7 +861,7 @@ static void atmel_complete_tx_dma(void *
- struct dma_chan *chan = atmel_port->chan_tx;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- if (chan)
- dmaengine_terminate_all(chan);
-@@ -893,7 +893,7 @@ static void atmel_complete_tx_dma(void *
- atmel_port->tx_done_mask);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void atmel_release_tx_dma(struct uart_port *port)
-@@ -1711,9 +1711,9 @@ static void atmel_tasklet_rx_func(struct
- struct uart_port *port = &atmel_port->uart;
-
- /* The interrupt handler does not take the lock */
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- atmel_port->schedule_rx(port);
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- }
-
- static void atmel_tasklet_tx_func(struct tasklet_struct *t)
-@@ -1723,9 +1723,9 @@ static void atmel_tasklet_tx_func(struct
- struct uart_port *port = &atmel_port->uart;
-
- /* The interrupt handler does not take the lock */
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- atmel_port->schedule_tx(port);
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- }
-
- static void atmel_init_property(struct atmel_uart_port *atmel_port,
-@@ -2175,7 +2175,7 @@ static void atmel_set_termios(struct uar
- } else
- mode |= ATMEL_US_PAR_NONE;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- port->read_status_mask = ATMEL_US_OVRE;
- if (termios->c_iflag & INPCK)
-@@ -2377,22 +2377,22 @@ static void atmel_set_termios(struct uar
- else
- atmel_disable_ms(port);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void atmel_set_ldisc(struct uart_port *port, struct ktermios *termios)
- {
- if (termios->c_line == N_PPS) {
- port->flags |= UPF_HARDPPS_CD;
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- atmel_enable_ms(port);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- } else {
- port->flags &= ~UPF_HARDPPS_CD;
- if (!UART_ENABLE_MS(port, termios->c_cflag)) {
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- atmel_disable_ms(port);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- }
- }
- }
diff --git a/debian/patches-rt/0106-printk-Let-console_is_usable-handle-nbcon.patch b/debian/patches-rt/0022-printk-Let-console_is_usable-handle-nbcon.patch
index 62a776cf2f..3d7364fe69 100644
--- a/debian/patches-rt/0106-printk-Let-console_is_usable-handle-nbcon.patch
+++ b/debian/patches-rt/0022-printk-Let-console_is_usable-handle-nbcon.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Tue, 12 Sep 2023 13:53:21 +0000
-Subject: [PATCH 106/134] printk: Let console_is_usable() handle nbcon
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 22/50] printk: Let console_is_usable() handle nbcon
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The nbcon consoles use a different printing callback. For nbcon
consoles, check for the write_atomic() callback instead of
diff --git a/debian/patches-rt/0022-serial-bcm63xx-uart-Use-port-lock-wrappers.patch b/debian/patches-rt/0022-serial-bcm63xx-uart-Use-port-lock-wrappers.patch
deleted file mode 100644
index 90efec4080..0000000000
--- a/debian/patches-rt/0022-serial-bcm63xx-uart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:39 +0206
-Subject: [PATCH 022/134] serial: bcm63xx-uart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-23-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/bcm63xx_uart.c | 22 +++++++++++-----------
- 1 file changed, 11 insertions(+), 11 deletions(-)
-
---- a/drivers/tty/serial/bcm63xx_uart.c
-+++ b/drivers/tty/serial/bcm63xx_uart.c
-@@ -201,7 +201,7 @@ static void bcm_uart_break_ctl(struct ua
- unsigned long flags;
- unsigned int val;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- val = bcm_uart_readl(port, UART_CTL_REG);
- if (ctl)
-@@ -210,7 +210,7 @@ static void bcm_uart_break_ctl(struct ua
- val &= ~UART_CTL_XMITBRK_MASK;
- bcm_uart_writel(port, val, UART_CTL_REG);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /*
-@@ -332,7 +332,7 @@ static irqreturn_t bcm_uart_interrupt(in
- unsigned int irqstat;
-
- port = dev_id;
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- irqstat = bcm_uart_readl(port, UART_IR_REG);
- if (irqstat & UART_RX_INT_STAT)
-@@ -353,7 +353,7 @@ static irqreturn_t bcm_uart_interrupt(in
- estat & UART_EXTINP_DCD_MASK);
- }
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- return IRQ_HANDLED;
- }
-
-@@ -451,9 +451,9 @@ static void bcm_uart_shutdown(struct uar
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- bcm_uart_writel(port, 0, UART_IR_REG);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- bcm_uart_disable(port);
- bcm_uart_flush(port);
-@@ -470,7 +470,7 @@ static void bcm_uart_set_termios(struct
- unsigned long flags;
- int tries;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Drain the hot tub fully before we power it off for the winter. */
- for (tries = 3; !bcm_uart_tx_empty(port) && tries; tries--)
-@@ -546,7 +546,7 @@ static void bcm_uart_set_termios(struct
-
- uart_update_timeout(port, new->c_cflag, baud);
- bcm_uart_enable(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /*
-@@ -712,9 +712,9 @@ static void bcm_console_write(struct con
- /* bcm_uart_interrupt() already took the lock */
- locked = 0;
- } else if (oops_in_progress) {
-- locked = spin_trylock(&port->lock);
-+ locked = uart_port_trylock(port);
- } else {
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- locked = 1;
- }
-
-@@ -725,7 +725,7 @@ static void bcm_console_write(struct con
- wait_for_xmitr(port);
-
- if (locked)
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- local_irq_restore(flags);
- }
-
diff --git a/debian/patches-rt/0107-printk-Add-flags-argument-for-console_is_usable.patch b/debian/patches-rt/0023-printk-Add-flags-argument-for-console_is_usable.patch
index e8c4b4a739..12fff9afb9 100644
--- a/debian/patches-rt/0107-printk-Add-flags-argument-for-console_is_usable.patch
+++ b/debian/patches-rt/0023-printk-Add-flags-argument-for-console_is_usable.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Tue, 12 Sep 2023 13:45:33 +0000
-Subject: [PATCH 107/134] printk: Add @flags argument for console_is_usable()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 23/50] printk: Add @flags argument for console_is_usable()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The caller of console_is_usable() usually needs @console->flags
for its own checks. Rather than having console_is_usable() read
@@ -44,7 +44,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -2940,9 +2940,10 @@ static bool console_flush_all(bool do_co
+@@ -2947,9 +2947,10 @@ static bool console_flush_all(bool do_co
cookie = console_srcu_read_lock();
for_each_console_srcu(con) {
@@ -56,7 +56,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
continue;
any_usable = true;
-@@ -3784,7 +3785,7 @@ static bool __pr_flush(struct console *c
+@@ -3791,7 +3792,7 @@ static bool __pr_flush(struct console *c
* that they make forward progress, so only increment
* @diff for usable consoles.
*/
diff --git a/debian/patches-rt/0023-serial-cpm_uart-Use-port-lock-wrappers.patch b/debian/patches-rt/0023-serial-cpm_uart-Use-port-lock-wrappers.patch
deleted file mode 100644
index c3400eac99..0000000000
--- a/debian/patches-rt/0023-serial-cpm_uart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:40 +0206
-Subject: [PATCH 023/134] serial: cpm_uart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-24-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/cpm_uart.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/tty/serial/cpm_uart.c
-+++ b/drivers/tty/serial/cpm_uart.c
-@@ -569,7 +569,7 @@ static void cpm_uart_set_termios(struct
- if ((termios->c_cflag & CREAD) == 0)
- port->read_status_mask &= ~BD_SC_EMPTY;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- if (IS_SMC(pinfo)) {
- unsigned int bits = tty_get_frame_size(termios->c_cflag);
-@@ -609,7 +609,7 @@ static void cpm_uart_set_termios(struct
- clk_set_rate(pinfo->clk, baud);
- else
- cpm_setbrg(pinfo->brg - 1, baud);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *cpm_uart_type(struct uart_port *port)
-@@ -1386,9 +1386,9 @@ static void cpm_uart_console_write(struc
- cpm_uart_early_write(pinfo, s, count, true);
- local_irq_restore(flags);
- } else {
-- spin_lock_irqsave(&pinfo->port.lock, flags);
-+ uart_port_lock_irqsave(&pinfo->port, &flags);
- cpm_uart_early_write(pinfo, s, count, true);
-- spin_unlock_irqrestore(&pinfo->port.lock, flags);
-+ uart_port_unlock_irqrestore(&pinfo->port, flags);
- }
- }
-
diff --git a/debian/patches-rt/0108-printk-nbcon-Provide-function-to-flush-using-write_a.patch b/debian/patches-rt/0024-printk-nbcon-Provide-function-to-flush-using-write_a.patch
index 14933eef67..9f8a3e3765 100644
--- a/debian/patches-rt/0108-printk-nbcon-Provide-function-to-flush-using-write_a.patch
+++ b/debian/patches-rt/0024-printk-nbcon-Provide-function-to-flush-using-write_a.patch
@@ -1,8 +1,8 @@
From: Thomas Gleixner <tglx@linutronix.de>
Date: Tue, 12 Sep 2023 12:00:08 +0000
-Subject: [PATCH 108/134] printk: nbcon: Provide function to flush using
+Subject: [PATCH 24/50] printk: nbcon: Provide function to flush using
write_atomic()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Provide nbcon_atomic_flush_all() to perform flushing of all
registered nbcon consoles using their write_atomic() callback.
@@ -175,7 +175,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
*
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -3170,6 +3170,8 @@ void console_flush_on_panic(enum con_flu
+@@ -3177,6 +3177,8 @@ void console_flush_on_panic(enum con_flu
console_srcu_read_unlock(cookie);
}
diff --git a/debian/patches-rt/0024-serial-digicolor-Use-port-lock-wrappers.patch b/debian/patches-rt/0024-serial-digicolor-Use-port-lock-wrappers.patch
deleted file mode 100644
index 2a3aa5c9a5..0000000000
--- a/debian/patches-rt/0024-serial-digicolor-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:41 +0206
-Subject: [PATCH 024/134] serial: digicolor: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Acked-by: Baruch Siach <baruch@tkos.co.il>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-25-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/digicolor-usart.c | 18 +++++++++---------
- 1 file changed, 9 insertions(+), 9 deletions(-)
-
---- a/drivers/tty/serial/digicolor-usart.c
-+++ b/drivers/tty/serial/digicolor-usart.c
-@@ -133,7 +133,7 @@ static void digicolor_uart_rx(struct uar
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- while (1) {
- u8 status, ch, ch_flag;
-@@ -172,7 +172,7 @@ static void digicolor_uart_rx(struct uar
- ch_flag);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- tty_flip_buffer_push(&port->state->port);
- }
-@@ -185,7 +185,7 @@ static void digicolor_uart_tx(struct uar
- if (digicolor_uart_tx_full(port))
- return;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- if (port->x_char) {
- writeb_relaxed(port->x_char, port->membase + UA_EMI_REC);
-@@ -211,7 +211,7 @@ static void digicolor_uart_tx(struct uar
- uart_write_wakeup(port);
-
- out:
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static irqreturn_t digicolor_uart_int(int irq, void *dev_id)
-@@ -333,7 +333,7 @@ static void digicolor_uart_set_termios(s
- port->ignore_status_mask |= UA_STATUS_OVERRUN_ERR
- | UA_STATUS_PARITY_ERR | UA_STATUS_FRAME_ERR;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- uart_update_timeout(port, termios->c_cflag, baud);
-
-@@ -341,7 +341,7 @@ static void digicolor_uart_set_termios(s
- writeb_relaxed(divisor & 0xff, port->membase + UA_HBAUD_LO);
- writeb_relaxed(divisor >> 8, port->membase + UA_HBAUD_HI);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *digicolor_uart_type(struct uart_port *port)
-@@ -398,14 +398,14 @@ static void digicolor_uart_console_write
- int locked = 1;
-
- if (oops_in_progress)
-- locked = spin_trylock_irqsave(&port->lock, flags);
-+ locked = uart_port_trylock_irqsave(port, &flags);
- else
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- uart_console_write(port, c, n, digicolor_uart_console_putchar);
-
- if (locked)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- /* Wait for transmitter to become empty */
- do {
diff --git a/debian/patches-rt/0109-printk-Track-registered-boot-consoles.patch b/debian/patches-rt/0025-printk-Track-registered-boot-consoles.patch
index 51b866f20f..5c35ea115c 100644
--- a/debian/patches-rt/0109-printk-Track-registered-boot-consoles.patch
+++ b/debian/patches-rt/0025-printk-Track-registered-boot-consoles.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Tue, 24 Oct 2023 14:13:14 +0000
-Subject: [PATCH 109/134] printk: Track registered boot consoles
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 25/50] printk: Track registered boot consoles
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Unfortunately it is not known if a boot console and a regular
(legacy or nbcon) console use the same hardware. For this reason
@@ -39,7 +39,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
#ifdef CONFIG_PRINTK
DECLARE_WAIT_QUEUE_HEAD(log_wait);
/* All 3 protected by @syslog_lock. */
-@@ -3500,6 +3508,9 @@ void register_console(struct console *ne
+@@ -3507,6 +3515,9 @@ void register_console(struct console *ne
if (newcon->flags & CON_NBCON)
nbcon_init(newcon);
@@ -49,7 +49,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/*
* Put this console in the list - keep the
* preferred driver at the head of the list.
-@@ -3552,6 +3563,8 @@ EXPORT_SYMBOL(register_console);
+@@ -3559,6 +3570,8 @@ EXPORT_SYMBOL(register_console);
/* Must be called under console_list_lock(). */
static int unregister_console_locked(struct console *console)
{
@@ -58,7 +58,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
int res;
lockdep_assert_console_list_lock_held();
-@@ -3599,6 +3612,17 @@ static int unregister_console_locked(str
+@@ -3606,6 +3619,17 @@ static int unregister_console_locked(str
if (console->exit)
res = console->exit(console);
diff --git a/debian/patches-rt/0025-serial-dz-Use-port-lock-wrappers.patch b/debian/patches-rt/0025-serial-dz-Use-port-lock-wrappers.patch
deleted file mode 100644
index 7b3f11604c..0000000000
--- a/debian/patches-rt/0025-serial-dz-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:42 +0206
-Subject: [PATCH 025/134] serial: dz: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-26-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/dz.c | 32 ++++++++++++++++----------------
- 1 file changed, 16 insertions(+), 16 deletions(-)
-
---- a/drivers/tty/serial/dz.c
-+++ b/drivers/tty/serial/dz.c
-@@ -268,9 +268,9 @@ static inline void dz_transmit_chars(str
- }
- /* If nothing to do or stopped or hardware stopped. */
- if (uart_circ_empty(xmit) || uart_tx_stopped(&dport->port)) {
-- spin_lock(&dport->port.lock);
-+ uart_port_lock(&dport->port);
- dz_stop_tx(&dport->port);
-- spin_unlock(&dport->port.lock);
-+ uart_port_unlock(&dport->port);
- return;
- }
-
-@@ -287,9 +287,9 @@ static inline void dz_transmit_chars(str
-
- /* Are we are done. */
- if (uart_circ_empty(xmit)) {
-- spin_lock(&dport->port.lock);
-+ uart_port_lock(&dport->port);
- dz_stop_tx(&dport->port);
-- spin_unlock(&dport->port.lock);
-+ uart_port_unlock(&dport->port);
- }
- }
-
-@@ -415,14 +415,14 @@ static int dz_startup(struct uart_port *
- return ret;
- }
-
-- spin_lock_irqsave(&dport->port.lock, flags);
-+ uart_port_lock_irqsave(&dport->port, &flags);
-
- /* Enable interrupts. */
- tmp = dz_in(dport, DZ_CSR);
- tmp |= DZ_RIE | DZ_TIE;
- dz_out(dport, DZ_CSR, tmp);
-
-- spin_unlock_irqrestore(&dport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&dport->port, flags);
-
- return 0;
- }
-@@ -443,9 +443,9 @@ static void dz_shutdown(struct uart_port
- int irq_guard;
- u16 tmp;
-
-- spin_lock_irqsave(&dport->port.lock, flags);
-+ uart_port_lock_irqsave(&dport->port, &flags);
- dz_stop_tx(&dport->port);
-- spin_unlock_irqrestore(&dport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&dport->port, flags);
-
- irq_guard = atomic_add_return(-1, &mux->irq_guard);
- if (!irq_guard) {
-@@ -491,14 +491,14 @@ static void dz_break_ctl(struct uart_por
- unsigned long flags;
- unsigned short tmp, mask = 1 << dport->port.line;
-
-- spin_lock_irqsave(&uport->lock, flags);
-+ uart_port_lock_irqsave(uport, &flags);
- tmp = dz_in(dport, DZ_TCR);
- if (break_state)
- tmp |= mask;
- else
- tmp &= ~mask;
- dz_out(dport, DZ_TCR, tmp);
-- spin_unlock_irqrestore(&uport->lock, flags);
-+ uart_port_unlock_irqrestore(uport, flags);
- }
-
- static int dz_encode_baud_rate(unsigned int baud)
-@@ -608,7 +608,7 @@ static void dz_set_termios(struct uart_p
- if (termios->c_cflag & CREAD)
- cflag |= DZ_RXENAB;
-
-- spin_lock_irqsave(&dport->port.lock, flags);
-+ uart_port_lock_irqsave(&dport->port, &flags);
-
- uart_update_timeout(uport, termios->c_cflag, baud);
-
-@@ -631,7 +631,7 @@ static void dz_set_termios(struct uart_p
- if (termios->c_iflag & IGNBRK)
- dport->port.ignore_status_mask |= DZ_BREAK;
-
-- spin_unlock_irqrestore(&dport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&dport->port, flags);
- }
-
- /*
-@@ -645,12 +645,12 @@ static void dz_pm(struct uart_port *upor
- struct dz_port *dport = to_dport(uport);
- unsigned long flags;
-
-- spin_lock_irqsave(&dport->port.lock, flags);
-+ uart_port_lock_irqsave(&dport->port, &flags);
- if (state < 3)
- dz_start_tx(&dport->port);
- else
- dz_stop_tx(&dport->port);
-- spin_unlock_irqrestore(&dport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&dport->port, flags);
- }
-
-
-@@ -811,7 +811,7 @@ static void dz_console_putchar(struct ua
- unsigned short csr, tcr, trdy, mask;
- int loops = 10000;
-
-- spin_lock_irqsave(&dport->port.lock, flags);
-+ uart_port_lock_irqsave(&dport->port, &flags);
- csr = dz_in(dport, DZ_CSR);
- dz_out(dport, DZ_CSR, csr & ~DZ_TIE);
- tcr = dz_in(dport, DZ_TCR);
-@@ -819,7 +819,7 @@ static void dz_console_putchar(struct ua
- mask = tcr;
- dz_out(dport, DZ_TCR, mask);
- iob();
-- spin_unlock_irqrestore(&dport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&dport->port, flags);
-
- do {
- trdy = dz_in(dport, DZ_CSR);
diff --git a/debian/patches-rt/0110-printk-nbcon-Use-nbcon-consoles-in-console_flush_all.patch b/debian/patches-rt/0026-printk-nbcon-Use-nbcon-consoles-in-console_flush_all.patch
index b46ecd7655..512310071b 100644
--- a/debian/patches-rt/0110-printk-nbcon-Use-nbcon-consoles-in-console_flush_all.patch
+++ b/debian/patches-rt/0026-printk-nbcon-Use-nbcon-consoles-in-console_flush_all.patch
@@ -1,8 +1,8 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Tue, 19 Sep 2023 14:33:27 +0000
-Subject: [PATCH 110/134] printk: nbcon: Use nbcon consoles in
+Subject: [PATCH 26/50] printk: nbcon: Use nbcon consoles in
console_flush_all()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Allow nbcon consoles to print messages in the printk() caller
context by integrating them into console_flush_all(). The
@@ -118,7 +118,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
* @stop_seq: Flush up until this record
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -1872,7 +1872,7 @@ static bool console_waiter;
+@@ -1871,7 +1871,7 @@ static bool console_waiter;
* there may be a waiter spinning (like a spinlock). Also it must be
* ready to hand over the lock at the end of the section.
*/
@@ -127,7 +127,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
{
/*
* Do not use spinning in panic(). The panic CPU wants to keep the lock.
-@@ -1911,7 +1911,7 @@ static void console_lock_spinning_enable
+@@ -1910,7 +1910,7 @@ static void console_lock_spinning_enable
*
* Return: 1 if the lock rights were passed, 0 otherwise.
*/
@@ -136,7 +136,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
{
int waiter;
-@@ -2949,13 +2949,22 @@ static bool console_flush_all(bool do_co
+@@ -2956,13 +2956,22 @@ static bool console_flush_all(bool do_co
cookie = console_srcu_read_lock();
for_each_console_srcu(con) {
short flags = console_srcu_read_flags(con);
@@ -160,7 +160,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/*
* If a handover has occurred, the SRCU read lock
-@@ -2965,8 +2974,8 @@ static bool console_flush_all(bool do_co
+@@ -2972,8 +2981,8 @@ static bool console_flush_all(bool do_co
return false;
/* Track the next of the highest seq flushed. */
diff --git a/debian/patches-rt/0026-serial-linflexuart-Use-port-lock-wrappers.patch b/debian/patches-rt/0026-serial-linflexuart-Use-port-lock-wrappers.patch
deleted file mode 100644
index e2a3628ae5..0000000000
--- a/debian/patches-rt/0026-serial-linflexuart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:43 +0206
-Subject: [PATCH 026/134] serial: linflexuart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-27-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/fsl_linflexuart.c | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
---- a/drivers/tty/serial/fsl_linflexuart.c
-+++ b/drivers/tty/serial/fsl_linflexuart.c
-@@ -203,7 +203,7 @@ static irqreturn_t linflex_txint(int irq
- struct circ_buf *xmit = &sport->state->xmit;
- unsigned long flags;
-
-- spin_lock_irqsave(&sport->lock, flags);
-+ uart_port_lock_irqsave(sport, &flags);
-
- if (sport->x_char) {
- linflex_put_char(sport, sport->x_char);
-@@ -217,7 +217,7 @@ static irqreturn_t linflex_txint(int irq
-
- linflex_transmit_buffer(sport);
- out:
-- spin_unlock_irqrestore(&sport->lock, flags);
-+ uart_port_unlock_irqrestore(sport, flags);
- return IRQ_HANDLED;
- }
-
-@@ -230,7 +230,7 @@ static irqreturn_t linflex_rxint(int irq
- unsigned char rx;
- bool brk;
-
-- spin_lock_irqsave(&sport->lock, flags);
-+ uart_port_lock_irqsave(sport, &flags);
-
- status = readl(sport->membase + UARTSR);
- while (status & LINFLEXD_UARTSR_RMB) {
-@@ -266,7 +266,7 @@ static irqreturn_t linflex_rxint(int irq
- }
- }
-
-- spin_unlock_irqrestore(&sport->lock, flags);
-+ uart_port_unlock_irqrestore(sport, flags);
-
- tty_flip_buffer_push(port);
-
-@@ -369,11 +369,11 @@ static int linflex_startup(struct uart_p
- int ret = 0;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- linflex_setup_watermark(port);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- ret = devm_request_irq(port->dev, port->irq, linflex_int, 0,
- DRIVER_NAME, port);
-@@ -386,14 +386,14 @@ static void linflex_shutdown(struct uart
- unsigned long ier;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* disable interrupts */
- ier = readl(port->membase + LINIER);
- ier &= ~(LINFLEXD_LINIER_DRIE | LINFLEXD_LINIER_DTIE);
- writel(ier, port->membase + LINIER);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- devm_free_irq(port->dev, port->irq, port);
- }
-@@ -474,7 +474,7 @@ linflex_set_termios(struct uart_port *po
- cr &= ~LINFLEXD_UARTCR_PCE;
- }
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- port->read_status_mask = 0;
-
-@@ -507,7 +507,7 @@ linflex_set_termios(struct uart_port *po
-
- writel(cr1, port->membase + LINCR1);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *linflex_type(struct uart_port *port)
-@@ -646,14 +646,14 @@ linflex_console_write(struct console *co
- if (sport->sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock_irqsave(&sport->lock, flags);
-+ locked = uart_port_trylock_irqsave(sport, &flags);
- else
-- spin_lock_irqsave(&sport->lock, flags);
-+ uart_port_lock_irqsave(sport, &flags);
-
- linflex_string_write(sport, s, count);
-
- if (locked)
-- spin_unlock_irqrestore(&sport->lock, flags);
-+ uart_port_unlock_irqrestore(sport, flags);
- }
-
- /*
diff --git a/debian/patches-rt/0111-printk-nbcon-Assign-priority-based-on-CPU-state.patch b/debian/patches-rt/0027-printk-nbcon-Assign-priority-based-on-CPU-state.patch
index 7e826c3e49..0c7282fce7 100644
--- a/debian/patches-rt/0111-printk-nbcon-Assign-priority-based-on-CPU-state.patch
+++ b/debian/patches-rt/0027-printk-nbcon-Assign-priority-based-on-CPU-state.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Thu, 14 Dec 2023 14:38:42 +0000
-Subject: [PATCH 111/134] printk: nbcon: Assign priority based on CPU state
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 27/50] printk: nbcon: Assign priority based on CPU state
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Use the current state of the CPU to determine which priority to
assign to the printing context.
diff --git a/debian/patches-rt/0027-serial-fsl_lpuart-Use-port-lock-wrappers.patch b/debian/patches-rt/0027-serial-fsl_lpuart-Use-port-lock-wrappers.patch
deleted file mode 100644
index f1475a5ffd..0000000000
--- a/debian/patches-rt/0027-serial-fsl_lpuart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,389 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:44 +0206
-Subject: [PATCH 027/134] serial: fsl_lpuart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-28-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/fsl_lpuart.c | 88 ++++++++++++++++++++--------------------
- 1 file changed, 44 insertions(+), 44 deletions(-)
-
---- a/drivers/tty/serial/fsl_lpuart.c
-+++ b/drivers/tty/serial/fsl_lpuart.c
-@@ -532,9 +532,9 @@ static void lpuart_dma_tx_complete(void
- struct dma_chan *chan = sport->dma_tx_chan;
- unsigned long flags;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- if (!sport->dma_tx_in_progress) {
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- return;
- }
-
-@@ -543,7 +543,7 @@ static void lpuart_dma_tx_complete(void
-
- uart_xmit_advance(&sport->port, sport->dma_tx_bytes);
- sport->dma_tx_in_progress = false;
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
- uart_write_wakeup(&sport->port);
-@@ -553,12 +553,12 @@ static void lpuart_dma_tx_complete(void
- return;
- }
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- if (!lpuart_stopped_or_empty(&sport->port))
- lpuart_dma_tx(sport);
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- static dma_addr_t lpuart_dma_datareg_addr(struct lpuart_port *sport)
-@@ -651,7 +651,7 @@ static int lpuart_poll_init(struct uart_
-
- sport->port.fifosize = 0;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- /* Disable Rx & Tx */
- writeb(0, sport->port.membase + UARTCR2);
-
-@@ -675,7 +675,7 @@ static int lpuart_poll_init(struct uart_
-
- /* Enable Rx and Tx */
- writeb(UARTCR2_RE | UARTCR2_TE, sport->port.membase + UARTCR2);
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- return 0;
- }
-@@ -703,7 +703,7 @@ static int lpuart32_poll_init(struct uar
-
- sport->port.fifosize = 0;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- /* Disable Rx & Tx */
- lpuart32_write(&sport->port, 0, UARTCTRL);
-@@ -724,7 +724,7 @@ static int lpuart32_poll_init(struct uar
-
- /* Enable Rx and Tx */
- lpuart32_write(&sport->port, UARTCTRL_RE | UARTCTRL_TE, UARTCTRL);
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- return 0;
- }
-@@ -879,9 +879,9 @@ static unsigned int lpuart32_tx_empty(st
-
- static void lpuart_txint(struct lpuart_port *sport)
- {
-- spin_lock(&sport->port.lock);
-+ uart_port_lock(&sport->port);
- lpuart_transmit_buffer(sport);
-- spin_unlock(&sport->port.lock);
-+ uart_port_unlock(&sport->port);
- }
-
- static void lpuart_rxint(struct lpuart_port *sport)
-@@ -890,7 +890,7 @@ static void lpuart_rxint(struct lpuart_p
- struct tty_port *port = &sport->port.state->port;
- unsigned char rx, sr;
-
-- spin_lock(&sport->port.lock);
-+ uart_port_lock(&sport->port);
-
- while (!(readb(sport->port.membase + UARTSFIFO) & UARTSFIFO_RXEMPT)) {
- flg = TTY_NORMAL;
-@@ -956,9 +956,9 @@ static void lpuart_rxint(struct lpuart_p
-
- static void lpuart32_txint(struct lpuart_port *sport)
- {
-- spin_lock(&sport->port.lock);
-+ uart_port_lock(&sport->port);
- lpuart32_transmit_buffer(sport);
-- spin_unlock(&sport->port.lock);
-+ uart_port_unlock(&sport->port);
- }
-
- static void lpuart32_rxint(struct lpuart_port *sport)
-@@ -968,7 +968,7 @@ static void lpuart32_rxint(struct lpuart
- unsigned long rx, sr;
- bool is_break;
-
-- spin_lock(&sport->port.lock);
-+ uart_port_lock(&sport->port);
-
- while (!(lpuart32_read(&sport->port, UARTFIFO) & UARTFIFO_RXEMPT)) {
- flg = TTY_NORMAL;
-@@ -1170,12 +1170,12 @@ static void lpuart_copy_rx_to_tty(struct
-
- async_tx_ack(sport->dma_rx_desc);
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- dmastat = dmaengine_tx_status(chan, sport->dma_rx_cookie, &state);
- if (dmastat == DMA_ERROR) {
- dev_err(sport->port.dev, "Rx DMA transfer failed!\n");
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- return;
- }
-
-@@ -1244,7 +1244,7 @@ static void lpuart_copy_rx_to_tty(struct
- dma_sync_sg_for_device(chan->device->dev, &sport->rx_sgl, 1,
- DMA_FROM_DEVICE);
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- tty_flip_buffer_push(port);
- if (!sport->dma_idle_int)
-@@ -1335,9 +1335,9 @@ static void lpuart_timer_func(struct tim
- mod_timer(&sport->lpuart_timer,
- jiffies + sport->dma_rx_timeout);
-
-- if (spin_trylock_irqsave(&sport->port.lock, flags)) {
-+ if (uart_port_trylock_irqsave(&sport->port, &flags)) {
- sport->last_residue = state.residue;
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
- }
-
-@@ -1802,14 +1802,14 @@ static void lpuart_hw_setup(struct lpuar
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- lpuart_setup_watermark_enable(sport);
-
- lpuart_rx_dma_startup(sport);
- lpuart_tx_dma_startup(sport);
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- static int lpuart_startup(struct uart_port *port)
-@@ -1859,7 +1859,7 @@ static void lpuart32_hw_setup(struct lpu
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- lpuart32_hw_disable(sport);
-
-@@ -1869,7 +1869,7 @@ static void lpuart32_hw_setup(struct lpu
- lpuart32_setup_watermark_enable(sport);
- lpuart32_configure(sport);
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- static int lpuart32_startup(struct uart_port *port)
-@@ -1932,7 +1932,7 @@ static void lpuart_shutdown(struct uart_
- unsigned char temp;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* disable Rx/Tx and interrupts */
- temp = readb(port->membase + UARTCR2);
-@@ -1940,7 +1940,7 @@ static void lpuart_shutdown(struct uart_
- UARTCR2_TIE | UARTCR2_TCIE | UARTCR2_RIE);
- writeb(temp, port->membase + UARTCR2);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- lpuart_dma_shutdown(sport);
- }
-@@ -1952,7 +1952,7 @@ static void lpuart32_shutdown(struct uar
- unsigned long temp;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* clear status */
- temp = lpuart32_read(&sport->port, UARTSTAT);
-@@ -1969,7 +1969,7 @@ static void lpuart32_shutdown(struct uar
- UARTCTRL_TIE | UARTCTRL_TCIE | UARTCTRL_RIE | UARTCTRL_SBK);
- lpuart32_write(port, temp, UARTCTRL);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- lpuart_dma_shutdown(sport);
- }
-@@ -2069,7 +2069,7 @@ lpuart_set_termios(struct uart_port *por
- if (old && sport->lpuart_dma_rx_use)
- lpuart_dma_rx_free(&sport->port);
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- sport->port.read_status_mask = 0;
- if (termios->c_iflag & INPCK)
-@@ -2124,7 +2124,7 @@ lpuart_set_termios(struct uart_port *por
- sport->lpuart_dma_rx_use = false;
- }
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- static void __lpuart32_serial_setbrg(struct uart_port *port,
-@@ -2304,7 +2304,7 @@ lpuart32_set_termios(struct uart_port *p
- if (old && sport->lpuart_dma_rx_use)
- lpuart_dma_rx_free(&sport->port);
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- sport->port.read_status_mask = 0;
- if (termios->c_iflag & INPCK)
-@@ -2359,7 +2359,7 @@ lpuart32_set_termios(struct uart_port *p
- sport->lpuart_dma_rx_use = false;
- }
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- static const char *lpuart_type(struct uart_port *port)
-@@ -2477,9 +2477,9 @@ lpuart_console_write(struct console *co,
- int locked = 1;
-
- if (oops_in_progress)
-- locked = spin_trylock_irqsave(&sport->port.lock, flags);
-+ locked = uart_port_trylock_irqsave(&sport->port, &flags);
- else
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- /* first save CR2 and then disable interrupts */
- cr2 = old_cr2 = readb(sport->port.membase + UARTCR2);
-@@ -2495,7 +2495,7 @@ lpuart_console_write(struct console *co,
- writeb(old_cr2, sport->port.membase + UARTCR2);
-
- if (locked)
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- static void
-@@ -2507,9 +2507,9 @@ lpuart32_console_write(struct console *c
- int locked = 1;
-
- if (oops_in_progress)
-- locked = spin_trylock_irqsave(&sport->port.lock, flags);
-+ locked = uart_port_trylock_irqsave(&sport->port, &flags);
- else
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- /* first save CR2 and then disable interrupts */
- cr = old_cr = lpuart32_read(&sport->port, UARTCTRL);
-@@ -2525,7 +2525,7 @@ lpuart32_console_write(struct console *c
- lpuart32_write(&sport->port, old_cr, UARTCTRL);
-
- if (locked)
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- /*
-@@ -3089,7 +3089,7 @@ static int lpuart_suspend(struct device
- uart_suspend_port(&lpuart_reg, &sport->port);
-
- if (lpuart_uport_is_active(sport)) {
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- if (lpuart_is_32(sport)) {
- /* disable Rx/Tx and interrupts */
- temp = lpuart32_read(&sport->port, UARTCTRL);
-@@ -3101,7 +3101,7 @@ static int lpuart_suspend(struct device
- temp &= ~(UARTCR2_TE | UARTCR2_TIE | UARTCR2_TCIE);
- writeb(temp, sport->port.membase + UARTCR2);
- }
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- if (sport->lpuart_dma_rx_use) {
- /*
-@@ -3114,7 +3114,7 @@ static int lpuart_suspend(struct device
- lpuart_dma_rx_free(&sport->port);
-
- /* Disable Rx DMA to use UART port as wakeup source */
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- if (lpuart_is_32(sport)) {
- temp = lpuart32_read(&sport->port, UARTBAUD);
- lpuart32_write(&sport->port, temp & ~UARTBAUD_RDMAE,
-@@ -3123,11 +3123,11 @@ static int lpuart_suspend(struct device
- writeb(readb(sport->port.membase + UARTCR5) &
- ~UARTCR5_RDMAS, sport->port.membase + UARTCR5);
- }
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- if (sport->lpuart_dma_tx_use) {
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- if (lpuart_is_32(sport)) {
- temp = lpuart32_read(&sport->port, UARTBAUD);
- temp &= ~UARTBAUD_TDMAE;
-@@ -3137,7 +3137,7 @@ static int lpuart_suspend(struct device
- temp &= ~UARTCR5_TDMAS;
- writeb(temp, sport->port.membase + UARTCR5);
- }
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- sport->dma_tx_in_progress = false;
- dmaengine_terminate_sync(sport->dma_tx_chan);
- }
diff --git a/debian/patches-rt/0112-printk-nbcon-Add-unsafe-flushing-on-panic.patch b/debian/patches-rt/0028-printk-nbcon-Add-unsafe-flushing-on-panic.patch
index cc689de08e..2bb67b473b 100644
--- a/debian/patches-rt/0112-printk-nbcon-Add-unsafe-flushing-on-panic.patch
+++ b/debian/patches-rt/0028-printk-nbcon-Add-unsafe-flushing-on-panic.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Fri, 20 Oct 2023 10:03:42 +0000
-Subject: [PATCH 112/134] printk: nbcon: Add unsafe flushing on panic
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 28/50] printk: nbcon: Add unsafe flushing on panic
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Add nbcon_atomic_flush_unsafe() to flush all nbcon consoles
using the write_atomic() callback and allowing unsafe hostile
@@ -44,7 +44,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
#ifdef CONFIG_SMP
--- a/kernel/panic.c
+++ b/kernel/panic.c
-@@ -449,6 +449,7 @@ void panic(const char *fmt, ...)
+@@ -453,6 +453,7 @@ void panic(const char *fmt, ...)
* Explicitly flush the kernel log buffer one last time.
*/
console_flush_on_panic(CONSOLE_FLUSH_PENDING);
diff --git a/debian/patches-rt/0028-serial-icom-Use-port-lock-wrappers.patch b/debian/patches-rt/0028-serial-icom-Use-port-lock-wrappers.patch
deleted file mode 100644
index da765879ce..0000000000
--- a/debian/patches-rt/0028-serial-icom-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:45 +0206
-Subject: [PATCH 028/134] serial: icom: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-29-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/icom.c | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
---- a/drivers/tty/serial/icom.c
-+++ b/drivers/tty/serial/icom.c
-@@ -929,7 +929,7 @@ static inline void check_modem_status(st
- char delta_status;
- unsigned char status;
-
-- spin_lock(&icom_port->uart_port.lock);
-+ uart_port_lock(&icom_port->uart_port);
-
- /*modem input register */
- status = readb(&icom_port->dram->isr);
-@@ -951,7 +951,7 @@ static inline void check_modem_status(st
- port.delta_msr_wait);
- old_status = status;
- }
-- spin_unlock(&icom_port->uart_port.lock);
-+ uart_port_unlock(&icom_port->uart_port);
- }
-
- static void xmit_interrupt(u16 port_int_reg, struct icom_port *icom_port)
-@@ -1093,7 +1093,7 @@ static void process_interrupt(u16 port_i
- struct icom_port *icom_port)
- {
-
-- spin_lock(&icom_port->uart_port.lock);
-+ uart_port_lock(&icom_port->uart_port);
- trace(icom_port, "INTERRUPT", port_int_reg);
-
- if (port_int_reg & (INT_XMIT_COMPLETED | INT_XMIT_DISABLED))
-@@ -1102,7 +1102,7 @@ static void process_interrupt(u16 port_i
- if (port_int_reg & INT_RCV_COMPLETED)
- recv_interrupt(port_int_reg, icom_port);
-
-- spin_unlock(&icom_port->uart_port.lock);
-+ uart_port_unlock(&icom_port->uart_port);
- }
-
- static irqreturn_t icom_interrupt(int irq, void *dev_id)
-@@ -1186,14 +1186,14 @@ static unsigned int icom_tx_empty(struct
- int ret;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (le16_to_cpu(icom_port->statStg->xmit[0].flags) &
- SA_FLAGS_READY_TO_XMIT)
- ret = TIOCSER_TEMT;
- else
- ret = 0;
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- return ret;
- }
-
-@@ -1276,7 +1276,7 @@ static void icom_send_xchar(struct uart_
-
- /* wait .1 sec to send char */
- for (index = 0; index < 10; index++) {
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- xdata = readb(&icom_port->dram->xchar);
- if (xdata == 0x00) {
- trace(icom_port, "QUICK_WRITE", 0);
-@@ -1284,10 +1284,10 @@ static void icom_send_xchar(struct uart_
-
- /* flush write operation */
- xdata = readb(&icom_port->dram->xchar);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- break;
- }
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- msleep(10);
- }
- }
-@@ -1307,7 +1307,7 @@ static void icom_break(struct uart_port
- unsigned char cmdReg;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- trace(icom_port, "BREAK", 0);
- cmdReg = readb(&icom_port->dram->CmdReg);
- if (break_state == -1) {
-@@ -1315,7 +1315,7 @@ static void icom_break(struct uart_port
- } else {
- writeb(cmdReg & ~CMD_SND_BREAK, &icom_port->dram->CmdReg);
- }
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int icom_open(struct uart_port *port)
-@@ -1365,7 +1365,7 @@ static void icom_set_termios(struct uart
- unsigned long offset;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- trace(icom_port, "CHANGE_SPEED", 0);
-
- cflag = termios->c_cflag;
-@@ -1516,7 +1516,7 @@ static void icom_set_termios(struct uart
- trace(icom_port, "XR_ENAB", 0);
- writeb(CMD_XMIT_RCV_ENABLE, &icom_port->dram->CmdReg);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *icom_type(struct uart_port *port)
diff --git a/debian/patches-rt/0113-printk-Avoid-console_lock-dance-if-no-legacy-or-boot.patch b/debian/patches-rt/0029-printk-Avoid-console_lock-dance-if-no-legacy-or-boot.patch
index a733638677..a0be40fe7b 100644
--- a/debian/patches-rt/0113-printk-Avoid-console_lock-dance-if-no-legacy-or-boot.patch
+++ b/debian/patches-rt/0029-printk-Avoid-console_lock-dance-if-no-legacy-or-boot.patch
@@ -1,8 +1,8 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Tue, 26 Sep 2023 12:44:07 +0000
-Subject: [PATCH 113/134] printk: Avoid console_lock dance if no legacy or boot
+Subject: [PATCH 29/50] printk: Avoid console_lock dance if no legacy or boot
consoles
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Currently the console lock is used to attempt legacy-type
printing even if there are no legacy or boot consoles registered.
@@ -69,7 +69,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
* Specifies if a boot console is registered. If boot consoles are present,
* nbcon consoles cannot print simultaneously and must be synchronized by
* the console lock. This is because boot consoles and nbcon consoles may
-@@ -2345,7 +2352,7 @@ asmlinkage int vprintk_emit(int facility
+@@ -2344,7 +2351,7 @@ asmlinkage int vprintk_emit(int facility
printed_len = vprintk_store(facility, level, dev_info, fmt, args);
/* If called from the scheduler, we can not call up(). */
@@ -78,7 +78,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/*
* The caller may be holding system-critical or
* timing-sensitive locks. Disable preemption during
-@@ -2646,7 +2653,7 @@ void resume_console(void)
+@@ -2653,7 +2660,7 @@ void resume_console(void)
*/
static int console_cpu_notify(unsigned int cpu)
{
@@ -87,7 +87,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/* If trylock fails, someone else is doing the printing */
if (console_trylock())
console_unlock();
-@@ -3189,7 +3196,8 @@ void console_flush_on_panic(enum con_flu
+@@ -3196,7 +3203,8 @@ void console_flush_on_panic(enum con_flu
nbcon_atomic_flush_all();
@@ -97,7 +97,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
/*
-@@ -3514,8 +3522,11 @@ void register_console(struct console *ne
+@@ -3521,8 +3529,11 @@ void register_console(struct console *ne
newcon->dropped = 0;
console_init_seq(newcon, bootcon_registered);
@@ -110,7 +110,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
if (newcon->flags & CON_BOOT)
have_boot_console = true;
-@@ -3572,6 +3583,7 @@ EXPORT_SYMBOL(register_console);
+@@ -3579,6 +3590,7 @@ EXPORT_SYMBOL(register_console);
/* Must be called under console_list_lock(). */
static int unregister_console_locked(struct console *console)
{
@@ -118,7 +118,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
bool found_boot_con = false;
struct console *c;
int res;
-@@ -3628,9 +3640,13 @@ static int unregister_console_locked(str
+@@ -3635,9 +3647,13 @@ static int unregister_console_locked(str
for_each_console(c) {
if (c->flags & CON_BOOT)
found_boot_con = true;
@@ -132,7 +132,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
return res;
}
-@@ -3782,6 +3798,7 @@ static bool __pr_flush(struct console *c
+@@ -3789,6 +3805,7 @@ static bool __pr_flush(struct console *c
u64 last_diff = 0;
u64 printk_seq;
short flags;
@@ -140,7 +140,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
int cookie;
u64 diff;
u64 seq;
-@@ -3791,22 +3808,28 @@ static bool __pr_flush(struct console *c
+@@ -3798,22 +3815,28 @@ static bool __pr_flush(struct console *c
seq = prb_next_reserve_seq(prb);
/* Flush the consoles so that records up to @seq are printed. */
@@ -178,7 +178,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
cookie = console_srcu_read_lock();
for_each_console_srcu(c) {
-@@ -3826,6 +3849,7 @@ static bool __pr_flush(struct console *c
+@@ -3833,6 +3856,7 @@ static bool __pr_flush(struct console *c
if (flags & CON_NBCON) {
printk_seq = nbcon_seq_read(c);
} else {
@@ -186,7 +186,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
printk_seq = c->seq;
}
-@@ -3837,7 +3861,8 @@ static bool __pr_flush(struct console *c
+@@ -3844,7 +3868,8 @@ static bool __pr_flush(struct console *c
if (diff != last_diff && reset_on_progress)
remaining_jiffies = timeout_jiffies;
@@ -196,7 +196,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/* Note: @diff is 0 if there are no usable consoles. */
if (diff == 0 || remaining_jiffies == 0)
-@@ -3959,7 +3984,11 @@ void defer_console_output(void)
+@@ -3966,7 +3991,11 @@ void defer_console_output(void)
* New messages may have been added directly to the ringbuffer
* using vprintk_store(), so wake any waiters as well.
*/
diff --git a/debian/patches-rt/0029-serial-imx-Use-port-lock-wrappers.patch b/debian/patches-rt/0029-serial-imx-Use-port-lock-wrappers.patch
deleted file mode 100644
index 24f582ae87..0000000000
--- a/debian/patches-rt/0029-serial-imx-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,354 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:46 +0206
-Subject: [PATCH 029/134] serial: imx: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-30-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/imx.c | 84 +++++++++++++++++++++++------------------------
- 1 file changed, 42 insertions(+), 42 deletions(-)
-
---- a/drivers/tty/serial/imx.c
-+++ b/drivers/tty/serial/imx.c
-@@ -575,7 +575,7 @@ static void imx_uart_dma_tx_callback(voi
- unsigned long flags;
- u32 ucr1;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE);
-
-@@ -600,7 +600,7 @@ static void imx_uart_dma_tx_callback(voi
- imx_uart_writel(sport, ucr4, UCR4);
- }
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- /* called with port.lock taken and irqs off */
-@@ -766,11 +766,11 @@ static irqreturn_t imx_uart_rtsint(int i
- struct imx_port *sport = dev_id;
- irqreturn_t ret;
-
-- spin_lock(&sport->port.lock);
-+ uart_port_lock(&sport->port);
-
- ret = __imx_uart_rtsint(irq, dev_id);
-
-- spin_unlock(&sport->port.lock);
-+ uart_port_unlock(&sport->port);
-
- return ret;
- }
-@@ -779,9 +779,9 @@ static irqreturn_t imx_uart_txint(int ir
- {
- struct imx_port *sport = dev_id;
-
-- spin_lock(&sport->port.lock);
-+ uart_port_lock(&sport->port);
- imx_uart_transmit_buffer(sport);
-- spin_unlock(&sport->port.lock);
-+ uart_port_unlock(&sport->port);
- return IRQ_HANDLED;
- }
-
-@@ -895,11 +895,11 @@ static irqreturn_t imx_uart_rxint(int ir
- struct imx_port *sport = dev_id;
- irqreturn_t ret;
-
-- spin_lock(&sport->port.lock);
-+ uart_port_lock(&sport->port);
-
- ret = __imx_uart_rxint(irq, dev_id);
-
-- spin_unlock(&sport->port.lock);
-+ uart_port_unlock(&sport->port);
-
- return ret;
- }
-@@ -962,7 +962,7 @@ static irqreturn_t imx_uart_int(int irq,
- unsigned int usr1, usr2, ucr1, ucr2, ucr3, ucr4;
- irqreturn_t ret = IRQ_NONE;
-
-- spin_lock(&sport->port.lock);
-+ uart_port_lock(&sport->port);
-
- usr1 = imx_uart_readl(sport, USR1);
- usr2 = imx_uart_readl(sport, USR2);
-@@ -1032,7 +1032,7 @@ static irqreturn_t imx_uart_int(int irq,
- ret = IRQ_HANDLED;
- }
-
-- spin_unlock(&sport->port.lock);
-+ uart_port_unlock(&sport->port);
-
- return ret;
- }
-@@ -1115,7 +1115,7 @@ static void imx_uart_break_ctl(struct ua
- unsigned long flags;
- u32 ucr1;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- ucr1 = imx_uart_readl(sport, UCR1) & ~UCR1_SNDBRK;
-
-@@ -1124,7 +1124,7 @@ static void imx_uart_break_ctl(struct ua
-
- imx_uart_writel(sport, ucr1, UCR1);
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- /*
-@@ -1137,9 +1137,9 @@ static void imx_uart_timeout(struct time
- unsigned long flags;
-
- if (sport->port.state) {
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- imx_uart_mctrl_check(sport);
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- mod_timer(&sport->timer, jiffies + MCTRL_TIMEOUT);
- }
-@@ -1169,9 +1169,9 @@ static void imx_uart_dma_rx_callback(voi
- status = dmaengine_tx_status(chan, sport->rx_cookie, &state);
-
- if (status == DMA_ERROR) {
-- spin_lock(&sport->port.lock);
-+ uart_port_lock(&sport->port);
- imx_uart_clear_rx_errors(sport);
-- spin_unlock(&sport->port.lock);
-+ uart_port_unlock(&sport->port);
- return;
- }
-
-@@ -1200,9 +1200,9 @@ static void imx_uart_dma_rx_callback(voi
- r_bytes = rx_ring->head - rx_ring->tail;
-
- /* If we received something, check for 0xff flood */
-- spin_lock(&sport->port.lock);
-+ uart_port_lock(&sport->port);
- imx_uart_check_flood(sport, imx_uart_readl(sport, USR2));
-- spin_unlock(&sport->port.lock);
-+ uart_port_unlock(&sport->port);
-
- if (!(sport->port.ignore_status_mask & URXD_DUMMY_READ)) {
-
-@@ -1460,7 +1460,7 @@ static int imx_uart_startup(struct uart_
- if (!uart_console(port) && imx_uart_dma_init(sport) == 0)
- dma_is_inited = 1;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- /* Reset fifo's and state machines */
- imx_uart_soft_reset(sport);
-@@ -1533,7 +1533,7 @@ static int imx_uart_startup(struct uart_
-
- imx_uart_disable_loopback_rs485(sport);
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- return 0;
- }
-@@ -1558,21 +1558,21 @@ static void imx_uart_shutdown(struct uar
- sport->dma_is_rxing = 0;
- }
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- imx_uart_stop_tx(port);
- imx_uart_stop_rx(port);
- imx_uart_disable_dma(sport);
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- imx_uart_dma_exit(sport);
- }
-
- mctrl_gpio_disable_ms(sport->gpios);
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- ucr2 = imx_uart_readl(sport, UCR2);
- ucr2 &= ~(UCR2_TXEN | UCR2_ATEN);
- imx_uart_writel(sport, ucr2, UCR2);
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- /*
- * Stop our timer.
-@@ -1583,7 +1583,7 @@ static void imx_uart_shutdown(struct uar
- * Disable all interrupts, port and break condition.
- */
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- ucr1 = imx_uart_readl(sport, UCR1);
- ucr1 &= ~(UCR1_TRDYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_RXDMAEN |
-@@ -1605,7 +1605,7 @@ static void imx_uart_shutdown(struct uar
- ucr4 &= ~UCR4_TCEN;
- imx_uart_writel(sport, ucr4, UCR4);
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- clk_disable_unprepare(sport->clk_per);
- clk_disable_unprepare(sport->clk_ipg);
-@@ -1668,7 +1668,7 @@ imx_uart_set_termios(struct uart_port *p
- baud = uart_get_baud_rate(port, termios, old, 50, port->uartclk / 16);
- quot = uart_get_divisor(port, baud);
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- /*
- * Read current UCR2 and save it for future use, then clear all the bits
-@@ -1796,7 +1796,7 @@ imx_uart_set_termios(struct uart_port *p
- if (UART_ENABLE_MS(&sport->port, termios->c_cflag))
- imx_uart_enable_ms(&sport->port);
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- static const char *imx_uart_type(struct uart_port *port)
-@@ -1858,7 +1858,7 @@ static int imx_uart_poll_init(struct uar
-
- imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- /*
- * Be careful about the order of enabling bits here. First enable the
-@@ -1886,7 +1886,7 @@ static int imx_uart_poll_init(struct uar
- imx_uart_writel(sport, ucr1 | UCR1_RRDYEN, UCR1);
- imx_uart_writel(sport, ucr2 | UCR2_ATEN, UCR2);
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- return 0;
- }
-@@ -2005,9 +2005,9 @@ imx_uart_console_write(struct console *c
- if (sport->port.sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock_irqsave(&sport->port.lock, flags);
-+ locked = uart_port_trylock_irqsave(&sport->port, &flags);
- else
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- /*
- * First, save UCR1/2/3 and then disable interrupts
-@@ -2035,7 +2035,7 @@ imx_uart_console_write(struct console *c
- imx_uart_ucrs_restore(sport, &old_ucr);
-
- if (locked)
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- /*
-@@ -2193,10 +2193,10 @@ static enum hrtimer_restart imx_trigger_
- struct imx_port *sport = container_of(t, struct imx_port, trigger_start_tx);
- unsigned long flags;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- if (sport->tx_state == WAIT_AFTER_RTS)
- imx_uart_start_tx(&sport->port);
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- return HRTIMER_NORESTART;
- }
-@@ -2206,10 +2206,10 @@ static enum hrtimer_restart imx_trigger_
- struct imx_port *sport = container_of(t, struct imx_port, trigger_stop_tx);
- unsigned long flags;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- if (sport->tx_state == WAIT_AFTER_SEND)
- imx_uart_stop_tx(&sport->port);
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- return HRTIMER_NORESTART;
- }
-@@ -2482,9 +2482,9 @@ static void imx_uart_restore_context(str
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- if (!sport->context_saved) {
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- return;
- }
-
-@@ -2499,7 +2499,7 @@ static void imx_uart_restore_context(str
- imx_uart_writel(sport, sport->saved_reg[2], UCR3);
- imx_uart_writel(sport, sport->saved_reg[3], UCR4);
- sport->context_saved = false;
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- static void imx_uart_save_context(struct imx_port *sport)
-@@ -2507,7 +2507,7 @@ static void imx_uart_save_context(struct
- unsigned long flags;
-
- /* Save necessary regs */
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- sport->saved_reg[0] = imx_uart_readl(sport, UCR1);
- sport->saved_reg[1] = imx_uart_readl(sport, UCR2);
- sport->saved_reg[2] = imx_uart_readl(sport, UCR3);
-@@ -2519,7 +2519,7 @@ static void imx_uart_save_context(struct
- sport->saved_reg[8] = imx_uart_readl(sport, UBMR);
- sport->saved_reg[9] = imx_uart_readl(sport, IMX21_UTS);
- sport->context_saved = true;
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- static void imx_uart_enable_wakeup(struct imx_port *sport, bool on)
diff --git a/debian/patches-rt/0114-printk-Track-nbcon-consoles.patch b/debian/patches-rt/0030-printk-Track-nbcon-consoles.patch
index fb85c5bbb5..ec363c95d7 100644
--- a/debian/patches-rt/0114-printk-Track-nbcon-consoles.patch
+++ b/debian/patches-rt/0030-printk-Track-nbcon-consoles.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 11 Dec 2023 09:36:52 +0000
-Subject: [PATCH 114/134] printk: Track nbcon consoles
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 30/50] printk: Track nbcon consoles
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Add a global flag @have_nbcon_console to identify if any nbcon
consoles are registered. This will be used in follow-up commits
@@ -29,7 +29,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
* Specifies if a boot console is registered. If boot consoles are present,
* nbcon consoles cannot print simultaneously and must be synchronized by
* the console lock. This is because boot consoles and nbcon consoles may
-@@ -3523,6 +3530,7 @@ void register_console(struct console *ne
+@@ -3530,6 +3537,7 @@ void register_console(struct console *ne
console_init_seq(newcon, bootcon_registered);
if (newcon->flags & CON_NBCON) {
@@ -37,7 +37,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
nbcon_init(newcon);
} else {
have_legacy_console = true;
-@@ -3584,6 +3592,7 @@ EXPORT_SYMBOL(register_console);
+@@ -3591,6 +3599,7 @@ EXPORT_SYMBOL(register_console);
static int unregister_console_locked(struct console *console)
{
bool found_legacy_con = false;
@@ -45,7 +45,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
bool found_boot_con = false;
struct console *c;
int res;
-@@ -3640,13 +3649,18 @@ static int unregister_console_locked(str
+@@ -3647,13 +3656,18 @@ static int unregister_console_locked(str
for_each_console(c) {
if (c->flags & CON_BOOT)
found_boot_con = true;
diff --git a/debian/patches-rt/0030-serial-ip22zilog-Use-port-lock-wrappers.patch b/debian/patches-rt/0030-serial-ip22zilog-Use-port-lock-wrappers.patch
deleted file mode 100644
index c1307a246b..0000000000
--- a/debian/patches-rt/0030-serial-ip22zilog-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,185 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:47 +0206
-Subject: [PATCH 030/134] serial: ip22zilog: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-31-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/ip22zilog.c | 36 ++++++++++++++++++------------------
- 1 file changed, 18 insertions(+), 18 deletions(-)
-
---- a/drivers/tty/serial/ip22zilog.c
-+++ b/drivers/tty/serial/ip22zilog.c
-@@ -432,7 +432,7 @@ static irqreturn_t ip22zilog_interrupt(i
- unsigned char r3;
- bool push = false;
-
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
- r3 = read_zsreg(channel, R3);
-
- /* Channel A */
-@@ -448,7 +448,7 @@ static irqreturn_t ip22zilog_interrupt(i
- if (r3 & CHATxIP)
- ip22zilog_transmit_chars(up, channel);
- }
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
-
- if (push)
- tty_flip_buffer_push(&up->port.state->port);
-@@ -458,7 +458,7 @@ static irqreturn_t ip22zilog_interrupt(i
- channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
- push = false;
-
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
- if (r3 & (CHBEXT | CHBTxIP | CHBRxIP)) {
- writeb(RES_H_IUS, &channel->control);
- ZSDELAY();
-@@ -471,7 +471,7 @@ static irqreturn_t ip22zilog_interrupt(i
- if (r3 & CHBTxIP)
- ip22zilog_transmit_chars(up, channel);
- }
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
-
- if (push)
- tty_flip_buffer_push(&up->port.state->port);
-@@ -504,11 +504,11 @@ static unsigned int ip22zilog_tx_empty(s
- unsigned char status;
- unsigned int ret;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- status = ip22zilog_read_channel_status(port);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (status & Tx_BUF_EMP)
- ret = TIOCSER_TEMT;
-@@ -664,7 +664,7 @@ static void ip22zilog_break_ctl(struct u
- else
- clear_bits |= SND_BRK;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- new_reg = (up->curregs[R5] | set_bits) & ~clear_bits;
- if (new_reg != up->curregs[R5]) {
-@@ -674,7 +674,7 @@ static void ip22zilog_break_ctl(struct u
- write_zsreg(channel, R5, up->curregs[R5]);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void __ip22zilog_reset(struct uart_ip22zilog_port *up)
-@@ -735,9 +735,9 @@ static int ip22zilog_startup(struct uart
- if (ZS_IS_CONS(up))
- return 0;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- __ip22zilog_startup(up);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- return 0;
- }
-
-@@ -775,7 +775,7 @@ static void ip22zilog_shutdown(struct ua
- if (ZS_IS_CONS(up))
- return;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- channel = ZILOG_CHANNEL_FROM_PORT(port);
-
-@@ -788,7 +788,7 @@ static void ip22zilog_shutdown(struct ua
- up->curregs[R5] &= ~SND_BRK;
- ip22zilog_maybe_update_regs(up, channel);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /* Shared by TTY driver and serial console setup. The port lock is held
-@@ -880,7 +880,7 @@ ip22zilog_set_termios(struct uart_port *
-
- baud = uart_get_baud_rate(port, termios, old, 1200, 76800);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
-
-@@ -894,7 +894,7 @@ ip22zilog_set_termios(struct uart_port *
- ip22zilog_maybe_update_regs(up, ZILOG_CHANNEL_FROM_PORT(port));
- uart_update_timeout(port, termios->c_cflag, baud);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static const char *ip22zilog_type(struct uart_port *port)
-@@ -1016,10 +1016,10 @@ ip22zilog_console_write(struct console *
- struct uart_ip22zilog_port *up = &ip22zilog_port_table[con->index];
- unsigned long flags;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- uart_console_write(&up->port, s, count, ip22zilog_put_char);
- udelay(2);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static int __init ip22zilog_console_setup(struct console *con, char *options)
-@@ -1034,13 +1034,13 @@ static int __init ip22zilog_console_setu
-
- printk(KERN_INFO "Console: ttyS%d (IP22-Zilog)\n", con->index);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- up->curregs[R15] |= BRKIE;
-
- __ip22zilog_startup(up);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- if (options)
- uart_parse_options(options, &baud, &parity, &bits, &flow);
diff --git a/debian/patches-rt/0115-printk-Coordinate-direct-printing-in-panic.patch b/debian/patches-rt/0031-printk-Coordinate-direct-printing-in-panic.patch
index 972df76688..6f26bf7fc6 100644
--- a/debian/patches-rt/0115-printk-Coordinate-direct-printing-in-panic.patch
+++ b/debian/patches-rt/0031-printk-Coordinate-direct-printing-in-panic.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Wed, 22 Nov 2023 11:56:58 +0000
-Subject: [PATCH 115/134] printk: Coordinate direct printing in panic
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 31/50] printk: Coordinate direct printing in panic
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Perform printing by nbcon consoles on the panic CPU from the
printk() caller context in order to get panic messages printed
@@ -35,7 +35,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+void printk_legacy_allow_panic_sync(void);
--- a/kernel/panic.c
+++ b/kernel/panic.c
-@@ -366,6 +366,8 @@ void panic(const char *fmt, ...)
+@@ -370,6 +370,8 @@ void panic(const char *fmt, ...)
*/
atomic_notifier_call_chain(&panic_notifier_list, 0, buf);
@@ -46,7 +46,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
kmsg_dump(KMSG_DUMP_PANIC);
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -2330,12 +2330,23 @@ int vprintk_store(int facility, int leve
+@@ -2329,12 +2329,23 @@ int vprintk_store(int facility, int leve
return ret;
}
@@ -71,7 +71,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/* Suppress unimportant messages after panic happens */
if (unlikely(suppress_printk))
-@@ -2351,15 +2362,43 @@ asmlinkage int vprintk_emit(int facility
+@@ -2350,15 +2361,43 @@ asmlinkage int vprintk_emit(int facility
if (level == LOGLEVEL_SCHED) {
level = LOGLEVEL_DEFAULT;
@@ -118,7 +118,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/*
* The caller may be holding system-critical or
* timing-sensitive locks. Disable preemption during
-@@ -2379,10 +2418,10 @@ asmlinkage int vprintk_emit(int facility
+@@ -2378,10 +2417,10 @@ asmlinkage int vprintk_emit(int facility
preempt_enable();
}
diff --git a/debian/patches-rt/0031-serial-jsm-Use-port-lock-wrappers.patch b/debian/patches-rt/0031-serial-jsm-Use-port-lock-wrappers.patch
deleted file mode 100644
index 4326b333a7..0000000000
--- a/debian/patches-rt/0031-serial-jsm-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:48 +0206
-Subject: [PATCH 031/134] serial: jsm: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-32-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/jsm/jsm_neo.c | 4 ++--
- drivers/tty/serial/jsm/jsm_tty.c | 16 ++++++++--------
- 2 files changed, 10 insertions(+), 10 deletions(-)
-
---- a/drivers/tty/serial/jsm/jsm_neo.c
-+++ b/drivers/tty/serial/jsm/jsm_neo.c
-@@ -816,9 +816,9 @@ static void neo_parse_isr(struct jsm_boa
- /* Parse any modem signal changes */
- jsm_dbg(INTR, &ch->ch_bd->pci_dev,
- "MOD_STAT: sending to parse_modem_sigs\n");
-- spin_lock_irqsave(&ch->uart_port.lock, lock_flags);
-+ uart_port_lock_irqsave(&ch->uart_port, &lock_flags);
- neo_parse_modem(ch, readb(&ch->ch_neo_uart->msr));
-- spin_unlock_irqrestore(&ch->uart_port.lock, lock_flags);
-+ uart_port_unlock_irqrestore(&ch->uart_port, lock_flags);
- }
- }
-
---- a/drivers/tty/serial/jsm/jsm_tty.c
-+++ b/drivers/tty/serial/jsm/jsm_tty.c
-@@ -152,14 +152,14 @@ static void jsm_tty_send_xchar(struct ua
- container_of(port, struct jsm_channel, uart_port);
- struct ktermios *termios;
-
-- spin_lock_irqsave(&port->lock, lock_flags);
-+ uart_port_lock_irqsave(port, &lock_flags);
- termios = &port->state->port.tty->termios;
- if (ch == termios->c_cc[VSTART])
- channel->ch_bd->bd_ops->send_start_character(channel);
-
- if (ch == termios->c_cc[VSTOP])
- channel->ch_bd->bd_ops->send_stop_character(channel);
-- spin_unlock_irqrestore(&port->lock, lock_flags);
-+ uart_port_unlock_irqrestore(port, lock_flags);
- }
-
- static void jsm_tty_stop_rx(struct uart_port *port)
-@@ -176,13 +176,13 @@ static void jsm_tty_break(struct uart_po
- struct jsm_channel *channel =
- container_of(port, struct jsm_channel, uart_port);
-
-- spin_lock_irqsave(&port->lock, lock_flags);
-+ uart_port_lock_irqsave(port, &lock_flags);
- if (break_state == -1)
- channel->ch_bd->bd_ops->send_break(channel);
- else
- channel->ch_bd->bd_ops->clear_break(channel);
-
-- spin_unlock_irqrestore(&port->lock, lock_flags);
-+ uart_port_unlock_irqrestore(port, lock_flags);
- }
-
- static int jsm_tty_open(struct uart_port *port)
-@@ -241,7 +241,7 @@ static int jsm_tty_open(struct uart_port
- channel->ch_cached_lsr = 0;
- channel->ch_stops_sent = 0;
-
-- spin_lock_irqsave(&port->lock, lock_flags);
-+ uart_port_lock_irqsave(port, &lock_flags);
- termios = &port->state->port.tty->termios;
- channel->ch_c_cflag = termios->c_cflag;
- channel->ch_c_iflag = termios->c_iflag;
-@@ -261,7 +261,7 @@ static int jsm_tty_open(struct uart_port
- jsm_carrier(channel);
-
- channel->ch_open_count++;
-- spin_unlock_irqrestore(&port->lock, lock_flags);
-+ uart_port_unlock_irqrestore(port, lock_flags);
-
- jsm_dbg(OPEN, &channel->ch_bd->pci_dev, "finish\n");
- return 0;
-@@ -307,7 +307,7 @@ static void jsm_tty_set_termios(struct u
- struct jsm_channel *channel =
- container_of(port, struct jsm_channel, uart_port);
-
-- spin_lock_irqsave(&port->lock, lock_flags);
-+ uart_port_lock_irqsave(port, &lock_flags);
- channel->ch_c_cflag = termios->c_cflag;
- channel->ch_c_iflag = termios->c_iflag;
- channel->ch_c_oflag = termios->c_oflag;
-@@ -317,7 +317,7 @@ static void jsm_tty_set_termios(struct u
-
- channel->ch_bd->bd_ops->param(channel);
- jsm_carrier(channel);
-- spin_unlock_irqrestore(&port->lock, lock_flags);
-+ uart_port_unlock_irqrestore(port, lock_flags);
- }
-
- static const char *jsm_tty_type(struct uart_port *port)
diff --git a/debian/patches-rt/0116-printk-nbcon-Implement-emergency-sections.patch b/debian/patches-rt/0032-printk-nbcon-Implement-emergency-sections.patch
index 11175cacb0..29f5098811 100644
--- a/debian/patches-rt/0116-printk-nbcon-Implement-emergency-sections.patch
+++ b/debian/patches-rt/0032-printk-nbcon-Implement-emergency-sections.patch
@@ -1,7 +1,7 @@
From: Thomas Gleixner <tglx@linutronix.de>
Date: Mon, 11 Sep 2023 15:21:57 +0000
-Subject: [PATCH 116/134] printk: nbcon: Implement emergency sections
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 32/50] printk: nbcon: Implement emergency sections
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
In emergency situations (something has gone wrong but the
system continues to operate), usually important information
@@ -43,7 +43,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/include/linux/console.h
+++ b/include/linux/console.h
-@@ -458,10 +458,14 @@ static inline bool console_is_registered
+@@ -465,10 +465,14 @@ static inline bool console_is_registered
hlist_for_each_entry(con, &console_list, node)
#ifdef CONFIG_PRINTK
@@ -194,7 +194,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
*
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -2405,16 +2405,29 @@ asmlinkage int vprintk_emit(int facility
+@@ -2404,16 +2404,29 @@ asmlinkage int vprintk_emit(int facility
* printing of all remaining records to all consoles so that
* this context can return as soon as possible. Hopefully
* another printk() caller will take over the printing.
diff --git a/debian/patches-rt/0032-serial-liteuart-Use-port-lock-wrappers.patch b/debian/patches-rt/0032-serial-liteuart-Use-port-lock-wrappers.patch
deleted file mode 100644
index ae679c098c..0000000000
--- a/debian/patches-rt/0032-serial-liteuart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,110 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:49 +0206
-Subject: [PATCH 032/134] serial: liteuart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Acked-by: Gabriel Somlo <gsomlo@gmail.com>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-33-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/liteuart.c | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
---- a/drivers/tty/serial/liteuart.c
-+++ b/drivers/tty/serial/liteuart.c
-@@ -139,13 +139,13 @@ static irqreturn_t liteuart_interrupt(in
- * if polling, the context would be "in_serving_softirq", so use
- * irq[save|restore] spin_lock variants to cover all possibilities
- */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- isr = litex_read8(port->membase + OFF_EV_PENDING) & uart->irq_reg;
- if (isr & EV_RX)
- liteuart_rx_chars(port);
- if (isr & EV_TX)
- liteuart_tx_chars(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return IRQ_RETVAL(isr);
- }
-@@ -195,10 +195,10 @@ static int liteuart_startup(struct uart_
- }
- }
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- /* only enabling rx irqs during startup */
- liteuart_update_irq_reg(port, true, EV_RX);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (!port->irq) {
- timer_setup(&uart->timer, liteuart_timer, 0);
-@@ -213,9 +213,9 @@ static void liteuart_shutdown(struct uar
- struct liteuart_port *uart = to_liteuart_port(port);
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- liteuart_update_irq_reg(port, false, EV_RX | EV_TX);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (port->irq)
- free_irq(port->irq, port);
-@@ -229,13 +229,13 @@ static void liteuart_set_termios(struct
- unsigned int baud;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* update baudrate */
- baud = uart_get_baud_rate(port, new, old, 0, 460800);
- uart_update_timeout(port, new->c_cflag, baud);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *liteuart_type(struct uart_port *port)
-@@ -382,9 +382,9 @@ static void liteuart_console_write(struc
- uart = (struct liteuart_port *)xa_load(&liteuart_array, co->index);
- port = &uart->port;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- uart_console_write(port, s, count, liteuart_putchar);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int liteuart_console_setup(struct console *co, char *options)
diff --git a/debian/patches-rt/0117-panic-Mark-emergency-section-in-warn.patch b/debian/patches-rt/0033-panic-Mark-emergency-section-in-warn.patch
index 84201d25fe..c3058599cf 100644
--- a/debian/patches-rt/0117-panic-Mark-emergency-section-in-warn.patch
+++ b/debian/patches-rt/0033-panic-Mark-emergency-section-in-warn.patch
@@ -1,7 +1,7 @@
From: Thomas Gleixner <tglx@linutronix.de>
Date: Mon, 11 Sep 2023 15:53:04 +0000
-Subject: [PATCH 117/134] panic: Mark emergency section in warn
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 33/50] panic: Mark emergency section in warn
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Mark the full contents of __warn() as an emergency section. In
this section, the CPU will not perform console output for the
@@ -18,7 +18,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/panic.c
+++ b/kernel/panic.c
-@@ -663,6 +663,8 @@ struct warn_args {
+@@ -667,6 +667,8 @@ struct warn_args {
void __warn(const char *file, int line, void *caller, unsigned taint,
struct pt_regs *regs, struct warn_args *args)
{
@@ -27,7 +27,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
disable_trace_on_warning();
if (file)
-@@ -693,6 +695,8 @@ void __warn(const char *file, int line,
+@@ -697,6 +699,8 @@ void __warn(const char *file, int line,
/* Just a warning, don't kill lockdep. */
add_taint(taint, LOCKDEP_STILL_OK);
diff --git a/debian/patches-rt/0033-serial-lpc32xx_hs-Use-port-lock-wrappers.patch b/debian/patches-rt/0033-serial-lpc32xx_hs-Use-port-lock-wrappers.patch
deleted file mode 100644
index 06518e8460..0000000000
--- a/debian/patches-rt/0033-serial-lpc32xx_hs-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,148 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:50 +0206
-Subject: [PATCH 033/134] serial: lpc32xx_hs: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-34-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/lpc32xx_hs.c | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
---- a/drivers/tty/serial/lpc32xx_hs.c
-+++ b/drivers/tty/serial/lpc32xx_hs.c
-@@ -140,15 +140,15 @@ static void lpc32xx_hsuart_console_write
- if (up->port.sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock(&up->port.lock);
-+ locked = uart_port_trylock(&up->port);
- else
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
-
- uart_console_write(&up->port, s, count, lpc32xx_hsuart_console_putchar);
- wait_for_xmit_empty(&up->port);
-
- if (locked)
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
- local_irq_restore(flags);
- }
-
-@@ -298,7 +298,7 @@ static irqreturn_t serial_lpc32xx_interr
- struct tty_port *tport = &port->state->port;
- u32 status;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- /* Read UART status and clear latched interrupts */
- status = readl(LPC32XX_HSUART_IIR(port->membase));
-@@ -333,7 +333,7 @@ static irqreturn_t serial_lpc32xx_interr
- __serial_lpc32xx_tx(port);
- }
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -404,14 +404,14 @@ static void serial_lpc32xx_break_ctl(str
- unsigned long flags;
- u32 tmp;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- tmp = readl(LPC32XX_HSUART_CTRL(port->membase));
- if (break_state != 0)
- tmp |= LPC32XX_HSU_BREAK;
- else
- tmp &= ~LPC32XX_HSU_BREAK;
- writel(tmp, LPC32XX_HSUART_CTRL(port->membase));
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /* port->lock is not held. */
-@@ -421,7 +421,7 @@ static int serial_lpc32xx_startup(struct
- unsigned long flags;
- u32 tmp;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- __serial_uart_flush(port);
-
-@@ -441,7 +441,7 @@ static int serial_lpc32xx_startup(struct
-
- lpc32xx_loopback_set(port->mapbase, 0); /* get out of loopback mode */
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- retval = request_irq(port->irq, serial_lpc32xx_interrupt,
- 0, MODNAME, port);
-@@ -458,7 +458,7 @@ static void serial_lpc32xx_shutdown(stru
- u32 tmp;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- tmp = LPC32XX_HSU_TX_TL8B | LPC32XX_HSU_RX_TL32B |
- LPC32XX_HSU_OFFSET(20) | LPC32XX_HSU_TMO_INACT_4B;
-@@ -466,7 +466,7 @@ static void serial_lpc32xx_shutdown(stru
-
- lpc32xx_loopback_set(port->mapbase, 1); /* go to loopback mode */
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- free_irq(port->irq, port);
- }
-@@ -491,7 +491,7 @@ static void serial_lpc32xx_set_termios(s
-
- quot = __serial_get_clock_div(port->uartclk, baud);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Ignore characters? */
- tmp = readl(LPC32XX_HSUART_CTRL(port->membase));
-@@ -505,7 +505,7 @@ static void serial_lpc32xx_set_termios(s
-
- uart_update_timeout(port, termios->c_cflag, baud);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- /* Don't rewrite B0 */
- if (tty_termios_baud_rate(termios))
diff --git a/debian/patches-rt/0118-panic-Mark-emergency-section-in-oops.patch b/debian/patches-rt/0034-panic-Mark-emergency-section-in-oops.patch
index 6e52fd3a69..d4ca13f249 100644
--- a/debian/patches-rt/0118-panic-Mark-emergency-section-in-oops.patch
+++ b/debian/patches-rt/0034-panic-Mark-emergency-section-in-oops.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Tue, 19 Sep 2023 17:07:34 +0000
-Subject: [PATCH 118/134] panic: Mark emergency section in oops
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 34/50] panic: Mark emergency section in oops
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Mark an emergency section beginning with oops_enter() until the
end of oops_exit(). In this section, the CPU will not perform
@@ -21,7 +21,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/panic.c
+++ b/kernel/panic.c
-@@ -630,6 +630,7 @@ bool oops_may_print(void)
+@@ -634,6 +634,7 @@ bool oops_may_print(void)
*/
void oops_enter(void)
{
@@ -29,7 +29,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
tracing_off();
/* can't trust the integrity of the kernel anymore: */
debug_locks_off();
-@@ -652,6 +653,7 @@ void oops_exit(void)
+@@ -656,6 +657,7 @@ void oops_exit(void)
{
do_oops_enter_exit();
print_oops_end_marker();
diff --git a/debian/patches-rt/0034-serial-ma35d1-Use-port-lock-wrappers.patch b/debian/patches-rt/0034-serial-ma35d1-Use-port-lock-wrappers.patch
deleted file mode 100644
index 995bad9aad..0000000000
--- a/debian/patches-rt/0034-serial-ma35d1-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:51 +0206
-Subject: [PATCH 034/134] serial: ma35d1: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-35-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/ma35d1_serial.c | 22 +++++++++++-----------
- 1 file changed, 11 insertions(+), 11 deletions(-)
-
---- a/drivers/tty/serial/ma35d1_serial.c
-+++ b/drivers/tty/serial/ma35d1_serial.c
-@@ -269,16 +269,16 @@ static void receive_chars(struct uart_ma
- if (uart_handle_sysrq_char(&up->port, ch))
- continue;
-
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
- uart_insert_char(&up->port, fsr, MA35_FSR_RX_OVER_IF, ch, flag);
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
-
- fsr = serial_in(up, MA35_FSR_REG);
- } while (!(fsr & MA35_FSR_RX_EMPTY) && (max_count-- > 0));
-
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
- tty_flip_buffer_push(&up->port.state->port);
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
- }
-
- static irqreturn_t ma35d1serial_interrupt(int irq, void *dev_id)
-@@ -364,14 +364,14 @@ static void ma35d1serial_break_ctl(struc
- unsigned long flags;
- u32 lcr;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- lcr = serial_in(up, MA35_LCR_REG);
- if (break_state != 0)
- lcr |= MA35_LCR_BREAK;
- else
- lcr &= ~MA35_LCR_BREAK;
- serial_out(up, MA35_LCR_REG, lcr);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static int ma35d1serial_startup(struct uart_port *port)
-@@ -441,7 +441,7 @@ static void ma35d1serial_set_termios(str
- * Ok, we're now changing the port state. Do it with
- * interrupts disabled.
- */
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- up->port.read_status_mask = MA35_FSR_RX_OVER_IF;
- if (termios->c_iflag & INPCK)
-@@ -475,7 +475,7 @@ static void ma35d1serial_set_termios(str
-
- serial_out(up, MA35_LCR_REG, lcr);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static const char *ma35d1serial_type(struct uart_port *port)
-@@ -560,9 +560,9 @@ static void ma35d1serial_console_write(s
- if (up->port.sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock_irqsave(&up->port.lock, flags);
-+ locked = uart_port_trylock_irqsave(&up->port, &flags);
- else
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- /*
- * First save the IER then disable the interrupts
-@@ -576,7 +576,7 @@ static void ma35d1serial_console_write(s
- serial_out(up, MA35_IER_REG, ier);
-
- if (locked)
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static int __init ma35d1serial_console_setup(struct console *co, char *options)
diff --git a/debian/patches-rt/0119-rcu-Mark-emergency-section-in-rcu-stalls.patch b/debian/patches-rt/0035-rcu-Mark-emergency-section-in-rcu-stalls.patch
index d1d6efced4..3608cd7954 100644
--- a/debian/patches-rt/0119-rcu-Mark-emergency-section-in-rcu-stalls.patch
+++ b/debian/patches-rt/0035-rcu-Mark-emergency-section-in-rcu-stalls.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 11 Sep 2023 15:53:39 +0000
-Subject: [PATCH 119/134] rcu: Mark emergency section in rcu stalls
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 35/50] rcu: Mark emergency section in rcu stalls
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Mark an emergency section within print_other_cpu_stall(), where
RCU stall information is printed. In this section, the CPU will
@@ -17,15 +17,15 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/rcu/tree_stall.h
+++ b/kernel/rcu/tree_stall.h
-@@ -8,6 +8,7 @@
- */
+@@ -9,6 +9,7 @@
#include <linux/kvm_para.h>
+ #include <linux/rcu_notifier.h>
+#include <linux/console.h>
//////////////////////////////////////////////////////////////////////////////
//
-@@ -603,6 +604,8 @@ static void print_other_cpu_stall(unsign
+@@ -604,6 +605,8 @@ static void print_other_cpu_stall(unsign
if (rcu_stall_is_suppressed())
return;
@@ -34,7 +34,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/*
* OK, time to rat on our buddy...
* See Documentation/RCU/stallwarn.rst for info on how to debug
-@@ -657,6 +660,8 @@ static void print_other_cpu_stall(unsign
+@@ -658,6 +661,8 @@ static void print_other_cpu_stall(unsign
panic_on_rcu_stall();
rcu_force_quiescent_state(); /* Kick them all. */
diff --git a/debian/patches-rt/0035-serial-mcf-Use-port-lock-wrappers.patch b/debian/patches-rt/0035-serial-mcf-Use-port-lock-wrappers.patch
deleted file mode 100644
index 966618a3e4..0000000000
--- a/debian/patches-rt/0035-serial-mcf-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:52 +0206
-Subject: [PATCH 035/134] serial: mcf: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-36-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/mcf.c | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
---- a/drivers/tty/serial/mcf.c
-+++ b/drivers/tty/serial/mcf.c
-@@ -135,12 +135,12 @@ static void mcf_break_ctl(struct uart_po
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (break_state == -1)
- writeb(MCFUART_UCR_CMDBREAKSTART, port->membase + MCFUART_UCR);
- else
- writeb(MCFUART_UCR_CMDBREAKSTOP, port->membase + MCFUART_UCR);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /****************************************************************************/
-@@ -150,7 +150,7 @@ static int mcf_startup(struct uart_port
- struct mcf_uart *pp = container_of(port, struct mcf_uart, port);
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Reset UART, get it into known state... */
- writeb(MCFUART_UCR_CMDRESETRX, port->membase + MCFUART_UCR);
-@@ -164,7 +164,7 @@ static int mcf_startup(struct uart_port
- pp->imr = MCFUART_UIR_RXREADY;
- writeb(pp->imr, port->membase + MCFUART_UIMR);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return 0;
- }
-@@ -176,7 +176,7 @@ static void mcf_shutdown(struct uart_por
- struct mcf_uart *pp = container_of(port, struct mcf_uart, port);
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Disable all interrupts now */
- pp->imr = 0;
-@@ -186,7 +186,7 @@ static void mcf_shutdown(struct uart_por
- writeb(MCFUART_UCR_CMDRESETRX, port->membase + MCFUART_UCR);
- writeb(MCFUART_UCR_CMDRESETTX, port->membase + MCFUART_UCR);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /****************************************************************************/
-@@ -252,7 +252,7 @@ static void mcf_set_termios(struct uart_
- mr2 |= MCFUART_MR2_TXCTS;
- }
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (port->rs485.flags & SER_RS485_ENABLED) {
- dev_dbg(port->dev, "Setting UART to RS485\n");
- mr2 |= MCFUART_MR2_TXRTS;
-@@ -273,7 +273,7 @@ static void mcf_set_termios(struct uart_
- port->membase + MCFUART_UCSR);
- writeb(MCFUART_UCR_RXENABLE | MCFUART_UCR_TXENABLE,
- port->membase + MCFUART_UCR);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /****************************************************************************/
-@@ -350,7 +350,7 @@ static irqreturn_t mcf_interrupt(int irq
-
- isr = readb(port->membase + MCFUART_UISR) & pp->imr;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- if (isr & MCFUART_UIR_RXREADY) {
- mcf_rx_chars(pp);
- ret = IRQ_HANDLED;
-@@ -359,7 +359,7 @@ static irqreturn_t mcf_interrupt(int irq
- mcf_tx_chars(pp);
- ret = IRQ_HANDLED;
- }
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return ret;
- }
diff --git a/debian/patches-rt/0120-lockdep-Mark-emergency-section-in-lockdep-splats.patch b/debian/patches-rt/0036-lockdep-Mark-emergency-section-in-lockdep-splats.patch
index 248d17afc2..550bcda637 100644
--- a/debian/patches-rt/0120-lockdep-Mark-emergency-section-in-lockdep-splats.patch
+++ b/debian/patches-rt/0036-lockdep-Mark-emergency-section-in-lockdep-splats.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 18 Sep 2023 20:27:41 +0000
-Subject: [PATCH 120/134] lockdep: Mark emergency section in lockdep splats
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 36/50] lockdep: Mark emergency section in lockdep splats
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Mark an emergency section within print_usage_bug(), where
lockdep bugs are printed. In this section, the CPU will not
diff --git a/debian/patches-rt/0036-serial-men_z135_uart-Use-port-lock-wrappers.patch b/debian/patches-rt/0036-serial-men_z135_uart-Use-port-lock-wrappers.patch
deleted file mode 100644
index 11019689b6..0000000000
--- a/debian/patches-rt/0036-serial-men_z135_uart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:53 +0206
-Subject: [PATCH 036/134] serial: men_z135_uart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-37-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/men_z135_uart.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/tty/serial/men_z135_uart.c
-+++ b/drivers/tty/serial/men_z135_uart.c
-@@ -392,7 +392,7 @@ static irqreturn_t men_z135_intr(int irq
- if (!irq_id)
- goto out;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- /* It's save to write to IIR[7:6] RXC[9:8] */
- iowrite8(irq_id, port->membase + MEN_Z135_STAT_REG);
-
-@@ -418,7 +418,7 @@ static irqreturn_t men_z135_intr(int irq
- handled = true;
- }
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- out:
- return IRQ_RETVAL(handled);
- }
-@@ -708,7 +708,7 @@ static void men_z135_set_termios(struct
-
- baud = uart_get_baud_rate(port, termios, old, 0, uart_freq / 16);
-
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- if (tty_termios_baud_rate(termios))
- tty_termios_encode_baud_rate(termios, baud, baud);
-
-@@ -716,7 +716,7 @@ static void men_z135_set_termios(struct
- iowrite32(bd_reg, port->membase + MEN_Z135_BAUD_REG);
-
- uart_update_timeout(port, termios->c_cflag, baud);
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- }
-
- static const char *men_z135_type(struct uart_port *port)
diff --git a/debian/patches-rt/0121-printk-nbcon-Introduce-printing-kthreads.patch b/debian/patches-rt/0037-printk-nbcon-Introduce-printing-kthreads.patch
index 7b158ddb74..712f144bee 100644
--- a/debian/patches-rt/0121-printk-nbcon-Introduce-printing-kthreads.patch
+++ b/debian/patches-rt/0037-printk-nbcon-Introduce-printing-kthreads.patch
@@ -1,7 +1,7 @@
From: Thomas Gleixner <tglx@linutronix.de>
Date: Fri, 22 Sep 2023 14:12:21 +0000
-Subject: [PATCH 121/134] printk: nbcon: Introduce printing kthreads
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 37/50] printk: nbcon: Introduce printing kthreads
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Provide the main implementation for running a printer kthread
per nbcon console that is takeover/handover aware.
@@ -31,7 +31,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
#include <linux/types.h>
struct vc_data;
-@@ -296,12 +297,15 @@ struct nbcon_write_context {
+@@ -303,12 +304,15 @@ struct nbcon_write_context {
* @node: hlist node for the console list
*
* @write_atomic: Write callback for atomic context
@@ -47,7 +47,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
*/
struct console {
char name[16];
-@@ -325,12 +329,16 @@ struct console {
+@@ -332,12 +336,16 @@ struct console {
/* nbcon console specific members */
bool (*write_atomic)(struct console *con,
struct nbcon_write_context *wctxt);
@@ -377,7 +377,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/* Boot consoles share global printk buffers. */
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -2682,6 +2682,8 @@ void suspend_console(void)
+@@ -2689,6 +2689,8 @@ void suspend_console(void)
void resume_console(void)
{
struct console *con;
@@ -386,7 +386,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
if (!console_suspend_enabled)
return;
-@@ -2698,6 +2700,14 @@ void resume_console(void)
+@@ -2705,6 +2707,14 @@ void resume_console(void)
*/
synchronize_srcu(&console_srcu);
@@ -401,7 +401,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
pr_flush(1000, true);
}
-@@ -3018,6 +3028,13 @@ static bool console_flush_all(bool do_co
+@@ -3025,6 +3035,13 @@ static bool console_flush_all(bool do_co
u64 printk_seq;
bool progress;
@@ -415,7 +415,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
if (!console_is_usable(con, flags))
continue;
any_usable = true;
-@@ -3313,9 +3330,23 @@ EXPORT_SYMBOL(console_stop);
+@@ -3320,9 +3337,23 @@ EXPORT_SYMBOL(console_stop);
void console_start(struct console *console)
{
diff --git a/debian/patches-rt/0037-serial-meson-Use-port-lock-wrappers.patch b/debian/patches-rt/0037-serial-meson-Use-port-lock-wrappers.patch
deleted file mode 100644
index d2efb460bc..0000000000
--- a/debian/patches-rt/0037-serial-meson-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,168 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:54 +0206
-Subject: [PATCH 037/134] serial: meson: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Acked-by: Neil Armstrong <neil.armstrong@linaro.org>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-38-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/meson_uart.c | 30 +++++++++++++++---------------
- 1 file changed, 15 insertions(+), 15 deletions(-)
-
---- a/drivers/tty/serial/meson_uart.c
-+++ b/drivers/tty/serial/meson_uart.c
-@@ -129,14 +129,14 @@ static void meson_uart_shutdown(struct u
-
- free_irq(port->irq, port);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- val = readl(port->membase + AML_UART_CONTROL);
- val &= ~AML_UART_RX_EN;
- val &= ~(AML_UART_RX_INT_EN | AML_UART_TX_INT_EN);
- writel(val, port->membase + AML_UART_CONTROL);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void meson_uart_start_tx(struct uart_port *port)
-@@ -238,7 +238,7 @@ static irqreturn_t meson_uart_interrupt(
- {
- struct uart_port *port = (struct uart_port *)dev_id;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- if (!(readl(port->membase + AML_UART_STATUS) & AML_UART_RX_EMPTY))
- meson_receive_chars(port);
-@@ -248,7 +248,7 @@ static irqreturn_t meson_uart_interrupt(
- meson_uart_start_tx(port);
- }
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -284,7 +284,7 @@ static int meson_uart_startup(struct uar
- u32 val;
- int ret = 0;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- val = readl(port->membase + AML_UART_CONTROL);
- val |= AML_UART_CLEAR_ERR;
-@@ -301,7 +301,7 @@ static int meson_uart_startup(struct uar
- val = (AML_UART_RECV_IRQ(1) | AML_UART_XMIT_IRQ(port->fifosize / 2));
- writel(val, port->membase + AML_UART_MISC);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- ret = request_irq(port->irq, meson_uart_interrupt, 0,
- port->name, port);
-@@ -341,7 +341,7 @@ static void meson_uart_set_termios(struc
- unsigned long flags;
- u32 val;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- cflags = termios->c_cflag;
- iflags = termios->c_iflag;
-@@ -405,7 +405,7 @@ static void meson_uart_set_termios(struc
- AML_UART_FRAME_ERR;
-
- uart_update_timeout(port, termios->c_cflag, baud);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int meson_uart_verify_port(struct uart_port *port,
-@@ -464,14 +464,14 @@ static int meson_uart_poll_get_char(stru
- u32 c;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- if (readl(port->membase + AML_UART_STATUS) & AML_UART_RX_EMPTY)
- c = NO_POLL_CHAR;
- else
- c = readl(port->membase + AML_UART_RFIFO);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return c;
- }
-@@ -482,7 +482,7 @@ static void meson_uart_poll_put_char(str
- u32 reg;
- int ret;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Wait until FIFO is empty or timeout */
- ret = readl_poll_timeout_atomic(port->membase + AML_UART_STATUS, reg,
-@@ -506,7 +506,7 @@ static void meson_uart_poll_put_char(str
- dev_err(port->dev, "Timeout waiting for UART TX EMPTY\n");
-
- out:
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- #endif /* CONFIG_CONSOLE_POLL */
-@@ -563,9 +563,9 @@ static void meson_serial_port_write(stru
- if (port->sysrq) {
- locked = 0;
- } else if (oops_in_progress) {
-- locked = spin_trylock(&port->lock);
-+ locked = uart_port_trylock(port);
- } else {
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- locked = 1;
- }
-
-@@ -577,7 +577,7 @@ static void meson_serial_port_write(stru
- writel(val, port->membase + AML_UART_CONTROL);
-
- if (locked)
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- local_irq_restore(flags);
- }
-
diff --git a/debian/patches-rt/0122-printk-Atomic-print-in-printk-context-on-shutdown.patch b/debian/patches-rt/0038-printk-Atomic-print-in-printk-context-on-shutdown.patch
index 35c88289b1..1f51022ae4 100644
--- a/debian/patches-rt/0122-printk-Atomic-print-in-printk-context-on-shutdown.patch
+++ b/debian/patches-rt/0038-printk-Atomic-print-in-printk-context-on-shutdown.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 23 Oct 2023 17:43:48 +0000
-Subject: [PATCH 122/134] printk: Atomic print in printk context on shutdown
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 38/50] printk: Atomic print in printk context on shutdown
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
For nbcon consoles, normally the printing is handled by the
dedicated console printing threads. However, on shutdown the
@@ -19,7 +19,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -2389,13 +2389,18 @@ asmlinkage int vprintk_emit(int facility
+@@ -2388,13 +2388,18 @@ asmlinkage int vprintk_emit(int facility
*
* - When this CPU is in panic.
*
diff --git a/debian/patches-rt/0038-serial-milbeaut_usio-Use-port-lock-wrappers.patch b/debian/patches-rt/0038-serial-milbeaut_usio-Use-port-lock-wrappers.patch
deleted file mode 100644
index 47b1b7f3cc..0000000000
--- a/debian/patches-rt/0038-serial-milbeaut_usio-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:55 +0206
-Subject: [PATCH 038/134] serial: milbeaut_usio: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-39-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/milbeaut_usio.c | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
---- a/drivers/tty/serial/milbeaut_usio.c
-+++ b/drivers/tty/serial/milbeaut_usio.c
-@@ -207,9 +207,9 @@ static irqreturn_t mlb_usio_rx_irq(int i
- {
- struct uart_port *port = dev_id;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- mlb_usio_rx_chars(port);
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -218,10 +218,10 @@ static irqreturn_t mlb_usio_tx_irq(int i
- {
- struct uart_port *port = dev_id;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- if (readb(port->membase + MLB_USIO_REG_SSR) & MLB_USIO_SSR_TBI)
- mlb_usio_tx_chars(port);
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -267,7 +267,7 @@ static int mlb_usio_startup(struct uart_
- escr = readb(port->membase + MLB_USIO_REG_ESCR);
- if (of_property_read_bool(port->dev->of_node, "auto-flow-control"))
- escr |= MLB_USIO_ESCR_FLWEN;
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- writeb(0, port->membase + MLB_USIO_REG_SCR);
- writeb(escr, port->membase + MLB_USIO_REG_ESCR);
- writeb(MLB_USIO_SCR_UPCL, port->membase + MLB_USIO_REG_SCR);
-@@ -282,7 +282,7 @@ static int mlb_usio_startup(struct uart_
-
- writeb(MLB_USIO_SCR_TXE | MLB_USIO_SCR_RIE | MLB_USIO_SCR_TBIE |
- MLB_USIO_SCR_RXE, port->membase + MLB_USIO_REG_SCR);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return 0;
- }
-@@ -337,7 +337,7 @@ static void mlb_usio_set_termios(struct
- else
- quot = 0;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- uart_update_timeout(port, termios->c_cflag, baud);
- port->read_status_mask = MLB_USIO_SSR_ORE | MLB_USIO_SSR_RDRF |
- MLB_USIO_SSR_TDRE;
-@@ -367,7 +367,7 @@ static void mlb_usio_set_termios(struct
- writew(BIT(12), port->membase + MLB_USIO_REG_FBYTE);
- writeb(MLB_USIO_SCR_RIE | MLB_USIO_SCR_RXE | MLB_USIO_SCR_TBIE |
- MLB_USIO_SCR_TXE, port->membase + MLB_USIO_REG_SCR);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *mlb_usio_type(struct uart_port *port)
diff --git a/debian/patches-rt/0123-printk-nbcon-Add-context-to-console_is_usable.patch b/debian/patches-rt/0039-printk-nbcon-Add-context-to-console_is_usable.patch
index 26a494c165..7702309536 100644
--- a/debian/patches-rt/0123-printk-nbcon-Add-context-to-console_is_usable.patch
+++ b/debian/patches-rt/0039-printk-nbcon-Add-context-to-console_is_usable.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Tue, 26 Sep 2023 14:43:30 +0000
-Subject: [PATCH 123/134] printk: nbcon: Add context to console_is_usable()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 39/50] printk: nbcon: Add context to console_is_usable()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The nbcon consoles have two callbacks to be used for different
contexts. In order to determine if an nbcon console is usable,
@@ -88,7 +88,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
if (nbcon_seq_read(con) >= stop_seq)
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -3040,7 +3040,7 @@ static bool console_flush_all(bool do_co
+@@ -3047,7 +3047,7 @@ static bool console_flush_all(bool do_co
if ((flags & CON_NBCON) && con->kthread)
continue;
@@ -97,7 +97,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
continue;
any_usable = true;
-@@ -3945,8 +3945,10 @@ static bool __pr_flush(struct console *c
+@@ -3952,8 +3952,10 @@ static bool __pr_flush(struct console *c
* that they make forward progress, so only increment
* @diff for usable consoles.
*/
diff --git a/debian/patches-rt/0039-serial-mpc52xx-Use-port-lock-wrappers.patch b/debian/patches-rt/0039-serial-mpc52xx-Use-port-lock-wrappers.patch
deleted file mode 100644
index ee7014a925..0000000000
--- a/debian/patches-rt/0039-serial-mpc52xx-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:56 +0206
-Subject: [PATCH 039/134] serial: mpc52xx: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-40-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/mpc52xx_uart.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
---- a/drivers/tty/serial/mpc52xx_uart.c
-+++ b/drivers/tty/serial/mpc52xx_uart.c
-@@ -1096,14 +1096,14 @@ static void
- mpc52xx_uart_break_ctl(struct uart_port *port, int ctl)
- {
- unsigned long flags;
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- if (ctl == -1)
- psc_ops->command(port, MPC52xx_PSC_START_BRK);
- else
- psc_ops->command(port, MPC52xx_PSC_STOP_BRK);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int
-@@ -1214,7 +1214,7 @@ mpc52xx_uart_set_termios(struct uart_por
- }
-
- /* Get the lock */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Do our best to flush TX & RX, so we don't lose anything */
- /* But we don't wait indefinitely ! */
-@@ -1250,7 +1250,7 @@ mpc52xx_uart_set_termios(struct uart_por
- psc_ops->command(port, MPC52xx_PSC_RX_ENABLE);
-
- /* We're all set, release the lock */
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *
-@@ -1477,11 +1477,11 @@ mpc52xx_uart_int(int irq, void *dev_id)
- struct uart_port *port = dev_id;
- irqreturn_t ret;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- ret = psc_ops->handle_irq(port);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return ret;
- }
diff --git a/debian/patches-rt/0124-printk-nbcon-Add-printer-thread-wakeups.patch b/debian/patches-rt/0040-printk-nbcon-Add-printer-thread-wakeups.patch
index 18e02593f8..89e086aa32 100644
--- a/debian/patches-rt/0124-printk-nbcon-Add-printer-thread-wakeups.patch
+++ b/debian/patches-rt/0040-printk-nbcon-Add-printer-thread-wakeups.patch
@@ -1,7 +1,7 @@
From: Thomas Gleixner <tglx@linutronix.de>
Date: Tue, 26 Sep 2023 13:03:52 +0000
-Subject: [PATCH 124/134] printk: nbcon: Add printer thread wakeups
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 40/50] printk: nbcon: Add printer thread wakeups
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Add a function to wakeup the printer threads. Use the new function
when:
@@ -34,7 +34,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
#include <linux/rculist.h>
#include <linux/rcuwait.h>
#include <linux/types.h>
-@@ -306,6 +307,7 @@ struct nbcon_write_context {
+@@ -313,6 +314,7 @@ struct nbcon_write_context {
* @locked_port: True, if the port lock is locked by nbcon
* @kthread: Printer kthread for this console
* @rcuwait: RCU-safe wait object for @kthread waking
@@ -42,7 +42,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
*/
struct console {
char name[16];
-@@ -339,6 +341,7 @@ struct console {
+@@ -346,6 +348,7 @@ struct console {
bool locked_port;
struct task_struct *kthread;
struct rcuwait rcuwait;
@@ -134,7 +134,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -2403,6 +2403,8 @@ asmlinkage int vprintk_emit(int facility
+@@ -2402,6 +2402,8 @@ asmlinkage int vprintk_emit(int facility
}
}
@@ -143,7 +143,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
if (do_trylock_unlock) {
/*
* The caller may be holding system-critical or
-@@ -2705,6 +2707,10 @@ void resume_console(void)
+@@ -2712,6 +2714,10 @@ void resume_console(void)
*/
synchronize_srcu(&console_srcu);
@@ -154,7 +154,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
cookie = console_srcu_read_lock();
for_each_console_srcu(con) {
flags = console_srcu_read_flags(con);
-@@ -4097,6 +4103,7 @@ void defer_console_output(void)
+@@ -4104,6 +4110,7 @@ void defer_console_output(void)
void printk_trigger_flush(void)
{
diff --git a/debian/patches-rt/0040-serial-mps2-uart-Use-port-lock-wrappers.patch b/debian/patches-rt/0040-serial-mps2-uart-Use-port-lock-wrappers.patch
deleted file mode 100644
index a626bdb031..0000000000
--- a/debian/patches-rt/0040-serial-mps2-uart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:57 +0206
-Subject: [PATCH 040/134] serial: mps2-uart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-41-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/mps2-uart.c | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
---- a/drivers/tty/serial/mps2-uart.c
-+++ b/drivers/tty/serial/mps2-uart.c
-@@ -188,12 +188,12 @@ static irqreturn_t mps2_uart_rxirq(int i
- if (unlikely(!(irqflag & UARTn_INT_RX)))
- return IRQ_NONE;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- mps2_uart_write8(port, UARTn_INT_RX, UARTn_INT);
- mps2_uart_rx_chars(port);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -206,12 +206,12 @@ static irqreturn_t mps2_uart_txirq(int i
- if (unlikely(!(irqflag & UARTn_INT_TX)))
- return IRQ_NONE;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- mps2_uart_write8(port, UARTn_INT_TX, UARTn_INT);
- mps2_uart_tx_chars(port);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -222,7 +222,7 @@ static irqreturn_t mps2_uart_oerrirq(int
- struct uart_port *port = data;
- u8 irqflag = mps2_uart_read8(port, UARTn_INT);
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- if (irqflag & UARTn_INT_RX_OVERRUN) {
- struct tty_port *tport = &port->state->port;
-@@ -244,7 +244,7 @@ static irqreturn_t mps2_uart_oerrirq(int
- handled = IRQ_HANDLED;
- }
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return handled;
- }
-@@ -356,12 +356,12 @@ mps2_uart_set_termios(struct uart_port *
-
- bauddiv = DIV_ROUND_CLOSEST(port->uartclk, baud);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- uart_update_timeout(port, termios->c_cflag, baud);
- mps2_uart_write32(port, bauddiv, UARTn_BAUDDIV);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (tty_termios_baud_rate(termios))
- tty_termios_encode_baud_rate(termios, baud, baud);
diff --git a/debian/patches-rt/0125-printk-nbcon-Stop-threads-on-shutdown-reboot.patch b/debian/patches-rt/0041-printk-nbcon-Stop-threads-on-shutdown-reboot.patch
index 55ec76c5c0..f412a9adf0 100644
--- a/debian/patches-rt/0125-printk-nbcon-Stop-threads-on-shutdown-reboot.patch
+++ b/debian/patches-rt/0041-printk-nbcon-Stop-threads-on-shutdown-reboot.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Tue, 26 Sep 2023 13:04:15 +0000
-Subject: [PATCH 125/134] printk: nbcon: Stop threads on shutdown/reboot
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 41/50] printk: nbcon: Stop threads on shutdown/reboot
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Register a syscore_ops shutdown function to stop all threaded
printers on shutdown/reboot. This allows printk to transition back
diff --git a/debian/patches-rt/0041-serial-msm-Use-port-lock-wrappers.patch b/debian/patches-rt/0041-serial-msm-Use-port-lock-wrappers.patch
deleted file mode 100644
index 89b8453303..0000000000
--- a/debian/patches-rt/0041-serial-msm-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,185 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:58 +0206
-Subject: [PATCH 041/134] serial: msm: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Reviewed-by: Bjorn Andersson <quic_bjorande@quicinc.com>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-42-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/msm_serial.c | 38 +++++++++++++++++++-------------------
- 1 file changed, 19 insertions(+), 19 deletions(-)
-
---- a/drivers/tty/serial/msm_serial.c
-+++ b/drivers/tty/serial/msm_serial.c
-@@ -444,7 +444,7 @@ static void msm_complete_tx_dma(void *ar
- unsigned int count;
- u32 val;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Already stopped */
- if (!dma->count)
-@@ -476,7 +476,7 @@ static void msm_complete_tx_dma(void *ar
-
- msm_handle_tx(port);
- done:
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int msm_handle_tx_dma(struct msm_port *msm_port, unsigned int count)
-@@ -549,7 +549,7 @@ static void msm_complete_rx_dma(void *ar
- unsigned long flags;
- u32 val;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Already stopped */
- if (!dma->count)
-@@ -587,16 +587,16 @@ static void msm_complete_rx_dma(void *ar
- if (!(port->read_status_mask & MSM_UART_SR_RX_BREAK))
- flag = TTY_NORMAL;
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- sysrq = uart_handle_sysrq_char(port, dma->virt[i]);
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (!sysrq)
- tty_insert_flip_char(tport, dma->virt[i], flag);
- }
-
- msm_start_rx_dma(msm_port);
- done:
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (count)
- tty_flip_buffer_push(tport);
-@@ -762,9 +762,9 @@ static void msm_handle_rx_dm(struct uart
- if (!(port->read_status_mask & MSM_UART_SR_RX_BREAK))
- flag = TTY_NORMAL;
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- sysrq = uart_handle_sysrq_char(port, buf[i]);
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- if (!sysrq)
- tty_insert_flip_char(tport, buf[i], flag);
- }
-@@ -824,9 +824,9 @@ static void msm_handle_rx(struct uart_po
- else if (sr & MSM_UART_SR_PAR_FRAME_ERR)
- flag = TTY_FRAME;
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- sysrq = uart_handle_sysrq_char(port, c);
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- if (!sysrq)
- tty_insert_flip_char(tport, c, flag);
- }
-@@ -951,7 +951,7 @@ static irqreturn_t msm_uart_irq(int irq,
- unsigned int misr;
- u32 val;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- misr = msm_read(port, MSM_UART_MISR);
- msm_write(port, 0, MSM_UART_IMR); /* disable interrupt */
-
-@@ -983,7 +983,7 @@ static irqreturn_t msm_uart_irq(int irq,
- msm_handle_delta_cts(port);
-
- msm_write(port, msm_port->imr, MSM_UART_IMR); /* restore interrupt */
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return IRQ_HANDLED;
- }
-@@ -1128,13 +1128,13 @@ static int msm_set_baud_rate(struct uart
- unsigned long flags, rate;
-
- flags = *saved_flags;
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- entry = msm_find_best_baud(port, baud, &rate);
- clk_set_rate(msm_port->clk, rate);
- baud = rate / 16 / entry->divisor;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- *saved_flags = flags;
- port->uartclk = rate;
-
-@@ -1266,7 +1266,7 @@ static void msm_set_termios(struct uart_
- unsigned long flags;
- unsigned int baud, mr;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- if (dma->chan) /* Terminate if any */
- msm_stop_dma(port, dma);
-@@ -1338,7 +1338,7 @@ static void msm_set_termios(struct uart_
- /* Try to use DMA */
- msm_start_rx_dma(msm_port);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *msm_type(struct uart_port *port)
-@@ -1620,9 +1620,9 @@ static void __msm_console_write(struct u
- if (port->sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock(&port->lock);
-+ locked = uart_port_trylock(port);
- else
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- if (is_uartdm)
- msm_reset_dm_count(port, count);
-@@ -1661,7 +1661,7 @@ static void __msm_console_write(struct u
- }
-
- if (locked)
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- local_irq_restore(flags);
- }
diff --git a/debian/patches-rt/0126-printk-nbcon-Start-printing-threads.patch b/debian/patches-rt/0042-printk-nbcon-Start-printing-threads.patch
index ec41221636..8360fe1876 100644
--- a/debian/patches-rt/0126-printk-nbcon-Start-printing-threads.patch
+++ b/debian/patches-rt/0042-printk-nbcon-Start-printing-threads.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Tue, 5 Dec 2023 14:09:31 +0000
-Subject: [PATCH 126/134] printk: nbcon: Start printing threads
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 42/50] printk: nbcon: Start printing threads
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
If there are no boot consoles, the printing threads are started
in early_initcall.
@@ -91,7 +91,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/**
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -2389,6 +2389,9 @@ asmlinkage int vprintk_emit(int facility
+@@ -2388,6 +2388,9 @@ asmlinkage int vprintk_emit(int facility
*
* - When this CPU is in panic.
*
@@ -101,7 +101,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
* - During shutdown, since the printing threads may not get
* a chance to print the final messages.
*
-@@ -2398,6 +2401,7 @@ asmlinkage int vprintk_emit(int facility
+@@ -2397,6 +2400,7 @@ asmlinkage int vprintk_emit(int facility
* with boot consoles.
*/
if (is_panic_context ||
@@ -109,7 +109,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
(system_state > SYSTEM_RUNNING)) {
nbcon_atomic_flush_all();
}
-@@ -3685,6 +3689,7 @@ EXPORT_SYMBOL(register_console);
+@@ -3692,6 +3696,7 @@ EXPORT_SYMBOL(register_console);
/* Must be called under console_list_lock(). */
static int unregister_console_locked(struct console *console)
{
@@ -117,7 +117,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
bool found_legacy_con = false;
bool found_nbcon_con = false;
bool found_boot_con = false;
-@@ -3756,6 +3761,15 @@ static int unregister_console_locked(str
+@@ -3763,6 +3768,15 @@ static int unregister_console_locked(str
if (!found_nbcon_con)
have_nbcon_console = false;
diff --git a/debian/patches-rt/0042-serial-mvebu-uart-Use-port-lock-wrappers.patch b/debian/patches-rt/0042-serial-mvebu-uart-Use-port-lock-wrappers.patch
deleted file mode 100644
index 28b2c3b46e..0000000000
--- a/debian/patches-rt/0042-serial-mvebu-uart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:43:59 +0206
-Subject: [PATCH 042/134] serial: mvebu-uart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-43-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/mvebu-uart.c | 18 +++++++++---------
- 1 file changed, 9 insertions(+), 9 deletions(-)
-
---- a/drivers/tty/serial/mvebu-uart.c
-+++ b/drivers/tty/serial/mvebu-uart.c
-@@ -187,9 +187,9 @@ static unsigned int mvebu_uart_tx_empty(
- unsigned long flags;
- unsigned int st;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- st = readl(port->membase + UART_STAT);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return (st & STAT_TX_EMP) ? TIOCSER_TEMT : 0;
- }
-@@ -249,14 +249,14 @@ static void mvebu_uart_break_ctl(struct
- unsigned int ctl;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- ctl = readl(port->membase + UART_CTRL(port));
- if (brk == -1)
- ctl |= CTRL_SND_BRK_SEQ;
- else
- ctl &= ~CTRL_SND_BRK_SEQ;
- writel(ctl, port->membase + UART_CTRL(port));
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void mvebu_uart_rx_chars(struct uart_port *port, unsigned int status)
-@@ -540,7 +540,7 @@ static void mvebu_uart_set_termios(struc
- unsigned long flags;
- unsigned int baud, min_baud, max_baud;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- port->read_status_mask = STAT_RX_RDY(port) | STAT_OVR_ERR |
- STAT_TX_RDY(port) | STAT_TX_FIFO_FUL;
-@@ -589,7 +589,7 @@ static void mvebu_uart_set_termios(struc
- uart_update_timeout(port, termios->c_cflag, baud);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *mvebu_uart_type(struct uart_port *port)
-@@ -735,9 +735,9 @@ static void mvebu_uart_console_write(str
- int locked = 1;
-
- if (oops_in_progress)
-- locked = spin_trylock_irqsave(&port->lock, flags);
-+ locked = uart_port_trylock_irqsave(port, &flags);
- else
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- ier = readl(port->membase + UART_CTRL(port)) & CTRL_BRK_INT;
- intr = readl(port->membase + UART_INTR(port)) &
-@@ -758,7 +758,7 @@ static void mvebu_uart_console_write(str
- }
-
- if (locked)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int mvebu_uart_console_setup(struct console *co, char *options)
diff --git a/debian/patches-rt/0127-proc-Add-nbcon-support-for-proc-consoles.patch b/debian/patches-rt/0043-proc-Add-nbcon-support-for-proc-consoles.patch
index 615ecb02a3..4e1b940659 100644
--- a/debian/patches-rt/0127-proc-Add-nbcon-support-for-proc-consoles.patch
+++ b/debian/patches-rt/0043-proc-Add-nbcon-support-for-proc-consoles.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Tue, 26 Sep 2023 13:31:00 +0000
-Subject: [PATCH 127/134] proc: Add nbcon support for /proc/consoles
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 43/50] proc: Add nbcon support for /proc/consoles
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Update /proc/consoles output to show 'W' if an nbcon write
callback is implemented (write_atomic or write_thread).
diff --git a/debian/patches-rt/0043-serial-omap-Use-port-lock-wrappers.patch b/debian/patches-rt/0043-serial-omap-Use-port-lock-wrappers.patch
deleted file mode 100644
index a79d6253c4..0000000000
--- a/debian/patches-rt/0043-serial-omap-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,180 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:00 +0206
-Subject: [PATCH 043/134] serial: omap: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-44-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/omap-serial.c | 38 +++++++++++++++++++-------------------
- 1 file changed, 19 insertions(+), 19 deletions(-)
-
---- a/drivers/tty/serial/omap-serial.c
-+++ b/drivers/tty/serial/omap-serial.c
-@@ -390,10 +390,10 @@ static void serial_omap_throttle(struct
- struct uart_omap_port *up = to_uart_omap_port(port);
- unsigned long flags;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- up->ier &= ~(UART_IER_RLSI | UART_IER_RDI);
- serial_out(up, UART_IER, up->ier);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static void serial_omap_unthrottle(struct uart_port *port)
-@@ -401,10 +401,10 @@ static void serial_omap_unthrottle(struc
- struct uart_omap_port *up = to_uart_omap_port(port);
- unsigned long flags;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- up->ier |= UART_IER_RLSI | UART_IER_RDI;
- serial_out(up, UART_IER, up->ier);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static unsigned int check_modem_status(struct uart_omap_port *up)
-@@ -527,7 +527,7 @@ static irqreturn_t serial_omap_irq(int i
- irqreturn_t ret = IRQ_NONE;
- int max_count = 256;
-
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
-
- do {
- iir = serial_in(up, UART_IIR);
-@@ -563,7 +563,7 @@ static irqreturn_t serial_omap_irq(int i
- }
- } while (max_count--);
-
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
-
- tty_flip_buffer_push(&up->port.state->port);
-
-@@ -579,9 +579,9 @@ static unsigned int serial_omap_tx_empty
- unsigned int ret = 0;
-
- dev_dbg(up->port.dev, "serial_omap_tx_empty+%d\n", up->port.line);
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0;
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- return ret;
- }
-@@ -647,13 +647,13 @@ static void serial_omap_break_ctl(struct
- unsigned long flags;
-
- dev_dbg(up->port.dev, "serial_omap_break_ctl+%d\n", up->port.line);
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- if (break_state == -1)
- up->lcr |= UART_LCR_SBC;
- else
- up->lcr &= ~UART_LCR_SBC;
- serial_out(up, UART_LCR, up->lcr);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static int serial_omap_startup(struct uart_port *port)
-@@ -701,13 +701,13 @@ static int serial_omap_startup(struct ua
- * Now, initialize the UART
- */
- serial_out(up, UART_LCR, UART_LCR_WLEN8);
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- /*
- * Most PC uarts need OUT2 raised to enable interrupts.
- */
- up->port.mctrl |= TIOCM_OUT2;
- serial_omap_set_mctrl(&up->port, up->port.mctrl);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- up->msr_saved_flags = 0;
- /*
-@@ -742,10 +742,10 @@ static void serial_omap_shutdown(struct
- up->ier = 0;
- serial_out(up, UART_IER, 0);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- up->port.mctrl &= ~TIOCM_OUT2;
- serial_omap_set_mctrl(&up->port, up->port.mctrl);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- /*
- * Disable break condition and FIFOs
-@@ -815,7 +815,7 @@ serial_omap_set_termios(struct uart_port
- * Ok, we're now changing the port state. Do it with
- * interrupts disabled.
- */
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- /*
- * Update the per-port timeout.
-@@ -1013,7 +1013,7 @@ serial_omap_set_termios(struct uart_port
-
- serial_omap_set_mctrl(&up->port, up->port.mctrl);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- dev_dbg(up->port.dev, "serial_omap_set_termios+%d\n", up->port.line);
- }
-
-@@ -1216,9 +1216,9 @@ serial_omap_console_write(struct console
- if (up->port.sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock(&up->port.lock);
-+ locked = uart_port_trylock(&up->port);
- else
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
-
- /*
- * First save the IER then disable the interrupts
-@@ -1245,7 +1245,7 @@ serial_omap_console_write(struct console
- check_modem_status(up);
-
- if (locked)
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
- local_irq_restore(flags);
- }
-
diff --git a/debian/patches-rt/0044-serial-owl-Use-port-lock-wrappers.patch b/debian/patches-rt/0044-serial-owl-Use-port-lock-wrappers.patch
deleted file mode 100644
index fd8dc75013..0000000000
--- a/debian/patches-rt/0044-serial-owl-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,147 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:01 +0206
-Subject: [PATCH 044/134] serial: owl: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-45-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/owl-uart.c | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
---- a/drivers/tty/serial/owl-uart.c
-+++ b/drivers/tty/serial/owl-uart.c
-@@ -125,12 +125,12 @@ static unsigned int owl_uart_tx_empty(st
- u32 val;
- unsigned int ret;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- val = owl_uart_read(port, OWL_UART_STAT);
- ret = (val & OWL_UART_STAT_TFES) ? TIOCSER_TEMT : 0;
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return ret;
- }
-@@ -232,7 +232,7 @@ static irqreturn_t owl_uart_irq(int irq,
- unsigned long flags;
- u32 stat;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- stat = owl_uart_read(port, OWL_UART_STAT);
-
-@@ -246,7 +246,7 @@ static irqreturn_t owl_uart_irq(int irq,
- stat |= OWL_UART_STAT_RIP | OWL_UART_STAT_TIP;
- owl_uart_write(port, stat, OWL_UART_STAT);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return IRQ_HANDLED;
- }
-@@ -256,14 +256,14 @@ static void owl_uart_shutdown(struct uar
- u32 val;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- val = owl_uart_read(port, OWL_UART_CTL);
- val &= ~(OWL_UART_CTL_TXIE | OWL_UART_CTL_RXIE
- | OWL_UART_CTL_TXDE | OWL_UART_CTL_RXDE | OWL_UART_CTL_EN);
- owl_uart_write(port, val, OWL_UART_CTL);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- free_irq(port->irq, port);
- }
-@@ -279,7 +279,7 @@ static int owl_uart_startup(struct uart_
- if (ret)
- return ret;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- val = owl_uart_read(port, OWL_UART_STAT);
- val |= OWL_UART_STAT_RIP | OWL_UART_STAT_TIP
-@@ -291,7 +291,7 @@ static int owl_uart_startup(struct uart_
- val |= OWL_UART_CTL_EN;
- owl_uart_write(port, val, OWL_UART_CTL);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return 0;
- }
-@@ -311,7 +311,7 @@ static void owl_uart_set_termios(struct
- u32 ctl;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- ctl = owl_uart_read(port, OWL_UART_CTL);
-
-@@ -371,7 +371,7 @@ static void owl_uart_set_termios(struct
-
- uart_update_timeout(port, termios->c_cflag, baud);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void owl_uart_release_port(struct uart_port *port)
-@@ -515,9 +515,9 @@ static void owl_uart_port_write(struct u
- if (port->sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock(&port->lock);
-+ locked = uart_port_trylock(port);
- else {
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- locked = 1;
- }
-
-@@ -541,7 +541,7 @@ static void owl_uart_port_write(struct u
- owl_uart_write(port, old_ctl, OWL_UART_CTL);
-
- if (locked)
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- local_irq_restore(flags);
- }
diff --git a/debian/patches-rt/0128-tty-sysfs-Add-nbcon-support-for-active.patch b/debian/patches-rt/0044-tty-sysfs-Add-nbcon-support-for-active.patch
index f8b285f432..e0cf557da2 100644
--- a/debian/patches-rt/0128-tty-sysfs-Add-nbcon-support-for-active.patch
+++ b/debian/patches-rt/0044-tty-sysfs-Add-nbcon-support-for-active.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Fri, 22 Sep 2023 14:31:09 +0000
-Subject: [PATCH 128/134] tty: sysfs: Add nbcon support for 'active'
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 44/50] tty: sysfs: Add nbcon support for 'active'
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Allow the 'active' attribute to list nbcon consoles.
@@ -13,7 +13,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
-@@ -3540,8 +3540,15 @@ static ssize_t show_cons_active(struct d
+@@ -3544,8 +3544,15 @@ static ssize_t show_cons_active(struct d
for_each_console(c) {
if (!c->device)
continue;
diff --git a/debian/patches-rt/0129-printk-nbcon-Provide-function-to-reacquire-ownership.patch b/debian/patches-rt/0045-printk-nbcon-Provide-function-to-reacquire-ownership.patch
index e878a4b1b7..98e303d30e 100644
--- a/debian/patches-rt/0129-printk-nbcon-Provide-function-to-reacquire-ownership.patch
+++ b/debian/patches-rt/0045-printk-nbcon-Provide-function-to-reacquire-ownership.patch
@@ -1,8 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Fri, 20 Oct 2023 10:01:58 +0000
-Subject: [PATCH 129/134] printk: nbcon: Provide function to reacquire
- ownership
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 45/50] printk: nbcon: Provide function to reacquire ownership
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Contexts may become nbcon owners for various reasons, not just
for printing. Indeed, the port->lock wrapper takes ownership
@@ -34,7 +33,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/include/linux/console.h
+++ b/include/linux/console.h
-@@ -474,12 +474,14 @@ extern void nbcon_cpu_emergency_exit(voi
+@@ -481,12 +481,14 @@ extern void nbcon_cpu_emergency_exit(voi
extern bool nbcon_can_proceed(struct nbcon_write_context *wctxt);
extern bool nbcon_enter_unsafe(struct nbcon_write_context *wctxt);
extern bool nbcon_exit_unsafe(struct nbcon_write_context *wctxt);
diff --git a/debian/patches-rt/0045-serial-pch-Use-port-lock-wrappers.patch b/debian/patches-rt/0045-serial-pch-Use-port-lock-wrappers.patch
deleted file mode 100644
index 6c4781cd09..0000000000
--- a/debian/patches-rt/0045-serial-pch-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:02 +0206
-Subject: [PATCH 045/134] serial: pch: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-46-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/pch_uart.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
---- a/drivers/tty/serial/pch_uart.c
-+++ b/drivers/tty/serial/pch_uart.c
-@@ -1347,7 +1347,7 @@ static void pch_uart_set_termios(struct
- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16);
-
- spin_lock_irqsave(&priv->lock, flags);
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- uart_update_timeout(port, termios->c_cflag, baud);
- rtn = pch_uart_hal_set_line(priv, baud, parity, bits, stb);
-@@ -1360,7 +1360,7 @@ static void pch_uart_set_termios(struct
- tty_termios_encode_baud_rate(termios, baud, baud);
-
- out:
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- spin_unlock_irqrestore(&priv->lock, flags);
- }
-
-@@ -1581,10 +1581,10 @@ pch_console_write(struct console *co, co
- port_locked = 0;
- } else if (oops_in_progress) {
- priv_locked = spin_trylock(&priv->lock);
-- port_locked = spin_trylock(&priv->port.lock);
-+ port_locked = uart_port_trylock(&priv->port);
- } else {
- spin_lock(&priv->lock);
-- spin_lock(&priv->port.lock);
-+ uart_port_lock(&priv->port);
- }
-
- /*
-@@ -1604,7 +1604,7 @@ pch_console_write(struct console *co, co
- iowrite8(ier, priv->membase + UART_IER);
-
- if (port_locked)
-- spin_unlock(&priv->port.lock);
-+ uart_port_unlock(&priv->port);
- if (priv_locked)
- spin_unlock(&priv->lock);
- local_irq_restore(flags);
diff --git a/debian/patches-rt/0130-serial-core-Provide-low-level-functions-to-port-lock.patch b/debian/patches-rt/0046-serial-core-Provide-low-level-functions-to-port-lock.patch
index e8e506fe52..b6c03021b1 100644
--- a/debian/patches-rt/0130-serial-core-Provide-low-level-functions-to-port-lock.patch
+++ b/debian/patches-rt/0046-serial-core-Provide-low-level-functions-to-port-lock.patch
@@ -1,8 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 11 Dec 2023 09:19:18 +0000
-Subject: [PATCH 130/134] serial: core: Provide low-level functions to port
- lock
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 46/50] serial: core: Provide low-level functions to port lock
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The nbcon console's driver_enter() and driver_exit() callbacks need
to lock the port lock in order to synchronize against other hardware
diff --git a/debian/patches-rt/0046-serial-pic32-Use-port-lock-wrappers.patch b/debian/patches-rt/0046-serial-pic32-Use-port-lock-wrappers.patch
deleted file mode 100644
index 7cb8da7d86..0000000000
--- a/debian/patches-rt/0046-serial-pic32-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,118 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:03 +0206
-Subject: [PATCH 046/134] serial: pic32: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-47-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/pic32_uart.c | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
---- a/drivers/tty/serial/pic32_uart.c
-+++ b/drivers/tty/serial/pic32_uart.c
-@@ -243,7 +243,7 @@ static void pic32_uart_break_ctl(struct
- struct pic32_sport *sport = to_pic32_sport(port);
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- if (ctl)
- pic32_uart_writel(sport, PIC32_SET(PIC32_UART_STA),
-@@ -252,7 +252,7 @@ static void pic32_uart_break_ctl(struct
- pic32_uart_writel(sport, PIC32_CLR(PIC32_UART_STA),
- PIC32_UART_STA_UTXBRK);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /* get port type in string format */
-@@ -274,7 +274,7 @@ static void pic32_uart_do_rx(struct uart
- */
- max_count = PIC32_UART_RX_FIFO_DEPTH;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- tty = &port->state->port;
-
-@@ -331,7 +331,7 @@ static void pic32_uart_do_rx(struct uart
-
- } while (--max_count);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- tty_flip_buffer_push(tty);
- }
-@@ -410,9 +410,9 @@ static irqreturn_t pic32_uart_tx_interru
- struct uart_port *port = dev_id;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- pic32_uart_do_tx(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return IRQ_HANDLED;
- }
-@@ -580,9 +580,9 @@ static void pic32_uart_shutdown(struct u
- unsigned long flags;
-
- /* disable uart */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- pic32_uart_dsbl_and_mask(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- clk_disable_unprepare(sport->clk);
-
- /* free all 3 interrupts for this UART */
-@@ -604,7 +604,7 @@ static void pic32_uart_set_termios(struc
- unsigned int quot;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* disable uart and mask all interrupts while changing speed */
- pic32_uart_dsbl_and_mask(port);
-@@ -672,7 +672,7 @@ static void pic32_uart_set_termios(struc
- /* enable uart */
- pic32_uart_en_and_unmask(port);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /* serial core request to claim uart iomem */
diff --git a/debian/patches-rt/0131-serial-8250-Switch-to-nbcon-console.patch b/debian/patches-rt/0047-serial-8250-Switch-to-nbcon-console.patch
index 7ba577d9c4..015a996d2c 100644
--- a/debian/patches-rt/0131-serial-8250-Switch-to-nbcon-console.patch
+++ b/debian/patches-rt/0047-serial-8250-Switch-to-nbcon-console.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Wed, 13 Sep 2023 15:30:36 +0000
-Subject: [PATCH 131/134] serial: 8250: Switch to nbcon console
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 47/50] serial: 8250: Switch to nbcon console
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Implement the necessary callbacks to switch the 8250 console driver
to perform as an nbcon console.
@@ -92,7 +92,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
};
--- a/drivers/tty/serial/8250/8250_port.c
+++ b/drivers/tty/serial/8250/8250_port.c
-@@ -557,6 +557,11 @@ static int serial8250_em485_init(struct
+@@ -550,6 +550,11 @@ static int serial8250_em485_init(struct
if (!p->em485)
return -ENOMEM;
@@ -104,7 +104,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
hrtimer_init(&p->em485->stop_tx_timer, CLOCK_MONOTONIC,
HRTIMER_MODE_REL);
hrtimer_init(&p->em485->start_tx_timer, CLOCK_MONOTONIC,
-@@ -709,7 +714,11 @@ static void serial8250_set_sleep(struct
+@@ -702,7 +707,11 @@ static void serial8250_set_sleep(struct
serial8250_rpm_put(p);
}
@@ -117,7 +117,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
{
if (up->capabilities & UART_CAP_UUE)
serial_out(up, UART_IER, UART_IER_UUE);
-@@ -717,6 +726,11 @@ static void serial8250_clear_IER(struct
+@@ -710,6 +719,11 @@ static void serial8250_clear_IER(struct
serial_out(up, UART_IER, 0);
}
@@ -129,7 +129,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
#ifdef CONFIG_SERIAL_8250_RSA
/*
* Attempts to turn on the RSA FIFO. Returns zero on failure.
-@@ -3328,6 +3342,11 @@ static void serial8250_console_putchar(s
+@@ -3320,6 +3334,11 @@ static void serial8250_console_putchar(s
wait_for_xmitr(up, UART_LSR_THRE);
serial_port_out(port, UART_TX, ch);
@@ -141,7 +141,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
/*
-@@ -3356,6 +3375,7 @@ static void serial8250_console_restore(s
+@@ -3348,6 +3367,7 @@ static void serial8250_console_restore(s
serial8250_out_MCR(up, up->mcr | UART_MCR_DTR | UART_MCR_RTS);
}
@@ -149,7 +149,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/*
* Print a string to the serial port using the device FIFO
*
-@@ -3414,7 +3434,7 @@ void serial8250_console_write(struct uar
+@@ -3406,7 +3426,7 @@ void serial8250_console_write(struct uar
* First save the IER then disable the interrupts
*/
ier = serial_port_in(port, UART_IER);
@@ -158,7 +158,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/* check scratch reg to see if port powered off during system sleep */
if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) {
-@@ -3480,6 +3500,135 @@ void serial8250_console_write(struct uar
+@@ -3472,6 +3492,135 @@ void serial8250_console_write(struct uar
if (locked)
uart_port_unlock_irqrestore(port, flags);
}
@@ -294,7 +294,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
static unsigned int probe_baud(struct uart_port *port)
{
-@@ -3498,6 +3647,7 @@ static unsigned int probe_baud(struct ua
+@@ -3490,6 +3639,7 @@ static unsigned int probe_baud(struct ua
int serial8250_console_setup(struct uart_port *port, char *options, bool probe)
{
@@ -302,7 +302,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
int baud = 9600;
int bits = 8;
int parity = 'n';
-@@ -3507,6 +3657,8 @@ int serial8250_console_setup(struct uart
+@@ -3499,6 +3649,8 @@ int serial8250_console_setup(struct uart
if (!port->iobase && !port->membase)
return -ENODEV;
diff --git a/debian/patches-rt/0047-serial-pmac_zilog-Use-port-lock-wrappers.patch b/debian/patches-rt/0047-serial-pmac_zilog-Use-port-lock-wrappers.patch
deleted file mode 100644
index e4a81157e1..0000000000
--- a/debian/patches-rt/0047-serial-pmac_zilog-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,232 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:04 +0206
-Subject: [PATCH 047/134] serial: pmac_zilog: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-48-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/pmac_zilog.c | 52 ++++++++++++++++++++--------------------
- 1 file changed, 26 insertions(+), 26 deletions(-)
-
---- a/drivers/tty/serial/pmac_zilog.c
-+++ b/drivers/tty/serial/pmac_zilog.c
-@@ -246,9 +246,9 @@ static bool pmz_receive_chars(struct uar
- #endif /* USE_CTRL_O_SYSRQ */
- if (uap->port.sysrq) {
- int swallow;
-- spin_unlock(&uap->port.lock);
-+ uart_port_unlock(&uap->port);
- swallow = uart_handle_sysrq_char(&uap->port, ch);
-- spin_lock(&uap->port.lock);
-+ uart_port_lock(&uap->port);
- if (swallow)
- goto next_char;
- }
-@@ -435,7 +435,7 @@ static irqreturn_t pmz_interrupt(int irq
- uap_a = pmz_get_port_A(uap);
- uap_b = uap_a->mate;
-
-- spin_lock(&uap_a->port.lock);
-+ uart_port_lock(&uap_a->port);
- r3 = read_zsreg(uap_a, R3);
-
- /* Channel A */
-@@ -456,14 +456,14 @@ static irqreturn_t pmz_interrupt(int irq
- rc = IRQ_HANDLED;
- }
- skip_a:
-- spin_unlock(&uap_a->port.lock);
-+ uart_port_unlock(&uap_a->port);
- if (push)
- tty_flip_buffer_push(&uap->port.state->port);
-
- if (!uap_b)
- goto out;
-
-- spin_lock(&uap_b->port.lock);
-+ uart_port_lock(&uap_b->port);
- push = false;
- if (r3 & (CHBEXT | CHBTxIP | CHBRxIP)) {
- if (!ZS_IS_OPEN(uap_b)) {
-@@ -481,7 +481,7 @@ static irqreturn_t pmz_interrupt(int irq
- rc = IRQ_HANDLED;
- }
- skip_b:
-- spin_unlock(&uap_b->port.lock);
-+ uart_port_unlock(&uap_b->port);
- if (push)
- tty_flip_buffer_push(&uap->port.state->port);
-
-@@ -497,9 +497,9 @@ static inline u8 pmz_peek_status(struct
- unsigned long flags;
- u8 status;
-
-- spin_lock_irqsave(&uap->port.lock, flags);
-+ uart_port_lock_irqsave(&uap->port, &flags);
- status = read_zsreg(uap, R0);
-- spin_unlock_irqrestore(&uap->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uap->port, flags);
-
- return status;
- }
-@@ -685,7 +685,7 @@ static void pmz_break_ctl(struct uart_po
- else
- clear_bits |= SND_BRK;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- new_reg = (uap->curregs[R5] | set_bits) & ~clear_bits;
- if (new_reg != uap->curregs[R5]) {
-@@ -693,7 +693,7 @@ static void pmz_break_ctl(struct uart_po
- write_zsreg(uap, R5, uap->curregs[R5]);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- #ifdef CONFIG_PPC_PMAC
-@@ -865,18 +865,18 @@ static void pmz_irda_reset(struct uart_p
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&uap->port.lock, flags);
-+ uart_port_lock_irqsave(&uap->port, &flags);
- uap->curregs[R5] |= DTR;
- write_zsreg(uap, R5, uap->curregs[R5]);
- zssync(uap);
-- spin_unlock_irqrestore(&uap->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uap->port, flags);
- msleep(110);
-
-- spin_lock_irqsave(&uap->port.lock, flags);
-+ uart_port_lock_irqsave(&uap->port, &flags);
- uap->curregs[R5] &= ~DTR;
- write_zsreg(uap, R5, uap->curregs[R5]);
- zssync(uap);
-- spin_unlock_irqrestore(&uap->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uap->port, flags);
- msleep(10);
- }
-
-@@ -896,9 +896,9 @@ static int pmz_startup(struct uart_port
- * initialize the chip
- */
- if (!ZS_IS_CONS(uap)) {
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- pwr_delay = __pmz_startup(uap);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
- sprintf(uap->irq_name, PMACZILOG_NAME"%d", uap->port.line);
- if (request_irq(uap->port.irq, pmz_interrupt, IRQF_SHARED,
-@@ -921,9 +921,9 @@ static int pmz_startup(struct uart_port
- pmz_irda_reset(uap);
-
- /* Enable interrupt requests for the channel */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- pmz_interrupt_control(uap, 1);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return 0;
- }
-@@ -933,7 +933,7 @@ static void pmz_shutdown(struct uart_por
- struct uart_pmac_port *uap = to_pmz(port);
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Disable interrupt requests for the channel */
- pmz_interrupt_control(uap, 0);
-@@ -948,19 +948,19 @@ static void pmz_shutdown(struct uart_por
- pmz_maybe_update_regs(uap);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- /* Release interrupt handler */
- free_irq(uap->port.irq, uap);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- uap->flags &= ~PMACZILOG_FLAG_IS_OPEN;
-
- if (!ZS_IS_CONS(uap))
- pmz_set_scc_power(uap, 0); /* Shut the chip down */
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /* Shared by TTY driver and serial console setup. The port lock is held
-@@ -1247,7 +1247,7 @@ static void pmz_set_termios(struct uart_
- struct uart_pmac_port *uap = to_pmz(port);
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Disable IRQs on the port */
- pmz_interrupt_control(uap, 0);
-@@ -1259,7 +1259,7 @@ static void pmz_set_termios(struct uart_
- if (ZS_IS_OPEN(uap))
- pmz_interrupt_control(uap, 1);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *pmz_type(struct uart_port *port)
-@@ -1896,7 +1896,7 @@ static void pmz_console_write(struct con
- struct uart_pmac_port *uap = &pmz_ports[con->index];
- unsigned long flags;
-
-- spin_lock_irqsave(&uap->port.lock, flags);
-+ uart_port_lock_irqsave(&uap->port, &flags);
-
- /* Turn of interrupts and enable the transmitter. */
- write_zsreg(uap, R1, uap->curregs[1] & ~TxINT_ENAB);
-@@ -1908,7 +1908,7 @@ static void pmz_console_write(struct con
- write_zsreg(uap, R1, uap->curregs[1]);
- /* Don't disable the transmitter. */
-
-- spin_unlock_irqrestore(&uap->port.lock, flags);
-+ uart_port_unlock_irqrestore(&uap->port, flags);
- }
-
- /*
diff --git a/debian/patches-rt/0132-printk-Add-kthread-for-all-legacy-consoles.patch b/debian/patches-rt/0048-printk-Add-kthread-for-all-legacy-consoles.patch
index 7c46be7133..73a0c337be 100644
--- a/debian/patches-rt/0132-printk-Add-kthread-for-all-legacy-consoles.patch
+++ b/debian/patches-rt/0048-printk-Add-kthread-for-all-legacy-consoles.patch
@@ -1,7 +1,7 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Fri, 22 Sep 2023 17:35:04 +0000
-Subject: [PATCH 132/134] printk: Add kthread for all legacy consoles
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 48/50] printk: Add kthread for all legacy consoles
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The write callback of legacy consoles make use of spinlocks.
This is not permitted with PREEMPT_RT in atomic contexts.
@@ -85,7 +85,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/* All 3 protected by @syslog_lock. */
/* the next printk record to read by syslog(READ) or /proc/kmsg */
static u64 syslog_seq;
-@@ -2345,7 +2348,8 @@ asmlinkage int vprintk_emit(int facility
+@@ -2344,7 +2347,8 @@ asmlinkage int vprintk_emit(int facility
const struct dev_printk_info *dev_info,
const char *fmt, va_list args)
{
@@ -95,7 +95,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
int printed_len;
/* Suppress unimportant messages after panic happens */
-@@ -2473,6 +2477,14 @@ EXPORT_SYMBOL(_printk);
+@@ -2472,6 +2476,14 @@ EXPORT_SYMBOL(_printk);
static bool pr_flush(int timeout_ms, bool reset_on_progress);
static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progress);
@@ -110,7 +110,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
#else /* CONFIG_PRINTK */
#define printk_time false
-@@ -2486,6 +2498,8 @@ static u64 syslog_seq;
+@@ -2485,6 +2497,8 @@ static u64 syslog_seq;
static bool pr_flush(int timeout_ms, bool reset_on_progress) { return true; }
static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progress) { return true; }
@@ -119,7 +119,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
#endif /* CONFIG_PRINTK */
#ifdef CONFIG_EARLY_PRINTK
-@@ -2723,6 +2737,8 @@ void resume_console(void)
+@@ -2730,6 +2744,8 @@ void resume_console(void)
}
console_srcu_read_unlock(cookie);
@@ -128,7 +128,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
pr_flush(1000, true);
}
-@@ -2737,7 +2753,8 @@ void resume_console(void)
+@@ -2744,7 +2760,8 @@ void resume_console(void)
*/
static int console_cpu_notify(unsigned int cpu)
{
@@ -138,7 +138,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/* If trylock fails, someone else is doing the printing */
if (console_trylock())
console_unlock();
-@@ -2962,31 +2979,43 @@ static bool console_emit_next_record(str
+@@ -2969,31 +2986,43 @@ static bool console_emit_next_record(str
con->dropped = 0;
}
@@ -202,7 +202,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
skip:
return true;
}
-@@ -3096,19 +3125,7 @@ static bool console_flush_all(bool do_co
+@@ -3103,19 +3132,7 @@ static bool console_flush_all(bool do_co
return false;
}
@@ -223,7 +223,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
{
bool do_cond_resched;
bool handover;
-@@ -3152,6 +3169,32 @@ void console_unlock(void)
+@@ -3159,6 +3176,32 @@ void console_unlock(void)
*/
} while (prb_read_valid(prb, next_seq, NULL) && console_trylock());
}
@@ -256,7 +256,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
EXPORT_SYMBOL(console_unlock);
/**
-@@ -3361,11 +3404,106 @@ void console_start(struct console *conso
+@@ -3368,11 +3411,106 @@ void console_start(struct console *conso
if (flags & CON_NBCON)
nbcon_kthread_wake(console);
@@ -363,7 +363,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
static int __read_mostly keep_bootcon;
static int __init keep_bootcon_setup(char *str)
-@@ -3632,6 +3770,7 @@ void register_console(struct console *ne
+@@ -3639,6 +3777,7 @@ void register_console(struct console *ne
nbcon_init(newcon);
} else {
have_legacy_console = true;
@@ -371,7 +371,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
if (newcon->flags & CON_BOOT)
-@@ -3770,6 +3909,13 @@ static int unregister_console_locked(str
+@@ -3777,6 +3916,13 @@ static int unregister_console_locked(str
nbcon_kthread_create(c);
}
@@ -385,7 +385,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
return res;
}
-@@ -3929,8 +4075,12 @@ static bool __pr_flush(struct console *c
+@@ -3936,8 +4082,12 @@ static bool __pr_flush(struct console *c
seq = prb_next_reserve_seq(prb);
@@ -400,7 +400,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
console_lock();
console_unlock();
}
-@@ -4038,9 +4188,16 @@ static void wake_up_klogd_work_func(stru
+@@ -4045,9 +4195,16 @@ static void wake_up_klogd_work_func(stru
int pending = this_cpu_xchg(printk_pending, 0);
if (pending & PRINTK_PENDING_OUTPUT) {
diff --git a/debian/patches-rt/0048-serial-pxa-Use-port-lock-wrappers.patch b/debian/patches-rt/0048-serial-pxa-Use-port-lock-wrappers.patch
deleted file mode 100644
index b0df211b6f..0000000000
--- a/debian/patches-rt/0048-serial-pxa-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:05 +0206
-Subject: [PATCH 048/134] serial: pxa: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-49-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/pxa.c | 30 +++++++++++++++---------------
- 1 file changed, 15 insertions(+), 15 deletions(-)
-
---- a/drivers/tty/serial/pxa.c
-+++ b/drivers/tty/serial/pxa.c
-@@ -225,14 +225,14 @@ static inline irqreturn_t serial_pxa_irq
- iir = serial_in(up, UART_IIR);
- if (iir & UART_IIR_NO_INT)
- return IRQ_NONE;
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
- lsr = serial_in(up, UART_LSR);
- if (lsr & UART_LSR_DR)
- receive_chars(up, &lsr);
- check_modem_status(up);
- if (lsr & UART_LSR_THRE)
- transmit_chars(up);
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
- return IRQ_HANDLED;
- }
-
-@@ -242,9 +242,9 @@ static unsigned int serial_pxa_tx_empty(
- unsigned long flags;
- unsigned int ret;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0;
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- return ret;
- }
-@@ -295,13 +295,13 @@ static void serial_pxa_break_ctl(struct
- struct uart_pxa_port *up = (struct uart_pxa_port *)port;
- unsigned long flags;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- if (break_state == -1)
- up->lcr |= UART_LCR_SBC;
- else
- up->lcr &= ~UART_LCR_SBC;
- serial_out(up, UART_LCR, up->lcr);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static int serial_pxa_startup(struct uart_port *port)
-@@ -346,10 +346,10 @@ static int serial_pxa_startup(struct uar
- */
- serial_out(up, UART_LCR, UART_LCR_WLEN8);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- up->port.mctrl |= TIOCM_OUT2;
- serial_pxa_set_mctrl(&up->port, up->port.mctrl);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- /*
- * Finally, enable interrupts. Note: Modem status interrupts
-@@ -383,10 +383,10 @@ static void serial_pxa_shutdown(struct u
- up->ier = 0;
- serial_out(up, UART_IER, 0);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- up->port.mctrl &= ~TIOCM_OUT2;
- serial_pxa_set_mctrl(&up->port, up->port.mctrl);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- /*
- * Disable break condition and FIFOs
-@@ -434,7 +434,7 @@ serial_pxa_set_termios(struct uart_port
- * Ok, we're now changing the port state. Do it with
- * interrupts disabled.
- */
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- /*
- * Ensure the port will be enabled.
-@@ -504,7 +504,7 @@ serial_pxa_set_termios(struct uart_port
- up->lcr = cval; /* Save LCR */
- serial_pxa_set_mctrl(&up->port, up->port.mctrl);
- serial_out(up, UART_FCR, fcr);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static void
-@@ -608,9 +608,9 @@ serial_pxa_console_write(struct console
- if (up->port.sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock(&up->port.lock);
-+ locked = uart_port_trylock(&up->port);
- else
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
-
- /*
- * First save the IER then disable the interrupts
-@@ -628,7 +628,7 @@ serial_pxa_console_write(struct console
- serial_out(up, UART_IER, ier);
-
- if (locked)
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
- local_irq_restore(flags);
- clk_disable(up->clk);
-
diff --git a/debian/patches-rt/0133-serial-8250-revert-drop-lockdep-annotation-from-seri.patch b/debian/patches-rt/0049-serial-8250-revert-drop-lockdep-annotation-from-seri.patch
index c9eba0a738..1be252903e 100644
--- a/debian/patches-rt/0133-serial-8250-revert-drop-lockdep-annotation-from-seri.patch
+++ b/debian/patches-rt/0049-serial-8250-revert-drop-lockdep-annotation-from-seri.patch
@@ -1,8 +1,8 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 2 Oct 2023 15:30:43 +0000
-Subject: [PATCH 133/134] serial: 8250: revert "drop lockdep annotation from
+Subject: [PATCH 49/50] serial: 8250: revert "drop lockdep annotation from
serial8250_clear_IER()"
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The 8250 driver no longer depends on @oops_in_progress and
will no longer violate the port->lock locking constraints.
@@ -17,7 +17,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/drivers/tty/serial/8250/8250_port.c
+++ b/drivers/tty/serial/8250/8250_port.c
-@@ -728,6 +728,9 @@ static void __serial8250_clear_IER(struc
+@@ -721,6 +721,9 @@ static void __serial8250_clear_IER(struc
static inline void serial8250_clear_IER(struct uart_8250_port *up)
{
diff --git a/debian/patches-rt/0049-serial-qcom-geni-Use-port-lock-wrappers.patch b/debian/patches-rt/0049-serial-qcom-geni-Use-port-lock-wrappers.patch
deleted file mode 100644
index 4f1bc6a1cb..0000000000
--- a/debian/patches-rt/0049-serial-qcom-geni-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:06 +0206
-Subject: [PATCH 049/134] serial: qcom-geni: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Reviewed-by: Bjorn Andersson <quic_bjorande@quicinc.com>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-50-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/qcom_geni_serial.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/tty/serial/qcom_geni_serial.c
-+++ b/drivers/tty/serial/qcom_geni_serial.c
-@@ -482,9 +482,9 @@ static void qcom_geni_serial_console_wri
-
- uport = &port->uport;
- if (oops_in_progress)
-- locked = spin_trylock_irqsave(&uport->lock, flags);
-+ locked = uart_port_trylock_irqsave(uport, &flags);
- else
-- spin_lock_irqsave(&uport->lock, flags);
-+ uart_port_lock_irqsave(uport, &flags);
-
- geni_status = readl(uport->membase + SE_GENI_STATUS);
-
-@@ -520,7 +520,7 @@ static void qcom_geni_serial_console_wri
- qcom_geni_serial_setup_tx(uport, port->tx_remaining);
-
- if (locked)
-- spin_unlock_irqrestore(&uport->lock, flags);
-+ uart_port_unlock_irqrestore(uport, flags);
- }
-
- static void handle_rx_console(struct uart_port *uport, u32 bytes, bool drop)
-@@ -970,7 +970,7 @@ static irqreturn_t qcom_geni_serial_isr(
- if (uport->suspended)
- return IRQ_NONE;
-
-- spin_lock(&uport->lock);
-+ uart_port_lock(uport);
-
- m_irq_status = readl(uport->membase + SE_GENI_M_IRQ_STATUS);
- s_irq_status = readl(uport->membase + SE_GENI_S_IRQ_STATUS);
diff --git a/debian/patches-rt/0134-printk-Avoid-false-positive-lockdep-report-for-legac.patch b/debian/patches-rt/0050-printk-Avoid-false-positive-lockdep-report-for-legac.patch
index 225e8db694..7c9f453664 100644
--- a/debian/patches-rt/0134-printk-Avoid-false-positive-lockdep-report-for-legac.patch
+++ b/debian/patches-rt/0050-printk-Avoid-false-positive-lockdep-report-for-legac.patch
@@ -1,8 +1,8 @@
From: John Ogness <john.ogness@linutronix.de>
Date: Mon, 11 Dec 2023 09:34:16 +0000
-Subject: [PATCH 134/134] printk: Avoid false positive lockdep report for
- legacy driver.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Subject: [PATCH 50/50] printk: Avoid false positive lockdep report for legacy
+ driver.
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
printk may invoke the legacy console driver from atomic context. This leads to
a lockdep splat because the console driver will acquire a sleeping lock and the
@@ -23,7 +23,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -2817,6 +2817,8 @@ static void __console_unlock(void)
+@@ -2824,6 +2824,8 @@ static void __console_unlock(void)
up_console_sem();
}
@@ -32,7 +32,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
#ifdef CONFIG_PRINTK
/*
-@@ -2985,7 +2987,7 @@ static bool console_emit_next_record(str
+@@ -2992,7 +2994,7 @@ static bool console_emit_next_record(str
/*
* On PREEMPT_RT this function is either in a thread or
* panic context. So there is no need for concern about
@@ -41,7 +41,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
*/
con->write(con, outbuf, pmsg.outbuf_len);
-@@ -3007,7 +3009,9 @@ static bool console_emit_next_record(str
+@@ -3014,7 +3016,9 @@ static bool console_emit_next_record(str
/* Do not trace print latency. */
stop_critical_timings();
@@ -51,7 +51,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
start_critical_timings();
-@@ -3084,7 +3088,10 @@ static bool console_flush_all(bool do_co
+@@ -3091,7 +3095,10 @@ static bool console_flush_all(bool do_co
any_usable = true;
if (flags & CON_NBCON) {
diff --git a/debian/patches-rt/0050-serial-rda-Use-port-lock-wrappers.patch b/debian/patches-rt/0050-serial-rda-Use-port-lock-wrappers.patch
deleted file mode 100644
index 6d51972bcd..0000000000
--- a/debian/patches-rt/0050-serial-rda-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,177 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:07 +0206
-Subject: [PATCH 050/134] serial: rda: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-51-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/rda-uart.c | 34 +++++++++++++++++-----------------
- 1 file changed, 17 insertions(+), 17 deletions(-)
-
---- a/drivers/tty/serial/rda-uart.c
-+++ b/drivers/tty/serial/rda-uart.c
-@@ -139,12 +139,12 @@ static unsigned int rda_uart_tx_empty(st
- unsigned int ret;
- u32 val;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- val = rda_uart_read(port, RDA_UART_STATUS);
- ret = (val & RDA_UART_TX_FIFO_MASK) ? TIOCSER_TEMT : 0;
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return ret;
- }
-@@ -246,7 +246,7 @@ static void rda_uart_set_termios(struct
- unsigned int baud;
- u32 irq_mask;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- baud = uart_get_baud_rate(port, termios, old, 9600, port->uartclk / 4);
- rda_uart_change_baudrate(rda_port, baud);
-@@ -325,7 +325,7 @@ static void rda_uart_set_termios(struct
- /* update the per-port timeout */
- uart_update_timeout(port, termios->c_cflag, baud);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void rda_uart_send_chars(struct uart_port *port)
-@@ -408,7 +408,7 @@ static irqreturn_t rda_interrupt(int irq
- unsigned long flags;
- u32 val, irq_mask;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Clear IRQ cause */
- val = rda_uart_read(port, RDA_UART_IRQ_CAUSE);
-@@ -425,7 +425,7 @@ static irqreturn_t rda_interrupt(int irq
- rda_uart_send_chars(port);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return IRQ_HANDLED;
- }
-@@ -436,16 +436,16 @@ static int rda_uart_startup(struct uart_
- int ret;
- u32 val;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- rda_uart_write(port, 0, RDA_UART_IRQ_MASK);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- ret = request_irq(port->irq, rda_interrupt, IRQF_NO_SUSPEND,
- "rda-uart", port);
- if (ret)
- return ret;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- val = rda_uart_read(port, RDA_UART_CTRL);
- val |= RDA_UART_ENABLE;
-@@ -456,7 +456,7 @@ static int rda_uart_startup(struct uart_
- val |= (RDA_UART_RX_DATA_AVAILABLE | RDA_UART_RX_TIMEOUT);
- rda_uart_write(port, val, RDA_UART_IRQ_MASK);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return 0;
- }
-@@ -466,7 +466,7 @@ static void rda_uart_shutdown(struct uar
- unsigned long flags;
- u32 val;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- rda_uart_stop_tx(port);
- rda_uart_stop_rx(port);
-@@ -475,7 +475,7 @@ static void rda_uart_shutdown(struct uar
- val &= ~RDA_UART_ENABLE;
- rda_uart_write(port, val, RDA_UART_CTRL);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *rda_uart_type(struct uart_port *port)
-@@ -515,7 +515,7 @@ static void rda_uart_config_port(struct
- rda_uart_request_port(port);
- }
-
-- spin_lock_irqsave(&port->lock, irq_flags);
-+ uart_port_lock_irqsave(port, &irq_flags);
-
- /* Clear mask, so no surprise interrupts. */
- rda_uart_write(port, 0, RDA_UART_IRQ_MASK);
-@@ -523,7 +523,7 @@ static void rda_uart_config_port(struct
- /* Clear status register */
- rda_uart_write(port, 0, RDA_UART_STATUS);
-
-- spin_unlock_irqrestore(&port->lock, irq_flags);
-+ uart_port_unlock_irqrestore(port, irq_flags);
- }
-
- static void rda_uart_release_port(struct uart_port *port)
-@@ -597,9 +597,9 @@ static void rda_uart_port_write(struct u
- if (port->sysrq) {
- locked = 0;
- } else if (oops_in_progress) {
-- locked = spin_trylock(&port->lock);
-+ locked = uart_port_trylock(port);
- } else {
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- locked = 1;
- }
-
-@@ -615,7 +615,7 @@ static void rda_uart_port_write(struct u
- rda_uart_write(port, old_irq_mask, RDA_UART_IRQ_MASK);
-
- if (locked)
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- local_irq_restore(flags);
- }
diff --git a/debian/patches-rt/0051-serial-rp2-Use-port-lock-wrappers.patch b/debian/patches-rt/0051-serial-rp2-Use-port-lock-wrappers.patch
deleted file mode 100644
index e2009ff4c6..0000000000
--- a/debian/patches-rt/0051-serial-rp2-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:08 +0206
-Subject: [PATCH 051/134] serial: rp2: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-52-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/rp2.c | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
---- a/drivers/tty/serial/rp2.c
-+++ b/drivers/tty/serial/rp2.c
-@@ -276,9 +276,9 @@ static unsigned int rp2_uart_tx_empty(st
- * But the TXEMPTY bit doesn't seem to work unless the TX IRQ is
- * enabled.
- */
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- tx_fifo_bytes = readw(up->base + RP2_TX_FIFO_COUNT);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- return tx_fifo_bytes ? 0 : TIOCSER_TEMT;
- }
-@@ -323,10 +323,10 @@ static void rp2_uart_break_ctl(struct ua
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- rp2_rmw(port_to_up(port), RP2_TXRX_CTL, RP2_TXRX_CTL_BREAK_m,
- break_state ? RP2_TXRX_CTL_BREAK_m : 0);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void rp2_uart_enable_ms(struct uart_port *port)
-@@ -383,7 +383,7 @@ static void rp2_uart_set_termios(struct
- if (tty_termios_baud_rate(new))
- tty_termios_encode_baud_rate(new, baud, baud);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* ignore all characters if CREAD is not set */
- port->ignore_status_mask = (new->c_cflag & CREAD) ? 0 : RP2_DUMMY_READ;
-@@ -391,7 +391,7 @@ static void rp2_uart_set_termios(struct
- __rp2_uart_set_termios(up, new->c_cflag, new->c_iflag, baud_div);
- uart_update_timeout(port, new->c_cflag, baud);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void rp2_rx_chars(struct rp2_uart_port *up)
-@@ -440,7 +440,7 @@ static void rp2_ch_interrupt(struct rp2_
- {
- u32 status;
-
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
-
- /*
- * The IRQ status bits are clear-on-write. Other status bits in
-@@ -456,7 +456,7 @@ static void rp2_ch_interrupt(struct rp2_
- if (status & RP2_CHAN_STAT_MS_CHANGED_MASK)
- wake_up_interruptible(&up->port.state->port.delta_msr_wait);
-
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
- }
-
- static int rp2_asic_interrupt(struct rp2_card *card, unsigned int asic_id)
-@@ -516,10 +516,10 @@ static void rp2_uart_shutdown(struct uar
-
- rp2_uart_break_ctl(port, 0);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- rp2_mask_ch_irq(up, up->idx, 0);
- rp2_rmw(up, RP2_CHAN_STAT, 0, 0);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *rp2_uart_type(struct uart_port *port)
diff --git a/debian/patches-rt/0052-serial-sa1100-Use-port-lock-wrappers.patch b/debian/patches-rt/0052-serial-sa1100-Use-port-lock-wrappers.patch
deleted file mode 100644
index 2f8073a485..0000000000
--- a/debian/patches-rt/0052-serial-sa1100-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:09 +0206
-Subject: [PATCH 052/134] serial: sa1100: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-53-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/sa1100.c | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
---- a/drivers/tty/serial/sa1100.c
-+++ b/drivers/tty/serial/sa1100.c
-@@ -115,9 +115,9 @@ static void sa1100_timeout(struct timer_
- unsigned long flags;
-
- if (sport->port.state) {
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- sa1100_mctrl_check(sport);
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
-
- mod_timer(&sport->timer, jiffies + MCTRL_TIMEOUT);
- }
-@@ -247,7 +247,7 @@ static irqreturn_t sa1100_int(int irq, v
- struct sa1100_port *sport = dev_id;
- unsigned int status, pass_counter = 0;
-
-- spin_lock(&sport->port.lock);
-+ uart_port_lock(&sport->port);
- status = UART_GET_UTSR0(sport);
- status &= SM_TO_UTSR0(sport->port.read_status_mask) | ~UTSR0_TFS;
- do {
-@@ -276,7 +276,7 @@ static irqreturn_t sa1100_int(int irq, v
- status &= SM_TO_UTSR0(sport->port.read_status_mask) |
- ~UTSR0_TFS;
- } while (status & (UTSR0_TFS | UTSR0_RFS | UTSR0_RID));
-- spin_unlock(&sport->port.lock);
-+ uart_port_unlock(&sport->port);
-
- return IRQ_HANDLED;
- }
-@@ -321,14 +321,14 @@ static void sa1100_break_ctl(struct uart
- unsigned long flags;
- unsigned int utcr3;
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
- utcr3 = UART_GET_UTCR3(sport);
- if (break_state == -1)
- utcr3 |= UTCR3_BRK;
- else
- utcr3 &= ~UTCR3_BRK;
- UART_PUT_UTCR3(sport, utcr3);
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- static int sa1100_startup(struct uart_port *port)
-@@ -354,9 +354,9 @@ static int sa1100_startup(struct uart_po
- /*
- * Enable modem status interrupts
- */
-- spin_lock_irq(&sport->port.lock);
-+ uart_port_lock_irq(&sport->port);
- sa1100_enable_ms(&sport->port);
-- spin_unlock_irq(&sport->port.lock);
-+ uart_port_unlock_irq(&sport->port);
-
- return 0;
- }
-@@ -423,7 +423,7 @@ sa1100_set_termios(struct uart_port *por
-
- del_timer_sync(&sport->timer);
-
-- spin_lock_irqsave(&sport->port.lock, flags);
-+ uart_port_lock_irqsave(&sport->port, &flags);
-
- sport->port.read_status_mask &= UTSR0_TO_SM(UTSR0_TFS);
- sport->port.read_status_mask |= UTSR1_TO_SM(UTSR1_ROR);
-@@ -485,7 +485,7 @@ sa1100_set_termios(struct uart_port *por
- if (UART_ENABLE_MS(&sport->port, termios->c_cflag))
- sa1100_enable_ms(&sport->port);
-
-- spin_unlock_irqrestore(&sport->port.lock, flags);
-+ uart_port_unlock_irqrestore(&sport->port, flags);
- }
-
- static const char *sa1100_type(struct uart_port *port)
diff --git a/debian/patches-rt/0053-serial-samsung_tty-Use-port-lock-wrappers.patch b/debian/patches-rt/0053-serial-samsung_tty-Use-port-lock-wrappers.patch
deleted file mode 100644
index 74dc3c0145..0000000000
--- a/debian/patches-rt/0053-serial-samsung_tty-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,245 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:10 +0206
-Subject: [PATCH 053/134] serial: samsung_tty: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-54-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/samsung_tty.c | 50 +++++++++++++++++++--------------------
- 1 file changed, 25 insertions(+), 25 deletions(-)
-
---- a/drivers/tty/serial/samsung_tty.c
-+++ b/drivers/tty/serial/samsung_tty.c
-@@ -248,7 +248,7 @@ static void s3c24xx_serial_rx_enable(str
- unsigned int ucon, ufcon;
- int count = 10000;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- while (--count && !s3c24xx_serial_txempty_nofifo(port))
- udelay(100);
-@@ -262,7 +262,7 @@ static void s3c24xx_serial_rx_enable(str
- wr_regl(port, S3C2410_UCON, ucon);
-
- ourport->rx_enabled = 1;
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void s3c24xx_serial_rx_disable(struct uart_port *port)
-@@ -271,14 +271,14 @@ static void s3c24xx_serial_rx_disable(st
- unsigned long flags;
- unsigned int ucon;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- ucon = rd_regl(port, S3C2410_UCON);
- ucon &= ~S3C2410_UCON_RXIRQMODE;
- wr_regl(port, S3C2410_UCON, ucon);
-
- ourport->rx_enabled = 0;
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void s3c24xx_serial_stop_tx(struct uart_port *port)
-@@ -344,7 +344,7 @@ static void s3c24xx_serial_tx_dma_comple
- dma->tx_transfer_addr, dma->tx_size,
- DMA_TO_DEVICE);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- uart_xmit_advance(port, count);
- ourport->tx_in_progress = 0;
-@@ -353,7 +353,7 @@ static void s3c24xx_serial_tx_dma_comple
- uart_write_wakeup(port);
-
- s3c24xx_serial_start_next_tx(ourport);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void enable_tx_dma(struct s3c24xx_uart_port *ourport)
-@@ -619,7 +619,7 @@ static void s3c24xx_serial_rx_dma_comple
- received = dma->rx_bytes_requested - state.residue;
- async_tx_ack(dma->rx_desc);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- if (received)
- s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
-@@ -631,7 +631,7 @@ static void s3c24xx_serial_rx_dma_comple
-
- s3c64xx_start_rx_dma(ourport);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport)
-@@ -722,7 +722,7 @@ static irqreturn_t s3c24xx_serial_rx_cha
- utrstat = rd_regl(port, S3C2410_UTRSTAT);
- rd_regl(port, S3C2410_UFSTAT);
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- if (!(utrstat & S3C2410_UTRSTAT_TIMEOUT)) {
- s3c64xx_start_rx_dma(ourport);
-@@ -751,7 +751,7 @@ static irqreturn_t s3c24xx_serial_rx_cha
- wr_regl(port, S3C2410_UTRSTAT, S3C2410_UTRSTAT_TIMEOUT);
-
- finish:
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -849,9 +849,9 @@ static irqreturn_t s3c24xx_serial_rx_cha
- struct s3c24xx_uart_port *ourport = dev_id;
- struct uart_port *port = &ourport->port;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- s3c24xx_serial_rx_drain_fifo(ourport);
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -932,11 +932,11 @@ static irqreturn_t s3c24xx_serial_tx_irq
- struct s3c24xx_uart_port *ourport = id;
- struct uart_port *port = &ourport->port;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- s3c24xx_serial_tx_chars(ourport);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- return IRQ_HANDLED;
- }
-
-@@ -1033,7 +1033,7 @@ static void s3c24xx_serial_break_ctl(str
- unsigned long flags;
- unsigned int ucon;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- ucon = rd_regl(port, S3C2410_UCON);
-
-@@ -1044,7 +1044,7 @@ static void s3c24xx_serial_break_ctl(str
-
- wr_regl(port, S3C2410_UCON, ucon);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p)
-@@ -1303,7 +1303,7 @@ static int s3c64xx_serial_startup(struct
- ourport->rx_enabled = 1;
- ourport->tx_enabled = 0;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- ufcon = rd_regl(port, S3C2410_UFCON);
- ufcon |= S3C2410_UFCON_RESETRX | S5PV210_UFCON_RXTRIG8;
-@@ -1313,7 +1313,7 @@ static int s3c64xx_serial_startup(struct
-
- enable_rx_pio(ourport);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- /* Enable Rx Interrupt */
- s3c24xx_clear_bit(port, S3C64XX_UINTM_RXD, S3C64XX_UINTM);
-@@ -1341,7 +1341,7 @@ static int apple_s5l_serial_startup(stru
- ourport->rx_enabled = 1;
- ourport->tx_enabled = 0;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- ufcon = rd_regl(port, S3C2410_UFCON);
- ufcon |= S3C2410_UFCON_RESETRX | S5PV210_UFCON_RXTRIG8;
-@@ -1351,7 +1351,7 @@ static int apple_s5l_serial_startup(stru
-
- enable_rx_pio(ourport);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- /* Enable Rx Interrupt */
- s3c24xx_set_bit(port, APPLE_S5L_UCON_RXTHRESH_ENA, S3C2410_UCON);
-@@ -1626,7 +1626,7 @@ static void s3c24xx_serial_set_termios(s
- ulcon |= S3C2410_LCON_PNONE;
- }
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- dev_dbg(port->dev,
- "setting ulcon to %08x, brddiv to %d, udivslot %08x\n",
-@@ -1684,7 +1684,7 @@ static void s3c24xx_serial_set_termios(s
- if ((termios->c_cflag & CREAD) == 0)
- port->ignore_status_mask |= RXSTAT_DUMMY_READ;
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *s3c24xx_serial_type(struct uart_port *port)
-@@ -2376,14 +2376,14 @@ s3c24xx_serial_console_write(struct cons
- if (cons_uart->sysrq)
- locked = false;
- else if (oops_in_progress)
-- locked = spin_trylock_irqsave(&cons_uart->lock, flags);
-+ locked = uart_port_trylock_irqsave(cons_uart, &flags);
- else
-- spin_lock_irqsave(&cons_uart->lock, flags);
-+ uart_port_lock_irqsave(cons_uart, &flags);
-
- uart_console_write(cons_uart, s, count, s3c24xx_serial_console_putchar);
-
- if (locked)
-- spin_unlock_irqrestore(&cons_uart->lock, flags);
-+ uart_port_unlock_irqrestore(cons_uart, flags);
- }
-
- /* Shouldn't be __init, as it can be instantiated from other module */
diff --git a/debian/patches-rt/0054-serial-sb1250-duart-Use-port-lock-wrappers.patch b/debian/patches-rt/0054-serial-sb1250-duart-Use-port-lock-wrappers.patch
deleted file mode 100644
index e5aeb528fe..0000000000
--- a/debian/patches-rt/0054-serial-sb1250-duart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:11 +0206
-Subject: [PATCH 054/134] serial: sb1250-duart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-55-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/sb1250-duart.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
---- a/drivers/tty/serial/sb1250-duart.c
-+++ b/drivers/tty/serial/sb1250-duart.c
-@@ -610,7 +610,7 @@ static void sbd_set_termios(struct uart_
- else
- aux &= ~M_DUART_CTS_CHNG_ENA;
-
-- spin_lock(&uport->lock);
-+ uart_port_lock(uport);
-
- if (sport->tx_stopped)
- command |= M_DUART_TX_DIS;
-@@ -632,7 +632,7 @@ static void sbd_set_termios(struct uart_
-
- write_sbdchn(sport, R_DUART_CMD, command);
-
-- spin_unlock(&uport->lock);
-+ uart_port_unlock(uport);
- }
-
-
-@@ -839,22 +839,22 @@ static void sbd_console_write(struct con
- unsigned int mask;
-
- /* Disable transmit interrupts and enable the transmitter. */
-- spin_lock_irqsave(&uport->lock, flags);
-+ uart_port_lock_irqsave(uport, &flags);
- mask = read_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2));
- write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2),
- mask & ~M_DUART_IMR_TX);
- write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_EN);
-- spin_unlock_irqrestore(&uport->lock, flags);
-+ uart_port_unlock_irqrestore(uport, flags);
-
- uart_console_write(&sport->port, s, count, sbd_console_putchar);
-
- /* Restore transmit interrupts and the transmitter enable. */
-- spin_lock_irqsave(&uport->lock, flags);
-+ uart_port_lock_irqsave(uport, &flags);
- sbd_line_drain(sport);
- if (sport->tx_stopped)
- write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_DIS);
- write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2), mask);
-- spin_unlock_irqrestore(&uport->lock, flags);
-+ uart_port_unlock_irqrestore(uport, flags);
- }
-
- static int __init sbd_console_setup(struct console *co, char *options)
diff --git a/debian/patches-rt/0056-serial-tegra-Use-port-lock-wrappers.patch b/debian/patches-rt/0056-serial-tegra-Use-port-lock-wrappers.patch
deleted file mode 100644
index f53b521dc0..0000000000
--- a/debian/patches-rt/0056-serial-tegra-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:13 +0206
-Subject: [PATCH 056/134] serial: tegra: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-57-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/serial-tegra.c | 32 ++++++++++++++++----------------
- 1 file changed, 16 insertions(+), 16 deletions(-)
-
---- a/drivers/tty/serial/serial-tegra.c
-+++ b/drivers/tty/serial/serial-tegra.c
-@@ -411,7 +411,7 @@ static int tegra_set_baudrate(struct teg
- divisor = DIV_ROUND_CLOSEST(rate, baud * 16);
- }
-
-- spin_lock_irqsave(&tup->uport.lock, flags);
-+ uart_port_lock_irqsave(&tup->uport, &flags);
- lcr = tup->lcr_shadow;
- lcr |= UART_LCR_DLAB;
- tegra_uart_write(tup, lcr, UART_LCR);
-@@ -424,7 +424,7 @@ static int tegra_set_baudrate(struct teg
-
- /* Dummy read to ensure the write is posted */
- tegra_uart_read(tup, UART_SCR);
-- spin_unlock_irqrestore(&tup->uport.lock, flags);
-+ uart_port_unlock_irqrestore(&tup->uport, flags);
-
- tup->current_baud = baud;
-
-@@ -522,13 +522,13 @@ static void tegra_uart_tx_dma_complete(v
- dmaengine_tx_status(tup->tx_dma_chan, tup->tx_cookie, &state);
- count = tup->tx_bytes_requested - state.residue;
- async_tx_ack(tup->tx_dma_desc);
-- spin_lock_irqsave(&tup->uport.lock, flags);
-+ uart_port_lock_irqsave(&tup->uport, &flags);
- uart_xmit_advance(&tup->uport, count);
- tup->tx_in_progress = 0;
- if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
- uart_write_wakeup(&tup->uport);
- tegra_uart_start_next_tx(tup);
-- spin_unlock_irqrestore(&tup->uport.lock, flags);
-+ uart_port_unlock_irqrestore(&tup->uport, flags);
- }
-
- static int tegra_uart_start_tx_dma(struct tegra_uart_port *tup,
-@@ -598,13 +598,13 @@ static unsigned int tegra_uart_tx_empty(
- unsigned int ret = 0;
- unsigned long flags;
-
-- spin_lock_irqsave(&u->lock, flags);
-+ uart_port_lock_irqsave(u, &flags);
- if (!tup->tx_in_progress) {
- unsigned long lsr = tegra_uart_read(tup, UART_LSR);
- if ((lsr & TX_EMPTY_STATUS) == TX_EMPTY_STATUS)
- ret = TIOCSER_TEMT;
- }
-- spin_unlock_irqrestore(&u->lock, flags);
-+ uart_port_unlock_irqrestore(u, flags);
- return ret;
- }
-
-@@ -727,7 +727,7 @@ static void tegra_uart_rx_dma_complete(v
- struct dma_tx_state state;
- enum dma_status status;
-
-- spin_lock_irqsave(&u->lock, flags);
-+ uart_port_lock_irqsave(u, &flags);
-
- status = dmaengine_tx_status(tup->rx_dma_chan, tup->rx_cookie, &state);
-
-@@ -749,7 +749,7 @@ static void tegra_uart_rx_dma_complete(v
- set_rts(tup, true);
-
- done:
-- spin_unlock_irqrestore(&u->lock, flags);
-+ uart_port_unlock_irqrestore(u, flags);
- }
-
- static void tegra_uart_terminate_rx_dma(struct tegra_uart_port *tup)
-@@ -836,7 +836,7 @@ static irqreturn_t tegra_uart_isr(int ir
- bool is_rx_int = false;
- unsigned long flags;
-
-- spin_lock_irqsave(&u->lock, flags);
-+ uart_port_lock_irqsave(u, &flags);
- while (1) {
- iir = tegra_uart_read(tup, UART_IIR);
- if (iir & UART_IIR_NO_INT) {
-@@ -852,7 +852,7 @@ static irqreturn_t tegra_uart_isr(int ir
- } else if (is_rx_start) {
- tegra_uart_start_rx_dma(tup);
- }
-- spin_unlock_irqrestore(&u->lock, flags);
-+ uart_port_unlock_irqrestore(u, flags);
- return IRQ_HANDLED;
- }
-
-@@ -969,11 +969,11 @@ static void tegra_uart_hw_deinit(struct
- }
- }
-
-- spin_lock_irqsave(&tup->uport.lock, flags);
-+ uart_port_lock_irqsave(&tup->uport, &flags);
- /* Reset the Rx and Tx FIFOs */
- tegra_uart_fifo_reset(tup, UART_FCR_CLEAR_XMIT | UART_FCR_CLEAR_RCVR);
- tup->current_baud = 0;
-- spin_unlock_irqrestore(&tup->uport.lock, flags);
-+ uart_port_unlock_irqrestore(&tup->uport, flags);
-
- tup->rx_in_progress = 0;
- tup->tx_in_progress = 0;
-@@ -1292,7 +1292,7 @@ static void tegra_uart_set_termios(struc
- int ret;
-
- max_divider *= 16;
-- spin_lock_irqsave(&u->lock, flags);
-+ uart_port_lock_irqsave(u, &flags);
-
- /* Changing configuration, it is safe to stop any rx now */
- if (tup->rts_active)
-@@ -1341,7 +1341,7 @@ static void tegra_uart_set_termios(struc
- baud = uart_get_baud_rate(u, termios, oldtermios,
- parent_clk_rate/max_divider,
- parent_clk_rate/16);
-- spin_unlock_irqrestore(&u->lock, flags);
-+ uart_port_unlock_irqrestore(u, flags);
- ret = tegra_set_baudrate(tup, baud);
- if (ret < 0) {
- dev_err(tup->uport.dev, "Failed to set baud rate\n");
-@@ -1349,7 +1349,7 @@ static void tegra_uart_set_termios(struc
- }
- if (tty_termios_baud_rate(termios))
- tty_termios_encode_baud_rate(termios, baud, baud);
-- spin_lock_irqsave(&u->lock, flags);
-+ uart_port_lock_irqsave(u, &flags);
-
- /* Flow control */
- if (termios->c_cflag & CRTSCTS) {
-@@ -1382,7 +1382,7 @@ static void tegra_uart_set_termios(struc
- if (termios->c_iflag & IGNBRK)
- tup->uport.ignore_status_mask |= UART_LSR_BI;
-
-- spin_unlock_irqrestore(&u->lock, flags);
-+ uart_port_unlock_irqrestore(u, flags);
- }
-
- static const char *tegra_uart_type(struct uart_port *u)
diff --git a/debian/patches-rt/0057-serial-core-Use-port-lock-wrappers.patch b/debian/patches-rt/0057-serial-core-Use-port-lock-wrappers.patch
deleted file mode 100644
index 33c2703827..0000000000
--- a/debian/patches-rt/0057-serial-core-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,365 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:14 +0206
-Subject: [PATCH 057/134] serial: core: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-58-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/serial_core.c | 92 +++++++++++++++++++--------------------
- drivers/tty/serial/serial_port.c | 4 -
- 2 files changed, 48 insertions(+), 48 deletions(-)
-
---- a/drivers/tty/serial/serial_core.c
-+++ b/drivers/tty/serial/serial_core.c
-@@ -79,7 +79,7 @@
- ({ \
- struct uart_port *__uport = uart_port_ref(state); \
- if (__uport) \
-- spin_lock_irqsave(&__uport->lock, flags); \
-+ uart_port_lock_irqsave(__uport, &flags); \
- __uport; \
- })
-
-@@ -87,7 +87,7 @@
- ({ \
- struct uart_port *__uport = uport; \
- if (__uport) { \
-- spin_unlock_irqrestore(&__uport->lock, flags); \
-+ uart_port_unlock_irqrestore(__uport, flags); \
- uart_port_deref(__uport); \
- } \
- })
-@@ -179,12 +179,12 @@
- unsigned long flags;
- unsigned int old;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- old = port->mctrl;
- port->mctrl = (old & ~clear) | set;
- if (old != port->mctrl && !(port->rs485.flags & SER_RS485_ENABLED))
- port->ops->set_mctrl(port, port->mctrl);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- #define uart_set_mctrl(port, set) uart_update_mctrl(port, set, 0)
-@@ -219,7 +219,7 @@
- /*
- * Set modem status enables based on termios cflag
- */
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- if (termios->c_cflag & CRTSCTS)
- uport->status |= UPSTAT_CTS_ENABLE;
- else
-@@ -240,7 +240,7 @@
- else
- __uart_start(state);
- }
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
- }
-
- /*
-@@ -702,11 +702,11 @@
- if (port->ops->send_xchar)
- port->ops->send_xchar(port, ch);
- else {
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- port->x_char = ch;
- if (ch)
- port->ops->start_tx(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
- uart_port_deref(port);
- }
-@@ -1085,9 +1085,9 @@
-
- if (!tty_io_error(tty)) {
- result = uport->mctrl;
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- result |= uport->ops->get_mctrl(uport);
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
- }
- out:
- mutex_unlock(&port->mutex);
-@@ -1223,16 +1223,16 @@
- uport = uart_port_ref(state);
- if (!uport)
- return -EIO;
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- memcpy(&cprev, &uport->icount, sizeof(struct uart_icount));
- uart_enable_ms(uport);
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
-
- add_wait_queue(&port->delta_msr_wait, &wait);
- for (;;) {
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- memcpy(&cnow, &uport->icount, sizeof(struct uart_icount));
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
-
- set_current_state(TASK_INTERRUPTIBLE);
-
-@@ -1277,9 +1277,9 @@
- uport = uart_port_ref(state);
- if (!uport)
- return -EIO;
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- memcpy(&cnow, &uport->icount, sizeof(struct uart_icount));
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
- uart_port_deref(uport);
-
- icount->cts = cnow.cts;
-@@ -1432,9 +1432,9 @@
- uart_set_rs485_termination(port, rs485);
- uart_set_rs485_rx_during_tx(port, rs485);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- ret = port->rs485_config(port, NULL, rs485);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- if (ret) {
- memset(rs485, 0, sizeof(*rs485));
- /* unset GPIOs */
-@@ -1451,9 +1451,9 @@
- unsigned long flags;
- struct serial_rs485 aux;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- aux = port->rs485;
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (copy_to_user(rs485, &aux, sizeof(aux)))
- return -EFAULT;
-@@ -1481,7 +1481,7 @@
- uart_set_rs485_termination(port, &rs485);
- uart_set_rs485_rx_during_tx(port, &rs485);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- ret = port->rs485_config(port, &tty->termios, &rs485);
- if (!ret) {
- port->rs485 = rs485;
-@@ -1490,7 +1490,7 @@
- if (!(rs485.flags & SER_RS485_ENABLED))
- port->ops->set_mctrl(port, port->mctrl);
- }
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- if (ret) {
- /* restore old GPIO settings */
- gpiod_set_value_cansleep(port->rs485_term_gpio,
-@@ -1515,9 +1515,9 @@
- if (!port->iso7816_config)
- return -ENOTTY;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- aux = port->iso7816;
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (copy_to_user(iso7816, &aux, sizeof(aux)))
- return -EFAULT;
-@@ -1546,9 +1546,9 @@
- if (iso7816.reserved[i])
- return -EINVAL;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- ret = port->iso7816_config(port, &iso7816);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- if (ret)
- return ret;
-
-@@ -1765,9 +1765,9 @@
- if (WARN(!uport, "detached port still initialized!\n"))
- return;
-
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- uport->ops->stop_rx(uport);
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
-
- uart_port_shutdown(port);
-
-@@ -1781,10 +1781,10 @@
- /*
- * Free the transmit buffer.
- */
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- buf = state->xmit.buf;
- state->xmit.buf = NULL;
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
-
- free_page((unsigned long)buf);
-
-@@ -1927,10 +1927,10 @@
- */
- if (WARN_ON(!uport))
- return true;
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- uart_enable_ms(uport);
- mctrl = uport->ops->get_mctrl(uport);
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
- uart_port_deref(uport);
-
- return mctrl & TIOCM_CAR;
-@@ -2047,9 +2047,9 @@
- pm_state = state->pm_state;
- if (pm_state != UART_PM_STATE_ON)
- uart_change_pm(state, UART_PM_STATE_ON);
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- status = uport->ops->get_mctrl(uport);
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
- if (pm_state != UART_PM_STATE_ON)
- uart_change_pm(state, pm_state);
-
-@@ -2388,9 +2388,9 @@
- */
- if (!console_suspend_enabled && uart_console(uport)) {
- if (uport->ops->start_rx) {
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- uport->ops->stop_rx(uport);
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
- }
- goto unlock;
- }
-@@ -2405,7 +2405,7 @@
- tty_port_set_suspended(port, true);
- tty_port_set_initialized(port, false);
-
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- ops->stop_tx(uport);
- if (!(uport->rs485.flags & SER_RS485_ENABLED))
- ops->set_mctrl(uport, 0);
-@@ -2413,7 +2413,7 @@
- mctrl = uport->mctrl;
- uport->mctrl = 0;
- ops->stop_rx(uport);
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
-
- /*
- * Wait for the transmitter to empty.
-@@ -2485,9 +2485,9 @@
- uart_change_pm(state, UART_PM_STATE_ON);
- uport->ops->set_termios(uport, &termios, NULL);
- if (!console_suspend_enabled && uport->ops->start_rx) {
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- uport->ops->start_rx(uport);
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
- }
- if (console_suspend_enabled)
- console_start(uport->cons);
-@@ -2498,10 +2498,10 @@
- int ret;
-
- uart_change_pm(state, UART_PM_STATE_ON);
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- if (!(uport->rs485.flags & SER_RS485_ENABLED))
- ops->set_mctrl(uport, 0);
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
- if (console_suspend_enabled || !uart_console(uport)) {
- /* Protected by port mutex for now */
- struct tty_struct *tty = port->tty;
-@@ -2511,11 +2511,11 @@
- if (tty)
- uart_change_line_settings(tty, state, NULL);
- uart_rs485_config(uport);
-- spin_lock_irq(&uport->lock);
-+ uart_port_lock_irq(uport);
- if (!(uport->rs485.flags & SER_RS485_ENABLED))
- ops->set_mctrl(uport, uport->mctrl);
- ops->start_tx(uport);
-- spin_unlock_irq(&uport->lock);
-+ uart_port_unlock_irq(uport);
- tty_port_set_initialized(port, true);
- } else {
- /*
-@@ -2618,11 +2618,11 @@
- * keep the DTR setting that is set in uart_set_options()
- * We probably don't need a spinlock around this, but
- */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- port->mctrl &= TIOCM_DTR;
- if (!(port->rs485.flags & SER_RS485_ENABLED))
- port->ops->set_mctrl(port, port->mctrl);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- uart_rs485_config(port);
-
---- a/drivers/tty/serial/serial_port.c
-+++ b/drivers/tty/serial/serial_port.c
-@@ -35,10 +35,10 @@
- goto out;
-
- /* Flush any pending TX for the port */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (__serial_port_busy(port))
- port->ops->start_tx(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- out:
- pm_runtime_mark_last_busy(dev);
diff --git a/debian/patches-rt/0058-serial-mctrl_gpio-Use-port-lock-wrappers.patch b/debian/patches-rt/0058-serial-mctrl_gpio-Use-port-lock-wrappers.patch
deleted file mode 100644
index 46719cb077..0000000000
--- a/debian/patches-rt/0058-serial-mctrl_gpio-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:15 +0206
-Subject: [PATCH 058/134] serial: mctrl_gpio: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-59-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/serial_mctrl_gpio.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/tty/serial/serial_mctrl_gpio.c
-+++ b/drivers/tty/serial/serial_mctrl_gpio.c
-@@ -184,7 +184,7 @@ static irqreturn_t mctrl_gpio_irq_handle
-
- mctrl_gpio_get(gpios, &mctrl);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- mctrl_diff = mctrl ^ gpios->mctrl_prev;
- gpios->mctrl_prev = mctrl;
-@@ -205,7 +205,7 @@ static irqreturn_t mctrl_gpio_irq_handle
- wake_up_interruptible(&port->state->port.delta_msr_wait);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return IRQ_HANDLED;
- }
diff --git a/debian/patches-rt/0059-serial-txx9-Use-port-lock-wrappers.patch b/debian/patches-rt/0059-serial-txx9-Use-port-lock-wrappers.patch
deleted file mode 100644
index bbe48684ba..0000000000
--- a/debian/patches-rt/0059-serial-txx9-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:16 +0206
-Subject: [PATCH 059/134] serial: txx9: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-60-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/serial_txx9.c | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
---- a/drivers/tty/serial/serial_txx9.c
-+++ b/drivers/tty/serial/serial_txx9.c
-@@ -335,13 +335,13 @@ static irqreturn_t serial_txx9_interrupt
- unsigned int status;
-
- while (1) {
-- spin_lock(&up->lock);
-+ uart_port_lock(up);
- status = sio_in(up, TXX9_SIDISR);
- if (!(sio_in(up, TXX9_SIDICR) & TXX9_SIDICR_TIE))
- status &= ~TXX9_SIDISR_TDIS;
- if (!(status & (TXX9_SIDISR_TDIS | TXX9_SIDISR_RDIS |
- TXX9_SIDISR_TOUT))) {
-- spin_unlock(&up->lock);
-+ uart_port_unlock(up);
- break;
- }
-
-@@ -353,7 +353,7 @@ static irqreturn_t serial_txx9_interrupt
- sio_mask(up, TXX9_SIDISR,
- TXX9_SIDISR_TDIS | TXX9_SIDISR_RDIS |
- TXX9_SIDISR_TOUT);
-- spin_unlock(&up->lock);
-+ uart_port_unlock(up);
-
- if (pass_counter++ > PASS_LIMIT)
- break;
-@@ -367,9 +367,9 @@ static unsigned int serial_txx9_tx_empty
- unsigned long flags;
- unsigned int ret;
-
-- spin_lock_irqsave(&up->lock, flags);
-+ uart_port_lock_irqsave(up, &flags);
- ret = (sio_in(up, TXX9_SICISR) & TXX9_SICISR_TXALS) ? TIOCSER_TEMT : 0;
-- spin_unlock_irqrestore(&up->lock, flags);
-+ uart_port_unlock_irqrestore(up, flags);
-
- return ret;
- }
-@@ -399,12 +399,12 @@ static void serial_txx9_break_ctl(struct
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&up->lock, flags);
-+ uart_port_lock_irqsave(up, &flags);
- if (break_state == -1)
- sio_set(up, TXX9_SIFLCR, TXX9_SIFLCR_TBRK);
- else
- sio_mask(up, TXX9_SIFLCR, TXX9_SIFLCR_TBRK);
-- spin_unlock_irqrestore(&up->lock, flags);
-+ uart_port_unlock_irqrestore(up, flags);
- }
-
- #if defined(CONFIG_SERIAL_TXX9_CONSOLE) || defined(CONFIG_CONSOLE_POLL)
-@@ -517,9 +517,9 @@ static int serial_txx9_startup(struct ua
- /*
- * Now, initialize the UART
- */
-- spin_lock_irqsave(&up->lock, flags);
-+ uart_port_lock_irqsave(up, &flags);
- serial_txx9_set_mctrl(up, up->mctrl);
-- spin_unlock_irqrestore(&up->lock, flags);
-+ uart_port_unlock_irqrestore(up, flags);
-
- /* Enable RX/TX */
- sio_mask(up, TXX9_SIFLCR, TXX9_SIFLCR_RSDE | TXX9_SIFLCR_TSDE);
-@@ -541,9 +541,9 @@ static void serial_txx9_shutdown(struct
- */
- sio_out(up, TXX9_SIDICR, 0); /* disable all intrs */
-
-- spin_lock_irqsave(&up->lock, flags);
-+ uart_port_lock_irqsave(up, &flags);
- serial_txx9_set_mctrl(up, up->mctrl);
-- spin_unlock_irqrestore(&up->lock, flags);
-+ uart_port_unlock_irqrestore(up, flags);
-
- /*
- * Disable break condition
-@@ -625,7 +625,7 @@ serial_txx9_set_termios(struct uart_port
- * Ok, we're now changing the port state. Do it with
- * interrupts disabled.
- */
-- spin_lock_irqsave(&up->lock, flags);
-+ uart_port_lock_irqsave(up, &flags);
-
- /*
- * Update the per-port timeout.
-@@ -676,7 +676,7 @@ serial_txx9_set_termios(struct uart_port
- sio_out(up, TXX9_SIFCR, fcr);
-
- serial_txx9_set_mctrl(up, up->mctrl);
-- spin_unlock_irqrestore(&up->lock, flags);
-+ uart_port_unlock_irqrestore(up, flags);
- }
-
- static void
diff --git a/debian/patches-rt/0060-serial-sh-sci-Use-port-lock-wrappers.patch b/debian/patches-rt/0060-serial-sh-sci-Use-port-lock-wrappers.patch
deleted file mode 100644
index 6d039c6658..0000000000
--- a/debian/patches-rt/0060-serial-sh-sci-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,302 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:17 +0206
-Subject: [PATCH 060/134] serial: sh-sci: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-61-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/sh-sci.c | 68 ++++++++++++++++++++++----------------------
- 1 file changed, 34 insertions(+), 34 deletions(-)
-
---- a/drivers/tty/serial/sh-sci.c
-+++ b/drivers/tty/serial/sh-sci.c
-@@ -1205,7 +1205,7 @@ static void sci_dma_tx_complete(void *ar
-
- dev_dbg(port->dev, "%s(%d)\n", __func__, port->line);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- uart_xmit_advance(port, s->tx_dma_len);
-
-@@ -1229,7 +1229,7 @@ static void sci_dma_tx_complete(void *ar
- }
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /* Locking: called with port lock held */
-@@ -1320,7 +1320,7 @@ static void sci_dma_rx_complete(void *ar
- dev_dbg(port->dev, "%s(%d) active cookie %d\n", __func__, port->line,
- s->active_rx);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- active = sci_dma_rx_find_active(s);
- if (active >= 0)
-@@ -1347,20 +1347,20 @@ static void sci_dma_rx_complete(void *ar
-
- dma_async_issue_pending(chan);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- dev_dbg(port->dev, "%s: cookie %d #%d, new active cookie %d\n",
- __func__, s->cookie_rx[active], active, s->active_rx);
- return;
-
- fail:
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- dev_warn(port->dev, "Failed submitting Rx DMA descriptor\n");
- /* Switch to PIO */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- dmaengine_terminate_async(chan);
- sci_dma_rx_chan_invalidate(s);
- sci_dma_rx_reenable_irq(s);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void sci_dma_tx_release(struct sci_port *s)
-@@ -1409,13 +1409,13 @@ static int sci_dma_rx_submit(struct sci_
- fail:
- /* Switch to PIO */
- if (!port_lock_held)
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- if (i)
- dmaengine_terminate_async(chan);
- sci_dma_rx_chan_invalidate(s);
- sci_start_rx(port);
- if (!port_lock_held)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- return -EAGAIN;
- }
-
-@@ -1437,14 +1437,14 @@ static void sci_dma_tx_work_fn(struct wo
- * transmit till the end, and then the rest. Take the port lock to get a
- * consistent xmit buffer state.
- */
-- spin_lock_irq(&port->lock);
-+ uart_port_lock_irq(port);
- head = xmit->head;
- tail = xmit->tail;
- buf = s->tx_dma_addr + tail;
- s->tx_dma_len = CIRC_CNT_TO_END(head, tail, UART_XMIT_SIZE);
- if (!s->tx_dma_len) {
- /* Transmit buffer has been flushed */
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- return;
- }
-
-@@ -1452,7 +1452,7 @@ static void sci_dma_tx_work_fn(struct wo
- DMA_MEM_TO_DEV,
- DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
- if (!desc) {
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- dev_warn(port->dev, "Failed preparing Tx DMA descriptor\n");
- goto switch_to_pio;
- }
-@@ -1464,12 +1464,12 @@ static void sci_dma_tx_work_fn(struct wo
- desc->callback_param = s;
- s->cookie_tx = dmaengine_submit(desc);
- if (dma_submit_error(s->cookie_tx)) {
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- dev_warn(port->dev, "Failed submitting Tx DMA descriptor\n");
- goto switch_to_pio;
- }
-
-- spin_unlock_irq(&port->lock);
-+ uart_port_unlock_irq(port);
- dev_dbg(port->dev, "%s: %p: %d...%d, cookie %d\n",
- __func__, xmit->buf, tail, head, s->cookie_tx);
-
-@@ -1477,10 +1477,10 @@ static void sci_dma_tx_work_fn(struct wo
- return;
-
- switch_to_pio:
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- s->chan_tx = NULL;
- sci_start_tx(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- return;
- }
-
-@@ -1497,17 +1497,17 @@ static enum hrtimer_restart sci_dma_rx_t
-
- dev_dbg(port->dev, "DMA Rx timed out\n");
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- active = sci_dma_rx_find_active(s);
- if (active < 0) {
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- return HRTIMER_NORESTART;
- }
-
- status = dmaengine_tx_status(s->chan_rx, s->active_rx, &state);
- if (status == DMA_COMPLETE) {
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- dev_dbg(port->dev, "Cookie %d #%d has already completed\n",
- s->active_rx, active);
-
-@@ -1525,7 +1525,7 @@ static enum hrtimer_restart sci_dma_rx_t
- */
- status = dmaengine_tx_status(s->chan_rx, s->active_rx, &state);
- if (status == DMA_COMPLETE) {
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- dev_dbg(port->dev, "Transaction complete after DMA engine was stopped");
- return HRTIMER_NORESTART;
- }
-@@ -1546,7 +1546,7 @@ static enum hrtimer_restart sci_dma_rx_t
-
- sci_dma_rx_reenable_irq(s);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return HRTIMER_NORESTART;
- }
-@@ -1770,9 +1770,9 @@ static irqreturn_t sci_tx_interrupt(int
- struct uart_port *port = ptr;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- sci_transmit_chars(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return IRQ_HANDLED;
- }
-@@ -1786,11 +1786,11 @@ static irqreturn_t sci_tx_end_interrupt(
- if (port->type != PORT_SCI)
- return sci_tx_interrupt(irq, ptr);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- ctrl = serial_port_in(port, SCSCR);
- ctrl &= ~(SCSCR_TE | SCSCR_TEIE);
- serial_port_out(port, SCSCR, ctrl);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return IRQ_HANDLED;
- }
-@@ -2187,7 +2187,7 @@ static void sci_break_ctl(struct uart_po
- return;
- }
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- scsptr = serial_port_in(port, SCSPTR);
- scscr = serial_port_in(port, SCSCR);
-
-@@ -2201,7 +2201,7 @@ static void sci_break_ctl(struct uart_po
-
- serial_port_out(port, SCSPTR, scsptr);
- serial_port_out(port, SCSCR, scscr);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int sci_startup(struct uart_port *port)
-@@ -2233,7 +2233,7 @@ static void sci_shutdown(struct uart_por
- s->autorts = false;
- mctrl_gpio_disable_ms(to_sci_port(port)->gpios);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- sci_stop_rx(port);
- sci_stop_tx(port);
- /*
-@@ -2243,7 +2243,7 @@ static void sci_shutdown(struct uart_por
- scr = serial_port_in(port, SCSCR);
- serial_port_out(port, SCSCR, scr &
- (SCSCR_CKE1 | SCSCR_CKE0 | s->hscif_tot));
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- #ifdef CONFIG_SERIAL_SH_SCI_DMA
- if (s->chan_rx_saved) {
-@@ -2545,7 +2545,7 @@ static void sci_set_termios(struct uart_
- serial_port_out(port, SCCKS, sccks);
- }
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- sci_reset(port);
-
-@@ -2667,7 +2667,7 @@ static void sci_set_termios(struct uart_
- if ((termios->c_cflag & CREAD) != 0)
- sci_start_rx(port);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- sci_port_disable(s);
-
-@@ -3052,9 +3052,9 @@ static void serial_console_write(struct
- if (port->sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock_irqsave(&port->lock, flags);
-+ locked = uart_port_trylock_irqsave(port, &flags);
- else
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* first save SCSCR then disable interrupts, keep clock source */
- ctrl = serial_port_in(port, SCSCR);
-@@ -3074,7 +3074,7 @@ static void serial_console_write(struct
- serial_port_out(port, SCSCR, ctrl);
-
- if (locked)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int serial_console_setup(struct console *co, char *options)
diff --git a/debian/patches-rt/0061-serial-sifive-Use-port-lock-wrappers.patch b/debian/patches-rt/0061-serial-sifive-Use-port-lock-wrappers.patch
deleted file mode 100644
index a2babdbea9..0000000000
--- a/debian/patches-rt/0061-serial-sifive-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:18 +0206
-Subject: [PATCH 061/134] serial: sifive: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-62-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/sifive.c | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
---- a/drivers/tty/serial/sifive.c
-+++ b/drivers/tty/serial/sifive.c
-@@ -521,11 +521,11 @@ static irqreturn_t sifive_serial_irq(int
- struct sifive_serial_port *ssp = dev_id;
- u32 ip;
-
-- spin_lock(&ssp->port.lock);
-+ uart_port_lock(&ssp->port);
-
- ip = __ssp_readl(ssp, SIFIVE_SERIAL_IP_OFFS);
- if (!ip) {
-- spin_unlock(&ssp->port.lock);
-+ uart_port_unlock(&ssp->port);
- return IRQ_NONE;
- }
-
-@@ -534,7 +534,7 @@ static irqreturn_t sifive_serial_irq(int
- if (ip & SIFIVE_SERIAL_IP_TXWM_MASK)
- __ssp_transmit_chars(ssp);
-
-- spin_unlock(&ssp->port.lock);
-+ uart_port_unlock(&ssp->port);
-
- return IRQ_HANDLED;
- }
-@@ -653,7 +653,7 @@ static void sifive_serial_set_termios(st
- ssp->port.uartclk / 16);
- __ssp_update_baud_rate(ssp, rate);
-
-- spin_lock_irqsave(&ssp->port.lock, flags);
-+ uart_port_lock_irqsave(&ssp->port, &flags);
-
- /* Update the per-port timeout */
- uart_update_timeout(port, termios->c_cflag, rate);
-@@ -670,7 +670,7 @@ static void sifive_serial_set_termios(st
- if (v != old_v)
- __ssp_writel(v, SIFIVE_SERIAL_RXCTRL_OFFS, ssp);
-
-- spin_unlock_irqrestore(&ssp->port.lock, flags);
-+ uart_port_unlock_irqrestore(&ssp->port, flags);
- }
-
- static void sifive_serial_release_port(struct uart_port *port)
-@@ -795,9 +795,9 @@ static void sifive_serial_console_write(
- if (ssp->port.sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock(&ssp->port.lock);
-+ locked = uart_port_trylock(&ssp->port);
- else
-- spin_lock(&ssp->port.lock);
-+ uart_port_lock(&ssp->port);
-
- ier = __ssp_readl(ssp, SIFIVE_SERIAL_IE_OFFS);
- __ssp_writel(0, SIFIVE_SERIAL_IE_OFFS, ssp);
-@@ -807,7 +807,7 @@ static void sifive_serial_console_write(
- __ssp_writel(ier, SIFIVE_SERIAL_IE_OFFS, ssp);
-
- if (locked)
-- spin_unlock(&ssp->port.lock);
-+ uart_port_unlock(&ssp->port);
- local_irq_restore(flags);
- }
-
diff --git a/debian/patches-rt/0062-serial-sprd-Use-port-lock-wrappers.patch b/debian/patches-rt/0062-serial-sprd-Use-port-lock-wrappers.patch
deleted file mode 100644
index 5be78db092..0000000000
--- a/debian/patches-rt/0062-serial-sprd-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,162 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:19 +0206
-Subject: [PATCH 062/134] serial: sprd: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-63-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/sprd_serial.c | 30 +++++++++++++++---------------
- 1 file changed, 15 insertions(+), 15 deletions(-)
-
---- a/drivers/tty/serial/sprd_serial.c
-+++ b/drivers/tty/serial/sprd_serial.c
-@@ -247,7 +247,7 @@ static void sprd_complete_tx_dma(void *d
- struct circ_buf *xmit = &port->state->xmit;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- dma_unmap_single(port->dev, sp->tx_dma.phys_addr,
- sp->tx_dma.trans_len, DMA_TO_DEVICE);
-
-@@ -260,7 +260,7 @@ static void sprd_complete_tx_dma(void *d
- sprd_tx_dma_config(port))
- sp->tx_dma.trans_len = 0;
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int sprd_uart_dma_submit(struct uart_port *port,
-@@ -429,13 +429,13 @@ static void sprd_complete_rx_dma(void *d
- enum dma_status status;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- status = dmaengine_tx_status(sp->rx_dma.chn,
- sp->rx_dma.cookie, &state);
- if (status != DMA_COMPLETE) {
- sprd_stop_rx(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- return;
- }
-
-@@ -449,7 +449,7 @@ static void sprd_complete_rx_dma(void *d
- if (sprd_start_dma_rx(port))
- sprd_stop_rx(port);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int sprd_start_dma_rx(struct uart_port *port)
-@@ -638,12 +638,12 @@ static irqreturn_t sprd_handle_irq(int i
- struct uart_port *port = dev_id;
- unsigned int ims;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- ims = serial_in(port, SPRD_IMSR);
-
- if (!ims) {
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- return IRQ_NONE;
- }
-
-@@ -660,7 +660,7 @@ static irqreturn_t sprd_handle_irq(int i
- if (ims & SPRD_IMSR_TX_FIFO_EMPTY)
- sprd_tx(port);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -727,13 +727,13 @@ static int sprd_startup(struct uart_port
- serial_out(port, SPRD_CTL1, fc);
-
- /* enable interrupt */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- ien = serial_in(port, SPRD_IEN);
- ien |= SPRD_IEN_BREAK_DETECT | SPRD_IEN_TIMEOUT;
- if (!sp->rx_dma.enable)
- ien |= SPRD_IEN_RX_FULL;
- serial_out(port, SPRD_IEN, ien);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return 0;
- }
-@@ -793,7 +793,7 @@ static void sprd_set_termios(struct uart
- lcr |= SPRD_LCR_EVEN_PAR;
- }
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* update the per-port timeout */
- uart_update_timeout(port, termios->c_cflag, baud);
-@@ -837,7 +837,7 @@ static void sprd_set_termios(struct uart
- fc |= RX_TOUT_THLD_DEF | RX_HFC_THLD_DEF;
- serial_out(port, SPRD_CTL1, fc);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- /* Don't rewrite B0 */
- if (tty_termios_baud_rate(termios))
-@@ -974,9 +974,9 @@ static void sprd_console_write(struct co
- if (port->sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock_irqsave(&port->lock, flags);
-+ locked = uart_port_trylock_irqsave(port, &flags);
- else
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- uart_console_write(port, s, count, sprd_console_putchar);
-
-@@ -984,7 +984,7 @@ static void sprd_console_write(struct co
- wait_for_xmitr(port);
-
- if (locked)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int sprd_console_setup(struct console *co, char *options)
diff --git a/debian/patches-rt/0063-serial-st-asc-Use-port-lock-wrappers.patch b/debian/patches-rt/0063-serial-st-asc-Use-port-lock-wrappers.patch
deleted file mode 100644
index 99f4358e61..0000000000
--- a/debian/patches-rt/0063-serial-st-asc-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,110 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:20 +0206
-Subject: [PATCH 063/134] serial: st-asc: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-64-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/st-asc.c | 18 +++++++++---------
- 1 file changed, 9 insertions(+), 9 deletions(-)
-
---- a/drivers/tty/serial/st-asc.c
-+++ b/drivers/tty/serial/st-asc.c
-@@ -319,7 +319,7 @@ static irqreturn_t asc_interrupt(int irq
- struct uart_port *port = ptr;
- u32 status;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- status = asc_in(port, ASC_STA);
-
-@@ -334,7 +334,7 @@ static irqreturn_t asc_interrupt(int irq
- asc_transmit_chars(port);
- }
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -452,10 +452,10 @@ static void asc_pm(struct uart_port *por
- * we can come to turning it off. Note this is not called with
- * the port spinlock held.
- */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- ctl = asc_in(port, ASC_CTL) & ~ASC_CTL_RUN;
- asc_out(port, ASC_CTL, ctl);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- clk_disable_unprepare(ascport->clk);
- break;
- }
-@@ -480,7 +480,7 @@ static void asc_set_termios(struct uart_
- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
- cflag = termios->c_cflag;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* read control register */
- ctrl_val = asc_in(port, ASC_CTL);
-@@ -594,7 +594,7 @@ static void asc_set_termios(struct uart_
- /* write final value and enable port */
- asc_out(port, ASC_CTL, (ctrl_val | ASC_CTL_RUN));
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *asc_type(struct uart_port *port)
-@@ -849,9 +849,9 @@ static void asc_console_write(struct con
- if (port->sysrq)
- locked = 0; /* asc_interrupt has already claimed the lock */
- else if (oops_in_progress)
-- locked = spin_trylock_irqsave(&port->lock, flags);
-+ locked = uart_port_trylock_irqsave(port, &flags);
- else
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /*
- * Disable interrupts so we don't get the IRQ line bouncing
-@@ -869,7 +869,7 @@ static void asc_console_write(struct con
- asc_out(port, ASC_INTEN, intenable);
-
- if (locked)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int asc_console_setup(struct console *co, char *options)
diff --git a/debian/patches-rt/0064-serial-stm32-Use-port-lock-wrappers.patch b/debian/patches-rt/0064-serial-stm32-Use-port-lock-wrappers.patch
deleted file mode 100644
index cc261d43ee..0000000000
--- a/debian/patches-rt/0064-serial-stm32-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,184 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:21 +0206
-Subject: [PATCH 064/134] serial: stm32: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-65-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/stm32-usart.c | 38 +++++++++++++++++++-------------------
- 1 file changed, 19 insertions(+), 19 deletions(-)
-
---- a/drivers/tty/serial/stm32-usart.c
-+++ b/drivers/tty/serial/stm32-usart.c
-@@ -537,7 +537,7 @@ static void stm32_usart_rx_dma_complete(
- unsigned int size;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- size = stm32_usart_receive_chars(port, false);
- uart_unlock_and_check_sysrq_irqrestore(port, flags);
- if (size)
-@@ -643,9 +643,9 @@ static void stm32_usart_tx_dma_complete(
- stm32_usart_tx_dma_terminate(stm32port);
-
- /* Let's see if we have pending data to send */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- stm32_usart_transmit_chars(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void stm32_usart_tx_interrupt_enable(struct uart_port *port)
-@@ -889,7 +889,7 @@ static irqreturn_t stm32_usart_interrupt
- if (!stm32_port->throttled) {
- if (((sr & USART_SR_RXNE) && !stm32_usart_rx_dma_started(stm32_port)) ||
- ((sr & USART_SR_ERR_MASK) && stm32_usart_rx_dma_started(stm32_port))) {
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- size = stm32_usart_receive_chars(port, false);
- uart_unlock_and_check_sysrq(port);
- if (size)
-@@ -898,14 +898,14 @@ static irqreturn_t stm32_usart_interrupt
- }
-
- if ((sr & USART_SR_TXE) && !(stm32_port->tx_ch)) {
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- stm32_usart_transmit_chars(port);
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- }
-
- /* Receiver timeout irq for DMA RX */
- if (stm32_usart_rx_dma_started(stm32_port) && !stm32_port->throttled) {
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- size = stm32_usart_receive_chars(port, false);
- uart_unlock_and_check_sysrq(port);
- if (size)
-@@ -993,7 +993,7 @@ static void stm32_usart_throttle(struct
- const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /*
- * Pause DMA transfer, so the RX data gets queued into the FIFO.
-@@ -1006,7 +1006,7 @@ static void stm32_usart_throttle(struct
- stm32_usart_clr_bits(port, ofs->cr3, stm32_port->cr3_irq);
-
- stm32_port->throttled = true;
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /* Unthrottle the remote, the input buffer can now accept data. */
-@@ -1016,7 +1016,7 @@ static void stm32_usart_unthrottle(struc
- const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- stm32_usart_set_bits(port, ofs->cr1, stm32_port->cr1_irq);
- if (stm32_port->cr3_irq)
- stm32_usart_set_bits(port, ofs->cr3, stm32_port->cr3_irq);
-@@ -1030,7 +1030,7 @@ static void stm32_usart_unthrottle(struc
- if (stm32_port->rx_ch)
- stm32_usart_rx_dma_start_or_resume(port);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /* Receive stop */
-@@ -1158,7 +1158,7 @@ static void stm32_usart_set_termios(stru
-
- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 8);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- ret = readl_relaxed_poll_timeout_atomic(port->membase + ofs->isr,
- isr,
-@@ -1349,7 +1349,7 @@ static void stm32_usart_set_termios(stru
- writel_relaxed(cr1, port->membase + ofs->cr1);
-
- stm32_usart_set_bits(port, ofs->cr1, BIT(cfg->uart_enable_bit));
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- /* Handle modem control interrupts */
- if (UART_ENABLE_MS(port, termios->c_cflag))
-@@ -1399,9 +1399,9 @@ static void stm32_usart_pm(struct uart_p
- pm_runtime_get_sync(port->dev);
- break;
- case UART_PM_STATE_OFF:
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- stm32_usart_clr_bits(port, ofs->cr1, BIT(cfg->uart_enable_bit));
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- pm_runtime_put_sync(port->dev);
- break;
- }
-@@ -1884,9 +1884,9 @@ static void stm32_usart_console_write(st
- int locked = 1;
-
- if (oops_in_progress)
-- locked = spin_trylock_irqsave(&port->lock, flags);
-+ locked = uart_port_trylock_irqsave(port, &flags);
- else
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Save and disable interrupts, enable the transmitter */
- old_cr1 = readl_relaxed(port->membase + ofs->cr1);
-@@ -1900,7 +1900,7 @@ static void stm32_usart_console_write(st
- writel_relaxed(old_cr1, port->membase + ofs->cr1);
-
- if (locked)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int stm32_usart_console_setup(struct console *co, char *options)
-@@ -2035,7 +2035,7 @@ static int __maybe_unused stm32_usart_se
- * low-power mode.
- */
- if (stm32_port->rx_ch) {
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- /* Poll data from DMA RX buffer if any */
- if (!stm32_usart_rx_dma_pause(stm32_port))
- size += stm32_usart_receive_chars(port, true);
diff --git a/debian/patches-rt/0065-serial-sunhv-Use-port-lock-wrappers.patch b/debian/patches-rt/0065-serial-sunhv-Use-port-lock-wrappers.patch
deleted file mode 100644
index beacd2be79..0000000000
--- a/debian/patches-rt/0065-serial-sunhv-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:22 +0206
-Subject: [PATCH 065/134] serial: sunhv: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-66-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/sunhv.c | 28 ++++++++++++++--------------
- 1 file changed, 14 insertions(+), 14 deletions(-)
-
---- a/drivers/tty/serial/sunhv.c
-+++ b/drivers/tty/serial/sunhv.c
-@@ -217,10 +217,10 @@ static irqreturn_t sunhv_interrupt(int i
- struct tty_port *tport;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- tport = receive_chars(port);
- transmit_chars(port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (tport)
- tty_flip_buffer_push(tport);
-@@ -271,7 +271,7 @@ static void sunhv_send_xchar(struct uart
- if (ch == __DISABLED_CHAR)
- return;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- while (limit-- > 0) {
- long status = sun4v_con_putchar(ch);
-@@ -280,7 +280,7 @@ static void sunhv_send_xchar(struct uart
- udelay(1);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /* port->lock held by caller. */
-@@ -295,7 +295,7 @@ static void sunhv_break_ctl(struct uart_
- unsigned long flags;
- int limit = 10000;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- while (limit-- > 0) {
- long status = sun4v_con_putchar(CON_BREAK);
-@@ -304,7 +304,7 @@ static void sunhv_break_ctl(struct uart_
- udelay(1);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
- }
-
-@@ -328,7 +328,7 @@ static void sunhv_set_termios(struct uar
- unsigned int iflag, cflag;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- iflag = termios->c_iflag;
- cflag = termios->c_cflag;
-@@ -343,7 +343,7 @@ static void sunhv_set_termios(struct uar
- uart_update_timeout(port, cflag,
- (port->uartclk / (16 * quot)));
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *sunhv_type(struct uart_port *port)
-@@ -437,9 +437,9 @@ static void sunhv_console_write_paged(st
- int locked = 1;
-
- if (port->sysrq || oops_in_progress)
-- locked = spin_trylock_irqsave(&port->lock, flags);
-+ locked = uart_port_trylock_irqsave(port, &flags);
- else
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- while (n > 0) {
- unsigned long ra = __pa(con_write_page);
-@@ -470,7 +470,7 @@ static void sunhv_console_write_paged(st
- }
-
- if (locked)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static inline void sunhv_console_putchar(struct uart_port *port, char c)
-@@ -492,9 +492,9 @@ static void sunhv_console_write_bychar(s
- int i, locked = 1;
-
- if (port->sysrq || oops_in_progress)
-- locked = spin_trylock_irqsave(&port->lock, flags);
-+ locked = uart_port_trylock_irqsave(port, &flags);
- else
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- for (i = 0; i < n; i++) {
- if (*s == '\n')
-@@ -503,7 +503,7 @@ static void sunhv_console_write_bychar(s
- }
-
- if (locked)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static struct console sunhv_console = {
diff --git a/debian/patches-rt/0066-serial-sunplus-uart-Use-port-lock-wrappers.patch b/debian/patches-rt/0066-serial-sunplus-uart-Use-port-lock-wrappers.patch
deleted file mode 100644
index 10ae6c477c..0000000000
--- a/debian/patches-rt/0066-serial-sunplus-uart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:23 +0206
-Subject: [PATCH 066/134] serial: sunplus-uart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-67-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/sunplus-uart.c | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
---- a/drivers/tty/serial/sunplus-uart.c
-+++ b/drivers/tty/serial/sunplus-uart.c
-@@ -184,7 +184,7 @@ static void sunplus_break_ctl(struct uar
- unsigned long flags;
- unsigned int lcr;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- lcr = readl(port->membase + SUP_UART_LCR);
-
-@@ -195,7 +195,7 @@ static void sunplus_break_ctl(struct uar
-
- writel(lcr, port->membase + SUP_UART_LCR);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void transmit_chars(struct uart_port *port)
-@@ -277,7 +277,7 @@ static irqreturn_t sunplus_uart_irq(int
- struct uart_port *port = args;
- unsigned int isc;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- isc = readl(port->membase + SUP_UART_ISC);
-
-@@ -287,7 +287,7 @@ static irqreturn_t sunplus_uart_irq(int
- if (isc & SUP_UART_ISC_TX)
- transmit_chars(port);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -302,14 +302,14 @@ static int sunplus_startup(struct uart_p
- if (ret)
- return ret;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- /* isc define Bit[7:4] int setting, Bit[3:0] int status
- * isc register will clean Bit[3:0] int status after read
- * only do a write to Bit[7:4] int setting
- */
- isc |= SUP_UART_ISC_RXM;
- writel(isc, port->membase + SUP_UART_ISC);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return 0;
- }
-@@ -318,13 +318,13 @@ static void sunplus_shutdown(struct uart
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- /* isc define Bit[7:4] int setting, Bit[3:0] int status
- * isc register will clean Bit[3:0] int status after read
- * only do a write to Bit[7:4] int setting
- */
- writel(0, port->membase + SUP_UART_ISC); /* disable all interrupt */
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- free_irq(port->irq, port);
- }
-@@ -372,7 +372,7 @@ static void sunplus_set_termios(struct u
- lcr |= UART_LCR_EPAR;
- }
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- uart_update_timeout(port, termios->c_cflag, baud);
-
-@@ -407,7 +407,7 @@ static void sunplus_set_termios(struct u
- writel(div_l, port->membase + SUP_UART_DIV_L);
- writel(lcr, port->membase + SUP_UART_LCR);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void sunplus_set_ldisc(struct uart_port *port, struct ktermios *termios)
-@@ -517,15 +517,15 @@ static void sunplus_console_write(struct
- if (sunplus_console_ports[co->index]->port.sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock(&sunplus_console_ports[co->index]->port.lock);
-+ locked = uart_port_trylock(&sunplus_console_ports[co->index]->port);
- else
-- spin_lock(&sunplus_console_ports[co->index]->port.lock);
-+ uart_port_lock(&sunplus_console_ports[co->index]->port);
-
- uart_console_write(&sunplus_console_ports[co->index]->port, s, count,
- sunplus_uart_console_putchar);
-
- if (locked)
-- spin_unlock(&sunplus_console_ports[co->index]->port.lock);
-+ uart_port_unlock(&sunplus_console_ports[co->index]->port);
-
- local_irq_restore(flags);
- }
diff --git a/debian/patches-rt/0067-serial-sunsab-Use-port-lock-wrappers.patch b/debian/patches-rt/0067-serial-sunsab-Use-port-lock-wrappers.patch
deleted file mode 100644
index b96d5080cd..0000000000
--- a/debian/patches-rt/0067-serial-sunsab-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:24 +0206
-Subject: [PATCH 067/134] serial: sunsab: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-68-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/sunsab.c | 34 +++++++++++++++++-----------------
- 1 file changed, 17 insertions(+), 17 deletions(-)
-
---- a/drivers/tty/serial/sunsab.c
-+++ b/drivers/tty/serial/sunsab.c
-@@ -310,7 +310,7 @@ static irqreturn_t sunsab_interrupt(int
- unsigned long flags;
- unsigned char gis;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- status.stat = 0;
- gis = readb(&up->regs->r.gis) >> up->gis_shift;
-@@ -331,7 +331,7 @@ static irqreturn_t sunsab_interrupt(int
- transmit_chars(up, &status);
- }
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- if (port)
- tty_flip_buffer_push(port);
-@@ -473,12 +473,12 @@ static void sunsab_send_xchar(struct uar
- if (ch == __DISABLED_CHAR)
- return;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- sunsab_tec_wait(up);
- writeb(ch, &up->regs->w.tic);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- /* port->lock held by caller. */
-@@ -499,7 +499,7 @@ static void sunsab_break_ctl(struct uart
- unsigned long flags;
- unsigned char val;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- val = up->cached_dafo;
- if (break_state)
-@@ -512,7 +512,7 @@ static void sunsab_break_ctl(struct uart
- if (test_bit(SAB82532_XPR, &up->irqflags))
- sunsab_tx_idle(up);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- /* port->lock is not held. */
-@@ -527,7 +527,7 @@ static int sunsab_startup(struct uart_po
- if (err)
- return err;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- /*
- * Wait for any commands or immediate characters
-@@ -582,7 +582,7 @@ static int sunsab_startup(struct uart_po
- set_bit(SAB82532_ALLS, &up->irqflags);
- set_bit(SAB82532_XPR, &up->irqflags);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- return 0;
- }
-@@ -594,7 +594,7 @@ static void sunsab_shutdown(struct uart_
- container_of(port, struct uart_sunsab_port, port);
- unsigned long flags;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- /* Disable Interrupts */
- up->interrupt_mask0 = 0xff;
-@@ -628,7 +628,7 @@ static void sunsab_shutdown(struct uart_
- writeb(tmp, &up->regs->rw.ccr0);
- #endif
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- free_irq(up->port.irq, up);
- }
-
-@@ -779,9 +779,9 @@ static void sunsab_set_termios(struct ua
- unsigned int baud = uart_get_baud_rate(port, termios, old, 0, 4000000);
- unsigned int quot = uart_get_divisor(port, baud);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- sunsab_convert_to_sab(up, termios->c_cflag, termios->c_iflag, baud, quot);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static const char *sunsab_type(struct uart_port *port)
-@@ -857,15 +857,15 @@ static void sunsab_console_write(struct
- int locked = 1;
-
- if (up->port.sysrq || oops_in_progress)
-- locked = spin_trylock_irqsave(&up->port.lock, flags);
-+ locked = uart_port_trylock_irqsave(&up->port, &flags);
- else
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- uart_console_write(&up->port, s, n, sunsab_console_putchar);
- sunsab_tec_wait(up);
-
- if (locked)
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static int sunsab_console_setup(struct console *con, char *options)
-@@ -914,7 +914,7 @@ static int sunsab_console_setup(struct c
- */
- sunsab_startup(&up->port);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- /*
- * Finally, enable interrupts
-@@ -932,7 +932,7 @@ static int sunsab_console_setup(struct c
- sunsab_convert_to_sab(up, con->cflag, 0, baud, quot);
- sunsab_set_mctrl(&up->port, TIOCM_DTR | TIOCM_RTS);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- return 0;
- }
diff --git a/debian/patches-rt/0068-serial-sunsu-Use-port-lock-wrappers.patch b/debian/patches-rt/0068-serial-sunsu-Use-port-lock-wrappers.patch
deleted file mode 100644
index 77945a1edb..0000000000
--- a/debian/patches-rt/0068-serial-sunsu-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,219 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:25 +0206
-Subject: [PATCH 068/134] serial: sunsu: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-69-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/sunsu.c | 46 ++++++++++++++++++++++-----------------------
- 1 file changed, 23 insertions(+), 23 deletions(-)
-
---- a/drivers/tty/serial/sunsu.c
-+++ b/drivers/tty/serial/sunsu.c
-@@ -212,9 +212,9 @@ static void enable_rsa(struct uart_sunsu
- {
- if (up->port.type == PORT_RSA) {
- if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) {
-- spin_lock_irq(&up->port.lock);
-+ uart_port_lock_irq(&up->port);
- __enable_rsa(up);
-- spin_unlock_irq(&up->port.lock);
-+ uart_port_unlock_irq(&up->port);
- }
- if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16)
- serial_outp(up, UART_RSA_FRR, 0);
-@@ -234,7 +234,7 @@ static void disable_rsa(struct uart_suns
-
- if (up->port.type == PORT_RSA &&
- up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) {
-- spin_lock_irq(&up->port.lock);
-+ uart_port_lock_irq(&up->port);
-
- mode = serial_inp(up, UART_RSA_MSR);
- result = !(mode & UART_RSA_MSR_FIFO);
-@@ -247,7 +247,7 @@ static void disable_rsa(struct uart_suns
-
- if (result)
- up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16;
-- spin_unlock_irq(&up->port.lock);
-+ uart_port_unlock_irq(&up->port);
- }
- }
- #endif /* CONFIG_SERIAL_8250_RSA */
-@@ -311,10 +311,10 @@ static void sunsu_enable_ms(struct uart_
- container_of(port, struct uart_sunsu_port, port);
- unsigned long flags;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- up->ier |= UART_IER_MSI;
- serial_out(up, UART_IER, up->ier);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static void
-@@ -456,7 +456,7 @@ static irqreturn_t sunsu_serial_interrup
- unsigned long flags;
- unsigned char status;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- do {
- status = serial_inp(up, UART_LSR);
-@@ -470,7 +470,7 @@ static irqreturn_t sunsu_serial_interrup
-
- } while (!(serial_in(up, UART_IIR) & UART_IIR_NO_INT));
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- return IRQ_HANDLED;
- }
-@@ -545,9 +545,9 @@ static unsigned int sunsu_tx_empty(struc
- unsigned long flags;
- unsigned int ret;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0;
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- return ret;
- }
-@@ -599,13 +599,13 @@ static void sunsu_break_ctl(struct uart_
- container_of(port, struct uart_sunsu_port, port);
- unsigned long flags;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- if (break_state == -1)
- up->lcr |= UART_LCR_SBC;
- else
- up->lcr &= ~UART_LCR_SBC;
- serial_out(up, UART_LCR, up->lcr);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static int sunsu_startup(struct uart_port *port)
-@@ -683,12 +683,12 @@ static int sunsu_startup(struct uart_por
- */
- serial_outp(up, UART_LCR, UART_LCR_WLEN8);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- up->port.mctrl |= TIOCM_OUT2;
-
- sunsu_set_mctrl(&up->port, up->port.mctrl);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- /*
- * Finally, enable interrupts. Note: Modem status interrupts
-@@ -731,7 +731,7 @@ static void sunsu_shutdown(struct uart_p
- up->ier = 0;
- serial_outp(up, UART_IER, 0);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- if (up->port.flags & UPF_FOURPORT) {
- /* reset interrupts on the AST Fourport board */
- inb((up->port.iobase & 0xfe0) | 0x1f);
-@@ -740,7 +740,7 @@ static void sunsu_shutdown(struct uart_p
- up->port.mctrl &= ~TIOCM_OUT2;
-
- sunsu_set_mctrl(&up->port, up->port.mctrl);
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- /*
- * Disable break condition and FIFOs
-@@ -826,7 +826,7 @@ sunsu_change_speed(struct uart_port *por
- * Ok, we're now changing the port state. Do it with
- * interrupts disabled.
- */
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- /*
- * Update the per-port timeout.
-@@ -891,7 +891,7 @@ sunsu_change_speed(struct uart_port *por
-
- up->cflag = cflag;
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static void
-@@ -1038,7 +1038,7 @@ static void sunsu_autoconfig(struct uart
- up->type_probed = PORT_UNKNOWN;
- up->port.iotype = UPIO_MEM;
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- if (!(up->port.flags & UPF_BUGGY_UART)) {
- /*
-@@ -1173,7 +1173,7 @@ static void sunsu_autoconfig(struct uart
- serial_outp(up, UART_IER, 0);
-
- out:
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static struct uart_driver sunsu_reg = {
-@@ -1298,9 +1298,9 @@ static void sunsu_console_write(struct c
- int locked = 1;
-
- if (up->port.sysrq || oops_in_progress)
-- locked = spin_trylock_irqsave(&up->port.lock, flags);
-+ locked = uart_port_trylock_irqsave(&up->port, &flags);
- else
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- /*
- * First save the UER then disable the interrupts
-@@ -1318,7 +1318,7 @@ static void sunsu_console_write(struct c
- serial_out(up, UART_IER, ier);
-
- if (locked)
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- /*
diff --git a/debian/patches-rt/0069-serial-sunzilog-Use-port-lock-wrappers.patch b/debian/patches-rt/0069-serial-sunzilog-Use-port-lock-wrappers.patch
deleted file mode 100644
index dca4327a46..0000000000
--- a/debian/patches-rt/0069-serial-sunzilog-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,211 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:26 +0206
-Subject: [PATCH 069/134] serial: sunzilog: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-70-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/sunzilog.c | 42 +++++++++++++++++++++---------------------
- 1 file changed, 21 insertions(+), 21 deletions(-)
-
---- a/drivers/tty/serial/sunzilog.c
-+++ b/drivers/tty/serial/sunzilog.c
-@@ -531,7 +531,7 @@ static irqreturn_t sunzilog_interrupt(in
- struct tty_port *port;
- unsigned char r3;
-
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
- r3 = read_zsreg(channel, R3);
-
- /* Channel A */
-@@ -548,7 +548,7 @@ static irqreturn_t sunzilog_interrupt(in
- if (r3 & CHATxIP)
- sunzilog_transmit_chars(up, channel);
- }
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
-
- if (port)
- tty_flip_buffer_push(port);
-@@ -557,7 +557,7 @@ static irqreturn_t sunzilog_interrupt(in
- up = up->next;
- channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
-
-- spin_lock(&up->port.lock);
-+ uart_port_lock(&up->port);
- port = NULL;
- if (r3 & (CHBEXT | CHBTxIP | CHBRxIP)) {
- writeb(RES_H_IUS, &channel->control);
-@@ -571,7 +571,7 @@ static irqreturn_t sunzilog_interrupt(in
- if (r3 & CHBTxIP)
- sunzilog_transmit_chars(up, channel);
- }
-- spin_unlock(&up->port.lock);
-+ uart_port_unlock(&up->port);
-
- if (port)
- tty_flip_buffer_push(port);
-@@ -604,11 +604,11 @@ static unsigned int sunzilog_tx_empty(st
- unsigned char status;
- unsigned int ret;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- status = sunzilog_read_channel_status(port);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- if (status & Tx_BUF_EMP)
- ret = TIOCSER_TEMT;
-@@ -764,7 +764,7 @@ static void sunzilog_break_ctl(struct ua
- else
- clear_bits |= SND_BRK;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- new_reg = (up->curregs[R5] | set_bits) & ~clear_bits;
- if (new_reg != up->curregs[R5]) {
-@@ -774,7 +774,7 @@ static void sunzilog_break_ctl(struct ua
- write_zsreg(channel, R5, up->curregs[R5]);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static void __sunzilog_startup(struct uart_sunzilog_port *up)
-@@ -800,9 +800,9 @@ static int sunzilog_startup(struct uart_
- if (ZS_IS_CONS(up))
- return 0;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- __sunzilog_startup(up);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- return 0;
- }
-
-@@ -840,7 +840,7 @@ static void sunzilog_shutdown(struct uar
- if (ZS_IS_CONS(up))
- return;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- channel = ZILOG_CHANNEL_FROM_PORT(port);
-
-@@ -853,7 +853,7 @@ static void sunzilog_shutdown(struct uar
- up->curregs[R5] &= ~SND_BRK;
- sunzilog_maybe_update_regs(up, channel);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /* Shared by TTY driver and serial console setup. The port lock is held
-@@ -945,7 +945,7 @@ sunzilog_set_termios(struct uart_port *p
-
- baud = uart_get_baud_rate(port, termios, old, 1200, 76800);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
-
-@@ -962,7 +962,7 @@ sunzilog_set_termios(struct uart_port *p
-
- uart_update_timeout(port, termios->c_cflag, baud);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static const char *sunzilog_type(struct uart_port *port)
-@@ -1201,15 +1201,15 @@ sunzilog_console_write(struct console *c
- int locked = 1;
-
- if (up->port.sysrq || oops_in_progress)
-- locked = spin_trylock_irqsave(&up->port.lock, flags);
-+ locked = uart_port_trylock_irqsave(&up->port, &flags);
- else
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- uart_console_write(&up->port, s, count, sunzilog_putchar);
- udelay(2);
-
- if (locked)
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
- }
-
- static int __init sunzilog_console_setup(struct console *con, char *options)
-@@ -1244,7 +1244,7 @@ static int __init sunzilog_console_setup
-
- brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
-
- up->curregs[R15] |= BRKIE;
- sunzilog_convert_to_zs(up, con->cflag, 0, brg);
-@@ -1252,7 +1252,7 @@ static int __init sunzilog_console_setup
- sunzilog_set_mctrl(&up->port, TIOCM_DTR | TIOCM_RTS);
- __sunzilog_startup(up);
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- return 0;
- }
-@@ -1333,7 +1333,7 @@ static void sunzilog_init_hw(struct uart
-
- channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
-
-- spin_lock_irqsave(&up->port.lock, flags);
-+ uart_port_lock_irqsave(&up->port, &flags);
- if (ZS_IS_CHANNEL_A(up)) {
- write_zsreg(channel, R9, FHWRES);
- ZSDELAY_LONG();
-@@ -1383,7 +1383,7 @@ static void sunzilog_init_hw(struct uart
- write_zsreg(channel, R9, up->curregs[R9]);
- }
-
-- spin_unlock_irqrestore(&up->port.lock, flags);
-+ uart_port_unlock_irqrestore(&up->port, flags);
-
- #ifdef CONFIG_SERIO
- if (up->flags & (SUNZILOG_FLAG_CONS_KEYB |
diff --git a/debian/patches-rt/0070-serial-timbuart-Use-port-lock-wrappers.patch b/debian/patches-rt/0070-serial-timbuart-Use-port-lock-wrappers.patch
deleted file mode 100644
index 2d5a3d95e3..0000000000
--- a/debian/patches-rt/0070-serial-timbuart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:27 +0206
-Subject: [PATCH 070/134] serial: timbuart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-71-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/timbuart.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/tty/serial/timbuart.c
-+++ b/drivers/tty/serial/timbuart.c
-@@ -174,7 +174,7 @@ static void timbuart_tasklet(struct task
- struct timbuart_port *uart = from_tasklet(uart, t, tasklet);
- u32 isr, ier = 0;
-
-- spin_lock(&uart->port.lock);
-+ uart_port_lock(&uart->port);
-
- isr = ioread32(uart->port.membase + TIMBUART_ISR);
- dev_dbg(uart->port.dev, "%s ISR: %x\n", __func__, isr);
-@@ -189,7 +189,7 @@ static void timbuart_tasklet(struct task
-
- iowrite32(ier, uart->port.membase + TIMBUART_IER);
-
-- spin_unlock(&uart->port.lock);
-+ uart_port_unlock(&uart->port);
- dev_dbg(uart->port.dev, "%s leaving\n", __func__);
- }
-
-@@ -295,10 +295,10 @@ static void timbuart_set_termios(struct
- tty_termios_copy_hw(termios, old);
- tty_termios_encode_baud_rate(termios, baud, baud);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- iowrite8((u8)bindex, port->membase + TIMBUART_BAUDRATE);
- uart_update_timeout(port, termios->c_cflag, baud);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *timbuart_type(struct uart_port *port)
diff --git a/debian/patches-rt/0071-serial-uartlite-Use-port-lock-wrappers.patch b/debian/patches-rt/0071-serial-uartlite-Use-port-lock-wrappers.patch
deleted file mode 100644
index 13c64d7eed..0000000000
--- a/debian/patches-rt/0071-serial-uartlite-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:28 +0206
-Subject: [PATCH 071/134] serial: uartlite: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-72-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/uartlite.c | 18 +++++++++---------
- 1 file changed, 9 insertions(+), 9 deletions(-)
-
---- a/drivers/tty/serial/uartlite.c
-+++ b/drivers/tty/serial/uartlite.c
-@@ -216,11 +216,11 @@ static irqreturn_t ulite_isr(int irq, vo
- unsigned long flags;
-
- do {
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- stat = uart_in32(ULITE_STATUS, port);
- busy = ulite_receive(port, stat);
- busy |= ulite_transmit(port, stat);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- n++;
- } while (busy);
-
-@@ -238,9 +238,9 @@ static unsigned int ulite_tx_empty(struc
- unsigned long flags;
- unsigned int ret;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- ret = uart_in32(ULITE_STATUS, port);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return ret & ULITE_STATUS_TXEMPTY ? TIOCSER_TEMT : 0;
- }
-@@ -323,7 +323,7 @@ static void ulite_set_termios(struct uar
- termios->c_cflag |= pdata->cflags & (PARENB | PARODD | CSIZE);
- tty_termios_encode_baud_rate(termios, pdata->baud, pdata->baud);
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- port->read_status_mask = ULITE_STATUS_RXVALID | ULITE_STATUS_OVERRUN
- | ULITE_STATUS_TXFULL;
-@@ -346,7 +346,7 @@ static void ulite_set_termios(struct uar
- /* update timeout */
- uart_update_timeout(port, termios->c_cflag, pdata->baud);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *ulite_type(struct uart_port *port)
-@@ -495,9 +495,9 @@ static void ulite_console_write(struct c
- int locked = 1;
-
- if (oops_in_progress) {
-- locked = spin_trylock_irqsave(&port->lock, flags);
-+ locked = uart_port_trylock_irqsave(port, &flags);
- } else
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* save and disable interrupt */
- ier = uart_in32(ULITE_STATUS, port) & ULITE_STATUS_IE;
-@@ -512,7 +512,7 @@ static void ulite_console_write(struct c
- uart_out32(ULITE_CONTROL_IE, ULITE_CONTROL, port);
-
- if (locked)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static int ulite_console_setup(struct console *co, char *options)
diff --git a/debian/patches-rt/0072-serial-ucc_uart-Use-port-lock-wrappers.patch b/debian/patches-rt/0072-serial-ucc_uart-Use-port-lock-wrappers.patch
deleted file mode 100644
index 30681434a7..0000000000
--- a/debian/patches-rt/0072-serial-ucc_uart-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:29 +0206
-Subject: [PATCH 072/134] serial: ucc_uart: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Acked-by: Timur Tabi <timur@kernel.org>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-73-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/ucc_uart.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/tty/serial/ucc_uart.c
-+++ b/drivers/tty/serial/ucc_uart.c
-@@ -931,7 +931,7 @@ static void qe_uart_set_termios(struct u
- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16);
-
- /* Do we really need a spinlock here? */
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Update the per-port timeout. */
- uart_update_timeout(port, termios->c_cflag, baud);
-@@ -949,7 +949,7 @@ static void qe_uart_set_termios(struct u
- qe_setbrg(qe_port->us_info.tx_clock, baud, 16);
- }
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /*
diff --git a/debian/patches-rt/0073-serial-vt8500-Use-port-lock-wrappers.patch b/debian/patches-rt/0073-serial-vt8500-Use-port-lock-wrappers.patch
deleted file mode 100644
index 7209ed0661..0000000000
--- a/debian/patches-rt/0073-serial-vt8500-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:30 +0206
-Subject: [PATCH 073/134] serial: vt8500: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-74-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/vt8500_serial.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/tty/serial/vt8500_serial.c
-+++ b/drivers/tty/serial/vt8500_serial.c
-@@ -227,7 +227,7 @@ static irqreturn_t vt8500_irq(int irq, v
- struct uart_port *port = dev_id;
- unsigned long isr;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
- isr = vt8500_read(port, VT8500_URISR);
-
- /* Acknowledge active status bits */
-@@ -240,7 +240,7 @@ static irqreturn_t vt8500_irq(int irq, v
- if (isr & TCTS)
- handle_delta_cts(port);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
-
- return IRQ_HANDLED;
- }
-@@ -342,7 +342,7 @@ static void vt8500_set_termios(struct ua
- unsigned int baud, lcr;
- unsigned int loops = 1000;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* calculate and set baud rate */
- baud = uart_get_baud_rate(port, termios, old, 900, 921600);
-@@ -410,7 +410,7 @@ static void vt8500_set_termios(struct ua
- vt8500_write(&vt8500_port->uart, 0x881, VT8500_URFCR);
- vt8500_write(&vt8500_port->uart, vt8500_port->ier, VT8500_URIER);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- static const char *vt8500_type(struct uart_port *port)
diff --git a/debian/patches-rt/0074-serial-xilinx_uartps-Use-port-lock-wrappers.patch b/debian/patches-rt/0074-serial-xilinx_uartps-Use-port-lock-wrappers.patch
deleted file mode 100644
index 307ee6df75..0000000000
--- a/debian/patches-rt/0074-serial-xilinx_uartps-Use-port-lock-wrappers.patch
+++ /dev/null
@@ -1,276 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Thu, 14 Sep 2023 20:44:31 +0206
-Subject: [PATCH 074/134] serial: xilinx_uartps: Use port lock wrappers
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When a serial port is used for kernel console output, then all
-modifications to the UART registers which are done from other contexts,
-e.g. getty, termios, are interference points for the kernel console.
-
-So far this has been ignored and the printk output is based on the
-principle of hope. The rework of the console infrastructure which aims to
-support threaded and atomic consoles, requires to mark sections which
-modify the UART registers as unsafe. This allows the atomic write function
-to make informed decisions and eventually to restore operational state. It
-also allows to prevent the regular UART code from modifying UART registers
-while printk output is in progress.
-
-All modifications of UART registers are guarded by the UART port lock,
-which provides an obvious synchronization point with the console
-infrastructure.
-
-To avoid adding this functionality to all UART drivers, wrap the
-spin_[un]lock*() invocations for uart_port::lock into helper functions
-which just contain the spin_[un]lock*() invocations for now. In a
-subsequent step these helpers will gain the console synchronization
-mechanisms.
-
-Converted with coccinelle. No functional change.
-
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20230914183831.587273-75-john.ogness@linutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/tty/serial/xilinx_uartps.c | 56 ++++++++++++++++++-------------------
- 1 file changed, 28 insertions(+), 28 deletions(-)
-
---- a/drivers/tty/serial/xilinx_uartps.c
-+++ b/drivers/tty/serial/xilinx_uartps.c
-@@ -346,7 +346,7 @@ static irqreturn_t cdns_uart_isr(int irq
- struct uart_port *port = (struct uart_port *)dev_id;
- unsigned int isrstatus;
-
-- spin_lock(&port->lock);
-+ uart_port_lock(port);
-
- /* Read the interrupt status register to determine which
- * interrupt(s) is/are active and clear them.
-@@ -369,7 +369,7 @@ static irqreturn_t cdns_uart_isr(int irq
- !(readl(port->membase + CDNS_UART_CR) & CDNS_UART_CR_RX_DIS))
- cdns_uart_handle_rx(dev_id, isrstatus);
-
-- spin_unlock(&port->lock);
-+ uart_port_unlock(port);
- return IRQ_HANDLED;
- }
-
-@@ -506,14 +506,14 @@ static int cdns_uart_clk_notifier_cb(str
- return NOTIFY_BAD;
- }
-
-- spin_lock_irqsave(&cdns_uart->port->lock, flags);
-+ uart_port_lock_irqsave(cdns_uart->port, &flags);
-
- /* Disable the TX and RX to set baud rate */
- ctrl_reg = readl(port->membase + CDNS_UART_CR);
- ctrl_reg |= CDNS_UART_CR_TX_DIS | CDNS_UART_CR_RX_DIS;
- writel(ctrl_reg, port->membase + CDNS_UART_CR);
-
-- spin_unlock_irqrestore(&cdns_uart->port->lock, flags);
-+ uart_port_unlock_irqrestore(cdns_uart->port, flags);
-
- return NOTIFY_OK;
- }
-@@ -523,7 +523,7 @@ static int cdns_uart_clk_notifier_cb(str
- * frequency.
- */
-
-- spin_lock_irqsave(&cdns_uart->port->lock, flags);
-+ uart_port_lock_irqsave(cdns_uart->port, &flags);
-
- locked = 1;
- port->uartclk = ndata->new_rate;
-@@ -533,7 +533,7 @@ static int cdns_uart_clk_notifier_cb(str
- fallthrough;
- case ABORT_RATE_CHANGE:
- if (!locked)
-- spin_lock_irqsave(&cdns_uart->port->lock, flags);
-+ uart_port_lock_irqsave(cdns_uart->port, &flags);
-
- /* Set TX/RX Reset */
- ctrl_reg = readl(port->membase + CDNS_UART_CR);
-@@ -555,7 +555,7 @@ static int cdns_uart_clk_notifier_cb(str
- ctrl_reg |= CDNS_UART_CR_TX_EN | CDNS_UART_CR_RX_EN;
- writel(ctrl_reg, port->membase + CDNS_UART_CR);
-
-- spin_unlock_irqrestore(&cdns_uart->port->lock, flags);
-+ uart_port_unlock_irqrestore(cdns_uart->port, flags);
-
- return NOTIFY_OK;
- default:
-@@ -652,7 +652,7 @@ static void cdns_uart_break_ctl(struct u
- unsigned int status;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- status = readl(port->membase + CDNS_UART_CR);
-
-@@ -664,7 +664,7 @@ static void cdns_uart_break_ctl(struct u
- writel(CDNS_UART_CR_STOPBRK | status,
- port->membase + CDNS_UART_CR);
- }
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /**
-@@ -683,7 +683,7 @@ static void cdns_uart_set_termios(struct
- unsigned long flags;
- unsigned int ctrl_reg, mode_reg;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Disable the TX and RX to set baud rate */
- ctrl_reg = readl(port->membase + CDNS_UART_CR);
-@@ -794,7 +794,7 @@ static void cdns_uart_set_termios(struct
- cval &= ~CDNS_UART_MODEMCR_FCM;
- writel(cval, port->membase + CDNS_UART_MODEMCR);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /**
-@@ -813,7 +813,7 @@ static int cdns_uart_startup(struct uart
-
- is_brk_support = cdns_uart->quirks & CDNS_UART_RXBS_SUPPORT;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Disable the TX and RX */
- writel(CDNS_UART_CR_TX_DIS | CDNS_UART_CR_RX_DIS,
-@@ -861,7 +861,7 @@ static int cdns_uart_startup(struct uart
- writel(readl(port->membase + CDNS_UART_ISR),
- port->membase + CDNS_UART_ISR);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- ret = request_irq(port->irq, cdns_uart_isr, 0, CDNS_UART_NAME, port);
- if (ret) {
-@@ -889,7 +889,7 @@ static void cdns_uart_shutdown(struct ua
- int status;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Disable interrupts */
- status = readl(port->membase + CDNS_UART_IMR);
-@@ -900,7 +900,7 @@ static void cdns_uart_shutdown(struct ua
- writel(CDNS_UART_CR_TX_DIS | CDNS_UART_CR_RX_DIS,
- port->membase + CDNS_UART_CR);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- free_irq(port->irq, port);
- }
-@@ -1050,7 +1050,7 @@ static int cdns_uart_poll_get_char(struc
- int c;
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Check if FIFO is empty */
- if (readl(port->membase + CDNS_UART_SR) & CDNS_UART_SR_RXEMPTY)
-@@ -1058,7 +1058,7 @@ static int cdns_uart_poll_get_char(struc
- else /* Read a character */
- c = (unsigned char) readl(port->membase + CDNS_UART_FIFO);
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
-
- return c;
- }
-@@ -1067,7 +1067,7 @@ static void cdns_uart_poll_put_char(stru
- {
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Wait until FIFO is empty */
- while (!(readl(port->membase + CDNS_UART_SR) & CDNS_UART_SR_TXEMPTY))
-@@ -1080,7 +1080,7 @@ static void cdns_uart_poll_put_char(stru
- while (!(readl(port->membase + CDNS_UART_SR) & CDNS_UART_SR_TXEMPTY))
- cpu_relax();
-
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
- #endif
-
-@@ -1232,9 +1232,9 @@ static void cdns_uart_console_write(stru
- if (port->sysrq)
- locked = 0;
- else if (oops_in_progress)
-- locked = spin_trylock_irqsave(&port->lock, flags);
-+ locked = uart_port_trylock_irqsave(port, &flags);
- else
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* save and disable interrupt */
- imr = readl(port->membase + CDNS_UART_IMR);
-@@ -1257,7 +1257,7 @@ static void cdns_uart_console_write(stru
- writel(imr, port->membase + CDNS_UART_IER);
-
- if (locked)
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /**
-@@ -1325,7 +1325,7 @@ static int cdns_uart_suspend(struct devi
- if (console_suspend_enabled && uart_console(port) && may_wake) {
- unsigned long flags;
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- /* Empty the receive FIFO 1st before making changes */
- while (!(readl(port->membase + CDNS_UART_SR) &
- CDNS_UART_SR_RXEMPTY))
-@@ -1334,7 +1334,7 @@ static int cdns_uart_suspend(struct devi
- writel(1, port->membase + CDNS_UART_RXWM);
- /* disable RX timeout interrups */
- writel(CDNS_UART_IXR_TOUT, port->membase + CDNS_UART_IDR);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- /*
-@@ -1372,7 +1372,7 @@ static int cdns_uart_resume(struct devic
- return ret;
- }
-
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
-
- /* Set TX/RX Reset */
- ctrl_reg = readl(port->membase + CDNS_UART_CR);
-@@ -1392,14 +1392,14 @@ static int cdns_uart_resume(struct devic
-
- clk_disable(cdns_uart->uartclk);
- clk_disable(cdns_uart->pclk);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- } else {
-- spin_lock_irqsave(&port->lock, flags);
-+ uart_port_lock_irqsave(port, &flags);
- /* restore original rx trigger level */
- writel(rx_trigger_level, port->membase + CDNS_UART_RXWM);
- /* enable RX timeout interrupt */
- writel(CDNS_UART_IXR_TOUT, port->membase + CDNS_UART_IER);
-- spin_unlock_irqrestore(&port->lock, flags);
-+ uart_port_unlock_irqrestore(port, flags);
- }
-
- return uart_resume_port(cdns_uart->cdns_uart_driver, port);
diff --git a/debian/patches-rt/0075-printk-Add-non-BKL-nbcon-console-basic-infrastructur.patch b/debian/patches-rt/0075-printk-Add-non-BKL-nbcon-console-basic-infrastructur.patch
deleted file mode 100644
index 00f7850c36..0000000000
--- a/debian/patches-rt/0075-printk-Add-non-BKL-nbcon-console-basic-infrastructur.patch
+++ /dev/null
@@ -1,261 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Sat, 16 Sep 2023 21:26:00 +0206
-Subject: [PATCH 075/134] printk: Add non-BKL (nbcon) console basic
- infrastructure
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-The current console/printk subsystem is protected by a Big Kernel Lock,
-(aka console_lock) which has ill defined semantics and is more or less
-stateless. This puts severe limitations on the console subsystem and
-makes forced takeover and output in emergency and panic situations a
-fragile endeavour that is based on try and pray.
-
-The goal of non-BKL (nbcon) consoles is to break out of the console lock
-jail and to provide a new infrastructure that avoids the pitfalls and
-also allows console drivers to be gradually converted over.
-
-The proposed infrastructure aims for the following properties:
-
- - Per console locking instead of global locking
- - Per console state that allows to make informed decisions
- - Stateful handover and takeover
-
-As a first step, state is added to struct console. The per console state
-is an atomic_t using a 32bit bit field.
-
-Reserve state bits, which will be populated later in the series. Wire
-it up into the console register/unregister functionality.
-
-It was decided to use a bitfield because using a plain u32 with
-mask/shift operations resulted in uncomprehensible code.
-
-Co-developed-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: Thomas Gleixner (Intel) <tglx@linutronix.de>
-Reviewed-by: Petr Mladek <pmladek@suse.com>
-Signed-off-by: Petr Mladek <pmladek@suse.com>
-Link: https://lore.kernel.org/r/20230916192007.608398-2-john.ogness@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- include/linux/console.h | 31 ++++++++++++++++++++
- kernel/printk/Makefile | 2 -
- kernel/printk/internal.h | 8 +++++
- kernel/printk/nbcon.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++
- kernel/printk/printk.c | 13 ++++++--
- 5 files changed, 120 insertions(+), 4 deletions(-)
- create mode 100644 kernel/printk/nbcon.c
-
---- a/include/linux/console.h
-+++ b/include/linux/console.h
-@@ -156,6 +156,8 @@ static inline int con_debug_leave(void)
- * /dev/kmesg which requires a larger output buffer.
- * @CON_SUSPENDED: Indicates if a console is suspended. If true, the
- * printing callbacks must not be called.
-+ * @CON_NBCON: Console can operate outside of the legacy style console_lock
-+ * constraints.
- */
- enum cons_flags {
- CON_PRINTBUFFER = BIT(0),
-@@ -166,9 +168,33 @@ enum cons_flags {
- CON_BRL = BIT(5),
- CON_EXTENDED = BIT(6),
- CON_SUSPENDED = BIT(7),
-+ CON_NBCON = BIT(8),
- };
-
- /**
-+ * struct nbcon_state - console state for nbcon consoles
-+ * @atom: Compound of the state fields for atomic operations
-+ *
-+ * To be used for reading and preparing of the value stored in the nbcon
-+ * state variable @console::nbcon_state.
-+ */
-+struct nbcon_state {
-+ union {
-+ unsigned int atom;
-+ struct {
-+ };
-+ };
-+};
-+
-+/*
-+ * The nbcon_state struct is used to easily create and interpret values that
-+ * are stored in the @console::nbcon_state variable. Ensure this struct stays
-+ * within the size boundaries of the atomic variable's underlying type in
-+ * order to avoid any accidental truncation.
-+ */
-+static_assert(sizeof(struct nbcon_state) <= sizeof(int));
-+
-+/**
- * struct console - The console descriptor structure
- * @name: The name of the console driver
- * @write: Write callback to output messages (Optional)
-@@ -187,6 +213,8 @@ enum cons_flags {
- * @dropped: Number of unreported dropped ringbuffer records
- * @data: Driver private data
- * @node: hlist node for the console list
-+ *
-+ * @nbcon_state: State for nbcon consoles
- */
- struct console {
- char name[16];
-@@ -206,6 +234,9 @@ struct console {
- unsigned long dropped;
- void *data;
- struct hlist_node node;
-+
-+ /* nbcon console specific members */
-+ atomic_t __private nbcon_state;
- };
-
- #ifdef CONFIG_LOCKDEP
---- a/kernel/printk/Makefile
-+++ b/kernel/printk/Makefile
-@@ -1,6 +1,6 @@
- # SPDX-License-Identifier: GPL-2.0-only
- obj-y = printk.o
--obj-$(CONFIG_PRINTK) += printk_safe.o
-+obj-$(CONFIG_PRINTK) += printk_safe.o nbcon.o
- obj-$(CONFIG_A11Y_BRAILLE_CONSOLE) += braille.o
- obj-$(CONFIG_PRINTK_INDEX) += index.o
-
---- a/kernel/printk/internal.h
-+++ b/kernel/printk/internal.h
-@@ -3,6 +3,7 @@
- * internal.h - printk internal definitions
- */
- #include <linux/percpu.h>
-+#include <linux/console.h>
-
- #if defined(CONFIG_PRINTK) && defined(CONFIG_SYSCTL)
- void __init printk_sysctl_init(void);
-@@ -61,6 +62,10 @@ void defer_console_output(void);
-
- u16 printk_parse_prefix(const char *text, int *level,
- enum printk_info_flags *flags);
-+
-+void nbcon_init(struct console *con);
-+void nbcon_cleanup(struct console *con);
-+
- #else
-
- #define PRINTK_PREFIX_MAX 0
-@@ -76,6 +81,9 @@ u16 printk_parse_prefix(const char *text
- #define printk_safe_exit_irqrestore(flags) local_irq_restore(flags)
-
- static inline bool printk_percpu_data_ready(void) { return false; }
-+static inline void nbcon_init(struct console *con) { }
-+static inline void nbcon_cleanup(struct console *con) { }
-+
- #endif /* CONFIG_PRINTK */
-
- /**
---- /dev/null
-+++ b/kernel/printk/nbcon.c
-@@ -0,0 +1,70 @@
-+// SPDX-License-Identifier: GPL-2.0-only
-+// Copyright (C) 2022 Linutronix GmbH, John Ogness
-+// Copyright (C) 2022 Intel, Thomas Gleixner
-+
-+#include <linux/kernel.h>
-+#include <linux/console.h>
-+#include "internal.h"
-+/*
-+ * Printk console printing implementation for consoles which does not depend
-+ * on the legacy style console_lock mechanism.
-+ */
-+
-+/**
-+ * nbcon_state_set - Helper function to set the console state
-+ * @con: Console to update
-+ * @new: The new state to write
-+ *
-+ * Only to be used when the console is not yet or no longer visible in the
-+ * system. Otherwise use nbcon_state_try_cmpxchg().
-+ */
-+static inline void nbcon_state_set(struct console *con, struct nbcon_state *new)
-+{
-+ atomic_set(&ACCESS_PRIVATE(con, nbcon_state), new->atom);
-+}
-+
-+/**
-+ * nbcon_state_read - Helper function to read the console state
-+ * @con: Console to read
-+ * @state: The state to store the result
-+ */
-+static inline void nbcon_state_read(struct console *con, struct nbcon_state *state)
-+{
-+ state->atom = atomic_read(&ACCESS_PRIVATE(con, nbcon_state));
-+}
-+
-+/**
-+ * nbcon_state_try_cmpxchg() - Helper function for atomic_try_cmpxchg() on console state
-+ * @con: Console to update
-+ * @cur: Old/expected state
-+ * @new: New state
-+ *
-+ * Return: True on success. False on fail and @cur is updated.
-+ */
-+static inline bool nbcon_state_try_cmpxchg(struct console *con, struct nbcon_state *cur,
-+ struct nbcon_state *new)
-+{
-+ return atomic_try_cmpxchg(&ACCESS_PRIVATE(con, nbcon_state), &cur->atom, new->atom);
-+}
-+
-+/**
-+ * nbcon_init - Initialize the nbcon console specific data
-+ * @con: Console to initialize
-+ */
-+void nbcon_init(struct console *con)
-+{
-+ struct nbcon_state state = { };
-+
-+ nbcon_state_set(con, &state);
-+}
-+
-+/**
-+ * nbcon_cleanup - Cleanup the nbcon console specific data
-+ * @con: Console to cleanup
-+ */
-+void nbcon_cleanup(struct console *con)
-+{
-+ struct nbcon_state state = { };
-+
-+ nbcon_state_set(con, &state);
-+}
---- a/kernel/printk/printk.c
-+++ b/kernel/printk/printk.c
-@@ -3326,9 +3326,10 @@ static void try_enable_default_console(s
- newcon->flags |= CON_CONSDEV;
- }
-
--#define con_printk(lvl, con, fmt, ...) \
-- printk(lvl pr_fmt("%sconsole [%s%d] " fmt), \
-- (con->flags & CON_BOOT) ? "boot" : "", \
-+#define con_printk(lvl, con, fmt, ...) \
-+ printk(lvl pr_fmt("%s%sconsole [%s%d] " fmt), \
-+ (con->flags & CON_NBCON) ? "" : "legacy ", \
-+ (con->flags & CON_BOOT) ? "boot" : "", \
- con->name, con->index, ##__VA_ARGS__)
-
- static void console_init_seq(struct console *newcon, bool bootcon_registered)
-@@ -3488,6 +3489,9 @@ void register_console(struct console *ne
- newcon->dropped = 0;
- console_init_seq(newcon, bootcon_registered);
-
-+ if (newcon->flags & CON_NBCON)
-+ nbcon_init(newcon);
-+
- /*
- * Put this console in the list - keep the
- * preferred driver at the head of the list.
-@@ -3579,6 +3583,9 @@ static int unregister_console_locked(str
- */
- synchronize_srcu(&console_srcu);
-
-+ if (console->flags & CON_NBCON)
-+ nbcon_cleanup(console);
-+
- console_sysfs_notify();
-
- if (console->exit)
diff --git a/debian/patches-rt/0076-printk-nbcon-Add-acquire-release-logic.patch b/debian/patches-rt/0076-printk-nbcon-Add-acquire-release-logic.patch
deleted file mode 100644
index 2718379038..0000000000
--- a/debian/patches-rt/0076-printk-nbcon-Add-acquire-release-logic.patch
+++ /dev/null
@@ -1,705 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Sat, 16 Sep 2023 21:26:01 +0206
-Subject: [PATCH 076/134] printk: nbcon: Add acquire/release logic
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-Add per console acquire/release functionality.
-
-The state of the console is maintained in the "nbcon_state" atomic
-variable.
-
-The console is locked when:
-
- - The 'prio' field contains the priority of the context that owns the
- console. Only higher priority contexts are allowed to take over the
- lock. A value of 0 (NBCON_PRIO_NONE) means the console is not locked.
-
- - The 'cpu' field denotes on which CPU the console is locked. It is used
- to prevent busy waiting on the same CPU. Also it informs the lock owner
- that it has lost the lock in a more complex scenario when the lock was
- taken over by a higher priority context, released, and taken on another
- CPU with the same priority as the interrupted owner.
-
-The acquire mechanism uses a few more fields:
-
- - The 'req_prio' field is used by the handover approach to make the
- current owner aware that there is a context with a higher priority
- waiting for the friendly handover.
-
- - The 'unsafe' field allows to take over the console in a safe way in the
- middle of emitting a message. The field is set only when accessing some
- shared resources or when the console device is manipulated. It can be
- cleared, for example, after emitting one character when the console
- device is in a consistent state.
-
- - The 'unsafe_takeover' field is set when a hostile takeover took the
- console in an unsafe state. The console will stay in the unsafe state
- until re-initialized.
-
-The acquire mechanism uses three approaches:
-
- 1) Direct acquire when the console is not owned or is owned by a lower
- priority context and is in a safe state.
-
- 2) Friendly handover mechanism uses a request/grant handshake. It is used
- when the current owner has lower priority and the console is in an
- unsafe state.
-
- The requesting context:
-
- a) Sets its priority into the 'req_prio' field.
-
- b) Waits (with a timeout) for the owning context to unlock the
- console.
-
- c) Takes the lock and clears the 'req_prio' field.
-
- The owning context:
-
- a) Observes the 'req_prio' field set on exit from the unsafe
- console state.
-
- b) Gives up console ownership by clearing the 'prio' field.
-
- 3) Unsafe hostile takeover allows to take over the lock even when the
- console is an unsafe state. It is used only in panic() by the final
- attempt to flush consoles in a try and hope mode.
-
- Note that separate record buffers are used in panic(). As a result,
- the messages can be read and formatted without any risk even after
- using the hostile takeover in unsafe state.
-
-The release function simply clears the 'prio' field.
-
-All operations on @console::nbcon_state are atomic cmpxchg based to
-handle concurrency.
-
-The acquire/release functions implement only minimal policies:
-
- - Preference for higher priority contexts.
- - Protection of the panic CPU.
-
-All other policy decisions must be made at the call sites:
-
- - What is marked as an unsafe section.
- - Whether to spin-wait if there is already an owner and the console is
- in an unsafe state.
- - Whether to attempt an unsafe hostile takeover.
-
-The design allows to implement the well known:
-
- acquire()
- output_one_printk_record()
- release()
-
-The output of one printk record might be interrupted with a higher priority
-context. The new owner is supposed to reprint the entire interrupted record
-from scratch.
-
-Co-developed-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: Thomas Gleixner (Intel) <tglx@linutronix.de>
-Signed-off-by: Petr Mladek <pmladek@suse.com>
-Link: https://lore.kernel.org/r/20230916192007.608398-3-john.ogness@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- include/linux/console.h | 56 +++++
- kernel/printk/nbcon.c | 497 ++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 553 insertions(+)
-
---- a/include/linux/console.h
-+++ b/include/linux/console.h
-@@ -175,13 +175,29 @@ enum cons_flags {
- * struct nbcon_state - console state for nbcon consoles
- * @atom: Compound of the state fields for atomic operations
- *
-+ * @req_prio: The priority of a handover request
-+ * @prio: The priority of the current owner
-+ * @unsafe: Console is busy in a non takeover region
-+ * @unsafe_takeover: A hostile takeover in an unsafe state happened in the
-+ * past. The console cannot be safe until re-initialized.
-+ * @cpu: The CPU on which the owner runs
-+ *
- * To be used for reading and preparing of the value stored in the nbcon
- * state variable @console::nbcon_state.
-+ *
-+ * The @prio and @req_prio fields are particularly important to allow
-+ * spin-waiting to timeout and give up without the risk of a waiter being
-+ * assigned the lock after giving up.
- */
- struct nbcon_state {
- union {
- unsigned int atom;
- struct {
-+ unsigned int prio : 2;
-+ unsigned int req_prio : 2;
-+ unsigned int unsafe : 1;
-+ unsigned int unsafe_takeover : 1;
-+ unsigned int cpu : 24;
- };
- };
- };
-@@ -195,6 +211,46 @@ struct nbcon_state {
- static_assert(sizeof(struct nbcon_state) <= sizeof(int));
-
- /**
-+ * nbcon_prio - console owner priority for nbcon consoles
-+ * @NBCON_PRIO_NONE: Unused
-+ * @NBCON_PRIO_NORMAL: Normal (non-emergency) usage
-+ * @NBCON_PRIO_EMERGENCY: Emergency output (WARN/OOPS...)
-+ * @NBCON_PRIO_PANIC: Panic output
-+ * @NBCON_PRIO_MAX: The number of priority levels
-+ *
-+ * A higher priority context can takeover the console when it is
-+ * in the safe state. The final attempt to flush consoles in panic()
-+ * can be allowed to do so even in an unsafe state (Hope and pray).
-+ */
-+enum nbcon_prio {
-+ NBCON_PRIO_NONE = 0,
-+ NBCON_PRIO_NORMAL,
-+ NBCON_PRIO_EMERGENCY,
-+ NBCON_PRIO_PANIC,
-+ NBCON_PRIO_MAX,
-+};
-+
-+struct console;
-+
-+/**
-+ * struct nbcon_context - Context for console acquire/release
-+ * @console: The associated console
-+ * @spinwait_max_us: Limit for spin-wait acquire
-+ * @prio: Priority of the context
-+ * @allow_unsafe_takeover: Allow performing takeover even if unsafe. Can
-+ * be used only with NBCON_PRIO_PANIC @prio. It
-+ * might cause a system freeze when the console
-+ * is used later.
-+ */
-+struct nbcon_context {
-+ /* members set by caller */
-+ struct console *console;
-+ unsigned int spinwait_max_us;
-+ enum nbcon_prio prio;
-+ unsigned int allow_unsafe_takeover : 1;
-+};
-+
-+/**
- * struct console - The console descriptor structure
- * @name: The name of the console driver
- * @write: Write callback to output messages (Optional)
---- a/kernel/printk/nbcon.c
-+++ b/kernel/printk/nbcon.c
-@@ -4,10 +4,98 @@
-
- #include <linux/kernel.h>
- #include <linux/console.h>
-+#include <linux/delay.h>
- #include "internal.h"
- /*
- * Printk console printing implementation for consoles which does not depend
- * on the legacy style console_lock mechanism.
-+ *
-+ * The state of the console is maintained in the "nbcon_state" atomic
-+ * variable.
-+ *
-+ * The console is locked when:
-+ *
-+ * - The 'prio' field contains the priority of the context that owns the
-+ * console. Only higher priority contexts are allowed to take over the
-+ * lock. A value of 0 (NBCON_PRIO_NONE) means the console is not locked.
-+ *
-+ * - The 'cpu' field denotes on which CPU the console is locked. It is used
-+ * to prevent busy waiting on the same CPU. Also it informs the lock owner
-+ * that it has lost the lock in a more complex scenario when the lock was
-+ * taken over by a higher priority context, released, and taken on another
-+ * CPU with the same priority as the interrupted owner.
-+ *
-+ * The acquire mechanism uses a few more fields:
-+ *
-+ * - The 'req_prio' field is used by the handover approach to make the
-+ * current owner aware that there is a context with a higher priority
-+ * waiting for the friendly handover.
-+ *
-+ * - The 'unsafe' field allows to take over the console in a safe way in the
-+ * middle of emitting a message. The field is set only when accessing some
-+ * shared resources or when the console device is manipulated. It can be
-+ * cleared, for example, after emitting one character when the console
-+ * device is in a consistent state.
-+ *
-+ * - The 'unsafe_takeover' field is set when a hostile takeover took the
-+ * console in an unsafe state. The console will stay in the unsafe state
-+ * until re-initialized.
-+ *
-+ * The acquire mechanism uses three approaches:
-+ *
-+ * 1) Direct acquire when the console is not owned or is owned by a lower
-+ * priority context and is in a safe state.
-+ *
-+ * 2) Friendly handover mechanism uses a request/grant handshake. It is used
-+ * when the current owner has lower priority and the console is in an
-+ * unsafe state.
-+ *
-+ * The requesting context:
-+ *
-+ * a) Sets its priority into the 'req_prio' field.
-+ *
-+ * b) Waits (with a timeout) for the owning context to unlock the
-+ * console.
-+ *
-+ * c) Takes the lock and clears the 'req_prio' field.
-+ *
-+ * The owning context:
-+ *
-+ * a) Observes the 'req_prio' field set on exit from the unsafe
-+ * console state.
-+ *
-+ * b) Gives up console ownership by clearing the 'prio' field.
-+ *
-+ * 3) Unsafe hostile takeover allows to take over the lock even when the
-+ * console is an unsafe state. It is used only in panic() by the final
-+ * attempt to flush consoles in a try and hope mode.
-+ *
-+ * The release function simply clears the 'prio' field.
-+ *
-+ * All operations on @console::nbcon_state are atomic cmpxchg based to
-+ * handle concurrency.
-+ *
-+ * The acquire/release functions implement only minimal policies:
-+ *
-+ * - Preference for higher priority contexts.
-+ * - Protection of the panic CPU.
-+ *
-+ * All other policy decisions must be made at the call sites:
-+ *
-+ * - What is marked as an unsafe section.
-+ * - Whether to spin-wait if there is already an owner and the console is
-+ * in an unsafe state.
-+ * - Whether to attempt an unsafe hostile takeover.
-+ *
-+ * The design allows to implement the well known:
-+ *
-+ * acquire()
-+ * output_one_printk_record()
-+ * release()
-+ *
-+ * The output of one printk record might be interrupted with a higher priority
-+ * context. The new owner is supposed to reprint the entire interrupted record
-+ * from scratch.
- */
-
- /**
-@@ -48,6 +136,415 @@ static inline bool nbcon_state_try_cmpxc
- }
-
- /**
-+ * nbcon_context_try_acquire_direct - Try to acquire directly
-+ * @ctxt: The context of the caller
-+ * @cur: The current console state
-+ *
-+ * Acquire the console when it is released. Also acquire the console when
-+ * the current owner has a lower priority and the console is in a safe state.
-+ *
-+ * Return: 0 on success. Otherwise, an error code on failure. Also @cur
-+ * is updated to the latest state when failed to modify it.
-+ *
-+ * Errors:
-+ *
-+ * -EPERM: A panic is in progress and this is not the panic CPU.
-+ * Or the current owner or waiter has the same or higher
-+ * priority. No acquire method can be successful in
-+ * this case.
-+ *
-+ * -EBUSY: The current owner has a lower priority but the console
-+ * in an unsafe state. The caller should try using
-+ * the handover acquire method.
-+ */
-+static int nbcon_context_try_acquire_direct(struct nbcon_context *ctxt,
-+ struct nbcon_state *cur)
-+{
-+ unsigned int cpu = smp_processor_id();
-+ struct console *con = ctxt->console;
-+ struct nbcon_state new;
-+
-+ do {
-+ if (other_cpu_in_panic())
-+ return -EPERM;
-+
-+ if (ctxt->prio <= cur->prio || ctxt->prio <= cur->req_prio)
-+ return -EPERM;
-+
-+ if (cur->unsafe)
-+ return -EBUSY;
-+
-+ /*
-+ * The console should never be safe for a direct acquire
-+ * if an unsafe hostile takeover has ever happened.
-+ */
-+ WARN_ON_ONCE(cur->unsafe_takeover);
-+
-+ new.atom = cur->atom;
-+ new.prio = ctxt->prio;
-+ new.req_prio = NBCON_PRIO_NONE;
-+ new.unsafe = cur->unsafe_takeover;
-+ new.cpu = cpu;
-+
-+ } while (!nbcon_state_try_cmpxchg(con, cur, &new));
-+
-+ return 0;
-+}
-+
-+static bool nbcon_waiter_matches(struct nbcon_state *cur, int expected_prio)
-+{
-+ /*
-+ * The request context is well defined by the @req_prio because:
-+ *
-+ * - Only a context with a higher priority can take over the request.
-+ * - There are only three priorities.
-+ * - Only one CPU is allowed to request PANIC priority.
-+ * - Lower priorities are ignored during panic() until reboot.
-+ *
-+ * As a result, the following scenario is *not* possible:
-+ *
-+ * 1. Another context with a higher priority directly takes ownership.
-+ * 2. The higher priority context releases the ownership.
-+ * 3. A lower priority context takes the ownership.
-+ * 4. Another context with the same priority as this context
-+ * creates a request and starts waiting.
-+ */
-+
-+ return (cur->req_prio == expected_prio);
-+}
-+
-+/**
-+ * nbcon_context_try_acquire_requested - Try to acquire after having
-+ * requested a handover
-+ * @ctxt: The context of the caller
-+ * @cur: The current console state
-+ *
-+ * This is a helper function for nbcon_context_try_acquire_handover().
-+ * It is called when the console is in an unsafe state. The current
-+ * owner will release the console on exit from the unsafe region.
-+ *
-+ * Return: 0 on success and @cur is updated to the new console state.
-+ * Otherwise an error code on failure.
-+ *
-+ * Errors:
-+ *
-+ * -EPERM: A panic is in progress and this is not the panic CPU
-+ * or this context is no longer the waiter.
-+ *
-+ * -EBUSY: The console is still locked. The caller should
-+ * continue waiting.
-+ *
-+ * Note: The caller must still remove the request when an error has occurred
-+ * except when this context is no longer the waiter.
-+ */
-+static int nbcon_context_try_acquire_requested(struct nbcon_context *ctxt,
-+ struct nbcon_state *cur)
-+{
-+ unsigned int cpu = smp_processor_id();
-+ struct console *con = ctxt->console;
-+ struct nbcon_state new;
-+
-+ /* Note that the caller must still remove the request! */
-+ if (other_cpu_in_panic())
-+ return -EPERM;
-+
-+ /*
-+ * Note that the waiter will also change if there was an unsafe
-+ * hostile takeover.
-+ */
-+ if (!nbcon_waiter_matches(cur, ctxt->prio))
-+ return -EPERM;
-+
-+ /* If still locked, caller should continue waiting. */
-+ if (cur->prio != NBCON_PRIO_NONE)
-+ return -EBUSY;
-+
-+ /*
-+ * The previous owner should have never released ownership
-+ * in an unsafe region.
-+ */
-+ WARN_ON_ONCE(cur->unsafe);
-+
-+ new.atom = cur->atom;
-+ new.prio = ctxt->prio;
-+ new.req_prio = NBCON_PRIO_NONE;
-+ new.unsafe = cur->unsafe_takeover;
-+ new.cpu = cpu;
-+
-+ if (!nbcon_state_try_cmpxchg(con, cur, &new)) {
-+ /*
-+ * The acquire could fail only when it has been taken
-+ * over by a higher priority context.
-+ */
-+ WARN_ON_ONCE(nbcon_waiter_matches(cur, ctxt->prio));
-+ return -EPERM;
-+ }
-+
-+ /* Handover success. This context now owns the console. */
-+ return 0;
-+}
-+
-+/**
-+ * nbcon_context_try_acquire_handover - Try to acquire via handover
-+ * @ctxt: The context of the caller
-+ * @cur: The current console state
-+ *
-+ * The function must be called only when the context has higher priority
-+ * than the current owner and the console is in an unsafe state.
-+ * It is the case when nbcon_context_try_acquire_direct() returns -EBUSY.
-+ *
-+ * The function sets "req_prio" field to make the current owner aware of
-+ * the request. Then it waits until the current owner releases the console,
-+ * or an even higher context takes over the request, or timeout expires.
-+ *
-+ * The current owner checks the "req_prio" field on exit from the unsafe
-+ * region and releases the console. It does not touch the "req_prio" field
-+ * so that the console stays reserved for the waiter.
-+ *
-+ * Return: 0 on success. Otherwise, an error code on failure. Also @cur
-+ * is updated to the latest state when failed to modify it.
-+ *
-+ * Errors:
-+ *
-+ * -EPERM: A panic is in progress and this is not the panic CPU.
-+ * Or a higher priority context has taken over the
-+ * console or the handover request.
-+ *
-+ * -EBUSY: The current owner is on the same CPU so that the hand
-+ * shake could not work. Or the current owner is not
-+ * willing to wait (zero timeout). Or the console does
-+ * not enter the safe state before timeout passed. The
-+ * caller might still use the unsafe hostile takeover
-+ * when allowed.
-+ *
-+ * -EAGAIN: @cur has changed when creating the handover request.
-+ * The caller should retry with direct acquire.
-+ */
-+static int nbcon_context_try_acquire_handover(struct nbcon_context *ctxt,
-+ struct nbcon_state *cur)
-+{
-+ unsigned int cpu = smp_processor_id();
-+ struct console *con = ctxt->console;
-+ struct nbcon_state new;
-+ int timeout;
-+ int request_err = -EBUSY;
-+
-+ /*
-+ * Check that the handover is called when the direct acquire failed
-+ * with -EBUSY.
-+ */
-+ WARN_ON_ONCE(ctxt->prio <= cur->prio || ctxt->prio <= cur->req_prio);
-+ WARN_ON_ONCE(!cur->unsafe);
-+
-+ /* Handover is not possible on the same CPU. */
-+ if (cur->cpu == cpu)
-+ return -EBUSY;
-+
-+ /*
-+ * Console stays unsafe after an unsafe takeover until re-initialized.
-+ * Waiting is not going to help in this case.
-+ */
-+ if (cur->unsafe_takeover)
-+ return -EBUSY;
-+
-+ /* Is the caller willing to wait? */
-+ if (ctxt->spinwait_max_us == 0)
-+ return -EBUSY;
-+
-+ /*
-+ * Setup a request for the handover. The caller should try to acquire
-+ * the console directly when the current state has been modified.
-+ */
-+ new.atom = cur->atom;
-+ new.req_prio = ctxt->prio;
-+ if (!nbcon_state_try_cmpxchg(con, cur, &new))
-+ return -EAGAIN;
-+
-+ cur->atom = new.atom;
-+
-+ /* Wait until there is no owner and then acquire the console. */
-+ for (timeout = ctxt->spinwait_max_us; timeout >= 0; timeout--) {
-+ /* On successful acquire, this request is cleared. */
-+ request_err = nbcon_context_try_acquire_requested(ctxt, cur);
-+ if (!request_err)
-+ return 0;
-+
-+ /*
-+ * If the acquire should be aborted, it must be ensured
-+ * that the request is removed before returning to caller.
-+ */
-+ if (request_err == -EPERM)
-+ break;
-+
-+ udelay(1);
-+
-+ /* Re-read the state because some time has passed. */
-+ nbcon_state_read(con, cur);
-+ }
-+
-+ /* Timed out or aborted. Carefully remove handover request. */
-+ do {
-+ /*
-+ * No need to remove request if there is a new waiter. This
-+ * can only happen if a higher priority context has taken over
-+ * the console or the handover request.
-+ */
-+ if (!nbcon_waiter_matches(cur, ctxt->prio))
-+ return -EPERM;
-+
-+ /* Unset request for handover. */
-+ new.atom = cur->atom;
-+ new.req_prio = NBCON_PRIO_NONE;
-+ if (nbcon_state_try_cmpxchg(con, cur, &new)) {
-+ /*
-+ * Request successfully unset. Report failure of
-+ * acquiring via handover.
-+ */
-+ cur->atom = new.atom;
-+ return request_err;
-+ }
-+
-+ /*
-+ * Unable to remove request. Try to acquire in case
-+ * the owner has released the lock.
-+ */
-+ } while (nbcon_context_try_acquire_requested(ctxt, cur));
-+
-+ /* Lucky timing. The acquire succeeded while removing the request. */
-+ return 0;
-+}
-+
-+/**
-+ * nbcon_context_try_acquire_hostile - Acquire via unsafe hostile takeover
-+ * @ctxt: The context of the caller
-+ * @cur: The current console state
-+ *
-+ * Acquire the console even in the unsafe state.
-+ *
-+ * It can be permitted by setting the 'allow_unsafe_takeover' field only
-+ * by the final attempt to flush messages in panic().
-+ *
-+ * Return: 0 on success. -EPERM when not allowed by the context.
-+ */
-+static int nbcon_context_try_acquire_hostile(struct nbcon_context *ctxt,
-+ struct nbcon_state *cur)
-+{
-+ unsigned int cpu = smp_processor_id();
-+ struct console *con = ctxt->console;
-+ struct nbcon_state new;
-+
-+ if (!ctxt->allow_unsafe_takeover)
-+ return -EPERM;
-+
-+ /* Ensure caller is allowed to perform unsafe hostile takeovers. */
-+ if (WARN_ON_ONCE(ctxt->prio != NBCON_PRIO_PANIC))
-+ return -EPERM;
-+
-+ /*
-+ * Check that try_acquire_direct() and try_acquire_handover() returned
-+ * -EBUSY in the right situation.
-+ */
-+ WARN_ON_ONCE(ctxt->prio <= cur->prio || ctxt->prio <= cur->req_prio);
-+ WARN_ON_ONCE(cur->unsafe != true);
-+
-+ do {
-+ new.atom = cur->atom;
-+ new.cpu = cpu;
-+ new.prio = ctxt->prio;
-+ new.unsafe |= cur->unsafe_takeover;
-+ new.unsafe_takeover |= cur->unsafe;
-+
-+ } while (!nbcon_state_try_cmpxchg(con, cur, &new));
-+
-+ return 0;
-+}
-+
-+/**
-+ * nbcon_context_try_acquire - Try to acquire nbcon console
-+ * @ctxt: The context of the caller
-+ *
-+ * Return: True if the console was acquired. False otherwise.
-+ *
-+ * If the caller allowed an unsafe hostile takeover, on success the
-+ * caller should check the current console state to see if it is
-+ * in an unsafe state. Otherwise, on success the caller may assume
-+ * the console is not in an unsafe state.
-+ */
-+__maybe_unused
-+static bool nbcon_context_try_acquire(struct nbcon_context *ctxt)
-+{
-+ struct console *con = ctxt->console;
-+ struct nbcon_state cur;
-+ int err;
-+
-+ nbcon_state_read(con, &cur);
-+try_again:
-+ err = nbcon_context_try_acquire_direct(ctxt, &cur);
-+ if (err != -EBUSY)
-+ goto out;
-+
-+ err = nbcon_context_try_acquire_handover(ctxt, &cur);
-+ if (err == -EAGAIN)
-+ goto try_again;
-+ if (err != -EBUSY)
-+ goto out;
-+
-+ err = nbcon_context_try_acquire_hostile(ctxt, &cur);
-+out:
-+ return !err;
-+}
-+
-+static bool nbcon_owner_matches(struct nbcon_state *cur, int expected_cpu,
-+ int expected_prio)
-+{
-+ /*
-+ * Since consoles can only be acquired by higher priorities,
-+ * owning contexts are uniquely identified by @prio. However,
-+ * since contexts can unexpectedly lose ownership, it is
-+ * possible that later another owner appears with the same
-+ * priority. For this reason @cpu is also needed.
-+ */
-+
-+ if (cur->prio != expected_prio)
-+ return false;
-+
-+ if (cur->cpu != expected_cpu)
-+ return false;
-+
-+ return true;
-+}
-+
-+/**
-+ * nbcon_context_release - Release the console
-+ * @ctxt: The nbcon context from nbcon_context_try_acquire()
-+ */
-+__maybe_unused
-+static void nbcon_context_release(struct nbcon_context *ctxt)
-+{
-+ unsigned int cpu = smp_processor_id();
-+ struct console *con = ctxt->console;
-+ struct nbcon_state cur;
-+ struct nbcon_state new;
-+
-+ nbcon_state_read(con, &cur);
-+
-+ do {
-+ if (!nbcon_owner_matches(&cur, cpu, ctxt->prio))
-+ return;
-+
-+ new.atom = cur.atom;
-+ new.prio = NBCON_PRIO_NONE;
-+
-+ /*
-+ * If @unsafe_takeover is set, it is kept set so that
-+ * the state remains permanently unsafe.
-+ */
-+ new.unsafe |= cur.unsafe_takeover;
-+
-+ } while (!nbcon_state_try_cmpxchg(con, &cur, &new));
-+}
-+
-+/**
- * nbcon_init - Initialize the nbcon console specific data
- * @con: Console to initialize
- */
diff --git a/debian/patches-rt/0077-printk-Make-static-printk-buffers-available-to-nbcon.patch b/debian/patches-rt/0077-printk-Make-static-printk-buffers-available-to-nbcon.patch
deleted file mode 100644
index f3fbb6a822..0000000000
--- a/debian/patches-rt/0077-printk-Make-static-printk-buffers-available-to-nbcon.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From: John Ogness <john.ogness@linutronix.de>
-Date: Sat, 16 Sep 2023 21:26:02 +0206
-Subject: [PATCH 077/134] printk: Make static printk buffers available to nbcon
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-The nbcon boot consoles also need printk buffers that are available
-very early. Since the nbcon boot consoles will also be serialized
-by the console_lock, they can use the same static printk buffers
-that the legacy consoles are using.
-
-Make the legacy static printk buffers available outside of printk.c
-so they can be used by nbcon.c.
-
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Reviewed-by: Petr Mladek <pmladek@suse.com>
-Signed-off-by: Petr Mladek <pmladek@suse.com>
-Link: https://lore.kernel.org/r/20230916192007.608398-4-john.ogness@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- kernel/printk/internal.h | 2 ++
- kernel/printk/printk.c | 13 +++++++++----
- 2 files changed, 11 insertions(+), 4 deletions(-)
-
---- a/kernel/printk/internal.h
-+++ b/kernel/printk/internal.h
-@@ -86,6 +86,8 @@ static inline void nbcon_cleanup(struct
-
- #endif /* CONFIG_PRINTK */
-
-+extern struct printk_buffers printk_shared_pbufs;
-+
- /**
- * struct printk_buffers - Buffers to read/format/output printk messages.
- * @outbuf: After formatting, contains text to output.
---- a/kernel/printk/printk.c
-+++ b/kernel/printk/printk.c
-@@ -2847,6 +2847,13 @@ static bool printk_get_next_message(stru
- }
-
- /*
-+ * Used as the printk buffers for non-panic, serialized console printing.
-+ * This is for legacy (!CON_NBCON) as well as all boot (CON_BOOT) consoles.
-+ * Its usage requires the console_lock held.
-+ */
-+struct printk_buffers printk_shared_pbufs;
-+
-+/*
- * Print one record for the given console. The record printed is whatever
- * record is the next available record for the given console.
- *
-@@ -2863,12 +2870,10 @@ static bool printk_get_next_message(stru
- */
- static bool console_emit_next_record(struct console *con, bool *handover, int cookie)
- {
-- static struct printk_buffers pbufs;
--
- bool is_extended = console_srcu_read_flags(con) & CON_EXTENDED;
-- char *outbuf = &pbufs.outbuf[0];
-+ char *outbuf = &printk_shared_pbufs.outbuf[0];
- struct printk_message pmsg = {
-- .pbufs = &pbufs,
-+ .pbufs = &printk_shared_pbufs,
- };
- unsigned long flags;
-
diff --git a/debian/patches-rt/0078-printk-nbcon-Add-buffer-management.patch b/debian/patches-rt/0078-printk-nbcon-Add-buffer-management.patch
deleted file mode 100644
index ea96abd7ed..0000000000
--- a/debian/patches-rt/0078-printk-nbcon-Add-buffer-management.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Sat, 16 Sep 2023 21:26:03 +0206
-Subject: [PATCH 078/134] printk: nbcon: Add buffer management
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-In case of hostile takeovers it must be ensured that the previous
-owner cannot scribble over the output buffer of the emergency/panic
-context. This is achieved by:
-
- - Adding a global output buffer instance for the panic context.
- This is the only situation where hostile takeovers can occur and
- there is always at most 1 panic context.
-
- - Allocating an output buffer per non-boot console upon console
- registration. This buffer is used by the console owner when not
- in panic context. (For boot consoles, the existing shared global
- legacy output buffer is used instead. Boot console printing will
- be synchronized with legacy console printing.)
-
- - Choosing the appropriate buffer is handled in the acquire/release
- functions.
-
-Co-developed-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: Thomas Gleixner (Intel) <tglx@linutronix.de>
-Reviewed-by: Petr Mladek <pmladek@suse.com>
-Signed-off-by: Petr Mladek <pmladek@suse.com>
-Link: https://lore.kernel.org/r/20230916192007.608398-5-john.ogness@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- include/linux/console.h | 7 ++++
- kernel/printk/internal.h | 12 ++++++-
- kernel/printk/nbcon.c | 73 +++++++++++++++++++++++++++++++++++++++++++----
- kernel/printk/printk.c | 22 +++++++++-----
- 4 files changed, 99 insertions(+), 15 deletions(-)
-
---- a/include/linux/console.h
-+++ b/include/linux/console.h
-@@ -231,6 +231,7 @@ enum nbcon_prio {
- };
-
- struct console;
-+struct printk_buffers;
-
- /**
- * struct nbcon_context - Context for console acquire/release
-@@ -241,6 +242,7 @@ struct console;
- * be used only with NBCON_PRIO_PANIC @prio. It
- * might cause a system freeze when the console
- * is used later.
-+ * @pbufs: Pointer to the text buffer for this context
- */
- struct nbcon_context {
- /* members set by caller */
-@@ -248,6 +250,9 @@ struct nbcon_context {
- unsigned int spinwait_max_us;
- enum nbcon_prio prio;
- unsigned int allow_unsafe_takeover : 1;
-+
-+ /* members set by acquire */
-+ struct printk_buffers *pbufs;
- };
-
- /**
-@@ -271,6 +276,7 @@ struct nbcon_context {
- * @node: hlist node for the console list
- *
- * @nbcon_state: State for nbcon consoles
-+ * @pbufs: Pointer to nbcon private buffer
- */
- struct console {
- char name[16];
-@@ -293,6 +299,7 @@ struct console {
-
- /* nbcon console specific members */
- atomic_t __private nbcon_state;
-+ struct printk_buffers *pbufs;
- };
-
- #ifdef CONFIG_LOCKDEP
---- a/kernel/printk/internal.h
-+++ b/kernel/printk/internal.h
-@@ -13,6 +13,12 @@ int devkmsg_sysctl_set_loglvl(struct ctl
- #define printk_sysctl_init() do { } while (0)
- #endif
-
-+#define con_printk(lvl, con, fmt, ...) \
-+ printk(lvl pr_fmt("%s%sconsole [%s%d] " fmt), \
-+ (con->flags & CON_NBCON) ? "" : "legacy ", \
-+ (con->flags & CON_BOOT) ? "boot" : "", \
-+ con->name, con->index, ##__VA_ARGS__)
-+
- #ifdef CONFIG_PRINTK
-
- #ifdef CONFIG_PRINTK_CALLER
-@@ -63,8 +69,9 @@ void defer_console_output(void);
- u16 printk_parse_prefix(const char *text, int *level,
- enum printk_info_flags *flags);
-
-+bool nbcon_alloc(struct console *con);
- void nbcon_init(struct console *con);
--void nbcon_cleanup(struct console *con);
-+void nbcon_free(struct console *con);
-
- #else
-
-@@ -81,8 +88,9 @@ void nbcon_cleanup(struct console *con);
- #define printk_safe_exit_irqrestore(flags) local_irq_restore(flags)
-
- static inline bool printk_percpu_data_ready(void) { return false; }
-+static inline bool nbcon_alloc(struct console *con) { return false; }
- static inline void nbcon_init(struct console *con) { }
--static inline void nbcon_cleanup(struct console *con) { }
-+static inline void nbcon_free(struct console *con) { }
-
- #endif /* CONFIG_PRINTK */
-
---- a/kernel/printk/nbcon.c
-+++ b/kernel/printk/nbcon.c
-@@ -5,6 +5,7 @@
- #include <linux/kernel.h>
- #include <linux/console.h>
- #include <linux/delay.h>
-+#include <linux/slab.h>
- #include "internal.h"
- /*
- * Printk console printing implementation for consoles which does not depend
-@@ -70,6 +71,10 @@
- * console is an unsafe state. It is used only in panic() by the final
- * attempt to flush consoles in a try and hope mode.
- *
-+ * Note that separate record buffers are used in panic(). As a result,
-+ * the messages can be read and formatted without any risk even after
-+ * using the hostile takeover in unsafe state.
-+ *
- * The release function simply clears the 'prio' field.
- *
- * All operations on @console::nbcon_state are atomic cmpxchg based to
-@@ -459,6 +464,8 @@ static int nbcon_context_try_acquire_hos
- return 0;
- }
-
-+static struct printk_buffers panic_nbcon_pbufs;
-+
- /**
- * nbcon_context_try_acquire - Try to acquire nbcon console
- * @ctxt: The context of the caller
-@@ -473,6 +480,7 @@ static int nbcon_context_try_acquire_hos
- __maybe_unused
- static bool nbcon_context_try_acquire(struct nbcon_context *ctxt)
- {
-+ unsigned int cpu = smp_processor_id();
- struct console *con = ctxt->console;
- struct nbcon_state cur;
- int err;
-@@ -491,7 +499,18 @@ static bool nbcon_context_try_acquire(st
-
- err = nbcon_context_try_acquire_hostile(ctxt, &cur);
- out:
-- return !err;
-+ if (err)
-+ return false;
-+
-+ /* Acquire succeeded. */
-+
-+ /* Assign the appropriate buffer for this context. */
-+ if (atomic_read(&panic_cpu) == cpu)
-+ ctxt->pbufs = &panic_nbcon_pbufs;
-+ else
-+ ctxt->pbufs = con->pbufs;
-+
-+ return true;
- }
-
- static bool nbcon_owner_matches(struct nbcon_state *cur, int expected_cpu,
-@@ -530,7 +549,7 @@ static void nbcon_context_release(struct
-
- do {
- if (!nbcon_owner_matches(&cur, cpu, ctxt->prio))
-- return;
-+ break;
-
- new.atom = cur.atom;
- new.prio = NBCON_PRIO_NONE;
-@@ -542,26 +561,70 @@ static void nbcon_context_release(struct
- new.unsafe |= cur.unsafe_takeover;
-
- } while (!nbcon_state_try_cmpxchg(con, &cur, &new));
-+
-+ ctxt->pbufs = NULL;
-+}
-+
-+/**
-+ * nbcon_alloc - Allocate buffers needed by the nbcon console
-+ * @con: Console to allocate buffers for
-+ *
-+ * Return: True on success. False otherwise and the console cannot
-+ * be used.
-+ *
-+ * This is not part of nbcon_init() because buffer allocation must
-+ * be performed earlier in the console registration process.
-+ */
-+bool nbcon_alloc(struct console *con)
-+{
-+ if (con->flags & CON_BOOT) {
-+ /*
-+ * Boot console printing is synchronized with legacy console
-+ * printing, so boot consoles can share the same global printk
-+ * buffers.
-+ */
-+ con->pbufs = &printk_shared_pbufs;
-+ } else {
-+ con->pbufs = kmalloc(sizeof(*con->pbufs), GFP_KERNEL);
-+ if (!con->pbufs) {
-+ con_printk(KERN_ERR, con, "failed to allocate printing buffer\n");
-+ return false;
-+ }
-+ }
-+
-+ return true;
- }
-
- /**
- * nbcon_init - Initialize the nbcon console specific data
- * @con: Console to initialize
-+ *
-+ * nbcon_alloc() *must* be called and succeed before this function
-+ * is called.
- */
- void nbcon_init(struct console *con)
- {
- struct nbcon_state state = { };
-
-+ /* nbcon_alloc() must have been called and successful! */
-+ BUG_ON(!con->pbufs);
-+
- nbcon_state_set(con, &state);
- }
-
- /**
-- * nbcon_cleanup - Cleanup the nbcon console specific data
-- * @con: Console to cleanup
-+ * nbcon_free - Free and cleanup the nbcon console specific data
-+ * @con: Console to free/cleanup nbcon data
- */
--void nbcon_cleanup(struct console *con)
-+void nbcon_free(struct console *con)
- {
- struct nbcon_state state = { };
-
- nbcon_state_set(con, &state);
-+
-+ /* Boot consoles share global printk buffers. */
-+ if (!(con->flags & CON_BOOT))
-+ kfree(con->pbufs);
-+
-+ con->pbufs = NULL;
- }
---- a/kernel/printk/printk.c
-+++ b/kernel/printk/printk.c
-@@ -3331,12 +3331,6 @@ static void try_enable_default_console(s
- newcon->flags |= CON_CONSDEV;
- }
-
--#define con_printk(lvl, con, fmt, ...) \
-- printk(lvl pr_fmt("%s%sconsole [%s%d] " fmt), \
-- (con->flags & CON_NBCON) ? "" : "legacy ", \
-- (con->flags & CON_BOOT) ? "boot" : "", \
-- con->name, con->index, ##__VA_ARGS__)
--
- static void console_init_seq(struct console *newcon, bool bootcon_registered)
- {
- struct console *con;
-@@ -3450,6 +3444,15 @@ void register_console(struct console *ne
- goto unlock;
- }
-
-+ if (newcon->flags & CON_NBCON) {
-+ /*
-+ * Ensure the nbcon console buffers can be allocated
-+ * before modifying any global data.
-+ */
-+ if (!nbcon_alloc(newcon))
-+ goto unlock;
-+ }
-+
- /*
- * See if we want to enable this console driver by default.
- *
-@@ -3477,8 +3480,11 @@ void register_console(struct console *ne
- err = try_enable_preferred_console(newcon, false);
-
- /* printk() messages are not printed to the Braille console. */
-- if (err || newcon->flags & CON_BRL)
-+ if (err || newcon->flags & CON_BRL) {
-+ if (newcon->flags & CON_NBCON)
-+ nbcon_free(newcon);
- goto unlock;
-+ }
-
- /*
- * If we have a bootconsole, and are switching to a real console,
-@@ -3589,7 +3595,7 @@ static int unregister_console_locked(str
- synchronize_srcu(&console_srcu);
-
- if (console->flags & CON_NBCON)
-- nbcon_cleanup(console);
-+ nbcon_free(console);
-
- console_sysfs_notify();
-
diff --git a/debian/patches-rt/0079-printk-nbcon-Add-ownership-state-functions.patch b/debian/patches-rt/0079-printk-nbcon-Add-ownership-state-functions.patch
deleted file mode 100644
index e26a5f332d..0000000000
--- a/debian/patches-rt/0079-printk-nbcon-Add-ownership-state-functions.patch
+++ /dev/null
@@ -1,179 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Sat, 16 Sep 2023 21:26:04 +0206
-Subject: [PATCH 079/134] printk: nbcon: Add ownership state functions
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-Provide functions that are related to the safe handover mechanism
-and allow console drivers to dynamically specify unsafe regions:
-
- - nbcon_context_can_proceed()
-
- Invoked by a console owner to check whether a handover request
- is pending or whether the console has been taken over by another
- context. If a handover request is pending, this function will
- also perform the handover, thus cancelling its own ownership.
-
- - nbcon_context_enter_unsafe()/nbcon_context_exit_unsafe()
-
- Invoked by a console owner to denote that the driver is about
- to enter or leave a critical region where a take over is unsafe.
- The exit variant is the point where the current owner releases
- the lock for a higher priority context which asked for the
- friendly handover.
-
- The unsafe state is stored in the console state and allows a
- new context to make informed decisions whether to attempt a
- takeover of such a console. The unsafe state is also available
- to the driver so that it can make informed decisions about the
- required actions and possibly take a special emergency path.
-
-Co-developed-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: Thomas Gleixner (Intel) <tglx@linutronix.de>
-Reviewed-by: Petr Mladek <pmladek@suse.com>
-Signed-off-by: Petr Mladek <pmladek@suse.com>
-Link: https://lore.kernel.org/r/20230916192007.608398-6-john.ogness@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- kernel/printk/nbcon.c | 123 +++++++++++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 122 insertions(+), 1 deletion(-)
-
---- a/kernel/printk/nbcon.c
-+++ b/kernel/printk/nbcon.c
-@@ -537,7 +537,6 @@ static bool nbcon_owner_matches(struct n
- * nbcon_context_release - Release the console
- * @ctxt: The nbcon context from nbcon_context_try_acquire()
- */
--__maybe_unused
- static void nbcon_context_release(struct nbcon_context *ctxt)
- {
- unsigned int cpu = smp_processor_id();
-@@ -566,6 +565,128 @@ static void nbcon_context_release(struct
- }
-
- /**
-+ * nbcon_context_can_proceed - Check whether ownership can proceed
-+ * @ctxt: The nbcon context from nbcon_context_try_acquire()
-+ * @cur: The current console state
-+ *
-+ * Return: True if this context still owns the console. False if
-+ * ownership was handed over or taken.
-+ *
-+ * Must be invoked when entering the unsafe state to make sure that it still
-+ * owns the lock. Also must be invoked when exiting the unsafe context
-+ * to eventually free the lock for a higher priority context which asked
-+ * for the friendly handover.
-+ *
-+ * It can be called inside an unsafe section when the console is just
-+ * temporary in safe state instead of exiting and entering the unsafe
-+ * state.
-+ *
-+ * Also it can be called in the safe context before doing an expensive
-+ * safe operation. It does not make sense to do the operation when
-+ * a higher priority context took the lock.
-+ *
-+ * When this function returns false then the calling context no longer owns
-+ * the console and is no longer allowed to go forward. In this case it must
-+ * back out immediately and carefully. The buffer content is also no longer
-+ * trusted since it no longer belongs to the calling context.
-+ */
-+static bool nbcon_context_can_proceed(struct nbcon_context *ctxt, struct nbcon_state *cur)
-+{
-+ unsigned int cpu = smp_processor_id();
-+
-+ /* Make sure this context still owns the console. */
-+ if (!nbcon_owner_matches(cur, cpu, ctxt->prio))
-+ return false;
-+
-+ /* The console owner can proceed if there is no waiter. */
-+ if (cur->req_prio == NBCON_PRIO_NONE)
-+ return true;
-+
-+ /*
-+ * A console owner within an unsafe region is always allowed to
-+ * proceed, even if there are waiters. It can perform a handover
-+ * when exiting the unsafe region. Otherwise the waiter will
-+ * need to perform an unsafe hostile takeover.
-+ */
-+ if (cur->unsafe)
-+ return true;
-+
-+ /* Waiters always have higher priorities than owners. */
-+ WARN_ON_ONCE(cur->req_prio <= cur->prio);
-+
-+ /*
-+ * Having a safe point for take over and eventually a few
-+ * duplicated characters or a full line is way better than a
-+ * hostile takeover. Post processing can take care of the garbage.
-+ * Release and hand over.
-+ */
-+ nbcon_context_release(ctxt);
-+
-+ /*
-+ * It is not clear whether the waiter really took over ownership. The
-+ * outermost callsite must make the final decision whether console
-+ * ownership is needed for it to proceed. If yes, it must reacquire
-+ * ownership (possibly hostile) before carefully proceeding.
-+ *
-+ * The calling context no longer owns the console so go back all the
-+ * way instead of trying to implement reacquire heuristics in tons of
-+ * places.
-+ */
-+ return false;
-+}
-+
-+#define nbcon_context_enter_unsafe(c) __nbcon_context_update_unsafe(c, true)
-+#define nbcon_context_exit_unsafe(c) __nbcon_context_update_unsafe(c, false)
-+
-+/**
-+ * __nbcon_context_update_unsafe - Update the unsafe bit in @con->nbcon_state
-+ * @ctxt: The nbcon context from nbcon_context_try_acquire()
-+ * @unsafe: The new value for the unsafe bit
-+ *
-+ * Return: True if the unsafe state was updated and this context still
-+ * owns the console. Otherwise false if ownership was handed
-+ * over or taken.
-+ *
-+ * This function allows console owners to modify the unsafe status of the
-+ * console.
-+ *
-+ * When this function returns false then the calling context no longer owns
-+ * the console and is no longer allowed to go forward. In this case it must
-+ * back out immediately and carefully. The buffer content is also no longer
-+ * trusted since it no longer belongs to the calling context.
-+ *
-+ * Internal helper to avoid duplicated code.
-+ */
-+__maybe_unused
-+static bool __nbcon_context_update_unsafe(struct nbcon_context *ctxt, bool unsafe)
-+{
-+ struct console *con = ctxt->console;
-+ struct nbcon_state cur;
-+ struct nbcon_state new;
-+
-+ nbcon_state_read(con, &cur);
-+
-+ do {
-+ /*
-+ * The unsafe bit must not be cleared if an
-+ * unsafe hostile takeover has occurred.
-+ */
-+ if (!unsafe && cur.unsafe_takeover)
-+ goto out;
-+
-+ if (!nbcon_context_can_proceed(ctxt, &cur))
-+ return false;
-+
-+ new.atom = cur.atom;
-+ new.unsafe = unsafe;
-+ } while (!nbcon_state_try_cmpxchg(con, &cur, &new));
-+
-+ cur.atom = new.atom;
-+out:
-+ return nbcon_context_can_proceed(ctxt, &cur);
-+}
-+
-+/**
- * nbcon_alloc - Allocate buffers needed by the nbcon console
- * @con: Console to allocate buffers for
- *
diff --git a/debian/patches-rt/0080-printk-nbcon-Add-sequence-handling.patch b/debian/patches-rt/0080-printk-nbcon-Add-sequence-handling.patch
deleted file mode 100644
index 3988d6124a..0000000000
--- a/debian/patches-rt/0080-printk-nbcon-Add-sequence-handling.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Sat, 16 Sep 2023 21:26:05 +0206
-Subject: [PATCH 080/134] printk: nbcon: Add sequence handling
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-Add an atomic_long_t field @nbcon_seq to the console struct to
-store the sequence number for nbcon consoles. For nbcon consoles
-this will be used instead of the non-atomic @seq field. The new
-field allows for safe atomic sequence number updates without
-requiring any locking.
-
-On 64bit systems the new field stores the full sequence number.
-On 32bit systems the new field stores the lower 32 bits of the
-sequence number, which are expanded to 64bit as needed by
-folding the values based on the sequence numbers available in
-the ringbuffer.
-
-For 32bit systems, having a 32bit representation in the console
-is sufficient. If a console ever gets more than 2^31 records
-behind the ringbuffer then this is the least of the problems.
-
-Co-developed-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: Thomas Gleixner (Intel) <tglx@linutronix.de>
-Signed-off-by: Petr Mladek <pmladek@suse.com>
-Link: https://lore.kernel.org/r/20230916192007.608398-7-john.ogness@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- include/linux/console.h | 4 +
- kernel/printk/internal.h | 7 +++
- kernel/printk/nbcon.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++
- kernel/printk/printk.c | 31 +++++++++++---
- 4 files changed, 136 insertions(+), 7 deletions(-)
-
---- a/include/linux/console.h
-+++ b/include/linux/console.h
-@@ -243,6 +243,7 @@ struct printk_buffers;
- * might cause a system freeze when the console
- * is used later.
- * @pbufs: Pointer to the text buffer for this context
-+ * @seq: The sequence number to print for this context
- */
- struct nbcon_context {
- /* members set by caller */
-@@ -253,6 +254,7 @@ struct nbcon_context {
-
- /* members set by acquire */
- struct printk_buffers *pbufs;
-+ u64 seq;
- };
-
- /**
-@@ -276,6 +278,7 @@ struct nbcon_context {
- * @node: hlist node for the console list
- *
- * @nbcon_state: State for nbcon consoles
-+ * @nbcon_seq: Sequence number of the next record for nbcon to print
- * @pbufs: Pointer to nbcon private buffer
- */
- struct console {
-@@ -299,6 +302,7 @@ struct console {
-
- /* nbcon console specific members */
- atomic_t __private nbcon_state;
-+ atomic_long_t __private nbcon_seq;
- struct printk_buffers *pbufs;
- };
-
---- a/kernel/printk/internal.h
-+++ b/kernel/printk/internal.h
-@@ -4,6 +4,7 @@
- */
- #include <linux/percpu.h>
- #include <linux/console.h>
-+#include "printk_ringbuffer.h"
-
- #if defined(CONFIG_PRINTK) && defined(CONFIG_SYSCTL)
- void __init printk_sysctl_init(void);
-@@ -42,6 +43,8 @@ enum printk_info_flags {
- LOG_CONT = 8, /* text is a fragment of a continuation line */
- };
-
-+extern struct printk_ringbuffer *prb;
-+
- __printf(4, 0)
- int vprintk_store(int facility, int level,
- const struct dev_printk_info *dev_info,
-@@ -69,6 +72,8 @@ void defer_console_output(void);
- u16 printk_parse_prefix(const char *text, int *level,
- enum printk_info_flags *flags);
-
-+u64 nbcon_seq_read(struct console *con);
-+void nbcon_seq_force(struct console *con, u64 seq);
- bool nbcon_alloc(struct console *con);
- void nbcon_init(struct console *con);
- void nbcon_free(struct console *con);
-@@ -88,6 +93,8 @@ void nbcon_free(struct console *con);
- #define printk_safe_exit_irqrestore(flags) local_irq_restore(flags)
-
- static inline bool printk_percpu_data_ready(void) { return false; }
-+static inline u64 nbcon_seq_read(struct console *con) { return 0; }
-+static inline void nbcon_seq_force(struct console *con, u64 seq) { }
- static inline bool nbcon_alloc(struct console *con) { return false; }
- static inline void nbcon_init(struct console *con) { }
- static inline void nbcon_free(struct console *con) { }
---- a/kernel/printk/nbcon.c
-+++ b/kernel/printk/nbcon.c
-@@ -140,6 +140,101 @@ static inline bool nbcon_state_try_cmpxc
- return atomic_try_cmpxchg(&ACCESS_PRIVATE(con, nbcon_state), &cur->atom, new->atom);
- }
-
-+#ifdef CONFIG_64BIT
-+
-+#define __seq_to_nbcon_seq(seq) (seq)
-+#define __nbcon_seq_to_seq(seq) (seq)
-+
-+#else /* CONFIG_64BIT */
-+
-+#define __seq_to_nbcon_seq(seq) ((u32)seq)
-+
-+static inline u64 __nbcon_seq_to_seq(u32 nbcon_seq)
-+{
-+ u64 seq;
-+ u64 rb_next_seq;
-+
-+ /*
-+ * The provided sequence is only the lower 32 bits of the ringbuffer
-+ * sequence. It needs to be expanded to 64bit. Get the next sequence
-+ * number from the ringbuffer and fold it.
-+ *
-+ * Having a 32bit representation in the console is sufficient.
-+ * If a console ever gets more than 2^31 records behind
-+ * the ringbuffer then this is the least of the problems.
-+ *
-+ * Also the access to the ring buffer is always safe.
-+ */
-+ rb_next_seq = prb_next_seq(prb);
-+ seq = rb_next_seq - ((u32)rb_next_seq - nbcon_seq);
-+
-+ return seq;
-+}
-+
-+#endif /* CONFIG_64BIT */
-+
-+/**
-+ * nbcon_seq_read - Read the current console sequence
-+ * @con: Console to read the sequence of
-+ *
-+ * Return: Sequence number of the next record to print on @con.
-+ */
-+u64 nbcon_seq_read(struct console *con)
-+{
-+ unsigned long nbcon_seq = atomic_long_read(&ACCESS_PRIVATE(con, nbcon_seq));
-+
-+ return __nbcon_seq_to_seq(nbcon_seq);
-+}
-+
-+/**
-+ * nbcon_seq_force - Force console sequence to a specific value
-+ * @con: Console to work on
-+ * @seq: Sequence number value to set
-+ *
-+ * Only to be used during init (before registration) or in extreme situations
-+ * (such as panic with CONSOLE_REPLAY_ALL).
-+ */
-+void nbcon_seq_force(struct console *con, u64 seq)
-+{
-+ /*
-+ * If the specified record no longer exists, the oldest available record
-+ * is chosen. This is especially important on 32bit systems because only
-+ * the lower 32 bits of the sequence number are stored. The upper 32 bits
-+ * are derived from the sequence numbers available in the ringbuffer.
-+ */
-+ u64 valid_seq = max_t(u64, seq, prb_first_valid_seq(prb));
-+
-+ atomic_long_set(&ACCESS_PRIVATE(con, nbcon_seq), __seq_to_nbcon_seq(valid_seq));
-+
-+ /* Clear con->seq since nbcon consoles use con->nbcon_seq instead. */
-+ con->seq = 0;
-+}
-+
-+/**
-+ * nbcon_seq_try_update - Try to update the console sequence number
-+ * @ctxt: Pointer to an acquire context that contains
-+ * all information about the acquire mode
-+ * @new_seq: The new sequence number to set
-+ *
-+ * @ctxt->seq is updated to the new value of @con::nbcon_seq (expanded to
-+ * the 64bit value). This could be a different value than @new_seq if
-+ * nbcon_seq_force() was used or the current context no longer owns the
-+ * console. In the later case, it will stop printing anyway.
-+ */
-+__maybe_unused
-+static void nbcon_seq_try_update(struct nbcon_context *ctxt, u64 new_seq)
-+{
-+ unsigned long nbcon_seq = __seq_to_nbcon_seq(ctxt->seq);
-+ struct console *con = ctxt->console;
-+
-+ if (atomic_long_try_cmpxchg(&ACCESS_PRIVATE(con, nbcon_seq), &nbcon_seq,
-+ __seq_to_nbcon_seq(new_seq))) {
-+ ctxt->seq = new_seq;
-+ } else {
-+ ctxt->seq = nbcon_seq_read(con);
-+ }
-+}
-+
- /**
- * nbcon_context_try_acquire_direct - Try to acquire directly
- * @ctxt: The context of the caller
-@@ -510,6 +605,9 @@ static bool nbcon_context_try_acquire(st
- else
- ctxt->pbufs = con->pbufs;
-
-+ /* Set the record sequence for this context to print. */
-+ ctxt->seq = nbcon_seq_read(ctxt->console);
-+
- return true;
- }
-
-@@ -722,6 +820,8 @@ bool nbcon_alloc(struct console *con)
- *
- * nbcon_alloc() *must* be called and succeed before this function
- * is called.
-+ *
-+ * This function expects that the legacy @con->seq has been set.
- */
- void nbcon_init(struct console *con)
- {
-@@ -730,6 +830,7 @@ void nbcon_init(struct console *con)
- /* nbcon_alloc() must have been called and successful! */
- BUG_ON(!con->pbufs);
-
-+ nbcon_seq_force(con, con->seq);
- nbcon_state_set(con, &state);
- }
-
---- a/kernel/printk/printk.c
-+++ b/kernel/printk/printk.c
-@@ -494,7 +494,7 @@ static u32 log_buf_len = __LOG_BUF_LEN;
-
- static struct printk_ringbuffer printk_rb_dynamic;
-
--static struct printk_ringbuffer *prb = &printk_rb_static;
-+struct printk_ringbuffer *prb = &printk_rb_static;
-
- /*
- * We cannot access per-CPU data (e.g. per-CPU flush irq_work) before
-@@ -3168,6 +3168,7 @@ void console_flush_on_panic(enum con_flu
-
- if (mode == CONSOLE_REPLAY_ALL) {
- struct console *c;
-+ short flags;
- int cookie;
- u64 seq;
-
-@@ -3175,11 +3176,17 @@ void console_flush_on_panic(enum con_flu
-
- cookie = console_srcu_read_lock();
- for_each_console_srcu(c) {
-- /*
-- * This is an unsynchronized assignment, but the
-- * kernel is in "hope and pray" mode anyway.
-- */
-- c->seq = seq;
-+ flags = console_srcu_read_flags(c);
-+
-+ if (flags & CON_NBCON) {
-+ nbcon_seq_force(c, seq);
-+ } else {
-+ /*
-+ * This is an unsynchronized assignment. On
-+ * panic legacy consoles are only best effort.
-+ */
-+ c->seq = seq;
-+ }
- }
- console_srcu_read_unlock(cookie);
- }
-@@ -3750,6 +3757,7 @@ static bool __pr_flush(struct console *c
- struct console *c;
- u64 last_diff = 0;
- u64 printk_seq;
-+ short flags;
- int cookie;
- u64 diff;
- u64 seq;
-@@ -3777,6 +3785,9 @@ static bool __pr_flush(struct console *c
- for_each_console_srcu(c) {
- if (con && con != c)
- continue;
-+
-+ flags = console_srcu_read_flags(c);
-+
- /*
- * If consoles are not usable, it cannot be expected
- * that they make forward progress, so only increment
-@@ -3784,7 +3795,13 @@ static bool __pr_flush(struct console *c
- */
- if (!console_is_usable(c))
- continue;
-- printk_seq = c->seq;
-+
-+ if (flags & CON_NBCON) {
-+ printk_seq = nbcon_seq_read(c);
-+ } else {
-+ printk_seq = c->seq;
-+ }
-+
- if (printk_seq < seq)
- diff += seq - printk_seq;
- }
diff --git a/debian/patches-rt/0081-printk-nbcon-Add-emit-function-and-callback-function.patch b/debian/patches-rt/0081-printk-nbcon-Add-emit-function-and-callback-function.patch
deleted file mode 100644
index ab32a05b19..0000000000
--- a/debian/patches-rt/0081-printk-nbcon-Add-emit-function-and-callback-function.patch
+++ /dev/null
@@ -1,262 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Sat, 16 Sep 2023 21:26:06 +0206
-Subject: [PATCH 081/134] printk: nbcon: Add emit function and callback
- function for atomic printing
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-Implement an emit function for nbcon consoles to output printk
-messages. It utilizes the lockless printk_get_next_message() and
-console_prepend_dropped() functions to retrieve/build the output
-message. The emit function includes the required safety points to
-check for handover/takeover and calls a new write_atomic callback
-of the console driver to output the message. It also includes
-proper handling for updating the nbcon console sequence number.
-
-A new nbcon_write_context struct is introduced. This is provided
-to the write_atomic callback and includes only the information
-necessary for performing atomic writes.
-
-Co-developed-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: Thomas Gleixner (Intel) <tglx@linutronix.de>
-Reviewed-by: Petr Mladek <pmladek@suse.com>
-Signed-off-by: Petr Mladek <pmladek@suse.com>
-Link: https://lore.kernel.org/r/20230916192007.608398-8-john.ogness@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- include/linux/console.h | 21 +++++++++
- kernel/printk/internal.h | 6 ++
- kernel/printk/nbcon.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++-
- kernel/printk/printk.c | 9 +--
- 4 files changed, 134 insertions(+), 8 deletions(-)
-
---- a/include/linux/console.h
-+++ b/include/linux/console.h
-@@ -242,6 +242,7 @@ struct printk_buffers;
- * be used only with NBCON_PRIO_PANIC @prio. It
- * might cause a system freeze when the console
- * is used later.
-+ * @backlog: Ringbuffer has pending records
- * @pbufs: Pointer to the text buffer for this context
- * @seq: The sequence number to print for this context
- */
-@@ -252,12 +253,29 @@ struct nbcon_context {
- enum nbcon_prio prio;
- unsigned int allow_unsafe_takeover : 1;
-
-+ /* members set by emit */
-+ unsigned int backlog : 1;
-+
- /* members set by acquire */
- struct printk_buffers *pbufs;
- u64 seq;
- };
-
- /**
-+ * struct nbcon_write_context - Context handed to the nbcon write callbacks
-+ * @ctxt: The core console context
-+ * @outbuf: Pointer to the text buffer for output
-+ * @len: Length to write
-+ * @unsafe_takeover: If a hostile takeover in an unsafe state has occurred
-+ */
-+struct nbcon_write_context {
-+ struct nbcon_context __private ctxt;
-+ char *outbuf;
-+ unsigned int len;
-+ bool unsafe_takeover;
-+};
-+
-+/**
- * struct console - The console descriptor structure
- * @name: The name of the console driver
- * @write: Write callback to output messages (Optional)
-@@ -277,6 +295,7 @@ struct nbcon_context {
- * @data: Driver private data
- * @node: hlist node for the console list
- *
-+ * @write_atomic: Write callback for atomic context
- * @nbcon_state: State for nbcon consoles
- * @nbcon_seq: Sequence number of the next record for nbcon to print
- * @pbufs: Pointer to nbcon private buffer
-@@ -301,6 +320,8 @@ struct console {
- struct hlist_node node;
-
- /* nbcon console specific members */
-+ bool (*write_atomic)(struct console *con,
-+ struct nbcon_write_context *wctxt);
- atomic_t __private nbcon_state;
- atomic_long_t __private nbcon_seq;
- struct printk_buffers *pbufs;
---- a/kernel/printk/internal.h
-+++ b/kernel/printk/internal.h
-@@ -130,3 +130,9 @@ struct printk_message {
- };
-
- bool other_cpu_in_panic(void);
-+bool printk_get_next_message(struct printk_message *pmsg, u64 seq,
-+ bool is_extended, bool may_supress);
-+
-+#ifdef CONFIG_PRINTK
-+void console_prepend_dropped(struct printk_message *pmsg, unsigned long dropped);
-+#endif
---- a/kernel/printk/nbcon.c
-+++ b/kernel/printk/nbcon.c
-@@ -221,7 +221,6 @@ void nbcon_seq_force(struct console *con
- * nbcon_seq_force() was used or the current context no longer owns the
- * console. In the later case, it will stop printing anyway.
- */
--__maybe_unused
- static void nbcon_seq_try_update(struct nbcon_context *ctxt, u64 new_seq)
- {
- unsigned long nbcon_seq = __seq_to_nbcon_seq(ctxt->seq);
-@@ -755,7 +754,6 @@ static bool nbcon_context_can_proceed(st
- *
- * Internal helper to avoid duplicated code.
- */
--__maybe_unused
- static bool __nbcon_context_update_unsafe(struct nbcon_context *ctxt, bool unsafe)
- {
- struct console *con = ctxt->console;
-@@ -785,6 +783,110 @@ static bool __nbcon_context_update_unsaf
- }
-
- /**
-+ * nbcon_emit_next_record - Emit a record in the acquired context
-+ * @wctxt: The write context that will be handed to the write function
-+ *
-+ * Return: True if this context still owns the console. False if
-+ * ownership was handed over or taken.
-+ *
-+ * When this function returns false then the calling context no longer owns
-+ * the console and is no longer allowed to go forward. In this case it must
-+ * back out immediately and carefully. The buffer content is also no longer
-+ * trusted since it no longer belongs to the calling context. If the caller
-+ * wants to do more it must reacquire the console first.
-+ *
-+ * When true is returned, @wctxt->ctxt.backlog indicates whether there are
-+ * still records pending in the ringbuffer,
-+ */
-+__maybe_unused
-+static bool nbcon_emit_next_record(struct nbcon_write_context *wctxt)
-+{
-+ struct nbcon_context *ctxt = &ACCESS_PRIVATE(wctxt, ctxt);
-+ struct console *con = ctxt->console;
-+ bool is_extended = console_srcu_read_flags(con) & CON_EXTENDED;
-+ struct printk_message pmsg = {
-+ .pbufs = ctxt->pbufs,
-+ };
-+ unsigned long con_dropped;
-+ struct nbcon_state cur;
-+ unsigned long dropped;
-+ bool done;
-+
-+ /*
-+ * The printk buffers are filled within an unsafe section. This
-+ * prevents NBCON_PRIO_NORMAL and NBCON_PRIO_EMERGENCY from
-+ * clobbering each other.
-+ */
-+
-+ if (!nbcon_context_enter_unsafe(ctxt))
-+ return false;
-+
-+ ctxt->backlog = printk_get_next_message(&pmsg, ctxt->seq, is_extended, true);
-+ if (!ctxt->backlog)
-+ return nbcon_context_exit_unsafe(ctxt);
-+
-+ /*
-+ * @con->dropped is not protected in case of an unsafe hostile
-+ * takeover. In that situation the update can be racy so
-+ * annotate it accordingly.
-+ */
-+ con_dropped = data_race(READ_ONCE(con->dropped));
-+
-+ dropped = con_dropped + pmsg.dropped;
-+ if (dropped && !is_extended)
-+ console_prepend_dropped(&pmsg, dropped);
-+
-+ if (!nbcon_context_exit_unsafe(ctxt))
-+ return false;
-+
-+ /* For skipped records just update seq/dropped in @con. */
-+ if (pmsg.outbuf_len == 0)
-+ goto update_con;
-+
-+ /* Initialize the write context for driver callbacks. */
-+ wctxt->outbuf = &pmsg.pbufs->outbuf[0];
-+ wctxt->len = pmsg.outbuf_len;
-+ nbcon_state_read(con, &cur);
-+ wctxt->unsafe_takeover = cur.unsafe_takeover;
-+
-+ if (con->write_atomic) {
-+ done = con->write_atomic(con, wctxt);
-+ } else {
-+ nbcon_context_release(ctxt);
-+ WARN_ON_ONCE(1);
-+ done = false;
-+ }
-+
-+ /* If not done, the emit was aborted. */
-+ if (!done)
-+ return false;
-+
-+ /*
-+ * Since any dropped message was successfully output, reset the
-+ * dropped count for the console.
-+ */
-+ dropped = 0;
-+update_con:
-+ /*
-+ * The dropped count and the sequence number are updated within an
-+ * unsafe section. This limits update races to the panic context and
-+ * allows the panic context to win.
-+ */
-+
-+ if (!nbcon_context_enter_unsafe(ctxt))
-+ return false;
-+
-+ if (dropped != con_dropped) {
-+ /* Counterpart to the READ_ONCE() above. */
-+ WRITE_ONCE(con->dropped, dropped);
-+ }
-+
-+ nbcon_seq_try_update(ctxt, pmsg.seq + 1);
-+
-+ return nbcon_context_exit_unsafe(ctxt);
-+}
-+
-+/**
- * nbcon_alloc - Allocate buffers needed by the nbcon console
- * @con: Console to allocate buffers for
- *
---- a/kernel/printk/printk.c
-+++ b/kernel/printk/printk.c
-@@ -698,9 +698,6 @@ static ssize_t msg_print_ext_body(char *
- return len;
- }
-
--static bool printk_get_next_message(struct printk_message *pmsg, u64 seq,
-- bool is_extended, bool may_supress);
--
- /* /dev/kmsg - userspace message inject/listen interface */
- struct devkmsg_user {
- atomic64_t seq;
-@@ -2733,7 +2730,7 @@ static void __console_unlock(void)
- * If @pmsg->pbufs->outbuf is modified, @pmsg->outbuf_len is updated.
- */
- #ifdef CONFIG_PRINTK
--static void console_prepend_dropped(struct printk_message *pmsg, unsigned long dropped)
-+void console_prepend_dropped(struct printk_message *pmsg, unsigned long dropped)
- {
- struct printk_buffers *pbufs = pmsg->pbufs;
- const size_t scratchbuf_sz = sizeof(pbufs->scratchbuf);
-@@ -2787,8 +2784,8 @@ static void console_prepend_dropped(stru
- * of @pmsg are valid. (See the documentation of struct printk_message
- * for information about the @pmsg fields.)
- */
--static bool printk_get_next_message(struct printk_message *pmsg, u64 seq,
-- bool is_extended, bool may_suppress)
-+bool printk_get_next_message(struct printk_message *pmsg, u64 seq,
-+ bool is_extended, bool may_suppress)
- {
- static int panic_console_dropped;
-
diff --git a/debian/patches-rt/0082-printk-nbcon-Allow-drivers-to-mark-unsafe-regions-an.patch b/debian/patches-rt/0082-printk-nbcon-Allow-drivers-to-mark-unsafe-regions-an.patch
deleted file mode 100644
index 16a07a839e..0000000000
--- a/debian/patches-rt/0082-printk-nbcon-Allow-drivers-to-mark-unsafe-regions-an.patch
+++ /dev/null
@@ -1,136 +0,0 @@
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Sat, 16 Sep 2023 21:26:07 +0206
-Subject: [PATCH 082/134] printk: nbcon: Allow drivers to mark unsafe regions
- and check state
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-For the write_atomic callback, the console driver may have unsafe
-regions that need to be appropriately marked. Provide functions
-that accept the nbcon_write_context struct to allow for the driver
-to enter and exit unsafe regions.
-
-Also provide a function for drivers to check if they are still the
-owner of the console.
-
-Co-developed-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Signed-off-by: Thomas Gleixner (Intel) <tglx@linutronix.de>
-Reviewed-by: Petr Mladek <pmladek@suse.com>
-Signed-off-by: Petr Mladek <pmladek@suse.com>
-Link: https://lore.kernel.org/r/20230916192007.608398-9-john.ogness@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- include/linux/console.h | 10 ++++++
- kernel/printk/nbcon.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 85 insertions(+)
-
---- a/include/linux/console.h
-+++ b/include/linux/console.h
-@@ -451,6 +451,16 @@ static inline bool console_is_registered
- lockdep_assert_console_list_lock_held(); \
- hlist_for_each_entry(con, &console_list, node)
-
-+#ifdef CONFIG_PRINTK
-+extern bool nbcon_can_proceed(struct nbcon_write_context *wctxt);
-+extern bool nbcon_enter_unsafe(struct nbcon_write_context *wctxt);
-+extern bool nbcon_exit_unsafe(struct nbcon_write_context *wctxt);
-+#else
-+static inline bool nbcon_can_proceed(struct nbcon_write_context *wctxt) { return false; }
-+static inline bool nbcon_enter_unsafe(struct nbcon_write_context *wctxt) { return false; }
-+static inline bool nbcon_exit_unsafe(struct nbcon_write_context *wctxt) { return false; }
-+#endif
-+
- extern int console_set_on_cmdline;
- extern struct console *early_console;
-
---- a/kernel/printk/nbcon.c
-+++ b/kernel/printk/nbcon.c
-@@ -732,6 +732,41 @@ static bool nbcon_context_can_proceed(st
- return false;
- }
-
-+/**
-+ * nbcon_can_proceed - Check whether ownership can proceed
-+ * @wctxt: The write context that was handed to the write function
-+ *
-+ * Return: True if this context still owns the console. False if
-+ * ownership was handed over or taken.
-+ *
-+ * It is used in nbcon_enter_unsafe() to make sure that it still owns the
-+ * lock. Also it is used in nbcon_exit_unsafe() to eventually free the lock
-+ * for a higher priority context which asked for the friendly handover.
-+ *
-+ * It can be called inside an unsafe section when the console is just
-+ * temporary in safe state instead of exiting and entering the unsafe state.
-+ *
-+ * Also it can be called in the safe context before doing an expensive safe
-+ * operation. It does not make sense to do the operation when a higher
-+ * priority context took the lock.
-+ *
-+ * When this function returns false then the calling context no longer owns
-+ * the console and is no longer allowed to go forward. In this case it must
-+ * back out immediately and carefully. The buffer content is also no longer
-+ * trusted since it no longer belongs to the calling context.
-+ */
-+bool nbcon_can_proceed(struct nbcon_write_context *wctxt)
-+{
-+ struct nbcon_context *ctxt = &ACCESS_PRIVATE(wctxt, ctxt);
-+ struct console *con = ctxt->console;
-+ struct nbcon_state cur;
-+
-+ nbcon_state_read(con, &cur);
-+
-+ return nbcon_context_can_proceed(ctxt, &cur);
-+}
-+EXPORT_SYMBOL_GPL(nbcon_can_proceed);
-+
- #define nbcon_context_enter_unsafe(c) __nbcon_context_update_unsafe(c, true)
- #define nbcon_context_exit_unsafe(c) __nbcon_context_update_unsafe(c, false)
-
-@@ -783,6 +818,46 @@ static bool __nbcon_context_update_unsaf
- }
-
- /**
-+ * nbcon_enter_unsafe - Enter an unsafe region in the driver
-+ * @wctxt: The write context that was handed to the write function
-+ *
-+ * Return: True if this context still owns the console. False if
-+ * ownership was handed over or taken.
-+ *
-+ * When this function returns false then the calling context no longer owns
-+ * the console and is no longer allowed to go forward. In this case it must
-+ * back out immediately and carefully. The buffer content is also no longer
-+ * trusted since it no longer belongs to the calling context.
-+ */
-+bool nbcon_enter_unsafe(struct nbcon_write_context *wctxt)
-+{
-+ struct nbcon_context *ctxt = &ACCESS_PRIVATE(wctxt, ctxt);
-+
-+ return nbcon_context_enter_unsafe(ctxt);
-+}
-+EXPORT_SYMBOL_GPL(nbcon_enter_unsafe);
-+
-+/**
-+ * nbcon_exit_unsafe - Exit an unsafe region in the driver
-+ * @wctxt: The write context that was handed to the write function
-+ *
-+ * Return: True if this context still owns the console. False if
-+ * ownership was handed over or taken.
-+ *
-+ * When this function returns false then the calling context no longer owns
-+ * the console and is no longer allowed to go forward. In this case it must
-+ * back out immediately and carefully. The buffer content is also no longer
-+ * trusted since it no longer belongs to the calling context.
-+ */
-+bool nbcon_exit_unsafe(struct nbcon_write_context *wctxt)
-+{
-+ struct nbcon_context *ctxt = &ACCESS_PRIVATE(wctxt, ctxt);
-+
-+ return nbcon_context_exit_unsafe(ctxt);
-+}
-+EXPORT_SYMBOL_GPL(nbcon_exit_unsafe);
-+
-+/**
- * nbcon_emit_next_record - Emit a record in the acquired context
- * @wctxt: The write context that will be handed to the write function
- *
diff --git a/debian/patches-rt/0083-printk-fix-illegal-pbufs-access-for-CONFIG_PRINTK.patch b/debian/patches-rt/0083-printk-fix-illegal-pbufs-access-for-CONFIG_PRINTK.patch
deleted file mode 100644
index 80de1c716d..0000000000
--- a/debian/patches-rt/0083-printk-fix-illegal-pbufs-access-for-CONFIG_PRINTK.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From: John Ogness <john.ogness@linutronix.de>
-Date: Wed, 20 Sep 2023 17:58:38 +0206
-Subject: [PATCH 083/134] printk: fix illegal pbufs access for !CONFIG_PRINTK
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-When CONFIG_PRINTK is not set, PRINTK_MESSAGE_MAX is 0. This
-leads to a zero-sized array @outbuf in @printk_shared_pbufs. In
-console_flush_all() a pointer to the first element of the array
-is assigned with:
-
- char *outbuf = &printk_shared_pbufs.outbuf[0];
-
-For !CONFIG_PRINTK this leads to a compiler warning:
-
- warning: array subscript 0 is outside array bounds of
- 'char[0]' [-Warray-bounds]
-
-This is not really dangerous because printk_get_next_message()
-always returns false for !CONFIG_PRINTK, which leads to @outbuf
-never being used. However, it makes no sense to even compile
-these functions for !CONFIG_PRINTK.
-
-Extend the existing '#ifdef CONFIG_PRINTK' block to contain
-the formatting and emitting functions since these have no
-purpose in !CONFIG_PRINTK. This also allows removing several
-more !CONFIG_PRINTK dummies as well as moving
-@suppress_panic_printk into a CONFIG_PRINTK block.
-
-Reported-by: kernel test robot <lkp@intel.com>
-Closes: https://lore.kernel.org/oe-kbuild-all/202309201724.M9BMAQIh-lkp@intel.com/
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
-Signed-off-by: Petr Mladek <pmladek@suse.com>
-Link: https://lore.kernel.org/r/20230920155238.670439-1-john.ogness@linutronix.de
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- kernel/printk/printk.c | 44 ++++++++++++++++++--------------------------
- 1 file changed, 18 insertions(+), 26 deletions(-)
-
---- a/kernel/printk/printk.c
-+++ b/kernel/printk/printk.c
-@@ -102,12 +102,6 @@ DEFINE_STATIC_SRCU(console_srcu);
- */
- int __read_mostly suppress_printk;
-
--/*
-- * During panic, heavy printk by other CPUs can delay the
-- * panic and risk deadlock on console resources.
-- */
--static int __read_mostly suppress_panic_printk;
--
- #ifdef CONFIG_LOCKDEP
- static struct lockdep_map console_lock_dep_map = {
- .name = "console_lock"
-@@ -445,6 +439,12 @@ static int console_msg_format = MSG_FORM
- static DEFINE_MUTEX(syslog_lock);
-
- #ifdef CONFIG_PRINTK
-+/*
-+ * During panic, heavy printk by other CPUs can delay the
-+ * panic and risk deadlock on console resources.
-+ */
-+static int __read_mostly suppress_panic_printk;
-+
- DECLARE_WAIT_QUEUE_HEAD(log_wait);
- /* All 3 protected by @syslog_lock. */
- /* the next printk record to read by syslog(READ) or /proc/kmsg */
-@@ -2346,22 +2346,6 @@ static bool __pr_flush(struct console *c
-
- static u64 syslog_seq;
-
--static size_t record_print_text(const struct printk_record *r,
-- bool syslog, bool time)
--{
-- return 0;
--}
--static ssize_t info_print_ext_header(char *buf, size_t size,
-- struct printk_info *info)
--{
-- return 0;
--}
--static ssize_t msg_print_ext_body(char *buf, size_t size,
-- char *text, size_t text_len,
-- struct dev_printk_info *dev_info) { return 0; }
--static void console_lock_spinning_enable(void) { }
--static int console_lock_spinning_disable_and_check(int cookie) { return 0; }
--static bool suppress_message_printing(int level) { return false; }
- static bool pr_flush(int timeout_ms, bool reset_on_progress) { return true; }
- static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progress) { return true; }
-
-@@ -2715,6 +2699,8 @@ static void __console_unlock(void)
- up_console_sem();
- }
-
-+#ifdef CONFIG_PRINTK
-+
- /*
- * Prepend the message in @pmsg->pbufs->outbuf with a "dropped message". This
- * is achieved by shifting the existing message over and inserting the dropped
-@@ -2729,7 +2715,6 @@ static void __console_unlock(void)
- *
- * If @pmsg->pbufs->outbuf is modified, @pmsg->outbuf_len is updated.
- */
--#ifdef CONFIG_PRINTK
- void console_prepend_dropped(struct printk_message *pmsg, unsigned long dropped)
- {
- struct printk_buffers *pbufs = pmsg->pbufs;
-@@ -2761,9 +2746,6 @@ void console_prepend_dropped(struct prin
- memcpy(outbuf, scratchbuf, len);
- pmsg->outbuf_len += len;
- }
--#else
--#define console_prepend_dropped(pmsg, dropped)
--#endif /* CONFIG_PRINTK */
-
- /*
- * Read and format the specified record (or a later record if the specified
-@@ -2921,6 +2903,16 @@ static bool console_emit_next_record(str
- return true;
- }
-
-+#else
-+
-+static bool console_emit_next_record(struct console *con, bool *handover, int cookie)
-+{
-+ *handover = false;
-+ return false;
-+}
-+
-+#endif /* CONFIG_PRINTK */
-+
- /*
- * Print out all remaining records to all consoles.
- *
diff --git a/debian/patches-rt/0084-printk-Reduce-pr_flush-pooling-time.patch b/debian/patches-rt/0084-printk-Reduce-pr_flush-pooling-time.patch
deleted file mode 100644
index 09d1d343f4..0000000000
--- a/debian/patches-rt/0084-printk-Reduce-pr_flush-pooling-time.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From: Petr Mladek <pmladek@suse.com>
-Date: Fri, 6 Oct 2023 10:21:51 +0200
-Subject: [PATCH 084/134] printk: Reduce pr_flush() pooling time
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-pr_flush() does not guarantee that all messages would really get flushed
-to the console. The best it could do is to wait with a given timeout.[*]
-
-The current interval 100ms for checking the progress might seem too
-long in some situations. For example, such delays are not appreciated
-during suspend and resume especially when the consoles have been flushed
-"long" time before the check.
-
-On the other hand, the sleeping wait might be useful in other situations.
-Especially, it would allow flushing the messages using printk kthreads
-on the same CPU[*].
-
-Use msleep(1) as a compromise.
-
-Also measure the time using jiffies. msleep() does not guarantee
-precise wakeup after the given delay. It might be much longer,
-especially for times < 20s. See Documentation/timers/timers-howto.rst
-for more details.
-
-Note that msecs_to_jiffies() already translates a negative value into
-an infinite timeout.
-
-[*] console_unlock() does not guarantee flushing the consoles since
- the commit dbdda842fe96f893 ("printk: Add console owner and waiter
- logic to load balance console writes").
-
- It would be possible to guarantee it another way. For example,
- the spinning might be enabled only when the console_lock has been
- taken via console_trylock().
-
- But the load balancing is helpful. And more importantly, the flush
- with a timeout has been added as a preparation step for introducing
- printk kthreads.
-
-Signed-off-by: Petr Mladek <pmladek@suse.com>
-Reviewed-by: John Ogness <john.ogness@linutronix.de>
-Link: https://lore.kernel.org/r/20231006082151.6969-3-pmladek@suse.com
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- kernel/printk/printk.c | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
---- a/kernel/printk/printk.c
-+++ b/kernel/printk/printk.c
-@@ -3742,7 +3742,8 @@ late_initcall(printk_late_init);
- /* If @con is specified, only wait for that console. Otherwise wait for all. */
- static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progress)
- {
-- int remaining = timeout_ms;
-+ unsigned long timeout_jiffies = msecs_to_jiffies(timeout_ms);
-+ unsigned long remaining_jiffies = timeout_jiffies;
- struct console *c;
- u64 last_diff = 0;
- u64 printk_seq;
-@@ -3760,6 +3761,9 @@ static bool __pr_flush(struct console *c
- console_unlock();
-
- for (;;) {
-+ unsigned long begin_jiffies;
-+ unsigned long slept_jiffies;
-+
- diff = 0;
-
- /*
-@@ -3797,24 +3801,20 @@ static bool __pr_flush(struct console *c
- console_srcu_read_unlock(cookie);
-
- if (diff != last_diff && reset_on_progress)
-- remaining = timeout_ms;
-+ remaining_jiffies = timeout_jiffies;
-
- console_unlock();
-
- /* Note: @diff is 0 if there are no usable consoles. */
-- if (diff == 0 || remaining == 0)
-+ if (diff == 0 || remaining_jiffies == 0)
- break;
-
-- if (remaining < 0) {
-- /* no timeout limit */
-- msleep(100);
-- } else if (remaining < 100) {
-- msleep(remaining);
-- remaining = 0;
-- } else {
-- msleep(100);
-- remaining -= 100;
-- }
-+ /* msleep(1) might sleep much longer. Check time by jiffies. */
-+ begin_jiffies = jiffies;
-+ msleep(1);
-+ slept_jiffies = jiffies - begin_jiffies;
-+
-+ remaining_jiffies -= min(slept_jiffies, remaining_jiffies);
-
- last_diff = diff;
- }
diff --git a/debian/patches-rt/ARM64__Allow_to_enable_RT.patch b/debian/patches-rt/ARM64__Allow_to_enable_RT.patch
index 3657ef8700..e89d7841ae 100644
--- a/debian/patches-rt/ARM64__Allow_to_enable_RT.patch
+++ b/debian/patches-rt/ARM64__Allow_to_enable_RT.patch
@@ -1,7 +1,7 @@
Subject: ARM64: Allow to enable RT
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri Oct 11 13:14:35 2019 +0200
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
diff --git a/debian/patches-rt/ARM__Allow_to_enable_RT.patch b/debian/patches-rt/ARM__Allow_to_enable_RT.patch
index 902eca18c3..296114d458 100644
--- a/debian/patches-rt/ARM__Allow_to_enable_RT.patch
+++ b/debian/patches-rt/ARM__Allow_to_enable_RT.patch
@@ -1,7 +1,7 @@
Subject: ARM: Allow to enable RT
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri Oct 11 13:14:29 2019 +0200
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
@@ -17,7 +17,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
-@@ -34,6 +34,7 @@ config ARM
+@@ -35,6 +35,7 @@ config ARM
select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT if CPU_V7
select ARCH_SUPPORTS_ATOMIC_RMW
select ARCH_SUPPORTS_HUGETLBFS if ARM_LPAE
@@ -25,7 +25,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
select ARCH_USE_BUILTIN_BSWAP
select ARCH_USE_CMPXCHG_LOCKREF
select ARCH_USE_MEMTEST
-@@ -118,6 +119,7 @@ config ARM
+@@ -119,6 +120,7 @@ config ARM
select HAVE_PERF_EVENTS
select HAVE_PERF_REGS
select HAVE_PERF_USER_STACK_DUMP
diff --git a/debian/patches-rt/ARM__enable_irq_in_translation_section_permission_fault_handlers.patch b/debian/patches-rt/ARM__enable_irq_in_translation_section_permission_fault_handlers.patch
index ce42fd3a27..b8c3c370fb 100644
--- a/debian/patches-rt/ARM__enable_irq_in_translation_section_permission_fault_handlers.patch
+++ b/debian/patches-rt/ARM__enable_irq_in_translation_section_permission_fault_handlers.patch
@@ -1,7 +1,7 @@
Subject: ARM: enable irq in translation/section permission fault handlers
From: Yadi.hu <yadi.hu@windriver.com>
Date: Wed Dec 10 10:32:09 2014 +0800
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Yadi.hu <yadi.hu@windriver.com>
diff --git a/debian/patches-rt/Add_localversion_for_-RT_release.patch b/debian/patches-rt/Add_localversion_for_-RT_release.patch
index 55db77eff5..7a09b5ac27 100644
--- a/debian/patches-rt/Add_localversion_for_-RT_release.patch
+++ b/debian/patches-rt/Add_localversion_for_-RT_release.patch
@@ -1,7 +1,7 @@
Subject: Add localversion for -RT release
From: Thomas Gleixner <tglx@linutronix.de>
Date: Fri Jul 8 20:25:16 2011 +0200
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Thomas Gleixner <tglx@linutronix.de>
@@ -16,4 +16,4 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
--- /dev/null
+++ b/localversion-rt
@@ -0,0 +1 @@
-+-rt18
++-rt6
diff --git a/debian/patches-rt/POWERPC__Allow_to_enable_RT.patch b/debian/patches-rt/POWERPC__Allow_to_enable_RT.patch
index 797e2084b4..12443b10dc 100644
--- a/debian/patches-rt/POWERPC__Allow_to_enable_RT.patch
+++ b/debian/patches-rt/POWERPC__Allow_to_enable_RT.patch
@@ -1,7 +1,7 @@
Subject: POWERPC: Allow to enable RT
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri Oct 11 13:14:41 2019 +0200
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
@@ -25,7 +25,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
select ARCH_USE_BUILTIN_BSWAP
select ARCH_USE_CMPXCHG_LOCKREF if PPC64
select ARCH_USE_MEMTEST
-@@ -268,6 +269,7 @@ config PPC
+@@ -269,6 +270,7 @@ config PPC
select HAVE_PERF_USER_STACK_DUMP
select HAVE_REGS_AND_STACK_ACCESS_API
select HAVE_RELIABLE_STACKTRACE
diff --git a/debian/patches-rt/PREEMPT_AUTO.patch b/debian/patches-rt/PREEMPT_AUTO.patch
index 859dadc20c..323b18f798 100644
--- a/debian/patches-rt/PREEMPT_AUTO.patch
+++ b/debian/patches-rt/PREEMPT_AUTO.patch
@@ -1,7 +1,7 @@
From: Thomas Gleixner <tglx@linutronix.de>
Date: Sat, 23 Sep 2023 03:11:05 +0200
Subject: [PATCH] sched: define TIF_ALLOW_RESCHED
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
On Fri, Sep 22 2023 at 00:55, Thomas Gleixner wrote:
> On Thu, Sep 21 2023 at 09:00, Linus Torvalds wrote:
@@ -187,7 +187,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
-@@ -2050,17 +2050,17 @@ static inline void update_tsk_thread_fla
+@@ -2055,17 +2055,17 @@ static inline void update_tsk_thread_fla
update_ti_thread_flag(task_thread_info(tsk), flag, value);
}
@@ -208,7 +208,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
{
return test_ti_thread_flag(task_thread_info(tsk), flag);
}
-@@ -2073,9 +2073,11 @@ static inline void set_tsk_need_resched(
+@@ -2078,9 +2078,11 @@ static inline void set_tsk_need_resched(
static inline void clear_tsk_need_resched(struct task_struct *tsk)
{
clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED);
@@ -221,7 +221,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
{
return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED));
}
-@@ -2256,7 +2258,7 @@ static inline int rwlock_needbreak(rwloc
+@@ -2261,7 +2263,7 @@ static inline int rwlock_needbreak(rwloc
static __always_inline bool need_resched(void)
{
@@ -434,15 +434,15 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/*
@@ -922,7 +923,7 @@ static bool set_nr_if_polling(struct tas
- for (;;) {
+ do {
if (!(val & _TIF_POLLING_NRFLAG))
return false;
- if (val & _TIF_NEED_RESCHED)
+ if (val & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY))
return true;
- if (try_cmpxchg(&ti->flags, &val, val | _TIF_NEED_RESCHED))
- break;
-@@ -931,9 +932,9 @@ static bool set_nr_if_polling(struct tas
+ } while (!try_cmpxchg(&ti->flags, &val, val | _TIF_NEED_RESCHED));
+
+@@ -930,9 +931,9 @@ static bool set_nr_if_polling(struct tas
}
#else
@@ -454,7 +454,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
return true;
}
-@@ -1038,28 +1039,47 @@ void wake_up_q(struct wake_q_head *head)
+@@ -1037,28 +1038,47 @@ void wake_up_q(struct wake_q_head *head)
* might also involve a cross-CPU call to trigger the scheduler on
* the target CPU.
*/
@@ -510,7 +510,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
void resched_cpu(int cpu)
-@@ -1132,7 +1152,7 @@ static void wake_up_idle_cpu(int cpu)
+@@ -1131,7 +1151,7 @@ static void wake_up_idle_cpu(int cpu)
if (cpu == smp_processor_id())
return;
@@ -556,7 +556,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
late_initcall(sched_init_debug);
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
-@@ -1016,8 +1016,10 @@ static void clear_buddies(struct cfs_rq
+@@ -1001,8 +1001,10 @@ static void clear_buddies(struct cfs_rq
* XXX: strictly: vd_i += N*r_i/w_i such that: vd_i > ve_i
* this is probably good enough.
*/
@@ -568,7 +568,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
if ((s64)(se->vruntime - se->deadline) < 0)
return;
-@@ -1036,10 +1038,19 @@ static void update_deadline(struct cfs_r
+@@ -1021,10 +1023,19 @@ static void update_deadline(struct cfs_r
/*
* The task has consumed its request, reschedule.
*/
@@ -591,7 +591,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
#include "pelt.h"
-@@ -1147,7 +1158,7 @@ static void update_tg_load_avg(struct cf
+@@ -1132,7 +1143,7 @@ static void update_tg_load_avg(struct cf
/*
* Update the current task's runtime statistics.
*/
@@ -600,7 +600,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
{
struct sched_entity *curr = cfs_rq->curr;
u64 now = rq_clock_task(rq_of(cfs_rq));
-@@ -1174,7 +1185,7 @@ static void update_curr(struct cfs_rq *c
+@@ -1159,7 +1170,7 @@ static void update_curr(struct cfs_rq *c
schedstat_add(cfs_rq->exec_clock, delta_exec);
curr->vruntime += calc_delta_fair(delta_exec, curr);
@@ -609,7 +609,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
update_min_vruntime(cfs_rq);
if (entity_is_task(curr)) {
-@@ -1188,6 +1199,11 @@ static void update_curr(struct cfs_rq *c
+@@ -1173,6 +1184,11 @@ static void update_curr(struct cfs_rq *c
account_cfs_rq_runtime(cfs_rq, delta_exec);
}
@@ -621,7 +621,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
static void update_curr_fair(struct rq *rq)
{
update_curr(cfs_rq_of(&rq->curr->se));
-@@ -5398,7 +5414,7 @@ entity_tick(struct cfs_rq *cfs_rq, struc
+@@ -5449,7 +5465,7 @@ entity_tick(struct cfs_rq *cfs_rq, struc
/*
* Update run-time statistics of the 'current'.
*/
@@ -630,7 +630,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/*
* Ensure that runnable average is periodically updated.
-@@ -5412,7 +5428,7 @@ entity_tick(struct cfs_rq *cfs_rq, struc
+@@ -5463,7 +5479,7 @@ entity_tick(struct cfs_rq *cfs_rq, struc
* validating it and just reschedule.
*/
if (queued) {
@@ -639,7 +639,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
return;
}
/*
-@@ -5558,7 +5574,7 @@ static void __account_cfs_rq_runtime(str
+@@ -5609,7 +5625,7 @@ static void __account_cfs_rq_runtime(str
* hierarchy can be throttled
*/
if (!assign_cfs_rq_runtime(cfs_rq) && likely(cfs_rq->curr))
@@ -648,7 +648,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
static __always_inline
-@@ -5818,7 +5834,7 @@ void unthrottle_cfs_rq(struct cfs_rq *cf
+@@ -5869,7 +5885,7 @@ void unthrottle_cfs_rq(struct cfs_rq *cf
/* Determine whether we need to wake up potentially idle CPU: */
if (rq->curr == rq->idle && rq->cfs.nr_running)
@@ -657,7 +657,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
#ifdef CONFIG_SMP
-@@ -6523,7 +6539,7 @@ static void hrtick_start_fair(struct rq
+@@ -6584,7 +6600,7 @@ static void hrtick_start_fair(struct rq
if (delta < 0) {
if (task_current(rq, p))
@@ -666,7 +666,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
return;
}
hrtick_start(rq, delta);
-@@ -8175,7 +8191,7 @@ static void check_preempt_wakeup(struct
+@@ -8240,7 +8256,7 @@ static void check_preempt_wakeup_fair(st
* prevents us from potentially nominating it as a false LAST_BUDDY
* below.
*/
@@ -675,7 +675,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
return;
/* Idle tasks are by definition preempted by non-idle tasks. */
-@@ -8217,7 +8233,7 @@ static void check_preempt_wakeup(struct
+@@ -8282,7 +8298,7 @@ static void check_preempt_wakeup_fair(st
return;
preempt:
@@ -684,7 +684,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
#ifdef CONFIG_SMP
-@@ -12374,7 +12390,7 @@ static inline void task_tick_core(struct
+@@ -12449,7 +12465,7 @@ static inline void task_tick_core(struct
*/
if (rq->core->core_forceidle_count && rq->cfs.nr_running == 1 &&
__entity_slice_used(&curr->se, MIN_NR_TASKS_DURING_FORCEIDLE))
@@ -693,18 +693,18 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
/*
-@@ -12539,7 +12555,7 @@ prio_changed_fair(struct rq *rq, struct
+@@ -12614,7 +12630,7 @@ prio_changed_fair(struct rq *rq, struct
*/
if (task_current(rq, p)) {
if (p->prio > oldprio)
- resched_curr(rq);
+ resched_curr_lazy(rq);
} else
- check_preempt_curr(rq, p, 0);
+ wakeup_preempt(rq, p, 0);
}
--- a/kernel/sched/features.h
+++ b/kernel/sched/features.h
-@@ -89,3 +89,5 @@ SCHED_FEAT(UTIL_EST_FASTUP, true)
+@@ -88,3 +88,5 @@ SCHED_FEAT(UTIL_EST_FASTUP, true)
SCHED_FEAT(LATENCY_WARN, false)
SCHED_FEAT(HZ_BW, true)
@@ -724,7 +724,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
-@@ -2435,6 +2435,7 @@ extern void init_sched_fair_class(void);
+@@ -2419,6 +2419,7 @@ extern void init_sched_fair_class(void);
extern void reweight_task(struct task_struct *p, int prio);
extern void resched_curr(struct rq *rq);
@@ -734,7 +734,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
extern struct rt_bandwidth def_rt_bandwidth;
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
-@@ -2722,6 +2722,8 @@ unsigned int tracing_gen_ctx_irq_test(un
+@@ -2723,6 +2723,8 @@ unsigned int tracing_gen_ctx_irq_test(un
if (tif_need_resched())
trace_flags |= TRACE_FLAG_NEED_RESCHED;
diff --git a/debian/patches-rt/RISC-V-Probe-misaligned-access-speed-in-parallel.patch b/debian/patches-rt/RISC-V-Probe-misaligned-access-speed-in-parallel.patch
deleted file mode 100644
index 78e57b07a5..0000000000
--- a/debian/patches-rt/RISC-V-Probe-misaligned-access-speed-in-parallel.patch
+++ /dev/null
@@ -1,197 +0,0 @@
-From: Evan Green <evan@rivosinc.com>
-Date: Mon, 6 Nov 2023 14:58:55 -0800
-Subject: [PATCH] RISC-V: Probe misaligned access speed in parallel
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-Probing for misaligned access speed takes about 0.06 seconds. On a
-system with 64 cores, doing this in smp_callin() means it's done
-serially, extending boot time by 3.8 seconds. That's a lot of boot time.
-
-Instead of measuring each CPU serially, let's do the measurements on
-all CPUs in parallel. If we disable preemption on all CPUs, the
-jiffies stop ticking, so we can do this in stages of 1) everybody
-except core 0, then 2) core 0. The allocations are all done outside of
-on_each_cpu() to avoid calling alloc_pages() with interrupts disabled.
-
-For hotplugged CPUs that come in after the boot time measurement,
-register CPU hotplug callbacks, and do the measurement there. Interrupts
-are enabled in those callbacks, so they're fine to do alloc_pages() in.
-
-[bigeasy: merge the individual patches into the final step.]
-
-Reported-by: Jisheng Zhang <jszhang@kernel.org>
-Closes: https://lore.kernel.org/all/mhng-9359993d-6872-4134-83ce-c97debe1cf9a@palmer-ri-x1c9/T/#mae9b8f40016f9df428829d33360144dc5026bcbf
-Fixes: 584ea6564bca ("RISC-V: Probe for unaligned access speed")
-Signed-off-by: Evan Green <evan@rivosinc.com>
-Link: https://lore.kernel.org/r/20231106225855.3121724-1-evan@rivosinc.com
-Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- arch/riscv/include/asm/cpufeature.h | 2
- arch/riscv/kernel/cpufeature.c | 90 ++++++++++++++++++++++++++++++------
- arch/riscv/kernel/smpboot.c | 1
- 3 files changed, 76 insertions(+), 17 deletions(-)
-
---- a/arch/riscv/include/asm/cpufeature.h
-+++ b/arch/riscv/include/asm/cpufeature.h
-@@ -30,6 +30,4 @@ DECLARE_PER_CPU(long, misaligned_access_
- /* Per-cpu ISA extensions. */
- extern struct riscv_isainfo hart_isa[NR_CPUS];
-
--void check_unaligned_access(int cpu);
--
- #endif
---- a/arch/riscv/kernel/cpufeature.c
-+++ b/arch/riscv/kernel/cpufeature.c
-@@ -8,6 +8,7 @@
-
- #include <linux/acpi.h>
- #include <linux/bitmap.h>
-+#include <linux/cpuhotplug.h>
- #include <linux/ctype.h>
- #include <linux/log2.h>
- #include <linux/memory.h>
-@@ -29,6 +30,7 @@
-
- #define MISALIGNED_ACCESS_JIFFIES_LG2 1
- #define MISALIGNED_BUFFER_SIZE 0x4000
-+#define MISALIGNED_BUFFER_ORDER get_order(MISALIGNED_BUFFER_SIZE)
- #define MISALIGNED_COPY_SIZE ((MISALIGNED_BUFFER_SIZE / 2) - 0x80)
-
- unsigned long elf_hwcap __read_mostly;
-@@ -556,24 +558,19 @@ unsigned long riscv_get_elf_hwcap(void)
- return hwcap;
- }
-
--void check_unaligned_access(int cpu)
-+static int check_unaligned_access(void *param)
- {
-+ int cpu = smp_processor_id();
- u64 start_cycles, end_cycles;
- u64 word_cycles;
- u64 byte_cycles;
- int ratio;
- unsigned long start_jiffies, now;
-- struct page *page;
-+ struct page *page = param;
- void *dst;
- void *src;
- long speed = RISCV_HWPROBE_MISALIGNED_SLOW;
-
-- page = alloc_pages(GFP_NOWAIT, get_order(MISALIGNED_BUFFER_SIZE));
-- if (!page) {
-- pr_warn("Can't alloc pages to measure memcpy performance");
-- return;
-- }
--
- /* Make an unaligned destination buffer. */
- dst = (void *)((unsigned long)page_address(page) | 0x1);
- /* Unalign src as well, but differently (off by 1 + 2 = 3). */
-@@ -626,7 +623,7 @@ void check_unaligned_access(int cpu)
- pr_warn("cpu%d: rdtime lacks granularity needed to measure unaligned access speed\n",
- cpu);
-
-- goto out;
-+ return 0;
- }
-
- if (word_cycles < byte_cycles)
-@@ -640,18 +637,83 @@ void check_unaligned_access(int cpu)
- (speed == RISCV_HWPROBE_MISALIGNED_FAST) ? "fast" : "slow");
-
- per_cpu(misaligned_access_speed, cpu) = speed;
-+ return 0;
-+}
-
--out:
-- __free_pages(page, get_order(MISALIGNED_BUFFER_SIZE));
-+static void check_unaligned_access_nonboot_cpu(void *param)
-+{
-+ unsigned int cpu = smp_processor_id();
-+ struct page **pages = param;
-+
-+ if (smp_processor_id() != 0)
-+ check_unaligned_access(pages[cpu]);
-+}
-+
-+static int riscv_online_cpu(unsigned int cpu)
-+{
-+ static struct page *buf;
-+
-+ /* We are already set since the last check */
-+ if (per_cpu(misaligned_access_speed, cpu) != RISCV_HWPROBE_MISALIGNED_UNKNOWN)
-+ return 0;
-+
-+ buf = alloc_pages(GFP_KERNEL, MISALIGNED_BUFFER_ORDER);
-+ if (!buf) {
-+ pr_warn("Allocation failure, not measuring misaligned performance\n");
-+ return -ENOMEM;
-+ }
-+
-+ check_unaligned_access(buf);
-+ __free_pages(buf, MISALIGNED_BUFFER_ORDER);
-+ return 0;
- }
-
--static int check_unaligned_access_boot_cpu(void)
-+/* Measure unaligned access on all CPUs present at boot in parallel. */
-+static int check_unaligned_access_all_cpus(void)
- {
-- check_unaligned_access(0);
-+ unsigned int cpu;
-+ unsigned int cpu_count = num_possible_cpus();
-+ struct page **bufs = kzalloc(cpu_count * sizeof(struct page *),
-+ GFP_KERNEL);
-+
-+ if (!bufs) {
-+ pr_warn("Allocation failure, not measuring misaligned performance\n");
-+ return 0;
-+ }
-+
-+ /*
-+ * Allocate separate buffers for each CPU so there's no fighting over
-+ * cache lines.
-+ */
-+ for_each_cpu(cpu, cpu_online_mask) {
-+ bufs[cpu] = alloc_pages(GFP_KERNEL, MISALIGNED_BUFFER_ORDER);
-+ if (!bufs[cpu]) {
-+ pr_warn("Allocation failure, not measuring misaligned performance\n");
-+ goto out;
-+ }
-+ }
-+
-+ /* Check everybody except 0, who stays behind to tend jiffies. */
-+ on_each_cpu(check_unaligned_access_nonboot_cpu, bufs, 1);
-+
-+ /* Check core 0. */
-+ smp_call_on_cpu(0, check_unaligned_access, bufs[0], true);
-+
-+ /* Setup hotplug callback for any new CPUs that come online. */
-+ cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN, "riscv:online",
-+ riscv_online_cpu, NULL);
-+
-+out:
-+ for_each_cpu(cpu, cpu_online_mask) {
-+ if (bufs[cpu])
-+ __free_pages(bufs[cpu], MISALIGNED_BUFFER_ORDER);
-+ }
-+
-+ kfree(bufs);
- return 0;
- }
-
--arch_initcall(check_unaligned_access_boot_cpu);
-+arch_initcall(check_unaligned_access_all_cpus);
-
- #ifdef CONFIG_RISCV_ALTERNATIVE
- /*
---- a/arch/riscv/kernel/smpboot.c
-+++ b/arch/riscv/kernel/smpboot.c
-@@ -246,7 +246,6 @@ asmlinkage __visible void smp_callin(voi
-
- numa_add_cpu(curr_cpuid);
- set_cpu_online(curr_cpuid, 1);
-- check_unaligned_access(curr_cpuid);
-
- if (has_vector()) {
- if (riscv_v_setup_vsize())
diff --git a/debian/patches-rt/Revert-drm-i915-Depend-on-PREEMPT_RT.patch b/debian/patches-rt/Revert-drm-i915-Depend-on-PREEMPT_RT.patch
index dc62e007e8..1797f4ee2d 100644
--- a/debian/patches-rt/Revert-drm-i915-Depend-on-PREEMPT_RT.patch
+++ b/debian/patches-rt/Revert-drm-i915-Depend-on-PREEMPT_RT.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Mon, 21 Feb 2022 17:59:14 +0100
Subject: [PATCH] Revert "drm/i915: Depend on !PREEMPT_RT."
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Once the known issues are addressed, it should be safe to enable the
driver.
diff --git a/debian/patches-rt/drm-i915-Do-not-disable-preemption-for-resets.patch b/debian/patches-rt/drm-i915-Do-not-disable-preemption-for-resets.patch
deleted file mode 100644
index 5869667030..0000000000
--- a/debian/patches-rt/drm-i915-Do-not-disable-preemption-for-resets.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
-Date: Wed, 5 Jul 2023 10:30:25 +0100
-Subject: [PATCH] drm/i915: Do not disable preemption for resets
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
-
-Commit ade8a0f59844 ("drm/i915: Make all GPU resets atomic") added a
-preempt disable section over the hardware reset callback to prepare the
-driver for being able to reset from atomic contexts.
-
-In retrospect I can see that the work item at a time was about removing
-the struct mutex from the reset path. Code base also briefly entertained
-the idea of doing the reset under stop_machine in order to serialize
-userspace mmap and temporary glitch in the fence registers (see
-eb8d0f5af4ec ("drm/i915: Remove GPU reset dependence on struct_mutex"),
-but that never materialized and was soon removed in 2caffbf11762
-("drm/i915: Revoke mmaps and prevent access to fence registers across
-reset") and replaced with a SRCU based solution.
-
-As such, as far as I can see, today we still have a requirement that
-resets must not sleep (invoked from submission tasklets), but no need to
-support invoking them from a truly atomic context.
-
-Given that the preemption section is problematic on RT kernels, since the
-uncore lock becomes a sleeping lock and so is invalid in such section,
-lets try and remove it. Potential downside is that our short waits on GPU
-to complete the reset may get extended if CPU scheduling interferes, but
-in practice that probably isn't a deal breaker.
-
-In terms of mechanics, since the preemption disabled block is being
-removed we just need to replace a few of the wait_for_atomic macros into
-busy looping versions which will work (and not complain) when called from
-non-atomic sections.
-
-Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
-Cc: Chris Wilson <chris.p.wilson@intel.com>
-Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
-Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Link: https://lore.kernel.org/r/20230705093025.3689748-1-tvrtko.ursulin@linux.intel.com
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/gpu/drm/i915/gt/intel_reset.c | 12 +++++-------
- 1 file changed, 5 insertions(+), 7 deletions(-)
-
---- a/drivers/gpu/drm/i915/gt/intel_reset.c
-+++ b/drivers/gpu/drm/i915/gt/intel_reset.c
-@@ -164,13 +164,13 @@ static int i915_do_reset(struct intel_gt
- /* Assert reset for at least 20 usec, and wait for acknowledgement. */
- pci_write_config_byte(pdev, I915_GDRST, GRDOM_RESET_ENABLE);
- udelay(50);
-- err = wait_for_atomic(i915_in_reset(pdev), 50);
-+ err = _wait_for_atomic(i915_in_reset(pdev), 50, 0);
-
- /* Clear the reset request. */
- pci_write_config_byte(pdev, I915_GDRST, 0);
- udelay(50);
- if (!err)
-- err = wait_for_atomic(!i915_in_reset(pdev), 50);
-+ err = _wait_for_atomic(!i915_in_reset(pdev), 50, 0);
-
- return err;
- }
-@@ -190,7 +190,7 @@ static int g33_do_reset(struct intel_gt
- struct pci_dev *pdev = to_pci_dev(gt->i915->drm.dev);
-
- pci_write_config_byte(pdev, I915_GDRST, GRDOM_RESET_ENABLE);
-- return wait_for_atomic(g4x_reset_complete(pdev), 50);
-+ return _wait_for_atomic(g4x_reset_complete(pdev), 50, 0);
- }
-
- static int g4x_do_reset(struct intel_gt *gt,
-@@ -207,7 +207,7 @@ static int g4x_do_reset(struct intel_gt
-
- pci_write_config_byte(pdev, I915_GDRST,
- GRDOM_MEDIA | GRDOM_RESET_ENABLE);
-- ret = wait_for_atomic(g4x_reset_complete(pdev), 50);
-+ ret = _wait_for_atomic(g4x_reset_complete(pdev), 50, 0);
- if (ret) {
- GT_TRACE(gt, "Wait for media reset failed\n");
- goto out;
-@@ -215,7 +215,7 @@ static int g4x_do_reset(struct intel_gt
-
- pci_write_config_byte(pdev, I915_GDRST,
- GRDOM_RENDER | GRDOM_RESET_ENABLE);
-- ret = wait_for_atomic(g4x_reset_complete(pdev), 50);
-+ ret = _wait_for_atomic(g4x_reset_complete(pdev), 50, 0);
- if (ret) {
- GT_TRACE(gt, "Wait for render reset failed\n");
- goto out;
-@@ -785,9 +785,7 @@ int __intel_gt_reset(struct intel_gt *gt
- reset_mask = wa_14015076503_start(gt, engine_mask, !retry);
-
- GT_TRACE(gt, "engine_mask=%x\n", reset_mask);
-- preempt_disable();
- ret = reset(gt, reset_mask, retry);
-- preempt_enable();
-
- wa_14015076503_end(gt, reset_mask);
- }
diff --git a/debian/patches-rt/drm-i915-guc-Consider-also-RCU-depth-in-busy-loop.patch b/debian/patches-rt/drm-i915-guc-Consider-also-RCU-depth-in-busy-loop.patch
index 0f030b42f2..0ed0ac24ae 100644
--- a/debian/patches-rt/drm-i915-guc-Consider-also-RCU-depth-in-busy-loop.patch
+++ b/debian/patches-rt/drm-i915-guc-Consider-also-RCU-depth-in-busy-loop.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Tue, 3 Oct 2023 21:37:21 +0200
Subject: [PATCH] drm/i915/guc: Consider also RCU depth in busy loop.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
intel_guc_send_busy_loop() looks at in_atomic() and irqs_disabled() to
decide if it should busy-spin while waiting or if it may sleep.
@@ -18,7 +18,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
-@@ -317,7 +317,7 @@ static inline int intel_guc_send_busy_lo
+@@ -349,7 +349,7 @@ static inline int intel_guc_send_busy_lo
{
int err;
unsigned int sleep_period_ms = 1;
diff --git a/debian/patches-rt/net-Avoid-the-IPI-to-free-the.patch b/debian/patches-rt/net-Avoid-the-IPI-to-free-the.patch
index 6005e7a2e6..70bfac405a 100644
--- a/debian/patches-rt/net-Avoid-the-IPI-to-free-the.patch
+++ b/debian/patches-rt/net-Avoid-the-IPI-to-free-the.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Mon, 15 Aug 2022 17:29:50 +0200
Subject: [PATCH] net: Avoid the IPI to free the
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
skb_attempt_defer_free() collects a skbs, which was allocated on a
remote CPU, on a per-CPU list. These skbs are either freed on that
@@ -25,7 +25,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -3258,7 +3258,11 @@ struct softnet_data {
+@@ -3288,7 +3288,11 @@ struct softnet_data {
int defer_count;
int defer_ipi_scheduled;
struct sk_buff *defer_list;
@@ -39,7 +39,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
static inline void input_queue_head_incr(struct softnet_data *sd)
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -4702,15 +4702,6 @@ static void rps_trigger_softirq(void *da
+@@ -4679,15 +4679,6 @@ static void rps_trigger_softirq(void *da
#endif /* CONFIG_RPS */
@@ -55,7 +55,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/*
* After we queued a packet into sd->input_pkt_queue,
* we need to make sure this queue is serviced soon.
-@@ -6679,6 +6670,32 @@ static void skb_defer_free_flush(struct
+@@ -6658,6 +6649,32 @@ static void skb_defer_free_flush(struct
}
}
@@ -88,7 +88,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
static int napi_threaded_poll(void *data)
{
struct napi_struct *napi = data;
-@@ -11603,7 +11620,11 @@ static int __init net_dev_init(void)
+@@ -11621,7 +11638,11 @@ static int __init net_dev_init(void)
INIT_CSD(&sd->csd, rps_trigger_softirq, sd);
sd->cpu = i;
#endif
@@ -102,7 +102,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
init_gro_hash(&sd->backlog);
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
-@@ -6841,8 +6841,13 @@ nodefer: __kfree_skb(skb);
+@@ -6858,8 +6858,13 @@ nodefer: __kfree_skb(skb);
/* Make sure to trigger NET_RX_SOFTIRQ on the remote CPU
* if we are unlucky enough (this seems very unlikely).
*/
diff --git a/debian/patches-rt/powerpc-pseries-Select-the-generic-memory-allocator.patch b/debian/patches-rt/powerpc-pseries-Select-the-generic-memory-allocator.patch
index 6eb1f4c871..35ced542ba 100644
--- a/debian/patches-rt/powerpc-pseries-Select-the-generic-memory-allocator.patch
+++ b/debian/patches-rt/powerpc-pseries-Select-the-generic-memory-allocator.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Thu, 9 Mar 2023 09:13:52 +0100
Subject: [PATCH] powerpc/pseries: Select the generic memory allocator.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The RTAS work area allocator is using the generic memory allocator and
as such it must select it.
diff --git a/debian/patches-rt/powerpc__traps__Use_PREEMPT_RT.patch b/debian/patches-rt/powerpc__traps__Use_PREEMPT_RT.patch
index de8c14fd76..7d9af1ed24 100644
--- a/debian/patches-rt/powerpc__traps__Use_PREEMPT_RT.patch
+++ b/debian/patches-rt/powerpc__traps__Use_PREEMPT_RT.patch
@@ -1,7 +1,7 @@
Subject: powerpc: traps: Use PREEMPT_RT
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri Jul 26 11:30:49 2019 +0200
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
diff --git a/debian/patches-rt/powerpc_kvm__Disable_in-kernel_MPIC_emulation_for_PREEMPT_RT.patch b/debian/patches-rt/powerpc_kvm__Disable_in-kernel_MPIC_emulation_for_PREEMPT_RT.patch
index f53f527b3a..0cb5032994 100644
--- a/debian/patches-rt/powerpc_kvm__Disable_in-kernel_MPIC_emulation_for_PREEMPT_RT.patch
+++ b/debian/patches-rt/powerpc_kvm__Disable_in-kernel_MPIC_emulation_for_PREEMPT_RT.patch
@@ -1,7 +1,7 @@
Subject: powerpc/kvm: Disable in-kernel MPIC emulation for PREEMPT_RT
From: Bogdan Purcareata <bogdan.purcareata@freescale.com>
Date: Fri Apr 24 15:53:13 2015 +0000
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Bogdan Purcareata <bogdan.purcareata@freescale.com>
diff --git a/debian/patches-rt/powerpc_pseries_iommu__Use_a_locallock_instead_local_irq_save.patch b/debian/patches-rt/powerpc_pseries_iommu__Use_a_locallock_instead_local_irq_save.patch
index f20adf29e0..db47dc2146 100644
--- a/debian/patches-rt/powerpc_pseries_iommu__Use_a_locallock_instead_local_irq_save.patch
+++ b/debian/patches-rt/powerpc_pseries_iommu__Use_a_locallock_instead_local_irq_save.patch
@@ -1,7 +1,7 @@
Subject: powerpc/pseries/iommu: Use a locallock instead local_irq_save()
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Tue Mar 26 18:31:54 2019 +0100
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
diff --git a/debian/patches-rt/powerpc_stackprotector__work_around_stack-guard_init_from_atomic.patch b/debian/patches-rt/powerpc_stackprotector__work_around_stack-guard_init_from_atomic.patch
index c8994ca9d6..41f2983999 100644
--- a/debian/patches-rt/powerpc_stackprotector__work_around_stack-guard_init_from_atomic.patch
+++ b/debian/patches-rt/powerpc_stackprotector__work_around_stack-guard_init_from_atomic.patch
@@ -1,7 +1,7 @@
Subject: powerpc/stackprotector: work around stack-guard init from atomic
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Tue Mar 26 18:31:29 2019 +0100
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
diff --git a/debian/patches-rt/preempt-Put-preempt_enable-within-an-instrumentation.patch b/debian/patches-rt/preempt-Put-preempt_enable-within-an-instrumentation.patch
index beddd4726f..9a39dab226 100644
--- a/debian/patches-rt/preempt-Put-preempt_enable-within-an-instrumentation.patch
+++ b/debian/patches-rt/preempt-Put-preempt_enable-within-an-instrumentation.patch
@@ -2,7 +2,7 @@ From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Wed, 8 Mar 2023 16:29:38 +0100
Subject: [PATCH] preempt: Put preempt_enable() within an instrumentation*()
section.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Callers of preempt_enable() can be within an noinstr section leading to:
| vmlinux.o: warning: objtool: native_sched_clock+0x97: call to preempt_schedule_notrace_thunk() leaves .noinstr.text section
diff --git a/debian/patches-rt/rcutorture-Also-force-sched-priority-to-timersd-on-b.patch b/debian/patches-rt/rcutorture-Also-force-sched-priority-to-timersd-on-b.patch
index a75971478b..601db1b514 100644
--- a/debian/patches-rt/rcutorture-Also-force-sched-priority-to-timersd-on-b.patch
+++ b/debian/patches-rt/rcutorture-Also-force-sched-priority-to-timersd-on-b.patch
@@ -2,7 +2,7 @@ From: Frederic Weisbecker <frederic@kernel.org>
Date: Tue, 5 Apr 2022 03:07:51 +0200
Subject: [PATCH] rcutorture: Also force sched priority to timersd on
boosting test.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
ksoftirqd is statically boosted to the priority level right above the
one of rcu_torture_boost() so that timers, which torture readers rely on,
@@ -45,7 +45,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
-@@ -2408,6 +2408,12 @@ static int rcutorture_booster_init(unsig
+@@ -2409,6 +2409,12 @@ static int rcutorture_booster_init(unsig
WARN_ON_ONCE(!t);
sp.sched_priority = 2;
sched_setscheduler_nocheck(t, SCHED_FIFO, &sp);
diff --git a/debian/patches-rt/riscv-add-PREEMPT_AUTO-support.patch b/debian/patches-rt/riscv-add-PREEMPT_AUTO-support.patch
index 60c3bf3aa1..17219c0a1b 100644
--- a/debian/patches-rt/riscv-add-PREEMPT_AUTO-support.patch
+++ b/debian/patches-rt/riscv-add-PREEMPT_AUTO-support.patch
@@ -1,7 +1,7 @@
From: Jisheng Zhang <jszhang@kernel.org>
Date: Tue, 31 Oct 2023 22:35:20 +0800
Subject: [PATCH] riscv: add PREEMPT_AUTO support
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
riscv has switched to GENERIC_ENTRY, so adding PREEMPT_AUTO is as simple
as adding TIF_ARCH_RESCHED_LAZY related definitions and enabling
@@ -16,7 +16,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
-@@ -135,6 +135,7 @@ config RISCV
+@@ -137,6 +137,7 @@ config RISCV
select HAVE_PERF_USER_STACK_DUMP
select HAVE_POSIX_CPU_TIMERS_TASK_WORK
select HAVE_PREEMPT_DYNAMIC_KEY if !XIP_KERNEL
@@ -26,7 +26,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
select HAVE_RSEQ
--- a/arch/riscv/include/asm/thread_info.h
+++ b/arch/riscv/include/asm/thread_info.h
-@@ -82,6 +82,7 @@ int arch_dup_task_struct(struct task_str
+@@ -95,6 +95,7 @@ int arch_dup_task_struct(struct task_str
* - pending work-to-be-done flags are in lowest half-word
* - other flags in upper half-word(s)
*/
@@ -34,7 +34,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
#define TIF_NOTIFY_RESUME 1 /* callback before returning to user */
#define TIF_SIGPENDING 2 /* signal pending */
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
-@@ -96,6 +97,7 @@ int arch_dup_task_struct(struct task_str
+@@ -109,6 +110,7 @@ int arch_dup_task_struct(struct task_str
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
#define _TIF_UPROBE (1 << TIF_UPROBE)
diff --git a/debian/patches-rt/riscv-allow-to-enable-RT.patch b/debian/patches-rt/riscv-allow-to-enable-RT.patch
index 66fcfc8e7f..f39489b4f6 100644
--- a/debian/patches-rt/riscv-allow-to-enable-RT.patch
+++ b/debian/patches-rt/riscv-allow-to-enable-RT.patch
@@ -1,7 +1,7 @@
From: Jisheng Zhang <jszhang@kernel.org>
Date: Tue, 31 Oct 2023 22:35:21 +0800
Subject: [PATCH] riscv: allow to enable RT
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
Now, it's ready to enable RT on riscv.
@@ -13,11 +13,11 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
-@@ -48,6 +48,7 @@ config RISCV
+@@ -49,6 +49,7 @@ config RISCV
select ARCH_SUPPORTS_HUGETLBFS if MMU
select ARCH_SUPPORTS_PAGE_TABLE_CHECK if MMU
select ARCH_SUPPORTS_PER_VMA_LOCK if MMU
+ select ARCH_SUPPORTS_RT
+ select ARCH_SUPPORTS_SHADOW_CALL_STACK if HAVE_SHADOW_CALL_STACK
select ARCH_USE_MEMTEST
select ARCH_USE_QUEUED_RWLOCKS
- select ARCH_USES_CFI_TRAPS if CFI_CLANG
diff --git a/debian/patches-rt/sched-rt-Don-t-try-push-tasks-if-there-are-none.patch b/debian/patches-rt/sched-rt-Don-t-try-push-tasks-if-there-are-none.patch
index 01e19e8fcc..9c757c60df 100644
--- a/debian/patches-rt/sched-rt-Don-t-try-push-tasks-if-there-are-none.patch
+++ b/debian/patches-rt/sched-rt-Don-t-try-push-tasks-if-there-are-none.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Tue, 1 Aug 2023 17:26:48 +0200
Subject: [PATCH] sched/rt: Don't try push tasks if there are none.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
I have a RT task X at a high priority and cyclictest on each CPU with
lower priority than X's. If X is active and each CPU wakes their own
@@ -43,7 +43,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
-@@ -2249,8 +2249,11 @@ static int rto_next_cpu(struct root_doma
+@@ -2203,8 +2203,11 @@ static int rto_next_cpu(struct root_doma
rd->rto_cpu = cpu;
diff --git a/debian/patches-rt/series b/debian/patches-rt/series
index 9269d7464f..284e04d142 100644
--- a/debian/patches-rt/series
+++ b/debian/patches-rt/series
@@ -9,24 +9,7 @@
###########################################################################
# Posted
###########################################################################
-0001-sched-Constrain-locks-in-sched_submit_work.patch
-0002-locking-rtmutex-Avoid-unconditional-slowpath-for-DEB.patch
-0003-sched-Extract-__schedule_loop.patch
-0004-sched-Provide-rt_mutex-specific-scheduler-helpers.patch
-0005-locking-rtmutex-Use-rt_mutex-specific-scheduler-help.patch
-0006-locking-rtmutex-Add-a-lockdep-assert-to-catch-potent.patch
-0007-futex-pi-Fix-recursive-rt_mutex-waiter-state.patch
-
-# Hacks to get ptrace to work.
-0001-signal-Add-proper-comment-about-the-preempt-disable-.patch
-0002-signal-Don-t-disable-preemption-in-ptrace_stop-on-PR.patch
-
-# DRM AMD GPU
-0001-drm-amd-display-Remove-migrate_en-dis-from-dc_fpu_be.patch
-0002-drm-amd-display-Simplify-the-per-CPU-usage.patch
-0003-drm-amd-display-Add-a-warning-if-the-FPU-is-used-out.patch
-0004-drm-amd-display-Move-the-memory-allocation-out-of-dc.patch
-0005-drm-amd-display-Move-the-memory-allocation-out-of-dc.patch
+# printk related
###########################################################################
# Post
@@ -61,138 +44,56 @@ preempt-Put-preempt_enable-within-an-instrumentation.patch
###########################################################################
# John's printk queue
###########################################################################
-0002-serial-core-Use-lock-wrappers.patch
-0003-serial-21285-Use-port-lock-wrappers.patch
-0004-serial-8250_aspeed_vuart-Use-port-lock-wrappers.patch
-0005-serial-8250_bcm7271-Use-port-lock-wrappers.patch
-0006-serial-8250-Use-port-lock-wrappers.patch
-0007-serial-8250_dma-Use-port-lock-wrappers.patch
-0008-serial-8250_dw-Use-port-lock-wrappers.patch
-0009-serial-8250_exar-Use-port-lock-wrappers.patch
-0010-serial-8250_fsl-Use-port-lock-wrappers.patch
-0011-serial-8250_mtk-Use-port-lock-wrappers.patch
-0012-serial-8250_omap-Use-port-lock-wrappers.patch
-0013-serial-8250_pci1xxxx-Use-port-lock-wrappers.patch
-0014-serial-altera_jtaguart-Use-port-lock-wrappers.patch
-0015-serial-altera_uart-Use-port-lock-wrappers.patch
-0016-serial-amba-pl010-Use-port-lock-wrappers.patch
-0017-serial-amba-pl011-Use-port-lock-wrappers.patch
-0018-serial-apb-Use-port-lock-wrappers.patch
-0019-serial-ar933x-Use-port-lock-wrappers.patch
-0020-serial-arc_uart-Use-port-lock-wrappers.patch
-0021-serial-atmel-Use-port-lock-wrappers.patch
-0022-serial-bcm63xx-uart-Use-port-lock-wrappers.patch
-0023-serial-cpm_uart-Use-port-lock-wrappers.patch
-0024-serial-digicolor-Use-port-lock-wrappers.patch
-0025-serial-dz-Use-port-lock-wrappers.patch
-0026-serial-linflexuart-Use-port-lock-wrappers.patch
-0027-serial-fsl_lpuart-Use-port-lock-wrappers.patch
-0028-serial-icom-Use-port-lock-wrappers.patch
-0029-serial-imx-Use-port-lock-wrappers.patch
-0030-serial-ip22zilog-Use-port-lock-wrappers.patch
-0031-serial-jsm-Use-port-lock-wrappers.patch
-0032-serial-liteuart-Use-port-lock-wrappers.patch
-0033-serial-lpc32xx_hs-Use-port-lock-wrappers.patch
-0034-serial-ma35d1-Use-port-lock-wrappers.patch
-0035-serial-mcf-Use-port-lock-wrappers.patch
-0036-serial-men_z135_uart-Use-port-lock-wrappers.patch
-0037-serial-meson-Use-port-lock-wrappers.patch
-0038-serial-milbeaut_usio-Use-port-lock-wrappers.patch
-0039-serial-mpc52xx-Use-port-lock-wrappers.patch
-0040-serial-mps2-uart-Use-port-lock-wrappers.patch
-0041-serial-msm-Use-port-lock-wrappers.patch
-0042-serial-mvebu-uart-Use-port-lock-wrappers.patch
-0043-serial-omap-Use-port-lock-wrappers.patch
-0044-serial-owl-Use-port-lock-wrappers.patch
-0045-serial-pch-Use-port-lock-wrappers.patch
-0046-serial-pic32-Use-port-lock-wrappers.patch
-0047-serial-pmac_zilog-Use-port-lock-wrappers.patch
-0048-serial-pxa-Use-port-lock-wrappers.patch
-0049-serial-qcom-geni-Use-port-lock-wrappers.patch
-0050-serial-rda-Use-port-lock-wrappers.patch
-0051-serial-rp2-Use-port-lock-wrappers.patch
-0052-serial-sa1100-Use-port-lock-wrappers.patch
-0053-serial-samsung_tty-Use-port-lock-wrappers.patch
-0054-serial-sb1250-duart-Use-port-lock-wrappers.patch
-0056-serial-tegra-Use-port-lock-wrappers.patch
-0057-serial-core-Use-port-lock-wrappers.patch
-0058-serial-mctrl_gpio-Use-port-lock-wrappers.patch
-0059-serial-txx9-Use-port-lock-wrappers.patch
-0060-serial-sh-sci-Use-port-lock-wrappers.patch
-0061-serial-sifive-Use-port-lock-wrappers.patch
-0062-serial-sprd-Use-port-lock-wrappers.patch
-0063-serial-st-asc-Use-port-lock-wrappers.patch
-0064-serial-stm32-Use-port-lock-wrappers.patch
-0065-serial-sunhv-Use-port-lock-wrappers.patch
-0066-serial-sunplus-uart-Use-port-lock-wrappers.patch
-0067-serial-sunsab-Use-port-lock-wrappers.patch
-0068-serial-sunsu-Use-port-lock-wrappers.patch
-0069-serial-sunzilog-Use-port-lock-wrappers.patch
-0070-serial-timbuart-Use-port-lock-wrappers.patch
-0071-serial-uartlite-Use-port-lock-wrappers.patch
-0072-serial-ucc_uart-Use-port-lock-wrappers.patch
-0073-serial-vt8500-Use-port-lock-wrappers.patch
-0074-serial-xilinx_uartps-Use-port-lock-wrappers.patch
-0075-printk-Add-non-BKL-nbcon-console-basic-infrastructur.patch
-0076-printk-nbcon-Add-acquire-release-logic.patch
-0077-printk-Make-static-printk-buffers-available-to-nbcon.patch
-0078-printk-nbcon-Add-buffer-management.patch
-0079-printk-nbcon-Add-ownership-state-functions.patch
-0080-printk-nbcon-Add-sequence-handling.patch
-0081-printk-nbcon-Add-emit-function-and-callback-function.patch
-0082-printk-nbcon-Allow-drivers-to-mark-unsafe-regions-an.patch
-0083-printk-fix-illegal-pbufs-access-for-CONFIG_PRINTK.patch
-0084-printk-Reduce-pr_flush-pooling-time.patch
-0085-printk-nbcon-Relocate-32bit-seq-macros.patch
-0086-printk-Adjust-mapping-for-32bit-seq-macros.patch
-0087-printk-Use-prb_first_seq-as-base-for-32bit-seq-macro.patch
-0088-printk-ringbuffer-Do-not-skip-non-finalized-records-.patch
-0089-printk-ringbuffer-Clarify-special-lpos-values.patch
-0090-printk-For-suppress_panic_printk-check-for-other-CPU.patch
-0091-printk-Add-this_cpu_in_panic.patch
-0092-printk-ringbuffer-Cleanup-reader-terminology.patch
-0093-printk-Wait-for-all-reserved-records-with-pr_flush.patch
-0094-printk-ringbuffer-Skip-non-finalized-records-in-pani.patch
-0095-printk-ringbuffer-Consider-committed-as-finalized-in.patch
-0096-printk-Disable-passing-console-lock-owner-completely.patch
-0097-printk-Avoid-non-panic-CPUs-writing-to-ringbuffer.patch
-0098-panic-Flush-kernel-log-buffer-at-the-end.patch
-0099-printk-Consider-nbcon-boot-consoles-on-seq-init.patch
-0100-printk-Add-sparse-notation-to-console_srcu-locking.patch
-0101-printk-nbcon-Ensure-ownership-release-on-failed-emit.patch
-0102-printk-Check-printk_deferred_enter-_exit-usage.patch
-0103-printk-nbcon-Implement-processing-in-port-lock-wrapp.patch
-0104-printk-nbcon-Add-driver_enter-driver_exit-console-ca.patch
-0105-printk-Make-console_is_usable-available-to-nbcon.patch
-0106-printk-Let-console_is_usable-handle-nbcon.patch
-0107-printk-Add-flags-argument-for-console_is_usable.patch
-0108-printk-nbcon-Provide-function-to-flush-using-write_a.patch
-0109-printk-Track-registered-boot-consoles.patch
-0110-printk-nbcon-Use-nbcon-consoles-in-console_flush_all.patch
-0111-printk-nbcon-Assign-priority-based-on-CPU-state.patch
-0112-printk-nbcon-Add-unsafe-flushing-on-panic.patch
-0113-printk-Avoid-console_lock-dance-if-no-legacy-or-boot.patch
-0114-printk-Track-nbcon-consoles.patch
-0115-printk-Coordinate-direct-printing-in-panic.patch
-0116-printk-nbcon-Implement-emergency-sections.patch
-0117-panic-Mark-emergency-section-in-warn.patch
-0118-panic-Mark-emergency-section-in-oops.patch
-0119-rcu-Mark-emergency-section-in-rcu-stalls.patch
-0120-lockdep-Mark-emergency-section-in-lockdep-splats.patch
-0121-printk-nbcon-Introduce-printing-kthreads.patch
-0122-printk-Atomic-print-in-printk-context-on-shutdown.patch
-0123-printk-nbcon-Add-context-to-console_is_usable.patch
-0124-printk-nbcon-Add-printer-thread-wakeups.patch
-0125-printk-nbcon-Stop-threads-on-shutdown-reboot.patch
-0126-printk-nbcon-Start-printing-threads.patch
-0127-proc-Add-nbcon-support-for-proc-consoles.patch
-0128-tty-sysfs-Add-nbcon-support-for-active.patch
-0129-printk-nbcon-Provide-function-to-reacquire-ownership.patch
-0130-serial-core-Provide-low-level-functions-to-port-lock.patch
-0131-serial-8250-Switch-to-nbcon-console.patch
-0132-printk-Add-kthread-for-all-legacy-consoles.patch
-0133-serial-8250-revert-drop-lockdep-annotation-from-seri.patch
-0134-printk-Avoid-false-positive-lockdep-report-for-legac.patch
+0001-printk-nbcon-Relocate-32bit-seq-macros.patch
+0002-printk-Adjust-mapping-for-32bit-seq-macros.patch
+0003-printk-Use-prb_first_seq-as-base-for-32bit-seq-macro.patch
+0004-printk-ringbuffer-Do-not-skip-non-finalized-records-.patch
+0005-printk-ringbuffer-Clarify-special-lpos-values.patch
+0006-printk-For-suppress_panic_printk-check-for-other-CPU.patch
+0007-printk-Add-this_cpu_in_panic.patch
+0008-printk-ringbuffer-Cleanup-reader-terminology.patch
+0009-printk-Wait-for-all-reserved-records-with-pr_flush.patch
+0010-printk-ringbuffer-Skip-non-finalized-records-in-pani.patch
+0011-printk-ringbuffer-Consider-committed-as-finalized-in.patch
+0012-printk-Disable-passing-console-lock-owner-completely.patch
+0013-printk-Avoid-non-panic-CPUs-writing-to-ringbuffer.patch
+0014-panic-Flush-kernel-log-buffer-at-the-end.patch
+0015-printk-Consider-nbcon-boot-consoles-on-seq-init.patch
+0016-printk-Add-sparse-notation-to-console_srcu-locking.patch
+0017-printk-nbcon-Ensure-ownership-release-on-failed-emit.patch
+0018-printk-Check-printk_deferred_enter-_exit-usage.patch
+0019-printk-nbcon-Implement-processing-in-port-lock-wrapp.patch
+0020-printk-nbcon-Add-driver_enter-driver_exit-console-ca.patch
+0021-printk-Make-console_is_usable-available-to-nbcon.patch
+0022-printk-Let-console_is_usable-handle-nbcon.patch
+0023-printk-Add-flags-argument-for-console_is_usable.patch
+0024-printk-nbcon-Provide-function-to-flush-using-write_a.patch
+0025-printk-Track-registered-boot-consoles.patch
+0026-printk-nbcon-Use-nbcon-consoles-in-console_flush_all.patch
+0027-printk-nbcon-Assign-priority-based-on-CPU-state.patch
+0028-printk-nbcon-Add-unsafe-flushing-on-panic.patch
+0029-printk-Avoid-console_lock-dance-if-no-legacy-or-boot.patch
+0030-printk-Track-nbcon-consoles.patch
+0031-printk-Coordinate-direct-printing-in-panic.patch
+0032-printk-nbcon-Implement-emergency-sections.patch
+0033-panic-Mark-emergency-section-in-warn.patch
+0034-panic-Mark-emergency-section-in-oops.patch
+0035-rcu-Mark-emergency-section-in-rcu-stalls.patch
+0036-lockdep-Mark-emergency-section-in-lockdep-splats.patch
+0037-printk-nbcon-Introduce-printing-kthreads.patch
+0038-printk-Atomic-print-in-printk-context-on-shutdown.patch
+0039-printk-nbcon-Add-context-to-console_is_usable.patch
+0040-printk-nbcon-Add-printer-thread-wakeups.patch
+0041-printk-nbcon-Stop-threads-on-shutdown-reboot.patch
+0042-printk-nbcon-Start-printing-threads.patch
+0043-proc-Add-nbcon-support-for-proc-consoles.patch
+0044-tty-sysfs-Add-nbcon-support-for-active.patch
+0045-printk-nbcon-Provide-function-to-reacquire-ownership.patch
+0046-serial-core-Provide-low-level-functions-to-port-lock.patch
+0047-serial-8250-Switch-to-nbcon-console.patch
+0048-printk-Add-kthread-for-all-legacy-consoles.patch
+0049-serial-8250-revert-drop-lockdep-annotation-from-seri.patch
+0050-printk-Avoid-false-positive-lockdep-report-for-legac.patch
###########################################################################
# DRM:
@@ -205,7 +106,6 @@ preempt-Put-preempt_enable-within-an-instrumentation.patch
0008-drm-i915-gt-Queue-and-wait-for-the-irq_work-item.patch
0009-drm-i915-gt-Use-spin_lock_irq-instead-of-local_irq_d.patch
0010-drm-i915-Drop-the-irqs_disabled-check.patch
-drm-i915-Do-not-disable-preemption-for-resets.patch
drm-i915-guc-Consider-also-RCU-depth-in-busy-loop.patch
Revert-drm-i915-Depend-on-PREEMPT_RT.patch
@@ -242,7 +142,6 @@ POWERPC__Allow_to_enable_RT.patch
###########################################################################
# RISC-V
###########################################################################
-#RISC-V-Probe-misaligned-access-speed-in-parallel.patch
riscv-add-PREEMPT_AUTO-support.patch
riscv-allow-to-enable-RT.patch
diff --git a/debian/patches-rt/softirq-Use-a-dedicated-thread-for-timer-wakeups.patch b/debian/patches-rt/softirq-Use-a-dedicated-thread-for-timer-wakeups.patch
index 949ff6da70..7d6eb399b5 100644
--- a/debian/patches-rt/softirq-Use-a-dedicated-thread-for-timer-wakeups.patch
+++ b/debian/patches-rt/softirq-Use-a-dedicated-thread-for-timer-wakeups.patch
@@ -1,7 +1,7 @@
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Wed, 1 Dec 2021 17:41:09 +0100
Subject: [PATCH] softirq: Use a dedicated thread for timer wakeups.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
A timer/hrtimer softirq is raised in-IRQ context. With threaded
interrupts enabled or on PREEMPT_RT this leads to waking the ksoftirqd
diff --git a/debian/patches-rt/softirq-Wake-ktimers-thread-also-in-softirq.patch b/debian/patches-rt/softirq-Wake-ktimers-thread-also-in-softirq.patch
index 21609fe207..23fe32ea39 100644
--- a/debian/patches-rt/softirq-Wake-ktimers-thread-also-in-softirq.patch
+++ b/debian/patches-rt/softirq-Wake-ktimers-thread-also-in-softirq.patch
@@ -1,7 +1,7 @@
From: Junxiao Chang <junxiao.chang@intel.com>
Date: Mon, 20 Feb 2023 09:12:20 +0100
Subject: [PATCH] softirq: Wake ktimers thread also in softirq.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
If the hrtimer is raised while a softirq is processed then it does not
wake the corresponding ktimers thread. This is due to the optimisation in the
diff --git a/debian/patches-rt/sysfs__Add__sys_kernel_realtime_entry.patch b/debian/patches-rt/sysfs__Add__sys_kernel_realtime_entry.patch
index 2e6928846b..56e82149df 100644
--- a/debian/patches-rt/sysfs__Add__sys_kernel_realtime_entry.patch
+++ b/debian/patches-rt/sysfs__Add__sys_kernel_realtime_entry.patch
@@ -1,7 +1,7 @@
Subject: sysfs: Add /sys/kernel/realtime entry
From: Clark Williams <williams@redhat.com>
Date: Sat Jul 30 21:55:53 2011 -0500
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Clark Williams <williams@redhat.com>
diff --git a/debian/patches-rt/tick-Fix-timer-storm-since-introduction-of-timersd.patch b/debian/patches-rt/tick-Fix-timer-storm-since-introduction-of-timersd.patch
index 874c7b3b3d..c04b555691 100644
--- a/debian/patches-rt/tick-Fix-timer-storm-since-introduction-of-timersd.patch
+++ b/debian/patches-rt/tick-Fix-timer-storm-since-introduction-of-timersd.patch
@@ -1,7 +1,7 @@
From: Frederic Weisbecker <frederic@kernel.org>
Date: Tue, 5 Apr 2022 03:07:52 +0200
Subject: [PATCH] tick: Fix timer storm since introduction of timersd
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
If timers are pending while the tick is reprogrammed on nohz_mode, the
next expiry is not armed to fire now, it is delayed one jiffy forward
@@ -95,7 +95,7 @@ Link: https://lkml.kernel.org/r/20220405010752.1347437-2-frederic@kernel.org
{
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
-@@ -795,7 +795,7 @@ static void tick_nohz_restart(struct tic
+@@ -796,7 +796,7 @@ static void tick_nohz_restart(struct tic
static inline bool local_timer_softirq_pending(void)
{
diff --git a/debian/patches-rt/tty_serial_omap__Make_the_locking_RT_aware.patch b/debian/patches-rt/tty_serial_omap__Make_the_locking_RT_aware.patch
index 89d7447401..fd1f459b75 100644
--- a/debian/patches-rt/tty_serial_omap__Make_the_locking_RT_aware.patch
+++ b/debian/patches-rt/tty_serial_omap__Make_the_locking_RT_aware.patch
@@ -1,7 +1,7 @@
Subject: tty/serial/omap: Make the locking RT aware
From: Thomas Gleixner <tglx@linutronix.de>
Date: Thu Jul 28 13:32:57 2011 +0200
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Thomas Gleixner <tglx@linutronix.de>
diff --git a/debian/patches-rt/tty_serial_pl011__Make_the_locking_work_on_RT.patch b/debian/patches-rt/tty_serial_pl011__Make_the_locking_work_on_RT.patch
index 32ff14fba0..c9a40db398 100644
--- a/debian/patches-rt/tty_serial_pl011__Make_the_locking_work_on_RT.patch
+++ b/debian/patches-rt/tty_serial_pl011__Make_the_locking_work_on_RT.patch
@@ -1,7 +1,7 @@
Subject: tty/serial/pl011: Make the locking work on RT
From: Thomas Gleixner <tglx@linutronix.de>
Date: Tue Jan 8 21:36:51 2013 +0100
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Thomas Gleixner <tglx@linutronix.de>
diff --git a/debian/patches-rt/x86__Allow_to_enable_RT.patch b/debian/patches-rt/x86__Allow_to_enable_RT.patch
index 3fa433084a..a0c01233f8 100644
--- a/debian/patches-rt/x86__Allow_to_enable_RT.patch
+++ b/debian/patches-rt/x86__Allow_to_enable_RT.patch
@@ -1,7 +1,7 @@
Subject: x86: Allow to enable RT
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Wed Aug 7 18:15:38 2019 +0200
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
@@ -22,6 +22,6 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
select ARCH_SUPPORTS_PER_VMA_LOCK
+ select ARCH_SUPPORTS_RT
- select ARCH_USE_CMPXCHG_LOCKREF
select HAVE_ARCH_SOFT_DIRTY
select MODULES_USE_ELF_RELA
+ select NEED_DMA_MAP_STATE
diff --git a/debian/patches-rt/x86__Enable_RT_also_on_32bit.patch b/debian/patches-rt/x86__Enable_RT_also_on_32bit.patch
index 3092b41acb..6b6f7e84af 100644
--- a/debian/patches-rt/x86__Enable_RT_also_on_32bit.patch
+++ b/debian/patches-rt/x86__Enable_RT_also_on_32bit.patch
@@ -1,7 +1,7 @@
Subject: x86: Enable RT also on 32bit
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Thu Nov 7 17:49:20 2019 +0100
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
@@ -15,19 +15,19 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
-@@ -28,7 +28,6 @@ config X86_64
+@@ -27,7 +27,6 @@ config X86_64
+ # Options that are inherently 64-bit kernel only:
select ARCH_HAS_GIGANTIC_PAGE
select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
- select ARCH_SUPPORTS_PER_VMA_LOCK
-- select ARCH_SUPPORTS_RT
- select ARCH_USE_CMPXCHG_LOCKREF
+- select ARCH_SUPPORTS_PER_VMA_LOCK
+ select ARCH_SUPPORTS_RT
select HAVE_ARCH_SOFT_DIRTY
select MODULES_USE_ELF_RELA
-@@ -118,6 +117,7 @@ config X86
+@@ -117,6 +116,7 @@ config X86
select ARCH_USES_CFI_TRAPS if X86_64 && CFI_CLANG
select ARCH_SUPPORTS_LTO_CLANG
select ARCH_SUPPORTS_LTO_CLANG_THIN
+ select ARCH_SUPPORTS_RT
select ARCH_USE_BUILTIN_BSWAP
+ select ARCH_USE_CMPXCHG_LOCKREF if X86_CMPXCHG64
select ARCH_USE_MEMTEST
- select ARCH_USE_QUEUED_RWLOCKS
diff --git a/debian/patches-rt/zram-Replace-bit-spinlocks-with-spinlock_t-for-PREEM.patch b/debian/patches-rt/zram-Replace-bit-spinlocks-with-spinlock_t-for-PREEM.patch
index 0ccb2d87cc..24895a4fb5 100644
--- a/debian/patches-rt/zram-Replace-bit-spinlocks-with-spinlock_t-for-PREEM.patch
+++ b/debian/patches-rt/zram-Replace-bit-spinlocks-with-spinlock_t-for-PREEM.patch
@@ -1,7 +1,7 @@
From: Mike Galbraith <umgwanakikbuti@gmail.com>
Date: Thu, 31 Mar 2016 04:08:28 +0200
Subject: [PATCH] zram: Replace bit spinlocks with spinlock_t for PREEMPT_RT.
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.7/older/patches-6.7-rt6.tar.xz
The bit spinlock disables preemption. The spinlock_t lock becomes a sleeping
lock on PREEMPT_RT and it can not be acquired in this context. In this locked
@@ -72,7 +72,7 @@ Link: https://lore.kernel.org/20230323161830.jFbWCosd@linutronix.de
static inline bool init_done(struct zram *zram)
{
-@@ -1245,6 +1281,7 @@ static bool zram_meta_alloc(struct zram
+@@ -1242,6 +1278,7 @@ static bool zram_meta_alloc(struct zram
if (!huge_class_size)
huge_class_size = zs_huge_class_size(zram->mem_pool);