Remove newline in OpenSBI trap debug line
This commit is contained in:
parent
c6e2db8c2d
commit
7d9f375e4a
107
JOURNAL.md
107
JOURNAL.md
@ -1851,7 +1851,7 @@ may cause more problems down the line.
|
|||||||
No ethernet found.
|
No ethernet found.
|
||||||
No ethernet found.
|
No ethernet found.
|
||||||
|
|
||||||
However, now I cannot boot the kernel, as it is overwritting the FDT:
|
However, now I cannot boot the kernel, as it is overwriting the FDT:
|
||||||
|
|
||||||
=> printenv fdtcontroladdr
|
=> printenv fdtcontroladdr
|
||||||
fdtcontroladdr=82200000
|
fdtcontroladdr=82200000
|
||||||
@ -2097,6 +2097,8 @@ affecting.
|
|||||||
Disabling the clint doesn't seem to cause any effect. In fact, the kernel is
|
Disabling the clint doesn't seem to cause any effect. In fact, the kernel is
|
||||||
still able to get a clock as shown in the kernel messages.
|
still able to get a clock as shown in the kernel messages.
|
||||||
|
|
||||||
|
### OBSERVATION: The kernel hangs after the unaligned check begins
|
||||||
|
|
||||||
I enabled the ftrace for initcall and I can see that is getting stuck in the
|
I enabled the ftrace for initcall and I can see that is getting stuck in the
|
||||||
unaligned check:
|
unaligned check:
|
||||||
|
|
||||||
@ -2220,3 +2222,106 @@ Memory regions:
|
|||||||
|
|
||||||
0x8400_0000 to 0x84.._.... M: (R,W) S/U: () Linux kernel
|
0x8400_0000 to 0x84.._.... M: (R,W) S/U: () Linux kernel
|
||||||
|
|
||||||
|
Okay, so we enter the unaligned access check:
|
||||||
|
|
||||||
|
![ 2.947680] initcall_start: func=check_unaligned_access_all_cpus+0x0/0x1d4
|
||||||
|
$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
...
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned load$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
!OpenSBI: misaligned store$
|
||||||
|
|
||||||
|
But we never arrive to anywhere else.
|
||||||
|
|
||||||
|
Here are the current options that match ALIGN:
|
||||||
|
|
||||||
|
hut% grep ALIGN /nix/store/c9jr35xnh2ffzjvkq8nvzj9i2siz1n4s-linux-config-riscv64-unknown-linux-gnu-6.9.7
|
||||||
|
CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW=y
|
||||||
|
CONFIG_RISCV_MISALIGNED=y
|
||||||
|
CONFIG_RISCV_PROBE_UNALIGNED_ACCESS=y
|
||||||
|
# CONFIG_RISCV_EMULATED_UNALIGNED_ACCESS is not set
|
||||||
|
# CONFIG_RISCV_SLOW_UNALIGNED_ACCESS is not set
|
||||||
|
# CONFIG_RISCV_EFFICIENT_UNALIGNED_ACCESS is not set
|
||||||
|
CONFIG_HAVE_64BIT_ALIGNED_ACCESS=y
|
||||||
|
CONFIG_FUNCTION_ALIGNMENT=0
|
||||||
|
CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y
|
||||||
|
CONFIG_CMA_ALIGNMENT=8
|
||||||
|
# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set
|
||||||
|
|
||||||
|
We may want to set these two:
|
||||||
|
|
||||||
|
# CONFIG_RISCV_EMULATED_UNALIGNED_ACCESS is not set
|
||||||
|
# CONFIG_RISCV_SLOW_UNALIGNED_ACCESS is not set
|
||||||
|
|
||||||
|
And disable
|
||||||
|
|
||||||
|
CONFIG_RISCV_PROBE_UNALIGNED_ACCESS=y
|
||||||
|
|
||||||
|
So we don't perform the probing. However, this may bite later, so probably is a
|
||||||
|
better idea to debug it now. I could bound where it is failing as it doesn't
|
||||||
|
seem to be outside the speed check function.
|
||||||
|
|
||||||
|
|
||||||
|
Those 8 pairs of load and store calls seem to match this assembly function in
|
||||||
|
arch/riscv/kernel/copy-unaligned.S:
|
||||||
|
|
||||||
|
/* void __riscv_copy_bytes_unaligned(void *, const void *, size_t) */
|
||||||
|
/* Performs a memcpy without aligning buffers, using only byte accesses. */
|
||||||
|
/* Note: The size is truncated to a multiple of 8 */
|
||||||
|
SYM_FUNC_START(__riscv_copy_bytes_unaligned)
|
||||||
|
andi a4, a2, ~(8-1)
|
||||||
|
beqz a4, 2f
|
||||||
|
add a3, a1, a4
|
||||||
|
1:
|
||||||
|
lb a4, 0(a1)
|
||||||
|
lb a5, 1(a1)
|
||||||
|
lb a6, 2(a1)
|
||||||
|
lb a7, 3(a1)
|
||||||
|
lb t0, 4(a1)
|
||||||
|
lb t1, 5(a1)
|
||||||
|
lb t2, 6(a1)
|
||||||
|
lb t3, 7(a1)
|
||||||
|
sb a4, 0(a0)
|
||||||
|
sb a5, 1(a0)
|
||||||
|
sb a6, 2(a0)
|
||||||
|
sb a7, 3(a0)
|
||||||
|
sb t0, 4(a0)
|
||||||
|
sb t1, 5(a0)
|
||||||
|
sb t2, 6(a0)
|
||||||
|
sb t3, 7(a0)
|
||||||
|
addi a0, a0, 8
|
||||||
|
addi a1, a1, 8
|
||||||
|
bltu a1, a3, 1b
|
||||||
|
|
||||||
|
2:
|
||||||
|
ret
|
||||||
|
SYM_FUNC_END(__riscv_copy_bytes_unaligned)
|
||||||
|
@ -34,7 +34,7 @@ index 7b618de..65e42b0 100644
|
|||||||
|
|
||||||
void sbi_timer_exit(struct sbi_scratch *scratch)
|
void sbi_timer_exit(struct sbi_scratch *scratch)
|
||||||
diff --git a/lib/sbi/sbi_trap.c b/lib/sbi/sbi_trap.c
|
diff --git a/lib/sbi/sbi_trap.c b/lib/sbi/sbi_trap.c
|
||||||
index b4f3a17..b60315f 100644
|
index b4f3a17..742eea6 100644
|
||||||
--- a/lib/sbi/sbi_trap.c
|
--- a/lib/sbi/sbi_trap.c
|
||||||
+++ b/lib/sbi/sbi_trap.c
|
+++ b/lib/sbi/sbi_trap.c
|
||||||
@@ -283,6 +283,7 @@ static int sbi_trap_aia_irq(void)
|
@@ -283,6 +283,7 @@ static int sbi_trap_aia_irq(void)
|
||||||
@ -77,7 +77,7 @@ index b4f3a17..b60315f 100644
|
|||||||
if (rc)
|
if (rc)
|
||||||
sbi_trap_error(msg, rc, tcntx);
|
sbi_trap_error(msg, rc, tcntx);
|
||||||
+ else
|
+ else
|
||||||
+ sbi_printf("$\n");
|
+ sbi_printf("$");
|
||||||
|
|
||||||
if (((regs->mstatus & MSTATUS_MPP) >> MSTATUS_MPP_SHIFT) != PRV_M)
|
if (((regs->mstatus & MSTATUS_MPP) >> MSTATUS_MPP_SHIFT) != PRV_M)
|
||||||
sbi_sse_process_pending_events(regs);
|
sbi_sse_process_pending_events(regs);
|
||||||
|
Loading…
Reference in New Issue
Block a user