diff mbox series

KVM: arm64: build perf support only when enabled

Message ID 20210421134922.3309033-1-arnd@kernel.org (mailing list archive)
State New, archived
Headers show
Series KVM: arm64: build perf support only when enabled | expand

Commit Message

Arnd Bergmann April 21, 2021, 1:49 p.m. UTC
From: Arnd Bergmann <arnd@arndb.de>

The perf_num_counters() function is only defined when CONFIG_PERF_EVENTS
is enabled:

arch/arm64/kvm/perf.c: In function 'kvm_perf_init':
arch/arm64/kvm/perf.c:58:43: error: implicit declaration of function 'perf_num_counters'; did you mean 'dec_mm_counter'? [-Werror=implicit-function-declaration]
   58 |         if (IS_ENABLED(CONFIG_ARM_PMU) && perf_num_counters() > 0
      |                                           ^~~~~~~~~~~~~~~~~

Use conditional compilation to disable this feature entirely when
CONFIG_PERF_EVENTS is disabled in the host.

Fixes: 6b5b368fccd7 ("KVM: arm64: Turn kvm_arm_support_pmu_v3() into a static key")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
Not sure if this is the correct symbol to check for, but this is
one way to avoid the build failure.
---
 arch/arm64/kvm/Makefile | 4 +++-
 arch/arm64/kvm/arm.c    | 8 +++++---
 include/kvm/arm_pmu.h   | 7 +++++++
 3 files changed, 15 insertions(+), 4 deletions(-)

Comments

Marc Zyngier April 21, 2021, 1:56 p.m. UTC | #1
On Wed, 21 Apr 2021 14:49:01 +0100,
Arnd Bergmann <arnd@kernel.org> wrote:
> 
> From: Arnd Bergmann <arnd@arndb.de>
> 
> The perf_num_counters() function is only defined when CONFIG_PERF_EVENTS
> is enabled:
> 
> arch/arm64/kvm/perf.c: In function 'kvm_perf_init':
> arch/arm64/kvm/perf.c:58:43: error: implicit declaration of function 'perf_num_counters'; did you mean 'dec_mm_counter'? [-Werror=implicit-function-declaration]
>    58 |         if (IS_ENABLED(CONFIG_ARM_PMU) && perf_num_counters() > 0
>       |                                           ^~~~~~~~~~~~~~~~~
> 
> Use conditional compilation to disable this feature entirely when
> CONFIG_PERF_EVENTS is disabled in the host.
> 
> Fixes: 6b5b368fccd7 ("KVM: arm64: Turn kvm_arm_support_pmu_v3() into a static key")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> Not sure if this is the correct symbol to check for, but this is
> one way to avoid the build failure.

I think a better way is to get rid of perf_num_counters() entirely,
see [1]. If someone acks the second and last patches, I'll even take
the whole series in (nudge nudge...).

Thanks,

	M.

[1] https://lore.kernel.org/r/20210414134409.1266357-1-maz@kernel.org
Arnd Bergmann April 21, 2021, 2:28 p.m. UTC | #2
On Wed, Apr 21, 2021 at 3:56 PM Marc Zyngier <maz@kernel.org> wrote:
> On Wed, 21 Apr 2021 14:49:01 +0100, Arnd Bergmann <arnd@kernel.org> wrote:
>
> I think a better way is to get rid of perf_num_counters() entirely,
> see [1]. If someone acks the second and last patches, I'll even take
> the whole series in (nudge nudge...).

Makes sense. I like your diffstat, too.

       Arnd
Will Deacon April 22, 2021, 10:12 a.m. UTC | #3
On Wed, Apr 21, 2021 at 02:56:16PM +0100, Marc Zyngier wrote:
> On Wed, 21 Apr 2021 14:49:01 +0100,
> Arnd Bergmann <arnd@kernel.org> wrote:
> > 
> > From: Arnd Bergmann <arnd@arndb.de>
> > 
> > The perf_num_counters() function is only defined when CONFIG_PERF_EVENTS
> > is enabled:
> > 
> > arch/arm64/kvm/perf.c: In function 'kvm_perf_init':
> > arch/arm64/kvm/perf.c:58:43: error: implicit declaration of function 'perf_num_counters'; did you mean 'dec_mm_counter'? [-Werror=implicit-function-declaration]
> >    58 |         if (IS_ENABLED(CONFIG_ARM_PMU) && perf_num_counters() > 0
> >       |                                           ^~~~~~~~~~~~~~~~~
> > 
> > Use conditional compilation to disable this feature entirely when
> > CONFIG_PERF_EVENTS is disabled in the host.
> > 
> > Fixes: 6b5b368fccd7 ("KVM: arm64: Turn kvm_arm_support_pmu_v3() into a static key")
> > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> > ---
> > Not sure if this is the correct symbol to check for, but this is
> > one way to avoid the build failure.
> 
> I think a better way is to get rid of perf_num_counters() entirely,
> see [1]. If someone acks the second and last patches, I'll even take
> the whole series in (nudge nudge...).

Sorry, behind at the moment! Will get to it today.

Will
diff mbox series

Patch

diff --git a/arch/arm64/kvm/Makefile b/arch/arm64/kvm/Makefile
index 589921392cb1..9adf12ba5047 100644
--- a/arch/arm64/kvm/Makefile
+++ b/arch/arm64/kvm/Makefile
@@ -12,7 +12,7 @@  obj-$(CONFIG_KVM) += hyp/
 
 kvm-y := $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o $(KVM)/eventfd.o \
 	 $(KVM)/vfio.o $(KVM)/irqchip.o \
-	 arm.o mmu.o mmio.o psci.o perf.o hypercalls.o pvtime.o \
+	 arm.o mmu.o mmio.o psci.o hypercalls.o pvtime.o \
 	 inject_fault.o va_layout.o handle_exit.o \
 	 guest.o debug.o reset.o sys_regs.o \
 	 vgic-sys-reg-v3.o fpsimd.o pmu.o \
@@ -24,4 +24,6 @@  kvm-y := $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o $(KVM)/eventfd.o \
 	 vgic/vgic-mmio-v3.o vgic/vgic-kvm-device.o \
 	 vgic/vgic-its.o vgic/vgic-debug.o
 
+kvm-$(CONFIG_PERF_EVENTS) += perf.o
+
 kvm-$(CONFIG_HW_PERF_EVENTS)  += pmu-emul.o
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index 4808aca8c87c..720e075c70f9 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -1694,7 +1694,8 @@  static int init_subsystems(void)
 	if (err)
 		goto out;
 
-	kvm_perf_init();
+	if (IS_ENABLED(CONFIG_PERF_EVENTS))
+		kvm_perf_init();
 	kvm_sys_reg_table_init();
 
 out:
@@ -1899,7 +1900,8 @@  static int init_hyp_mode(void)
 	return 0;
 
 out_err:
-	teardown_hyp_mode();
+	if (IS_ENABLED(CONFIG_PERF_EVENTS))
+		teardown_hyp_mode();
 	kvm_err("error initializing Hyp mode: %d\n", err);
 	return err;
 }
@@ -2101,7 +2103,7 @@  int kvm_arch_init(void *opaque)
 
 out_hyp:
 	hyp_cpu_pm_exit();
-	if (!in_hyp_mode)
+	if (!IS_ENABLED(CONFIG_PERF_EVENTS) && in_hyp_mode)
 		teardown_hyp_mode();
 out_err:
 	return err;
diff --git a/include/kvm/arm_pmu.h b/include/kvm/arm_pmu.h
index 6fd3cda608e4..d84307a1ebd5 100644
--- a/include/kvm/arm_pmu.h
+++ b/include/kvm/arm_pmu.h
@@ -13,12 +13,19 @@ 
 #define ARMV8_PMU_CYCLE_IDX		(ARMV8_PMU_MAX_COUNTERS - 1)
 #define ARMV8_PMU_MAX_COUNTER_PAIRS	((ARMV8_PMU_MAX_COUNTERS + 1) >> 1)
 
+#ifdef CONFIG_PERF_EVENTS
 DECLARE_STATIC_KEY_FALSE(kvm_arm_pmu_available);
 
 static __always_inline bool kvm_arm_support_pmu_v3(void)
 {
 	return static_branch_likely(&kvm_arm_pmu_available);
 }
+#else
+static __always_inline bool kvm_arm_support_pmu_v3(void)
+{
+	return 0;
+}
+#endif
 
 #ifdef CONFIG_HW_PERF_EVENTS