linux/include/linux/kmsg_dump.h
<<
>>
Prefs
   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 */
 111