mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-05 22:28:00 +00:00
pstore: Add kernel-doc for struct pstore_info
This adds documentation for struct pstore_info, which also includes the basic API the backends need to implement. Signed-off-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
parent
0d7cd09a3d
commit
0edae0b3ff
1 changed files with 128 additions and 5 deletions
|
@ -30,7 +30,7 @@
|
|||
#include <linux/time.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/* types */
|
||||
/* pstore record types (see fs/pstore/inode.c for filename templates) */
|
||||
enum pstore_type_id {
|
||||
PSTORE_TYPE_DMESG = 0,
|
||||
PSTORE_TYPE_MCE = 1,
|
||||
|
@ -47,14 +47,138 @@ enum pstore_type_id {
|
|||
|
||||
struct module;
|
||||
|
||||
/**
|
||||
* struct pstore_info - backend pstore driver structure
|
||||
*
|
||||
* @owner: module which is repsonsible for this backend driver
|
||||
* @name: name of the backend driver
|
||||
*
|
||||
* @buf_lock: spinlock to serialize access to @buf
|
||||
* @buf: preallocated crash dump buffer
|
||||
* @bufsize: size of @buf available for crash dump writes
|
||||
*
|
||||
* @read_mutex: serializes @open, @read, @close, and @erase callbacks
|
||||
* @flags: bitfield of frontends the backend can accept writes for
|
||||
* @data: backend-private pointer passed back during callbacks
|
||||
*
|
||||
* Callbacks:
|
||||
*
|
||||
* @open:
|
||||
* Notify backend that pstore is starting a full read of backend
|
||||
* records. Followed by one or more @read calls, and a final @close.
|
||||
*
|
||||
* @psi: in: pointer to the struct pstore_info for the backend
|
||||
*
|
||||
* Returns 0 on success, and non-zero on error.
|
||||
*
|
||||
* @close:
|
||||
* Notify backend that pstore has finished a full read of backend
|
||||
* records. Always preceded by an @open call and one or more @read
|
||||
* calls.
|
||||
*
|
||||
* @psi: in: pointer to the struct pstore_info for the backend
|
||||
*
|
||||
* Returns 0 on success, and non-zero on error. (Though pstore will
|
||||
* ignore the error.)
|
||||
*
|
||||
* @read:
|
||||
* Read next available backend record. Called after a successful
|
||||
* @open.
|
||||
*
|
||||
* @id: out: unique identifier for the record
|
||||
* @type: out: pstore record type
|
||||
* @count: out: for PSTORE_TYPE_DMESG, the Oops count.
|
||||
* @time: out: timestamp for the record
|
||||
* @buf: out: kmalloc copy of record contents, to be freed by pstore
|
||||
* @compressed:
|
||||
* out: if the record contents are compressed
|
||||
* @ecc_notice_size:
|
||||
* out: ECC information
|
||||
* @psi: in: pointer to the struct pstore_info for the backend
|
||||
*
|
||||
* Returns record size on success, zero when no more records are
|
||||
* available, or negative on error.
|
||||
*
|
||||
* @write:
|
||||
* Perform a frontend notification of a write to a backend record. The
|
||||
* data to be stored has already been written to the registered @buf
|
||||
* of the @psi structure.
|
||||
*
|
||||
* @type: in: pstore record type to write
|
||||
* @reason:
|
||||
* in: pstore write reason
|
||||
* @id: out: unique identifier for the record
|
||||
* @part: in: position in a multipart write
|
||||
* @count: in: increasing from 0 since boot, the number of this Oops
|
||||
* @compressed:
|
||||
* in: if the record is compressed
|
||||
* @size: in: size of the write
|
||||
* @psi: in: pointer to the struct pstore_info for the backend
|
||||
*
|
||||
* Returns 0 on success, and non-zero on error.
|
||||
*
|
||||
* @write_buf:
|
||||
* Perform a frontend write to a backend record, using a specified
|
||||
* buffer. Unlike @write, this does not use the @psi @buf.
|
||||
*
|
||||
* @type: in: pstore record type to write
|
||||
* @reason:
|
||||
* in: pstore write reason
|
||||
* @id: out: unique identifier for the record
|
||||
* @part: in: position in a multipart write
|
||||
* @buf: in: pointer to contents to write to backend record
|
||||
* @compressed:
|
||||
* in: if the record is compressed
|
||||
* @size: in: size of the write
|
||||
* @psi: in: pointer to the struct pstore_info for the backend
|
||||
*
|
||||
* Returns 0 on success, and non-zero on error.
|
||||
*
|
||||
* @write_buf_user:
|
||||
* Perform a frontend write to a backend record, using a specified
|
||||
* buffer that is coming directly from userspace.
|
||||
*
|
||||
* @type: in: pstore record type to write
|
||||
* @reason:
|
||||
* in: pstore write reason
|
||||
* @id: out: unique identifier for the record
|
||||
* @part: in: position in a multipart write
|
||||
* @buf: in: pointer to userspace contents to write to backend record
|
||||
* @compressed:
|
||||
* in: if the record is compressed
|
||||
* @size: in: size of the write
|
||||
* @psi: in: pointer to the struct pstore_info for the backend
|
||||
*
|
||||
* Returns 0 on success, and non-zero on error.
|
||||
*
|
||||
* @erase:
|
||||
* Delete a record from backend storage. Different backends
|
||||
* identify records differently, so all possible methods of
|
||||
* identification are included to help the backend locate the
|
||||
* record to remove.
|
||||
*
|
||||
* @type: in: pstore record type to write
|
||||
* @id: in: per-type unique identifier for the record
|
||||
* @count: in: Oops count
|
||||
* @time: in: timestamp for the record
|
||||
* @psi: in: pointer to the struct pstore_info for the backend
|
||||
*
|
||||
* Returns 0 on success, and non-zero on error.
|
||||
*
|
||||
*/
|
||||
struct pstore_info {
|
||||
struct module *owner;
|
||||
char *name;
|
||||
spinlock_t buf_lock; /* serialize access to 'buf' */
|
||||
|
||||
spinlock_t buf_lock;
|
||||
char *buf;
|
||||
size_t bufsize;
|
||||
struct mutex read_mutex; /* serialize open/read/close */
|
||||
|
||||
struct mutex read_mutex;
|
||||
|
||||
int flags;
|
||||
void *data;
|
||||
|
||||
int (*open)(struct pstore_info *psi);
|
||||
int (*close)(struct pstore_info *psi);
|
||||
ssize_t (*read)(u64 *id, enum pstore_type_id *type,
|
||||
|
@ -76,11 +200,10 @@ struct pstore_info {
|
|||
int (*erase)(enum pstore_type_id type, u64 id,
|
||||
int count, struct timespec time,
|
||||
struct pstore_info *psi);
|
||||
void *data;
|
||||
};
|
||||
|
||||
/* Supported frontends */
|
||||
#define PSTORE_FLAGS_DMESG (1 << 0)
|
||||
#define PSTORE_FLAGS_FRAGILE PSTORE_FLAGS_DMESG
|
||||
#define PSTORE_FLAGS_CONSOLE (1 << 1)
|
||||
#define PSTORE_FLAGS_FTRACE (1 << 2)
|
||||
#define PSTORE_FLAGS_PMSG (1 << 3)
|
||||
|
|
Loading…
Add table
Reference in a new issue