Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c950fd6f authored by Namhyung Kim's avatar Namhyung Kim Committed by Kees Cook
Browse files

pstore: Split pstore fragile flags



This patch adds new PSTORE_FLAGS for each pstore type so that they can
be enabled separately.  This is a preparation for ongoing virtio-pstore
work to support those types flexibly.

The PSTORE_FLAGS_FRAGILE is changed to PSTORE_FLAGS_DMESG to preserve the
original behavior.

Cc: Anton Vorontsov <anton@enomsg.org>
Cc: Colin Cross <ccross@android.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Len Brown <lenb@kernel.org>
Cc: Matt Fleming <matt@codeblueprint.co.uk>
Cc: linux-acpi@vger.kernel.org
Cc: linux-efi@vger.kernel.org
Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
[kees: retained "FRAGILE" for now to make merges easier]
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
parent d5a9bf0b
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -938,7 +938,7 @@ static int erst_clearer(enum pstore_type_id type, u64 id, int count,
static struct pstore_info erst_info = {
static struct pstore_info erst_info = {
	.owner		= THIS_MODULE,
	.owner		= THIS_MODULE,
	.name		= "erst",
	.name		= "erst",
	.flags		= PSTORE_FLAGS_FRAGILE,
	.flags		= PSTORE_FLAGS_DMESG,
	.open		= erst_open_pstore,
	.open		= erst_open_pstore,
	.close		= erst_close_pstore,
	.close		= erst_close_pstore,
	.read		= erst_reader,
	.read		= erst_reader,
+1 −1
Original line number Original line Diff line number Diff line
@@ -362,7 +362,7 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count,
static struct pstore_info efi_pstore_info = {
static struct pstore_info efi_pstore_info = {
	.owner		= THIS_MODULE,
	.owner		= THIS_MODULE,
	.name		= "efi",
	.name		= "efi",
	.flags		= PSTORE_FLAGS_FRAGILE,
	.flags		= PSTORE_FLAGS_DMESG,
	.open		= efi_pstore_open,
	.open		= efi_pstore_open,
	.close		= efi_pstore_close,
	.close		= efi_pstore_close,
	.read		= efi_pstore_read,
	.read		= efi_pstore_read,
+10 −7
Original line number Original line Diff line number Diff line
@@ -659,13 +659,14 @@ int pstore_register(struct pstore_info *psi)
	if (pstore_is_mounted())
	if (pstore_is_mounted())
		pstore_get_records(0);
		pstore_get_records(0);


	if (psi->flags & PSTORE_FLAGS_DMESG)
		pstore_register_kmsg();
		pstore_register_kmsg();

	if (psi->flags & PSTORE_FLAGS_CONSOLE)
	if ((psi->flags & PSTORE_FLAGS_FRAGILE) == 0) {
		pstore_register_console();
		pstore_register_console();
	if (psi->flags & PSTORE_FLAGS_FTRACE)
		pstore_register_ftrace();
		pstore_register_ftrace();
	if (psi->flags & PSTORE_FLAGS_PMSG)
		pstore_register_pmsg();
		pstore_register_pmsg();
	}


	if (pstore_update_ms >= 0) {
	if (pstore_update_ms >= 0) {
		pstore_timer.expires = jiffies +
		pstore_timer.expires = jiffies +
@@ -689,11 +690,13 @@ EXPORT_SYMBOL_GPL(pstore_register);


void pstore_unregister(struct pstore_info *psi)
void pstore_unregister(struct pstore_info *psi)
{
{
	if ((psi->flags & PSTORE_FLAGS_FRAGILE) == 0) {
	if (psi->flags & PSTORE_FLAGS_PMSG)
		pstore_unregister_pmsg();
		pstore_unregister_pmsg();
	if (psi->flags & PSTORE_FLAGS_FTRACE)
		pstore_unregister_ftrace();
		pstore_unregister_ftrace();
	if (psi->flags & PSTORE_FLAGS_CONSOLE)
		pstore_unregister_console();
		pstore_unregister_console();
	}
	if (psi->flags & PSTORE_FLAGS_DMESG)
		pstore_unregister_kmsg();
		pstore_unregister_kmsg();


	free_buf_for_compression();
	free_buf_for_compression();
+2 −0
Original line number Original line Diff line number Diff line
@@ -623,6 +623,8 @@ static int ramoops_probe(struct platform_device *pdev)
		goto fail_clear;
		goto fail_clear;
	}
	}


	cxt->pstore.flags = PSTORE_FLAGS_ALL;

	err = pstore_register(&cxt->pstore);
	err = pstore_register(&cxt->pstore);
	if (err) {
	if (err) {
		pr_err("registering with pstore failed\n");
		pr_err("registering with pstore failed\n");
+7 −1
Original line number Original line Diff line number Diff line
@@ -74,7 +74,13 @@ struct pstore_info {
	void		*data;
	void		*data;
};
};


#define	PSTORE_FLAGS_FRAGILE	1
#define PSTORE_FLAGS_DMESG	(1 << 0)
#define PSTORE_FLAGS_FRAGILE	PSTORE_FLAGS_DMESG
#define PSTORE_FLAGS_CONSOLE	(1 << 1)
#define PSTORE_FLAGS_FTRACE	(1 << 2)
#define PSTORE_FLAGS_PMSG	(1 << 3)

#define PSTORE_FLAGS_ALL	((1 << 4) - 1)


extern int pstore_register(struct pstore_info *);
extern int pstore_register(struct pstore_info *);
extern void pstore_unregister(struct pstore_info *);
extern void pstore_unregister(struct pstore_info *);