提交 af69592a 编写于 作者: R Rob Clark 提交者: Greg Kroah-Hartman

staging: drm/omap: avoid aquiring mutex in atomic context (v2)

omap_gem_roll() could be called by fbcon in atomic context or when
struct_mutext is held.  Avoid aquiring mutex (deadlock), or calling
tiler_pin() (which itself is not safe for atomic context) in these
cases.
Signed-off-by: NRob Clark <rob@ti.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 510d4d32
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册