* [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. @ 2008-09-29 5:25 ` Zhang, Xiantao 0 siblings, 0 replies; 14+ messages in thread From: Zhang, Xiantao @ 2008-09-29 5:25 UTC (permalink / raw) To: kvm-ia64 In order to enable vt-d suport for kvm/ia64 guests, I worked out the patchset to make it happen. Please review. The first five patches have no changes for logic and just do code move. Xiantao [PATCH 1/8] kvm/vt-d: Moving vtd.c from arch/x86/kvm/ to virt/kvm/ [PATCH 2/8] kvm: Moving device_assignment logic to kvm_main.c [PATCH 3/8] kvm: Changing is_mmio_pfn to kvm_is_mmio_pfn, and make it common [PATCH 4/8] kvm: Split arch/x86/kvm/irq.c to two parts. [PATCH 5/8] kvm: Moving irqchip_in_kernel from ioapic.h to irq.h [PATCH 6/8] kvm/ia64: Make pmt table be able to hold physical mmio entries. [PATCH 7/8] kvm/ia64: Add directed mmio range support for kvm guests. [PATCH 8/8] kvm/ia64: Add intel iommu support for guests ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. @ 2008-09-29 5:25 ` Zhang, Xiantao 0 siblings, 0 replies; 14+ messages in thread From: Zhang, Xiantao @ 2008-09-29 5:25 UTC (permalink / raw) To: kvm, kvm-ia64; +Cc: avi In order to enable vt-d suport for kvm/ia64 guests, I worked out the patchset to make it happen. Please review. The first five patches have no changes for logic and just do code move. Xiantao [PATCH 1/8] kvm/vt-d: Moving vtd.c from arch/x86/kvm/ to virt/kvm/ [PATCH 2/8] kvm: Moving device_assignment logic to kvm_main.c [PATCH 3/8] kvm: Changing is_mmio_pfn to kvm_is_mmio_pfn, and make it common [PATCH 4/8] kvm: Split arch/x86/kvm/irq.c to two parts. [PATCH 5/8] kvm: Moving irqchip_in_kernel from ioapic.h to irq.h [PATCH 6/8] kvm/ia64: Make pmt table be able to hold physical mmio entries. [PATCH 7/8] kvm/ia64: Add directed mmio range support for kvm guests. [PATCH 8/8] kvm/ia64: Add intel iommu support for guests ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. 2008-09-29 5:25 ` Zhang, Xiantao @ 2008-10-02 13:06 ` Avi Kivity -1 siblings, 0 replies; 14+ messages in thread From: Avi Kivity @ 2008-10-02 13:06 UTC (permalink / raw) To: kvm-ia64 Zhang, Xiantao wrote: > In order to enable vt-d suport for kvm/ia64 guests, I worked out the > patchset to make it happen. Please review. The first five patches have > no changes for logic and just do code move. > Xiantao > [PATCH 1/8] kvm/vt-d: Moving vtd.c from arch/x86/kvm/ to virt/kvm/ > [PATCH 2/8] kvm: Moving device_assignment logic to kvm_main.c > [PATCH 3/8] kvm: Changing is_mmio_pfn to kvm_is_mmio_pfn, and make it > common > [PATCH 4/8] kvm: Split arch/x86/kvm/irq.c to two parts. > [PATCH 5/8] kvm: Moving irqchip_in_kernel from ioapic.h to irq.h > [PATCH 6/8] kvm/ia64: Make pmt table be able to hold physical mmio > entries. > [PATCH 7/8] kvm/ia64: Add directed mmio range support for kvm guests. > [PATCH 8/8] kvm/ia64: Add intel iommu support for guests > Apart from my comment on patch 4, this series looks good. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. @ 2008-10-02 13:06 ` Avi Kivity 0 siblings, 0 replies; 14+ messages in thread From: Avi Kivity @ 2008-10-02 13:06 UTC (permalink / raw) To: Zhang, Xiantao; +Cc: kvm, kvm-ia64 Zhang, Xiantao wrote: > In order to enable vt-d suport for kvm/ia64 guests, I worked out the > patchset to make it happen. Please review. The first five patches have > no changes for logic and just do code move. > Xiantao > [PATCH 1/8] kvm/vt-d: Moving vtd.c from arch/x86/kvm/ to virt/kvm/ > [PATCH 2/8] kvm: Moving device_assignment logic to kvm_main.c > [PATCH 3/8] kvm: Changing is_mmio_pfn to kvm_is_mmio_pfn, and make it > common > [PATCH 4/8] kvm: Split arch/x86/kvm/irq.c to two parts. > [PATCH 5/8] kvm: Moving irqchip_in_kernel from ioapic.h to irq.h > [PATCH 6/8] kvm/ia64: Make pmt table be able to hold physical mmio > entries. > [PATCH 7/8] kvm/ia64: Add directed mmio range support for kvm guests. > [PATCH 8/8] kvm/ia64: Add intel iommu support for guests > Apart from my comment on patch 4, this series looks good. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. @ 2008-10-02 15:14 ` Zhang, Xiantao 0 siblings, 0 replies; 14+ messages in thread From: Zhang, Xiantao @ 2008-10-02 15:14 UTC (permalink / raw) To: kvm-ia64 [-- Attachment #1: Type: text/plain, Size: 9288 bytes --] Hi, Avi Sorry, seems irq_comm.c is missing when I generate the patchset. Attach it! Could you help to apply the patchset ? :-) Xiantao From cc77672cdfb5a566d1c7e86d91c07d6db99ad8c0 Mon Sep 17 00:00:00 2001 From: Xiantao Zhang <xiantao.zhang@intel.com> Date: Sat, 27 Sep 2008 11:29:14 +0800 Subject: [PATCH] kvm: Split arch/x86/kvm/irq.c to two parts. Moving irq ack notification logic as common, and make it shared with ia64 side. Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com> --- arch/ia64/include/asm/kvm_host.h | 4 ++ arch/ia64/kvm/Makefile | 2 +- arch/ia64/kvm/irq.h | 5 --- arch/x86/kvm/Makefile | 2 +- arch/x86/kvm/irq.c | 33 --------------------- arch/x86/kvm/irq.h | 8 ----- include/asm-x86/kvm_host.h | 2 + include/linux/kvm_host.h | 6 ++++ virt/kvm/irq_comm.c | 59 ++++++++++++++++++++++++++++++++++++++ 9 files changed, 73 insertions(+), 48 deletions(-) create mode 100644 virt/kvm/irq_comm.c diff --git a/arch/ia64/include/asm/kvm_host.h b/arch/ia64/include/asm/kvm_host.h index 1efe513..da579a3 100644 --- a/arch/ia64/include/asm/kvm_host.h +++ b/arch/ia64/include/asm/kvm_host.h @@ -413,6 +413,10 @@ struct kvm_arch { struct kvm_ioapic *vioapic; struct kvm_vm_stat stat; struct kvm_sal_data rdv_sal_data; + + struct list_head assigned_dev_head; + struct dmar_domain *intel_iommu_domain; + struct hlist_head irq_ack_notifier_list; }; union cpuid3_t { diff --git a/arch/ia64/kvm/Makefile b/arch/ia64/kvm/Makefile index bf22fb9..c96f19f 100644 --- a/arch/ia64/kvm/Makefile +++ b/arch/ia64/kvm/Makefile @@ -44,7 +44,7 @@ EXTRA_CFLAGS += -Ivirt/kvm -Iarch/ia64/kvm/ EXTRA_AFLAGS += -Ivirt/kvm -Iarch/ia64/kvm/ common-objs = $(addprefix ../../../virt/kvm/, kvm_main.o ioapic.o \ - coalesced_mmio.o) + coalesced_mmio.o irq_comm.o) kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o obj-$(CONFIG_KVM) += kvm.o diff --git a/arch/ia64/kvm/irq.h b/arch/ia64/kvm/irq.h index f2e6545..604329a 100644 --- a/arch/ia64/kvm/irq.h +++ b/arch/ia64/kvm/irq.h @@ -23,10 +23,5 @@ #ifndef __IRQ_H #define __IRQ_H -struct kvm; - -static inline void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) -{ -} #endif diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile index 7dce593..0d2cf3f 100644 --- a/arch/x86/kvm/Makefile +++ b/arch/x86/kvm/Makefile @@ -3,7 +3,7 @@ # common-objs = $(addprefix ../../../virt/kvm/, kvm_main.o ioapic.o \ - coalesced_mmio.o) + coalesced_mmio.o irq_comm.o) ifeq ($(CONFIG_KVM_TRACE),y) common-objs += $(addprefix ../../../virt/kvm/, kvm_trace.o) endif diff --git a/arch/x86/kvm/irq.c b/arch/x86/kvm/irq.c index 8c1b9c5..c019b8e 100644 --- a/arch/x86/kvm/irq.c +++ b/arch/x86/kvm/irq.c @@ -99,36 +99,3 @@ void __kvm_migrate_timers(struct kvm_vcpu *vcpu) __kvm_migrate_apic_timer(vcpu); __kvm_migrate_pit_timer(vcpu); } - -/* This should be called with the kvm->lock mutex held */ -void kvm_set_irq(struct kvm *kvm, int irq, int level) -{ - /* Not possible to detect if the guest uses the PIC or the - * IOAPIC. So set the bit in both. The guest will ignore - * writes to the unused one. - */ - kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); - kvm_pic_set_irq(pic_irqchip(kvm), irq, level); -} - -void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) -{ - struct kvm_irq_ack_notifier *kian; - struct hlist_node *n; - - hlist_for_each_entry(kian, n, &kvm->arch.irq_ack_notifier_list, link) - if (kian->gsi == gsi) - kian->irq_acked(kian); -} - -void kvm_register_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian) -{ - hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list); -} - -void kvm_unregister_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian) -{ - hlist_del(&kian->link); -} diff --git a/arch/x86/kvm/irq.h b/arch/x86/kvm/irq.h index 4748532..f17c8f5 100644 --- a/arch/x86/kvm/irq.h +++ b/arch/x86/kvm/irq.h @@ -68,7 +68,6 @@ struct kvm_pic { }; struct kvm_pic *kvm_create_pic(struct kvm *kvm); -void kvm_pic_set_irq(void *opaque, int irq, int level); int kvm_pic_read_irq(struct kvm *kvm); void kvm_pic_update_irq(struct kvm_pic *s); void kvm_pic_clear_isr_ack(struct kvm *kvm); @@ -85,13 +84,6 @@ static inline int irqchip_in_kernel(struct kvm *kvm) void kvm_pic_reset(struct kvm_kpic_state *s); -void kvm_set_irq(struct kvm *kvm, int irq, int level); -void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); -void kvm_register_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian); -void kvm_unregister_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian); - void kvm_timer_intr_post(struct kvm_vcpu *vcpu, int vec); void kvm_inject_pending_timer_irqs(struct kvm_vcpu *vcpu); void kvm_inject_apic_timer_irqs(struct kvm_vcpu *vcpu); diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h index b507b8f..b2783a8 100644 --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h @@ -565,6 +565,8 @@ void kvm_queue_exception_e(struct kvm_vcpu *vcpu, unsigned nr, u32 error_code); void kvm_inject_page_fault(struct kvm_vcpu *vcpu, unsigned long cr2, u32 error_code); +void kvm_pic_set_irq(void *opaque, int irq, int level); + void kvm_inject_nmi(struct kvm_vcpu *vcpu); void fx_init(struct kvm_vcpu *vcpu); diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index b3b7598..3833c48 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -309,6 +309,12 @@ struct kvm_assigned_dev_kernel { struct pci_dev *dev; struct kvm *kvm; }; +void kvm_set_irq(struct kvm *kvm, int irq, int level); +void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); +void kvm_register_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian); +void kvm_unregister_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian); #ifdef CONFIG_DMAR int kvm_iommu_map_pages(struct kvm *kvm, gfn_t base_gfn, diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c new file mode 100644 index 0000000..371bcbc --- /dev/null +++ b/virt/kvm/irq_comm.c @@ -0,0 +1,59 @@ +/* + * irq_comm.c: Common API for in kernel interrupt controller + * Copyright (c) 2007, Intel Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * Authors: + * Yaozu (Eddie) Dong <Eddie.dong@intel.com> + * + */ + +#include <linux/kvm_host.h> + +#include "ioapic.h" + +/* This should be called with the kvm->lock mutex held */ +void kvm_set_irq(struct kvm *kvm, int irq, int level) +{ + /* Not possible to detect if the guest uses the PIC or the + * IOAPIC. So set the bit in both. The guest will ignore + * writes to the unused one. + */ + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); +#ifdef X86 + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); +#endif +} + +void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) +{ + struct kvm_irq_ack_notifier *kian; + struct hlist_node *n; + + hlist_for_each_entry(kian, n, &kvm->arch.irq_ack_notifier_list, link) + if (kian->gsi == gsi) + kian->irq_acked(kian); +} + +void kvm_register_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian) +{ + hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list); +} + +void kvm_unregister_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian) +{ + hlist_del(&kian->link); +} -- 1.5.1 Zhang, Xiantao wrote: > In order to enable vt-d suport for kvm/ia64 guests, I worked out the > patchset to make it happen. Please review. The first five patches have > no changes for logic and just do code move. > Xiantao > [PATCH 1/8] kvm/vt-d: Moving vtd.c from arch/x86/kvm/ to virt/kvm/ > [PATCH 2/8] kvm: Moving device_assignment logic to kvm_main.c > [PATCH 3/8] kvm: Changing is_mmio_pfn to kvm_is_mmio_pfn, and make it > common > [PATCH 4/8] kvm: Split arch/x86/kvm/irq.c to two parts. > [PATCH 5/8] kvm: Moving irqchip_in_kernel from ioapic.h to irq.h > [PATCH 6/8] kvm/ia64: Make pmt table be able to hold physical mmio > entries. > [PATCH 7/8] kvm/ia64: Add directed mmio range support for kvm guests. > [PATCH 8/8] kvm/ia64: Add intel iommu support for guests > Apart from my comment on patch 4, this series looks good. -- error compiling committee.c: too many arguments to function [-- Attachment #2: 0004-kvm-Split-arch-x86-kvm-irq.c-to-two-parts.patch --] [-- Type: application/octet-stream, Size: 7966 bytes --] From cc77672cdfb5a566d1c7e86d91c07d6db99ad8c0 Mon Sep 17 00:00:00 2001 From: Xiantao Zhang <xiantao.zhang@intel.com> Date: Sat, 27 Sep 2008 11:29:14 +0800 Subject: [PATCH] kvm: Split arch/x86/kvm/irq.c to two parts. Moving irq ack notification logic as common, and make it shared with ia64 side. Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com> --- arch/ia64/include/asm/kvm_host.h | 4 ++ arch/ia64/kvm/Makefile | 2 +- arch/ia64/kvm/irq.h | 5 --- arch/x86/kvm/Makefile | 2 +- arch/x86/kvm/irq.c | 33 --------------------- arch/x86/kvm/irq.h | 8 ----- include/asm-x86/kvm_host.h | 2 + include/linux/kvm_host.h | 6 ++++ virt/kvm/irq_comm.c | 59 ++++++++++++++++++++++++++++++++++++++ 9 files changed, 73 insertions(+), 48 deletions(-) create mode 100644 virt/kvm/irq_comm.c diff --git a/arch/ia64/include/asm/kvm_host.h b/arch/ia64/include/asm/kvm_host.h index 1efe513..da579a3 100644 --- a/arch/ia64/include/asm/kvm_host.h +++ b/arch/ia64/include/asm/kvm_host.h @@ -413,6 +413,10 @@ struct kvm_arch { struct kvm_ioapic *vioapic; struct kvm_vm_stat stat; struct kvm_sal_data rdv_sal_data; + + struct list_head assigned_dev_head; + struct dmar_domain *intel_iommu_domain; + struct hlist_head irq_ack_notifier_list; }; union cpuid3_t { diff --git a/arch/ia64/kvm/Makefile b/arch/ia64/kvm/Makefile index bf22fb9..c96f19f 100644 --- a/arch/ia64/kvm/Makefile +++ b/arch/ia64/kvm/Makefile @@ -44,7 +44,7 @@ EXTRA_CFLAGS += -Ivirt/kvm -Iarch/ia64/kvm/ EXTRA_AFLAGS += -Ivirt/kvm -Iarch/ia64/kvm/ common-objs = $(addprefix ../../../virt/kvm/, kvm_main.o ioapic.o \ - coalesced_mmio.o) + coalesced_mmio.o irq_comm.o) kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o obj-$(CONFIG_KVM) += kvm.o diff --git a/arch/ia64/kvm/irq.h b/arch/ia64/kvm/irq.h index f2e6545..604329a 100644 --- a/arch/ia64/kvm/irq.h +++ b/arch/ia64/kvm/irq.h @@ -23,10 +23,5 @@ #ifndef __IRQ_H #define __IRQ_H -struct kvm; - -static inline void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) -{ -} #endif diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile index 7dce593..0d2cf3f 100644 --- a/arch/x86/kvm/Makefile +++ b/arch/x86/kvm/Makefile @@ -3,7 +3,7 @@ # common-objs = $(addprefix ../../../virt/kvm/, kvm_main.o ioapic.o \ - coalesced_mmio.o) + coalesced_mmio.o irq_comm.o) ifeq ($(CONFIG_KVM_TRACE),y) common-objs += $(addprefix ../../../virt/kvm/, kvm_trace.o) endif diff --git a/arch/x86/kvm/irq.c b/arch/x86/kvm/irq.c index 8c1b9c5..c019b8e 100644 --- a/arch/x86/kvm/irq.c +++ b/arch/x86/kvm/irq.c @@ -99,36 +99,3 @@ void __kvm_migrate_timers(struct kvm_vcpu *vcpu) __kvm_migrate_apic_timer(vcpu); __kvm_migrate_pit_timer(vcpu); } - -/* This should be called with the kvm->lock mutex held */ -void kvm_set_irq(struct kvm *kvm, int irq, int level) -{ - /* Not possible to detect if the guest uses the PIC or the - * IOAPIC. So set the bit in both. The guest will ignore - * writes to the unused one. - */ - kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); - kvm_pic_set_irq(pic_irqchip(kvm), irq, level); -} - -void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) -{ - struct kvm_irq_ack_notifier *kian; - struct hlist_node *n; - - hlist_for_each_entry(kian, n, &kvm->arch.irq_ack_notifier_list, link) - if (kian->gsi == gsi) - kian->irq_acked(kian); -} - -void kvm_register_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian) -{ - hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list); -} - -void kvm_unregister_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian) -{ - hlist_del(&kian->link); -} diff --git a/arch/x86/kvm/irq.h b/arch/x86/kvm/irq.h index 4748532..f17c8f5 100644 --- a/arch/x86/kvm/irq.h +++ b/arch/x86/kvm/irq.h @@ -68,7 +68,6 @@ struct kvm_pic { }; struct kvm_pic *kvm_create_pic(struct kvm *kvm); -void kvm_pic_set_irq(void *opaque, int irq, int level); int kvm_pic_read_irq(struct kvm *kvm); void kvm_pic_update_irq(struct kvm_pic *s); void kvm_pic_clear_isr_ack(struct kvm *kvm); @@ -85,13 +84,6 @@ static inline int irqchip_in_kernel(struct kvm *kvm) void kvm_pic_reset(struct kvm_kpic_state *s); -void kvm_set_irq(struct kvm *kvm, int irq, int level); -void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); -void kvm_register_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian); -void kvm_unregister_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian); - void kvm_timer_intr_post(struct kvm_vcpu *vcpu, int vec); void kvm_inject_pending_timer_irqs(struct kvm_vcpu *vcpu); void kvm_inject_apic_timer_irqs(struct kvm_vcpu *vcpu); diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h index b507b8f..b2783a8 100644 --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h @@ -565,6 +565,8 @@ void kvm_queue_exception_e(struct kvm_vcpu *vcpu, unsigned nr, u32 error_code); void kvm_inject_page_fault(struct kvm_vcpu *vcpu, unsigned long cr2, u32 error_code); +void kvm_pic_set_irq(void *opaque, int irq, int level); + void kvm_inject_nmi(struct kvm_vcpu *vcpu); void fx_init(struct kvm_vcpu *vcpu); diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index b3b7598..3833c48 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -309,6 +309,12 @@ struct kvm_assigned_dev_kernel { struct pci_dev *dev; struct kvm *kvm; }; +void kvm_set_irq(struct kvm *kvm, int irq, int level); +void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); +void kvm_register_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian); +void kvm_unregister_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian); #ifdef CONFIG_DMAR int kvm_iommu_map_pages(struct kvm *kvm, gfn_t base_gfn, diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c new file mode 100644 index 0000000..371bcbc --- /dev/null +++ b/virt/kvm/irq_comm.c @@ -0,0 +1,59 @@ +/* + * irq_comm.c: Common API for in kernel interrupt controller + * Copyright (c) 2007, Intel Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * Authors: + * Yaozu (Eddie) Dong <Eddie.dong@intel.com> + * + */ + +#include <linux/kvm_host.h> + +#include "ioapic.h" + +/* This should be called with the kvm->lock mutex held */ +void kvm_set_irq(struct kvm *kvm, int irq, int level) +{ + /* Not possible to detect if the guest uses the PIC or the + * IOAPIC. So set the bit in both. The guest will ignore + * writes to the unused one. + */ + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); +#ifdef X86 + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); +#endif +} + +void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) +{ + struct kvm_irq_ack_notifier *kian; + struct hlist_node *n; + + hlist_for_each_entry(kian, n, &kvm->arch.irq_ack_notifier_list, link) + if (kian->gsi == gsi) + kian->irq_acked(kian); +} + +void kvm_register_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian) +{ + hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list); +} + +void kvm_unregister_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian) +{ + hlist_del(&kian->link); +} -- 1.5.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* RE: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. @ 2008-10-02 15:14 ` Zhang, Xiantao 0 siblings, 0 replies; 14+ messages in thread From: Zhang, Xiantao @ 2008-10-02 15:14 UTC (permalink / raw) To: Zhang, Xiantao, kvm, kvm-ia64; +Cc: avi [-- Attachment #1: Type: text/plain, Size: 9289 bytes --] Hi, Avi Sorry, seems irq_comm.c is missing when I generate the patchset. Attach it! Could you help to apply the patchset ? :-) Xiantao >From cc77672cdfb5a566d1c7e86d91c07d6db99ad8c0 Mon Sep 17 00:00:00 2001 From: Xiantao Zhang <xiantao.zhang@intel.com> Date: Sat, 27 Sep 2008 11:29:14 +0800 Subject: [PATCH] kvm: Split arch/x86/kvm/irq.c to two parts. Moving irq ack notification logic as common, and make it shared with ia64 side. Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com> --- arch/ia64/include/asm/kvm_host.h | 4 ++ arch/ia64/kvm/Makefile | 2 +- arch/ia64/kvm/irq.h | 5 --- arch/x86/kvm/Makefile | 2 +- arch/x86/kvm/irq.c | 33 --------------------- arch/x86/kvm/irq.h | 8 ----- include/asm-x86/kvm_host.h | 2 + include/linux/kvm_host.h | 6 ++++ virt/kvm/irq_comm.c | 59 ++++++++++++++++++++++++++++++++++++++ 9 files changed, 73 insertions(+), 48 deletions(-) create mode 100644 virt/kvm/irq_comm.c diff --git a/arch/ia64/include/asm/kvm_host.h b/arch/ia64/include/asm/kvm_host.h index 1efe513..da579a3 100644 --- a/arch/ia64/include/asm/kvm_host.h +++ b/arch/ia64/include/asm/kvm_host.h @@ -413,6 +413,10 @@ struct kvm_arch { struct kvm_ioapic *vioapic; struct kvm_vm_stat stat; struct kvm_sal_data rdv_sal_data; + + struct list_head assigned_dev_head; + struct dmar_domain *intel_iommu_domain; + struct hlist_head irq_ack_notifier_list; }; union cpuid3_t { diff --git a/arch/ia64/kvm/Makefile b/arch/ia64/kvm/Makefile index bf22fb9..c96f19f 100644 --- a/arch/ia64/kvm/Makefile +++ b/arch/ia64/kvm/Makefile @@ -44,7 +44,7 @@ EXTRA_CFLAGS += -Ivirt/kvm -Iarch/ia64/kvm/ EXTRA_AFLAGS += -Ivirt/kvm -Iarch/ia64/kvm/ common-objs = $(addprefix ../../../virt/kvm/, kvm_main.o ioapic.o \ - coalesced_mmio.o) + coalesced_mmio.o irq_comm.o) kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o obj-$(CONFIG_KVM) += kvm.o diff --git a/arch/ia64/kvm/irq.h b/arch/ia64/kvm/irq.h index f2e6545..604329a 100644 --- a/arch/ia64/kvm/irq.h +++ b/arch/ia64/kvm/irq.h @@ -23,10 +23,5 @@ #ifndef __IRQ_H #define __IRQ_H -struct kvm; - -static inline void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) -{ -} #endif diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile index 7dce593..0d2cf3f 100644 --- a/arch/x86/kvm/Makefile +++ b/arch/x86/kvm/Makefile @@ -3,7 +3,7 @@ # common-objs = $(addprefix ../../../virt/kvm/, kvm_main.o ioapic.o \ - coalesced_mmio.o) + coalesced_mmio.o irq_comm.o) ifeq ($(CONFIG_KVM_TRACE),y) common-objs += $(addprefix ../../../virt/kvm/, kvm_trace.o) endif diff --git a/arch/x86/kvm/irq.c b/arch/x86/kvm/irq.c index 8c1b9c5..c019b8e 100644 --- a/arch/x86/kvm/irq.c +++ b/arch/x86/kvm/irq.c @@ -99,36 +99,3 @@ void __kvm_migrate_timers(struct kvm_vcpu *vcpu) __kvm_migrate_apic_timer(vcpu); __kvm_migrate_pit_timer(vcpu); } - -/* This should be called with the kvm->lock mutex held */ -void kvm_set_irq(struct kvm *kvm, int irq, int level) -{ - /* Not possible to detect if the guest uses the PIC or the - * IOAPIC. So set the bit in both. The guest will ignore - * writes to the unused one. - */ - kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); - kvm_pic_set_irq(pic_irqchip(kvm), irq, level); -} - -void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) -{ - struct kvm_irq_ack_notifier *kian; - struct hlist_node *n; - - hlist_for_each_entry(kian, n, &kvm->arch.irq_ack_notifier_list, link) - if (kian->gsi == gsi) - kian->irq_acked(kian); -} - -void kvm_register_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian) -{ - hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list); -} - -void kvm_unregister_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian) -{ - hlist_del(&kian->link); -} diff --git a/arch/x86/kvm/irq.h b/arch/x86/kvm/irq.h index 4748532..f17c8f5 100644 --- a/arch/x86/kvm/irq.h +++ b/arch/x86/kvm/irq.h @@ -68,7 +68,6 @@ struct kvm_pic { }; struct kvm_pic *kvm_create_pic(struct kvm *kvm); -void kvm_pic_set_irq(void *opaque, int irq, int level); int kvm_pic_read_irq(struct kvm *kvm); void kvm_pic_update_irq(struct kvm_pic *s); void kvm_pic_clear_isr_ack(struct kvm *kvm); @@ -85,13 +84,6 @@ static inline int irqchip_in_kernel(struct kvm *kvm) void kvm_pic_reset(struct kvm_kpic_state *s); -void kvm_set_irq(struct kvm *kvm, int irq, int level); -void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); -void kvm_register_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian); -void kvm_unregister_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian); - void kvm_timer_intr_post(struct kvm_vcpu *vcpu, int vec); void kvm_inject_pending_timer_irqs(struct kvm_vcpu *vcpu); void kvm_inject_apic_timer_irqs(struct kvm_vcpu *vcpu); diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h index b507b8f..b2783a8 100644 --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h @@ -565,6 +565,8 @@ void kvm_queue_exception_e(struct kvm_vcpu *vcpu, unsigned nr, u32 error_code); void kvm_inject_page_fault(struct kvm_vcpu *vcpu, unsigned long cr2, u32 error_code); +void kvm_pic_set_irq(void *opaque, int irq, int level); + void kvm_inject_nmi(struct kvm_vcpu *vcpu); void fx_init(struct kvm_vcpu *vcpu); diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index b3b7598..3833c48 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -309,6 +309,12 @@ struct kvm_assigned_dev_kernel { struct pci_dev *dev; struct kvm *kvm; }; +void kvm_set_irq(struct kvm *kvm, int irq, int level); +void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); +void kvm_register_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian); +void kvm_unregister_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian); #ifdef CONFIG_DMAR int kvm_iommu_map_pages(struct kvm *kvm, gfn_t base_gfn, diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c new file mode 100644 index 0000000..371bcbc --- /dev/null +++ b/virt/kvm/irq_comm.c @@ -0,0 +1,59 @@ +/* + * irq_comm.c: Common API for in kernel interrupt controller + * Copyright (c) 2007, Intel Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * Authors: + * Yaozu (Eddie) Dong <Eddie.dong@intel.com> + * + */ + +#include <linux/kvm_host.h> + +#include "ioapic.h" + +/* This should be called with the kvm->lock mutex held */ +void kvm_set_irq(struct kvm *kvm, int irq, int level) +{ + /* Not possible to detect if the guest uses the PIC or the + * IOAPIC. So set the bit in both. The guest will ignore + * writes to the unused one. + */ + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); +#ifdef X86 + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); +#endif +} + +void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) +{ + struct kvm_irq_ack_notifier *kian; + struct hlist_node *n; + + hlist_for_each_entry(kian, n, &kvm->arch.irq_ack_notifier_list, link) + if (kian->gsi == gsi) + kian->irq_acked(kian); +} + +void kvm_register_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian) +{ + hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list); +} + +void kvm_unregister_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian) +{ + hlist_del(&kian->link); +} -- 1.5.1 Zhang, Xiantao wrote: > In order to enable vt-d suport for kvm/ia64 guests, I worked out the > patchset to make it happen. Please review. The first five patches have > no changes for logic and just do code move. > Xiantao > [PATCH 1/8] kvm/vt-d: Moving vtd.c from arch/x86/kvm/ to virt/kvm/ > [PATCH 2/8] kvm: Moving device_assignment logic to kvm_main.c > [PATCH 3/8] kvm: Changing is_mmio_pfn to kvm_is_mmio_pfn, and make it > common > [PATCH 4/8] kvm: Split arch/x86/kvm/irq.c to two parts. > [PATCH 5/8] kvm: Moving irqchip_in_kernel from ioapic.h to irq.h > [PATCH 6/8] kvm/ia64: Make pmt table be able to hold physical mmio > entries. > [PATCH 7/8] kvm/ia64: Add directed mmio range support for kvm guests. > [PATCH 8/8] kvm/ia64: Add intel iommu support for guests > Apart from my comment on patch 4, this series looks good. -- error compiling committee.c: too many arguments to function [-- Attachment #2: 0004-kvm-Split-arch-x86-kvm-irq.c-to-two-parts.patch --] [-- Type: application/octet-stream, Size: 7966 bytes --] From cc77672cdfb5a566d1c7e86d91c07d6db99ad8c0 Mon Sep 17 00:00:00 2001 From: Xiantao Zhang <xiantao.zhang@intel.com> Date: Sat, 27 Sep 2008 11:29:14 +0800 Subject: [PATCH] kvm: Split arch/x86/kvm/irq.c to two parts. Moving irq ack notification logic as common, and make it shared with ia64 side. Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com> --- arch/ia64/include/asm/kvm_host.h | 4 ++ arch/ia64/kvm/Makefile | 2 +- arch/ia64/kvm/irq.h | 5 --- arch/x86/kvm/Makefile | 2 +- arch/x86/kvm/irq.c | 33 --------------------- arch/x86/kvm/irq.h | 8 ----- include/asm-x86/kvm_host.h | 2 + include/linux/kvm_host.h | 6 ++++ virt/kvm/irq_comm.c | 59 ++++++++++++++++++++++++++++++++++++++ 9 files changed, 73 insertions(+), 48 deletions(-) create mode 100644 virt/kvm/irq_comm.c diff --git a/arch/ia64/include/asm/kvm_host.h b/arch/ia64/include/asm/kvm_host.h index 1efe513..da579a3 100644 --- a/arch/ia64/include/asm/kvm_host.h +++ b/arch/ia64/include/asm/kvm_host.h @@ -413,6 +413,10 @@ struct kvm_arch { struct kvm_ioapic *vioapic; struct kvm_vm_stat stat; struct kvm_sal_data rdv_sal_data; + + struct list_head assigned_dev_head; + struct dmar_domain *intel_iommu_domain; + struct hlist_head irq_ack_notifier_list; }; union cpuid3_t { diff --git a/arch/ia64/kvm/Makefile b/arch/ia64/kvm/Makefile index bf22fb9..c96f19f 100644 --- a/arch/ia64/kvm/Makefile +++ b/arch/ia64/kvm/Makefile @@ -44,7 +44,7 @@ EXTRA_CFLAGS += -Ivirt/kvm -Iarch/ia64/kvm/ EXTRA_AFLAGS += -Ivirt/kvm -Iarch/ia64/kvm/ common-objs = $(addprefix ../../../virt/kvm/, kvm_main.o ioapic.o \ - coalesced_mmio.o) + coalesced_mmio.o irq_comm.o) kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o obj-$(CONFIG_KVM) += kvm.o diff --git a/arch/ia64/kvm/irq.h b/arch/ia64/kvm/irq.h index f2e6545..604329a 100644 --- a/arch/ia64/kvm/irq.h +++ b/arch/ia64/kvm/irq.h @@ -23,10 +23,5 @@ #ifndef __IRQ_H #define __IRQ_H -struct kvm; - -static inline void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) -{ -} #endif diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile index 7dce593..0d2cf3f 100644 --- a/arch/x86/kvm/Makefile +++ b/arch/x86/kvm/Makefile @@ -3,7 +3,7 @@ # common-objs = $(addprefix ../../../virt/kvm/, kvm_main.o ioapic.o \ - coalesced_mmio.o) + coalesced_mmio.o irq_comm.o) ifeq ($(CONFIG_KVM_TRACE),y) common-objs += $(addprefix ../../../virt/kvm/, kvm_trace.o) endif diff --git a/arch/x86/kvm/irq.c b/arch/x86/kvm/irq.c index 8c1b9c5..c019b8e 100644 --- a/arch/x86/kvm/irq.c +++ b/arch/x86/kvm/irq.c @@ -99,36 +99,3 @@ void __kvm_migrate_timers(struct kvm_vcpu *vcpu) __kvm_migrate_apic_timer(vcpu); __kvm_migrate_pit_timer(vcpu); } - -/* This should be called with the kvm->lock mutex held */ -void kvm_set_irq(struct kvm *kvm, int irq, int level) -{ - /* Not possible to detect if the guest uses the PIC or the - * IOAPIC. So set the bit in both. The guest will ignore - * writes to the unused one. - */ - kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); - kvm_pic_set_irq(pic_irqchip(kvm), irq, level); -} - -void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) -{ - struct kvm_irq_ack_notifier *kian; - struct hlist_node *n; - - hlist_for_each_entry(kian, n, &kvm->arch.irq_ack_notifier_list, link) - if (kian->gsi == gsi) - kian->irq_acked(kian); -} - -void kvm_register_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian) -{ - hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list); -} - -void kvm_unregister_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian) -{ - hlist_del(&kian->link); -} diff --git a/arch/x86/kvm/irq.h b/arch/x86/kvm/irq.h index 4748532..f17c8f5 100644 --- a/arch/x86/kvm/irq.h +++ b/arch/x86/kvm/irq.h @@ -68,7 +68,6 @@ struct kvm_pic { }; struct kvm_pic *kvm_create_pic(struct kvm *kvm); -void kvm_pic_set_irq(void *opaque, int irq, int level); int kvm_pic_read_irq(struct kvm *kvm); void kvm_pic_update_irq(struct kvm_pic *s); void kvm_pic_clear_isr_ack(struct kvm *kvm); @@ -85,13 +84,6 @@ static inline int irqchip_in_kernel(struct kvm *kvm) void kvm_pic_reset(struct kvm_kpic_state *s); -void kvm_set_irq(struct kvm *kvm, int irq, int level); -void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); -void kvm_register_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian); -void kvm_unregister_irq_ack_notifier(struct kvm *kvm, - struct kvm_irq_ack_notifier *kian); - void kvm_timer_intr_post(struct kvm_vcpu *vcpu, int vec); void kvm_inject_pending_timer_irqs(struct kvm_vcpu *vcpu); void kvm_inject_apic_timer_irqs(struct kvm_vcpu *vcpu); diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h index b507b8f..b2783a8 100644 --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h @@ -565,6 +565,8 @@ void kvm_queue_exception_e(struct kvm_vcpu *vcpu, unsigned nr, u32 error_code); void kvm_inject_page_fault(struct kvm_vcpu *vcpu, unsigned long cr2, u32 error_code); +void kvm_pic_set_irq(void *opaque, int irq, int level); + void kvm_inject_nmi(struct kvm_vcpu *vcpu); void fx_init(struct kvm_vcpu *vcpu); diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index b3b7598..3833c48 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -309,6 +309,12 @@ struct kvm_assigned_dev_kernel { struct pci_dev *dev; struct kvm *kvm; }; +void kvm_set_irq(struct kvm *kvm, int irq, int level); +void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); +void kvm_register_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian); +void kvm_unregister_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian); #ifdef CONFIG_DMAR int kvm_iommu_map_pages(struct kvm *kvm, gfn_t base_gfn, diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c new file mode 100644 index 0000000..371bcbc --- /dev/null +++ b/virt/kvm/irq_comm.c @@ -0,0 +1,59 @@ +/* + * irq_comm.c: Common API for in kernel interrupt controller + * Copyright (c) 2007, Intel Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * Authors: + * Yaozu (Eddie) Dong <Eddie.dong@intel.com> + * + */ + +#include <linux/kvm_host.h> + +#include "ioapic.h" + +/* This should be called with the kvm->lock mutex held */ +void kvm_set_irq(struct kvm *kvm, int irq, int level) +{ + /* Not possible to detect if the guest uses the PIC or the + * IOAPIC. So set the bit in both. The guest will ignore + * writes to the unused one. + */ + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); +#ifdef X86 + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); +#endif +} + +void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi) +{ + struct kvm_irq_ack_notifier *kian; + struct hlist_node *n; + + hlist_for_each_entry(kian, n, &kvm->arch.irq_ack_notifier_list, link) + if (kian->gsi == gsi) + kian->irq_acked(kian); +} + +void kvm_register_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian) +{ + hlist_add_head(&kian->link, &kvm->arch.irq_ack_notifier_list); +} + +void kvm_unregister_irq_ack_notifier(struct kvm *kvm, + struct kvm_irq_ack_notifier *kian) +{ + hlist_del(&kian->link); +} -- 1.5.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. 2008-10-02 15:14 ` Zhang, Xiantao @ 2008-10-02 15:32 ` Avi Kivity -1 siblings, 0 replies; 14+ messages in thread From: Avi Kivity @ 2008-10-02 15:32 UTC (permalink / raw) To: kvm-ia64 Zhang, Xiantao wrote: > + > +/* This should be called with the kvm->lock mutex held */ > +void kvm_set_irq(struct kvm *kvm, int irq, int level) > +{ > + /* Not possible to detect if the guest uses the PIC or the > + * IOAPIC. So set the bit in both. The guest will ignore > + * writes to the unused one. > + */ > + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); > +#ifdef X86 > + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); > +#endif > +} > Will non-x86, non-ia64 archs survive this? -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. @ 2008-10-02 15:32 ` Avi Kivity 0 siblings, 0 replies; 14+ messages in thread From: Avi Kivity @ 2008-10-02 15:32 UTC (permalink / raw) To: Zhang, Xiantao; +Cc: kvm, kvm-ia64 Zhang, Xiantao wrote: > + > +/* This should be called with the kvm->lock mutex held */ > +void kvm_set_irq(struct kvm *kvm, int irq, int level) > +{ > + /* Not possible to detect if the guest uses the PIC or the > + * IOAPIC. So set the bit in both. The guest will ignore > + * writes to the unused one. > + */ > + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); > +#ifdef X86 > + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); > +#endif > +} > Will non-x86, non-ia64 archs survive this? -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. 2008-10-02 15:32 ` Avi Kivity @ 2008-10-03 2:13 ` Zhang, Xiantao -1 siblings, 0 replies; 14+ messages in thread From: Zhang, Xiantao @ 2008-10-03 2:13 UTC (permalink / raw) To: kvm-ia64 Avi Kivity wrote: > Zhang, Xiantao wrote: >> + >> +/* This should be called with the kvm->lock mutex held */ >> +void kvm_set_irq(struct kvm *kvm, int irq, int level) +{ >> + /* Not possible to detect if the guest uses the PIC or the >> + * IOAPIC. So set the bit in both. The guest will ignore >> + * writes to the unused one. >> + */ >> + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); +#ifdef X86 >> + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); >> +#endif >> +} >> > > Will non-x86, non-ia64 archs survive this? So far, I only see x86 and ia64 can share this code, since it is splitted from x86 arch. Currenlty non-x86 and non-ia64 archs shouldn't compile in this part. Xiantao ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. @ 2008-10-03 2:13 ` Zhang, Xiantao 0 siblings, 0 replies; 14+ messages in thread From: Zhang, Xiantao @ 2008-10-03 2:13 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm, kvm-ia64 Avi Kivity wrote: > Zhang, Xiantao wrote: >> + >> +/* This should be called with the kvm->lock mutex held */ >> +void kvm_set_irq(struct kvm *kvm, int irq, int level) +{ >> + /* Not possible to detect if the guest uses the PIC or the >> + * IOAPIC. So set the bit in both. The guest will ignore >> + * writes to the unused one. >> + */ >> + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); +#ifdef X86 >> + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); >> +#endif >> +} >> > > Will non-x86, non-ia64 archs survive this? So far, I only see x86 and ia64 can share this code, since it is splitted from x86 arch. Currenlty non-x86 and non-ia64 archs shouldn't compile in this part. Xiantao ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. 2008-10-03 2:13 ` Zhang, Xiantao @ 2008-10-07 9:47 ` Avi Kivity -1 siblings, 0 replies; 14+ messages in thread From: Avi Kivity @ 2008-10-07 9:47 UTC (permalink / raw) To: kvm-ia64 Zhang, Xiantao wrote: > Avi Kivity wrote: > >> Zhang, Xiantao wrote: >> >>> + >>> +/* This should be called with the kvm->lock mutex held */ >>> +void kvm_set_irq(struct kvm *kvm, int irq, int level) +{ >>> + /* Not possible to detect if the guest uses the PIC or the >>> + * IOAPIC. So set the bit in both. The guest will ignore >>> + * writes to the unused one. >>> + */ >>> + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); +#ifdef X86 >>> + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); >>> +#endif >>> +} >>> >>> >> Will non-x86, non-ia64 archs survive this? >> > So far, I only see x86 and ia64 can share this code, since it is > splitted from x86 arch. Currenlty non-x86 and non-ia64 archs shouldn't > compile in this part. > Right. Does the patch actually ensure this? -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. @ 2008-10-07 9:47 ` Avi Kivity 0 siblings, 0 replies; 14+ messages in thread From: Avi Kivity @ 2008-10-07 9:47 UTC (permalink / raw) To: Zhang, Xiantao; +Cc: kvm, kvm-ia64 Zhang, Xiantao wrote: > Avi Kivity wrote: > >> Zhang, Xiantao wrote: >> >>> + >>> +/* This should be called with the kvm->lock mutex held */ >>> +void kvm_set_irq(struct kvm *kvm, int irq, int level) +{ >>> + /* Not possible to detect if the guest uses the PIC or the >>> + * IOAPIC. So set the bit in both. The guest will ignore >>> + * writes to the unused one. >>> + */ >>> + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); +#ifdef X86 >>> + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); >>> +#endif >>> +} >>> >>> >> Will non-x86, non-ia64 archs survive this? >> > So far, I only see x86 and ia64 can share this code, since it is > splitted from x86 arch. Currenlty non-x86 and non-ia64 archs shouldn't > compile in this part. > Right. Does the patch actually ensure this? -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. 2008-10-07 9:47 ` Avi Kivity @ 2008-10-07 9:50 ` Zhang, Xiantao -1 siblings, 0 replies; 14+ messages in thread From: Zhang, Xiantao @ 2008-10-07 9:50 UTC (permalink / raw) To: kvm-ia64 Avi Kivity wrote: > Zhang, Xiantao wrote: >> Avi Kivity wrote: >> >>> Zhang, Xiantao wrote: >>> >>>> + >>>> +/* This should be called with the kvm->lock mutex held */ >>>> +void kvm_set_irq(struct kvm *kvm, int irq, int level) +{ >>>> + /* Not possible to detect if the guest uses the PIC or the >>>> + * IOAPIC. So set the bit in both. The guest will ignore >>>> + * writes to the unused one. >>>> + */ >>>> + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); +#ifdef X86 >>>> + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); >>>> +#endif >>>> +} >>>> >>>> >>> Will non-x86, non-ia64 archs survive this? >>> >> So far, I only see x86 and ia64 can share this code, since it is >> splitted from x86 arch. Currenlty non-x86 and non-ia64 archs >> shouldn't compile in this part. >> > > Right. Does the patch actually ensure this? Yes, other archs except x86 and ia64 can't reach the code, because they didn't compile irq_comm.c Xiantao ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64. @ 2008-10-07 9:50 ` Zhang, Xiantao 0 siblings, 0 replies; 14+ messages in thread From: Zhang, Xiantao @ 2008-10-07 9:50 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm, kvm-ia64 Avi Kivity wrote: > Zhang, Xiantao wrote: >> Avi Kivity wrote: >> >>> Zhang, Xiantao wrote: >>> >>>> + >>>> +/* This should be called with the kvm->lock mutex held */ >>>> +void kvm_set_irq(struct kvm *kvm, int irq, int level) +{ >>>> + /* Not possible to detect if the guest uses the PIC or the >>>> + * IOAPIC. So set the bit in both. The guest will ignore >>>> + * writes to the unused one. >>>> + */ >>>> + kvm_ioapic_set_irq(kvm->arch.vioapic, irq, level); +#ifdef X86 >>>> + kvm_pic_set_irq(pic_irqchip(kvm), irq, level); >>>> +#endif >>>> +} >>>> >>>> >>> Will non-x86, non-ia64 archs survive this? >>> >> So far, I only see x86 and ia64 can share this code, since it is >> splitted from x86 arch. Currenlty non-x86 and non-ia64 archs >> shouldn't compile in this part. >> > > Right. Does the patch actually ensure this? Yes, other archs except x86 and ia64 can't reach the code, because they didn't compile irq_comm.c Xiantao ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2008-10-07 9:51 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-09-29 5:25 [PATCH 0/8] Patchset to enable vt-d support for kvm/ia64 Zhang, Xiantao 2008-09-29 5:25 ` Zhang, Xiantao 2008-10-02 13:06 ` Avi Kivity 2008-10-02 13:06 ` Avi Kivity 2008-10-02 15:14 ` Zhang, Xiantao 2008-10-02 15:14 ` Zhang, Xiantao 2008-10-02 15:32 ` Avi Kivity 2008-10-02 15:32 ` Avi Kivity 2008-10-03 2:13 ` Zhang, Xiantao 2008-10-03 2:13 ` Zhang, Xiantao 2008-10-07 9:47 ` Avi Kivity 2008-10-07 9:47 ` Avi Kivity 2008-10-07 9:50 ` Zhang, Xiantao 2008-10-07 9:50 ` Zhang, Xiantao
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.