It's one of a series of patches for adaptive to MTD device. MTD device need to check size of recorder and get mtddev index to verify which mtd device to use. All it needs is defined in blkoops. So, there should be a interface for MTD driver to get all information it need. Signed-off-by: WeiXiong Liao <liaoweixiong@xxxxxxxxxxxxxxxxx> --- fs/pstore/blkoops.c | 47 ++++++++++++++++++++++++++++++++++++----------- include/linux/blkoops.h | 10 ++++++++++ 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/fs/pstore/blkoops.c b/fs/pstore/blkoops.c index 7cf4731e52f7..4fc6ac4c69c5 100644 --- a/fs/pstore/blkoops.c +++ b/fs/pstore/blkoops.c @@ -102,6 +102,20 @@ #define DEFAULT_BLKDEV "" #endif +#define check_size(name, defsize, alignsize) ({ \ + long _##name_ = (name); \ + if ((name) < 0) \ + _##name_ = (defsize); \ + _##name_ = _##name_ <= 0 ? 0 : (_##name_ * 1024); \ + if (_##name_ & ((alignsize) - 1)) { \ + pr_info(#name " must align to %d\n", \ + (alignsize)); \ + _##name_ = ALIGN(name, (alignsize)); \ + } \ + _##name_; \ +}) + + /** * register device to blkoops * @@ -133,18 +147,10 @@ int blkoops_register_device(struct blkoops_device *bo_dev) bo_dev->flags = BLKOOPS_DEV_SUPPORT_ALL; #define verify_size(name, defsize, alignsize, enable) { \ long _##name_; \ - if (!(enable)) \ - _##name_ = 0; \ - else if ((name) >= 0) \ - _##name_ = (name); \ + if (enable) \ + _##name_ = check_size(name, defsize, alignsize);\ else \ - _##name_ = (defsize); \ - _##name_ = _##name_ <= 0 ? 0 : (_##name_ * 1024); \ - if (_##name_ & ((alignsize) - 1)) { \ - pr_info(#name " must align to %d\n", \ - (alignsize)); \ - _##name_ = ALIGN(name, (alignsize)); \ - } \ + _##name_ = 0; \ name = _##name_ / 1024; \ bzinfo->name = _##name_; \ } @@ -445,6 +451,25 @@ int blkoops_blkdev_info(dev_t *devt, sector_t *nr_sects, sector_t *start_sect) } EXPORT_SYMBOL_GPL(blkoops_blkdev_info); +/* get information of blkoops */ +int blkoops_info(struct blkoops_info *info) +{ + if (!blkdev[0] && strlen(DEFAULT_BLKDEV)) + snprintf(blkdev, 80, "%s", DEFAULT_BLKDEV); + + memcpy(info->device, blkdev, 80); + info->dump_oops = !!(dump_oops < 0 ? DEFAULT_DUMP_OOPS : dump_oops); + + info->dmesg_size = check_size(dmesg_size, DEFAULT_DMESG_SIZE, 4096); + info->pmsg_size = check_size(pmsg_size, DEFAULT_PMSG_SIZE, 4096); + info->ftrace_size = check_size(ftrace_size, DEFAULT_FTRACE_SIZE, 4096); + info->console_size = check_size(console_size, DEFAULT_CONSOLE_SIZE, + 4096); + + return 0; +} +EXPORT_SYMBOL_GPL(blkoops_info); + MODULE_LICENSE("GPL"); MODULE_AUTHOR("WeiXiong Liao <liaoweixiong@xxxxxxxxxxxxxxxxx>"); MODULE_DESCRIPTION("Wrapper for Pstore BLK with Oops logger"); diff --git a/include/linux/blkoops.h b/include/linux/blkoops.h index 11cb3036ad5f..ea56f3f92360 100644 --- a/include/linux/blkoops.h +++ b/include/linux/blkoops.h @@ -81,4 +81,14 @@ int blkoops_register_blkdev(unsigned int major, unsigned int flags, void blkoops_unregister_blkdev(unsigned int major); int blkoops_blkdev_info(dev_t *devt, sector_t *nr_sects, sector_t *start_sect); +struct blkoops_info { + int dump_oops; + char device[80]; + unsigned long dmesg_size; + unsigned long pmsg_size; + unsigned long console_size; + unsigned long ftrace_size; +}; +int blkoops_info(struct blkoops_info *info); + #endif -- 1.9.1 ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/