1/* Slow work private definitions 2 * 3 * Copyright (C) 2009 Red Hat, Inc. All Rights Reserved. 4 * Written by David Howells (dhowells@redhat.com) 5 * 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. 10 */ 11 12#define SLOW_WORK_CULL_TIMEOUT (5 * HZ) /* cull threads 5s after running out of 13 * things to do */ 14#define SLOW_WORK_OOM_TIMEOUT (5 * HZ) /* can't start new threads for 5s after 15 * OOM */ 16 17#define SLOW_WORK_THREAD_LIMIT 255 /* abs maximum number of slow-work threads */ 18 19/* 20 * slow-work.c 21 */ 22#ifdef CONFIG_SLOW_WORK_DEBUG 23extern struct slow_work *slow_work_execs[]; 24extern pid_t slow_work_pids[]; 25extern rwlock_t slow_work_execs_lock; 26#endif 27 28extern struct list_head slow_work_queue; 29extern struct list_head vslow_work_queue; 30extern spinlock_t slow_work_queue_lock; 31 32/* 33 * slow-work-debugfs.c 34 */ 35#ifdef CONFIG_SLOW_WORK_DEBUG 36extern const struct file_operations slow_work_runqueue_fops; 37 38extern void slow_work_new_thread_desc(struct slow_work *, struct seq_file *); 39#endif 40 41/* 42 * Helper functions 43 */ 44static inline void slow_work_set_thread_pid(int id, pid_t pid) 45{ 46#ifdef CONFIG_SLOW_WORK_PROC 47 slow_work_pids[id] = pid; 48#endif 49} 50 51static inline void slow_work_mark_time(struct slow_work *work) 52{ 53#ifdef CONFIG_SLOW_WORK_PROC 54 work->mark = CURRENT_TIME; 55#endif 56} 57 58static inline void slow_work_begin_exec(int id, struct slow_work *work) 59{ 60#ifdef CONFIG_SLOW_WORK_PROC 61 slow_work_execs[id] = work; 62#endif 63} 64 65static inline void slow_work_end_exec(int id, struct slow_work *work) 66{ 67#ifdef CONFIG_SLOW_WORK_PROC 68 write_lock(&slow_work_execs_lock); 69 slow_work_execs[id] = NULL; 70 write_unlock(&slow_work_execs_lock); 71#endif 72} 73