diff --git a/0001-raspberrypi-kernel-RT.patch b/0001-raspberrypi-kernel-RT.patch index 627d8251b494ed7d391f4d8345d8a0bae2a86612..3457bd2ffd636a372958f43c4e86b9e80839479b 100644 --- a/0001-raspberrypi-kernel-RT.patch +++ b/0001-raspberrypi-kernel-RT.patch @@ -1,6 +1,6 @@ -From 6234478af4f6e3fbc8da05ff26a7d49bfccf8ffe Mon Sep 17 00:00:00 2001 +From ceef3924993b91eb237a5db8e7f2fa821c39805c Mon Sep 17 00:00:00 2001 From: zhangyu -Date: Wed, 16 Apr 2025 11:46:30 +0800 +Date: Fri, 25 Apr 2025 16:22:56 +0800 Subject: [PATCH] rt1 --- @@ -112,7 +112,7 @@ Subject: [PATCH] rt1 drivers/tty/serial/uartlite.c | 18 +- drivers/tty/serial/ucc_uart.c | 4 +- drivers/tty/serial/vt8500_serial.c | 8 +- - drivers/tty/serial/xilinx_uartps.c | 56 +- + drivers/tty/serial/xilinx_uartps.c | 55 +- drivers/tty/tty_io.c | 11 +- fs/proc/consoles.c | 14 +- include/linux/bottom_half.h | 2 + @@ -167,7 +167,7 @@ Subject: [PATCH] rt1 kernel/trace/trace_output.c | 16 +- net/core/dev.c | 39 +- net/core/skbuff.c | 7 +- - 163 files changed, 5008 insertions(+), 1499 deletions(-) + 163 files changed, 5008 insertions(+), 1498 deletions(-) create mode 100644 kernel/printk/nbcon.c diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig @@ -233,7 +233,7 @@ index fef62e4a9..622a30243 100644 return 0; } diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c -index 7e8773a2d..9fde36fcb 100644 +index a1ff693e4..adcc34042 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c @@ -55,6 +55,34 @@ extern unsigned int VFP_arch_feroceon __alias(VFP_arch); @@ -271,7 +271,7 @@ index 7e8773a2d..9fde36fcb 100644 /* * Is 'thread's most up to date state stored in this CPUs hardware? * Must be called from non-preemptible context. -@@ -240,7 +268,7 @@ static void vfp_panic(char *reason, u32 inst) +@@ -243,7 +271,7 @@ static void vfp_panic(char *reason, u32 inst) /* * Process bitmask of exception conditions. */ @@ -280,7 +280,7 @@ index 7e8773a2d..9fde36fcb 100644 { int si_code = 0; -@@ -248,8 +276,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ +@@ -251,8 +279,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ if (exceptions == VFP_EXCEPTION_ERROR) { vfp_panic("unhandled bounce", inst); @@ -290,7 +290,7 @@ index 7e8773a2d..9fde36fcb 100644 } /* -@@ -277,8 +304,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ +@@ -280,8 +307,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ RAISE(FPSCR_OFC, FPSCR_OFE, FPE_FLTOVF); RAISE(FPSCR_IOC, FPSCR_IOE, FPE_FLTINV); @@ -300,7 +300,7 @@ index 7e8773a2d..9fde36fcb 100644 } /* -@@ -324,6 +350,8 @@ static u32 vfp_emulate_instruction(u32 inst, u32 fpscr, struct pt_regs *regs) +@@ -327,6 +353,8 @@ static u32 vfp_emulate_instruction(u32 inst, u32 fpscr, struct pt_regs *regs) static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) { u32 fpscr, orig_fpscr, fpsid, exceptions; @@ -309,7 +309,7 @@ index 7e8773a2d..9fde36fcb 100644 pr_debug("VFP: bounce: trigger %08x fpexc %08x\n", trigger, fpexc); -@@ -369,8 +397,8 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -372,8 +400,8 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) * unallocated VFP instruction but with FPSCR.IXE set and not * on VFP subarch 1. */ @@ -320,7 +320,7 @@ index 7e8773a2d..9fde36fcb 100644 } /* -@@ -394,14 +422,14 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -397,14 +425,14 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) */ exceptions = vfp_emulate_instruction(trigger, fpscr, regs); if (exceptions) @@ -337,7 +337,7 @@ index 7e8773a2d..9fde36fcb 100644 /* * The barrier() here prevents fpinst2 being read -@@ -413,7 +441,13 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -416,7 +444,13 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) emulate: exceptions = vfp_emulate_instruction(trigger, orig_fpscr, regs); if (exceptions) @@ -352,7 +352,7 @@ index 7e8773a2d..9fde36fcb 100644 } static void vfp_enable(void *unused) -@@ -512,11 +546,9 @@ static inline void vfp_pm_init(void) { } +@@ -518,11 +552,9 @@ static inline void vfp_pm_init(void) { } */ void vfp_sync_hwstate(struct thread_info *thread) { @@ -366,7 +366,7 @@ index 7e8773a2d..9fde36fcb 100644 u32 fpexc = fmrx(FPEXC); /* -@@ -527,8 +559,7 @@ void vfp_sync_hwstate(struct thread_info *thread) +@@ -534,8 +566,7 @@ void vfp_sync_hwstate(struct thread_info *thread) fmxr(FPEXC, fpexc); } @@ -376,7 +376,7 @@ index 7e8773a2d..9fde36fcb 100644 } /* Ensure that the thread reloads the hardware VFP state on the next use. */ -@@ -683,7 +714,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -695,7 +726,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) if (!user_mode(regs)) return vfp_kmode_exception(regs, trigger); @@ -385,7 +385,7 @@ index 7e8773a2d..9fde36fcb 100644 fpexc = fmrx(FPEXC); /* -@@ -748,6 +779,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -760,6 +791,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) * replay the instruction that trapped. */ fmxr(FPEXC, fpexc); @@ -393,7 +393,7 @@ index 7e8773a2d..9fde36fcb 100644 } else { /* Check for synchronous or asynchronous exceptions */ if (!(fpexc & (FPEXC_EX | FPEXC_DEX))) { -@@ -762,17 +794,17 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -774,17 +806,17 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) if (!(fpscr & FPSCR_IXE)) { if (!(fpscr & FPSCR_LENGTH_MASK)) { pr_debug("not VFP\n"); @@ -413,7 +413,7 @@ index 7e8773a2d..9fde36fcb 100644 return 0; } -@@ -819,7 +851,7 @@ void kernel_neon_begin(void) +@@ -831,7 +863,7 @@ void kernel_neon_begin(void) unsigned int cpu; u32 fpexc; @@ -422,7 +422,7 @@ index 7e8773a2d..9fde36fcb 100644 /* * Kernel mode NEON is only allowed outside of hardirq context with -@@ -850,7 +882,7 @@ void kernel_neon_end(void) +@@ -863,7 +895,7 @@ void kernel_neon_end(void) { /* Disable the NEON/VFP unit. */ fmxr(FPEXC, fmrx(FPEXC) & ~FPEXC_EN); @@ -432,7 +432,7 @@ index 7e8773a2d..9fde36fcb 100644 EXPORT_SYMBOL(kernel_neon_end); diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 9da9d58f1..bedb0c9e5 100644 +index 0233c5628..6d433cf44 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -103,6 +103,7 @@ config ARM64 @@ -530,7 +530,7 @@ index 4ebf2ef28..381c3be3b 100644 select MPIC select OF_DYNAMIC diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c -index b1e6d275c..9a8d3970d 100644 +index a74f31362..178bdf3d8 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c @@ -25,6 +25,7 @@ @@ -837,7 +837,7 @@ index 1b8da4e40..2cb5e6514 100644 if (has_vector()) { if (riscv_v_setup_vsize()) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 7efe93e4e..f05bebbc1 100644 +index e4c9e582a..75a3ec1f2 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -122,6 +122,7 @@ config X86 @@ -1711,10 +1711,10 @@ index 9afd5979c..db23b3a02 100644 return 0; diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c -index c536028e9..efb6f1c19 100644 +index 679a74d9f..f2bda37e7 100644 --- 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(struct timer_list *t) +@@ -271,7 +271,7 @@ static void serial8250_backup_timeout(struct timer_list *t) unsigned int iir, ier = 0, lsr; unsigned long flags; @@ -1723,7 +1723,7 @@ index c536028e9..efb6f1c19 100644 /* * Must disable interrupts or else we risk racing with the interrupt -@@ -292,7 +292,7 @@ static void serial8250_backup_timeout(struct timer_list *t) +@@ -304,7 +304,7 @@ static void serial8250_backup_timeout(struct timer_list *t) if (up->port.irq) serial_out(up, UART_IER, ier); @@ -1732,7 +1732,7 @@ index c536028e9..efb6f1c19 100644 /* Standard timer interval plus 0.2s to keep the port running */ mod_timer(&up->timer, -@@ -592,6 +592,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) +@@ -607,6 +607,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) #ifdef CONFIG_SERIAL_8250_CONSOLE @@ -1740,7 +1740,7 @@ index c536028e9..efb6f1c19 100644 static void univ8250_console_write(struct console *co, const char *s, unsigned int count) { -@@ -599,6 +600,37 @@ static void univ8250_console_write(struct console *co, const char *s, +@@ -614,6 +615,37 @@ static void univ8250_console_write(struct console *co, const char *s, serial8250_console_write(up, s, count); } @@ -1778,7 +1778,7 @@ index c536028e9..efb6f1c19 100644 static int univ8250_console_setup(struct console *co, char *options) { -@@ -698,12 +730,20 @@ static int univ8250_console_match(struct console *co, char *name, int idx, +@@ -713,12 +745,20 @@ static int univ8250_console_match(struct console *co, char *name, int idx, static struct console univ8250_console = { .name = "ttyS", @@ -1800,7 +1800,7 @@ index c536028e9..efb6f1c19 100644 .index = -1, .data = &serial8250_reg, }; -@@ -992,11 +1032,11 @@ static void serial_8250_overrun_backoff_work(struct work_struct *work) +@@ -1007,11 +1047,11 @@ static void serial_8250_overrun_backoff_work(struct work_struct *work) struct uart_port *port = &up->port; unsigned long flags; @@ -1814,7 +1814,7 @@ index c536028e9..efb6f1c19 100644 } /** -@@ -1197,9 +1237,9 @@ void serial8250_unregister_port(int line) +@@ -1212,9 +1252,9 @@ void serial8250_unregister_port(int line) if (uart->em485) { unsigned long flags; @@ -1827,7 +1827,7 @@ index c536028e9..efb6f1c19 100644 uart_remove_one_port(&serial8250_reg, &uart->port); diff --git a/drivers/tty/serial/8250/8250_dma.c b/drivers/tty/serial/8250/8250_dma.c -index 7fa665017..8b30ca8fd 100644 +index 7f2303781..cf51976ff 100644 --- 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 *param) @@ -2209,7 +2209,7 @@ index a3b25779d..53e238c8c 100644 mutex_unlock(&tport->mutex); } diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c -index 2b1b2928e..d70026d03 100644 +index 57bc60fcc..06fda8914 100644 --- 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 uart_8250_port *p) @@ -2386,7 +2386,7 @@ index 2b1b2928e..d70026d03 100644 serial8250_rpm_put(p); return HRTIMER_NORESTART; -@@ -1624,12 +1641,12 @@ static enum hrtimer_restart serial8250_em485_handle_start_tx(struct hrtimer *t) +@@ -1627,12 +1644,12 @@ static enum hrtimer_restart serial8250_em485_handle_start_tx(struct hrtimer *t) struct uart_8250_port *p = em485->port; unsigned long flags; @@ -2401,7 +2401,7 @@ index 2b1b2928e..d70026d03 100644 return HRTIMER_NORESTART; } -@@ -1912,7 +1929,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) +@@ -1921,7 +1938,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) if (iir & UART_IIR_NO_INT) return 0; @@ -2410,7 +2410,7 @@ index 2b1b2928e..d70026d03 100644 status = serial_lsr_in(up); -@@ -1982,9 +1999,9 @@ static int serial8250_tx_threshold_handle_irq(struct uart_port *port) +@@ -1991,9 +2008,9 @@ static int serial8250_tx_threshold_handle_irq(struct uart_port *port) if ((iir & UART_IIR_ID) == UART_IIR_THRI) { struct uart_8250_port *up = up_to_u8250p(port); @@ -2422,7 +2422,7 @@ index 2b1b2928e..d70026d03 100644 } iir = serial_port_in(port, UART_IIR); -@@ -1999,10 +2016,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port) +@@ -2008,10 +2025,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port) serial8250_rpm_get(up); @@ -2435,7 +2435,7 @@ index 2b1b2928e..d70026d03 100644 serial8250_rpm_put(up); -@@ -2064,13 +2081,13 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state) +@@ -2073,13 +2090,13 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state) unsigned long flags; serial8250_rpm_get(up); @@ -2451,7 +2451,7 @@ index 2b1b2928e..d70026d03 100644 serial8250_rpm_put(up); } -@@ -2206,7 +2223,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2215,7 +2232,7 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2460,7 +2460,7 @@ index 2b1b2928e..d70026d03 100644 up->acr = 0; serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B); serial_port_out(port, UART_EFR, UART_EFR_ECB); -@@ -2216,7 +2233,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2225,7 +2242,7 @@ int serial8250_do_startup(struct uart_port *port) 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); @@ -2469,7 +2469,7 @@ index 2b1b2928e..d70026d03 100644 } if (port->type == PORT_DA830) { -@@ -2225,10 +2242,10 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2234,10 +2251,10 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2482,7 +2482,7 @@ index 2b1b2928e..d70026d03 100644 mdelay(10); /* Enable Tx, Rx and free run mode */ -@@ -2342,7 +2359,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2351,7 +2368,7 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2491,7 +2491,7 @@ index 2b1b2928e..d70026d03 100644 wait_for_xmitr(up, UART_LSR_THRE); serial_port_out_sync(port, UART_IER, UART_IER_THRI); -@@ -2354,7 +2371,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2363,7 +2380,7 @@ int serial8250_do_startup(struct uart_port *port) iir = serial_port_in(port, UART_IIR); serial_port_out(port, UART_IER, 0); @@ -2500,7 +2500,7 @@ index 2b1b2928e..d70026d03 100644 if (port->irqflags & IRQF_SHARED) enable_irq(port->irq); -@@ -2377,7 +2394,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2386,7 +2403,7 @@ int serial8250_do_startup(struct uart_port *port) */ serial_port_out(port, UART_LCR, UART_LCR_WLEN8); @@ -2509,7 +2509,7 @@ index 2b1b2928e..d70026d03 100644 if (up->port.flags & UPF_FOURPORT) { if (!up->port.irq) up->port.mctrl |= TIOCM_OUT1; -@@ -2423,7 +2440,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2432,7 +2449,7 @@ int serial8250_do_startup(struct uart_port *port) } dont_test_tx_en: @@ -2518,7 +2518,7 @@ index 2b1b2928e..d70026d03 100644 /* * Clear the interrupt registers again for luck, and clear the -@@ -2494,17 +2511,17 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2503,17 +2520,17 @@ void serial8250_do_shutdown(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2539,7 +2539,7 @@ index 2b1b2928e..d70026d03 100644 if (port->flags & UPF_FOURPORT) { /* reset interrupts on the AST Fourport board */ inb((port->iobase & 0xfe0) | 0x1f); -@@ -2513,7 +2530,7 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2522,7 +2539,7 @@ void serial8250_do_shutdown(struct uart_port *port) port->mctrl &= ~TIOCM_OUT2; serial8250_set_mctrl(port, port->mctrl); @@ -2548,7 +2548,7 @@ index 2b1b2928e..d70026d03 100644 /* * Disable break condition and FIFOs -@@ -2749,14 +2766,14 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk) +@@ -2766,14 +2783,14 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk) quot = serial8250_get_divisor(port, baud, &frac); serial8250_rpm_get(up); @@ -2565,7 +2565,7 @@ index 2b1b2928e..d70026d03 100644 serial8250_rpm_put(up); out_unlock: -@@ -2793,7 +2810,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2810,7 +2827,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, * Synchronize UART_IER access against the console. */ serial8250_rpm_get(up); @@ -2574,7 +2574,7 @@ index 2b1b2928e..d70026d03 100644 up->lcr = cval; /* Save computed LCR */ -@@ -2896,7 +2913,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2913,7 +2930,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, serial_port_out(port, UART_FCR, up->fcr); /* set fcr */ } serial8250_set_mctrl(port, port->mctrl); @@ -2583,7 +2583,7 @@ index 2b1b2928e..d70026d03 100644 serial8250_rpm_put(up); /* Don't rewrite B0 */ -@@ -2919,15 +2936,15 @@ void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios) +@@ -2936,15 +2953,15 @@ void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios) { if (termios->c_line == N_PPS) { port->flags |= UPF_HARDPPS_CD; @@ -2603,7 +2603,7 @@ index 2b1b2928e..d70026d03 100644 } } } -@@ -3323,6 +3340,11 @@ static void serial8250_console_putchar(struct uart_port *port, unsigned char ch) +@@ -3341,6 +3358,11 @@ static void serial8250_console_putchar(struct uart_port *port, unsigned char ch) wait_for_xmitr(up, UART_LSR_THRE); serial_port_out(port, UART_TX, ch); @@ -2615,7 +2615,7 @@ index 2b1b2928e..d70026d03 100644 } /* -@@ -3361,6 +3383,7 @@ static void fifo_wait_for_lsr(struct uart_8250_port *up, unsigned int count) +@@ -3379,6 +3401,7 @@ static void fifo_wait_for_lsr(struct uart_8250_port *up, unsigned int count) } } @@ -2623,7 +2623,7 @@ index 2b1b2928e..d70026d03 100644 /* * Print a string to the serial port using the device FIFO * -@@ -3420,15 +3443,15 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3438,15 +3461,15 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, touch_nmi_watchdog(); if (oops_in_progress) @@ -2642,7 +2642,7 @@ index 2b1b2928e..d70026d03 100644 /* check scratch reg to see if port powered off during system sleep */ if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { -@@ -3492,8 +3515,137 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3510,8 +3533,137 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, serial8250_modem_status(up); if (locked) @@ -2781,7 +2781,7 @@ index 2b1b2928e..d70026d03 100644 static unsigned int probe_baud(struct uart_port *port) { -@@ -3512,6 +3664,7 @@ static unsigned int probe_baud(struct uart_port *port) +@@ -3530,6 +3682,7 @@ static unsigned int probe_baud(struct uart_port *port) int serial8250_console_setup(struct uart_port *port, char *options, bool probe) { @@ -2789,7 +2789,7 @@ index 2b1b2928e..d70026d03 100644 int baud = 9600; int bits = 8; int parity = 'n'; -@@ -3521,6 +3674,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) +@@ -3539,6 +3692,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) if (!port->iobase && !port->membase) return -ENODEV; @@ -7023,10 +7023,10 @@ index f3cd69346..dbec29d9a 100644 static int __init sbd_console_setup(struct console *co, char *options) diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c -index 2962e2351..0b1cfbdf6 100644 +index 2879b764e..cc89c7bc9 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c -@@ -810,6 +810,7 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) +@@ -812,6 +812,7 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) { struct uart_port *port = &(to_sc16is7xx_one(ws, tx_work)->port); struct sc16is7xx_one *one = to_sc16is7xx_one(port, port); @@ -7034,7 +7034,7 @@ index 2962e2351..0b1cfbdf6 100644 if ((port->rs485.flags & SER_RS485_ENABLED) && (port->rs485.delay_rts_before_send > 0)) -@@ -818,6 +819,10 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) +@@ -820,6 +821,10 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) mutex_lock(&one->efr_lock); sc16is7xx_handle_tx(port); mutex_unlock(&one->efr_lock); @@ -7642,10 +7642,10 @@ index be08fb6f7..eaa980722 100644 static void diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c -index f793624fd..2559c9781 100644 +index 4350a69d9..9f8e224e1 100644 --- 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 *arg) +@@ -1206,7 +1206,7 @@ static void sci_dma_tx_complete(void *arg) dev_dbg(port->dev, "%s(%d)\n", __func__, port->line); @@ -7654,7 +7654,7 @@ index f793624fd..2559c9781 100644 uart_xmit_advance(port, s->tx_dma_len); -@@ -1229,7 +1229,7 @@ static void sci_dma_tx_complete(void *arg) +@@ -1230,7 +1230,7 @@ static void sci_dma_tx_complete(void *arg) } } @@ -7663,7 +7663,7 @@ index f793624fd..2559c9781 100644 } /* Locking: called with port lock held */ -@@ -1325,7 +1325,7 @@ static void sci_dma_rx_complete(void *arg) +@@ -1326,7 +1326,7 @@ static void sci_dma_rx_complete(void *arg) dev_dbg(port->dev, "%s(%d) active cookie %d\n", __func__, port->line, s->active_rx); @@ -7672,7 +7672,7 @@ index f793624fd..2559c9781 100644 active = sci_dma_rx_find_active(s); if (active >= 0) -@@ -1352,20 +1352,20 @@ static void sci_dma_rx_complete(void *arg) +@@ -1353,20 +1353,20 @@ static void sci_dma_rx_complete(void *arg) dma_async_issue_pending(chan); @@ -7697,7 +7697,7 @@ index f793624fd..2559c9781 100644 } static void sci_dma_tx_release(struct sci_port *s) -@@ -1414,13 +1414,13 @@ static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held) +@@ -1415,13 +1415,13 @@ static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held) fail: /* Switch to PIO */ if (!port_lock_held) @@ -7713,7 +7713,7 @@ index f793624fd..2559c9781 100644 return -EAGAIN; } -@@ -1442,14 +1442,14 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1443,14 +1443,14 @@ static void sci_dma_tx_work_fn(struct work_struct *work) * transmit till the end, and then the rest. Take the port lock to get a * consistent xmit buffer state. */ @@ -7730,7 +7730,7 @@ index f793624fd..2559c9781 100644 return; } -@@ -1457,7 +1457,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1458,7 +1458,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work) DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!desc) { @@ -7739,7 +7739,7 @@ index f793624fd..2559c9781 100644 dev_warn(port->dev, "Failed preparing Tx DMA descriptor\n"); goto switch_to_pio; } -@@ -1469,12 +1469,12 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1470,12 +1470,12 @@ static void sci_dma_tx_work_fn(struct work_struct *work) desc->callback_param = s; s->cookie_tx = dmaengine_submit(desc); if (dma_submit_error(s->cookie_tx)) { @@ -7754,7 +7754,7 @@ index f793624fd..2559c9781 100644 dev_dbg(port->dev, "%s: %p: %d...%d, cookie %d\n", __func__, xmit->buf, tail, head, s->cookie_tx); -@@ -1482,10 +1482,10 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1483,10 +1483,10 @@ static void sci_dma_tx_work_fn(struct work_struct *work) return; switch_to_pio: @@ -7767,7 +7767,7 @@ index f793624fd..2559c9781 100644 return; } -@@ -1502,17 +1502,17 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1503,17 +1503,17 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) dev_dbg(port->dev, "DMA Rx timed out\n"); @@ -7788,7 +7788,7 @@ index f793624fd..2559c9781 100644 dev_dbg(port->dev, "Cookie %d #%d has already completed\n", s->active_rx, active); -@@ -1530,7 +1530,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1531,7 +1531,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) */ status = dmaengine_tx_status(s->chan_rx, s->active_rx, &state); if (status == DMA_COMPLETE) { @@ -7797,7 +7797,7 @@ index f793624fd..2559c9781 100644 dev_dbg(port->dev, "Transaction complete after DMA engine was stopped"); return HRTIMER_NORESTART; } -@@ -1551,7 +1551,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1552,7 +1552,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) sci_dma_rx_reenable_irq(s); @@ -7806,7 +7806,7 @@ index f793624fd..2559c9781 100644 return HRTIMER_NORESTART; } -@@ -1775,9 +1775,9 @@ static irqreturn_t sci_tx_interrupt(int irq, void *ptr) +@@ -1776,9 +1776,9 @@ static irqreturn_t sci_tx_interrupt(int irq, void *ptr) struct uart_port *port = ptr; unsigned long flags; @@ -7818,7 +7818,7 @@ index f793624fd..2559c9781 100644 return IRQ_HANDLED; } -@@ -1791,11 +1791,11 @@ static irqreturn_t sci_tx_end_interrupt(int irq, void *ptr) +@@ -1792,11 +1792,11 @@ static irqreturn_t sci_tx_end_interrupt(int irq, void *ptr) if (port->type != PORT_SCI) return sci_tx_interrupt(irq, ptr); @@ -7832,7 +7832,7 @@ index f793624fd..2559c9781 100644 return IRQ_HANDLED; } -@@ -2192,7 +2192,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) +@@ -2193,7 +2193,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) return; } @@ -7841,7 +7841,7 @@ index f793624fd..2559c9781 100644 scsptr = serial_port_in(port, SCSPTR); scscr = serial_port_in(port, SCSCR); -@@ -2206,7 +2206,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) +@@ -2207,7 +2207,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) serial_port_out(port, SCSPTR, scsptr); serial_port_out(port, SCSCR, scscr); @@ -7850,7 +7850,7 @@ index f793624fd..2559c9781 100644 } static int sci_startup(struct uart_port *port) -@@ -2238,7 +2238,7 @@ static void sci_shutdown(struct uart_port *port) +@@ -2239,7 +2239,7 @@ static void sci_shutdown(struct uart_port *port) s->autorts = false; mctrl_gpio_disable_ms(to_sci_port(port)->gpios); @@ -7859,7 +7859,7 @@ index f793624fd..2559c9781 100644 sci_stop_rx(port); sci_stop_tx(port); /* -@@ -2248,7 +2248,7 @@ static void sci_shutdown(struct uart_port *port) +@@ -2249,7 +2249,7 @@ static void sci_shutdown(struct uart_port *port) scr = serial_port_in(port, SCSCR); serial_port_out(port, SCSCR, scr & (SCSCR_CKE1 | SCSCR_CKE0 | s->hscif_tot)); @@ -7868,7 +7868,7 @@ index f793624fd..2559c9781 100644 #ifdef CONFIG_SERIAL_SH_SCI_DMA if (s->chan_rx_saved) { -@@ -2550,7 +2550,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2551,7 +2551,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, serial_port_out(port, SCCKS, sccks); } @@ -7877,7 +7877,7 @@ index f793624fd..2559c9781 100644 sci_reset(port); -@@ -2672,7 +2672,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2673,7 +2673,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, if ((termios->c_cflag & CREAD) != 0) sci_start_rx(port); @@ -7886,7 +7886,7 @@ index f793624fd..2559c9781 100644 sci_port_disable(s); -@@ -3057,9 +3057,9 @@ static void serial_console_write(struct console *co, const char *s, +@@ -3058,9 +3058,9 @@ static void serial_console_write(struct console *co, const char *s, if (port->sysrq) locked = 0; else if (oops_in_progress) @@ -7898,7 +7898,7 @@ index f793624fd..2559c9781 100644 /* first save SCSCR then disable interrupts, keep clock source */ ctrl = serial_port_in(port, SCSCR); -@@ -3079,7 +3079,7 @@ static void serial_console_write(struct console *co, const char *s, +@@ -3080,7 +3080,7 @@ static void serial_console_write(struct console *co, const char *s, serial_port_out(port, SCSCR, ctrl); if (locked) @@ -9210,7 +9210,7 @@ index c5d5c2765..78a1c1eea 100644 static const char *vt8500_type(struct uart_port *port) diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c -index 2e5e86a00..9c13dac1d 100644 +index 7f83d2780..d1dcf1ac1 100644 --- 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, void *dev_id) @@ -9222,16 +9222,17 @@ index 2e5e86a00..9c13dac1d 100644 /* 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, void *dev_id) +@@ -369,7 +369,8 @@ static irqreturn_t cdns_uart_isr(int irq, void *dev_id) !(readl(port->membase + CDNS_UART_CR) & CDNS_UART_CR_RX_DIS)) cdns_uart_handle_rx(dev_id, isrstatus); -- spin_unlock(&port->lock); +- uart_unlock_and_check_sysrq(port); ++ //uart_unlock_and_check_sysrq(port); + uart_port_unlock(port); return IRQ_HANDLED; } -@@ -506,14 +506,14 @@ static int cdns_uart_clk_notifier_cb(struct notifier_block *nb, +@@ -506,14 +507,14 @@ static int cdns_uart_clk_notifier_cb(struct notifier_block *nb, return NOTIFY_BAD; } @@ -9248,7 +9249,7 @@ index 2e5e86a00..9c13dac1d 100644 return NOTIFY_OK; } -@@ -523,7 +523,7 @@ static int cdns_uart_clk_notifier_cb(struct notifier_block *nb, +@@ -523,7 +524,7 @@ static int cdns_uart_clk_notifier_cb(struct notifier_block *nb, * frequency. */ @@ -9257,7 +9258,7 @@ index 2e5e86a00..9c13dac1d 100644 locked = 1; port->uartclk = ndata->new_rate; -@@ -533,7 +533,7 @@ static int cdns_uart_clk_notifier_cb(struct notifier_block *nb, +@@ -533,7 +534,7 @@ static int cdns_uart_clk_notifier_cb(struct notifier_block *nb, fallthrough; case ABORT_RATE_CHANGE: if (!locked) @@ -9266,7 +9267,7 @@ index 2e5e86a00..9c13dac1d 100644 /* Set TX/RX Reset */ ctrl_reg = readl(port->membase + CDNS_UART_CR); -@@ -555,7 +555,7 @@ static int cdns_uart_clk_notifier_cb(struct notifier_block *nb, +@@ -555,7 +556,7 @@ static int cdns_uart_clk_notifier_cb(struct notifier_block *nb, ctrl_reg |= CDNS_UART_CR_TX_EN | CDNS_UART_CR_RX_EN; writel(ctrl_reg, port->membase + CDNS_UART_CR); @@ -9275,7 +9276,7 @@ index 2e5e86a00..9c13dac1d 100644 return NOTIFY_OK; default: -@@ -652,7 +652,7 @@ static void cdns_uart_break_ctl(struct uart_port *port, int ctl) +@@ -652,7 +653,7 @@ static void cdns_uart_break_ctl(struct uart_port *port, int ctl) unsigned int status; unsigned long flags; @@ -9284,7 +9285,7 @@ index 2e5e86a00..9c13dac1d 100644 status = readl(port->membase + CDNS_UART_CR); -@@ -664,7 +664,7 @@ static void cdns_uart_break_ctl(struct uart_port *port, int ctl) +@@ -664,7 +665,7 @@ static void cdns_uart_break_ctl(struct uart_port *port, int ctl) writel(CDNS_UART_CR_STOPBRK | status, port->membase + CDNS_UART_CR); } @@ -9293,7 +9294,7 @@ index 2e5e86a00..9c13dac1d 100644 } /** -@@ -683,7 +683,7 @@ static void cdns_uart_set_termios(struct uart_port *port, +@@ -683,7 +684,7 @@ static void cdns_uart_set_termios(struct uart_port *port, unsigned long flags; unsigned int ctrl_reg, mode_reg; @@ -9302,7 +9303,7 @@ index 2e5e86a00..9c13dac1d 100644 /* 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 uart_port *port, +@@ -794,7 +795,7 @@ static void cdns_uart_set_termios(struct uart_port *port, cval &= ~CDNS_UART_MODEMCR_FCM; writel(cval, port->membase + CDNS_UART_MODEMCR); @@ -9311,7 +9312,7 @@ index 2e5e86a00..9c13dac1d 100644 } /** -@@ -813,7 +813,7 @@ static int cdns_uart_startup(struct uart_port *port) +@@ -813,7 +814,7 @@ static int cdns_uart_startup(struct uart_port *port) is_brk_support = cdns_uart->quirks & CDNS_UART_RXBS_SUPPORT; @@ -9320,7 +9321,7 @@ index 2e5e86a00..9c13dac1d 100644 /* 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_port *port) +@@ -861,7 +862,7 @@ static int cdns_uart_startup(struct uart_port *port) writel(readl(port->membase + CDNS_UART_ISR), port->membase + CDNS_UART_ISR); @@ -9329,7 +9330,7 @@ index 2e5e86a00..9c13dac1d 100644 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 uart_port *port) +@@ -889,7 +890,7 @@ static void cdns_uart_shutdown(struct uart_port *port) int status; unsigned long flags; @@ -9338,7 +9339,7 @@ index 2e5e86a00..9c13dac1d 100644 /* Disable interrupts */ status = readl(port->membase + CDNS_UART_IMR); -@@ -900,7 +900,7 @@ static void cdns_uart_shutdown(struct uart_port *port) +@@ -900,7 +901,7 @@ static void cdns_uart_shutdown(struct uart_port *port) writel(CDNS_UART_CR_TX_DIS | CDNS_UART_CR_RX_DIS, port->membase + CDNS_UART_CR); @@ -9347,7 +9348,7 @@ index 2e5e86a00..9c13dac1d 100644 free_irq(port->irq, port); } -@@ -1050,7 +1050,7 @@ static int cdns_uart_poll_get_char(struct uart_port *port) +@@ -1050,7 +1051,7 @@ static int cdns_uart_poll_get_char(struct uart_port *port) int c; unsigned long flags; @@ -9356,7 +9357,7 @@ index 2e5e86a00..9c13dac1d 100644 /* 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(struct uart_port *port) +@@ -1058,7 +1059,7 @@ static int cdns_uart_poll_get_char(struct uart_port *port) else /* Read a character */ c = (unsigned char) readl(port->membase + CDNS_UART_FIFO); @@ -9365,7 +9366,7 @@ index 2e5e86a00..9c13dac1d 100644 return c; } -@@ -1067,7 +1067,7 @@ static void cdns_uart_poll_put_char(struct uart_port *port, unsigned char c) +@@ -1067,7 +1068,7 @@ static void cdns_uart_poll_put_char(struct uart_port *port, unsigned char c) { unsigned long flags; @@ -9374,7 +9375,7 @@ index 2e5e86a00..9c13dac1d 100644 /* 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(struct uart_port *port, unsigned char c) +@@ -1080,7 +1081,7 @@ static void cdns_uart_poll_put_char(struct uart_port *port, unsigned char c) while (!(readl(port->membase + CDNS_UART_SR) & CDNS_UART_SR_TXEMPTY)) cpu_relax(); @@ -9383,19 +9384,16 @@ index 2e5e86a00..9c13dac1d 100644 } #endif -@@ -1232,9 +1232,9 @@ static void cdns_uart_console_write(struct console *co, const char *s, - if (port->sysrq) - locked = 0; - else if (oops_in_progress) -- locked = spin_trylock_irqsave(&port->lock, flags); -+ locked = uart_port_trylock_irqsave(port, &flags); +@@ -1232,7 +1233,7 @@ static void cdns_uart_console_write(struct console *co, const char *s, + if (oops_in_progress) + 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(struct console *co, const char *s, +@@ -1255,7 +1256,7 @@ static void cdns_uart_console_write(struct console *co, const char *s, writel(imr, port->membase + CDNS_UART_IER); if (locked) @@ -9404,7 +9402,7 @@ index 2e5e86a00..9c13dac1d 100644 } /** -@@ -1325,7 +1325,7 @@ static int cdns_uart_suspend(struct device *device) +@@ -1323,7 +1324,7 @@ static int cdns_uart_suspend(struct device *device) if (console_suspend_enabled && uart_console(port) && may_wake) { unsigned long flags; @@ -9413,7 +9411,7 @@ index 2e5e86a00..9c13dac1d 100644 /* 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 device *device) +@@ -1332,7 +1333,7 @@ static int cdns_uart_suspend(struct device *device) writel(1, port->membase + CDNS_UART_RXWM); /* disable RX timeout interrups */ writel(CDNS_UART_IXR_TOUT, port->membase + CDNS_UART_IDR); @@ -9422,7 +9420,7 @@ index 2e5e86a00..9c13dac1d 100644 } /* -@@ -1372,7 +1372,7 @@ static int cdns_uart_resume(struct device *device) +@@ -1370,7 +1371,7 @@ static int cdns_uart_resume(struct device *device) return ret; } @@ -9431,7 +9429,7 @@ index 2e5e86a00..9c13dac1d 100644 /* Set TX/RX Reset */ ctrl_reg = readl(port->membase + CDNS_UART_CR); -@@ -1392,14 +1392,14 @@ static int cdns_uart_resume(struct device *device) +@@ -1390,14 +1391,14 @@ static int cdns_uart_resume(struct device *device) clk_disable(cdns_uart->uartclk); clk_disable(cdns_uart->pclk); @@ -9788,10 +9786,10 @@ index 9aac2ab15..6b9c8a16e 100644 static inline struct task_struct *this_cpu_ksoftirqd(void) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h -index 044527ef5..25b806cab 100644 +index a8f0fba3e..7e9443764 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -3300,7 +3300,11 @@ struct softnet_data { +@@ -3308,7 +3308,11 @@ struct softnet_data { int defer_count; int defer_ipi_scheduled; struct sk_buff *defer_list; @@ -12672,7 +12670,7 @@ index 000000000..b53d93585 +} +device_initcall(printk_init_ops); diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c -index 8b04d0932..a760c46d3 100644 +index 4386683f9..be1c6cb3a 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -102,12 +102,6 @@ DEFINE_STATIC_SRCU(console_srcu); @@ -14509,10 +14507,10 @@ index 11a1fac3a..6f085a159 100644 static void print_cpu_stall(unsigned long gps) diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index 6a01cd02b..8a0947884 100644 +index 7dc4ceebd..75951b77c 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -901,14 +901,15 @@ static inline void hrtick_rq_init(struct rq *rq) +@@ -903,14 +903,15 @@ static inline void hrtick_rq_init(struct rq *rq) #if defined(CONFIG_SMP) && defined(TIF_POLLING_NRFLAG) /* @@ -14531,7 +14529,7 @@ index 6a01cd02b..8a0947884 100644 } /* -@@ -925,7 +926,7 @@ static bool set_nr_if_polling(struct task_struct *p) +@@ -927,7 +928,7 @@ static bool set_nr_if_polling(struct task_struct *p) for (;;) { if (!(val & _TIF_POLLING_NRFLAG)) return false; @@ -14540,7 +14538,7 @@ index 6a01cd02b..8a0947884 100644 return true; if (try_cmpxchg(&ti->flags, &val, val | _TIF_NEED_RESCHED)) break; -@@ -934,9 +935,9 @@ static bool set_nr_if_polling(struct task_struct *p) +@@ -936,9 +937,9 @@ static bool set_nr_if_polling(struct task_struct *p) } #else @@ -14552,7 +14550,7 @@ index 6a01cd02b..8a0947884 100644 return true; } -@@ -1041,28 +1042,47 @@ void wake_up_q(struct wake_q_head *head) +@@ -1043,28 +1044,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. */ @@ -14608,7 +14606,7 @@ index 6a01cd02b..8a0947884 100644 } void resched_cpu(int cpu) -@@ -1135,7 +1155,7 @@ static void wake_up_idle_cpu(int cpu) +@@ -1137,7 +1157,7 @@ static void wake_up_idle_cpu(int cpu) if (cpu == smp_processor_id()) return; @@ -14617,7 +14615,7 @@ index 6a01cd02b..8a0947884 100644 smp_send_reschedule(cpu); else trace_sched_wake_idle_without_ipi(cpu); -@@ -6776,10 +6796,14 @@ void __noreturn do_task_dead(void) +@@ -6778,10 +6798,14 @@ void __noreturn do_task_dead(void) static inline void sched_submit_work(struct task_struct *tsk) { @@ -14634,7 +14632,7 @@ index 6a01cd02b..8a0947884 100644 task_flags = tsk->flags; /* -@@ -6805,6 +6829,8 @@ static inline void sched_submit_work(struct task_struct *tsk) +@@ -6807,6 +6831,8 @@ static inline void sched_submit_work(struct task_struct *tsk) * make sure to submit it to avoid deadlocks. */ blk_flush_plug(tsk->plug, true); @@ -14643,7 +14641,7 @@ index 6a01cd02b..8a0947884 100644 } static void sched_update_worker(struct task_struct *tsk) -@@ -6819,16 +6845,26 @@ static void sched_update_worker(struct task_struct *tsk) +@@ -6821,16 +6847,26 @@ static void sched_update_worker(struct task_struct *tsk) } } @@ -14675,7 +14673,7 @@ index 6a01cd02b..8a0947884 100644 sched_update_worker(tsk); } EXPORT_SYMBOL(schedule); -@@ -6892,11 +6928,7 @@ void __sched schedule_preempt_disabled(void) +@@ -6894,11 +6930,7 @@ void __sched schedule_preempt_disabled(void) #ifdef CONFIG_PREEMPT_RT void __sched notrace schedule_rtlock(void) { @@ -14688,7 +14686,7 @@ index 6a01cd02b..8a0947884 100644 } NOKPROBE_SYMBOL(schedule_rtlock); #endif -@@ -7092,6 +7124,32 @@ static void __setscheduler_prio(struct task_struct *p, int prio) +@@ -7094,6 +7126,32 @@ static void __setscheduler_prio(struct task_struct *p, int prio) #ifdef CONFIG_RT_MUTEXES @@ -14721,7 +14719,7 @@ index 6a01cd02b..8a0947884 100644 static inline int __rt_effective_prio(struct task_struct *pi_task, int prio) { if (pi_task) -@@ -8954,6 +9012,21 @@ static inline void preempt_dynamic_init(void) { } +@@ -8956,6 +9014,21 @@ static inline void preempt_dynamic_init(void) { } #endif /* #ifdef CONFIG_PREEMPT_DYNAMIC */ @@ -15174,10 +15172,10 @@ index f8cf88cc4..13f919072 100644 } early_initcall(spawn_ksoftirqd); diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c -index e99b1305e..c4ce69da0 100644 +index 359ffa38a..bcddc8c44 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c -@@ -1812,7 +1812,7 @@ void hrtimer_interrupt(struct clock_event_device *dev) +@@ -1873,7 +1873,7 @@ void hrtimer_interrupt(struct clock_event_device *dev) if (!ktime_before(now, cpu_base->softirq_expires_next)) { cpu_base->softirq_expires_next = KTIME_MAX; cpu_base->softirq_activated = 1; @@ -15186,7 +15184,7 @@ index e99b1305e..c4ce69da0 100644 } __hrtimer_run_queues(cpu_base, now, flags, HRTIMER_ACTIVE_HARD); -@@ -1925,7 +1925,7 @@ void hrtimer_run_queues(void) +@@ -1986,7 +1986,7 @@ void hrtimer_run_queues(void) if (!ktime_before(now, cpu_base->softirq_expires_next)) { cpu_base->softirq_expires_next = KTIME_MAX; cpu_base->softirq_activated = 1; @@ -15289,10 +15287,10 @@ index 2b948d35f..959f09ab8 100644 need_resched = 'p'; break; diff --git a/net/core/dev.c b/net/core/dev.c -index 115de6fee..2bf5b6889 100644 +index 00a8200d7..87b77b0ff 100644 --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -4725,15 +4725,6 @@ static void rps_trigger_softirq(void *data) +@@ -4756,15 +4756,6 @@ static void rps_trigger_softirq(void *data) #endif /* CONFIG_RPS */ @@ -15308,7 +15306,7 @@ index 115de6fee..2bf5b6889 100644 /* * After we queued a packet into sd->input_pkt_queue, * we need to make sure this queue is serviced soon. -@@ -6713,6 +6704,32 @@ static void skb_defer_free_flush(struct softnet_data *sd) +@@ -6744,6 +6735,32 @@ static void skb_defer_free_flush(struct softnet_data *sd) } } @@ -15341,7 +15339,7 @@ index 115de6fee..2bf5b6889 100644 static int napi_threaded_poll(void *data) { struct napi_struct *napi = data; -@@ -11654,7 +11671,11 @@ static int __init net_dev_init(void) +@@ -11685,7 +11702,11 @@ static int __init net_dev_init(void) INIT_CSD(&sd->csd, rps_trigger_softirq, sd); sd->cpu = i; #endif @@ -15354,7 +15352,7 @@ index 115de6fee..2bf5b6889 100644 init_gro_hash(&sd->backlog); diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index a9efd6fb2..ce127b20d 100644 +index 514c2e002..9ac003233 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -6865,8 +6865,13 @@ nodefer: __kfree_skb(skb); @@ -15373,5 +15371,5 @@ index a9efd6fb2..ce127b20d 100644 static void skb_splice_csum_page(struct sk_buff *skb, struct page *page, -- -2.41.0 +2.25.1 diff --git a/raspberrypi-kernel-rt.spec b/raspberrypi-kernel-rt.spec index e39f1b380eb1d5d7189ff5861f50d5891f4a9cae..3f22ffd39404d547edd8564ca82f8a2ec154c375 100644 --- a/raspberrypi-kernel-rt.spec +++ b/raspberrypi-kernel-rt.spec @@ -2,13 +2,13 @@ %global KernelVer %{version}-%{release}.raspi.%{_target_cpu} -%global hulkrelease 84.0.0 +%global hulkrelease 88.0.0 %global debug_package %{nil} Name: raspberrypi-kernel-rt Version: 6.6.0 -Release: %{hulkrelease}.rt47.4 +Release: %{hulkrelease}.rt47.5 Summary: Linux Kernel License: GPLv2 URL: http://www.kernel.org/ @@ -265,6 +265,9 @@ fi %changelog +* Fri Apr 25 2025 zhangyu - 6.6.0.88.0.5 +- - update Rpi:preempt-RT to openEuler 6.6.0.88.5.0 + * Wed Apr 16 2025 zhangyu - 6.6.0.84.0.4 - - update Rpi:preempt-RT to openEuler 6.6.0.84.4.0