On Sunday 18 June 2006 18:26, Peter Williams wrote:
> 3. Thanks to suggestions from Con Kolivas with respect to alternative
> methods to reduce the possibility of a task being starved of CPU while
> holding an important system resource, enforcement of caps is now
> quite strict.  However, there will still be occasions where caps may be
> exceeded due to this mechanism vetoing enforcement.

I hate to do this to you again but the mutexes held count advice I gave was 
slightly off :|
>  int fastcall __sched mutex_lock_interruptible(struct mutex *lock)
>  {
> +     int ret;
> +
>       might_sleep();
> -     return __mutex_fastpath_lock_retval
> +     ret = __mutex_fastpath_lock_retval
>                       (&lock->count, __mutex_lock_interruptible_slowpath);
> +
> +     if (!ret)
> +             inc_mutex_count();
> +
> +     return ret;
>  }
>
>  EXPORT_SYMBOL(mutex_lock_interruptible);
> @@ -357,8 +381,13 @@ static inline int __mutex_trylock_slowpa
>   */
>  int fastcall __sched mutex_trylock(struct mutex *lock)
>  {
> -     return __mutex_fastpath_trylock(&lock->count,
> +     int ret = __mutex_fastpath_trylock(&lock->count,
>                                       __mutex_trylock_slowpath);
> +
> +     if (!ret)
> +             inc_mutex_count();
> +
> +     return ret;

See my track-mutexes-1.patch I recently posted.

 int fastcall __sched mutex_lock_interruptible(struct mutex *lock)
 {
+       int ret;
+
        might_sleep();
-       return __mutex_fastpath_lock_retval
+       ret = __mutex_fastpath_lock_retval
                        (&lock->count, __mutex_lock_interruptible_slowpath);
+       if (likely(!ret))
+               inc_mutex_count();
+       return ret;
 }
 
 EXPORT_SYMBOL(mutex_lock_interruptible);
@@ -308,8 +325,12 @@ static inline int __mutex_trylock_slowpa
  */
 int fastcall mutex_trylock(struct mutex *lock)
 {
-       return __mutex_fastpath_trylock(&lock->count,
+       int ret = __mutex_fastpath_trylock(&lock->count,
                                        __mutex_trylock_slowpath);
+
+       if (likely(ret))
+               inc_mutex_count();
+       return ret;
 }

Note the if !ret in mutex_lock_interruptible vs the if ret in mutex_trylock(

I really should have given you the original debugging code that went with it, 
sorry.

-- 
-ck


_______________________________________________
ckrm-tech mailing list
https://lists.sourceforge.net/lists/listinfo/ckrm-tech

Reply via email to