From: Alex Williamson <alex.williamson@redhat.com>
To: Yunhong Jiang <yunhong.jiang@linux.intel.com>, pbonzini@redhat.com
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/5] VIRT: Support runtime irq_bypass consumer
Date: Wed, 16 Dec 2015 12:48:56 -0700 [thread overview]
Message-ID: <1450295336.2674.49.camel@redhat.com> (raw)
In-Reply-To: <1449166972-8894-3-git-send-email-yunhong.jiang@linux.intel.com>
On Thu, 2015-12-03 at 10:22 -0800, Yunhong Jiang wrote:
> Extend the irq_bypass manager to support runtime consumers. A runtime
> irq_bypass consumer can handle interrupt when an interrupt triggered. A
> runtime consumer has it's handle_irq() function set and passing a
> irq_context for the irq handling.
>
> A producer keep a link for the runtime consumers, so that it can invoke
> each consumer's handle_irq() when irq invoked.
>
> Currently the irq_bypass manager has several code path assuming there is
> only one consumer/producer pair for each token. For example, when
> register the producer, it exits the loop after finding one match
> consumer. This is updated to support both static consumer (like for
> Posted Interrupt consumer) and runtime consumer.
>
> Signed-off-by: Yunhong Jiang <yunhong.jiang@linux.intel.com>
> ---
> include/linux/irqbypass.h | 8 +++++
> virt/lib/irqbypass.c | 82 +++++++++++++++++++++++++++++++++++------------
> 2 files changed, 69 insertions(+), 21 deletions(-)
>
> diff --git a/include/linux/irqbypass.h b/include/linux/irqbypass.h
> index 1551b5b2f4c2..d5bec0c7be3a 100644
> --- a/include/linux/irqbypass.h
> +++ b/include/linux/irqbypass.h
> @@ -12,6 +12,7 @@
> #define IRQBYPASS_H
>
> #include
> +#include
>
> struct irq_bypass_consumer;
>
> @@ -47,6 +48,9 @@ struct irq_bypass_consumer;
> */
> struct irq_bypass_producer {
> struct list_head node;
> + /* Update side is synchronized by the lock on irqbypass.c */
> + struct srcu_struct srcu;
> + struct list_head consumers;
> void *token;
> int irq;
> int (*add_consumer)(struct irq_bypass_producer *,
Documentation?
> @@ -61,6 +65,7 @@ struct irq_bypass_producer {
> * struct irq_bypass_consumer - IRQ bypass consumer definition
> * @node: IRQ bypass manager private list management
> * @token: opaque token to match between producer and consumer
> + * @sibling: consumers with same token list management
> * @add_producer: Connect the IRQ consumer to an IRQ producer
> * @del_producer: Disconnect the IRQ consumer from an IRQ producer
> * @stop: Perform any quiesce operations necessary prior to add/del (optional)
What about @handle_irq and @irq_context?
> @@ -73,6 +78,7 @@ struct irq_bypass_producer {
> */
> struct irq_bypass_consumer {
> struct list_head node;
> + struct list_head sibling;
> void *token;
> int (*add_producer)(struct irq_bypass_consumer *,
> struct irq_bypass_producer *);
> @@ -80,6 +86,8 @@ struct irq_bypass_consumer {
> struct irq_bypass_producer *);
> void (*stop)(struct irq_bypass_consumer *);
> void (*start)(struct irq_bypass_consumer *);
> + int (*handle_irq)(void *arg);
If we called this with a pointer to the consumer, like the other
functions, the consumer could embed arg (irq_context) into their own
structure, or in this case, do a container_of and avoid storing the
irqfd pointer entirely.
> + void *irq_context;
> };
>
> int irq_bypass_register_producer(struct irq_bypass_producer *);
next prev parent reply other threads:[~2015-12-16 19:48 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-03 18:22 [PATCH 0/5] Threaded MSI interrupt for VFIO PCI device Yunhong Jiang
2015-12-03 18:22 ` [PATCH 1/5] KVM: Extract the irqfd_wakeup_pollin/irqfd_wakeup_pollup Yunhong Jiang
2015-12-03 18:22 ` [PATCH 2/5] VIRT: Support runtime irq_bypass consumer Yunhong Jiang
2015-12-16 19:48 ` Alex Williamson [this message]
2015-12-03 18:22 ` [PATCH 3/5] VFIO: Support threaded interrupt handling on VFIO Yunhong Jiang
2015-12-16 19:49 ` Alex Williamson
2015-12-03 18:22 ` [PATCH 4/5] KVM: Add the irq handling consumer Yunhong Jiang
2015-12-04 0:33 ` kbuild test robot
2015-12-03 18:22 ` [PATCH 5/5] KVM: Expose x86 kvm_arch_set_irq_inatomic() Yunhong Jiang
2015-12-03 18:55 ` [PATCH 0/5] Threaded MSI interrupt for VFIO PCI device Alex Williamson
2015-12-03 22:31 ` Yunhong Jiang
2015-12-16 17:56 ` Paolo Bonzini
2015-12-16 19:15 ` Alex Williamson
2015-12-16 21:55 ` Paolo Bonzini
2016-01-06 7:42 ` Yunhong Jiang
2016-01-06 7:40 ` Yunhong Jiang
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=1450295336.2674.49.camel@redhat.com \
--to=alex.williamson@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=yunhong.jiang@linux.intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).