| /* Slow work private definitions | |
| * | |
| * Copyright (C) 2009 Red Hat, Inc. All Rights Reserved. | |
| * Written by David Howells (dhowells@redhat.com) | |
| * | |
| * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public Licence | |
| * as published by the Free Software Foundation; either version | |
| * 2 of the Licence, or (at your option) any later version. | |
| */ | |
| #define SLOW_WORK_CULL_TIMEOUT (5 * HZ) /* cull threads 5s after running out of | |
| * things to do */ | |
| #define SLOW_WORK_OOM_TIMEOUT (5 * HZ) /* can't start new threads for 5s after | |
| * OOM */ | |
| #define SLOW_WORK_THREAD_LIMIT 255 /* abs maximum number of slow-work threads */ | |
| /* | |
| * slow-work.c | |
| */ | |
| #ifdef CONFIG_SLOW_WORK_DEBUG | |
| extern struct slow_work *slow_work_execs[]; | |
| extern pid_t slow_work_pids[]; | |
| extern rwlock_t slow_work_execs_lock; | |
| #endif | |
| extern struct list_head slow_work_queue; | |
| extern struct list_head vslow_work_queue; | |
| extern spinlock_t slow_work_queue_lock; | |
| /* | |
| * slow-work-debugfs.c | |
| */ | |
| #ifdef CONFIG_SLOW_WORK_DEBUG | |
| extern const struct file_operations slow_work_runqueue_fops; | |
| extern void slow_work_new_thread_desc(struct slow_work *, struct seq_file *); | |
| #endif | |
| /* | |
| * Helper functions | |
| */ | |
| static inline void slow_work_set_thread_pid(int id, pid_t pid) | |
| { | |
| #ifdef CONFIG_SLOW_WORK_DEBUG | |
| slow_work_pids[id] = pid; | |
| #endif | |
| } | |
| static inline void slow_work_mark_time(struct slow_work *work) | |
| { | |
| #ifdef CONFIG_SLOW_WORK_DEBUG | |
| work->mark = CURRENT_TIME; | |
| #endif | |
| } | |
| static inline void slow_work_begin_exec(int id, struct slow_work *work) | |
| { | |
| #ifdef CONFIG_SLOW_WORK_DEBUG | |
| slow_work_execs[id] = work; | |
| #endif | |
| } | |
| static inline void slow_work_end_exec(int id, struct slow_work *work) | |
| { | |
| #ifdef CONFIG_SLOW_WORK_DEBUG | |
| write_lock(&slow_work_execs_lock); | |
| slow_work_execs[id] = NULL; | |
| write_unlock(&slow_work_execs_lock); | |
| #endif | |
| } |