linux/kernel/slow-work.h
<<
>>
Prefs
   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