Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

re: panic in evo_wait



> [184218.xxx] warning: /usr/src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_headgf119.c:83: 1

can you patch this code to print the value of "data" here?
it's probably a bad request for userland, but the BUG_ON()
here does not give you any indication on _what_.

> [184218.xxx] uvm_fault(0xffffffff8191ba80, 0xffffb649e46a3000, 2) -> e
> [184218.xxx] fatal page fault in supervisor mode
> [184218.xxx] trap type 6 code 0x2 ...

this line's contents would have included the fault address,
which is kinda useful for next time :-)

> [184218.xxx] curlpw 0xffffa8d4e6f36500 pid 27414.3207 lowest kstrack 0xffffb589296452c0
> kernel: page fault trap, code=0
> Stopped in pid 27414.3207 (mpv) at netbsd:evo_wait+0x7b: movl $0x20000
> 000,0(%rdx,%rax,1)
> evo_wait() at netbsd:evo_wait+0x7b
> base507c_ntfy_set()
> nv50_wndw_flush_set()
> nv50_disp_atomic_commit_tail()
> nv50_disp_atomic_commit()
> drm_atomic_helper_set_config()
> drm_mode_setcrtc()
> drm_ioctl()

can you find out where evo_wait+0x7b is?  in my kernel it's
at line 243, and the disasm seems to patch your "movl" above.

235 evo_wait(struct nv50_dmac *evoc, int nr)
236 {
237         struct nv50_dmac *dmac = evoc;
238         struct nvif_device *device = dmac->base.device;
239         u32 put = nvif_rd32(&dmac->base.user, 0x0000) / 4;
240
241         spin_lock(&dmac->lock);
242         if (put + nr >= (PAGE_SIZE / 4) - 8) {
243                 dmac->ptr[put] = 0x20000000;
244                 evo_flush(dmac);

Dump of assembler code for function evo_wait:
   0xffffffff8084dfe1 <+0>:       push   %rbp
[...]
   0xffffffff8084e05c <+123>:     movl   $0x20000000,(%rdx,%rax,1)

(0x7b = 123)

probably "dmac->ptr" is invalid here.  a quick guess at the
code indicates it's only set once in nv50_dmac_create(),
the source from the caller(s).  at least, i can't see it
set anywhere else right now.


.mrg.


Home | Main Index | Thread Index | Old Index