1 /* Slow work private definitions
3 * Copyright (C) 2009 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public Licence
8 * as published by the Free Software Foundation; either version
9 * 2 of the Licence, or (at your option) any later version.
12 #define SLOW_WORK_CULL_TIMEOUT (5 * HZ) /* cull threads 5s after running out of
14 #define SLOW_WORK_OOM_TIMEOUT (5 * HZ) /* can't start new threads for 5s after
17 #define SLOW_WORK_THREAD_LIMIT 255 /* abs maximum number of slow-work threads */
22 #ifdef CONFIG_SLOW_WORK_DEBUG
23 extern struct slow_work
*slow_work_execs
[];
24 extern pid_t slow_work_pids
[];
25 extern rwlock_t slow_work_execs_lock
;
28 extern struct list_head slow_work_queue
;
29 extern struct list_head vslow_work_queue
;
30 extern spinlock_t slow_work_queue_lock
;
35 #ifdef CONFIG_SLOW_WORK_DEBUG
36 extern const struct file_operations slow_work_runqueue_fops
;
38 extern void slow_work_new_thread_desc(struct slow_work
*, struct seq_file
*);
44 static inline void slow_work_set_thread_pid(int id
, pid_t pid
)
46 #ifdef CONFIG_SLOW_WORK_DEBUG
47 slow_work_pids
[id
] = pid
;
51 static inline void slow_work_mark_time(struct slow_work
*work
)
53 #ifdef CONFIG_SLOW_WORK_DEBUG
54 work
->mark
= CURRENT_TIME
;
58 static inline void slow_work_begin_exec(int id
, struct slow_work
*work
)
60 #ifdef CONFIG_SLOW_WORK_DEBUG
61 slow_work_execs
[id
] = work
;
65 static inline void slow_work_end_exec(int id
, struct slow_work
*work
)
67 #ifdef CONFIG_SLOW_WORK_DEBUG
68 write_lock(&slow_work_execs_lock
);
69 slow_work_execs
[id
] = NULL
;
70 write_unlock(&slow_work_execs_lock
);