* [RFC] Kernel Access to Ftrace instances.
@ 2019-06-05 0:42 Divya Indi
2019-06-05 0:42 ` [PATCH 1/3] tracing: Relevant changes for kernel access " Divya Indi
0 siblings, 1 reply; 8+ messages in thread
From: Divya Indi @ 2019-06-05 0:42 UTC (permalink / raw)
To: linux-kernel; +Cc: Srinivas Eeda, Steven Rostedt
Hi,
Please Review the patches that follow. These include -
[PATCH 1/3] tracing: Relevant changes for kernel access to Ftrace instances.
[PATCH 2/3] tracing: Adding additional NULL checks.
[PATCH 3/3] tracing: Add 2 new funcs. for kernel access to Ftrace instances.
Let me know if you have any concerns or questions.
A sample module demonstrating the use of the above functions will follow soon.
Thanks,
Divya
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] tracing: Relevant changes for kernel access to Ftrace instances.
2019-06-05 0:42 [RFC] Kernel Access to Ftrace instances Divya Indi
@ 2019-06-05 0:42 ` Divya Indi
2019-06-05 0:42 ` [PATCH 2/3] tracing: Adding additional NULL checks Divya Indi
0 siblings, 1 reply; 8+ messages in thread
From: Divya Indi @ 2019-06-05 0:42 UTC (permalink / raw)
To: linux-kernel; +Cc: Srinivas Eeda, Steven Rostedt, Divya Indi
For commit (f45d122): tracing: Kernel access to Ftrace instances.
We need the following additional changes to ensure other kernel components can
use these functions -
1) Remove static keyword for newly exported fn - ftrace_set_clr_event.
2) Add the req functions to header file include/linux/trace_events.h.
Signed-off-by: Divya Indi <divya.indi@oracle.com>
---
include/linux/trace_events.h | 6 ++++++
kernel/trace/trace_events.c | 2 +-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
index 8a62731..d7b7d85 100644
--- a/include/linux/trace_events.h
+++ b/include/linux/trace_events.h
@@ -539,6 +539,12 @@ extern int trace_define_field(struct trace_event_call *call, const char *type,
#define is_signed_type(type) (((type)(-1)) < (type)1)
+void trace_printk_init_buffers(void);
+int trace_array_printk(struct trace_array *tr, unsigned long ip,
+ const char *fmt, ...);
+struct trace_array *trace_array_create(const char *name);
+int trace_array_destroy(struct trace_array *tr);
+int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set);
int trace_set_clr_event(const char *system, const char *event, int set);
/*
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 0ce3db6..b6b4618 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -795,7 +795,7 @@ static int __ftrace_set_clr_event(struct trace_array *tr, const char *match,
return ret;
}
-static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set)
+int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set)
{
char *event = NULL, *sub = NULL, *match;
int ret;
--
1.8.3.1
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 2/3] tracing: Adding additional NULL checks.
2019-06-05 0:42 ` [PATCH 1/3] tracing: Relevant changes for kernel access " Divya Indi
@ 2019-06-05 0:42 ` Divya Indi
2019-06-05 0:42 ` [PATCH 3/3] tracing: Add 2 new funcs. for kernel access to Ftrace instances Divya Indi
0 siblings, 1 reply; 8+ messages in thread
From: Divya Indi @ 2019-06-05 0:42 UTC (permalink / raw)
To: linux-kernel; +Cc: Srinivas Eeda, Steven Rostedt, Divya Indi
Now that we have exported certain functions providing access to Ftrace
instances from other kernel components, we are adding some additional
NULL checks to ensure safe usage by the users.
Signed-off-by: Divya Indi <divya.indi@oracle.com>
---
kernel/trace/trace.c | 3 +++
kernel/trace/trace_events.c | 2 ++
2 files changed, 5 insertions(+)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 1c80521..a60dc13 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3205,6 +3205,9 @@ int trace_array_printk(struct trace_array *tr,
if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
return 0;
+ if (!tr)
+ return -EINVAL;
+
va_start(ap, fmt);
ret = trace_array_vprintk(tr, ip, fmt, ap);
va_end(ap);
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index b6b4618..445b059 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -800,6 +800,8 @@ int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set)
char *event = NULL, *sub = NULL, *match;
int ret;
+ if (!tr)
+ return -ENODEV;
/*
* The buf format can be <subsystem>:<event-name>
* *:<event-name> means any event by that name.
--
1.8.3.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] tracing: Add 2 new funcs. for kernel access to Ftrace instances.
2019-06-05 0:42 ` [PATCH 2/3] tracing: Adding additional NULL checks Divya Indi
@ 2019-06-05 0:42 ` Divya Indi
2019-06-08 21:51 ` Steven Rostedt
0 siblings, 1 reply; 8+ messages in thread
From: Divya Indi @ 2019-06-05 0:42 UTC (permalink / raw)
To: linux-kernel; +Cc: Srinivas Eeda, Steven Rostedt, Divya Indi
Adding 2 new functions -
1) trace_array_lookup : Look up and return a trace array, given its
name.
2) trace_array_set_clr_event : Enable/disable event recording to the
given trace array.
Signed-off-by: Divya Indi <divya.indi@oracle.com>
---
include/linux/trace_events.h | 3 +++
kernel/trace/trace.c | 11 +++++++++++
kernel/trace/trace_events.c | 22 ++++++++++++++++++++++
3 files changed, 36 insertions(+)
diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
index d7b7d85..0cc99a8 100644
--- a/include/linux/trace_events.h
+++ b/include/linux/trace_events.h
@@ -545,7 +545,10 @@ int trace_array_printk(struct trace_array *tr, unsigned long ip,
struct trace_array *trace_array_create(const char *name);
int trace_array_destroy(struct trace_array *tr);
int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set);
+struct trace_array *trace_array_lookup(const char *name);
int trace_set_clr_event(const char *system, const char *event, int set);
+int trace_array_set_clr_event(struct trace_array *tr, const char *system,
+ const char *event, int set);
/*
* The double __builtin_constant_p is because gcc will give us an error
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index a60dc13..1d171fd 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -8465,6 +8465,17 @@ static int instance_rmdir(const char *name)
return ret;
}
+struct trace_array *trace_array_lookup(const char *name)
+{
+ struct trace_array *tr;
+ list_for_each_entry(tr, &ftrace_trace_arrays, list) {
+ if (tr->name && strcmp(tr->name, name) == 0)
+ return tr;
+ }
+ return NULL;
+}
+EXPORT_SYMBOL_GPL(trace_array_lookup);
+
static __init void create_trace_instances(struct dentry *d_tracer)
{
trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer,
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 445b059..c126d2c 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -859,6 +859,28 @@ int trace_set_clr_event(const char *system, const char *event, int set)
}
EXPORT_SYMBOL_GPL(trace_set_clr_event);
+/**
+ * trace_array_set_clr_event - enable or disable an event for a trace array
+ * @system: system name to match (NULL for any system)
+ * @event: event name to match (NULL for all events, within system)
+ * @set: 1 to enable, 0 to disable
+ *
+ * This is a way for other parts of the kernel to enable or disable
+ * event recording to instances.
+ *
+ * Returns 0 on success, -EINVAL if the parameters do not match any
+ * registered events.
+ */
+int trace_array_set_clr_event(struct trace_array *tr, const char *system,
+ const char *event, int set)
+{
+ if (!tr)
+ return -ENODEV;
+
+ return __ftrace_set_clr_event(tr, NULL, system, event, set);
+}
+EXPORT_SYMBOL_GPL(trace_array_set_clr_event);
+
/* 128 should be much more than enough */
#define EVENT_BUF_SIZE 127
--
1.8.3.1
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH 3/3] tracing: Add 2 new funcs. for kernel access to Ftrace instances.
2019-06-05 0:42 ` [PATCH 3/3] tracing: Add 2 new funcs. for kernel access to Ftrace instances Divya Indi
@ 2019-06-08 21:51 ` Steven Rostedt
2019-06-12 15:12 ` Divya Indi
0 siblings, 1 reply; 8+ messages in thread
From: Steven Rostedt @ 2019-06-08 21:51 UTC (permalink / raw)
To: Divya Indi; +Cc: linux-kernel, Srinivas Eeda
On Tue, 4 Jun 2019 17:42:05 -0700
Divya Indi <divya.indi@oracle.com> wrote:
> Adding 2 new functions -
> 1) trace_array_lookup : Look up and return a trace array, given its
> name.
> 2) trace_array_set_clr_event : Enable/disable event recording to the
> given trace array.
>
> Signed-off-by: Divya Indi <divya.indi@oracle.com>
> ---
> include/linux/trace_events.h | 3 +++
> kernel/trace/trace.c | 11 +++++++++++
> kernel/trace/trace_events.c | 22 ++++++++++++++++++++++
> 3 files changed, 36 insertions(+)
>
> diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
> index d7b7d85..0cc99a8 100644
> --- a/include/linux/trace_events.h
> +++ b/include/linux/trace_events.h
> @@ -545,7 +545,10 @@ int trace_array_printk(struct trace_array *tr, unsigned long ip,
> struct trace_array *trace_array_create(const char *name);
> int trace_array_destroy(struct trace_array *tr);
> int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set);
> +struct trace_array *trace_array_lookup(const char *name);
> int trace_set_clr_event(const char *system, const char *event, int set);
> +int trace_array_set_clr_event(struct trace_array *tr, const char *system,
> + const char *event, int set);
>
> /*
> * The double __builtin_constant_p is because gcc will give us an error
> diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
> index a60dc13..1d171fd 100644
> --- a/kernel/trace/trace.c
> +++ b/kernel/trace/trace.c
> @@ -8465,6 +8465,17 @@ static int instance_rmdir(const char *name)
> return ret;
> }
>
> +struct trace_array *trace_array_lookup(const char *name)
> +{
> + struct trace_array *tr;
> + list_for_each_entry(tr, &ftrace_trace_arrays, list) {
Accessing the ftrace_trace_arrays requires taking the trace_types_lock.
It should also probably increment the ref counter too, and then
trace_array_put() needs to be called.
This prevents the trace array from being freed while something has
access to it.
-- Steve
> + if (tr->name && strcmp(tr->name, name) == 0)
> + return tr;
> + }
> + return NULL;
> +}
> +EXPORT_SYMBOL_GPL(trace_array_lookup);
> +
> static __init void create_trace_instances(struct dentry *d_tracer)
> {
> trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer,
> diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
> index 445b059..c126d2c 100644
> --- a/kernel/trace/trace_events.c
> +++ b/kernel/trace/trace_events.c
> @@ -859,6 +859,28 @@ int trace_set_clr_event(const char *system, const char *event, int set)
> }
> EXPORT_SYMBOL_GPL(trace_set_clr_event);
>
> +/**
> + * trace_array_set_clr_event - enable or disable an event for a trace array
> + * @system: system name to match (NULL for any system)
> + * @event: event name to match (NULL for all events, within system)
> + * @set: 1 to enable, 0 to disable
> + *
> + * This is a way for other parts of the kernel to enable or disable
> + * event recording to instances.
> + *
> + * Returns 0 on success, -EINVAL if the parameters do not match any
> + * registered events.
> + */
> +int trace_array_set_clr_event(struct trace_array *tr, const char *system,
> + const char *event, int set)
> +{
> + if (!tr)
> + return -ENODEV;
> +
> + return __ftrace_set_clr_event(tr, NULL, system, event, set);
> +}
> +EXPORT_SYMBOL_GPL(trace_array_set_clr_event);
> +
> /* 128 should be much more than enough */
> #define EVENT_BUF_SIZE 127
>
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH 3/3] tracing: Add 2 new funcs. for kernel access to Ftrace instances.
2019-06-08 21:51 ` Steven Rostedt
@ 2019-06-12 15:12 ` Divya Indi
0 siblings, 0 replies; 8+ messages in thread
From: Divya Indi @ 2019-06-12 15:12 UTC (permalink / raw)
To: Steven Rostedt; +Cc: linux-kernel, Srinivas Eeda
Hi Steven,
Thanks for taking the time to review. Please find my comments inline.
On 6/8/19 2:51 PM, Steven Rostedt wrote:
> On Tue, 4 Jun 2019 17:42:05 -0700
> Divya Indi <divya.indi@oracle.com> wrote:
>
>> Adding 2 new functions -
>> 1) trace_array_lookup : Look up and return a trace array, given its
>> name.
>> 2) trace_array_set_clr_event : Enable/disable event recording to the
>> given trace array.
>>
>> Signed-off-by: Divya Indi <divya.indi@oracle.com>
>> ---
>> include/linux/trace_events.h | 3 +++
>> kernel/trace/trace.c | 11 +++++++++++
>> kernel/trace/trace_events.c | 22 ++++++++++++++++++++++
>> 3 files changed, 36 insertions(+)
>>
>> diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
>> index d7b7d85..0cc99a8 100644
>> --- a/include/linux/trace_events.h
>> +++ b/include/linux/trace_events.h
>> @@ -545,7 +545,10 @@ int trace_array_printk(struct trace_array *tr, unsigned long ip,
>> struct trace_array *trace_array_create(const char *name);
>> int trace_array_destroy(struct trace_array *tr);
>> int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set);
>> +struct trace_array *trace_array_lookup(const char *name);
>> int trace_set_clr_event(const char *system, const char *event, int set);
>> +int trace_array_set_clr_event(struct trace_array *tr, const char *system,
>> + const char *event, int set);
>>
>> /*
>> * The double __builtin_constant_p is because gcc will give us an error
>> diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
>> index a60dc13..1d171fd 100644
>> --- a/kernel/trace/trace.c
>> +++ b/kernel/trace/trace.c
>> @@ -8465,6 +8465,17 @@ static int instance_rmdir(const char *name)
>> return ret;
>> }
>>
>> +struct trace_array *trace_array_lookup(const char *name)
>> +{
>> + struct trace_array *tr;
>> + list_for_each_entry(tr, &ftrace_trace_arrays, list) {
> Accessing the ftrace_trace_arrays requires taking the trace_types_lock.
> It should also probably increment the ref counter too, and then
> trace_array_put() needs to be called.
>
> This prevents the trace array from being freed while something has
> access to it.
>
> -- Steve
Agree - Noted!
Also, adding a similar change for trace_array_create which also returns
a ptr to a newly created trace_array so will face the same issue.
Since trace_array_lookup and trace_array_create will be accompanied by a
trace_array_destroy once the use of the trace_array is done,
decrementing the reference ctr here.
Sending a v2 to address this.
Thanks,
Divya
>
>> + if (tr->name && strcmp(tr->name, name) == 0)
>> + return tr;
>> + }
>> + return NULL;
>> +}
>> +EXPORT_SYMBOL_GPL(trace_array_lookup);
>> +
>> static __init void create_trace_instances(struct dentry *d_tracer)
>> {
>> trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer,
>> diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
>> index 445b059..c126d2c 100644
>> --- a/kernel/trace/trace_events.c
>> +++ b/kernel/trace/trace_events.c
>> @@ -859,6 +859,28 @@ int trace_set_clr_event(const char *system, const char *event, int set)
>> }
>> EXPORT_SYMBOL_GPL(trace_set_clr_event);
>>
>> +/**
>> + * trace_array_set_clr_event - enable or disable an event for a trace array
>> + * @system: system name to match (NULL for any system)
>> + * @event: event name to match (NULL for all events, within system)
>> + * @set: 1 to enable, 0 to disable
>> + *
>> + * This is a way for other parts of the kernel to enable or disable
>> + * event recording to instances.
>> + *
>> + * Returns 0 on success, -EINVAL if the parameters do not match any
>> + * registered events.
>> + */
>> +int trace_array_set_clr_event(struct trace_array *tr, const char *system,
>> + const char *event, int set)
>> +{
>> + if (!tr)
>> + return -ENODEV;
>> +
>> + return __ftrace_set_clr_event(tr, NULL, system, event, set);
>> +}
>> +EXPORT_SYMBOL_GPL(trace_array_set_clr_event);
>> +
>> /* 128 should be much more than enough */
>> #define EVENT_BUF_SIZE 127
>>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [RFC] Kernel access to Ftrace instances.
@ 2019-03-20 18:28 Divya Indi
0 siblings, 0 replies; 8+ messages in thread
From: Divya Indi @ 2019-03-20 18:28 UTC (permalink / raw)
To: linux-kernel, Steven Rostedt; +Cc: Joe Jin, Divya Indi
[PATCH] tracing: Kernel access to Ftrace instances.
Please review the patch that follows. Below are some details providing
the goal and justification for the patch.
=======================================================================
Goal:
Ftrace provides the feature “instances” that provides the capability to
create multiple Ftrace ring buffers. However, currently these buffers
are created/accessed via userspace only. The kernel APIs providing these
features are not exported, hence cannot be used by other kernel
components. We want to extend this infrastructure to provide the
flexibility to create/log/remove/ enable-disable existing trace events
to these buffers from within the kernel.
Justification:
1. We need module-specific/use-case specific ring buffers (apart
from the global trace buffer) to avoid overwrite by other components.
Hence, the need to use Ftrace "instances".
2. Flexibility to add additional logging to these module-specific
buffers via ksplice/live patch - Having a trace_printk counterpart for
these additional ring buffers.
3. Most often certain issues and events can be best monitored
within kernel.
4. Time sensitivity - We need the capability to dynamically enable
and disable tracing from within kernel to extract relevant debugging
info for the right time-window.
Example:
When the kernel detects an unexpected event such as connection drop (Eg:
RDS/NFS connection drops), we need the capability to enable specific
event tracing to capture relevant info during reconnect. This event
tracing will help us diagnose issues that occur during reconnect like
RCA longer reconnect times. In such cases we also want to disable the
tracing at the right moment and capture a snapshot from within kernel
to make sure we have the relevant diagnostics data and nothing is
overwritten or lost.
Note: The additional logging is not part of the kernel. We intend to
only provide the flexibility to add the logging as part of diagnostics
via ksplice/live-patch on need-basis.
Please find below the compilation of APIs to be introduced or exported as is.
We propose adding two new functions:
1. struct trace_array *trace_array_create(const char *name);
2. int trace_array_destroy(struct trace_array *tr);
In addition, we need to export functions:
3. int trace_array_printk(struct trace_array *tr, unsigned long ip,
const char *fmt, ...);
4. int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set);
5. void trace_printk_init_buffers(void);
To workaround the redundancy due to the newly introduced APIs, we propose the
following restructuring -
1. Move the contents of instance_mkdir to the new API.
static int instance_mkdir(const char *name)
{
return PTR_ERR_OR_ZERO(trace_array_create(name));
}
2. Introduce internal static function: __remove_instance(struct trace_array *tr)
This will be almost similar to old instance_rmdir which
identified the trace_array to be removed based on the name.
Modify existing API to use the internal function:
static int instance_rmdir(const char *name)
{
struct trace_array *tr;
int err = -ENODEV;
mutex_lock(&event_mutex);
mutex_lock(&trace_types_lock);
list_for_each_entry(tr, &ftrace_trace_arrays, list) {
if (tr->name && strcmp(tr->name, name) == 0) {
err = __remove_instance(tr);
break;
}
}
mutex_unlock(&trace_types_lock);
mutex_unlock(&event_mutex);
return err;
}
New API to be exported:
int trace_array_destroy(struct trace_array *tr)
{
int err;
mutex_lock(&event_mutex);
mutex_lock(&trace_types_lock);
err = __remove_instance(tr);
mutex_unlock(&trace_types_lock);
mutex_unlock(&event_mutex);
return err;
}
====================================================================================
Thanks,
Divya
^ permalink raw reply [flat|nested] 8+ messages in thread* [RFC] Kernel access to Ftrace instances.
@ 2019-03-15 23:35 Divya Indi
0 siblings, 0 replies; 8+ messages in thread
From: Divya Indi @ 2019-03-15 23:35 UTC (permalink / raw)
To: linux-kernel; +Cc: Steven Rostedt, Divya Indi
[PATCH] tracing: Kernel access to ftrace instances.
Please review the patch that follows. Below are some details providing
the goal and justification for the patch.
=======================================================================
Goal:
Ftrace provides the feature “instances” that provides the capability to
create multiple Ftrace ring buffers. However, currently these buffers
are created/accessed via userspace only. The kernel APIs providing these
features are not exported, hence cannot be used by other kernel
components. We want to extend this infrastructure to provide the
flexibility to create/log/remove/ enable-disable existing trace events
to these buffers from within the kernel.
Justification:
1. We need module-specific/use-case specific ring buffers (apart
from the global trace buffer) to avoid overwrite by other components.
Hence, the need to use Ftrace "instances".
2. Flexibility to add additional logging to these module-specific
buffers via ksplice/live patch - Having a trace_printk counterpart for
these additional ring buffers.
3. Most often certain issues and events can be best monitored
within kernel.
4. Time sensitivity - We need the capability to dynamically enable
and disable tracing from within kernel to extract relevant debugging
info for the right time-window.
Example:
When the kernel detects an unexpected event such as connection drop (Eg:
RDS/NFS connection drops), we need the capability to enable specific
event tracing to capture relevant info during reconnect. This event
tracing will help us diagnose issues that occur during reconnect like
RCA longer reconnect times. In such cases we also want to disable the
tracing at the right moment and capture a snapshot from within kernel
to make sure we have the relevant diagnostics data and nothing is
overwritten or lost.
Note: The additional logging is not part of the kernel. We intend to
only provide the flexibility to add the logging as part of diagnostics
via ksplice/live-patch on need-basis.
Please find below the compilation of APIs to be introduced or exported as is.
We propose adding two new functions:
1. struct trace_array *trace_array_create(const char *name);
2. int trace_array_destroy(struct trace_array *tr);
In addition, we need to export functions:
3. int trace_array_printk(struct trace_array *tr, unsigned long ip,
const char *fmt, ...);
4. int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set);
5. void trace_printk_init_buffers(void);
To workaround the redundancy due to the newly introduced APIs, we propose the
following restructuring -
1. Move the contents of instance_mkdir to the new API.
static int instance_mkdir(const char *name)
{
return PTR_ERR_OR_ZERO(trace_array_create(name));
}
2. Introduce internal static function: __remove_instance(struct trace_array *tr)
This will be almost similar to old instance_rmdir which
identified the trace_array to be removed based on the name.
Modify existing API to use the internal function:
static int instance_rmdir(const char *name)
{
struct trace_array *tr;
int err = -ENODEV;
mutex_lock(&event_mutex);
mutex_lock(&trace_types_lock);
list_for_each_entry(tr, &ftrace_trace_arrays, list) {
if (tr->name && strcmp(tr->name, name) == 0) {
err = __remove_instance(tr);
break;
}
}
mutex_unlock(&trace_types_lock);
mutex_unlock(&event_mutex);
return err;
}
New API to be exported:
int trace_array_destroy(struct trace_array *tr)
{
int err;
mutex_lock(&event_mutex);
mutex_lock(&trace_types_lock);
err = __remove_instance(tr);
mutex_unlock(&trace_types_lock);
mutex_unlock(&event_mutex);
return err;
}
====================================================================================
Thanks,
Divya
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2019-06-12 15:13 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-05 0:42 [RFC] Kernel Access to Ftrace instances Divya Indi
2019-06-05 0:42 ` [PATCH 1/3] tracing: Relevant changes for kernel access " Divya Indi
2019-06-05 0:42 ` [PATCH 2/3] tracing: Adding additional NULL checks Divya Indi
2019-06-05 0:42 ` [PATCH 3/3] tracing: Add 2 new funcs. for kernel access to Ftrace instances Divya Indi
2019-06-08 21:51 ` Steven Rostedt
2019-06-12 15:12 ` Divya Indi
-- strict thread matches above, loose matches on Subject: below --
2019-03-20 18:28 [RFC] Kernel " Divya Indi
2019-03-15 23:35 Divya Indi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®