On Tue, Jun 16, 2020 at 06:46:41PM +0100, Stuart Henderson wrote:
> On 2020/06/15 21:50, Stuart Henderson wrote:
> > On 2020/06/14 15:45, Jonathan Gray wrote:
> > > On Sat, Jun 13, 2020 at 12:15:13PM +0100, Stuart Henderson wrote:
> > > > Same with a newer kernel.
> > > >
> > > > OpenBSD 6.7-current (GENERIC.MP) #3: Thu Jun 11 19:47:48 BST 2020
> > > > [email protected]:/sys/arch/amd64/compile/GENERIC.MP
> > > >
> > > > uvm_fault(0xfffffd86e2f6c120, 0x51, 0, 1) -> e
> > > > kernel: page fault trap, code=0
> > > > Stopped at i915_request_create+0x4b: movq 0x50(%r14),%rdi
> > > > ddb{1}> tr
> > >
> > > 0x50 is the offset in the struct of requests
> > > r14 in 1 in both traces and appears to be tl
> > >
> > > I don't yet see how that is possible, can you try this diff and tell me
> > > if the printf triggers?
> >
> > I'm running with it, hasn't triggered yet (3h uptime).
>
> After some various reboots (tcp nfs related..) I have now seen
> it a couple of times in my current boot. The timing of the second
> one, pretty much exactly 2h after the first one, seems interesting,
> I wonder if there will be another one in 55 mins..
>
> 2020-06-16T13:36:45.550Z symphytum /bsd: OpenBSD 6.7-current (GENERIC.MP) #3:
> Tue Jun 16 13:35:25 BST 2020
> 2020-06-16T14:40:04.649Z symphytum /bsd: i915_request_create tl == 1
> 2020-06-16T16:40:04.413Z symphytum /bsd: i915_request_create tl == 1
The way we implement mutex_lock_interruptible() is
#define mutex_lock_interruptible(rwl) -rw_enter(rwl, RW_WRITE | RW_INTR)
If something returned -1 we'd return 1 but all the error paths in the
functions involved should be returning positive errno values.
Can you try running with this as well to know which path is involved?
Index: dev/pci/drm/i915/gt/intel_context.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/i915/gt/intel_context.h,v
retrieving revision 1.1
diff -u -p -r1.1 intel_context.h
--- dev/pci/drm/i915/gt/intel_context.h 8 Jun 2020 04:48:13 -0000 1.1
+++ dev/pci/drm/i915/gt/intel_context.h 17 Jun 2020 05:53:14 -0000
@@ -145,9 +145,14 @@ intel_context_timeline_lock(struct intel
struct intel_timeline *tl = ce->timeline;
int err;
+ if ((vaddr_t)ce->timeline == 1)
+ printf("%s ce->timeline == 1\n", __func__);
+
err = mutex_lock_interruptible(&tl->mutex);
- if (err)
+ if (err) {
+ printf("%s mutex_lock_interruptible() ret %d\n", __func__, err);
return ERR_PTR(err);
+ }
return tl;
}