linux/include/linux/delayacct.h
<<
>>
Prefs
   1/* delayacct.h - per-task delay accounting
   2 *
   3 * Copyright (C) Shailabh Nagar, IBM Corp. 2006
   4 *
   5 * This program is free software;  you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License as published by
   7 * the Free Software Foundation; either version 2 of the License, or
   8 * (at your option) any later version.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY;  without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
  13 * the GNU General Public License for more details.
  14 *
  15 */
  16
  17#ifndef _LINUX_DELAYACCT_H
  18#define _LINUX_DELAYACCT_H
  19
  20#include <linux/sched.h>
  21#include <linux/taskstats_kern.h>
  22
  23/*
  24 * Per-task flags relevant to delay accounting
  25 * maintained privately to avoid exhausting similar flags in sched.h:PF_*
  26 * Used to set current->delays->flags
  27 */
  28#define DELAYACCT_PF_SWAPIN     0x00000001      /* I am doing a swapin */
  29
  30#ifdef CONFIG_TASK_DELAY_ACCT
  31
  32extern int delayacct_on;        /* Delay accounting turned on/off */
  33extern kmem_cache_t *delayacct_cache;
  34extern void delayacct_init(void);
  35extern void __delayacct_tsk_init(struct task_struct *);
  36extern void __delayacct_tsk_exit(struct task_struct *);
  37extern void __delayacct_blkio_start(void);
  38extern void __delayacct_blkio_end(void);
  39extern int __delayacct_add_tsk(struct taskstats *, struct task_struct *);
  40extern __u64 __delayacct_blkio_ticks(struct task_struct *);
  41
  42static inline void delayacct_set_flag(int flag)
  43{
  44        if (current->delays)
  45                current->delays->flags |= flag;
  46}
  47
  48static inline void delayacct_clear_flag(int flag)
  49{
  50        if (current->delays)
  51                current->delays->flags &= ~flag;
  52}
  53
  54static inline void delayacct_tsk_init(struct task_struct *tsk)
  55{
  56        /* reinitialize in case parent's non-null pointer was dup'ed*/
  57        tsk->delays = NULL;
  58        if (delayacct_on)
  59                __delayacct_tsk_init(tsk);
  60}
  61
  62/* Free tsk->delays. Called from bad fork and __put_task_struct
  63 * where there's no risk of tsk->delays being accessed elsewhere
  64 */
  65static inline void delayacct_tsk_free(struct task_struct *tsk)
  66{
  67        if (tsk->delays)
  68                kmem_cache_free(delayacct_cache, tsk->delays);
  69        tsk->delays = NULL;
  70}
  71
  72static inline void delayacct_blkio_start(void)
  73{
  74        if (current->delays)
  75                __delayacct_blkio_start();
  76}
  77
  78static inline void delayacct_blkio_end(void)
  79{
  80        if (current->delays)
  81                __delayacct_blkio_end();
  82}
  83
  84static inline int delayacct_add_tsk(struct taskstats *d,
  85                                        struct task_struct *tsk)
  86{
  87        if (!delayacct_on || !tsk->delays)
  88                return 0;
  89        return __delayacct_add_tsk(d, tsk);
  90}
  91
  92static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk)
  93{
  94        if (tsk->delays)
  95                return __delayacct_blkio_ticks(tsk);
  96        return 0;
  97}
  98
  99#else
 100static inline void delayacct_set_flag(int flag)
 101{}
 102static inline void delayacct_clear_flag(int flag)
 103{}
 104static inline void delayacct_init(void)
 105{}
 106static inline void delayacct_tsk_init(struct task_struct *tsk)
 107{}
 108static inline void delayacct_tsk_free(struct task_struct *tsk)
 109{}
 110static inline void delayacct_blkio_start(void)
 111{}
 112static inline void delayacct_blkio_end(void)
 113{}
 114static inline int delayacct_add_tsk(struct taskstats *d,
 115                                        struct task_struct *tsk)
 116{ return 0; }
 117static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk)
 118{ return 0; }
 119#endif /* CONFIG_TASK_DELAY_ACCT */
 120
 121#endif
 122
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.