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