Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752364AbbGMNRu (ORCPT ); Mon, 13 Jul 2015 09:17:50 -0400 Received: from mail-wi0-f176.google.com ([209.85.212.176]:34147 "EHLO mail-wi0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751149AbbGMNRs (ORCPT ); Mon, 13 Jul 2015 09:17:48 -0400 Message-ID: <55A3BA61.5040004@linaro.org> Date: Mon, 13 Jul 2015 15:17:21 +0200 From: Eric Auger User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Feng Wu , kvm@vger.kernel.org, linux-kernel@vger.kernel.org CC: pbonzini@redhat.com, alex.williamson@redhat.com, joro@8bytes.org Subject: Re: [v5 14/19] KVM: x86: Add arch specific routines for irqbypass manager References: <1436780855-3617-1-git-send-email-feng.wu@intel.com> <1436780855-3617-15-git-send-email-feng.wu@intel.com> In-Reply-To: <1436780855-3617-15-git-send-email-feng.wu@intel.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3567 Lines: 109 On 07/13/2015 11:47 AM, Feng Wu wrote: > Add the following x86 specific routines for irqbypass manger: > > - kvm_arch_irq_bypass_add_producer > - kvm_arch_irq_bypass_del_producer > > Signed-off-by: Feng Wu > --- > arch/x86/include/asm/kvm_host.h | 1 + > arch/x86/kvm/x86.c | 40 ++++++++++++++++++++++++++++++++++++++++ > include/linux/kvm_host.h | 2 ++ > 3 files changed, 43 insertions(+) > > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > index 1b0278e..6db761b 100644 > --- a/arch/x86/include/asm/kvm_host.h > +++ b/arch/x86/include/asm/kvm_host.h > @@ -24,6 +24,7 @@ > #include > #include > #include > +#include > > #include > #include > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index d81ac02..62bbafe 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -49,6 +49,8 @@ > #include > #include > #include > +#include > +#include > #include > > #define CREATE_TRACE_POINTS > @@ -8023,6 +8025,44 @@ out: > return ret; > } > > +void kvm_arch_irq_bypass_add_producer(struct irq_bypass_consumer *cons, > + struct irq_bypass_producer *prod) static? > +{ > + int ret; > + struct kvm_kernel_irqfd *irqfd = > + container_of(cons, struct kvm_kernel_irqfd, consumer); > + > + irqfd->producer = prod; > + > + ret = kvm_arch_update_pi_irte(irqfd->kvm, prod->irq, irqfd->gsi, 1); > + WARN_ON(ret); > +} > + > +void kvm_arch_irq_bypass_del_producer(struct irq_bypass_consumer *cons, > + struct irq_bypass_producer *prod) > +{ static? Since those 2 functions are not exposed to generic code anymore, why this kvm_arch naming? Eric > + int ret; > + struct kvm_kernel_irqfd *irqfd = > + container_of(cons, struct kvm_kernel_irqfd, consumer); > + > + irqfd->producer = NULL; > + > + /* > + * When producer of consumer is unregistered, we change back to > + * remapped mode, so we can re-use the current implementation > + * when the irq is masked/disabed or the consumer side (KVM > + * int this case doesn't want to receive the interrupts. > + */ > + ret = kvm_arch_update_pi_irte(irqfd->kvm, prod->irq, irqfd->gsi, 0); > + WARN_ON(ret); > +} > + > +void kvm_arch_irq_consumer_init(struct irq_bypass_consumer *cons) > +{ > + cons->add_producer = kvm_arch_irq_bypass_add_producer; > + cons->del_producer = kvm_arch_irq_bypass_del_producer; > +} > + > EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_exit); > EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_inj_virq); > EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_page_fault); > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index f591f7c..e693b3a 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -1073,6 +1073,8 @@ extern struct kvm_device_ops kvm_xics_ops; > extern struct kvm_device_ops kvm_arm_vgic_v2_ops; > extern struct kvm_device_ops kvm_arm_vgic_v3_ops; > > +void kvm_arch_irq_consumer_init(struct irq_bypass_consumer *cons); > + > #ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT > > static inline void kvm_vcpu_set_in_spin_loop(struct kvm_vcpu *vcpu, bool val) > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/