2.6 must-fix list - kernel error reporting
RFC PATCH 2/2 2.6 must-fix list - kernel error reporting
This patch is described in the accompanying post.
Jim Keniston
IBM Linux Technology Center
include/linux/evlog.h +109 -0
@@ -0,0 +1,109 @@ +/* +* Linux Event Logging +* Copyright (c) International Business Machines Corp., 2001 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* Please send e-mail to [email protected] if you have +* questions or comments. +* +* Project Website: http://evlog.sourceforge.net/ +*/ + +#ifndef _LINUX_EVLOG_H +#define _LINUX_EVLOG_H + +#include <stdarg.h> +#include <linux/types.h> +#include <asm/types.h> + +/* Values for log_flags member */ +#define EVL_TRUNCATE 0x1 +#define EVL_KERNEL_EVENT 0x2 +#define EVL_INTERRUPT 0x10/* Logged from interrupt context */ +#define EVL_PRINTK 0x20/* Strip leading <n> when formatting */ +#define EVL_EVTYCRC 0x40/* Daemon will set event type = CRC */ +/* of format string. */ + +/* Formats for optional portion of record. */ +#define EVL_NODATA 0 +#define EVL_BINARY 1 +#define EVL_STRING 2 +#define EVL_PRINTF 3 + +/* Maximum length of variable portion of record */ +#define EVL_ENTRY_MAXLEN (8 * 1024) + +/* Facility (e.g., driver) names are truncated to 15+null. */ +#define FACILITY_MAXLEN 16 + +/* +* struct kern_log_entry - kernel record header +* Each record sent to group KERROR_GROUP_EVLOG begins with this header. +*/ +struct kern_log_entry { +__u16 log_kmagic;/* always LOGREC_KMAGIC */ +__u16 log_kversion;/* which version of this struct? */ +char log_facility[FACILITY_MAXLEN ];/* e.g., driver name */ +__u16 log_size;/* # bytes in variable part of record */ +__s8 log_format;/* BINARY, STRING, PRINTF, NODATA */ +__s8 log_severity;/* DEBUG, INFO, NOTICE, WARN, etc. */ +__s32 log_event_type;/* facility-specific event ID */ +uid_t log_uid;/* event context... */ +gid_t log_gid; +pid_t log_pid; +pid_t log_pgrp; +__u32 log_flags;/* EVL_TRUNCATE, etc. */ +__s32 log_processor;/* CPU ID */ +}; + +#define LOGREC_KMAGIC 0x7af8 +#define LOGREC_KVERSION 3 + +#ifdef __KERNEL__ +/* +* severities, AKA priorities +*/ +#define LOG_EMERG 0/* system is unusable */ +#define LOG_ALERT 1/* action must be taken immediately */ +#define LOG_CRIT 2/* critical conditions */ +#define LOG_ERR 3/* error conditions */ +#define LOG_WARNING 4/* warning conditions */ +#define LOG_NOTICE 5/* normal but significant condition */ +#define LOG_INFO 6/* informational */ +#define LOG_DEBUG 7/* debug-level messages */ + +#ifdef CONFIG_NET +extern int evl_write (const char *facility,int event_type, +int severity,const void *buf,size_t len,int format); +extern int evl_printf (const char *facility,int event_type,int sev, +const char *fmt, ...); +extern int evl_vprintf (const char *facility,int event_type,int sev, +const char *fmt,va_list args); +#else /* ! CONFIG_NET */ +static inline int evl_write (const char *facility,int event_type, +int severity,const void *buf,size_t len,int format) + {return -ENOSYS ; } +static inline int evl_printf (const char *facility,int event_type,int sev, +const char *fmt, ...); + {return -ENOSYS ; } +static inline int evl_vprintf (const char *facility,int event_type,int sev, +const char *fmt,va_list args) + {return -ENOSYS ; } +#endif /* CONFIG_NET */ + +#endif /* __KERNEL__ */ + +#endif /* _LINUX_EVLOG_H */
kernel/Makefile +1 -0
@@ -19,6 +19,7 @@ obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o obj-$(CONFIG_SOFTWARE_SUSPEND) += suspend.o obj-$(CONFIG_COMPAT) += compat.o +obj-$(CONFIG_NET) += evlog.o ifneq ($(CONFIG_IA64),y) # According to Alan Modra <[email protected]>, the -fno-omit-frame-pointer is
kernel/evlog.c +453 -0
453 lines not on this page · raw message