|
@@ -888,12 +888,20 @@ check_irq_entry(struct trace_iterator *iter, u32 flags,
|
|
|
unsigned long addr, int depth)
|
|
|
{
|
|
|
int cpu = iter->cpu;
|
|
|
+ int *depth_irq;
|
|
|
struct fgraph_data *data = iter->private;
|
|
|
- int *depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
|
|
|
|
|
|
- if (flags & TRACE_GRAPH_PRINT_IRQS)
|
|
|
+ /*
|
|
|
+ * If we are either displaying irqs, or we got called as
|
|
|
+ * a graph event and private data does not exist,
|
|
|
+ * then we bypass the irq check.
|
|
|
+ */
|
|
|
+ if ((flags & TRACE_GRAPH_PRINT_IRQS) ||
|
|
|
+ (!data))
|
|
|
return 0;
|
|
|
|
|
|
+ depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
|
|
|
+
|
|
|
/*
|
|
|
* We are inside the irq code
|
|
|
*/
|
|
@@ -926,12 +934,20 @@ static int
|
|
|
check_irq_return(struct trace_iterator *iter, u32 flags, int depth)
|
|
|
{
|
|
|
int cpu = iter->cpu;
|
|
|
+ int *depth_irq;
|
|
|
struct fgraph_data *data = iter->private;
|
|
|
- int *depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
|
|
|
|
|
|
- if (flags & TRACE_GRAPH_PRINT_IRQS)
|
|
|
+ /*
|
|
|
+ * If we are either displaying irqs, or we got called as
|
|
|
+ * a graph event and private data does not exist,
|
|
|
+ * then we bypass the irq check.
|
|
|
+ */
|
|
|
+ if ((flags & TRACE_GRAPH_PRINT_IRQS) ||
|
|
|
+ (!data))
|
|
|
return 0;
|
|
|
|
|
|
+ depth_irq = &(per_cpu_ptr(data->cpu_data, cpu)->depth_irq);
|
|
|
+
|
|
|
/*
|
|
|
* We are not inside the irq code.
|
|
|
*/
|