All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Williamson <alex.williamson@redhat.com>
To: Feng Wu <feng.wu@intel.com>
Cc: kvm@vger.kernel.org, pbonzini@redhat.com, joro@8bytes.org,
	avi.kivity@gmail.com, eric.auger@linaro.org
Subject: Re: [RFC v1 4/5] KVM: x86: Add arch specific routines for irqbypass manager
Date: Thu, 09 Jul 2015 21:27:20 -0600	[thread overview]
Message-ID: <1436498840.1391.247.camel@redhat.com> (raw)
In-Reply-To: <1436497207-4786-5-git-send-email-feng.wu@intel.com>

On Fri, 2015-07-10 at 11:00 +0800, Feng Wu wrote:
> Add the following x86 specific routines for irqbypass manger:
> 
> - kvm_arch_irq_bypass_add_producer
> - kvm_arch_irq_bypass_del_producer
> - kvm_arch_irq_bypass_stop
> - kvm_arch_irq_bypass_resume
> - kvm_arch_irq_bypass_update
> 
> Signed-off-by: Feng Wu <feng.wu@intel.com>
> ---
>  arch/x86/kvm/Kconfig |  1 +
>  arch/x86/kvm/x86.c   | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 56 insertions(+)
> 
> diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
> index 22f6fcb..ae68f2a 100644
> --- a/arch/x86/kvm/Kconfig
> +++ b/arch/x86/kvm/Kconfig
> @@ -62,6 +62,7 @@ config KVM_INTEL
>  	# for perf_guest_get_msrs():
>  	depends on CPU_SUP_INTEL
>  	select IRQ_BYPASS_MANAGER
> +	select HAVE_KVM_IRQ_BYPASS
>  	---help---
>  	  Provides support for KVM on Intel processors equipped with the VT
>  	  extensions.
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index d81ac02..a59f7e3 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -49,6 +49,8 @@
>  #include <linux/pci.h>
>  #include <linux/timekeeper_internal.h>
>  #include <linux/pvclock_gtod.h>
> +#include <linux/kvm_irqfd.h>
> +#include <linux/irqbypass.h>
>  #include <trace/events/kvm.h>
>  
>  #define CREATE_TRACE_POINTS
> @@ -8023,6 +8025,59 @@ out:
>  	return ret;
>  }
>  
> +void kvm_arch_irq_bypass_add_producer(struct irq_bypass_consumer *cons,
> +				      struct irq_bypass_producer *prod)
> +{
> +	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)
> +{
> +	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_bypass_stop(struct irq_bypass_consumer *cons)
> +{
> +}
> +
> +void kvm_arch_irq_bypass_resume(struct irq_bypass_consumer *cons)
> +{
> +}

No need for dummy functions, these callbacks will be optional.  Thanks,

Alex

> +
> +void kvm_arch_irq_bypass_update(struct irq_bypass_consumer *cons)
> +{
> +	int ret;
> +	struct kvm_kernel_irqfd *irqfd =
> +		container_of(cons, struct kvm_kernel_irqfd, consumer);
> +
> +	BUG_ON(!irqfd->producer);
> +
> +	ret = kvm_arch_update_pi_irte(irqfd->kvm, irqfd->producer->irq,
> +				      irqfd->gsi, 1);
> +	WARN_ON(ret);
> +}
> +
>  EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_exit);
>  EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_inj_virq);
>  EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_page_fault);




  reply	other threads:[~2015-07-10  3:27 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-10  3:00 [RFC v1 0/5] irq bypass interface implementation for VT-d Posted-interrupts Feng Wu
2015-07-10  3:00 ` [RFC v1 1/5] vfio: Register/unregister irq_bypass_producer Feng Wu
2015-07-10  3:00 ` [RFC v1 2/5] KVM: x86: Update IRTE for posted-interrupts Feng Wu
2015-07-10  3:00 ` [RFC v1 3/5] KVM: Add pointer to 'struct irq_bypass_produce' in 'kvm_kernel_irqfd' Feng Wu
2015-07-10  3:00 ` [RFC v1 4/5] KVM: x86: Add arch specific routines for irqbypass manager Feng Wu
2015-07-10  3:27   ` Alex Williamson [this message]
2015-07-10  3:00 ` [RFC v1 5/5] Call irqbypass update routine when updating irqfd Feng Wu
2015-07-10  3:26   ` Alex Williamson
2015-07-10  4:12     ` Wu, Feng
2015-07-10  8:28       ` Wu, Feng
2015-07-10 12:47         ` Paolo Bonzini
2015-07-10 14:11           ` Alex Williamson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1436498840.1391.247.camel@redhat.com \
    --to=alex.williamson@redhat.com \
    --cc=avi.kivity@gmail.com \
    --cc=eric.auger@linaro.org \
    --cc=feng.wu@intel.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.