Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Sep 2012 12:06:14 -0500
From:      Alan Cox <alc@rice.edu>
To:        Aleksandr Rybalko <ray@dlink.ua>
Cc:        "arm@freebsd.org" <arm@freebsd.org>, Alan Cox <alc@rice.edu>
Subject:   Re: armv6 pmap patch
Message-ID:  <5065D906.1040602@rice.edu>
In-Reply-To: <20120928160227.99d2b126.ray@dlink.ua>
References:  <504BDC56.3060607@rice.edu> <20120910211817.2d8a340d@fubar.geek.nz> <504E1A1B.90101@rice.edu> <20120928160227.99d2b126.ray@dlink.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On 09/28/2012 08:02, Aleksandr Rybalko wrote:
> On Mon, 10 Sep 2012 11:49:31 -0500
> Alan Cox<alc@rice.edu>  wrote:
>
>>> On 09/10/2012 04:18, Andrew Turner wrote:
>>>> On Sat, 08 Sep 2012 19:01:26 -0500
>>>> Alan Cox<alc@rice.edu>   wrote:
>>>>
>>>>> Can someone here please test this patch to the new armv6 pmap?  It
>>>>> eliminates the use of the page queues lock and updates some
>>>>> comments. Similar changes were recently made to the original arm
>>>>> pmap.
>>>>>
>>>>> Thanks,
>>>>> Alan
>>>>>
>>>> I have booted FreeBSD with the patch on a Pandaboard and it
>>>> appears to work. Are there any tests you would like me to run?
>>>>
>>> Nothing in particular, since almost anything that you do on the
>>> machine will exercise the changed code.
>>>
>>> There appears to be a lot of unnecessary dropping and reacquiring of
>>> locks around UMA calls in both pmap.c and pmap-v6.c.  I will try to
>>> generate a patch to eliminate this later in the week.
>>>
>>> Alan
>>>
> Hi Alan and ARM hackers,
>
> Don't know exact, but think it is related to current pmap work.
> So here is two panics observed on R-Pi recently (HEAD @r240985), both
> on attempt to untar ports.tar.gz :)

Yes, the problem is clear from the stack trace.  I should have time to 
prepare a patch later today.

Alan

