diff options
Diffstat (limited to 'drivers/gpu/drm/msm/msm_gem_shrinker.c')
| -rw-r--r-- | drivers/gpu/drm/msm/msm_gem_shrinker.c | 27 | 
1 files changed, 9 insertions, 18 deletions
diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c index 192b2d3a79cb..ab1dd020eb04 100644 --- a/drivers/gpu/drm/msm/msm_gem_shrinker.c +++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c @@ -18,33 +18,24 @@  #include "msm_drv.h"  #include "msm_gem.h" -static bool mutex_is_locked_by(struct mutex *mutex, struct task_struct *task) +static bool msm_gem_shrinker_lock(struct drm_device *dev, bool *unlock)  { -	if (!mutex_is_locked(mutex)) +	switch (mutex_trylock_recursive(&dev->struct_mutex)) { +	case MUTEX_TRYLOCK_FAILED:  		return false; -#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_MUTEXES) -	return mutex->owner == task; -#else -	/* Since UP may be pre-empted, we cannot assume that we own the lock */ -	return false; -#endif -} +	case MUTEX_TRYLOCK_SUCCESS: +		*unlock = true; +		return true; -static bool msm_gem_shrinker_lock(struct drm_device *dev, bool *unlock) -{ -	if (!mutex_trylock(&dev->struct_mutex)) { -		if (!mutex_is_locked_by(&dev->struct_mutex, current)) -			return false; +	case MUTEX_TRYLOCK_RECURSIVE:  		*unlock = false; -	} else { -		*unlock = true; +		return true;  	} -	return true; +	BUG();  } -  static unsigned long  msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)  {  |