Hit the

  KASSERT(curcpu()->ci_inatomic == 0);

in pagefault_disable().  Analysis of the code in i915_gem_execbuffer.c
shows that pagefault_disable() may be called when page faults are
already disabled, i.e. from eb_relocate_slow() where eb_relocate_vma()
is called after pagefault_disable().

Diff below fixes this.

ok?


Index: dev/pci/drm/include/linux/uaccess.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/include/linux/uaccess.h,v
retrieving revision 1.1
diff -u -p -r1.1 uaccess.h
--- dev/pci/drm/include/linux/uaccess.h 14 Apr 2019 10:14:53 -0000      1.1
+++ dev/pci/drm/include/linux/uaccess.h 17 Dec 2019 12:37:10 -0000
@@ -80,15 +80,15 @@ access_ok(int type, const void *addr, un
 static inline void
 pagefault_disable(void)
 {
-       KASSERT(curcpu()->ci_inatomic == 0);
-       curcpu()->ci_inatomic = 1;
+       curcpu()->ci_inatomic++;
+       KASSERT(curcpu()->ci_inatomic > 0);
 }
 
 static inline void
 pagefault_enable(void)
 {
-       KASSERT(curcpu()->ci_inatomic == 1);
-       curcpu()->ci_inatomic = 0;
+       KASSERT(curcpu()->ci_inatomic > 0);
+       curcpu()->ci_inatomic--;
 }
 
 static inline int

Reply via email to