locking, sched: Annotate thread_group_cputimer as raw
The thread_group_cputimer lock can be taken in atomic context and therefore cannot be preempted on -rt - annotate it. In mainline this change documents the low level nature of the lock - otherwise there's no functional difference. Lockdep and Sparse checking will work as usual. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Родитель
07354eb1a7
Коммит
ee30a7b2fc
|
@ -42,7 +42,7 @@ extern struct fs_struct init_fs;
|
|||
.cputimer = { \
|
||||
.cputime = INIT_CPUTIME, \
|
||||
.running = 0, \
|
||||
.lock = __SPIN_LOCK_UNLOCKED(sig.cputimer.lock), \
|
||||
.lock = __RAW_SPIN_LOCK_UNLOCKED(sig.cputimer.lock), \
|
||||
}, \
|
||||
.cred_guard_mutex = \
|
||||
__MUTEX_INITIALIZER(sig.cred_guard_mutex), \
|
||||
|
|
|
@ -510,7 +510,7 @@ struct task_cputime {
|
|||
struct thread_group_cputimer {
|
||||
struct task_cputime cputime;
|
||||
int running;
|
||||
spinlock_t lock;
|
||||
raw_spinlock_t lock;
|
||||
};
|
||||
|
||||
#include <linux/rwsem.h>
|
||||
|
@ -2566,7 +2566,7 @@ void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times);
|
|||
|
||||
static inline void thread_group_cputime_init(struct signal_struct *sig)
|
||||
{
|
||||
spin_lock_init(&sig->cputimer.lock);
|
||||
raw_spin_lock_init(&sig->cputimer.lock);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -274,7 +274,7 @@ void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times)
|
|||
struct task_cputime sum;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&cputimer->lock, flags);
|
||||
raw_spin_lock_irqsave(&cputimer->lock, flags);
|
||||
if (!cputimer->running) {
|
||||
cputimer->running = 1;
|
||||
/*
|
||||
|
@ -287,7 +287,7 @@ void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times)
|
|||
update_gt_cputime(&cputimer->cputime, &sum);
|
||||
}
|
||||
*times = cputimer->cputime;
|
||||
spin_unlock_irqrestore(&cputimer->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&cputimer->lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -997,9 +997,9 @@ static void stop_process_timers(struct signal_struct *sig)
|
|||
struct thread_group_cputimer *cputimer = &sig->cputimer;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&cputimer->lock, flags);
|
||||
raw_spin_lock_irqsave(&cputimer->lock, flags);
|
||||
cputimer->running = 0;
|
||||
spin_unlock_irqrestore(&cputimer->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&cputimer->lock, flags);
|
||||
}
|
||||
|
||||
static u32 onecputick;
|
||||
|
@ -1289,9 +1289,9 @@ static inline int fastpath_timer_check(struct task_struct *tsk)
|
|||
if (sig->cputimer.running) {
|
||||
struct task_cputime group_sample;
|
||||
|
||||
spin_lock(&sig->cputimer.lock);
|
||||
raw_spin_lock(&sig->cputimer.lock);
|
||||
group_sample = sig->cputimer.cputime;
|
||||
spin_unlock(&sig->cputimer.lock);
|
||||
raw_spin_unlock(&sig->cputimer.lock);
|
||||
|
||||
if (task_cputime_expired(&group_sample, &sig->cputime_expires))
|
||||
return 1;
|
||||
|
|
|
@ -282,10 +282,10 @@ static inline void account_group_user_time(struct task_struct *tsk,
|
|||
if (!cputimer->running)
|
||||
return;
|
||||
|
||||
spin_lock(&cputimer->lock);
|
||||
raw_spin_lock(&cputimer->lock);
|
||||
cputimer->cputime.utime =
|
||||
cputime_add(cputimer->cputime.utime, cputime);
|
||||
spin_unlock(&cputimer->lock);
|
||||
raw_spin_unlock(&cputimer->lock);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -306,10 +306,10 @@ static inline void account_group_system_time(struct task_struct *tsk,
|
|||
if (!cputimer->running)
|
||||
return;
|
||||
|
||||
spin_lock(&cputimer->lock);
|
||||
raw_spin_lock(&cputimer->lock);
|
||||
cputimer->cputime.stime =
|
||||
cputime_add(cputimer->cputime.stime, cputime);
|
||||
spin_unlock(&cputimer->lock);
|
||||
raw_spin_unlock(&cputimer->lock);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -330,7 +330,7 @@ static inline void account_group_exec_runtime(struct task_struct *tsk,
|
|||
if (!cputimer->running)
|
||||
return;
|
||||
|
||||
spin_lock(&cputimer->lock);
|
||||
raw_spin_lock(&cputimer->lock);
|
||||
cputimer->cputime.sum_exec_runtime += ns;
|
||||
spin_unlock(&cputimer->lock);
|
||||
raw_spin_unlock(&cputimer->lock);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче