From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anup Patel Subject: [RFC PATCH 2/6] ARM64: perf: Re-enable overflow interrupt from interrupt handler Date: Tue, 5 Aug 2014 14:54:11 +0530 Message-ID: <1407230655-28864-3-git-send-email-anup.patel@linaro.org> References: <1407230655-28864-1-git-send-email-anup.patel@linaro.org> Cc: linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, patches@apm.com, marc.zyngier@arm.com, christoffer.dall@linaro.org, will.deacon@arm.com, ian.campbell@citrix.com, pranavkumar@linaro.org, Anup Patel To: kvmarm@lists.cs.columbia.edu Return-path: Received: from mail-pd0-f181.google.com ([209.85.192.181]:49433 "EHLO mail-pd0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932987AbaHEJYp (ORCPT ); Tue, 5 Aug 2014 05:24:45 -0400 Received: by mail-pd0-f181.google.com with SMTP id g10so1009242pdj.26 for ; Tue, 05 Aug 2014 02:24:44 -0700 (PDT) In-Reply-To: <1407230655-28864-1-git-send-email-anup.patel@linaro.org> Sender: kvm-owner@vger.kernel.org List-ID: A hypervisor will typically mask the overflow interrupt before forwarding it to Guest Linux hence we need to re-enable the overflow interrupt after clearing it in Guest Linux. Also, this re-enabling of overflow interrupt does not harm in non-virtualized scenarios. Signed-off-by: Pranavkumar Sawargaonkar Signed-off-by: Anup Patel --- arch/arm64/kernel/perf_event.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c index 47dfb8b..19fb140 100644 --- a/arch/arm64/kernel/perf_event.c +++ b/arch/arm64/kernel/perf_event.c @@ -1076,6 +1076,14 @@ static irqreturn_t armv8pmu_handle_irq(int irq_num, void *dev) if (!armv8pmu_counter_has_overflowed(pmovsr, idx)) continue; + /* + * If we are running under a hypervisor such as KVM then + * hypervisor will mask the interrupt before forwarding + * it to Guest Linux hence re-enable interrupt for the + * overflowed counter. + */ + armv8pmu_enable_intens(idx); + hwc = &event->hw; armpmu_event_update(event, hwc, idx); perf_sample_data_init(&data, 0, hwc->last_period); -- 1.7.9.5