diff options
Diffstat (limited to 'drivers/mtd/mtdoops.c')
| -rw-r--r-- | drivers/mtd/mtdoops.c | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/drivers/mtd/mtdoops.c b/drivers/mtd/mtdoops.c index ae36d7e1e913..551e316e4454 100644 --- a/drivers/mtd/mtdoops.c +++ b/drivers/mtd/mtdoops.c | |||
| @@ -304,32 +304,17 @@ static void find_next_position(struct mtdoops_context *cxt) | |||
| 304 | } | 304 | } |
| 305 | 305 | ||
| 306 | static void mtdoops_do_dump(struct kmsg_dumper *dumper, | 306 | static void mtdoops_do_dump(struct kmsg_dumper *dumper, |
| 307 | enum kmsg_dump_reason reason, const char *s1, unsigned long l1, | 307 | enum kmsg_dump_reason reason) |
| 308 | const char *s2, unsigned long l2) | ||
| 309 | { | 308 | { |
| 310 | struct mtdoops_context *cxt = container_of(dumper, | 309 | struct mtdoops_context *cxt = container_of(dumper, |
| 311 | struct mtdoops_context, dump); | 310 | struct mtdoops_context, dump); |
| 312 | unsigned long s1_start, s2_start; | ||
| 313 | unsigned long l1_cpy, l2_cpy; | ||
| 314 | char *dst; | ||
| 315 | |||
| 316 | if (reason != KMSG_DUMP_OOPS && | ||
| 317 | reason != KMSG_DUMP_PANIC) | ||
| 318 | return; | ||
| 319 | 311 | ||
| 320 | /* Only dump oopses if dump_oops is set */ | 312 | /* Only dump oopses if dump_oops is set */ |
| 321 | if (reason == KMSG_DUMP_OOPS && !dump_oops) | 313 | if (reason == KMSG_DUMP_OOPS && !dump_oops) |
| 322 | return; | 314 | return; |
| 323 | 315 | ||
| 324 | dst = cxt->oops_buf + MTDOOPS_HEADER_SIZE; /* Skip the header */ | 316 | kmsg_dump_get_buffer(dumper, true, cxt->oops_buf + MTDOOPS_HEADER_SIZE, |
| 325 | l2_cpy = min(l2, record_size - MTDOOPS_HEADER_SIZE); | 317 | record_size - MTDOOPS_HEADER_SIZE, NULL); |
| 326 | l1_cpy = min(l1, record_size - MTDOOPS_HEADER_SIZE - l2_cpy); | ||
| 327 | |||
| 328 | s2_start = l2 - l2_cpy; | ||
| 329 | s1_start = l1 - l1_cpy; | ||
| 330 | |||
| 331 | memcpy(dst, s1 + s1_start, l1_cpy); | ||
| 332 | memcpy(dst + l1_cpy, s2 + s2_start, l2_cpy); | ||
| 333 | 318 | ||
| 334 | /* Panics must be written immediately */ | 319 | /* Panics must be written immediately */ |
| 335 | if (reason != KMSG_DUMP_OOPS) | 320 | if (reason != KMSG_DUMP_OOPS) |
| @@ -375,6 +360,7 @@ static void mtdoops_notify_add(struct mtd_info *mtd) | |||
| 375 | return; | 360 | return; |
| 376 | } | 361 | } |
| 377 | 362 | ||
| 363 | cxt->dump.max_reason = KMSG_DUMP_OOPS; | ||
| 378 | cxt->dump.dump = mtdoops_do_dump; | 364 | cxt->dump.dump = mtdoops_do_dump; |
| 379 | err = kmsg_dump_register(&cxt->dump); | 365 | err = kmsg_dump_register(&cxt->dump); |
| 380 | if (err) { | 366 | if (err) { |
