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



In article <201005141341.10771.sverre%viewmark.com@localhost>,
Sverre Froyen  <sverre%viewmark.com@localhost> 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:
>> > On Thu May 13 2010 12:07:01 Iain Hibbert wrote:
>> > > On Thu, 13 May 2010, Brian Buhrow wrote:
>> > > >        Hello.  Isn't there a way to have ddb execute a series of 
>> > > > commands
>> > > > 
>> > > > when it fires?  I think the output of ddb commands show up in the
>> > > > dmesg buffer.  So, you could have  it execute a back trace, then
>> > > > reboot after writing a core image, which will capture all the
>> > > > relevant output.  I think it's a sysctl to tell ddb what to do.
>> > > 
>> > > AFAIK it needs to be built in, see ddb(4)
>> > 
>> > Using these suggestions I get the following output:
>> > 
>> > info: [drm] Setting GART location based on new memory map
>> > info: [drm] Loading RV635 Microcode
>> > uvm_fault(0xffff80004ee23010, 0x0, 1) -> e
>> > fatal page fault in supervisor mode
>> > trap type 6 code 0 rip ffffffff801f7823 cs 8 rflags 13246 cr2  0 cpl 0
>> > rsp ffff8 0004f4cb888
>> > kernel: page fault trap, code=0
>> > Stopped in pid 1055.1 (Xorg) at netbsd:bus_space_write_4+0x3:   cmpl
>> > $0,0(%rd
>> > i)
>> > 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)'.
>

I think that the following code is problematic because it does not set
bst or bsh in the else case.

#if __OS_HAS_AGP
        // XXX
        if (dev_priv->flags & RADEON_IS_AGP) {
                drm_core_ioremap_wc(dev_priv->cp_ring, dev);
                drm_core_ioremap_wc(dev_priv->ring_rptr, dev);
                drm_core_ioremap_wc(dev->agp_buffer_map, dev);
                if (!dev_priv->cp_ring->handle ||
                    !dev_priv->ring_rptr->handle ||
                    !dev->agp_buffer_map->handle) {
                        DRM_ERROR("could not find ioremap agp regions!\n");
                        r600_do_cleanup_cp(dev);
                        return -EINVAL;
                }
        } else
#endif
        {
                dev_priv->cp_ring->handle = (void *)dev_priv->cp_ring->offset;
                dev_priv->ring_rptr->handle =
                    (void *)dev_priv->ring_rptr->offset;
                dev->agp_buffer_map->handle =
                    (void *)dev->agp_buffer_map->offset;

                DRM_DEBUG("dev_priv->cp_ring->handle %p\n",
                          dev_priv->cp_ring->handle);
                DRM_DEBUG("dev_priv->ring_rptr->handle %p\n",
                          dev_priv->ring_rptr->handle);
                DRM_DEBUG("dev->agp_buffer_map->handle %p\n",
                          dev->agp_buffer_map->handle);
        }

christos



Home | Main Index | Thread Index | Old Index