mirror of https://github.com/OpenIPC/firmware.git
73 lines
2.0 KiB
Diff
73 lines
2.0 KiB
Diff
diff -drupN a/fs/pstore/ftrace.c b/fs/pstore/ftrace.c
|
|
--- a/fs/pstore/ftrace.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/fs/pstore/ftrace.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -27,6 +27,9 @@
|
|
#include <asm/barrier.h>
|
|
#include "internal.h"
|
|
|
|
+/* This doesn't need to be atomic: speed is chosen over correctness here. */
|
|
+static u64 pstore_ftrace_stamp;
|
|
+
|
|
static void notrace pstore_ftrace_call(unsigned long ip,
|
|
unsigned long parent_ip,
|
|
struct ftrace_ops *op,
|
|
@@ -34,6 +37,12 @@ static void notrace pstore_ftrace_call(u
|
|
{
|
|
unsigned long flags;
|
|
struct pstore_ftrace_record rec = {};
|
|
+ struct pstore_record record = {
|
|
+ .type = PSTORE_TYPE_FTRACE,
|
|
+ .buf = (char *)&rec,
|
|
+ .size = sizeof(rec),
|
|
+ .psi = psinfo,
|
|
+ };
|
|
|
|
if (unlikely(oops_in_progress))
|
|
return;
|
|
@@ -42,9 +51,9 @@ static void notrace pstore_ftrace_call(u
|
|
|
|
rec.ip = ip;
|
|
rec.parent_ip = parent_ip;
|
|
+ pstore_ftrace_write_timestamp(&rec, pstore_ftrace_stamp++);
|
|
pstore_ftrace_encode_cpu(&rec, raw_smp_processor_id());
|
|
- psinfo->write_buf(PSTORE_TYPE_FTRACE, 0, NULL, 0, (void *)&rec,
|
|
- 0, sizeof(rec), psinfo);
|
|
+ psinfo->write(&record);
|
|
|
|
local_irq_restore(flags);
|
|
}
|
|
@@ -71,10 +80,13 @@ static ssize_t pstore_ftrace_knob_write(
|
|
if (!on ^ pstore_ftrace_enabled)
|
|
goto out;
|
|
|
|
- if (on)
|
|
+ if (on) {
|
|
+ ftrace_ops_set_global_filter(&pstore_ftrace_ops);
|
|
ret = register_ftrace_function(&pstore_ftrace_ops);
|
|
- else
|
|
+ } else {
|
|
ret = unregister_ftrace_function(&pstore_ftrace_ops);
|
|
+ }
|
|
+
|
|
if (ret) {
|
|
pr_err("%s: unable to %sregister ftrace ops: %zd\n",
|
|
__func__, on ? "" : "un", ret);
|
|
@@ -110,7 +122,7 @@ void pstore_register_ftrace(void)
|
|
{
|
|
struct dentry *file;
|
|
|
|
- if (!psinfo->write_buf)
|
|
+ if (!psinfo->write)
|
|
return;
|
|
|
|
pstore_ftrace_dir = debugfs_create_dir("pstore", NULL);
|
|
@@ -136,7 +148,7 @@ void pstore_unregister_ftrace(void)
|
|
mutex_lock(&pstore_ftrace_lock);
|
|
if (pstore_ftrace_enabled) {
|
|
unregister_ftrace_function(&pstore_ftrace_ops);
|
|
- pstore_ftrace_enabled = 0;
|
|
+ pstore_ftrace_enabled = false;
|
|
}
|
|
mutex_unlock(&pstore_ftrace_lock);
|
|
|