palacios_spinlock_lock_irqsave(&(dev->lock),f);
+
+ // register ourselves on the user wait queue
+ poll_wait(filp, &(dev->user_wait_queue), poll_tb);
+
if (dev->waiting) {
// Yes, we have a request if you want it!
palacios_spinlock_unlock_irqrestore(&(dev->lock),f);
// No request yet, so we need to wait for one to show up.
- // register ourselves on the user wait queue
- poll_wait(filp, &(dev->user_wait_queue), poll_tb);
-
palacios_spinlock_unlock_irqrestore(&(dev->lock),f);
DEEP_DEBUG_PRINT("palacios: hostdev: poll delayed\n");
palacios_spinlock_unlock_irqrestore(&(dev->lock),f2);
palacios_spinlock_unlock_irqrestore(&(host_dev->lock),f1);
+ palacios_spinlock_deinit(&(dev->lock));
+
palacios_host_dev_user_free(dev);
return 0;
static int host_dev_guest_deinit(struct v3_guest * guest, void * vm_data) {
- palacios_free(vm_data);
+ struct palacios_host_dev * host_dev = (struct palacios_host_dev *) vm_data;
+ palacios_spinlock_deinit(&(host_dev->lock));
+ palacios_free(host_dev);
return 0;
}