Hyper-V requires that events be processed before processing messages. Make the
necessary code adjustments.

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 1d4e878..536466b 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -418,15 +418,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;
-               vmbus_on_msg_dpc(0);
-       }
-
        page_addr = hv_context.synic_event_page[cpu];
        event = (union hv_synic_event_flags *)page_addr + VMBUS_MESSAGE_SINT;
 
@@ -436,6 +427,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 process */
+       if (msg->header.message_type != HVMSG_NONE) {
+               handled = true;
+               vmbus_on_msg_dpc(0);
+       }
+
        if (handled)
                return IRQ_HANDLED;
        else
-- 
1.7.4.1

_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/virtualization

Reply via email to