On Thu, 30 May 2024 13:11:41 -0700
Eric Grosse <gro...@gmail.com> wrote:

> ddb{7}> show panic
> 
>  cpu6: kernel diagnostic assertion "((flags & PGO_LOCKED) != 0 && 
> rw_lock_held(
> uobj->vmobjlock)) || (flags & PGO_LOCKED) == 0" failed: file 
> "/sys/uvm/uvm_vnod
> e.c", line 953
> 
> *cpu7: assertwaitok: non-zero mutex count: 1

This kernel diff might or might not help.  It changes some memory
barriers from "isync" to "sync".

I had a problem with corrupt memory.  I had 2 mounts of the same nfs
filesystem; the same file was good in one mount and corrupt in the
other mount, as if something corrupted the cached file in memory.  I
failed to reproduce the problem, so I never learned whether or not
the memory barrier affected it.

--gkoehler

Index: arch/powerpc64/include/atomic.h
===================================================================
RCS file: /cvs/src/sys/arch/powerpc64/include/atomic.h,v
diff -u -p -r1.3 atomic.h
--- arch/powerpc64/include/atomic.h     29 Aug 2022 02:01:18 -0000      1.3
+++ arch/powerpc64/include/atomic.h     8 Mar 2024 18:06:58 -0000
@@ -276,10 +276,10 @@ _atomic_addic_long_nv(volatile unsigned 
 #define __membar(_f) do { __asm volatile(_f ::: "memory"); } while (0)
 
 #if defined(MULTIPROCESSOR) || !defined(_KERNEL)
-#define membar_enter()         __membar("isync")
+#define membar_enter()         __membar("sync")
 #define membar_exit()          __membar("sync")
 #define membar_producer()      __membar("sync")
-#define membar_consumer()      __membar("isync")
+#define membar_consumer()      __membar("sync")
 #define membar_sync()          __membar("sync")
 #else
 #define membar_enter()         __membar("")

Reply via email to