Messages in this thread | | | Date | Mon, 12 Apr 2010 10:05:00 +1000 | Subject | Re: [PATCH] drm: add locked variant of drm_fb_helper_force_kernel_mode | From | Dave Airlie <> |
| |
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?
Dave.
> return 0; > } > EXPORT_SYMBOL(drm_fb_helper_panic); > -- > 1.6.6.1 > > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |