On 23/12/25(Tue) 22:49, Alexander Bluhm wrote:
> On Mon, Dec 22, 2025 at 11:04:59PM +0100, Alexander Bluhm wrote:
> > On Mon, Dec 15, 2025 at 06:15:35PM +0100, Alexander Bluhm wrote:
> > > On Mon, Dec 15, 2025 at 02:18:45PM +0100, Martin Pieuchot wrote:
> > > > Thanks for the report. Is your machine still in ddb? We're missing the
> > > > trace of the CPU1 which is the one that paniced. Would you please get
> > > > it?
> >
> > It happend again. This time with trace of all CPUs. Note that I
> > did a make build with a kernel where I applied the "Make pdaemon
> > understandable" diff before.
>
> And here another one. This time with the fixed pgdemon diff.
Thanks a lot Alexander. I have two hypothesis about this assert.
Either it is a race and the page is no longer on the active list by
the time the page daemon is trying to lock it or it is a corruption.
Would you please try the diff below and look for the corresponding
message in dmesg? Thanks a lot!
Index: uvm/uvm_pdaemon.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_pdaemon.c,v
diff -u -p -r1.144 uvm_pdaemon.c
--- uvm/uvm_pdaemon.c 24 Dec 2025 10:29:22 -0000 1.144
+++ uvm/uvm_pdaemon.c 24 Dec 2025 10:55:34 -0000
@@ -396,15 +396,21 @@ uvmpd_trylockowner(struct vm_page *pg)
{
struct uvm_object *uobj = pg->uobject;
+ struct vm_anon *anon = pg->uanon;
struct rwlock *slock;
if (uobj != NULL) {
slock = uobj->vmobjlock;
- } else {
- struct vm_anon *anon = pg->uanon;
-
- KASSERT(anon != NULL);
+ KASSERTMSG(slock != NULL, "pg %p uobj %p, NULL lock", pg, uobj);
+ } else if (anon != NULL) {
slock = anon->an_lock;
+ KASSERTMSG(slock != NULL, "pg %p anon %p, NULL lock", pg, anon);
+ } else {
+#if 1
+ printf("page still active?");
+ uvm_page_printit(pg, 1, printf);
+#endif
+ return NULL;
}
if (rw_enter(slock, RW_WRITE|RW_NOSLEEP)) {