hc
2023-12-06 08f87f769b595151be1afeff53e144f543faa614
kernel/include/linux/kmsg_dump.h
....@@ -25,9 +25,20 @@
2525 KMSG_DUMP_PANIC,
2626 KMSG_DUMP_OOPS,
2727 KMSG_DUMP_EMERG,
28
- KMSG_DUMP_RESTART,
29
- KMSG_DUMP_HALT,
30
- KMSG_DUMP_POWEROFF,
28
+ KMSG_DUMP_SHUTDOWN,
29
+ KMSG_DUMP_MAX
30
+};
31
+
32
+/**
33
+ * struct kmsg_dumper_iter - iterator for kernel crash message dumper
34
+ * @active: Flag that specifies if this is currently dumping
35
+ * @cur_seq: Points to the oldest message to dump (private)
36
+ * @next_seq: Points after the newest message to dump (private)
37
+ */
38
+struct kmsg_dumper_iter {
39
+ bool active;
40
+ u64 cur_seq;
41
+ u64 next_seq;
3142 };
3243
3344 /**
....@@ -40,66 +51,46 @@
4051 */
4152 struct kmsg_dumper {
4253 struct list_head list;
43
- void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason);
54
+ void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason,
55
+ struct kmsg_dumper_iter *iter);
4456 enum kmsg_dump_reason max_reason;
45
- bool active;
4657 bool registered;
47
-
48
- /* private state of the kmsg iterator */
49
- u32 cur_idx;
50
- u32 next_idx;
51
- u64 cur_seq;
52
- u64 next_seq;
5358 };
5459
5560 #ifdef CONFIG_PRINTK
5661 void kmsg_dump(enum kmsg_dump_reason reason);
5762
58
-bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog,
59
- char *line, size_t size, size_t *len);
60
-
61
-bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog,
63
+bool kmsg_dump_get_line(struct kmsg_dumper_iter *iter, bool syslog,
6264 char *line, size_t size, size_t *len);
6365
64
-bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
65
- char *buf, size_t size, size_t *len);
66
+bool kmsg_dump_get_buffer(struct kmsg_dumper_iter *iter, bool syslog,
67
+ char *buf, size_t size, size_t *len_out);
6668
67
-void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper);
68
-
69
-void kmsg_dump_rewind(struct kmsg_dumper *dumper);
69
+void kmsg_dump_rewind(struct kmsg_dumper_iter *iter);
7070
7171 int kmsg_dump_register(struct kmsg_dumper *dumper);
7272
7373 int kmsg_dump_unregister(struct kmsg_dumper *dumper);
74
+
75
+const char *kmsg_dump_reason_str(enum kmsg_dump_reason reason);
7476 #else
7577 static inline void kmsg_dump(enum kmsg_dump_reason reason)
7678 {
7779 }
7880
79
-static inline bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper,
80
- bool syslog, const char *line,
81
- size_t size, size_t *len)
82
-{
83
- return false;
84
-}
85
-
86
-static inline bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog,
81
+static inline bool kmsg_dump_get_line(struct kmsg_dumper_iter *iter, bool syslog,
8782 const char *line, size_t size, size_t *len)
8883 {
8984 return false;
9085 }
9186
92
-static inline bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
87
+static inline bool kmsg_dump_get_buffer(struct kmsg_dumper_iter *iter, bool syslog,
9388 char *buf, size_t size, size_t *len)
9489 {
9590 return false;
9691 }
9792
98
-static inline void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper)
99
-{
100
-}
101
-
102
-static inline void kmsg_dump_rewind(struct kmsg_dumper *dumper)
93
+static inline void kmsg_dump_rewind(struct kmsg_dumper_iter *iter)
10394 {
10495 }
10596
....@@ -112,6 +103,11 @@
112103 {
113104 return -EINVAL;
114105 }
106
+
107
+static inline const char *kmsg_dump_reason_str(enum kmsg_dump_reason reason)
108
+{
109
+ return "Disabled";
110
+}
115111 #endif
116112
117113 #endif /* _LINUX_KMSG_DUMP_H */