radeon lockups with drm/dri

Alfred Perlstein alfred at freebsd.org
Wed Feb 22 10:11:46 PST 2006


I've had a couple of times where my X server went bonkers
and wouldn't respond to "kill -9" I think this has to do
with the hardware going for a nap.

Basically the X server gets stuck in "rdnrel".

This is in:
dev/drm/radeon_cp.c:radeon_do_release()

                if (dev_priv->cp_running) {
                        /* Stop the cp */
                        while ((ret = radeon_do_cp_idle(dev_priv)) != 0) {
                                DRM_DEBUG("radeon_do_cp_idle %d\n", ret);
#ifdef __linux__
                                schedule();
#else
#if defined(__FreeBSD__) && __FreeBSD_version > 500000
                                msleep(&ret, &dev->dev_lock, PZERO, "rdnrel",
                                       1);
#else
                                tsleep(&ret, PZERO, "rdnrel", 1);
#endif
#endif
                        }
                        radeon_do_cp_stop(dev_priv);
                        radeon_do_engine_reset(dev);
                }

It appears that "radeon_do_cp_idle" fails over and over leading
to an unkillable X server.

Can this loop be changed to abort after a number of retries?

Is a way to force a reset of the device when this happens?

thank you!
-- 
- Alfred Perlstein
- CTO Okcupid.com / FreeBSD Hacker / All that jazz -


More information about the freebsd-multimedia mailing list