[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 18/28] x86/vioapic: Hook interrupt delivery of vIOAPIC
When irq remapping is enabled, IOAPIC Redirection Entry may be in remapping format. If that, generate an irq_remapping_request and call the common VIOMMU abstraction's callback to handle this interrupt request. Device model is responsible for checking the request's validity. Signed-off-by: Chao Gao <chao.gao@xxxxxxxxx> Signed-off-by: Lan Tianyu <tianyu.lan@xxxxxxxxx> --- v3: - use the new interface to check remapping format. --- xen/arch/x86/hvm/vioapic.c | 9 +++++++++ xen/include/asm-x86/viommu.h | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c index 97b419f..0f20e3f 100644 --- a/xen/arch/x86/hvm/vioapic.c +++ b/xen/arch/x86/hvm/vioapic.c @@ -30,6 +30,7 @@ #include <xen/lib.h> #include <xen/errno.h> #include <xen/sched.h> +#include <xen/viommu.h> #include <public/hvm/ioreq.h> #include <asm/hvm/io.h> #include <asm/hvm/vpic.h> @@ -387,9 +388,17 @@ static void vioapic_deliver(struct hvm_vioapic *vioapic, unsigned int pin) struct vlapic *target; struct vcpu *v; unsigned int irq = vioapic->base_gsi + pin; + struct arch_irq_remapping_request request; ASSERT(spin_is_locked(&d->arch.hvm_domain.irq_lock)); + irq_request_ioapic_fill(&request, vioapic->id, vioapic->redirtbl[pin].bits); + if ( viommu_check_irq_remapping(d, &request) ) + { + viommu_handle_irq_request(d, &request); + return; + } + HVM_DBG_LOG(DBG_LEVEL_IOAPIC, "dest=%x dest_mode=%x delivery_mode=%x " "vector=%x trig_mode=%x", diff --git a/xen/include/asm-x86/viommu.h b/xen/include/asm-x86/viommu.h index 3d995ba..e526e38 100644 --- a/xen/include/asm-x86/viommu.h +++ b/xen/include/asm-x86/viommu.h @@ -49,6 +49,15 @@ struct arch_irq_remapping_request enum viommu_irq_request_type type; }; +static inline void irq_request_ioapic_fill( + struct arch_irq_remapping_request *req, uint32_t ioapic_id, uint64_t rte) +{ + ASSERT(req); + req->type = VIOMMU_REQUEST_IRQ_APIC; + req->source_id = ioapic_id; + req->msg.rte = rte; +} + #endif /* __ARCH_X86_VIOMMU_H__ */ /* -- 1.8.3.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |