From a1fc6af2d8937fcc4eef25119d777e168e62b2ea Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Fri, 10 Jan 2003 17:04:21 +0000 Subject: Note that radeon_do_cp_idle() can fail, cope with it. --- shared-core/radeon_cp.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'shared-core') diff --git a/shared-core/radeon_cp.c b/shared-core/radeon_cp.c index f7b99e8a..6a05490b 100644 --- a/shared-core/radeon_cp.c +++ b/shared-core/radeon_cp.c @@ -1388,13 +1388,18 @@ int radeon_cp_stop( DRM_IOCTL_ARGS ) void radeon_do_release( drm_device_t *dev ) { drm_radeon_private_t *dev_priv = dev->dev_private; + int ret; if (dev_priv) { - /* Stop the cp */ - radeon_do_cp_flush( dev_priv ); - radeon_do_cp_idle( dev_priv ); - radeon_do_cp_stop( dev_priv ); - radeon_do_engine_reset( dev ); + 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); + schedule(); /* BSD? */ + } + radeon_do_cp_stop( dev_priv ); + radeon_do_engine_reset( dev ); + } /* Disable *all* interrupts */ RADEON_WRITE( RADEON_GEN_INT_CNTL, 0 ); -- cgit v1.2.3