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#define DELAYACCT_PF_BLKIO      0x00000002      /* I am waiting on IO */
  30
  31#ifdef CONFIG_TASK_DELAY_ACCT
  32
  33extern int delayacct_on;        /* Delay accounting turned on/off */
  34extern struct kmem_cache *delayacct_cache;
  35extern void delayacct_init(void);
  36extern void __delayacct_tsk_init(struct task_struct *);
  37extern void __delayacct_tsk_exit(struct task_struct *);
  38extern void __delayacct_blkio_start(void);
  39extern void __delayacct_blkio_end(void);
  40extern int __delayacct_add_tsk(struct taskstats *, struct task_struct *);
  41extern __u64 __delayacct_blkio_ticks(struct task_struct *);
  42
  43static inline int delayacct_is_task_waiting_on_io(struct task_struct *p)
  44{
  45        if (p->delays)
  46                return (p->delays->flags & DELAYACCT_PF_BLKIO);
  47        else
  48                return 0;
  49}
  50
  51static inline void delayacct_set_flag(int flag)
  52{
  53        if (current->delays)
  54                current->delays->flags |= flag;
  55}
  56
  57static inline void delayacct_clear_flag(int flag)
  58{
  59        if (current->delays)
  60                current->delays->flags &= ~flag;
  61}
  62
  63static inline void delayacct_tsk_init(struct task_struct *tsk)
  64{
  65        /* reinitialize in case parent's non-null pointer was dup'ed*/
  66        tsk->delays = NULL;
  67        if (delayacct_on)
  68                __delayacct_tsk_init(tsk);
  69}
  70
  71/* Free tsk->delays. Called from bad fork and __put_task_struct
  72 * where there's no risk of tsk->delays being accessed elsewhere
  73 */
  74static inline void delayacct_tsk_free(struct task_struct *tsk)
  75{
  76        if (tsk->delays)
  77                kmem_cache_free(delayacct_cache, tsk->delays);
  78        tsk->delays = NULL;
  79}
  80
  81static inline void delayacct_blkio_start(void)
  82{
  83        delayacct_set_flag(DELAYACCT_PF_BLKIO);
  84        if (current->delays)
  85                __delayacct_blkio_start();
  86}
  87
  88static inline void delayacct_blkio_end(void)
  89{
  90        if (current->delays)
  91                __delayacct_blkio_end();
  92        delayacct_clear_flag(DELAYACCT_PF_BLKIO);
  93}
  94
  95static inline int delayacct_add_tsk(struct taskstats *d,
  96                                        struct task_struct *tsk)
  97{
  98        if (!delayacct_on || !tsk->delays)
  99                return 0;
 100        return __delayacct_add_tsk(d, tsk);
 101}
 102
 103static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk)
 104{
 105        if (tsk->delays)
 106                return __delayacct_blkio_ticks(tsk);
 107        return 0;
 108}
 109
 110#else
 111static inline void delayacct_set_flag(int flag)
 112{}
 113static inline void delayacct_clear_flag(int flag)
 114{}
 115static inline void delayacct_init(void)
 116{}
 117static inline void delayacct_tsk_init(struct task_struct *tsk)
 118{}
 119static inline void delayacct_tsk_free(struct task_struct *tsk)
 120{}
 121static inline void delayacct_blkio_start(void)
 122{}
 123static inline void delayacct_blkio_end(void)
 124{}
 125static inline int delayacct_add_tsk(struct taskstats *d,
 126                                        struct task_struct *tsk)
 127{ return 0; }
 128static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk)
 129{ return 0; }
 130static inline int delayacct_is_task_waiting_on_io(struct task_struct *p)
 131{ return 0; }
 132#endif /* CONFIG_TASK_DELAY_ACCT */
 133
 134#endif
 135
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.