--- /dev/null
+diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
+index e2202ba..eee9dd1 100644
+--- a/xen/arch/x86/irq.c
++++ b/xen/arch/x86/irq.c
+@@ -318,13 +318,17 @@ static void __do_IRQ_guest(int vector)
+
+ if ( action->ack_type == ACKTYPE_EOI )
+ {
+- sp = pending_eoi_sp(peoi);
+- ASSERT((sp == 0) || (peoi[sp-1].vector < vector));
+- ASSERT(sp < (NR_VECTORS-1));
+- peoi[sp].vector = vector;
+- peoi[sp].ready = 0;
+- pending_eoi_sp(peoi) = sp+1;
+- cpu_set(smp_processor_id(), action->cpu_eoi_map);
++ if ( desc->handler == &pci_msi_type ) { //FIXME I'M UGLY
++ desc->handler->end(vector);
++ } else {
++ sp = pending_eoi_sp(peoi);
++ ASSERT((sp == 0) || (peoi[sp-1].vector < vector));
++ ASSERT(sp < (NR_VECTORS-1));
++ peoi[sp].vector = vector;
++ peoi[sp].ready = 0;
++ pending_eoi_sp(peoi) = sp+1;
++ cpu_set(smp_processor_id(), action->cpu_eoi_map);
++ }
+ }
+
+ for ( i = 0; i < action->nr_guests; i++ )