Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1204278 > unrolled thread
| Started by | Eric Auger <eric.auger@linaro.org> |
|---|---|
| First post | 2015-08-10 15:40 +0200 |
| Last post | 2015-08-10 15:40 +0200 |
| Articles | 5 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH v5 0/5] KVM: irqfd consumer based on IRQ bypass manager Eric Auger <eric.auger@linaro.org> - 2015-08-10 15:40 +0200
[PATCH v5 5/5] KVM: eventfd: add irq bypass consumer management Eric Auger <eric.auger@linaro.org> - 2015-08-10 15:40 +0200
Re: [PATCH v5 5/5] KVM: eventfd: add irq bypass consumer management Alex Williamson <alex.williamson@redhat.com> - 2015-08-12 21:10 +0200
Re: [PATCH v5 5/5] KVM: eventfd: add irq bypass consumer management Eric Auger <eric.auger@linaro.org> - 2015-08-13 11:30 +0200
[PATCH v5 4/5] KVM: introduce kvm_arch functions for IRQ bypass Eric Auger <eric.auger@linaro.org> - 2015-08-10 15:40 +0200
| From | Eric Auger <eric.auger@linaro.org> |
|---|---|
| Date | 2015-08-10 15:40 +0200 |
| Subject | [PATCH v5 0/5] KVM: irqfd consumer based on IRQ bypass manager |
| Message-ID | <pVVt0-7LE-11@gated-at.bofh.it> |
This series transforms irqfd into an IRQ bypass consumer and
introduce the infrastructure shared by Intel posted-interrupts
and ARM forwarded IRQ series.
The bypass manager gets compiled for x86 and arm/arm64 when
KVM is used. A new kvm_irqfd.h header is created to externalize
some irqfd declarations going to be used by architecture specific
code. A new CONFIG_HAVE_KVM_IRQ_BYPASS option is introduced
to enable architecture specific IRQ manager hooks.
the series depends on the IRQ bypass manager:
- [PATCH v4] virt: IRQ bypass manager (https://lkml.org/lkml/2015/8/6/526)
can be found at:
https://git.linaro.org/people/eric.auger/linux.git/shortlog/refs/heads/v4.2-rc6-irq-forward-v3
Best Regards
Eric
History:
v4 -> v5:
- remove kvm_arch static inline stubs
- add pr_info on registration failure
v3 -> v4:
- fix compilation for arm/arm64
- rearrange signoffs/history on some patch files
v2 -> v3 (Feng Wu):
- rebase on IRQ bypass manager [PATCH v2] virt: IRQ bypass manager:
https://lkml.org/lkml/2015/7/16/810
- Correct some minor errors and typo
- Add something needed for posted-interrupts
v1 -> v2:
- isolate the bypass manager and irqfd consumer in this series
- take into account Paolo's comments and use container_of strategy and
remove additional fields introduced in v1.
- create kvm_irqfd.h
- add unregistration in irqfd_shutdown
v1: originally part of [RFC 00/17] ARM IRQ forward control based on IRQ
bypass manager (https://lkml.org/lkml/2015/7/2/268)
Eric Auger (4):
KVM: arm/arm64: select IRQ_BYPASS_MANAGER
KVM: create kvm_irqfd.h
KVM: introduce kvm_arch functions for IRQ bypass
KVM: eventfd: add irq bypass consumer management
Feng Wu (1):
KVM: x86: select IRQ_BYPASS_MANAGER
arch/arm/kvm/Kconfig | 2 +
arch/arm/kvm/Makefile | 1 +
arch/arm64/kvm/Kconfig | 2 +
arch/arm64/kvm/Makefile | 1 +
arch/x86/kvm/Kconfig | 2 +
arch/x86/kvm/Makefile | 3 ++
include/linux/kvm_host.h | 10 +++++
include/linux/kvm_irqfd.h | 71 ++++++++++++++++++++++++++++++
virt/kvm/Kconfig | 3 ++
virt/kvm/eventfd.c | 110 ++++++++++++++++------------------------------
10 files changed, 133 insertions(+), 72 deletions(-)
create mode 100644 include/linux/kvm_irqfd.h
--
1.9.1
--
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/
[toc] | [next] | [standalone]
| From | Eric Auger <eric.auger@linaro.org> |
|---|---|
| Date | 2015-08-10 15:40 +0200 |
| Subject | [PATCH v5 5/5] KVM: eventfd: add irq bypass consumer management |
| Message-ID | <pVVt0-7LE-25@gated-at.bofh.it> |
| In reply to | #1204278 |
This patch adds the registration/unregistration of an
irq_bypass_consumer on irqfd assignment/deassignment.
Signed-off-by: Eric Auger <eric.auger@linaro.org>
Signed-off-by: Feng Wu <feng.wu@intel.com>
---
v4 -> v5:
- due to removal of static inline stubs, add
#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
around consumer registration/unregistration
- add pr_info when registration fails
v2 -> v3 (Feng Wu):
- Use kvm_arch_irq_bypass_start
- Remove kvm_arch_irq_bypass_update
- Add member 'struct irq_bypass_producer *producer' in
'struct kvm_kernel_irqfd', it is needed by posted interrupt.
- Remove 'irq_bypass_unregister_consumer' in kvm_irqfd_deassign()
v1 -> v2:
- populate of kvm and gsi removed
- unregister the consumer on irqfd_shutdown
---
include/linux/kvm_irqfd.h | 2 ++
virt/kvm/eventfd.c | 15 +++++++++++++++
2 files changed, 17 insertions(+)
diff --git a/include/linux/kvm_irqfd.h b/include/linux/kvm_irqfd.h
index f926b39..0c1de05 100644
--- a/include/linux/kvm_irqfd.h
+++ b/include/linux/kvm_irqfd.h
@@ -64,6 +64,8 @@ struct kvm_kernel_irqfd {
struct list_head list;
poll_table pt;
struct work_struct shutdown;
+ struct irq_bypass_consumer consumer;
+ struct irq_bypass_producer *producer;
};
#endif /* __LINUX_KVM_IRQFD_H */
diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c
index 647ffb8..d7a230f 100644
--- a/virt/kvm/eventfd.c
+++ b/virt/kvm/eventfd.c
@@ -35,6 +35,7 @@
#include <linux/srcu.h>
#include <linux/slab.h>
#include <linux/seqlock.h>
+#include <linux/irqbypass.h>
#include <trace/events/kvm.h>
#include <kvm/iodev.h>
@@ -140,6 +141,9 @@ irqfd_shutdown(struct work_struct *work)
/*
* It is now safe to release the object's resources
*/
+#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
+ irq_bypass_unregister_consumer(&irqfd->consumer);
+#endif
eventfd_ctx_put(irqfd->eventfd);
kfree(irqfd);
}
@@ -379,6 +383,17 @@ kvm_irqfd_assign(struct kvm *kvm, struct kvm_irqfd *args)
* we might race against the POLLHUP
*/
fdput(f);
+#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
+ irqfd->consumer.token = (void *)irqfd->eventfd;
+ irqfd->consumer.add_producer = kvm_arch_irq_bypass_add_producer;
+ irqfd->consumer.del_producer = kvm_arch_irq_bypass_del_producer;
+ irqfd->consumer.stop = kvm_arch_irq_bypass_stop;
+ irqfd->consumer.start = kvm_arch_irq_bypass_start;
+ ret = irq_bypass_register_consumer(&irqfd->consumer);
+ if (ret)
+ pr_info("irq bypass consumer (token %p) registration fails: %d\n",
+ irqfd->consumer.token, ret);
+#endif
return 0;
--
1.9.1
--
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/
[toc] | [prev] | [next] | [standalone]
| From | Alex Williamson <alex.williamson@redhat.com> |
|---|---|
| Date | 2015-08-12 21:10 +0200 |
| Subject | Re: [PATCH v5 5/5] KVM: eventfd: add irq bypass consumer management |
| Message-ID | <pWJzs-4WV-3@gated-at.bofh.it> |
| In reply to | #1204279 |
On Mon, 2015-08-10 at 15:31 +0200, Eric Auger wrote:
> This patch adds the registration/unregistration of an
> irq_bypass_consumer on irqfd assignment/deassignment.
>
> Signed-off-by: Eric Auger <eric.auger@linaro.org>
> Signed-off-by: Feng Wu <feng.wu@intel.com>
>
> ---
>
> v4 -> v5:
> - due to removal of static inline stubs, add
> #ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
> around consumer registration/unregistration
> - add pr_info when registration fails
>
> v2 -> v3 (Feng Wu):
> - Use kvm_arch_irq_bypass_start
> - Remove kvm_arch_irq_bypass_update
> - Add member 'struct irq_bypass_producer *producer' in
> 'struct kvm_kernel_irqfd', it is needed by posted interrupt.
> - Remove 'irq_bypass_unregister_consumer' in kvm_irqfd_deassign()
>
> v1 -> v2:
> - populate of kvm and gsi removed
> - unregister the consumer on irqfd_shutdown
> ---
> include/linux/kvm_irqfd.h | 2 ++
> virt/kvm/eventfd.c | 15 +++++++++++++++
> 2 files changed, 17 insertions(+)
>
> diff --git a/include/linux/kvm_irqfd.h b/include/linux/kvm_irqfd.h
> index f926b39..0c1de05 100644
> --- a/include/linux/kvm_irqfd.h
> +++ b/include/linux/kvm_irqfd.h
> @@ -64,6 +64,8 @@ struct kvm_kernel_irqfd {
> struct list_head list;
> poll_table pt;
> struct work_struct shutdown;
> + struct irq_bypass_consumer consumer;
> + struct irq_bypass_producer *producer;
> };
>
> #endif /* __LINUX_KVM_IRQFD_H */
> diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c
> index 647ffb8..d7a230f 100644
> --- a/virt/kvm/eventfd.c
> +++ b/virt/kvm/eventfd.c
> @@ -35,6 +35,7 @@
> #include <linux/srcu.h>
> #include <linux/slab.h>
> #include <linux/seqlock.h>
> +#include <linux/irqbypass.h>
> #include <trace/events/kvm.h>
>
> #include <kvm/iodev.h>
> @@ -140,6 +141,9 @@ irqfd_shutdown(struct work_struct *work)
> /*
> * It is now safe to release the object's resources
> */
> +#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
> + irq_bypass_unregister_consumer(&irqfd->consumer);
> +#endif
> eventfd_ctx_put(irqfd->eventfd);
> kfree(irqfd);
> }
> @@ -379,6 +383,17 @@ kvm_irqfd_assign(struct kvm *kvm, struct kvm_irqfd *args)
> * we might race against the POLLHUP
> */
> fdput(f);
> +#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
> + irqfd->consumer.token = (void *)irqfd->eventfd;
> + irqfd->consumer.add_producer = kvm_arch_irq_bypass_add_producer;
> + irqfd->consumer.del_producer = kvm_arch_irq_bypass_del_producer;
> + irqfd->consumer.stop = kvm_arch_irq_bypass_stop;
> + irqfd->consumer.start = kvm_arch_irq_bypass_start;
> + ret = irq_bypass_register_consumer(&irqfd->consumer);
> + if (ret)
> + pr_info("irq bypass consumer (token %p) registration fails: %d\n",
> + irqfd->consumer.token, ret);
> +#endif
Does this series compile on its own? Aren't all these arch function
unresolved?
>
> return 0;
>
--
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/
[toc] | [prev] | [next] | [standalone]
| From | Eric Auger <eric.auger@linaro.org> |
|---|---|
| Date | 2015-08-13 11:30 +0200 |
| Subject | Re: [PATCH v5 5/5] KVM: eventfd: add irq bypass consumer management |
| Message-ID | <pWWZK-7z0-49@gated-at.bofh.it> |
| In reply to | #1206332 |
Hi Alex,
On 08/12/2015 09:05 PM, Alex Williamson wrote:
> On Mon, 2015-08-10 at 15:31 +0200, Eric Auger wrote:
>> This patch adds the registration/unregistration of an
>> irq_bypass_consumer on irqfd assignment/deassignment.
>>
>> Signed-off-by: Eric Auger <eric.auger@linaro.org>
>> Signed-off-by: Feng Wu <feng.wu@intel.com>
>>
>> ---
>>
>> v4 -> v5:
>> - due to removal of static inline stubs, add
>> #ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
>> around consumer registration/unregistration
>> - add pr_info when registration fails
>>
>> v2 -> v3 (Feng Wu):
>> - Use kvm_arch_irq_bypass_start
>> - Remove kvm_arch_irq_bypass_update
>> - Add member 'struct irq_bypass_producer *producer' in
>> 'struct kvm_kernel_irqfd', it is needed by posted interrupt.
>> - Remove 'irq_bypass_unregister_consumer' in kvm_irqfd_deassign()
>>
>> v1 -> v2:
>> - populate of kvm and gsi removed
>> - unregister the consumer on irqfd_shutdown
>> ---
>> include/linux/kvm_irqfd.h | 2 ++
>> virt/kvm/eventfd.c | 15 +++++++++++++++
>> 2 files changed, 17 insertions(+)
>>
>> diff --git a/include/linux/kvm_irqfd.h b/include/linux/kvm_irqfd.h
>> index f926b39..0c1de05 100644
>> --- a/include/linux/kvm_irqfd.h
>> +++ b/include/linux/kvm_irqfd.h
>> @@ -64,6 +64,8 @@ struct kvm_kernel_irqfd {
>> struct list_head list;
>> poll_table pt;
>> struct work_struct shutdown;
>> + struct irq_bypass_consumer consumer;
>> + struct irq_bypass_producer *producer;
>> };
>>
>> #endif /* __LINUX_KVM_IRQFD_H */
>> diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c
>> index 647ffb8..d7a230f 100644
>> --- a/virt/kvm/eventfd.c
>> +++ b/virt/kvm/eventfd.c
>> @@ -35,6 +35,7 @@
>> #include <linux/srcu.h>
>> #include <linux/slab.h>
>> #include <linux/seqlock.h>
>> +#include <linux/irqbypass.h>
>> #include <trace/events/kvm.h>
>>
>> #include <kvm/iodev.h>
>> @@ -140,6 +141,9 @@ irqfd_shutdown(struct work_struct *work)
>> /*
>> * It is now safe to release the object's resources
>> */
>> +#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
>> + irq_bypass_unregister_consumer(&irqfd->consumer);
>> +#endif
>> eventfd_ctx_put(irqfd->eventfd);
>> kfree(irqfd);
>> }
>> @@ -379,6 +383,17 @@ kvm_irqfd_assign(struct kvm *kvm, struct kvm_irqfd *args)
>> * we might race against the POLLHUP
>> */
>> fdput(f);
>> +#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
>> + irqfd->consumer.token = (void *)irqfd->eventfd;
>> + irqfd->consumer.add_producer = kvm_arch_irq_bypass_add_producer;
>> + irqfd->consumer.del_producer = kvm_arch_irq_bypass_del_producer;
>> + irqfd->consumer.stop = kvm_arch_irq_bypass_stop;
>> + irqfd->consumer.start = kvm_arch_irq_bypass_start;
>> + ret = irq_bypass_register_consumer(&irqfd->consumer);
>> + if (ret)
>> + pr_info("irq bypass consumer (token %p) registration fails: %d\n",
>> + irqfd->consumer.token, ret);
>> +#endif
>
> Does this series compile on its own? Aren't all these arch function
> unresolved?
yes it does since by default CONFIG_HAVE_KVM_IRQ_BYPASS is not defined
Best Regards
Eric
>
>>
>> return 0;
>>
>
>
>
--
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/
[toc] | [prev] | [next] | [standalone]
| From | Eric Auger <eric.auger@linaro.org> |
|---|---|
| Date | 2015-08-10 15:40 +0200 |
| Subject | [PATCH v5 4/5] KVM: introduce kvm_arch functions for IRQ bypass |
| Message-ID | <pVVt1-7LE-33@gated-at.bofh.it> |
| In reply to | #1204278 |
This patch introduces
- kvm_arch_irq_bypass_add_producer
- kvm_arch_irq_bypass_del_producer
- kvm_arch_irq_bypass_stop
- kvm_arch_irq_bypass_start
They make possible to specialize the KVM IRQ bypass consumer in
case CONFIG_KVM_HAVE_IRQ_BYPASS is set.
Signed-off-by: Eric Auger <eric.auger@linaro.org>
Signed-off-by: Feng Wu <feng.wu@intel.com>
---
v4 -> v5:
- remove static inline stub functions
v2 -> v3 (Feng Wu):
- use 'kvm_arch_irq_bypass_start' instead of 'kvm_arch_irq_bypass_resume'
- Remove 'kvm_arch_irq_bypass_update', which is not needed to be
a irqbypass callback per Alex's comments.
- Make kvm_arch_irq_bypass_add_producer return 'int'
v1 -> v2:
- use CONFIG_KVM_HAVE_IRQ_BYPASS instead CONFIG_IRQ_BYPASS_MANAGER
- rename all functions according to Paolo's proposal
- add kvm_arch_irq_bypass_update according to Feng's need
---
include/linux/kvm_host.h | 10 ++++++++++
virt/kvm/Kconfig | 3 +++
2 files changed, 13 insertions(+)
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 05e99b8..5ac8d21 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -24,6 +24,7 @@
#include <linux/err.h>
#include <linux/irqflags.h>
#include <linux/context_tracking.h>
+#include <linux/irqbypass.h>
#include <asm/signal.h>
#include <linux/kvm.h>
@@ -1151,5 +1152,14 @@ static inline void kvm_vcpu_set_dy_eligible(struct kvm_vcpu *vcpu, bool val)
{
}
#endif /* CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT */
+
+#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
+int kvm_arch_irq_bypass_add_producer(struct irq_bypass_consumer *,
+ struct irq_bypass_producer *);
+void kvm_arch_irq_bypass_del_producer(struct irq_bypass_consumer *,
+ struct irq_bypass_producer *);
+void kvm_arch_irq_bypass_stop(struct irq_bypass_consumer *);
+void kvm_arch_irq_bypass_start(struct irq_bypass_consumer *);
+#endif /* CONFIG_HAVE_KVM_IRQ_BYPASS */
#endif
diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig
index e2c876d..9f8014d 100644
--- a/virt/kvm/Kconfig
+++ b/virt/kvm/Kconfig
@@ -47,3 +47,6 @@ config KVM_GENERIC_DIRTYLOG_READ_PROTECT
config KVM_COMPAT
def_bool y
depends on COMPAT && !S390
+
+config HAVE_KVM_IRQ_BYPASS
+ bool
--
1.9.1
--
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/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web