KVM: fix crash on irqfd deassign
authorMichael S. Tsirkin <mst@redhat.com>
Thu, 17 Mar 2011 08:53:33 +0000 (10:53 +0200)
committerAvi Kivity <avi@redhat.com>
Wed, 6 Apr 2011 10:15:55 +0000 (13:15 +0300)
irqfd in kvm used flush_work incorrectly: it assumed that work scheduled
previously can't run after flush_work, but since kvm uses a non-reentrant
workqueue (by means of schedule_work) we need flush_work_sync to get that
guarantee.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reported-by: Jean-Philippe Menil <jean-philippe.menil@univ-nantes.fr>
Tested-by: Jean-Philippe Menil <jean-philippe.menil@univ-nantes.fr>
Signed-off-by: Avi Kivity <avi@redhat.com>
virt/kvm/eventfd.c

index 3656849f78a0b722236f25eefd58dac4fc839dcf..0d1fd5160adff73af128eb704996b3480083a685 100644 (file)
@@ -90,7 +90,7 @@ irqfd_shutdown(struct work_struct *work)
         * We know no new events will be scheduled at this point, so block
         * until all previously outstanding events have completed
         */
-       flush_work(&irqfd->inject);
+       flush_work_sync(&irqfd->inject);
 
        /*
         * It is now safe to release the object's resources