Re: powerpc64/pmap.c trouble report
Eric Grosse <[email protected]> Mon, 10 Jun 2024 11:05:47 -0700
| Newsgroups | gmane.os.openbsd.ppc |
|---|---|
| Message-ID | <CAHfGVNdpwS6bT96q6EVoxbPudCHztfN4s_K5Ut3sRLC5tBi8ZQ@mail.gmail.com> |
Disregard this speculation about a possible 32bit int issue. I've reproduced the panic with a smaller pr_nget. On Thu, Jun 6, 2024 at 11:37=E2=80=AFPM Eric Grosse <[email protected]> wrot= e: > > Is the large (greater than 2^32) value of pr_nget below > exceptional? My crashes only happen for long-running > heavy workloads so a big value seems plausible but > maybe there is some limit I'm supposed to reconfigure > for such workloads? > > panic: pmap_enter: failed to allocate pted > Stopped at panic+0x134: ori r0,r0,0x0 > TID PID UID PRFLAGS PFLAGS CPU COMMAND > > 234577 13111 8889 0x18000001 0 3 go > > 491287 13050 8889 0xa001007 0 2 asm > 331460 14455 8889 0x1a000003 0 5 asm > 66317 80047 8889 0x1a000003 0 1 compile > 331134 57997 8889 0x1a000003 0x4000000 0 go > 240615 91938 8889 0x1a000003 0x4000000 6 go > *247303 89969 8889 0x1a000003 0x4000000 4K go > 28756 33586 0 0x14000 0x200 7 pagedaemon > panic+0x134 > > pmap_enter+0x218 > > uvm_km_kmemalloc_pla+0x1f4 > uvm_uarea_alloc+0x70 > > thread_fork+0xd8 > > sys___tfork+0xc4 > syscall+0x530 > > trap+0x5dc > > trapagain+0x4 > --- syscall (number 8) --- > End of kernel: 0x457c99db0 lr 0x4bddd2604 > > > ddb{4}>show struct pool pmap_pted_pool > > struct pmap_pted_pool at 0x1089a98 (424 bytes) {pr_lock =3D {prl_mtx =3D = {mtx_owner > =3D (void *)0x0, mtx_wantipl =3D 7, mtx_oldipl =3D 0}, prl_rwlock =3D {r= wl_owner =3D 0, r > wl_name =3D (const unsigned char *)0x700000000}}, pr_lock_ops =3D (const = pool_lock_ > > ops *)0xfc4950, pr_poollist =3D {sqe_next =3D (struct pool *)0x10898f0}, = pr_emptypa > ges =3D {tqh_first =3D (struct pool_page_header *)0x0, tqh_last =3D 0x108= 9ab8}, pr_fu > llpages =3D {tqh_first =3D (struct pool_page_header *)0xc00000003e3b2f90,= tqh_last =3D > 0xc00000014b344f90}, pr_partpages =3D {tqh_first =3D (struct pool_page_h= eader *)0x > c000000140250f90, tqh_last =3D 0xc000000146821f90}, pr_curpage =3D (struc= t pool_pag > e_header *)0x0, pr_size =3D 56, pr_minitems =3D 20, pr_minpages =3D 1, pr= _maxpages =3D 8 > , pr_npages =3D 4632, pr_itemsperpage =3D 71, pr_slack =3D 0, pr_nitems = =3D 328872, pr_ > nout =3D 328870, pr_hardlimit =3D 4294967295, pr_serial =3D 14, pr_pgsize= =3D 4096, pr_ > pgmask =3D 18446744073709547520, pr_alloc =3D (struct pool_allocator *)0x= fe9b40, pr > _wchan =3D (const unsigned char *)0xeb08e4, pr_flags =3D 0, pr_ipl =3D 7,= pr_phtree =3D > {rbh_root =3D {rbt_root =3D (struct rb_entry *)0x0}}, pr_cache =3D (stru= ct cpumem *) > 0x0, pr_cache_magic =3D [0,0], pr_cache_lock =3D {prl_mtx =3D {mtx_owner = =3D (void *)0x > 0, mtx_wantipl =3D 0, mtx_oldipl =3D 0}, prl_rwlock =3D {rwl_owner =3D 0,= rwl_name =3D (c > onst unsigned char *)0x0}}, pr_cache_lists =3D {tqh_first =3D (struct poo= l_cache_it > em *)0x0, tqh_last =3D 0x0}, pr_cache_nitems =3D 0, pr_cache_items =3D 0,= pr_cache_co > ntention =3D 0, pr_cache_contention_prev =3D 0, pr_cache_timestamp =3D 0,= pr_cache_ng > c =3D 0, pr_cache_nout =3D 0, pr_align =3D 8, pr_maxcolors =3D 2, pr_phof= fset =3D 3984, p > r_hardlimit_warning =3D (const unsigned char *)0x0, pr_hardlimit_ratecap = =3D {tv_se > > c =3D 0, tv_usec =3D 0}, pr_hardlimit_warning_last =3D {tv_sec =3D 0, tv_= usec =3D 0}, pr_ > requests_lock =3D {prl_mtx =3D {mtx_owner =3D (void *)0x0, mtx_wantipl = =3D 7, mtx_oldip > l =3D 0}, prl_rwlock =3D {rwl_owner =3D 0, rwl_name =3D (const unsigned c= har *)0x700000 > 000}}, pr_requests =3D {tqh_first =3D (struct pool_request *)0x0, tqh_las= t =3D 0x1089 > be8}, pr_requesting =3D 0, pr_nget =3D 5523479116, pr_nfail =3D 13, pr_np= ut =3D 5523150 > 246, pr_npagealloc =3D 1387529, pr_npagefree =3D 1382897, pr_hiwat =3D 10= 072, pr_nidl > e =3D 0, pr_crange =3D (const kmem_pa_mode *)0xfc60b0} > > > ddb{4}>show struct pool pmap_vp_pool > > struct pmap_vp_pool at 0x10898f0 (424 bytes) {pr_lock =3D {prl_mtx =3D {m= tx_owner =3D > (void *)0x0, mtx_wantipl =3D 7, mtx_oldipl =3D 7}, prl_rwlock =3D {rwl_o= wner =3D 0, rw > l_name =3D (const unsigned char *)0x700000007}}, pr_lock_ops =3D (const p= ool_lock_o > > ps *)0xfc4950, pr_poollist =3D {sqe_next =3D (struct pool *)0x1089c40}, p= r_emptypag > es =3D {tqh_first =3D (struct pool_page_header *)0xc0000001449f7af0, tqh_= last =3D 0xc > 000000142a861d8}, pr_fullpages =3D {tqh_first =3D (struct pool_page_heade= r *)0xc000 > 00003e3bbd20, tqh_last =3D 0xc00000014d3f9248}, pr_partpages =3D {tqh_fir= st =3D (stru > ct pool_page_header *)0xc00000003c3e9250, tqh_last =3D 0xc00000014a4e4d28= }, pr_cu > rpage =3D (struct pool_page_header *)0xc00000014a4e4d28, pr_size =3D 2048= , pr_minit > ems =3D 10, pr_minpages =3D 5, pr_maxpages =3D 8, pr_npages =3D 17150, pr= _itemsperpage =3D > 2, pr_slack =3D 0, pr_nitems =3D 34300, pr_nout =3D 34255, pr_hardlimit = =3D 4294967295 > , pr_serial =3D 13, pr_pgsize =3D 4096, pr_pgmask =3D 1844674407370954752= 0, pr_alloc =3D > > (struct pool_allocator *)0xfe9b40, pr_wchan =3D (const unsigned char *)0= xee10ef, > pr_flags =3D 0, pr_ipl =3D 7, pr_phtree =3D {rbh_root =3D {rbt_root =3D = (struct rb_entry > *)0xc00000013f618a08}}, pr_cache =3D (struct cpumem *)0x0, pr_cache_magi= c =3D [0,0 > ], pr_cache_lock =3D {prl_mtx =3D {mtx_owner =3D (void *)0x0, mtx_wantipl= =3D 0, mtx_ol > dipl =3D 0}, prl_rwlock =3D {rwl_owner =3D 0, rwl_name =3D (const unsigne= d char *)0x0}} > , pr_cache_lists =3D {tqh_first =3D (struct pool_cache_item *)0x0, tqh_la= st =3D 0x0}, > pr_cache_nitems =3D 0, pr_cache_items =3D 0, pr_cache_contention =3D 0, = pr_cache_con > tention_prev =3D 0, pr_cache_timestamp =3D 0, pr_cache_ngc =3D 0, pr_cach= e_nout =3D 0, p > r_align =3D 8, pr_maxcolors =3D 1, pr_phoffset =3D 0, pr_hardlimit_warnin= g =3D (const u > nsigned char *)0x0, pr_hardlimit_ratecap =3D {tv_sec =3D 0, tv_usec =3D 0= }, pr_hardli > > mit_warning_last =3D {tv_sec =3D 0, tv_usec =3D 0}, pr_requests_lock =3D = {prl_mtx =3D {mt > x_owner =3D (void *)0x0, mtx_wantipl =3D 7, mtx_oldipl =3D 0}, prl_rwlock= =3D {rwl_owne > r =3D 0, rwl_name =3D (const unsigned char *)0x700000000}}, pr_requests = =3D {tqh_firs > t =3D (struct pool_request *)0x0, tqh_last =3D 0x1089a40}, pr_requesting = =3D 0, pr_ng > > et =3D 147054103, pr_nfail =3D 0, pr_nput =3D 147019848, pr_npagealloc = =3D 6817420, pr_ > npagefree =3D 6800270, pr_hiwat =3D 20556, pr_nidle =3D 17, pr_crange =3D= (const kmem_p > > a_mode *)0xfc60b0} > > > ddb{4}> show struct pool pmap_pmap_pool > > struct pmap_pmap_pool at 0x1089c40 (424 bytes) {pr_lock =3D {prl_mtx =3D = {mtx_owner > =3D (void *)0x0, mtx_wantipl =3D 7, mtx_oldipl =3D 0}, prl_rwlock =3D {r= wl_owner =3D 0, r > > wl_name =3D (const unsigned char *)0x700000000}}, pr_lock_ops =3D (const = pool_lock_ > ops *)0xfc4950, pr_poollist =3D {sqe_next =3D (struct pool *)0x104b5c0}, = pr_emptypa > > ges =3D {tqh_first =3D (struct pool_page_header *)0xc00000014ef78f90, tqh= _last =3D 0x > c00000014ef78f90}, pr_fullpages =3D {tqh_first =3D (struct pool_page_head= er *)0x0, t > qh_last =3D 0x1089c70}, pr_partpages =3D {tqh_first =3D (struct pool_page= _header *)0x > c00000003e3aef90, tqh_last =3D 0xc000000149c6ef90}, pr_curpage =3D (struc= t pool_pag > e_header *)0xc00000003e3aef90, pr_size =3D 48, pr_minitems =3D 2, pr_minp= ages =3D 1, p > r_maxpages =3D 8, pr_npages =3D 3, pr_itemsperpage =3D 83, pr_slack =3D 0= , pr_nitems =3D 2 > 49, pr_nout =3D 138, pr_hardlimit =3D 4294967295, pr_serial =3D 12, pr_pg= size =3D 4096, > pr_pgmask =3D 18446744073709547520, pr_alloc =3D (struct pool_allocator = *)0xfe9b40 > , pr_wchan =3D (const unsigned char *)0xe91044, pr_flags =3D 0, pr_ipl = =3D 7, pr_phtr > ee =3D {rbh_root =3D {rbt_root =3D (struct rb_entry *)0x0}}, pr_cache =3D= (struct cpume > m *)0x0, pr_cache_magic =3D [0,0], pr_cache_lock =3D {prl_mtx =3D {mtx_ow= ner =3D (void * > )0x0, mtx_wantipl =3D 0, mtx_oldipl =3D 0}, prl_rwlock =3D {rwl_owner =3D= 0, rwl_name =3D > (const unsigned char *)0x0}}, pr_cache_lists =3D {tqh_first =3D (struct = pool_cache > _item *)0x0, tqh_last =3D 0x0}, pr_cache_nitems =3D 0, pr_cache_items =3D= 0, pr_cache > _contention =3D 0, pr_cache_contention_prev =3D 0, pr_cache_timestamp =3D= 0, pr_cache > _ngc =3D 0, pr_cache_nout =3D 0, pr_align =3D 8, pr_maxcolors =3D 1, pr_p= hoffset =3D 3984 > , pr_hardlimit_warning =3D (const unsigned char *)0x0, pr_hardlimit_ratec= ap =3D {tv > _sec =3D 0, tv_usec =3D 0}, pr_hardlimit_warning_last =3D {tv_sec =3D 0, = tv_usec =3D 0}, p > r_requests_lock =3D {prl_mtx =3D {mtx_owner =3D (void *)0x0, mtx_wantipl = =3D 7, mtx_old > ipl =3D 0}, prl_rwlock =3D {rwl_owner =3D 0, rwl_name =3D (const unsigned= char *)0x7000 > 00000}}, pr_requests =3D {tqh_first =3D (struct pool_request *)0x0, tqh_l= ast =3D 0x10 > 89d90}, pr_requesting =3D 0, pr_nget =3D 1113457, pr_nfail =3D 0, pr_nput= =3D 1113319, p > r_npagealloc =3D 3, pr_npagefree =3D 0, pr_hiwat =3D 3, pr_nidle =3D 1, p= r_crange =3D (co > nst kmem_pa_mode *)0xfc60b0} > > ddb{4}> > > On Wed, Jun 5, 2024 at 12:16=E2=80=AFPM Miod Vallat <[email protected]> wrot= e: > > > > > There's a corruption... > > > > > > > ddb{7}> show panic > > > > cpu6: kernel diagnostic assertion "((flags & PGO_LOCKED) !=3D 0 &&= rw_lock_held( > > > > uobj->vmobjlock)) || (flags & PGO_LOCKED) =3D=3D 0" failed: file "/= sys/uvm/uvm_vnod > > > > e.c", line 953 > > > > > > > > *cpu7: assertwaitok: non-zero mutex count: 1 > > > > ddb{7}> trace > > > > panic+0x134 > > > > assertwaitok+0xf8 > > > > mi_switch+0x5c > > > > sleep_finish+0x160 > > > > rw_enter+0x1cc > > > > vm_map_lock_read_ln+0x38 > > > > uvmfault_lookup+0x114 > > > > uvm_fault_check+0x68 > > > > uvm_fault+0x12c > > > > trap+0x7a4 > > > > trapagain+0x4 > > > > --- trap (type 0x300) --- > > > > phtree_RBT_COMPARE+0x28 > > > > pool_do_put+0x94 > > > > pool_put+0x94 > > > ^^^^ > > > ...inside this pool. Which of the 3 is it? Can someone with a ppc64 > > > figure out? > > > > It's pmap_vp_pool.