]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Don't panic in hwpmc when stopping sampling.
authorAndrew Turner <andrew@FreeBSD.org>
Sat, 28 May 2016 13:05:39 +0000 (13:05 +0000)
committerAndrew Turner <andrew@FreeBSD.org>
Sat, 28 May 2016 13:05:39 +0000 (13:05 +0000)
commit7bc7e3cd65d0b399c04578b46ca7e0536e09b45e
tree6ae0da9974e37e213b350595dc71c70b6aefa396
parentc169d9fe07ad2ad1767ccc9725a0dc9eef052175
Don't panic in hwpmc when stopping sampling.

When hwpmc stops sampling it will set the pm_state to something other
than PMC_STATE_RUNNING. This means the following sequence can happen:

CPU 0: Enter the interrupt handler
CPU 0: Set the thread TDP_CALLCHAIN pflag
CPU 1: Stop sampling
CPU 0: Call pmc_process_samples, sampling is stopped so clears ps_nsamples
CPU 0: Finishes interrupt processing with the TDP_CALLCHAIN flag set
CPU 0: Call pmc_capture_user_callchain to capture the user call chain
CPU 0: Find all the pmc sample are free so no call chains need to be captured
CPU 0: KASSERT because of this

This fixes the issue by checking if any of the samples have been stopped
and including this in te KASSERT.

PR: 204273
Reviewed by: bz, gnn
Obtained from: ABT Systems Ltd
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D6581
sys/dev/hwpmc/hwpmc_mod.c