Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Oct 2015 07:34:56 +0200
From:      Mattia Rossi <mattia.rossi.mate@gmail.com>
To:        Jason Harmening <jason.harmening@gmail.com>, ARM <freebsd-arm@freebsd.org>
Subject:   Re: testing of busdma updates for armv5
Message-ID:  <561F3B00.80404@gmail.com>
In-Reply-To: <CAM=8qaki5FVKTE=oq7AEBNczTF0Wp8yx73BKVGaymTP8j=ORQw@mail.gmail.com>
References:  <561AA64C.5010001@gmail.com> <561B679D.8020501@gmail.com> <CAM=8qa=fHXjX7qGeCSc=M2d7jPLb7D5hfR01mV7X5rgOSbOh2g@mail.gmail.com> <561CEBE4.7060304@gmail.com> <561CEE85.1000301@gmail.com> <561E1312.1030908@gmail.com> <CAM=8qaki5FVKTE=oq7AEBNczTF0Wp8yx73BKVGaymTP8j=ORQw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Jason,

sorry, I don't think your patch has anything to do with it. Since I 
updated the source tree from scratch after the previous patch mess, I 
must have deleted some patch that I had applied and was using for hte 
last year or so, because currently I simply can't get the system to boot 
anymore. Something to do with mounting my ufs root fs...

Fatal kernel mode data abort: 'Alignment Fault 1'
trapframe: 0xd733a720
FSR=00000001, FAR=0000012b, spsr=60000013
r0 =00000000, r1 =000081a4, r2 =00000127, r3 =00000000
r4 =00000000, r5 =000081a4, r6 =00000100, r7 =00000000
r8 =00004080, r9 =00000001, r10=00000000, r11=d733a7d0
r12=d733a824, ssp=d733a7b0, slr=c0d46d60, pc =c0b70768

[ thread pid 36 tid 100050 ]
Stopped at      vaccess+0x54:   ldr     r0, [r2, #0x004]
db> bt
Tracing pid 36 tid 100050 td 0xc3c8f350
db_trace_self() at db_trace_self
          pc = 0xc0d85054  lr = 0xc094836c (db_hex2dec+0x1dc)
          sp = 0xd733a420  fp = 0xd733a438
db_hex2dec() at db_hex2dec+0x1dc
          pc = 0xc094836c  lr = 0xc0947fc4 (db_command_loop+0x2dc)
          sp = 0xd733a440  fp = 0xd733a4e0
          r4 = 0x00000001  r5 = 0x00000000
          r6 = 0xc0f3776f r10 = 0xc0ec8f38
db_command_loop() at db_command_loop+0x2dc
          pc = 0xc0947fc4  lr = 0xc0947d34 (db_command_loop+0x4c)
          sp = 0xd733a4e8  fp = 0xd733a4f8
          r4 = 0xc0ddc953  r5 = 0xc0dfad18
          r6 = 0xc0f37758  r7 = 0xc0ec924c
          r8 = 0xc0f2b420  r9 = 0xc0f2b424
         r10 = 0x00000013
db_command_loop() at db_command_loop+0x4c
          pc = 0xc0947d34  lr = 0xc094a948 (db_fetch_ksymtab+0x298)
          sp = 0xd733a500  fp = 0xd733a618
          r4 = 0x00000000  r5 = 0xc0f37764
          r6 = 0xc0f2b440 r10 = 0x00000013
db_fetch_ksymtab() at db_fetch_ksymtab+0x298
          pc = 0xc094a948  lr = 0xc0b05dd8 (kdb_trap+0xc0)
          sp = 0xd733a620  fp = 0xd733a640
          r4 = 0x00000000  r5 = 0x00000001
          r6 = 0xc0f2b440  r7 = 0xc0ec924c
kdb_trap() at kdb_trap+0xc0
          pc = 0xc0b05dd8  lr = 0xc0d96d34 (abort_handler+0x79c)
          sp = 0xd733a648  fp = 0xd733a660
          r4 = 0xd733a720  r5 = 0x00000001
          r6 = 0x600000d3  r7 = 0x0000012b
          r8 = 0x0000012b  r9 = 0x00000001
         r10 = 0x00000013
abort_handler() at abort_handler+0x79c
          pc = 0xc0d96d34  lr = 0xc0d96edc (badaddr_read+0x140)
          sp = 0xd733a668  fp = 0xd733a678
          r4 = 0xd733a720  r5 = 0xc3c8f350
          r6 = 0xc0d96e6c  r7 = 0x00000000
badaddr_read() at badaddr_read+0x140
          pc = 0xc0d96edc  lr = 0xc0d968a4 (abort_handler+0x30c)
          sp = 0xd733a680  fp = 0xd733a718
          r4 = 0xd733a720  r5 = 0xc3c8f350
abort_handler() at abort_handler+0x30c
          pc = 0xc0d968a4  lr = 0xc0d86694 (exception_exit)
          sp = 0xd733a720  fp = 0xd733a7d0
          r4 = 0xffffffff  r5 = 0xffff1004
          r6 = 0x00000100  r7 = 0x00000000
          r8 = 0x00004080  r9 = 0x00000001
         r10 = 0x00000000
exception_exit() at exception_exit
          pc = 0xc0d86694  lr = 0xc0d46d60 (ufs_vinit+0x490)
          sp = 0xd733a7b0  fp = 0xd733a7d0
          r0 = 0x00000000  r1 = 0x000081a4
          r2 = 0x00000127  r3 = 0x00000000
          r4 = 0x00000000  r5 = 0x000081a4
          r6 = 0x00000100  r7 = 0x00000000
          r8 = 0x00004080  r9 = 0x00000001
         r10 = 0x00000000 r12 = 0xd733a824
vaccess() at vaccess+0x58
          pc = 0xc0b7076c  lr = 0xc0d46d60 (ufs_vinit+0x490)
          sp = 0xd733a7d8  fp = 0xd733a7f8
          r4 = 0x00000000  r5 = 0x00000100
          r6 = 0x00000127  r7 = 0xc3c8f350
          r8 = 0x00000127  r9 = 0x00000000
         r10 = 0x00000100
ufs_vinit() at ufs_vinit+0x490
          pc = 0xc0d46d60  lr = 0xc0db2124 (VOP_ACCESSX_APV+0xd4)
          sp = 0xd733a800  fp = 0xd733a810
          r4 = 0xd733a81c  r5 = 0xc0f07360
          r6 = 0x00000000 r10 = 0x00000100
VOP_ACCESSX_APV() at VOP_ACCESSX_APV+0xd4
          pc = 0xc0db2124  lr = 0xc0b5e130 (vop_stdaccess+0x4c)
          sp = 0xd733a818  fp = 0xd733a838
          r4 = 0xc0f0a9e4  r5 = 0xc0ef32ac
          r6 = 0x00000000 r10 = 0x00000100
vop_stdaccess() at vop_stdaccess+0x4c
          pc = 0xc0b5e130  lr = 0xc0db2018 (VOP_ACCESS_APV+0xd4)
          sp = 0xd733a840  fp = 0xd733a850
          r4 = 0xd733a88c r10 = 0x00000100
VOP_ACCESS_APV() at VOP_ACCESS_APV+0xd4
          pc = 0xc0db2018  lr = 0xc0b7c16c (vn_open_vnode+0xf4)
          sp = 0xd733a858  fp = 0xd733a8c0
          r4 = 0xc3db27e0  r5 = 0x00000101
          r6 = 0x00000014 r10 = 0x00000100
vn_open_vnode() at vn_open_vnode+0xf4
          pc = 0xc0b7c16c  lr = 0xc0b7be28 (vn_open_cred+0x2fc)
          sp = 0xd733a8c8  fp = 0xd733a9b8
          r4 = 0xd733a9d8  r5 = 0xc3db27e0
          r6 = 0xd733a9d8  r7 = 0x00000101
          r8 = 0x00000000  r9 = 0x00000000
         r10 = 0x00000000
vn_open_cred() at vn_open_cred+0x2fc
          pc = 0xc0b7be28  lr = 0xc3dea978 (kobj_open_file+0xa0)
          sp = 0xd733a9c0  fp = 0xd733aa98
          r4 = 0xc3fdcd80  r5 = 0x00000000
          r6 = 0xd733a9d8  r7 = 0xc3c8f350
          r8 = 0xc0f09928  r9 = 0xd733abb8
         r10 = 0xc3d11c00
kobj_open_file() at kobj_open_file+0xa0
          pc = 0xc3dea978  lr = 0xc3e7fc78 (spa_config_load+0x3c)
          sp = 0xd733aaa0  fp = 0xd733aac8
          r4 = 0x027b0000  r5 = 0xc3d12400
          r6 = 0xc3f94cb0  r7 = 0x1f7f0000
          r8 = 0x00000003 r10 = 0xc3d11c00
spa_config_load() at spa_config_load+0x3c
          pc = 0xc3e7fc78  lr = 0xc3e86550 (spa_init+0x144)
          sp = 0xd733aad0  fp = 0xd733aae8
          r4 = 0x027b0000  r5 = 0xc3f94cfc
          r6 = 0xc3f94cb0  r7 = 0x1f7f0000
          r8 = 0x00000003  r9 = 0xd733abb8
spa_init() at spa_init+0x144
          pc = 0xc3e86550  lr = 0xc3ed5324 ($a.37+0x78)
          sp = 0xd733aaf0  fp = 0xd733ab20
          r4 = 0xc3fd72d4  r5 = 0xc3fd72f0
          r6 = 0xc3f8d150  r7 = 0xc3f70bce
          r8 = 0xc0f39178 r10 = 0xc3d11c00
$a.37() at $a.37+0x78
          pc = 0xc3ed5324  lr = 0xc0ab8c78 (module_register_init+0xb0)
          sp = 0xd733ab28  fp = 0xd733ab48
          r4 = 0xc0f39150  r5 = 0xc3ceec80
          r6 = 0xc3f8d150  r7 = 0xc3f70bce
          r8 = 0xc0f39178 r10 = 0xc3d11c00
module_register_init() at module_register_init+0xb0
          pc = 0xc0ab8c78  lr = 0xc0aad0dc (linker_reference_module+0xd1c)
          sp = 0xd733ab50  fp = 0xd733ada0
          r4 = 0xc0f39178  r5 = 0xc3f73660
          r6 = 0xc3f8d17c  r7 = 0xc3cd1780
          r8 = 0xc3ceec80  r9 = 0xd733abb8
linker_reference_module() at linker_reference_module+0xd1c
          pc = 0xc0aad0dc  lr = 0xc0aae784 (kern_kldload+0xbc)
          sp = 0xd733ada8  fp = 0xd733adc0
          r4 = 0xd733adcc  r5 = 0xc3d11c00
          r6 = 0xc3d11c00  r7 = 0x00000000
          r8 = 0xd733adf8  r9 = 0xbfbff9ec
         r10 = 0x00000000
kern_kldload() at kern_kldload+0xbc
          pc = 0xc0aae784  lr = 0xc0aae850 (sys_kldload+0x60)
          sp = 0xd733adc8  fp = 0xd733ade0
          r4 = 0xc3c8f350  r5 = 0xc3d11c00
          r6 = 0x00000000  r7 = 0x00000000
sys_kldload() at sys_kldload+0x60
          pc = 0xc0aae850  lr = 0xc0d96278 (swi_handler+0x26c)
          sp = 0xd733ade8  fp = 0xd733ae48
          r4 = 0xc3c8f350  r5 = 0xc3c94700
          r6 = 0x60000013 r10 = 0x00000000
swi_handler() at swi_handler+0x26c
          pc = 0xc0d96278  lr = 0xc0d86624 (swi_exit)
          sp = 0xd733ae50  fp = 0xbfbffe28
          r4 = 0xbfbfff54  r5 = 0x00000000
          r6 = 0x00000000  r7 = 0x00000130
          r8 = 0x00000001  r9 = 0xbfbff9ec
         r10 = 0xbfbff970
swi_exit() at swi_exit
          pc = 0xc0d86624  lr = 0xc0d86624 (swi_exit)
          sp = 0xd733ae50  fp = 0xbfbffe28
db>

On 14/10/15 18:58, Jason Harmening wrote:
> Oops, that's an assertion I put in _bus_dmamap_load_buffer() to 
> prevent data corruption if my assumptions on page layout turned out to 
> be wrong.
> But it looks like that assertion is too aggressive and is catching 
> something that isn't a bug for armv5 (it would be a bug for armv7 though).
>
> Can you try this patch instead?
>
> On Wed, Oct 14, 2015 at 3:32 AM, Mattia Rossi 
> <mattia.rossi.mailinglists@gmail.com 
> <mailto:mattia.rossi.mailinglists@gmail.com>> wrote:
>
>         Hi Mat,
>
>         No worries, it's not that big of a hurry.  In fact, here is an
>         updated
>         patch, which adds a check (ported from x86 busdma) to prevent
>         overflow
>         of the temporary mappings used for bounce buffers.
>
>     Hi Jason,
>
>     the kernel seems not to be too happy about your patch - this
>     happens immediately after trying to mountroot:
>
>     panic: Non-contiguous vm_page_t at addr 0x135c000
>     KDB: enter: panic
>     [ thread pid 13 tid 100029 ]
>     Stopped at      kdb_enter+0x48: ldrb    r15, [r15, r15, ror r15]!
>     db> bt
>     Tracing pid 13 tid 100029 td 0xc397c000
>     db_trace_self() at db_trace_self
>              pc = 0xc0d84a68  lr = 0xc094836c (db_hex2dec+0x1dc)
>              sp = 0xd5f958e8  fp = 0xd5f95900
>     db_hex2dec() at db_hex2dec+0x1dc
>              pc = 0xc094836c  lr = 0xc0947fc4 (db_command_loop+0x2dc)
>              sp = 0xd5f95908  fp = 0xd5f959a8
>              r4 = 0x00000001  r5 = 0x00000000
>              r6 = 0xc0f3326f r10 = 0xc0ec88b8
>     db_command_loop() at db_command_loop+0x2dc
>              pc = 0xc0947fc4  lr = 0xc0947d34 (db_command_loop+0x4c)
>              sp = 0xd5f959b0  fp = 0xd5f959c0
>              r4 = 0xc0ddc3cf  r5 = 0xc0dfa794
>              r6 = 0xc0f33258  r7 = 0xc0ec8bcc
>              r8 = 0xc0f27420  r9 = 0xc0f27424
>             r10 = 0xc0b0568c
>     db_command_loop() at db_command_loop+0x4c
>              pc = 0xc0947d34  lr = 0xc094a948 (db_fetch_ksymtab+0x298)
>              sp = 0xd5f959c8  fp = 0xd5f95ae0
>              r4 = 0x00000000  r5 = 0xc0f33264
>              r6 = 0xc0f27440 r10 = 0xc0b0568c
>     db_fetch_ksymtab() at db_fetch_ksymtab+0x298
>              pc = 0xc094a948  lr = 0xc0b05dd8 (kdb_trap+0xc0)
>              sp = 0xd5f95ae8  fp = 0xd5f95b08
>              r4 = 0x00000000  r5 = 0x00000001
>              r6 = 0xc0f27440  r7 = 0xc0ec8bcc
>     kdb_trap() at kdb_trap+0xc0
>              pc = 0xc0b05dd8  lr = 0xc0d971c4 (undefinedinstruction+0x2f8)
>              sp = 0xd5f95b10  fp = 0xd5f95b80
>              r4 = 0x00000000  r5 = 0x00000000
>              r6 = 0xc0d96e1c  r7 = 0xe7ffffff
>              r8 = 0xc397c000  r9 = 0xd5f95b88
>             r10 = 0xc0b0568c
>     undefinedinstruction() at undefinedinstruction+0x2f8
>              pc = 0xc0d971c4  lr = 0xc0d860a8 (exception_exit)
>              sp = 0xd5f95b88  fp = 0xd5f95c20
>              r4 = 0xffffffff  r5 = 0xffff1004
>              r6 = 0xc0e30bd3  r7 = 0xc0f34d78
>              r8 = 0xc0f19548  r9 = 0xc397c000
>             r10 = 0x0135c000
>     exception_exit() at exception_exit
>              pc = 0xc0d860a8  lr = 0xc0b05680 (kdb_enter+0x3c)
>              sp = 0xd5f95c18  fp = 0xd5f95c20
>              r0 = 0xc0f27434  r1 = 0x00000000
>              r2 = 0xc0dfe674  r3 = 0xc0dfe2cd
>              r4 = 0xc0dfa6f1  r5 = 0xd5f95c64
>              r6 = 0xc0e30bd3  r7 = 0xc0f34d78
>              r8 = 0xc0f19548  r9 = 0xc397c000
>             r10 = 0x0135c000 r12 = 0x00000000
>     kdb_enter() at kdb_enter+0x4c
>              pc = 0xc0b05690  lr = 0xc0acf358 (vpanic+0xb8)
>              sp = 0xd5f95c28  fp = 0xd5f95c40
>              r4 = 0x00000100 r10 = 0x0135c000
>     vpanic() at vpanic+0xb8
>              pc = 0xc0acf358  lr = 0xc0acf270 (kassert_panic+0x110)
>              sp = 0xd5f95c48  fp = 0xd5f95c5c
>              r4 = 0xc0e30bd3  r5 = 0xd5f95c64
>              r6 = 0xc3cb4000  r7 = 0xd3f1f000
>              r8 = 0xd3f1f000  r9 = 0x00001000
>     kassert_panic() at kassert_panic+0x110
>              pc = 0xc0acf270  lr = 0xc0d82238
>     (_bus_dmamap_load_buffer+0x1bc)
>              sp = 0xd5f95c70  fp = 0xd5f95ca8
>              r4 = 0x00001000  r5 = 0x00001000
>              r6 = 0xc3cb4000 r10 = 0x0135c000
>     _bus_dmamap_load_buffer() at _bus_dmamap_load_buffer+0x1bc
>              pc = 0xc0d82238  lr = 0xc0aff960 (bus_dmamap_load+0x94)
>              sp = 0xd5f95cb0  fp = 0xd5f95cf0
>              r4 = 0x00002000  r5 = 0xd3f1e000
>              r6 = 0xc3cd9460  r7 = 0xc3cbe680
>              r8 = 0xc09af25c  r9 = 0xc3ca2c20
>             r10 = 0x00000000
>     bus_dmamap_load() at bus_dmamap_load+0x94
>              pc = 0xc0aff960  lr = 0xc09af244 (usb_pc_load_mem+0x134)
>              sp = 0xd5f95cf8  fp = 0xd5f95d18
>              r4 = 0x00002000  r5 = 0xc3ca2c20
>              r6 = 0x00000000  r7 = 0x00000000
>              r8 = 0xc3ca1000  r9 = 0xc3ca1440
>             r10 = 0x00000001
>     usb_pc_load_mem() at usb_pc_load_mem+0x134
>              pc = 0xc09af244  lr = 0xc09af70c (usb_bdma_work_loop+0x28c)
>              sp = 0xd5f95d20  fp = 0xd5f95d48
>              r4 = 0xc3ca101c  r5 = 0x00000003
>              r6 = 0xc3ca1cd0  r7 = 0xc3ca10ac
>     usb_bdma_work_loop() at usb_bdma_work_loop+0x28c
>              pc = 0xc09af70c  lr = 0xc09c8548 (usb_command_wrapper+0x104)
>              sp = 0xd5f95d50  fp = 0xd5f95d58
>              r4 = 0xc3ca101c  r5 = 0x00000000
>              r6 = 0x00002000  r7 = 0x00000010
>              r8 = 0xc3721ee0  r9 = 0x00000001
>             r10 = 0x00000000
>     usb_command_wrapper() at usb_command_wrapper+0x104
>              pc = 0xc09c8548  lr = 0xc09c813c (usbd_transfer_submit+0x628)
>              sp = 0xd5f95d60  fp = 0xd5f95d80
>              r4 = 0xc3ca1440  r5 = 0xc3721c78
>     usbd_transfer_submit() at usbd_transfer_submit+0x628
>              pc = 0xc09c813c  lr = 0xc09acc60
>     (usb_proc_explore_unlock+0x2178)
>              sp = 0xd5f95d88  fp = 0xd5f95da8
>              r4 = 0xc3c6e400  r5 = 0xc3ca1440
>              r6 = 0x00002000  r7 = 0x00002000
>              r8 = 0xc3ca1440 r10 = 0x00000000
>     usb_proc_explore_unlock() at usb_proc_explore_unlock+0x2178
>              pc = 0xc09acc60  lr = 0xc09c74d8 (usbd_transfer_setup+0xcb4)
>              sp = 0xd5f95db0  fp = 0xd5f95de8
>              r4 = 0xc3ca1030  r5 = 0xc3ca14f3
>              r6 = 0x00000000  r7 = 0xc3ca1000
>     usbd_transfer_setup() at usbd_transfer_setup+0xcb4
>              pc = 0xc09c74d8  lr = 0xc09c8548 (usb_command_wrapper+0x104)
>              sp = 0xd5f95df0  fp = 0xd5f95df8
>              r4 = 0xc3ca1030  r5 = 0x00000000
>              r6 = 0xc3721d0c  r7 = 0xc3ca1058
>              r8 = 0x00000000  r9 = 0x00000001
>             r10 = 0x00000000
>     usb_command_wrapper() at usb_command_wrapper+0x104
>              pc = 0xc09c8548  lr = 0xc09c76f4 (usbd_transfer_setup+0xed0)
>              sp = 0xd5f95e00  fp = 0xd5f95e08
>              r4 = 0xc0de5e81  r5 = 0xc3ca1000
>     usbd_transfer_setup() at usbd_transfer_setup+0xed0
>              pc = 0xc09c76f4  lr = 0xc09c2e20 (usb_proc_create+0x198)
>              sp = 0xd5f95e10  fp = 0xd5f95e28
>              r4 = 0xc3721cfc  r5 = 0xc3721d04
>     usb_proc_create() at usb_proc_create+0x198
>              pc = 0xc09c2e20  lr = 0xc0aa032c (fork_exit+0x84)
>              sp = 0xd5f95e30  fp = 0xd5f95e48
>              r4 = 0xc397c000  r5 = 0xc36a7000
>              r6 = 0xc09c2d78  r7 = 0xc0f09258
>              r8 = 0xd5f95e50  r9 = 0xc3721cfc
>     fork_exit() at fork_exit+0x84
>              pc = 0xc0aa032c  lr = 0xc0d86038 (swi_exit)
>              sp = 0xd5f95e50  fp = 0x00000000
>              r4 = 0xc09c2d78  r5 = 0xc3721cfc
>              r6 = 0x00000000  r7 = 0x00000000
>              r8 = 0x00000000  r9 = 0x00000000
>     swi_exit() at swi_exit
>              pc = 0xc0d86038  lr = 0xc0d86038 (swi_exit)
>              sp = 0xd5f95e50  fp = 0x00000000
>     db>
>
>
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?561F3B00.80404>