Re: sparc64 panics - ctx_free: context xxxx still active

Jeremie Courreges-Anglas <[email protected]>
Newsgroups gmane.os.openbsd.bugs
Message-ID <[email protected]>
On Mon, Mar 16, 2026 at 01:19:36PM -0600, Theo de Raadt wrote:
> Jeremie Courreges-Anglas <[email protected]> wrote:
> 
> > On Mon, Mar 16, 2026 at 12:18:05PM -0600, Theo de Raadt wrote:
> > > I'm surprised at your proposal.
> > > 
> > > If this condition gets detected, why do you think it is fine to
> > > continue?  A kernel data structure is seriously corrupted.
> > 
> > I'm not saying it's fine, sorry if my mail was too long to read. ;)
> > 
> > 1. I'm not 100% sure the checks that trigger are correct, after all
> >   they're not using volatile reads.  Maaaaybe that's the bug but I
> >   have no idea right now.
> >   
> > 2. Kurt had posted this on ports@ earlier, then on bugs@, so far no
> >   one has a fix and you recently tagged 7.9.  This diff is an attempt
> >   to make kmos' and users life easier before next release.  Obviously
> >   everybody would be happier with a proper fix.  Maybe this admittedly
> >   incomplete fix will spark a discussion?
> 
> Maybe.
> 
> But you cannot delete that ddb enter.  You could replace it with a
> panic.  If you continue to run after that printf, the system will just
> crash in other unknown ways which are more difficult to debug.

We have proof that the system doesn't necessarily crash after that
message is printed.  kmos tested the db_enter removal yesterday
and confirmed that he got the message on the console without the
system crashing.  Using the diff below, I got this today on my LDOM's
console:

Apr  8 11:37:26 ports /bsd: ctx_free: context 1641 still active in dmmu
Apr  8 12:21:12 ports /bsd: ctx_free: context 7896 still active in dmmu
Apr  8 12:24:29 ports /bsd: ctx_free: context 3150 still active in dmmu
Apr  8 13:43:56 ports /bsd: ctx_free: context 4221 still active in dmmu
Apr  8 15:55:50 ports /bsd: ctx_free: context 1264 still active in dmmu
Apr  8 18:55:48 ports /bsd: ctx_free: context 5664 still active in dmmu

The system is running many loops of perl subprocesses in an attempt to
reproduce another bug:

  count=0; while perl t.pl; do count=$((count + 1)); done; echo $count

I have zero reason to believe that this is specific to perl.  eg it
may happens when building rust which AFAIK doesn't use perl.

So I stand by my initial proposal (or the variant below).  I'm not
happy either with our partial understanding of this issue, and if
someone had a better fix, I'd be all for it.  BUT the db_enter() call
in -current and next 7.9 has so far done more harm than good.


Index: pmap.c
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/sparc64/pmap.c,v
diff -u -p -r1.127 pmap.c
--- pmap.c	14 Dec 2025 12:37:22 -0000	1.127
+++ pmap.c	7 Apr 2026 08:58:11 -0000
@@ -2597,11 +2597,10 @@ ctx_free(struct pmap *pm)
 		db_enter();
 	}
 	for (i = 0; i < TSBENTS; i++) {
-		if (TSB_TAG_CTX(tsb_dmmu[i].tag) == oldctx ||
-		    TSB_TAG_CTX(tsb_immu[i].tag) == oldctx) {
-			printf("ctx_free: context %d still active\n", oldctx);
-			db_enter();
-		}
+		if (TSB_TAG_CTX(tsb_dmmu[i].tag) == oldctx)
+			printf("ctx_free: context %d still active in dmmu\n", oldctx);
+		if (TSB_TAG_CTX(tsb_immu[i].tag) == oldctx)
+			printf("ctx_free: context %d still active in immu\n", oldctx);
 	}
 #endif
 	/* We should verify it has not been stolen and reallocated... */



-- 
jca
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.