Module Name: src Committed By: mrg Date: Wed Mar 3 03:48:40 UTC 2010
Modified Files: src/sys/external/bsd/drm/dist/bsd-core: radeon_drv.c Log Message: make suspend/resume actually work: - we have to DRM_LOCK()/DRM_UNLOCK(), thus s/rad_dev/dev/ in a variable name - only call into radeon_cp_{stop,resume}() if the device is active with this my nforce4 dual core amd system is able to suspend/resume with both X and drm active. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm/dist/bsd-core/radeon_drv.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/drm/dist/bsd-core/radeon_drv.c diff -u src/sys/external/bsd/drm/dist/bsd-core/radeon_drv.c:1.8 src/sys/external/bsd/drm/dist/bsd-core/radeon_drv.c:1.9 --- src/sys/external/bsd/drm/dist/bsd-core/radeon_drv.c:1.8 Wed Feb 24 22:38:09 2010 +++ src/sys/external/bsd/drm/dist/bsd-core/radeon_drv.c Wed Mar 3 03:48:39 2010 @@ -137,24 +137,33 @@ static bool radeondrm_suspend(device_t self, const pmf_qual_t *qual) { - struct drm_device *rad_dev = device_private(self); + struct drm_device *dev = device_private(self); drm_radeon_cp_stop_t stop_args; + bool rv = true; stop_args.flush = stop_args.idle = 0; - if (radeon_cp_stop(rad_dev, &stop_args, rad_dev->lock.file_priv) != 0) - return false; + DRM_LOCK(); + if (drm_find_file_by_proc(dev, curlwp->l_proc) && + radeon_cp_stop(dev, &stop_args, dev->lock.file_priv) != 0) + rv = false; + DRM_UNLOCK(); - return true; + return rv; } static bool radeondrm_resume(device_t self, const pmf_qual_t *qual) { - struct drm_device *rad_dev = device_private(self); - if (radeon_cp_resume(rad_dev, NULL, NULL) != 0) - return false; + struct drm_device *dev = device_private(self); + bool rv = true; + + DRM_LOCK(); + if (drm_find_file_by_proc(dev, curlwp->l_proc) && + radeon_cp_resume(dev, NULL, NULL) != 0) + rv = false; + DRM_UNLOCK(); - return true; + return rv; } static int