|
@@ -16,16 +16,15 @@ static inline int frozen(struct task_struct *p)
|
|
|
*/
|
|
|
static inline int freezing(struct task_struct *p)
|
|
|
{
|
|
|
- return p->flags & PF_FREEZE;
|
|
|
+ return test_tsk_thread_flag(p, TIF_FREEZE);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Request that a process be frozen
|
|
|
- * FIXME: SMP problem. We may not modify other process' flags!
|
|
|
*/
|
|
|
static inline void freeze(struct task_struct *p)
|
|
|
{
|
|
|
- p->flags |= PF_FREEZE;
|
|
|
+ set_tsk_thread_flag(p, TIF_FREEZE);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -33,7 +32,7 @@ static inline void freeze(struct task_struct *p)
|
|
|
*/
|
|
|
static inline void do_not_freeze(struct task_struct *p)
|
|
|
{
|
|
|
- p->flags &= ~PF_FREEZE;
|
|
|
+ clear_tsk_thread_flag(p, TIF_FREEZE);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -54,7 +53,9 @@ static inline int thaw_process(struct task_struct *p)
|
|
|
*/
|
|
|
static inline void frozen_process(struct task_struct *p)
|
|
|
{
|
|
|
- p->flags = (p->flags & ~PF_FREEZE) | PF_FROZEN;
|
|
|
+ p->flags |= PF_FROZEN;
|
|
|
+ wmb();
|
|
|
+ clear_tsk_thread_flag(p, TIF_FREEZE);
|
|
|
}
|
|
|
|
|
|
extern void refrigerator(void);
|