Messages in this thread | ![/](/images/icornerl.gif) | | Date | Mon, 12 Apr 2010 08:46:13 -0700 | From | Jesse Barnes <> | Subject | Re: [PATCH] drm: add locked variant of drm_fb_helper_force_kernel_mode |
| |
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.
-- Jesse Barnes, Intel Open Source Technology Center -- 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/
| ![\](/images/icornerr.gif) |