From: K. Y. Srinivasan <k...@microsoft.com>

The current code unconditionally sends an IPI. If we are running on the
correct CPU and are in interrupt level, we don't need an IPI.
Make this adjustment.

Signed-off-by: K. Y. Srinivasan <k...@microsoft.com>
---
 drivers/hv/hyperv_vmbus.h |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index 6113e91..fa514be 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -411,6 +411,10 @@ static inline void hv_poll_channel(struct vmbus_channel 
*channel,
        if (!channel)
                return;
 
+       if (in_interrupt() && (channel->target_cpu == smp_processor_id())) {
+               cb(channel);
+               return;
+       }
        smp_call_function_single(channel->target_cpu, cb, channel, true);
 }
 
-- 
1.7.1

Reply via email to