[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/HVM: make vmsi_deliver() return proper error values
commit a296e5383b9291db566df105a8efbdc68c517f39 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Thu Jun 5 17:46:13 2014 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Jun 5 17:46:13 2014 +0200 x86/HVM: make vmsi_deliver() return proper error values ... and propagate this from hvm_inject_msi(). In the course of this I spotted further room for cleanup: - vmsi_inj_irq()'s struct domain * parameter was unused - vmsi_deliver() pointlessly passed on dest_ExtINT to vmsi_inj_irq() (which that one validly refused to handle) - vmsi_inj_irq()'s sole caller guarantees a proper delivery mode (i.e. rather than printing an obscure message we can just BUG()) - some formatting and log message quirks Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/hvm/irq.c | 4 +--- xen/arch/x86/hvm/vmsi.c | 43 +++++++++++++++++-------------------------- 2 files changed, 18 insertions(+), 29 deletions(-) diff --git a/xen/arch/x86/hvm/irq.c b/xen/arch/x86/hvm/irq.c index cbbc9bd..3b29678 100644 --- a/xen/arch/x86/hvm/irq.c +++ b/xen/arch/x86/hvm/irq.c @@ -311,9 +311,7 @@ int hvm_inject_msi(struct domain *d, uint64_t addr, uint32_t data) return -ERANGE; } - vmsi_deliver(d, vector, dest, dest_mode, delivery_mode, trig_mode); - - return 0; + return vmsi_deliver(d, vector, dest, dest_mode, delivery_mode, trig_mode); } void hvm_set_callback_via(struct domain *d, uint64_t via) diff --git a/xen/arch/x86/hvm/vmsi.c b/xen/arch/x86/hvm/vmsi.c index 10e5f34..f48b123 100644 --- a/xen/arch/x86/hvm/vmsi.c +++ b/xen/arch/x86/hvm/vmsi.c @@ -43,14 +43,12 @@ #include <asm/io_apic.h> static void vmsi_inj_irq( - struct domain *d, struct vlapic *target, uint8_t vector, uint8_t trig_mode, uint8_t delivery_mode) { - HVM_DBG_LOG(DBG_LEVEL_IOAPIC, "vmsi_inj_irq " - "irq %d trig %d delive mode %d\n", + HVM_DBG_LOG(DBG_LEVEL_VLAPIC, "vmsi_inj_irq: vec %02x trig %d dm %d\n", vector, trig_mode, delivery_mode); switch ( delivery_mode ) @@ -60,8 +58,7 @@ static void vmsi_inj_irq( vlapic_set_irq(target, vector, trig_mode); break; default: - gdprintk(XENLOG_WARNING, "error delivery mode %d\n", delivery_mode); - break; + BUG(); } } @@ -76,38 +73,32 @@ int vmsi_deliver( switch ( delivery_mode ) { case dest_LowestPrio: - { target = vlapic_lowest_prio(d, NULL, 0, dest, dest_mode); if ( target != NULL ) - vmsi_inj_irq(d, target, vector, trig_mode, delivery_mode); - else - HVM_DBG_LOG(DBG_LEVEL_IOAPIC, "null round robin: " - "vector=%x delivery_mode=%x\n", - vector, dest_LowestPrio); - break; - } + { + vmsi_inj_irq(target, vector, trig_mode, delivery_mode); + break; + } + HVM_DBG_LOG(DBG_LEVEL_VLAPIC, "null MSI round robin: vector=%02x\n", + vector); + return -ESRCH; case dest_Fixed: - case dest_ExtINT: - { for_each_vcpu ( d, v ) if ( vlapic_match_dest(vcpu_vlapic(v), NULL, 0, dest, dest_mode) ) - vmsi_inj_irq(d, vcpu_vlapic(v), - vector, trig_mode, delivery_mode); + vmsi_inj_irq(vcpu_vlapic(v), vector, + trig_mode, delivery_mode); break; - } - case dest_SMI: - case dest_NMI: - case dest_INIT: - case dest__reserved_2: default: - gdprintk(XENLOG_WARNING, "Unsupported delivery mode %d\n", - delivery_mode); - break; + printk(XENLOG_G_WARNING + "%pv: Unsupported MSI delivery mode %d for Dom%d\n", + current, delivery_mode, d->domain_id); + return -EINVAL; } - return 1; + + return 0; } void vmsi_deliver_pirq(struct domain *d, const struct hvm_pirq_dpci *pirq_dpci) -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |