[U-Boot] Crash in U-Boot

Alexander Graf agraf at csgraf.de
Sun Jun 23 21:47:28 UTC 2019



> Am 23.06.2019 um 17:08 schrieb Heinrich Schuchardt <xypron.glpk at gmx.de>:
> 
> Hello Alex,
> 
> on the i.MX6 Wandboard the Kernel crashes when booting via GRUB at least
> since U-Boot v2019.01. See below.
> 
> In the code for SetVirtualAddressMap I saw the that the pointer to the
> list of configuration tables is adjusted:
> 
>         if ((map_start <= (uintptr_t)systab.tables) &&
>             (map_end >= (uintptr_t)systab.tables)) {
>                 char *ptr = (char *)systab.tables;
>                 ptr += off;
>                 systab.tables = (struct efi_configuration_table *)ptr;
>         }
> 
> Shouldn't the pointers to the individual configuration tables be
> adjusted too? I found no such code.

We have to adapt the systable, because RT code may use it. However, I thought tables are not guaranteed to be around after SVAM? Ard?

I tend to agree that in that case, adjusting the table pointer does not sound very useful either. Can we legally just set the table count to 0 there?

If however they are indeed legal to access via virtual addresses afterwards, I do agree that we should patch the individual table pointers too, yes.


Alex

> 
> Best regards
> 
> Heinrich
> 
> -------- Forwarded Message --------
> Subject: Re: Crash in U-Boot reported by you in IRC
> Date: Sun, 23 Jun 2019 14:44:07 +0200
> From: Heinrich Schuchardt <xypron.glpk at gmx.de>
> To: vagrant at debian.org
> 
> Hello Vagrant,
> 
> I checked if I could reproduce you problem on a Wandboard. But it did
> not show the error you reported. Instead I got a Kernel oops.
> 
> I used a Kernel with
> 
> CONFIG_DEBUG_LL=y
> CONFIG_DEBUG_IMX6Q_UART=y
> CONFIG_DEBUG_IMX_UART_PORT=1
> CONFIG_EARLY_PRINTK=y
> 
> added and earlyprintk on the command line.
> 
> Loading Linux 4.19.34-armmp ...
> Loading initial ramdisk ...
> EFI stub: Booting Linux Kernel...
> EFI stub: Using DTB from configuration table
> EFI stub: Exiting boot services and installing virtual address map...
> [    0.000000] Booting Linux on physical CPU 0x0
> [    0.000000] Linux version 4.19.34-armmp (zfsdt at family) (gcc version
> 8.3.0 (Debian 8.3.0-5)) #1 SMP Sat Apr 13 13:34:54 CES9
> [    0.000000] CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7),
> cr=10c5387d
> [    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing
> instruction cache
> [    0.000000] OF: fdt: Machine model: Wandboard i.MX6 Quad Board rev B1
> [    0.000000] OF: fdt: Ignoring memory range 0x10000000 - 0x41000000
> [    0.000000] bootconsole [earlycon0] enabled
> [    0.000000] Memory policy: Data cache writealloc
> [    0.000000] efi: Getting EFI parameters from FDT:
> [    0.000000] efi: EFI v2.70 by Das U-Boot
> [    0.000000] efi:  SMBIOS=0x8dd81000
> [    0.000000] OF: fdt: Ignoring memory block 0x10000000 - 0x12000000
> [    0.000000] OF: fdt: Ignoring memory block 0x12000000 - 0x1240a000
> [    0.000000] OF: fdt: Ignoring memory block 0x1240a000 - 0x17d00000
> [    0.000000] OF: fdt: Ignoring memory block 0x17d00000 - 0x17f00000
> [    0.000000] OF: fdt: Ignoring memory block 0x17f00000 - 0x17f0c000
> [    0.000000] OF: fdt: Ignoring memory block 0x17f0c000 - 0x2e1f2000
> [    0.000000] OF: fdt: Ignoring memory block 0x2e1f2000 - 0x2ffff000
> [    0.000000] OF: fdt: Ignoring memory range 0x2ffff000 - 0x41000000
> [    0.000000] INITRD: 0x2e1f2000+0x01e0d000 is not a memory region -
> disabling initrd
> [    0.000000] cma: Reserved 16 MiB at 0x8e000000
> [    0.000000] BUG: not creating mapping for 0x41000000 at 0x99000000 in
> user region
> [    0.000000] Unable to handle kernel paging request at virtual address
> 6fd00000
> [    0.000000] pgd = (ptrval)
> [    0.000000] [6fd00000] *pgd=00000000
> [    0.000000] Internal error: Oops: 5 [#1] SMP ARM
> [    0.000000] Modules linked in:
> [    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.19.34-armmp #1
> [    0.000000] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
> [    0.000000] PC is at fdt_check_header+0xc/0x80
> [    0.000000] LR is at __unflatten_device_tree+0x4c/0x274
> [    0.000000] pc : [<c0ae7ee8>]    lr : [<c0967e34>]    psr: 200000d3
> [    0.000000] sp : c1201ec0  ip : c1201ed0  fp : c1201ecc
> [    0.000000] r10: c1316280  r9 : 00000000  r8 : c135e1f8
> [    0.000000] r7 : 00000000  r6 : 6fd00000  r5 : c1074ac0  r4 : c1074ac0
> [    0.000000] r3 : c1074ac0  r2 : c135e1f8  r1 : 00000000  r0 : 6fd00000
> [    0.000000] Flags: nzCv  IRQs off  FIQs off  Mode SVC_32  ISA ARM
> Segment none
> [    0.000000] Control: 10c5387d  Table: 6820404a  DAC: 00000051
> [    0.000000] Process swapper (pid: 0, stack limit = 0x(ptrval))
> [    0.000000] Stack: (0xc1201ec0 to 0xc1202000)
> [    0.000000] 1ec0: c1201efc c1201ed0 c0967e34 c0ae7ee8 c1074ac0
> c1074ac0 c1209900 8fffffff
> [    0.000000] 1ee0: 8f797000 c1349768 e7fffcc0 c1316280 c1201f1c
> c1201f00 c1075de4 c0967df4
> [    0.000000] 1f00: 00000000 c1201f10 c0358188 c1082ddc c1201fa4
> c1201f20 c1004a34 c1075dac
> [    0.000000] 1f20: ffffffff 10c5387d c03bc990 c03bc47c c0d61538
> c0d630cc c1205dcc c1201fbc
> [    0.000000] 1f40: c0e330c8 fffff000 c1201fa4 c1201f58 c10220c8
> c0af6cf0 c1205dcc c1205dcc
> [    0.000000] 1f60: c1205dcc ffffffff c1201f94 c1201f78 c03bcd08
> 00000000 c1201f9c 00000000
> [    0.000000] 1f80: c1205dcc c1205dcc ffffffff c1205dc0 412fc09a
> 10c5387d c1201ff4 c1201fa8
> [    0.000000] 1fa0: c1000c2c c10040f4 00000000 00000000 00000000
> 00000000 00000000 c1091e40
> [    0.000000] 1fc0: 00000000 00000000 00000000 c1000330 00000051
> 10c0387d ffffffff 17d00000
> [    0.000000] 1fe0: 412fc09a 10c5387d 00000000 c1201ff8 00000000
> c1000bbc 00000000 00000000
> [    0.000000] [<c0ae7ee8>] (fdt_check_header) from [<c0967e34>]
> (__unflatten_device_tree+0x4c/0x274)
> [    0.000000] [<c0967e34>] (__unflatten_device_tree) from [<c1075de4>]
> (unflatten_device_tree+0x44/0x54)
> [    0.000000] [<c1075de4>] (unflatten_device_tree) from [<c1004a34>]
> (setup_arch+0x94c/0xd88)
> [    0.000000] [<c1004a34>] (setup_arch) from [<c1000c2c>]
> (start_kernel+0x7c/0x504)
> [    0.000000] [<c1000c2c>] (start_kernel) from [<00000000>] (  (null))
> [    0.000000] Code: e89da800 e1a0c00d e92dd800 e24cb004 (e5903000)
> [    0.000000] random: get_random_bytes called from
> print_oops_end_marker+0x34/0x5c with crng_init=0
> [    0.000000] ---[ end trace 0000000000000000 ]---
> [    0.000000] Kernel panic - not syncing: Attempted to kill the idle task!
> [    0.000000] ---[ end Kernel panic - not syncing: Attempted to kill
> the idle task! ]---
> 



More information about the U-Boot mailing list