Subject: Re: port-sparc64/29473: nfs + bus_dmamap_load_mbuf often results in a hang
To: None <port-sparc64-maintainer@netbsd.org, gnats-admin@netbsd.org,>
From: john heasley <heas@shrubbery.net>
List: netbsd-bugs
Date: 02/23/2005 19:57:01
The following reply was made to PR port-sparc64/29473; it has been noted by GNATS.

From: john heasley <heas@shrubbery.net>
To: Andrey Petrov <petrov@netbsd.org>
Cc: gnats-bugs@netbsd.org, port-sparc64-maintainer@netbsd.org,
	gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: port-sparc64/29473: nfs + bus_dmamap_load_mbuf often results in a hang
Date: Wed, 23 Feb 2005 11:56:30 -0800

 oops, in such a rush today.  I meant to mention that I'll try poking it
 some more next week.  if you can think of anything sepecific that I should
 collect, let me know.
 
 It is rock solid with the gem as long as I do not use NFS.  If I move it
 to an hme, it works fine.
 
 I guess that in the specific case that I reported in the PR it didnt hang
 hard enough to not accept a break, but that has happened before.  here is
 one such trace/case:
 
 hang #1
 ok .trap-registers
 %TL:1 %TT:3 %TPC:11a0e94 %TnPC:11a0e98
 %TSTATE:4482000600  %CWP:0
    %PSTATE:6 AG:0 IE:1 PRIV:1 AM:0 PEF:0 RED:0 MM:0 TLE:0 CLE:0 MG:0 IG:0
    %ASI:82  %CCR:44  XCC:nZvc   ICC:nZvc
   
 %TL:2 %TT:d8 %TPC:10090a8 %TnPC:10090ac
 %TSTATE:82000501  %CWP:1
    %PSTATE:5 AG:1 IE:0 PRIV:1 AM:0 PEF:0 RED:0 MM:0 TLE:0 CLE:0 MG:0 IG:0
    %ASI:82  %CCR:0  XCC:nzvc   ICC:nzvc
   
 %TL:3 %TT:68 %TPC:1005804 %TnPC:1005808
 %TSTATE:11001507  %CWP:7
    %PSTATE:15 AG:1 IE:0 PRIV:1 AM:0 PEF:1 RED:0 MM:0 TLE:0 CLE:0 MG:0 IG:0
    %ASI:11  %CCR:0  XCC:nzvc   ICC:nzvc
   
 %TL:4 %TT:1ff %TPC:fffffffffffffffc %TnPC:fffffffffffffffc
 %TSTATE:4080407  %CWP:7
    %PSTATE:804 AG:0 IE:0 PRIV:1 AM:0 PEF:0 RED:0 MM:0 TLE:0 CLE:0 MG:0 IG:1
    %ASI:4  %CCR:0  XCC:nzvc   ICC:nzvc
   
 %TL:5 %TT:1ff %TPC:fffffffffffffffc %TnPC:fffffffffffffffc
 %TSTATE:5e840b2b01  %CWP:1
    %PSTATE:b2b AG:1 IE:1 PRIV:0 AM:1 PEF:0 RED:1 MM:0 TLE:1 CLE:1 MG:0 IG:1
    %ASI:84  %CCR:5e  XCC:nZvC   ICC:NZVc
   
 ok .registers
         Normal          Alternate       MMU               Vector
 0:                 0                0                0                0
 1:               6d0                1               37          1805408
 2:                 1                0          185ee10              7eb
 3:                 0          e8274a0          ddc2000 ffffffffffffffff
 4:                 0                2 800000007e6c9636                1
 5:          6b09a000         6b09a000             40d8          3f07d80
 6:           11a0f18          11a0f18         7eda7708             1000
 7:  fffffffff00071cc fffffffff00071cc 800000007e6c9636                1
 %PC  11a0e94 %nPC 11a0e98
 %TBA 1000000 %CCR 44 XCC:nZvc   ICC:nZvc
   
 hang #2 (the one in the PR, i think)
 
 login: kdb breakpoint at 11ab560
 Stopped in pid 379.1 (nfsd) at  netbsd:cpu_Debugger+0x4:        nop
 db> bt
 intr_list_handler(3f07cc0, 6, e0017ed0, 8, 119fa54, 0) at netbsd:intr_list_handl
 er+0x10
 sparc_interrupt(7, e802000, f6ff128, 299db17da57a38c7, 4a79ae022228b7bc, f6ff450
 ) at netbsd:sparc_interrupt+0x1d4
 _bus_dmamap_load_mbuf(3f15c00, 444b800, 3ec1500, 401, ffffffffffffffef, f6ff5f0)
  at netbsd:_bus_dmamap_load_mbuf+0xa4
 gem_start(4444060, 16fc, 16f8, d6, f6ff5f0, 44447c0) at netbsd:gem_start+0x84
 ether_output(0, 3ec1d00, 3ee8488, 800, 3ef3428, 40) at netbsd:ether_output+0x358
   
 ip_output(3ef2720, 4444060, 3ee8480, 3ee8488, 0, 3ec1de0) at netbsd:ip_output+0x
 5c8
 udp_output(3ee8480, 3ee8420, c6, 10, 6, 3a) at netbsd:udp_output+0x254
 udp_usrreq(3ee6d80, 9, 3ef4130, 3ef2c20, 0, ddddad0) at netbsd:udp_usrreq+0x1f0
 sosend(0, 0, 0, 3ef4130, 0, 0) at netbsd:sosend+0x3c4
 nfs_send(3ee6d80, 3ef2c20, 3ef4130, 0, ddddad0, 6000) at netbsd:nfs_send+0x9c
 nfssvc_nfsd(0, ddddad0, ddd5800, f6ffbd0, 2, 1839ae0) at netbsd:nfssvc_nfsd+0x64
 c 
 sys_nfssvc(0, f6ffdd0, f6ffdc0, 0, f6ffdd0, 0) at netbsd:sys_nfssvc+0x310
 syscall(f6ffed0, 9b, 405369e0, f6ffdd0, 405369e0, 405369e4) at netbsd:syscall+0x
 d4
 ?(4, 202d78, 18, ffffffffffffcc50, 0, 0) at 0x1008cb8
 
 (gdb) list *(gem_start+0x84)
 0x1063fb0 is in gem_start (../../../../dev/ic/gem.c:1039).
 1034                     * Load the DMA map.  If this fails, the packet either  
 1035                     * didn't fit in the alloted number of segments, or we w
 ere
 1036                     * short on resources.  In this case, we'll copy and try
 1037                     * again.
 1038                     */
 1039                    if (bus_dmamap_load_mbuf(sc->sc_dmatag, dmamap, m0,
 1040                          BUS_DMA_WRITE|BUS_DMA_NOWAIT) != 0) {
 1041                            if (m0->m_pkthdr.len > MCLBYTES) {
 1042                                    printf("%s: unable to allocate jumbo Tx 
 "
 1043                                        "cluster\n", sc->sc_dev.dv_xname);  
 
 (gdb) list *(_bus_dmamap_load_mbuf+0xa4)
 0x11a0f18 is in _bus_dmamap_load_mbuf (../../../../arch/sparc64/sparc64/machdep.
 c:1127).
 1122                            long incr;
 1123
 1124                            incr = PAGE_SIZE - (vaddr & PGOFSET);
 1125                            incr = min(buflen, incr);
 1126
 1127                            if (pmap_extract(pmap_kernel(), vaddr, &pa) == F
 ALSE) {
 1128    #ifdef DIAGNOSTIC
 1129                                    printf("_bus_dmamap_load_mbuf: pmap_extr
 act failed %lx\n",
 1130                                           vaddr);
 1131    #endif