Current-Users archive

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

Re: amd64 system crash with radeondrm enabled after update



On Sun, May 16, 2010 at 11:08:23AM -0600, Sverre Froyen wrote:
> On Fri May 14 2010 13:41:10 Sverre Froyen wrote:
> > On Fri May 14 2010 13:02:59 David Young wrote:
> > > On Fri, May 14, 2010 at 12:24:17PM -0600, Sverre Froyen wrote:
> ...
> > > > db{0}> bt
> > > > bus_space_write_4() at netbsd:bus_space_write_4+0x3
> > > > r600_do_init_cp() at netbsd:r600_do_init_cp+0x5ee
> > > 
> > > What line is that?  In gdb, 'l *(r600_do_init_cp+0x5ee)'.
> > 
> > (gdb) l *(r600_do_init_cp+0x5ee)
> > 0xffffffff805a80c3 is in r600_do_init_cp
> > (/usr/src/sys/external/bsd/drm/dist/shared-core/r600_cp.c:2068).
> > 2063            else
> > 2064                r600_cp_load_microcode(dev_priv);
> > 2065
> > 2066            r600_cp_init_ring_buffer(dev, dev_priv);
> > 2067
> > 2068            dev_priv->last_buf = 0;
> > 2069
> > 2070            r600_do_engine_reset(dev);
> > 2071            r600_test_writeback(dev_priv);
> > 2072
> 
> Sprinkling some printfs, I find that the problem is in line
> 
> SET_RING_HEAD(dev_priv, 0);
> 
> in the function r600_cp_init_ring_buffer (no idea why the trace did not 
> include 
> that function).

Sometimes function calls or stack frames are optimized way.  Sometimes I
add DEBUG="-g -fno-omit-frame-pointer -fno-optimize-sibling-calls" to my
kernel configuration to suppress that optimization for debugging.

> SET_RING_HEAD is defined in radeon_drv.h as
> 
> #define SET_RING_HEAD(dev_priv,val)        DRM_WRITE32( 
> (dev_priv)->ring_rptr, 
> 0, (val) )
> 
> and DRM_WRITE32 is defined in /usr/src/sys/external/bsd/drm/dist/bsd-
> core/drmP.h as
> 
> #define DRM_WRITE32(map, offset, val)   \
>         bus_space_write_4((map)->bst, (map)->bsh, (offset), (val))
> 

This is what I expected.  What are (map)->bst and (map)->bsh?

> Does any of this code need updating after the bus_space_tag_t change? See
> 
> http://mail-index.netbsd.org/source-changes/2010/04/28/msg009341.html

x86 code that used uninitialized bus_space_tag_t's worked by accident,
before.  It does not work, now, because an uninitialized bus_space_tag_t
is treated as a pointer (NULL) instead of as an integer constant (0).

Dave

-- 
David Young             OJC Technologies
dyoung%ojctech.com@localhost      Urbana, IL * (217) 278-3933


Home | Main Index | Thread Index | Old Index