Bug 33494 - crash during (or at end) of map loading in ut2004
Summary: crash during (or at end) of map loading in ut2004
Status: RESOLVED FIXED
Alias: None
Product: Mesa
Classification: Unclassified
Component: Drivers/Gallium/r600 (show other bugs)
Version: git
Hardware: x86-64 (AMD64) Linux (All)
: medium major
Assignee: mesa-dev
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-01-25 12:08 UTC by XoD
Modified: 2011-02-02 16:00 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments

Description XoD 2011-01-25 12:08:49 UTC
When i try to launch a map in ut2004 i have a crash durring the loading (or just at the end of loading)

If I haven't debbuggeur attach ut2004 terminate on a DBUS error (Signal SIGBUS)

stack :

#0  memcpy() at ../sysdeps/x86_64/memcpy.S:267
#1  r600_upload_buffer() at /usr/include/bits/string3.h:52
#2  r600_upload_user_buffers() at r600_buffer.c:239
#3  evergreen_vertex_buffer_update() at evergreen_state.c:1372
#4  st_draw_vbo() at state_tracker/st_draw.c:712
#5  vbo_validated_drawrangeelements() at vbo/vbo_exec_array.c:793
#6  vbo_exec_DrawRangeElementsBaseVertex() at vbo/vbo_exec_array.c:905
#7  vbo_exec_DrawRangeElements() at vbo/vbo_exec_array.c:925
#8  FOpenGLRenderInterface::DrawPrimitive(EPrimitiveType, int, int, int, int)() at :0
#9  FBspDrawList::Render(FLevelSceneNode*, FRenderInterface*)() at :0
#10  RenderLevel(FLevelSceneNode*, FRenderInterface*)() at :0
#11  FLevelSceneNode::Render(FRenderInterface*)() at :0
#12  FPlayerSceneNode::Render(FRenderInterface*)() at :0
#13  UGameEngine::Draw(UViewport*, int, unsigned char*, int*)() at :0
#14  USDLViewport::Repaint(int)() at :0
#15  USDLClient::Tick()() at :0
#16  UGameEngine::Tick(float)() at :0
#17  CMainLoop::RunLoop()() at :0
#18  ??() at :0
#19  main() at :0

Test with :
 - mesa git (commit 90c2fd86407999475ff6accecf36e5a2c75feb9b)
 - libdrm git (commit 550fe2ca3b29ad2191eab4fdfbed9ed21e25492d)
 - xf86-video-ati git (commit fadee0409a8e13b78bbccb83dd70f590fee23d57)
with kernel 3.6.37
Comment 1 XoD 2011-01-25 12:13:11 UTC
If I add a sprintf before memcpy in r600_upload.c I was able to debug in r600_upload_buffer.

The call stack was :

#0  memcpy() at ../sysdeps/x86_64/memcpy.S:267
#1  fprintf() at /usr/include/bits/string3.h:52
#2  r600_upload_buffer() at r600_upload.c:109
#3  r600_upload_user_buffers() at r600_buffer.c:239
#4  evergreen_vertex_buffer_update() at evergreen_state.c:1372
#5  st_draw_vbo() at state_tracker/st_draw.c:712
...


Patch :
diff --git a/src/gallium/drivers/r600/r600_upload.c b/src/gallium/drivers/r600/r600_upload.c
index 44102ff..ba19185 100644
--- a/src/gallium/drivers/r600/r600_upload.c
+++ b/src/gallium/drivers/r600/r600_upload.c
@@ -103,7 +103,11 @@ int r600_upload_buffer(struct r600_upload *upload, unsigned offset,
        }
 
        in_ptr = in_buffer->user_buffer;
-       memcpy(upload->ptr + upload->offset, (uint8_t *) in_ptr + offset, size);
+       uint8_t * ptr_src = (uint8_t *) upload->ptr + upload->offset;
+       uint8_t * ptr_dest = (uint8_t *) in_ptr + offset;
+       //R600_ERR("memcpy src %d dest %d size %d\n", ptr_src, ptr_dest, size);
+       fprintf(stdout, "memcpy src %p dest %p size %d\n", ptr_src, ptr_dest, size);
+       memcpy(ptr_src, ptr_dest, size);
        *out_offset = upload->offset;
        *out_size = upload->size;
        *out_buffer = NULL;
Comment 2 Tobias Jakobi 2011-01-25 14:36:32 UTC
Can you do me a favor an check what your UseVBO setting is? It's a config setting of the OpenGL renderer (check $HOME/.ut2004/System/UT2004.ini).

I'm interested because I'm also experiencing crashes in ut04 (see bug #33172) with certain settings.
Comment 3 XoD 2011-01-25 14:45:43 UTC
With "UseVBO=True" I was be able to finish the loading.
But my system has freeze when i have try to spawn my player character.

I forgot to présise before : i have run test on a ATI Mobility Radeon HD 5730 (Evergreen).
Comment 4 Michel Dänzer 2011-01-26 01:17:03 UTC
(In reply to comment #4)
> If I haven't debbuggeur attach ut2004 terminate on a DBUS error (Signal SIGBUS)

A bus error indicates something may have gone wrong in the kernel. Is there something interesting in dmesg or the kernel log file?
Comment 5 XoD 2011-01-27 15:03:51 UTC
(In reply to comment #4)
> (In reply to comment #4)
> > If I haven't debbuggeur attach ut2004 terminate on a DBUS error (Signal SIGBUS)
> 
> A bus error indicates something may have gone wrong in the kernel. Is there
> something interesting in dmesg or the kernel log file?

I have not seen anything significant in the log.

but with a 2.6.37 kernel with this patch from agd5f :
http://people.freedesktop.org/~agd5f/0001-drm-radeon-kms-re-emit-full-context-state-for-evergr.patch

ut2004 is killed by SIGBUS only in "very high"(the most hight level) texture detailed mode 
And crash isn't systematic, I haven't reproduce it with a debuggeur attach.
Comment 6 XoD 2011-02-02 04:32:11 UTC
(In reply to comment #5)
> ut2004 is killed by SIGBUS only in "very high"(the most hight level) texture
> detailed mode 
> And crash isn't systematic, I haven't reproduce it with a debuggeur attach.

With last git version of mesa and r600g I can play with full detail at ut2004.
Thank's All
Comment 7 Tobias Jakobi 2011-02-02 16:00:46 UTC
Was probably fixed by the same changes that also fixed bug #33172.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.