Conform to Windows specification by checking for events before messages.

Signed-off-by: K. Y. Srinivasan <[email protected]>
Signed-off-by: Haiyang Zhang <[email protected]>
---
 drivers/staging/hv/vmbus_drv.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index 5dcc8c3..4e07d4f 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -445,15 +445,6 @@ static irqreturn_t vmbus_isr(int irq, void *dev_id)
        union hv_synic_event_flags *event;
        bool handled = false;
 
-       page_addr = hv_context.synic_message_page[cpu];
-       msg = (struct hv_message *)page_addr + VMBUS_MESSAGE_SINT;
-
-       /* Check if there are actual msgs to be process */
-       if (msg->header.message_type != HVMSG_NONE) {
-               handled = true;
-               tasklet_schedule(&msg_dpc);
-       }
-
        page_addr = hv_context.synic_event_page[cpu];
        event = (union hv_synic_event_flags *)page_addr + VMBUS_MESSAGE_SINT;
 
@@ -463,6 +454,15 @@ static irqreturn_t vmbus_isr(int irq, void *dev_id)
                tasklet_schedule(&event_dpc);
        }
 
+       page_addr = hv_context.synic_message_page[cpu];
+       msg = (struct hv_message *)page_addr + VMBUS_MESSAGE_SINT;
+
+       /* Check if there are actual msgs to be processed */
+       if (msg->header.message_type != HVMSG_NONE) {
+               handled = true;
+               tasklet_schedule(&msg_dpc);
+       }
+
        if (handled)
                return IRQ_HANDLED;
        else
-- 
1.7.4.1

_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to