#ifndef _LINUX_KERNEL_H #define _LINUX_KERNEL_H /* * 'kernel.h' contains some often-used function prototypes etc */ #ifdef __KERNEL__ #include <stdarg.h> #include <linux/linkage.h> /* Optimization barrier */ /* The "volatile" is due to gcc bugs */ #define barrier() __asm__ __volatile__("": : :"memory") #define INT_MAX ((int)(~0U>>1)) #define UINT_MAX (~0U) #define LONG_MAX ((long)(~0UL>>1)) #define ULONG_MAX (~0UL) #define STACK_MAGIC 0xdeadbeef #define KERN_EMERG "<0>" /* system is unusable */ #define KERN_ALERT "<1>" /* action must be taken immediately */ #define KERN_CRIT "<2>" /* critical conditions */ #define KERN_ERR "<3>" /* error conditions */ #define KERN_WARNING "<4>" /* warning conditions */ #define KERN_NOTICE "<5>" /* normal but significant condition */ #define KERN_INFO "<6>" /* informational */ #define KERN_DEBUG "<7>" /* debug-level messages */ # define NORET_TYPE /**/ # define ATTRIB_NORET __attribute__((noreturn)) # define NORET_AND noreturn, #ifdef __i386__ #define FASTCALL(x) x __attribute__((regparm(3))) #else #define FASTCALL(x) x #endif extern void math_error(void); extern struct notifier_block *panic_notifier_list; NORET_TYPE void panic(const char * fmt, ...) __attribute__ ((NORET_AND format (printf, 1, 2))); NORET_TYPE void do_exit(long error_code) ATTRIB_NORET; extern unsigned long simple_strtoul(const char *,char **,unsigned int); extern long simple_strtol(const char *,char **,unsigned int); extern char *get_options(char *str, int *ints); extern int sprintf(char *buf, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))); extern int vsprintf(char *buf, const char *, va_list) __attribute__ ((format (printf, 2, 0))); extern int _vsnprintf(char *buf, int n, const char *, va_list) __attribute__ ((format (printf, 3, 0))); extern int session_of_pgrp(int pgrp); asmlinkage int printk(const char * fmt, ...) __attribute__ ((format (printf, 1, 2))); #if DEBUG #define pr_debug(fmt,arg...) \ printk(KERN_DEBUG fmt,##arg) #else #define pr_debug(fmt,arg...) \ do { } while (0) #endif #define pr_info(fmt,arg...) \ printk(KERN_INFO fmt,##arg) /* * Display an IP address in readable format. */ #define NIPQUAD(addr) \ ((unsigned char *)&addr)[0], \ ((unsigned char *)&addr)[1], \ ((unsigned char *)&addr)[2], \ ((unsigned char *)&addr)[3] #define security_alert(normal_msg, flood_msg, args...) \ ({ \ static unsigned long warning_time = 0, no_flood_yet = 0; \ static spinlock_t security_alert_lock = SPIN_LOCK_UNLOCKED; \ \ spin_lock(&security_alert_lock); \ \ /* Make sure at least one minute passed since the last warning logged */ \ if (!warning_time || jiffies - warning_time > 60 * HZ) { \ warning_time = jiffies; no_flood_yet = 1; \ printk(KERN_ALERT "Security: " normal_msg "\n", ## args); \ } else if (no_flood_yet) { \ warning_time = jiffies; no_flood_yet = 0; \ printk(KERN_ALERT "Security: more " flood_msg \ ", logging disabled for a minute\n"); \ } \ \ spin_unlock(&security_alert_lock); \ }) #endif /* __KERNEL__ */ #define SI_LOAD_SHIFT 16 struct sysinfo { long uptime; /* Seconds since boot */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* Total usable main memory size */ unsigned long freeram; /* Available memory size */ unsigned long sharedram; /* Amount of shared memory */ unsigned long bufferram; /* Memory used by buffers */ unsigned long totalswap; /* Total swap space size */ unsigned long freeswap; /* swap space still available */ unsigned short procs; /* Number of current processes */ char _f[22]; /* Pads structure to 64 bytes */ }; #endif