Message ID | 1506049330-11196-20-git-send-email-tianyu.lan@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Sep 21, 2017 at 11:02:00PM -0400, Lan Tianyu wrote: > From: Chao Gao <chao.gao@intel.com> > > 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@intel.com> > Signed-off-by: Lan Tianyu <tianyu.lan@intel.com> > > --- > v3: > - use the new interface to check remapping format. > --- > xen/arch/x86/hvm/vioapic.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c > index 72cae93..5d0d1cd 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> > @@ -38,6 +39,7 @@ > #include <asm/current.h> > #include <asm/event.h> > #include <asm/io_apic.h> > +#include <asm/viommu.h> I think asm/viommu should be included by viommu.h. > > /* HACK: Route IRQ0 only to VCPU0 to prevent time jumps. */ > #define IRQ0_SPECIAL_ROUTING 1 > @@ -387,9 +389,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); So the macro introduced in the previous patch should instead be introduced here. Roger.
diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c index 72cae93..5d0d1cd 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> @@ -38,6 +39,7 @@ #include <asm/current.h> #include <asm/event.h> #include <asm/io_apic.h> +#include <asm/viommu.h> /* HACK: Route IRQ0 only to VCPU0 to prevent time jumps. */ #define IRQ0_SPECIAL_ROUTING 1 @@ -387,9 +389,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",