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_lock_irqsave(&(s->lock), flags);
+ poll_wait(filp, &(s->user_wait_queue), wait);
+
if (s->waiting) {
palacios_spinlock_unlock_irqrestore(&(s->lock), flags);
return POLLIN | POLLRDNORM;
}
-
- poll_wait(filp, &(s->user_wait_queue), wait);
palacios_spinlock_unlock_irqrestore(&(s->lock), flags);