
On Sun, Oct 08, 2017 at 11:12:28PM -0400, Tom Rini wrote:
On Sun, Oct 08, 2017 at 10:56:26PM -0300, Fabio Estevam wrote:
On Sun, Oct 8, 2017 at 11:04 AM, Jonathan Gray jsg@jsg.id.au wrote:
It turns out to be
commit 2460098cffacd18729262e3ed36656e6943783ed Author: Tom Rini trini@konsulko.com Date: Fri Sep 22 07:37:43 2017 -0400
fs/fat: Reduce stack usage We have limited stack in SPL builds. Drop itrblock and move to malloc/free of itr to move this off of the stack. As part of this fix a double-free issue in fat_size(). Signed-off-by: Tom Rini <trini@konsulko.com> --- Rework to use malloc/free as moving this to a global overflows some SH targets.
fs/fat/fat.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
With that reverted I just get the efi loader problem, no alignment errors.
Thanks for doing the bisect.
Tom, can you prepare a fix for this?
No, this is a required fix for other platforms. Why is this failing in the particular case that it's failing in?
Switching the malloc calls for malloc_cache_aligned also avoids the problem.
U-Boot SPL 2017.11-rc1-00026-g14b55fc833 (Oct 05 2017 - 15:17:47) Trying to boot from MMC1
U-Boot 2017.11-rc1-00026-g14b55fc833 (Oct 05 2017 - 15:17:47 +1100)
CPU: Freescale i.MX6Q rev1.5 996 MHz (running at 792 MHz) CPU: Extended Commercial temperature grade (-20C to 105C) at 34C Reset cause: WDOG Board: MX6 Cubox-i DRAM: 2 GiB MMC: FSL_SDHC: 0 *** Warning - bad CRC, using default environment
No panel detected: default to HDMI Display: HDMI (1024x768) In: serial Out: serial Err: serial Net: FEC Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc0 is current device Scanning mmc 0:1... CACHE: Misaligned operation at range [8f89da30, 8f89e230] CACHE: Misaligned operation at range [8f89da30, 8f89e230] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89da30 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89e230 CACHE: Misaligned operation at range [8f89da30, 8f89e230] CACHE: Misaligned operation at range [8f89da30, 8f89e230] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89da30 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89e230 CACHE: Misaligned operation at range [8f89dca0, 8f89e4a0] CACHE: Misaligned operation at range [8f89dca0, 8f89e4a0] CACHE: Misaligned operation at range [8f89dca0, 8f89e4a0] CACHE: Misaligned operation at range [8f89dca0, 8f89e4a0] CACHE: Misaligned operation at range [8f89dc68, 8f89e468] CACHE: Misaligned operation at range [8f89dc68, 8f89e468] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89dc68 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89e468 CACHE: Misaligned operation at range [8f89dc68, 8f89e468] CACHE: Misaligned operation at range [8f89dc68, 8f89e468] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89dc68 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89e468 CACHE: Misaligned operation at range [8f89dab0, 8f89e2b0] CACHE: Misaligned operation at range [8f89dab0, 8f89e2b0] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89dab0 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89e2b0 CACHE: Misaligned operation at range [8f89dab0, 8f89e2b0] CACHE: Misaligned operation at range [8f89dab0, 8f89e2b0] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89dab0 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89e2b0 CACHE: Misaligned operation at range [8f89dca8, 8f89e4a8] CACHE: Misaligned operation at range [8f89dca8, 8f89e4a8] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89dca8 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89e4a8 CACHE: Misaligned operation at range [8f89dca8, 8f89e4a8] CACHE: Misaligned operation at range [8f89dca8, 8f89e4a8] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89dca8 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89e4a8 CACHE: Misaligned operation at range [8f89dc70, 8f89e470] CACHE: Misaligned operation at range [8f89dc70, 8f89e470] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89dc70 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89e470 CACHE: Misaligned operation at range [8f89dc70, 8f89e470] CACHE: Misaligned operation at range [8f89dc70, 8f89e470] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89dc70 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89e470 CACHE: Misaligned operation at range [8f89e488, 8f89ec88] CACHE: Misaligned operation at range [8f89e488, 8f89ec88] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89e488 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89ec88 CACHE: Misaligned operation at range [8f89e488, 8f89ec88] CACHE: Misaligned operation at range [8f89e488, 8f89ec88] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89e488 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89ec88 CACHE: Misaligned operation at range [8f89e470, 8f89ec70] CACHE: Misaligned operation at range [8f89e470, 8f89ec70] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89e470 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89ec70 CACHE: Misaligned operation at range [8f89e470, 8f89ec70] CACHE: Misaligned operation at range [8f89e470, 8f89ec70] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89e470 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89ec70 CACHE: Misaligned operation at range [8f89e488, 8f89ec88] CACHE: Misaligned operation at range [8f89e488, 8f89ec88] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89e488 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89ec88 CACHE: Misaligned operation at range [8f89e488, 8f89ec88] CACHE: Misaligned operation at range [8f89e488, 8f89ec88] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89e488 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89ec88 CACHE: Misaligned operation at range [8f89e438, 8f89ec38] CACHE: Misaligned operation at range [8f89e438, 8f89ec38] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89e438 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89ec38 CACHE: Misaligned operation at range [8f89e438, 8f89ec38] CACHE: Misaligned operation at range [8f89e438, 8f89ec38] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x8f89e438 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x8f89ec38 AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl SATA mode flags: ncq stag pm led clo only pmp pio slum part No port device detected!
Device 0: Model: Firm: Ser#: Type: Hard Disk Capacity: not available ... is now current device ** Bad device size - sata 0 ** starting USB... USB0: Port not available. USB1: USB EHCI 1.00 scanning bus 1 for devices... 1 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found
Device 0: device type unknown ... is now current device ** Bad device usb 0 ** ** Bad device usb 0 **
U-Boot SPL 2017.11-rc1-00111-g3e161bd647-dirty (Oct 09 2017 - 17:03:13) Trying to boot from MMC1
U-Boot 2017.11-rc1-00111-g3e161bd647-dirty (Oct 09 2017 - 17:03:13 +1100)
CPU: Freescale i.MX6Q rev1.5 996 MHz (running at 792 MHz) CPU: Extended Commercial temperature grade (-20C to 105C) at 48C Reset cause: POR Board: MX6 Cubox-i DRAM: 2 GiB MMC: FSL_SDHC: 0 No panel detected: default to HDMI Display: HDMI (1024x768) In: serial Out: serial Err: serial Net: FEC Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc0 is current device Scanning mmc 0:1... reading /imx6q-cubox-i.dtb 37669 bytes read in 20 ms (1.8 MiB/s) Found EFI removable media binary efi/boot/bootarm.efi Scanning disks on usb... Scanning disks on mmc... MMC Device 1 not found MMC Device 2 not found MMC Device 3 not found Scanning disks on sata... Found 6 disks reading efi/boot/bootarm.efi 67372 bytes read in 31 ms (2.1 MiB/s) ## Starting EFI application at 12000000 ...
OpenBSD/armv7 BOOTARM 1.0
boot> booting sd0a:/bsd: 3926840+164812+561396|[283058+90+521360+245040]=0x571a54 Writing to MMC(0)... done
OpenBSD/armv7 booting ... arg0 0xc0871a54 arg1 0x0 arg2 0x18000000 Allocating page tables freestart = 0x10872000, free_pages = 522126 (0x0007f78e) IRQ stack: p0x108a0000 v0xc08a0000 ABT stack: p0x108a1000 v0xc08a1000 UND stack: p0x108a2000 v0xc08a2000 SVC stack: p0x108a3000 v0xc08a3000 Creating L1 page table at 0x10874000 Mapping kernel Constructing L2 page tables undefined page pmap [ using 1050004 bytes of bsd ELF symbol table ] board type: 0 Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. Copyright (c) 1995-2017 OpenBSD. All rights reserved. https://www.OpenBSD.org ...
diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 3d3e17e8fa..d299f317a9 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -1038,7 +1038,7 @@ int fat_exists(const char *filename) fat_itr *itr; int ret;
- itr = malloc(sizeof(fat_itr)); + itr = malloc_cache_aligned(sizeof(fat_itr)); ret = fat_itr_root(itr, &fsdata); if (ret) return 0; @@ -1055,7 +1055,7 @@ int fat_size(const char *filename, loff_t *size) fat_itr *itr; int ret;
- itr = malloc(sizeof(fat_itr)); + itr = malloc_cache_aligned(sizeof(fat_itr)); ret = fat_itr_root(itr, &fsdata); if (ret) return ret; @@ -1089,7 +1089,7 @@ int file_fat_read_at(const char *filename, loff_t pos, void *buffer, fat_itr *itr; int ret;
- itr = malloc(sizeof(fat_itr)); + itr = malloc_cache_aligned(sizeof(fat_itr)); ret = fat_itr_root(itr, &fsdata); if (ret) return ret;