1*53ee8cc1Swenshuai.xi #ifndef _LINUX_RESOURCE_H 2*53ee8cc1Swenshuai.xi #define _LINUX_RESOURCE_H 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi #include <linux/time.h> 5*53ee8cc1Swenshuai.xi 6*53ee8cc1Swenshuai.xi struct task_struct; 7*53ee8cc1Swenshuai.xi 8*53ee8cc1Swenshuai.xi /* 9*53ee8cc1Swenshuai.xi * Resource control/accounting header file for linux 10*53ee8cc1Swenshuai.xi */ 11*53ee8cc1Swenshuai.xi 12*53ee8cc1Swenshuai.xi /* 13*53ee8cc1Swenshuai.xi * Definition of struct rusage taken from BSD 4.3 Reno 14*53ee8cc1Swenshuai.xi * 15*53ee8cc1Swenshuai.xi * We don't support all of these yet, but we might as well have them.... 16*53ee8cc1Swenshuai.xi * Otherwise, each time we add new items, programs which depend on this 17*53ee8cc1Swenshuai.xi * structure will lose. This reduces the chances of that happening. 18*53ee8cc1Swenshuai.xi */ 19*53ee8cc1Swenshuai.xi #define RUSAGE_SELF 0 20*53ee8cc1Swenshuai.xi #define RUSAGE_CHILDREN (-1) 21*53ee8cc1Swenshuai.xi #define RUSAGE_BOTH (-2) /* sys_wait4() uses this */ 22*53ee8cc1Swenshuai.xi #define RUSAGE_THREAD 1 /* only the calling thread */ 23*53ee8cc1Swenshuai.xi 24*53ee8cc1Swenshuai.xi struct rusage { 25*53ee8cc1Swenshuai.xi struct timeval ru_utime; /* user time used */ 26*53ee8cc1Swenshuai.xi struct timeval ru_stime; /* system time used */ 27*53ee8cc1Swenshuai.xi long ru_maxrss; /* maximum resident set size */ 28*53ee8cc1Swenshuai.xi long ru_ixrss; /* integral shared memory size */ 29*53ee8cc1Swenshuai.xi long ru_idrss; /* integral unshared data size */ 30*53ee8cc1Swenshuai.xi long ru_isrss; /* integral unshared stack size */ 31*53ee8cc1Swenshuai.xi long ru_minflt; /* page reclaims */ 32*53ee8cc1Swenshuai.xi long ru_majflt; /* page faults */ 33*53ee8cc1Swenshuai.xi long ru_nswap; /* swaps */ 34*53ee8cc1Swenshuai.xi long ru_inblock; /* block input operations */ 35*53ee8cc1Swenshuai.xi long ru_oublock; /* block output operations */ 36*53ee8cc1Swenshuai.xi long ru_msgsnd; /* messages sent */ 37*53ee8cc1Swenshuai.xi long ru_msgrcv; /* messages received */ 38*53ee8cc1Swenshuai.xi long ru_nsignals; /* signals received */ 39*53ee8cc1Swenshuai.xi long ru_nvcsw; /* voluntary context switches */ 40*53ee8cc1Swenshuai.xi long ru_nivcsw; /* involuntary " */ 41*53ee8cc1Swenshuai.xi }; 42*53ee8cc1Swenshuai.xi 43*53ee8cc1Swenshuai.xi struct rlimit { 44*53ee8cc1Swenshuai.xi unsigned long rlim_cur; 45*53ee8cc1Swenshuai.xi unsigned long rlim_max; 46*53ee8cc1Swenshuai.xi }; 47*53ee8cc1Swenshuai.xi 48*53ee8cc1Swenshuai.xi #define PRIO_MIN (-20) 49*53ee8cc1Swenshuai.xi #define PRIO_MAX 20 50*53ee8cc1Swenshuai.xi 51*53ee8cc1Swenshuai.xi #define PRIO_PROCESS 0 52*53ee8cc1Swenshuai.xi #define PRIO_PGRP 1 53*53ee8cc1Swenshuai.xi #define PRIO_USER 2 54*53ee8cc1Swenshuai.xi 55*53ee8cc1Swenshuai.xi /* 56*53ee8cc1Swenshuai.xi * Limit the stack by to some sane default: root can always 57*53ee8cc1Swenshuai.xi * increase this limit if needed.. 8MB seems reasonable. 58*53ee8cc1Swenshuai.xi */ 59*53ee8cc1Swenshuai.xi #define _STK_LIM (8*1024*1024) 60*53ee8cc1Swenshuai.xi 61*53ee8cc1Swenshuai.xi /* 62*53ee8cc1Swenshuai.xi * GPG wants 32kB of mlocked memory, to make sure pass phrases 63*53ee8cc1Swenshuai.xi * and other sensitive information are never written to disk. 64*53ee8cc1Swenshuai.xi */ 65*53ee8cc1Swenshuai.xi #define MLOCK_LIMIT (8 * PAGE_SIZE) 66*53ee8cc1Swenshuai.xi 67*53ee8cc1Swenshuai.xi /* 68*53ee8cc1Swenshuai.xi * Due to binary compatibility, the actual resource numbers 69*53ee8cc1Swenshuai.xi * may be different for different linux versions.. 70*53ee8cc1Swenshuai.xi */ 71*53ee8cc1Swenshuai.xi #include <asm/resource.h> 72*53ee8cc1Swenshuai.xi 73*53ee8cc1Swenshuai.xi int getrusage(struct task_struct *p, int who, struct rusage *ru); 74*53ee8cc1Swenshuai.xi 75*53ee8cc1Swenshuai.xi #endif 76