Commit 78c08247 authored by WeiXiong Liao's avatar WeiXiong Liao Committed by Kees Cook

mtd: Support kmsg dumper based on pstore/blk

This introduces mtdpstore, which is similar to mtdoops but more
powerful. It uses pstore/blk, and aims to store panic and oops logs to
a flash partition, where pstore can later read back and present as files
in the mounted pstore filesystem.

To make mtdpstore work, the "blkdev" of pstore/blk should be set
as MTD device name or MTD device number. For more details, see
Documentation/admin-guide/pstore-blk.rst

This solves a number of issues:
- Work duplication: both of pstore and mtdoops do the same job storing
  panic/oops log. They have very similar logic, registering to kmsg
  dumper and storing logs to several chunks one by one.
- Layer violations: drivers should provides methods instead of polices.
  MTD should provide read/write/erase operations, and allow a higher
  level drivers to provide the chunk management, kmsg dump
  configuration, etc.
- Missing features: pstore provides many additional features, including
  presenting the logs as files, logging dump time and count, and
  supporting other frontends like pmsg, console, etc.
Signed-off-by: default avatarWeiXiong Liao <liaoweixiong@allwinnertech.com>
Link: https://lore.kernel.org/lkml/20200511233229.27745-11-keescook@chromium.org/
Link: https://lore.kernel.org/r/1589266715-4168-1-git-send-email-liaoweixiong@allwinnertech.comSigned-off-by: default avatarKees Cook <keescook@chromium.org>
parent f8feafea
...@@ -43,9 +43,9 @@ blkdev ...@@ -43,9 +43,9 @@ blkdev
~~~~~~ ~~~~~~
The block device to use. Most of the time, it is a partition of block device. The block device to use. Most of the time, it is a partition of block device.
It's required for pstore/blk. It's required for pstore/blk. It is also used for MTD device.
It accepts the following variants: It accepts the following variants for block device:
1. <hex_major><hex_minor> device number in hexadecimal represents itself; no 1. <hex_major><hex_minor> device number in hexadecimal represents itself; no
leading 0x, for example b302. leading 0x, for example b302.
...@@ -64,6 +64,11 @@ It accepts the following variants: ...@@ -64,6 +64,11 @@ It accepts the following variants:
partition with a known unique id. partition with a known unique id.
#. <major>:<minor> major and minor number of the device separated by a colon. #. <major>:<minor> major and minor number of the device separated by a colon.
It accepts the following variants for MTD device:
1. <device name> MTD device name. "pstore" is recommended.
#. <device number> MTD device number.
kmsg_size kmsg_size
~~~~~~~~~ ~~~~~~~~~
......
...@@ -170,6 +170,16 @@ config MTD_OOPS ...@@ -170,6 +170,16 @@ config MTD_OOPS
buffer in a flash partition where it can be read back at some buffer in a flash partition where it can be read back at some
later point. later point.
config MTD_PSTORE
tristate "Log panic/oops to an MTD buffer based on pstore"
depends on PSTORE_BLK
help
This enables panic and oops messages to be logged to a circular
buffer in a flash partition where it can be read back as files after
mounting pstore filesystem.
If unsure, say N.
config MTD_SWAP config MTD_SWAP
tristate "Swap on MTD device support" tristate "Swap on MTD device support"
depends on MTD && SWAP depends on MTD && SWAP
......
...@@ -20,6 +20,7 @@ obj-$(CONFIG_RFD_FTL) += rfd_ftl.o ...@@ -20,6 +20,7 @@ obj-$(CONFIG_RFD_FTL) += rfd_ftl.o
obj-$(CONFIG_SSFDC) += ssfdc.o obj-$(CONFIG_SSFDC) += ssfdc.o
obj-$(CONFIG_SM_FTL) += sm_ftl.o obj-$(CONFIG_SM_FTL) += sm_ftl.o
obj-$(CONFIG_MTD_OOPS) += mtdoops.o obj-$(CONFIG_MTD_OOPS) += mtdoops.o
obj-$(CONFIG_MTD_PSTORE) += mtdpstore.o
obj-$(CONFIG_MTD_SWAP) += mtdswap.o obj-$(CONFIG_MTD_SWAP) += mtdswap.o
nftl-objs := nftlcore.o nftlmount.o nftl-objs := nftlcore.o nftlmount.o
......
This diff is collapsed.
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