freezer.h 1.8 KB
Newer Older
1 2
/* Freezer declarations */

3 4
#include <linux/sched.h>

5 6 7 8 9 10 11 12 13 14 15 16 17 18
#ifdef CONFIG_PM
/*
 * Check if a process has been frozen
 */
static inline int frozen(struct task_struct *p)
{
	return p->flags & PF_FROZEN;
}

/*
 * Check if there is a request to freeze a process
 */
static inline int freezing(struct task_struct *p)
{
19
	return test_tsk_thread_flag(p, TIF_FREEZE);
20 21 22 23 24 25 26
}

/*
 * Request that a process be frozen
 */
static inline void freeze(struct task_struct *p)
{
27
	set_tsk_thread_flag(p, TIF_FREEZE);
28 29 30 31 32 33 34
}

/*
 * Sometimes we may need to cancel the previous 'freeze' request
 */
static inline void do_not_freeze(struct task_struct *p)
{
35
	clear_tsk_thread_flag(p, TIF_FREEZE);
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
}

/*
 * Wake up a frozen process
 */
static inline int thaw_process(struct task_struct *p)
{
	if (frozen(p)) {
		p->flags &= ~PF_FROZEN;
		wake_up_process(p);
		return 1;
	}
	return 0;
}

/*
 * freezing is complete, mark process as frozen
 */
static inline void frozen_process(struct task_struct *p)
{
56 57 58
	p->flags |= PF_FROZEN;
	wmb();
	clear_tsk_thread_flag(p, TIF_FREEZE);
59 60 61 62
}

extern void refrigerator(void);
extern int freeze_processes(void);
63
extern void thaw_processes(void);
64 65 66 67 68 69 70 71 72

static inline int try_to_freeze(void)
{
	if (freezing(current)) {
		refrigerator();
		return 1;
	} else
		return 0;
}
73 74 75

extern void thaw_some_processes(int all);

76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
#else
static inline int frozen(struct task_struct *p) { return 0; }
static inline int freezing(struct task_struct *p) { return 0; }
static inline void freeze(struct task_struct *p) { BUG(); }
static inline int thaw_process(struct task_struct *p) { return 1; }
static inline void frozen_process(struct task_struct *p) { BUG(); }

static inline void refrigerator(void) {}
static inline int freeze_processes(void) { BUG(); return 0; }
static inline void thaw_processes(void) {}

static inline int try_to_freeze(void) { return 0; }


#endif