> panic: _rw_wlock_hard: recursing but non-recursive rw pmap pv global
> @ /usr/1/MIPS_FreeBSD/HEAD/head/sys/arm/arm/pmap-v6.c:837
>
> KDB: enter: panic
> [ thread pid 4 tid 100027 ]
> Stopped at      kdb_enter+0x48: ldrb    r15, [r15, r15, ror r15]!
> db>
> db>  bt
> Tracing pid 4 tid 100027 td 0xc0f60c00
> db_trace_self() at db_trace_self+0xc
> scp=0xc03347c4 rlv=0xc0334810 (db_trace_thread+0x38)
>          rsp=0xc74de9f8 rfp=0xc74dea04
> db_trace_thread() at db_trace_thread+0xc
> scp=0xc03347e4 rlv=0xc01293b8 (db_command_init+0x648)
>          rsp=0xc74dea08 rfp=0xc74dea24
> db_command_init() at db_command_init+0x570
> scp=0xc01292e0 rlv=0xc0128a60 (db_skip_to_eol+0x4a0)
>          rsp=0xc74dea28 rfp=0xc74deacc
>          r5=0x00000000 r4=0xc03e105c
> db_skip_to_eol() at db_skip_to_eol+0x1d4
> scp=0xc0128794 rlv=0xc0128bcc (db_command_loop+0x60)
>          rsp=0xc74dead0 rfp=0xc74deadc
>          r10=0x600000d3 r8=0x00000001
>          r7=0x00000000 r6=0x00000000 r5=0xc03e1324 r4=0xc74deae8
> db_command_loop() at db_command_loop+0xc
> scp=0xc0128b78 rlv=0xc012b06c (X_db_sym_numargs+0xf4)
>          rsp=0xc74deae0 rfp=0xc74debfc
> X_db_sym_numargs() at X_db_sym_numargs+0x14
> scp=0xc012af8c rlv=0xc0207168 (kdb_trap+0xa4)
>          rsp=0xc74dec00 rfp=0xc74dec24
>          r4=0xc74deca8
> kdb_trap() at kdb_trap+0xc
> scp=0xc02070d0 rlv=0xc03437ec (undefinedinstruction+0x2d0)
>          rsp=0xc74dec28 rfp=0xc74deca4
>          r10=0xe7ffffff r8=0xe7ffffff
>          r7=0xc74deca8 r6=0x00000000 r5=0x00000000 r4=0x00000000
> undefinedinstruction() at undefinedinstruction+0xc
> scp=0xc0343528 rlv=0xc0335fc8 (address_exception_entry+0x50)
>          rsp=0xc74deca8 rfp=0xc74ded04
>          r10=0x00000356 r9=0xc0617a08
>          r8=0x000050db r7=0xc0f60c00 r6=0xc037bdf4 r5=0xc040cdd4
>          r4=0xc037c610
> kdb_enter() at kdb_enter+0xc
> scp=0xc0206c4c rlv=0xc01d44f4 (panic+0xe8)
>          rsp=0xc74ded08 rfp=0xc74ded1c
>          r4=0x00000100
> panic() at panic+0x10
> scp=0xc01d441c rlv=0xc01d2cc0 (_rw_wlock_hard+0x84)
>          rsp=0xc74ded30 rfp=0xc74ded54
> _rw_wlock_hard() at _rw_wlock_hard+0xc
> scp=0xc01d2c48 rlv=0xc01d2ec4 (_rw_wlock+0xcc)
>          rsp=0xc74ded58 rfp=0xc74ded74
>          r8=0x000050db r7=0x00000008
>          r6=0x00000000 r5=0xc03a0a54 r4=0x00000345
> _rw_wlock() at _rw_wlock+0xc
> scp=0xc01d2e04 rlv=0xc033be9c (pmap_fault_fixup+0x324)
>          rsp=0xc74ded78 rfp=0xc74deda4
>          r6=0xc0617a08 r5=0x00000000
>          r4=0xc0617a08
> pmap_fault_fixup() at pmap_fault_fixup+0x308
> scp=0xc033be80 rlv=0xc033c0e4 (pmap_remove_write+0x60)
>          rsp=0xc74deda8 rfp=0xc74dedb8
>          r10=0x00000356 r9=0xc0505c24
>          r8=0x000050db r7=0xc0617a08 r6=0xc0617a08 r5=0x00000000
>          r4=0xc0617a08
> pmap_remove_write() at pmap_remove_write+0xc
> scp=0xc033c090 rlv=0xc033c23c (pmap_remove_all+0x4c)
>          rsp=0xc74dedbc rfp=0xc74dede0
>          r4=0xc039e270
> pmap_remove_all() at pmap_remove_all+0xc
> scp=0xc033c1fc rlv=0xc03291c8 (vm_pageout_grow_cache+0x19c8)
>          rsp=0xc74dede4 rfp=0xc74dee84
>          r10=0x00000356 r8=0x000050db
>          r7=0xc0617a08 r6=0x00000000 r5=0x00000000 r4=0xc039e270
> vm_pageout_grow_cache() at vm_pageout_grow_cache+0xde0
> scp=0xc03285e0 rlv=0xc01ab8d4 (fork_exit+0x94)
>          rsp=0xc74dee88 rfp=0xc74deea8
>          r10=0x00000000 r9=0x00001770
>          r8=0xc74deeac r7=0x00000000 r6=0xc03285d4 r5=0xc0ff6000
>          r4=0xc0f60c00
> fork_exit() at fork_exit+0xc
> scp=0xc01ab84c rlv=0xc0341cc4 (fork_trampoline+0x14)
>          rsp=0xc74deeac rfp=0x00000000
>          r8=0x00000104 r7=0xecefbfda
>          r6=0xa7efeeb3 r5=0x00000000 r4=0xc03285d4
> db>
>
> ----------------------------------------------------------------------------
>
> panic: _rw_wlock_hard: recursing but non-recursive rw pmap pv global
> @ /usr/1/MIPS_FreeBSD/HEAD/head/sys/arm/arm/pmap-v6.c:837
>
> KDB: enter: panic
> [ thread pid 4 tid 100027 ]
> Stopped at      kdb_enter+0x48: ldrb    r15, [r15, r15, ror r15]!
> db>  bt
> Tracing pid 4 tid 100027 td 0xc0f60c00
> db_trace_self() at db_trace_self+0xc
> scp=0xc03347c4 rlv=0xc0334810 (db_trace_thread+0x38)
>          rsp=0xc74de9f8 rfp=0xc74dea04
> db_trace_thread() at db_trace_thread+0xc
> scp=0xc03347e4 rlv=0xc01293b8 (db_command_init+0x648)
>          rsp=0xc74dea08 rfp=0xc74dea24
> db_command_init() at db_command_init+0x570
> scp=0xc01292e0 rlv=0xc0128a60 (db_skip_to_eol+0x4a0)
>          rsp=0xc74dea28 rfp=0xc74deacc
>          r5=0x00000000 r4=0xc03e105c
> db_skip_to_eol() at db_skip_to_eol+0x1d4
> scp=0xc0128794 rlv=0xc0128bcc (db_command_loop+0x60)
>          rsp=0xc74dead0 rfp=0xc74deadc
>          r10=0x600000d3 r8=0x00000001
>          r7=0x00000000 r6=0x00000000 r5=0xc03e1324 r4=0xc74deae8
> db_command_loop() at db_command_loop+0xc
> scp=0xc0128b78 rlv=0xc012b06c (X_db_sym_numargs+0xf4)
>          rsp=0xc74deae0 rfp=0xc74debfc
> X_db_sym_numargs() at X_db_sym_numargs+0x14
> scp=0xc012af8c rlv=0xc0207168 (kdb_trap+0xa4)
>          rsp=0xc74dec00 rfp=0xc74dec24
>          r4=0xc74deca8
> kdb_trap() at kdb_trap+0xc
> scp=0xc02070d0 rlv=0xc03437ec (undefinedinstruction+0x2d0)
>          rsp=0xc74dec28 rfp=0xc74deca4
>          r10=0xe7ffffff r8=0xe7ffffff
>          r7=0xc74deca8 r6=0x00000000 r5=0x00000000 r4=0x00000000
> undefinedinstruction() at undefinedinstruction+0xc
> scp=0xc0343528 rlv=0xc0335fc8 (address_exception_entry+0x50)
>          rsp=0xc74deca8 rfp=0xc74ded04
>          r10=0x000003ba r9=0xc0638bf4
>          r8=0x00004fe5 r7=0xc0f60c00 r6=0xc037bdf4 r5=0xc040cdd4
>          r4=0xc037c610
> kdb_enter() at kdb_enter+0xc
> scp=0xc0206c4c rlv=0xc01d44f4 (panic+0xe8)
>          rsp=0xc74ded08 rfp=0xc74ded1c
>          r4=0x00000100
> panic() at panic+0x10
> scp=0xc01d441c rlv=0xc01d2cc0 (_rw_wlock_hard+0x84)
>          rsp=0xc74ded30 rfp=0xc74ded54
> _rw_wlock_hard() at _rw_wlock_hard+0xc
> scp=0xc01d2c48 rlv=0xc01d2ec4 (_rw_wlock+0xcc)
>          rsp=0xc74ded58 rfp=0xc74ded74
>          r8=0x00004fe5 r7=0x00000008
>          r6=0x00000000 r5=0xc03a0a54 r4=0x00000345
> _rw_wlock() at _rw_wlock+0xc
> scp=0xc01d2e04 rlv=0xc033be9c (pmap_fault_fixup+0x324)
>          rsp=0xc74ded78 rfp=0xc74deda4
>          r6=0xc0638bf4 r5=0x00000000
>          r4=0xc0638bf4
> pmap_fault_fixup() at pmap_fault_fixup+0x308
> scp=0xc033be80 rlv=0xc033c0e4 (pmap_remove_write+0x60)
>          rsp=0xc74deda8 rfp=0xc74dedb8
>          r10=0x000003ba r9=0xc11b1000
>          r8=0x00004fe5 r7=0xc0638bf4 r6=0xc0638bf4 r5=0x00000000
>          r4=0xc0638bf4
> pmap_remove_write() at pmap_remove_write+0xc
> scp=0xc033c090 rlv=0xc033c23c (pmap_remove_all+0x4c)
>          rsp=0xc74dedbc rfp=0xc74dede0
>          r4=0xc039e270
> pmap_remove_all() at pmap_remove_all+0xc
> scp=0xc033c1fc rlv=0xc03291c8 (vm_pageout_grow_cache+0x19c8)
>          rsp=0xc74dede4 rfp=0xc74dee84
>          r10=0x000003ba r8=0x00004fe5
>          r7=0xc0638bf4 r6=0x00000000 r5=0x00000000 r4=0xc039e270
> vm_pageout_grow_cache() at vm_pageout_grow_cache+0xde0
> scp=0xc03285e0 rlv=0xc01ab8d4 (fork_exit+0x94)
>          rsp=0xc74dee88 rfp=0xc74deea8
>          r10=0x00000000 r9=0x00001770
>          r8=0xc74deeac r7=0x00000000 r6=0xc03285d4 r5=0xc0ff6000
>          r4=0xc0f60c00
> fork_exit() at fork_exit+0xc
> scp=0xc01ab84c rlv=0xc0341cc4 (fork_trampoline+0x14)
>          rsp=0xc74deeac rfp=0x00000000
>          r8=0x00000104 r7=0xc0341cc4
>          r6=0xc74deeac r5=0x00000000 r4=0xc03285d4
> db>
> ----------------------------------------------------------------------------
>
> Thanks!
>
> WBW




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5065D906.1040602>