Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 211808
b: refs/heads/master
c: 2bf2160
h: refs/heads/master
v: v3
  • Loading branch information
Lai Jiangshan authored and Frederic Weisbecker committed Sep 7, 2010
1 parent d82fb09 commit d435f60
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f6195aa09e618d712f52bf4fa33b5293820eb93d
refs/heads/master: 2bf2160d8805de64308e2e7c3cd97813cb58ed2f
8 changes: 7 additions & 1 deletion trunk/include/linux/interrupt.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include <asm/atomic.h>
#include <asm/ptrace.h>
#include <asm/system.h>
#include <trace/events/irq.h>

/*
* These correspond to the IORESOURCE_IRQ_* defines in
Expand Down Expand Up @@ -407,7 +408,12 @@ asmlinkage void do_softirq(void);
asmlinkage void __do_softirq(void);
extern void open_softirq(int nr, void (*action)(struct softirq_action *));
extern void softirq_init(void);
#define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0)
static inline void __raise_softirq_irqoff(unsigned int nr)
{
trace_softirq_raise((struct softirq_action *)(unsigned long)nr, NULL);
or_softirq_pending(1UL << nr);
}

extern void raise_softirq_irqoff(unsigned int nr);
extern void raise_softirq(unsigned int nr);
extern void wakeup_softirqd(void);
Expand Down
26 changes: 24 additions & 2 deletions trunk/include/trace/events/irq.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
#define _TRACE_IRQ_H

#include <linux/tracepoint.h>
#include <linux/interrupt.h>

struct irqaction;
struct softirq_action;

#define softirq_name(sirq) { sirq##_SOFTIRQ, #sirq }
#define show_softirq_name(val) \
Expand Down Expand Up @@ -93,7 +95,10 @@ DECLARE_EVENT_CLASS(softirq,
),

TP_fast_assign(
__entry->vec = (int)(h - vec);
if (vec)
__entry->vec = (int)(h - vec);
else
__entry->vec = (int)(long)h;
),

TP_printk("vec=%d [action=%s]", __entry->vec,
Expand Down Expand Up @@ -136,6 +141,23 @@ DEFINE_EVENT(softirq, softirq_exit,
TP_ARGS(h, vec)
);

/**
* softirq_raise - called immediately when a softirq is raised
* @h: pointer to struct softirq_action
* @vec: pointer to first struct softirq_action in softirq_vec array
*
* The @h parameter contains a pointer to the softirq vector number which is
* raised. @vec is NULL and it means @h includes vector number not
* softirq_action. When used in combination with the softirq_entry tracepoint
* we can determine the softirq raise latency.
*/
DEFINE_EVENT(softirq, softirq_raise,

TP_PROTO(struct softirq_action *h, struct softirq_action *vec),

TP_ARGS(h, vec)
);

#endif /* _TRACE_IRQ_H */

/* This part must be outside protection */
Expand Down

0 comments on commit d435f60

Please sign in to comment.