Thread (27 messages) 27 messages, 4 authors, 2019-08-15

Re: poor cyclictest results with 5.0 series rt for arm64

From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: 2019-08-15 14:19:27
Subsystem: arm64 port (aarch64 architecture), the rest · Maintainers: Catalin Marinas, Will Deacon, Linus Torvalds

On 2019-08-15 09:52:56 [-0400], Paul Thomas wrote:
quoted
quoted
Emergency messages are not involved here. You can see at 84239098us that
Right, we don't have that. Let me boot my arm64, print something and
check how it goes…
Thanks! Nothing too crazy is happening with printk in my setup. Mostly
I just see systemd messages like this:
[55458.630872] systemd-journald[1072]: Sent WATCHDOG=1 notification.
[55578.632076] systemd-journald[1072]: Sent WATCHDOG=1 notification.
so that explains it. Here, I have

|           printk-106   [001] ....111   610.156787: pl011_read <-pl011_console_putchar
|           printk-106   [001] d..h211   610.156788: irq_find_mapping <-__handle_domain_irq
…
|           printk-106   [001] dN.h211   610.156812: preempt_count_sub <-irq_exit
|           printk-106   [001] .N..111   610.156813: pl011_read <-pl011_console_putchar
|       cyclictest-802   [001] d...3..   610.156815: finish_task_switch <-__schedule

so it seems to works but I *think* that at 610.156813 shouldn't be there
and it should switch to cyclictest. But if it is the broken irq-exit
path then this should fix it:
diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
index 63c6960262861..27a16c2711981 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -649,13 +649,7 @@ alternative_if ARM64_HAS_IRQ_PRIO_MASKING
 alternative_else_nop_endif
 
 	cbz	x24, 1f					// (need_resched + count) == 0
-	cbnz	w24, 2f					// count != 0
-
-	ldr	w24, [tsk, #TSK_TI_PREEMPT_LAZY]	// get preempt lazy count
-	cbnz	w24, 2f					// preempt lazy count != 0
-
-	ldr	x0, [tsk, #TSK_TI_FLAGS]		// get flags
-	tbz	x0, #TIF_NEED_RESCHED_LAZY, 2f		// needs rescheduling?
+	b	2f					// count != 0
 1:
 	bl	preempt_schedule_irq		// irq en/disable is done inside
 2:
-Paul
Sebastian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help