|
@@ -99,6 +99,74 @@ TRACE_EVENT(signal_deliver,
|
|
__entry->sig, __entry->errno, __entry->code,
|
|
__entry->sig, __entry->errno, __entry->code,
|
|
__entry->sa_handler, __entry->sa_flags)
|
|
__entry->sa_handler, __entry->sa_flags)
|
|
);
|
|
);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * signal_overflow_fail - called when signal queue is overflow
|
|
|
|
+ * @sig: signal number
|
|
|
|
+ * @group: signal to process group or not (bool)
|
|
|
|
+ * @info: pointer to struct siginfo
|
|
|
|
+ *
|
|
|
|
+ * Kernel fails to generate 'sig' signal with 'info' siginfo, because
|
|
|
|
+ * siginfo queue is overflow, and the signal is dropped.
|
|
|
|
+ * 'group' is not 0 if the signal will be sent to a process group.
|
|
|
|
+ * 'sig' is always one of RT signals.
|
|
|
|
+ */
|
|
|
|
+TRACE_EVENT(signal_overflow_fail,
|
|
|
|
+
|
|
|
|
+ TP_PROTO(int sig, int group, struct siginfo *info),
|
|
|
|
+
|
|
|
|
+ TP_ARGS(sig, group, info),
|
|
|
|
+
|
|
|
|
+ TP_STRUCT__entry(
|
|
|
|
+ __field( int, sig )
|
|
|
|
+ __field( int, group )
|
|
|
|
+ __field( int, errno )
|
|
|
|
+ __field( int, code )
|
|
|
|
+ ),
|
|
|
|
+
|
|
|
|
+ TP_fast_assign(
|
|
|
|
+ __entry->sig = sig;
|
|
|
|
+ __entry->group = group;
|
|
|
|
+ TP_STORE_SIGINFO(__entry, info);
|
|
|
|
+ ),
|
|
|
|
+
|
|
|
|
+ TP_printk("sig=%d group=%d errno=%d code=%d",
|
|
|
|
+ __entry->sig, __entry->group, __entry->errno, __entry->code)
|
|
|
|
+);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * signal_lose_info - called when siginfo is lost
|
|
|
|
+ * @sig: signal number
|
|
|
|
+ * @group: signal to process group or not (bool)
|
|
|
|
+ * @info: pointer to struct siginfo
|
|
|
|
+ *
|
|
|
|
+ * Kernel generates 'sig' signal but loses 'info' siginfo, because siginfo
|
|
|
|
+ * queue is overflow.
|
|
|
|
+ * 'group' is not 0 if the signal will be sent to a process group.
|
|
|
|
+ * 'sig' is always one of non-RT signals.
|
|
|
|
+ */
|
|
|
|
+TRACE_EVENT(signal_lose_info,
|
|
|
|
+
|
|
|
|
+ TP_PROTO(int sig, int group, struct siginfo *info),
|
|
|
|
+
|
|
|
|
+ TP_ARGS(sig, group, info),
|
|
|
|
+
|
|
|
|
+ TP_STRUCT__entry(
|
|
|
|
+ __field( int, sig )
|
|
|
|
+ __field( int, group )
|
|
|
|
+ __field( int, errno )
|
|
|
|
+ __field( int, code )
|
|
|
|
+ ),
|
|
|
|
+
|
|
|
|
+ TP_fast_assign(
|
|
|
|
+ __entry->sig = sig;
|
|
|
|
+ __entry->group = group;
|
|
|
|
+ TP_STORE_SIGINFO(__entry, info);
|
|
|
|
+ ),
|
|
|
|
+
|
|
|
|
+ TP_printk("sig=%d group=%d errno=%d code=%d",
|
|
|
|
+ __entry->sig, __entry->group, __entry->errno, __entry->code)
|
|
|
|
+);
|
|
#endif /* _TRACE_SIGNAL_H */
|
|
#endif /* _TRACE_SIGNAL_H */
|
|
|
|
|
|
/* This part must be outside protection */
|
|
/* This part must be outside protection */
|