NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

re: kern/57537: radeon drm hangs with multiple glxgears active



The following reply was made to PR kern/57537; it has been noted by GNATS.

From: matthew green <mrg%eterna.com.au@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: kern-bug-people%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
    netbsd-bugs%netbsd.org@localhost
Subject: re: kern/57537: radeon drm hangs with multiple glxgears active
Date: Sat, 22 Jul 2023 16:59:59 +1000

 i realised that i've been near this problem before, i've got
 a patch that printf()s instead of panic()s here, and it's
 firing in dmesg:
 
 ww_mutex_lock_wait_sig:408: nopanic: ww mutex class mismatch: 0xffffffff81=
 09e4c0 !=3D 0xffffffff804b89d6
 
 see patch below.  i'll work on getting more info (stack trace
 at the very least).
 
 
 .mrg.
 
 
 Index: sys/external/bsd/drm2/linux/linux_ww_mutex.c
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
 RCS file: /cvsroot/src/sys/external/bsd/drm2/linux/linux_ww_mutex.c,v
 retrieving revision 1.14
 diff -p -u -r1.14 linux_ww_mutex.c
 --- sys/external/bsd/drm2/linux/linux_ww_mutex.c	18 Mar 2022 23:33:41 -000=
 0	1.14
 +++ sys/external/bsd/drm2/linux/linux_ww_mutex.c	22 Jul 2023 06:57:19 -000=
 0
 @@ -398,9 +398,16 @@ ww_mutex_lock_wait_sig(struct ww_mutex *
  	KASSERT((mutex->wwm_state =3D=3D WW_CTX) ||
  	    (mutex->wwm_state =3D=3D WW_WANTOWN));
  	KASSERT(mutex->wwm_u.ctx !=3D ctx);
 +#if 0
  	KASSERTMSG((ctx->wwx_class =3D=3D mutex->wwm_u.ctx->wwx_class),
  	    "ww mutex class mismatch: %p !=3D %p",
  	    ctx->wwx_class, mutex->wwm_u.ctx->wwx_class);
 +#else
 +	if (ctx->wwx_class !=3D mutex->wwm_u.ctx->wwx_class)
 +		printf("%s:%d: nopanic: ww mutex class mismatch: %p !=3D %p\n",
 +		    __func__, __LINE__,
 +		    ctx->wwx_class, mutex->wwm_u.ctx->wwx_class);
 +#endif
  	KASSERTMSG((mutex->wwm_u.ctx->wwx_ticket !=3D ctx->wwx_ticket),
  	    "ticket number reused: %"PRId64" (%p) %"PRId64" (%p)",
  	    ctx->wwx_ticket, ctx,
 @@ -751,9 +758,16 @@ retry:	switch (mutex->wwm_state) {
  		 * Owned by a higher-priority party.  Tell the caller
  		 * to unlock everything and start over.
  		 */
 +#if 0
  		KASSERTMSG((ctx->wwx_class =3D=3D mutex->wwm_u.ctx->wwx_class),
  		    "ww mutex class mismatch: %p !=3D %p",
  		    ctx->wwx_class, mutex->wwm_u.ctx->wwx_class);
 +#else
 +		if (!(ctx->wwx_class =3D=3D mutex->wwm_u.ctx->wwx_class))
 +			printf("%s:%d: nopanic: ww mutex class mismatch: %p !=3D %p\n",
 +			    __func__, __LINE__,
 +			    ctx->wwx_class, mutex->wwm_u.ctx->wwx_class);
 +#endif
  		ret =3D -EDEADLK;
  		goto out_unlock;
  	}
 


Home | Main Index | Thread Index | Old Index