On Mon, 12 Apr 2010 10:05:00 +1000 Dave Airlie airlied@gmail.com wrote:
On Sat, Apr 10, 2010 at 8:11 AM, Jesse Barnes jbarnes@virtuousgeek.org wrote:
Needed for panic and kdb, since we need to avoid taking the mode_config mutex.
One comment below.
Signed-off-by: Jesse Barnes jbarnes@virtuousgeek.org
drivers/gpu/drm/drm_fb_helper.c | 42 +++++++++++++++++++++++++++++++++----- 1 files changed, 36 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index 6929f5b..962eadb 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -242,18 +242,22 @@ static int drm_fb_helper_parse_command_line(struct drm_fb_helper *fb_helper) return 0; }
-bool drm_fb_helper_force_kernel_mode(void) +bool drm_fb_helper_force_kernel_mode_locked(void) { int i = 0; bool ret, error = false; struct drm_fb_helper *helper;
- if (list_empty(&kernel_fb_helper_list))
- return false;
- struct drm_mode_set *mode_set;
- struct drm_crtc *crtc;
list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) { for (i = 0; i < helper->crtc_count; i++) {
- struct drm_mode_set *mode_set = &helper->crtc_info[i].mode_set;
- mode_set = &helper->crtc_info[i].mode_set;
- crtc = helper->crtc_info[i].mode_set.crtc;
- if (!crtc->enabled)
- continue;
ret = drm_crtc_helper_set_config(mode_set); if (ret) error = true; @@ -262,11 +266,37 @@ bool drm_fb_helper_force_kernel_mode(void) return error; }
+bool drm_fb_helper_force_kernel_mode(void) +{
- bool ret;
- struct drm_device *dev;
- struct drm_fb_helper *helper;
- struct drm_mode_set *mode_set;
- if (list_empty(&kernel_fb_helper_list)) {
- DRM_DEBUG_KMS("no fb helper list??\n");
- return false;
- }
- /* Get the DRM device */
- helper = list_first_entry(&kernel_fb_helper_list,
- struct drm_fb_helper,
- kernel_fb_list);
- mode_set = &helper->crtc_info[0].mode_set;
- dev = mode_set->crtc->dev;
- mutex_lock(&dev->mode_config.mutex);
- ret = drm_fb_helper_force_kernel_mode_locked();
- mutex_unlock(&dev->mode_config.mutex);
- return ret;
+}
int drm_fb_helper_panic(struct notifier_block *n, unsigned long ununsed, void *panic_str) { DRM_ERROR("panic occurred, switching back to text console\n");
- return drm_fb_helper_force_kernel_mode();
- drm_fb_helper_force_kernel_mode_locked();
Any reason to drop the return here?
not just remove the return 0?
Oh no; I don't think the return value is checked anywhere but we may as well return it anyway.