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)) {



Reply via email to