]> xenbits.xensource.com Git - people/vhanquez/xen.git/commitdiff
Revert 23183:98ba0aceaf30 (xen-unstable:24007:0526644ad2a6).
authorKeir Fraser <keir@xen.org>
Thu, 17 Nov 2011 09:10:07 +0000 (09:10 +0000)
committerKeir Fraser <keir@xen.org>
Thu, 17 Nov 2011 09:10:07 +0000 (09:10 +0000)
Locking is broken (calls evtchn_unmask with lock already held).

Signed-off-by: Keir Fraser <keir@xen.org>
xen/arch/x86/physdev.c

index 92a8e15abc9c11c918d9a1547b6bb787132c77fb..fff3544b688710c6263a6907aaf365bed134bc57 100644 (file)
@@ -261,7 +261,6 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg)
         ret = -EINVAL;
         if ( eoi.irq >= v->domain->nr_pirqs )
             break;
-        spin_lock(&v->domain->event_lock);
         if ( v->domain->arch.pirq_eoi_map )
             evtchn_unmask(v->domain->pirq_to_evtchn[eoi.irq]);
         if ( !is_hvm_domain(v->domain) ||
@@ -269,19 +268,6 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg)
             ret = pirq_guest_eoi(v->domain, eoi.irq);
         else
             ret = 0;
-        if ( is_hvm_domain(v->domain) &&
-                domain_pirq_to_emuirq(v->domain, eoi.irq) > 0 )
-        {
-            struct hvm_irq *hvm_irq = &v->domain->arch.hvm_domain.irq;
-            int gsi = domain_pirq_to_emuirq(v->domain, eoi.irq);
-
-            /* if this is a level irq and count > 0, send another
-             * notification */ 
-            if ( gsi >= NR_ISAIRQS /* ISA irqs are edge triggered */
-                    && hvm_irq->gsi_assert_count[gsi] )
-                send_guest_pirq(v->domain, eoi.irq);
-        }
-        spin_unlock(&v->domain->event_lock);
         break;
     }
 
@@ -337,10 +323,9 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg)
             break;
         irq_status_query.flags = 0;
         if ( is_hvm_domain(v->domain) &&
-                domain_pirq_to_irq(v->domain, irq) <= 0 &&
-                domain_pirq_to_emuirq(v->domain, irq) == IRQ_UNBOUND )
+             domain_pirq_to_irq(v->domain, irq) <= 0 )
         {
-            ret = -EINVAL;
+            ret = copy_to_guest(arg, &irq_status_query, 1) ? -EFAULT : 0;
             break;
         }