From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753256AbcGSHWB (ORCPT ); Tue, 19 Jul 2016 03:22:01 -0400 Received: from terminus.zytor.com ([198.137.202.10]:46006 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752536AbcGSHV7 (ORCPT ); Tue, 19 Jul 2016 03:21:59 -0400 Date: Tue, 19 Jul 2016 00:21:19 -0700 From: tip-bot for Richard Cochran Message-ID: Cc: christoffer.dall@linaro.org, mingo@kernel.org, marc.zyngier@arm.com, bigeasy@linutronix.de, gleb@kernel.org, rkrcmar@redhat.com, hpa@zytor.com, rcochran@linutronix.de, anna-maria@linutronix.de, pbonzini@redhat.com, linux-kernel@vger.kernel.org, torvalds@linux-foundation.org, peterz@infradead.org, tglx@linutronix.de Reply-To: pbonzini@redhat.com, peterz@infradead.org, tglx@linutronix.de, linux-kernel@vger.kernel.org, torvalds@linux-foundation.org, anna-maria@linutronix.de, hpa@zytor.com, rcochran@linutronix.de, rkrcmar@redhat.com, gleb@kernel.org, christoffer.dall@linaro.org, mingo@kernel.org, marc.zyngier@arm.com, bigeasy@linutronix.de In-Reply-To: <20160713153336.546953286@linutronix.de> References: <20160713153336.546953286@linutronix.de> To: linux-tip-commits@vger.kernel.org Subject: [tip:smp/hotplug] arm/kvm/vgic: Convert to hotplug state machine Git-Commit-ID: 42ec50b5f257b19bd5653c40933b0803d5c4179a X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 42ec50b5f257b19bd5653c40933b0803d5c4179a Gitweb: http://git.kernel.org/tip/42ec50b5f257b19bd5653c40933b0803d5c4179a Author: Richard Cochran AuthorDate: Wed, 13 Jul 2016 17:16:46 +0000 Committer: Ingo Molnar CommitDate: Fri, 15 Jul 2016 10:40:26 +0200 arm/kvm/vgic: Convert to hotplug state machine Install the callbacks via the state machine and let the core invoke the callbacks on the already online CPUs. The VGIC callback is run after KVM's main callback since it reflects the makefile order. Signed-off-by: Richard Cochran Signed-off-by: Anna-Maria Gleixner Reviewed-by: Sebastian Andrzej Siewior Cc: Christoffer Dall Cc: Gleb Natapov Cc: Linus Torvalds Cc: Marc Zyngier Cc: Paolo Bonzini Cc: Peter Zijlstra Cc: Radim Krcmar Cc: Thomas Gleixner Cc: kvm@vger.kernel.org Cc: kvmarm@lists.cs.columbia.edu Cc: linux-arm-kernel@lists.infradead.org Cc: rt@linutronix.de Link: http://lkml.kernel.org/r/20160713153336.546953286@linutronix.de Signed-off-by: Ingo Molnar --- include/linux/cpuhotplug.h | 1 + virt/kvm/arm/vgic.c | 39 ++++++++------------------------------- 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h index 24f56e2..ff37cac 100644 --- a/include/linux/cpuhotplug.h +++ b/include/linux/cpuhotplug.h @@ -42,6 +42,7 @@ enum cpuhp_state { CPUHP_AP_QCOM_TIMER_STARTING, CPUHP_AP_MIPS_GIC_TIMER_STARTING, CPUHP_AP_KVM_STARTING, + CPUHP_AP_KVM_ARM_VGIC_STARTING, CPUHP_AP_LEDTRIG_STARTING, CPUHP_AP_NOTIFY_STARTING, CPUHP_AP_ONLINE, diff --git a/virt/kvm/arm/vgic.c b/virt/kvm/arm/vgic.c index c3bfbb9..67cb5e9 100644 --- a/virt/kvm/arm/vgic.c +++ b/virt/kvm/arm/vgic.c @@ -2326,32 +2326,18 @@ int vgic_has_attr_regs(const struct vgic_io_range *ranges, phys_addr_t offset) return -ENXIO; } -static void vgic_init_maintenance_interrupt(void *info) +static int vgic_starting_cpu(unsigned int cpu) { enable_percpu_irq(vgic->maint_irq, 0); + return 0; } -static int vgic_cpu_notify(struct notifier_block *self, - unsigned long action, void *cpu) +static int vgic_dying_cpu(unsigned int cpu) { - switch (action) { - case CPU_STARTING: - case CPU_STARTING_FROZEN: - vgic_init_maintenance_interrupt(NULL); - break; - case CPU_DYING: - case CPU_DYING_FROZEN: - disable_percpu_irq(vgic->maint_irq); - break; - } - - return NOTIFY_OK; + disable_percpu_irq(vgic->maint_irq); + return 0; } -static struct notifier_block vgic_cpu_nb = { - .notifier_call = vgic_cpu_notify, -}; - static int kvm_vgic_probe(void) { const struct gic_kvm_info *gic_kvm_info; @@ -2392,19 +2378,10 @@ int kvm_vgic_hyp_init(void) return ret; } - ret = __register_cpu_notifier(&vgic_cpu_nb); - if (ret) { - kvm_err("Cannot register vgic CPU notifier\n"); - goto out_free_irq; - } - - on_each_cpu(vgic_init_maintenance_interrupt, NULL, 1); - + cpuhp_setup_state(CPUHP_AP_KVM_ARM_VGIC_STARTING, + "AP_KVM_ARM_VGIC_STARTING", vgic_starting_cpu, + vgic_dying_cpu); return 0; - -out_free_irq: - free_percpu_irq(vgic->maint_irq, kvm_get_running_vcpus()); - return ret; } int kvm_irq_map_gsi(struct kvm *kvm,