From f348c0ac2236d2530bfdc55b067a7f291ebd1d47 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Fri, 16 Dec 2011 11:34:34 -0600 Subject: [PATCH] --- yaml --- r: 281396 b: refs/heads/master c: af69592aa098ff8cd640e8109ba946db3c1cdb4e h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/staging/omapdrm/omap_gem.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index f9c55cc36dd3..70ba52e30dd7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 510d4d32f25f49dedd7da88c29fdb4d0aada5815 +refs/heads/master: af69592aa098ff8cd640e8109ba946db3c1cdb4e diff --git a/trunk/drivers/staging/omapdrm/omap_gem.c b/trunk/drivers/staging/omapdrm/omap_gem.c index 96848913085f..63490f75350a 100644 --- a/trunk/drivers/staging/omapdrm/omap_gem.c +++ b/trunk/drivers/staging/omapdrm/omap_gem.c @@ -538,10 +538,22 @@ int omap_gem_roll(struct drm_gem_object *obj, uint32_t roll) return -EINVAL; } - mutex_lock(&obj->dev->struct_mutex); - omap_obj->roll = roll; + if (in_atomic() || mutex_is_locked(&obj->dev->struct_mutex)) { + /* this can get called from fbcon in atomic context.. so + * just ignore it and wait for next time called from + * interruptible context to update the PAT.. the result + * may be that user sees wrap-around instead of scrolling + * momentarily on the screen. If we wanted to be fancier + * we could perhaps schedule some workqueue work at this + * point. + */ + return 0; + } + + mutex_lock(&obj->dev->struct_mutex); + /* if we aren't mapped yet, we don't need to do anything */ if (omap_obj->block) { struct page **pages;