Re: [1/1] powerpc/hv-24x7: Check support before registering PMU
From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2015-05-11 10:26:18
Also in:
lkml
On Thu, 2015-30-04 at 03:04:51 UTC, Sukadev Bhattiprolu wrote:
We currently try to register the 24x7 PMU unconditionally. Not all Power systems support 24x7 counters (eg: Power7). On these systems we get a backtrace during boot when trying to register the 24x7 PMU. Check if the hypervisor supports 24x7 counters before attempting to register the 24x7 PMU.
The concept is good, but ..
quoted hunk ↗ jump to hunk
diff --git a/arch/powerpc/perf/hv-24x7.c b/arch/powerpc/perf/hv-24x7.c index ec2eb20..19a59a3 100644 --- a/arch/powerpc/perf/hv-24x7.c +++ b/arch/powerpc/perf/hv-24x7.c@@ -1268,12 +1268,44 @@ static struct pmu h_24x7_pmu = { .read = h_24x7_event_read, }; +/* + * Return 1 if we can access the 24x7 counter catalog from the hypervisor. + * Return 0 otherwise. + */ +static int hv_has_24x7(void)
bool please
+{
+ int page_size = 4096;
+ unsigned long hret;
+ void *page;
+ struct hv_24x7_catalog_page_0 *page_0;
+
+ page_0 = kmalloc(page_size*2, GFP_KERNEL);
+ if (!page_0)
+ return 0;
+
+ /* buffer for catalog needs to be 4K-aligned */
+ page = (void *)((long)page_0 & (~page_size-1)) + page_size;
+ hret = h_get_24x7_catalog_page(page, 0, 0);
+ kfree(page_0);It shouldn't need to be this complicated. You should just be able to do the hcall with bogus args and if you get H_FUNCTION then 24x7 is not supported. cheers