From c4b4b7222e69ddb8c36915fa6d0daab346011ba0 Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Thu, 16 Aug 2018 16:48:48 +0900 Subject: [PATCH] arm64: ihk_mc_perfctr_start/stop: fix prototype that was changed in x86 The functions now take a bitmask in argument since commit d7416c6f79d51 ("perf_event: Specify counter by bit_mask on start/stop")... Thanksfully the change also induced a type modification so it was easy to notice. (On the other hand I'm building with --disable-perf so why the hell is that file compiled?!) Change-Id: Ie16367cc94e81068b70e1b80142a6394de896c4f --- arch/arm64/kernel/perfctr.c | 49 +++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/arch/arm64/kernel/perfctr.c b/arch/arm64/kernel/perfctr.c index 5904e416..518173ab 100644 --- a/arch/arm64/kernel/perfctr.c +++ b/arch/arm64/kernel/perfctr.c @@ -93,21 +93,50 @@ int ihk_mc_perfctr_init(int counter, uint64_t config, int mode) return ret; } -int ihk_mc_perfctr_start(int counter) +int ihk_mc_perfctr_start(unsigned long counter_mask) { - int ret; - ret = cpu_pmu.enable_counter(counter); - return ret; + int ret = 0; + int counter; + unsigned long counter_bit; + + for (counter = 0, counter_bit = 1; + counter_bit < counter_mask; + counter++, counter_bit <<= 1) { + if (!(counter_mask & counter_bit)) + continue; + + ret = cpu_pmu.enable_counter(counter_mask); + if (ret < 0) + break; + } + + return ret < 0 ? ret : 0; } -int ihk_mc_perfctr_stop(int counter) +int ihk_mc_perfctr_stop(unsigned long counter_mask) { - cpu_pmu.disable_counter(counter); + int ret = 0; + int counter; + unsigned long counter_bit; - // ihk_mc_perfctr_startが呼ばれるときには、 - // init系関数が呼ばれるのでdisableにする。 - cpu_pmu.disable_intens(counter); - return 0; + for (counter = 0, counter_bit = 1; + counter_bit < counter_mask; + counter++, counter_bit <<= 1) { + if (!(counter_mask & counter_bit)) + continue; + + ret = cpu_pmu.disable_counter(counter); + if (ret < 0) + break; + + // ihk_mc_perfctr_startが呼ばれるときには、 + // init系関数が呼ばれるのでdisableにする。 + ret = cpu_pmu.disable_intens(counter); + if (ret < 0) + break; + } + + return ret < 0 ? ret : 0; } int ihk_mc_perfctr_reset(int counter)