kmsg_dump.h (2772B)
1/* 2 * linux/include/kmsg_dump.h 3 * 4 * Copyright (C) 2009 Net Insight AB 5 * 6 * Author: Simon Kagstrom <simon.kagstrom@netinsight.net> 7 * 8 * This file is subject to the terms and conditions of the GNU General Public 9 * License. See the file COPYING in the main directory of this archive 10 * for more details. 11 */ 12#ifndef _LINUX_KMSG_DUMP_H 13#define _LINUX_KMSG_DUMP_H 14 15#include <linux/errno.h> 16#include <linux/list.h> 17 18/* 19 * Keep this list arranged in rough order of priority. Anything listed after 20 * KMSG_DUMP_OOPS will not be logged by default unless printk.always_kmsg_dump 21 * is passed to the kernel. 22 */ 23enum kmsg_dump_reason { 24 KMSG_DUMP_UNDEF, 25 KMSG_DUMP_PANIC, 26 KMSG_DUMP_OOPS, 27 KMSG_DUMP_EMERG, 28 KMSG_DUMP_SHUTDOWN, 29 KMSG_DUMP_MAX 30}; 31 32/** 33 * struct kmsg_dump_iter - iterator for retrieving kernel messages 34 * @cur_seq: Points to the oldest message to dump 35 * @next_seq: Points after the newest message to dump 36 */ 37struct kmsg_dump_iter { 38 u64 cur_seq; 39 u64 next_seq; 40}; 41 42/** 43 * struct kmsg_dumper - kernel crash message dumper structure 44 * @list: Entry in the dumper list (private) 45 * @dump: Call into dumping code which will retrieve the data with 46 * through the record iterator 47 * @max_reason: filter for highest reason number that should be dumped 48 * @registered: Flag that specifies if this is already registered 49 */ 50struct kmsg_dumper { 51 struct list_head list; 52 void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason); 53 enum kmsg_dump_reason max_reason; 54 bool registered; 55}; 56 57#ifdef CONFIG_PRINTK 58void kmsg_dump(enum kmsg_dump_reason reason); 59 60bool kmsg_dump_get_line(struct kmsg_dump_iter *iter, bool syslog, 61 char *line, size_t size, size_t *len); 62 63bool kmsg_dump_get_buffer(struct kmsg_dump_iter *iter, bool syslog, 64 char *buf, size_t size, size_t *len_out); 65 66void kmsg_dump_rewind(struct kmsg_dump_iter *iter); 67 68int kmsg_dump_register(struct kmsg_dumper *dumper); 69 70int kmsg_dump_unregister(struct kmsg_dumper *dumper); 71 72const char *kmsg_dump_reason_str(enum kmsg_dump_reason reason); 73#else 74static inline void kmsg_dump(enum kmsg_dump_reason reason) 75{ 76} 77 78static inline bool kmsg_dump_get_line(struct kmsg_dump_iter *iter, bool syslog, 79 const char *line, size_t size, size_t *len) 80{ 81 return false; 82} 83 84static inline bool kmsg_dump_get_buffer(struct kmsg_dump_iter *iter, bool syslog, 85 char *buf, size_t size, size_t *len) 86{ 87 return false; 88} 89 90static inline void kmsg_dump_rewind(struct kmsg_dump_iter *iter) 91{ 92} 93 94static inline int kmsg_dump_register(struct kmsg_dumper *dumper) 95{ 96 return -EINVAL; 97} 98 99static inline int kmsg_dump_unregister(struct kmsg_dumper *dumper) 100{ 101 return -EINVAL; 102} 103 104static inline const char *kmsg_dump_reason_str(enum kmsg_dump_reason reason) 105{ 106 return "Disabled"; 107} 108#endif 109 110#endif /* _LINUX_KMSG_DUMP_H */