diff -urp linux-3.10.11-100.fc18.x86_64.ORG/include/uapi/linux/perf_event.h linux-3.10.11-100.fc18.x86_64.clean2/include/uapi/linux/perf_event.h --- linux-3.10.11-100.fc18.x86_64.ORG/include/uapi/linux/perf_event.h 2013-07-01 00:13:29.000000000 +0200 +++ linux-3.10.11-100.fc18.x86_64.clean2/include/uapi/linux/perf_event.h 2013-09-25 23:41:31.265576897 +0200 @@ -273,7 +273,9 @@ struct perf_event_attr { exclude_callchain_kernel : 1, /* exclude kernel callchains */ exclude_callchain_user : 1, /* exclude user callchains */ - __reserved_1 : 41; + sysexit_stop : 1, + + __reserved_1 : 40; union { __u32 wakeup_events; /* wakeup every n events */ diff -urp linux-3.10.11-100.fc18.x86_64.ORG/kernel/events/core.c linux-3.10.11-100.fc18.x86_64.clean2/kernel/events/core.c --- linux-3.10.11-100.fc18.x86_64.ORG/kernel/events/core.c 2013-09-23 12:03:25.719253908 +0200 +++ linux-3.10.11-100.fc18.x86_64.clean2/kernel/events/core.c 2013-09-25 23:43:00.376621584 +0200 @@ -5026,6 +5026,10 @@ static int __perf_event_overflow(struct irq_work_queue(&event->pending); } + if (!in_interrupt() && event->attr.sysexit_stop && current->ptrace) { + set_tsk_thread_flag(current, TIF_SYSCALL_TRACE); + } + return ret; }