diff options
Diffstat (limited to 'include/linux/kmsg_dump.h')
| -rw-r--r-- | include/linux/kmsg_dump.h | 61 | 
1 files changed, 54 insertions, 7 deletions
diff --git a/include/linux/kmsg_dump.h b/include/linux/kmsg_dump.h index 35f7237ec97..2e7a1e032c7 100644 --- a/include/linux/kmsg_dump.h +++ b/include/linux/kmsg_dump.h @@ -21,6 +21,7 @@   * is passed to the kernel.   */  enum kmsg_dump_reason { +	KMSG_DUMP_UNDEF,  	KMSG_DUMP_PANIC,  	KMSG_DUMP_OOPS,  	KMSG_DUMP_EMERG, @@ -31,23 +32,42 @@ enum kmsg_dump_reason {  /**   * struct kmsg_dumper - kernel crash message dumper structure - * @dump:	The callback which gets called on crashes. The buffer is passed - * 		as two sections, where s1 (length l1) contains the older - * 		messages and s2 (length l2) contains the newer.   * @list:	Entry in the dumper list (private) + * @dump:	Call into dumping code which will retrieve the data with + * 		through the record iterator + * @max_reason:	filter for highest reason number that should be dumped   * @registered:	Flag that specifies if this is already registered   */  struct kmsg_dumper { -	void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason, -			const char *s1, unsigned long l1, -			const char *s2, unsigned long l2);  	struct list_head list; -	int registered; +	void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason); +	enum kmsg_dump_reason max_reason; +	bool active; +	bool registered; + +	/* private state of the kmsg iterator */ +	u32 cur_idx; +	u32 next_idx; +	u64 cur_seq; +	u64 next_seq;  };  #ifdef CONFIG_PRINTK  void kmsg_dump(enum kmsg_dump_reason reason); +bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog, +			       char *line, size_t size, size_t *len); + +bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog, +			char *line, size_t size, size_t *len); + +bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog, +			  char *buf, size_t size, size_t *len); + +void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper); + +void kmsg_dump_rewind(struct kmsg_dumper *dumper); +  int kmsg_dump_register(struct kmsg_dumper *dumper);  int kmsg_dump_unregister(struct kmsg_dumper *dumper); @@ -56,6 +76,33 @@ static inline void kmsg_dump(enum kmsg_dump_reason reason)  {  } +static inline bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, +					     bool syslog, const char *line, +					     size_t size, size_t *len) +{ +	return false; +} + +static inline bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog, +				const char *line, size_t size, size_t *len) +{ +	return false; +} + +static inline bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog, +					char *buf, size_t size, size_t *len) +{ +	return false; +} + +static inline void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper) +{ +} + +static inline void kmsg_dump_rewind(struct kmsg_dumper *dumper) +{ +} +  static inline int kmsg_dump_register(struct kmsg_dumper *dumper)  {  	return -EINVAL;  |