diff options
Diffstat (limited to 'kernel/timer.c')
| -rw-r--r-- | kernel/timer.c | 20 | 
1 files changed, 14 insertions, 6 deletions
diff --git a/kernel/timer.c b/kernel/timer.c index a297ffcf888..6ec7e7e0db4 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -861,7 +861,13 @@ EXPORT_SYMBOL(mod_timer);   *   * mod_timer_pinned() is a way to update the expire field of an   * active timer (if the timer is inactive it will be activated) - * and not allow the timer to be migrated to a different CPU. + * and to ensure that the timer is scheduled on the current CPU. + * + * Note that this does not prevent the timer from being migrated + * when the current CPU goes offline.  If this is a problem for + * you, use CPU-hotplug notifiers to handle it correctly, for + * example, cancelling the timer when the corresponding CPU goes + * offline.   *   * mod_timer_pinned(timer, expires) is equivalent to:   * @@ -1102,7 +1108,9 @@ static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long),  	 * warnings as well as problems when looking into  	 * timer->lockdep_map, make a copy and use that here.  	 */ -	struct lockdep_map lockdep_map = timer->lockdep_map; +	struct lockdep_map lockdep_map; + +	lockdep_copy_map(&lockdep_map, &timer->lockdep_map);  #endif  	/*  	 * Couple the lock chain with the lock chain at @@ -1427,25 +1435,25 @@ SYSCALL_DEFINE0(getppid)  SYSCALL_DEFINE0(getuid)  {  	/* Only we change this so SMP safe */ -	return current_uid(); +	return from_kuid_munged(current_user_ns(), current_uid());  }  SYSCALL_DEFINE0(geteuid)  {  	/* Only we change this so SMP safe */ -	return current_euid(); +	return from_kuid_munged(current_user_ns(), current_euid());  }  SYSCALL_DEFINE0(getgid)  {  	/* Only we change this so SMP safe */ -	return current_gid(); +	return from_kgid_munged(current_user_ns(), current_gid());  }  SYSCALL_DEFINE0(getegid)  {  	/* Only we change this so SMP safe */ -	return  current_egid(); +	return from_kgid_munged(current_user_ns(), current_egid());  }  #endif  | 
