With the addition of trace_softirq_raise() the softirq tracepoint got even more convoluted. Why the tracepoints take two pointers to assign an integer is beyond my comprehension. But adding an extra case which treats the first pointer as an unsigned long when the second pointer is NULL including the back and forth type casting is just horrible. Convert the softirq tracepoints to take a single unsigned int argument for the softirq vector number and fix the call sites.
Showing the changes to include/linux (1 of 3 files). Show all
Unified · Split
| @@ -410,7 +410,7 @@ extern void open_softirq(int nr, void (*action)(struct softirq_action *)); · 409 unmodified lines | |||
| 410 | extern void softirq_init(void); | 410 | extern void softirq_init(void); |
| 411 | static inline void __raise_softirq_irqoff(unsigned int nr) | 411 | static inline void __raise_softirq_irqoff(unsigned int nr) |
| 412 | { | 412 | { |
| 413 | trace_softirq_raise((struct softirq_action *)(unsigned long)nr, NULL); | 413 | trace_softirq_raise(nr); |
| 414 | or_softirq_pending(1UL << nr); | 414 | or_softirq_pending(1UL << nr); |
| 415 | } | 415 | } |
| 416 | 416 | ||