mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
pstore/blk: Provide way to query pstore configuration
In order to configure itself, the MTD backend needs to be able to query the current pstore configuration. Introduce pstore_blk_get_config() for this purpose. Signed-off-by: WeiXiong Liao <liaoweixiong@allwinnertech.com> Link: https://lore.kernel.org/lkml/20200511233229.27745-9-keescook@chromium.org/ Co-developed-by: Kees Cook <keescook@chromium.org> Signed-off-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
parent
335426c6dc
commit
1525fb3bb6
@ -94,6 +94,17 @@ struct bdev_info {
|
||||
sector_t start_sect;
|
||||
};
|
||||
|
||||
#define check_size(name, alignsize) ({ \
|
||||
long _##name_ = (name); \
|
||||
_##name_ = _##name_ <= 0 ? 0 : (_##name_ * 1024); \
|
||||
if (_##name_ & ((alignsize) - 1)) { \
|
||||
pr_info(#name " must align to %d\n", \
|
||||
(alignsize)); \
|
||||
_##name_ = ALIGN(name, (alignsize)); \
|
||||
} \
|
||||
_##name_; \
|
||||
})
|
||||
|
||||
/**
|
||||
* struct pstore_device_info - back-end pstore/blk driver structure.
|
||||
*
|
||||
@ -149,13 +160,11 @@ static int psblk_register_do(struct pstore_device_info *dev)
|
||||
dev->flags = UINT_MAX;
|
||||
|
||||
#define verify_size(name, alignsize, enabled) { \
|
||||
long _##name_ = (enabled) ? (name) : 0; \
|
||||
_##name_ = _##name_ <= 0 ? 0 : (_##name_ * 1024); \
|
||||
if (_##name_ & ((alignsize) - 1)) { \
|
||||
pr_info(#name " must align to %d\n", \
|
||||
(alignsize)); \
|
||||
_##name_ = ALIGN(name, (alignsize)); \
|
||||
} \
|
||||
long _##name_; \
|
||||
if (enabled) \
|
||||
_##name_ = check_size(name, alignsize); \
|
||||
else \
|
||||
_##name_ = 0; \
|
||||
name = _##name_ / 1024; \
|
||||
pstore_zone_info->name = _##name_; \
|
||||
}
|
||||
@ -453,6 +462,20 @@ void unregister_pstore_blk(unsigned int major)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(unregister_pstore_blk);
|
||||
|
||||
/* get information of pstore/blk */
|
||||
int pstore_blk_get_config(struct pstore_blk_config *info)
|
||||
{
|
||||
strncpy(info->device, blkdev, 80);
|
||||
info->max_reason = max_reason;
|
||||
info->kmsg_size = check_size(kmsg_size, 4096);
|
||||
info->pmsg_size = check_size(pmsg_size, 4096);
|
||||
info->ftrace_size = check_size(ftrace_size, 4096);
|
||||
info->console_size = check_size(console_size, 4096);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pstore_blk_get_config);
|
||||
|
||||
static void __exit pstore_blk_exit(void)
|
||||
{
|
||||
mutex_lock(&pstore_blk_lock);
|
||||
|
@ -49,4 +49,32 @@ struct pstore_blk_info {
|
||||
int register_pstore_blk(struct pstore_blk_info *info);
|
||||
void unregister_pstore_blk(unsigned int major);
|
||||
|
||||
/**
|
||||
* struct pstore_blk_config - the pstore_blk backend configuration
|
||||
*
|
||||
* @device: Name of the desired block device
|
||||
* @max_reason: Maximum kmsg dump reason to store to block device
|
||||
* @kmsg_size: Total size of for kmsg dumps
|
||||
* @pmsg_size: Total size of the pmsg storage area
|
||||
* @console_size: Total size of the console storage area
|
||||
* @ftrace_size: Total size for ftrace logging data (for all CPUs)
|
||||
*/
|
||||
struct pstore_blk_config {
|
||||
char device[80];
|
||||
enum kmsg_dump_reason max_reason;
|
||||
unsigned long kmsg_size;
|
||||
unsigned long pmsg_size;
|
||||
unsigned long console_size;
|
||||
unsigned long ftrace_size;
|
||||
};
|
||||
|
||||
/**
|
||||
* pstore_blk_get_config - get a copy of the pstore_blk backend configuration
|
||||
*
|
||||
* @info: The sturct pstore_blk_config to be filled in
|
||||
*
|
||||
* Failure returns negative error code, and success returns 0.
|
||||
*/
|
||||
int pstore_blk_get_config(struct pstore_blk_config *info);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user