Commit 6bbbca73 authored by Aruna Balakrishnaiah's avatar Aruna Balakrishnaiah Committed by Benjamin Herrenschmidt

pstore: Pass header size in the pstore write callback

Header size is needed to distinguish between header and the dump data.
Incorporate the addition of new argument (hsize) in the pstore write
callback.
Signed-off-by: default avatarAruna Balakrishnaiah <aruna@linux.vnet.ibm.com>
Acked-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 74251fe2
...@@ -502,6 +502,7 @@ static int nvram_pstore_open(struct pstore_info *psi) ...@@ -502,6 +502,7 @@ static int nvram_pstore_open(struct pstore_info *psi)
* @part: pstore writes data to registered buffer in parts, * @part: pstore writes data to registered buffer in parts,
* part number will indicate the same. * part number will indicate the same.
* @count: Indicates oops count * @count: Indicates oops count
* @hsize: Size of header added by pstore
* @size: number of bytes written to the registered buffer * @size: number of bytes written to the registered buffer
* @psi: registered pstore_info structure * @psi: registered pstore_info structure
* *
...@@ -512,7 +513,8 @@ static int nvram_pstore_open(struct pstore_info *psi) ...@@ -512,7 +513,8 @@ static int nvram_pstore_open(struct pstore_info *psi)
static int nvram_pstore_write(enum pstore_type_id type, static int nvram_pstore_write(enum pstore_type_id type,
enum kmsg_dump_reason reason, enum kmsg_dump_reason reason,
u64 *id, unsigned int part, int count, u64 *id, unsigned int part, int count,
size_t size, struct pstore_info *psi) size_t hsize, size_t size,
struct pstore_info *psi)
{ {
int rc; int rc;
struct oops_log_info *oops_hdr = (struct oops_log_info *) oops_buf; struct oops_log_info *oops_hdr = (struct oops_log_info *) oops_buf;
......
...@@ -935,7 +935,7 @@ static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, ...@@ -935,7 +935,7 @@ static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count,
struct timespec *time, char **buf, struct timespec *time, char **buf,
struct pstore_info *psi); struct pstore_info *psi);
static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason,
u64 *id, unsigned int part, int count, u64 *id, unsigned int part, int count, size_t hsize,
size_t size, struct pstore_info *psi); size_t size, struct pstore_info *psi);
static int erst_clearer(enum pstore_type_id type, u64 id, int count, static int erst_clearer(enum pstore_type_id type, u64 id, int count,
struct timespec time, struct pstore_info *psi); struct timespec time, struct pstore_info *psi);
...@@ -1055,7 +1055,7 @@ static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, ...@@ -1055,7 +1055,7 @@ static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count,
} }
static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason,
u64 *id, unsigned int part, int count, u64 *id, unsigned int part, int count, size_t hsize,
size_t size, struct pstore_info *psi) size_t size, struct pstore_info *psi)
{ {
struct cper_pstore_record *rcd = (struct cper_pstore_record *) struct cper_pstore_record *rcd = (struct cper_pstore_record *)
......
...@@ -104,7 +104,7 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, ...@@ -104,7 +104,7 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type,
static int efi_pstore_write(enum pstore_type_id type, static int efi_pstore_write(enum pstore_type_id type,
enum kmsg_dump_reason reason, u64 *id, enum kmsg_dump_reason reason, u64 *id,
unsigned int part, int count, size_t size, unsigned int part, int count, size_t hsize, size_t size,
struct pstore_info *psi) struct pstore_info *psi)
{ {
char name[DUMP_NAME_LEN]; char name[DUMP_NAME_LEN];
......
...@@ -159,7 +159,7 @@ static void pstore_dump(struct kmsg_dumper *dumper, ...@@ -159,7 +159,7 @@ static void pstore_dump(struct kmsg_dumper *dumper,
break; break;
ret = psinfo->write(PSTORE_TYPE_DMESG, reason, &id, part, ret = psinfo->write(PSTORE_TYPE_DMESG, reason, &id, part,
oopscount, hsize + len, psinfo); oopscount, hsize, hsize + len, psinfo);
if (ret == 0 && reason == KMSG_DUMP_OOPS && pstore_is_mounted()) if (ret == 0 && reason == KMSG_DUMP_OOPS && pstore_is_mounted())
pstore_new_entry = 1; pstore_new_entry = 1;
...@@ -196,7 +196,7 @@ static void pstore_console_write(struct console *con, const char *s, unsigned c) ...@@ -196,7 +196,7 @@ static void pstore_console_write(struct console *con, const char *s, unsigned c)
spin_lock_irqsave(&psinfo->buf_lock, flags); spin_lock_irqsave(&psinfo->buf_lock, flags);
} }
memcpy(psinfo->buf, s, c); memcpy(psinfo->buf, s, c);
psinfo->write(PSTORE_TYPE_CONSOLE, 0, &id, 0, 0, c, psinfo); psinfo->write(PSTORE_TYPE_CONSOLE, 0, &id, 0, 0, 0, c, psinfo);
spin_unlock_irqrestore(&psinfo->buf_lock, flags); spin_unlock_irqrestore(&psinfo->buf_lock, flags);
s += c; s += c;
c = e - s; c = e - s;
...@@ -221,9 +221,11 @@ static void pstore_register_console(void) {} ...@@ -221,9 +221,11 @@ static void pstore_register_console(void) {}
static int pstore_write_compat(enum pstore_type_id type, static int pstore_write_compat(enum pstore_type_id type,
enum kmsg_dump_reason reason, enum kmsg_dump_reason reason,
u64 *id, unsigned int part, int count, u64 *id, unsigned int part, int count,
size_t size, struct pstore_info *psi) size_t hsize, size_t size,
struct pstore_info *psi)
{ {
return psi->write_buf(type, reason, id, part, psinfo->buf, size, psi); return psi->write_buf(type, reason, id, part, psinfo->buf, hsize,
size, psi);
} }
/* /*
......
...@@ -195,7 +195,8 @@ static size_t ramoops_write_kmsg_hdr(struct persistent_ram_zone *prz) ...@@ -195,7 +195,8 @@ static size_t ramoops_write_kmsg_hdr(struct persistent_ram_zone *prz)
static int notrace ramoops_pstore_write_buf(enum pstore_type_id type, static int notrace ramoops_pstore_write_buf(enum pstore_type_id type,
enum kmsg_dump_reason reason, enum kmsg_dump_reason reason,
u64 *id, unsigned int part, u64 *id, unsigned int part,
const char *buf, size_t size, const char *buf,
size_t hsize, size_t size,
struct pstore_info *psi) struct pstore_info *psi)
{ {
struct ramoops_context *cxt = psi->data; struct ramoops_context *cxt = psi->data;
......
...@@ -58,12 +58,12 @@ struct pstore_info { ...@@ -58,12 +58,12 @@ struct pstore_info {
struct pstore_info *psi); struct pstore_info *psi);
int (*write)(enum pstore_type_id type, int (*write)(enum pstore_type_id type,
enum kmsg_dump_reason reason, u64 *id, enum kmsg_dump_reason reason, u64 *id,
unsigned int part, int count, size_t size, unsigned int part, int count, size_t hsize,
struct pstore_info *psi); size_t size, struct pstore_info *psi);
int (*write_buf)(enum pstore_type_id type, int (*write_buf)(enum pstore_type_id type,
enum kmsg_dump_reason reason, u64 *id, enum kmsg_dump_reason reason, u64 *id,
unsigned int part, const char *buf, size_t size, unsigned int part, const char *buf, size_t hsize,
struct pstore_info *psi); size_t size, struct pstore_info *psi);
int (*erase)(enum pstore_type_id type, u64 id, int (*erase)(enum pstore_type_id type, u64 id,
int count, struct timespec time, int count, struct timespec time,
struct pstore_info *psi); struct pstore_info *psi);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment