On Thu, 30 May 2024 13:11:41 -0700
Eric Grosse <[email protected]> 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("")