On Thu, Mar 10, 2016 at 09:44:30AM -0500, Vince Weaver wrote: > On Thu, 10 Mar 2016, Peter Zijlstra wrote: > > > On Wed, Feb 24, 2016 at 06:45:39PM +0100, Peter Zijlstra wrote: > > > > Boris, who has been running syz-kaller on AMD hardware and was hitting a > > very similar bug with the AMD-IBS code, says its not fixed it for him, > > so maybe there's still more to find. > > sorry I am not being much help with this big syz-kaller bug hunt, but I > just wanted to chime in that there's a (probably the same) long standing > IBS bug that perf_fuzzer hits all the time too, it was bad enough > that I had to stop running perf_fuzzer on my AMD box.
The below seems to fix the IBS issue tickled by syz-kaller on my machine. I've not yet ran perf-fuzzer, which seems able to tickle a different set of bugs. --- Subject: perf, amb: Fix IBS throttle When the IBS IRQ handler get a !0 return from perf_event_overflow; meaning it should throttle the event, it only disables it, it doesn't call perf_ibs_stop(). This confuses the state machine, as we'll use pmu::start() -> perf_ibs_start() to unthrottle. Signed-off-by: Peter Zijlstra (Intel) <pet...@infradead.org> --- arch/x86/events/amd/ibs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c index 51087c29b2c2..7956d29762ef 100644 --- a/arch/x86/events/amd/ibs.c +++ b/arch/x86/events/amd/ibs.c @@ -599,7 +599,7 @@ static int perf_ibs_handle_irq(struct perf_ibs *perf_ibs, struct pt_regs *iregs) throttle = perf_event_overflow(event, &data, ®s); out: if (throttle) - perf_ibs_disable_event(perf_ibs, hwc, *config); + perf_ibs_stop(event, 0); else perf_ibs_enable_event(perf_ibs, hwc, period >> 4);