From owner-freebsd-arm@FreeBSD.ORG Sun Sep 30 21:06:31 2012 Return-Path: Delivered-To: arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B8F83106564A for ; Sun, 30 Sep 2012 21:06:31 +0000 (UTC) (envelope-from ray@freebsd.org) Received: from smtp.dlink.ua (smtp.dlink.ua [193.138.187.146]) by mx1.freebsd.org (Postfix) with ESMTP id F0B848FC0C for ; Sun, 30 Sep 2012 21:06:30 +0000 (UTC) Received: from rnote.ddteam.net (99-104-133-95.pool.ukrtel.net [95.133.104.99]) (Authenticated sender: ray) by smtp.dlink.ua (Postfix) with ESMTPSA id 9BBCAC4927; Mon, 1 Oct 2012 00:06:28 +0300 (EEST) Date: Mon, 1 Oct 2012 00:06:19 +0300 From: Aleksandr Rybalko To: Alan Cox Message-Id: <20121001000619.12f2b230.ray@freebsd.org> In-Reply-To: <506882FB.9060507@rice.edu> References: <504BDC56.3060607@rice.edu> <20120910211817.2d8a340d@fubar.geek.nz> <504E1A1B.90101@rice.edu> <20120928160227.99d2b126.ray@dlink.ua> <5066AB0D.6000901@rice.edu> <20120930014939.9d277f0d.ray@freebsd.org> <506882FB.9060507@rice.edu> Organization: FreeBSD.ORG X-Mailer: Sylpheed 3.1.2 (GTK+ 2.24.5; amd64-portbld-freebsd9.0) X-Operating-System: FreeBSD Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: "arm@freebsd.org" Subject: Re: armv6 pmap patch X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 Sep 2012 21:06:31 -0000 On Sun, 30 Sep 2012 12:35:55 -0500 Alan Cox wrote: > On 09/29/2012 17:49, Aleksandr Rybalko wrote: > > On Sat, 29 Sep 2012 03:02:21 -0500 > > Alan Cox wrote: > > > >> On 09/28/2012 08:02, Aleksandr Rybalko wrote: > >>> On Mon, 10 Sep 2012 11:49:31 -0500 > >>> Alan Cox wrote: > >>> > >>>>> On 09/10/2012 04:18, Andrew Turner wrote: > >>>>>> On Sat, 08 Sep 2012 19:01:26 -0500 > >>>>>> Alan Cox 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 :) > >>> > >> *snip* > >> > >> The attached patch should eliminate the panic. Please let me know > >> when you've had a chance to test it. > > I don't know when it done (extracting ports.tar.gz :) ) but it still > > works w/o panic :) > > > > Thanks a lot Alan! > > > > > > Great. I've committed the change. > > Can someone here please test the attached arm v6 pmap patch? I'd > like to verify that my earlier efforts to eliminate the lock order > reversals allows for eliminating all of the unlocking and relocking > in pmap_alloc_l2_bucket(). If there's a problem, it should be > apparent immediately. > > Alan > Hi Alan, Here is result for your attached patch: --------------------------------------------------------- Updating motd: /etc/motd is not writable, update failed. panic: _rw_wlock_hard: recursing but non-recursive rw pmap pv global @ /usr/1/MIPS_FreeBSD/HEAD/head/sys/arm/arm/pmap-v6.c:2497 KDB: enter: panic [ thread pid 430 tid 100048 ] Stopped at kdb_enter+0x48: ldrb r15, [r15, r15, ror r15]! db> bt Tracing pid 430 tid 100048 td 0xc10a9900 db_trace_self() at db_trace_self+0xc scp=0xc03348e4 rlv=0xc0334930 (db_trace_thread+0x38) rsp=0xc79746c0 rfp=0xc79746cc db_trace_thread() at db_trace_thread+0xc scp=0xc0334904 rlv=0xc01293b8 (db_command_init+0x648) rsp=0xc79746d0 rfp=0xc79746ec db_command_init() at db_command_init+0x570 scp=0xc01292e0 rlv=0xc0128a60 (db_skip_to_eol+0x4a0) rsp=0xc79746f0 rfp=0xc7974794 r5=0x00000000 r4=0xc03e101c db_skip_to_eol() at db_skip_to_eol+0x1d4 scp=0xc0128794 rlv=0xc0128bcc (db_command_loop+0x60) rsp=0xc7974798 rfp=0xc79747a4 r10=0x600001d3 r8=0x00000001 r7=0x00000000 r6=0x00000000 r5=0xc03e12e4 r4=0xc79747b0 db_command_loop() at db_command_loop+0xc scp=0xc0128b78 rlv=0xc012b06c (X_db_sym_numargs+0xf4) rsp=0xc79747a8 rfp=0xc79748c4 X_db_sym_numargs() at X_db_sym_numargs+0x14 scp=0xc012af8c rlv=0xc0207288 (kdb_trap+0xa4) rsp=0xc79748c8 rfp=0xc79748ec r4=0xc7974970 kdb_trap() at kdb_trap+0xc scp=0xc02071f0 rlv=0xc034376c (undefinedinstruction+0x2d0) rsp=0xc79748f0 rfp=0xc797496c r10=0xe7ffffff r8=0xe7ffffff r7=0xc7974970 r6=0x00000000 r5=0x00000000 r4=0x00000000 undefinedinstruction() at undefinedinstruction+0xc scp=0xc03434a8 rlv=0xc03360e8 (address_exception_entry+0x50) rsp=0xc7974970 rfp=0xc79749cc r10=0x00000007 r9=0x00000061 r8=0xc05eed80 r7=0xc10a9900 r6=0xc037bda4 r5=0xc040cd94 r4=0xc037c5c0 kdb_enter() at kdb_enter+0xc scp=0xc0206d6c rlv=0xc01d4614 (panic+0xe8) rsp=0xc79749d0 rfp=0xc79749e4 r4=0x00000100 panic() at panic+0x10 scp=0xc01d453c rlv=0xc01d2de0 (_rw_wlock_hard+0x84) rsp=0xc79749f8 rfp=0xc7974a1c _rw_wlock_hard() at _rw_wlock_hard+0xc scp=0xc01d2d68 rlv=0xc01d2fe4 (_rw_wlock+0xcc) rsp=0xc7974a20 rfp=0xc7974a3c r8=0xc05eed80 r7=0xc1131000 r6=0x00000000 r5=0xc03a0a04 r4=0x000009c1 _rw_wlock() at _rw_wlock+0xc scp=0xc01d2f24 rlv=0xc033df14 (pmap_enter+0x38) rsp=0xc7974a40 rfp=0xc7974a6c r6=0xc0429d40 r5=0xc0428b70 r4=0xc03a0a04 pmap_enter() at pmap_enter+0xc scp=0xc033dee8 rlv=0xc0315600 (kmem_back+0x334) rsp=0xc7974a70 rfp=0xc7974ac4 r10=0x00000101 r8=0x00001000 r7=0xc051d08c r6=0x00000000 r5=0x00000000 r4=0xc05eed80 kmem_back() at kmem_back+0xc scp=0xc03152d8 rlv=0xc0315d78 (kmem_malloc+0x244) rsp=0xc7974ac8 rfp=0xc7974b00 r10=0xc051d08c r9=0x00001000 r8=0x00000101 r7=0xc051f680 r6=0x00001000 r5=0xc039bce0 r4=0xc7974ad4 kmem_malloc() at kmem_malloc+0xc scp=0xc0315b40 rlv=0xc030cd88 (uma_print_zone+0x260) rsp=0xc7974b04 rfp=0xc7974b10 r10=0xc7974b4b r9=0xc051e780 r8=0x00000101 r7=0xc051f680 r6=0x00001000 r5=0x00000001 r4=0xc051e780 uma_print_zone() at uma_print_zone+0x248 scp=0xc030cd70 rlv=0xc030d044 (uma_print_zone+0x51c) rsp=0xc7974b14 rfp=0xc7974b38 uma_print_zone() at uma_print_zone+0x3bc scp=0xc030cee4 rlv=0xc030eacc (uma_zcreate+0x134) rsp=0xc7974b3c rfp=0xc7974b74 r10=0xc030ced8 r8=0x00000101 r7=0x00000000 r6=0x00000101 r5=0xc051f680 r4=0xc039aeb8 uma_zcreate() at uma_zcreate+0x74 scp=0xc030ea0c rlv=0xc030f0b4 (uma_prealloc+0x2b0) rsp=0xc7974b78 rfp=0xc7974b98 r10=0x00000016 r9=0x00000101 r8=0xc051e780 r7=0xc051e780 r6=0x00000101 r5=0xc051f680 r4=0xc051f680 uma_prealloc() at uma_prealloc+0x120 rsp=0xc7974b9c rfp=0xc7974bb4 r7=0xc0500f94 r6=0xc051e780 r5=0x00000101 r4=0xc051f680 scp=0xc030f190 rlv=0xc0310900 (uma_zalloc_arg+0x540) r6=0xc0514348 r5=0x00000013 r4=0x00000012 uma_zalloc_arg() at uma_zalloc_arg+0xc scp=0xc03103cc rlv=0xc033d598 (pmap_growkernel+0x8e8) r10=0xc0f25594 r9=0xc0592840 r8=0xc0f25614 r7=0x00000201 r6=0x00000000 r5=0x00000005 r4=0xc03a0a04 pmap_growkernel() at pmap_growkernel+0x3fc scp=0xc033d0ac rlv=0xc033df4c (pmap_enter+0x70) rsp=0xc7974c58 rfp=0xc7974c84 r10=0x00000005 r9=0x00000000 r8=0xc0592840 r7=0x20132000 r6=0xc0429d40 r5=0xc0f25594 pmap_enter() at pmap_enter+0xc scp=0xc033dee8 rlv=0xc03131fc (vm_fault_hold+0x1638) rsp=0xc7974c88 rfp=0xc7974df8 r10=0xc100c5c0 r8=0x00000000 r7=0x00000005 r6=0xc0505940 r5=0xc0f254e4 r4=0x00000000 vm_fault_hold() at vm_fault_hold+0xc scp=0xc0311bd0 rlv=0xc0313804 (vm_fault+0x8c) rsp=0xc7974dfc rfp=0xc7974e20 r10=0xc100c5c0 r9=0xc0f254e4 r8=0x00000000 r7=0x00000005 r6=0x20132000 r5=0xc0f254e4 r4=0xc10a9900 vm_fault() at vm_fault+0xc scp=0xc0313784 rlv=0xc0342320 (prefetch_abort_handler+0x17c) rsp=0xc7974e24 rfp=0xc7974ea8 r8=0xc7974eac r7=0xc10a9900 r6=0x20132000 r5=0xc03a10ec r4=0xc100c648 prefetch_abort_handler() at prefetch_abort_handler+0xc scp=0xc03421b0 rlv=0xc03360e8 (address_exception_entry+0x50) rsp=0xc7974eac rfp=0xbfffd8fc r10=0x20283020 r9=0x202ded21 r8=0x202deb70 r7=0x00000003 r6=0x00000000 r5=0x20283020 r4=0x202deb70 panic: _rw_wlock_hard: recursing but non-recursive rw pmap pv global @ /usr/1/MIPS_FreeBSD/HEAD/head/sys/arm/arm/pmap-v6.c:1163 --------------------------------------------------------- When print backtrace device going into reboot just after last line :) Thanks Alan! WBW -- Aleksandr Rybalko