NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: xsrc/58133: X server crashes; radeon 5450; modesetting
The following reply was made to PR xsrc/58133; it has been noted by GNATS.
From: Rhialto <rhialto%falu.nl@localhost>
To: matthew green <mrg%eterna23.net@localhost>
Cc: Rhialto <rhialto%falu.nl@localhost>, xsrc-manager%netbsd.org@localhost,
gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost,
gnats-bugs%netbsd.org@localhost
Subject: Re: xsrc/58133: X server crashes; radeon 5450; modesetting
Date: Mon, 6 May 2024 21:58:51 +0200
ah, so I tested the radeon driver after all (kernel_10+X_10+radeon)
and I saw indeed the same font issues as before. (some fonts didn't
render most letters, and some only half; it didn't go away when
minimizing and redisplaying the window) This time it was
limited to Firefox though.
A bit later in this combination X froze. In /var/log/messages it said
many times:
May 6 18:42:07 murthe /netbsd: [ 158834.9967050] radeon0: autoconfiguration error: error: ring 0 stalled for more than 374990msec
May 6 18:42:07 murthe /netbsd: [ 158834.9967050] radeon0: autoconfiguration error: error: ring 0 stalled for 8a last fence id 0x00000000000f828d on ring 0)
I had seen the same thing with kernel_10+X_9+radeon. Since I never had
it at all with kernel_9+X_9+radeon, this would seem to mean this is a
kernel-side issue in kernel_10.
A reboot seems to be the only way out of this.
I *thought* I had another candidate implementation of glMapBufferRange():
* Called via glMapBufferRange().
st_bufferobj_map_range() in ./usr/xsrc/external/mit/MesaLib/dist/src/mesa/state_tracker/st_cb_bufferobjects.c
-> pipe_buffer_map_range() in ./usr/xsrc/external/mit/MesaLib/dist/src/gallium/auxiliary/util/u_inlines.h
-> struct pipe_context.buffer_map() in ./usr/xsrc/external/mit/MesaLib/dist/src/gallium/include/pipe/p_context.h
Possible initialization:
./external/mit/MesaLib/dist/src/gallium/winsys/radeon/drm/radeon_drm_bo.c: ws->base.buffer_map = radeon_bo_map;
# this is NOT the one listed above
radeon_bo_map() in ./usr/xsrc/external/mit/MesaLib/dist/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
-> radeon_bo_do_map() in same file
-> os_mmap()
so I put printfs in both st_bufferobj_map_range() and radeon_bo_map()
(which is a different radeon_bo_map() than before!) but I did not see
output from them. Even though I got output from glamor_get_vbo_space().
So the real implementation must still be somewhere else.
This would have been a nice candidate, because it does a mmap() and
munmap() for every glMapBufferRange() / glUnMapBuffer(). So there would
be lots of opportunity for things to go wrong.
My current test is kernel_10+X_10+modesetting with a slightly modified
version of glamor_get_vbo_space(). I moved the calls to glUnmapBuffer()
and glMapBufferRange() into the condition about growing the buffer. So
mmap should be called only once now, ever (needing a bigger buffer is
really unlikely). It doesn't fix the root cause but it may work around
the issue. I really hope it does.
(maybe there needs to be some synchronisation, before reusing the
buffer, to wait for it to be "all processed" (there is something like
that in radeon_bo_map() in
./usr/xsrc/external/mit/MesaLib/dist/src/gallium/winsys/radeon/drm/radeon_drm_bo.c)
but I'm not sure what to call there)
Home |
Main Index |
Thread Index |
Old Index