mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-11-02 14:58:25 +00:00
46 lines
1.6 KiB
Diff
46 lines
1.6 KiB
Diff
From 99ee6a24b16eb6db124d0fafebb1b87bbf1f3dc6 Mon Sep 17 00:00:00 2001
|
|
From: Dexuan Cui <decui@microsoft.com>
|
|
Date: Wed, 27 Jan 2016 22:29:39 -0800
|
|
Subject: [PATCH 28/44] Drivers: hv: vmbus: vmbus_sendpacket_ctl: hvsock: avoid
|
|
unnecessary signaling
|
|
|
|
When the hvsock channel's outbound ringbuffer is full (i.e.,
|
|
hv_ringbuffer_write() returns -EAGAIN), we should avoid the unnecessary
|
|
signaling the host.
|
|
|
|
Signed-off-by: Dexuan Cui <decui@microsoft.com>
|
|
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
(cherry picked from commit 5f363bc38f810d238d1e8b19998625ddec3b8138)
|
|
---
|
|
drivers/hv/channel.c | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
|
|
index dd6de7fc442f..128dcf22e459 100644
|
|
--- a/drivers/hv/channel.c
|
|
+++ b/drivers/hv/channel.c
|
|
@@ -659,6 +659,9 @@ int vmbus_sendpacket_ctl(struct vmbus_channel *channel, void *buffer,
|
|
* If we cannot write to the ring-buffer; signal the host
|
|
* even if we may not have written anything. This is a rare
|
|
* enough condition that it should not matter.
|
|
+ * NOTE: in this case, the hvsock channel is an exception, because
|
|
+ * it looks the host side's hvsock implementation has a throttling
|
|
+ * mechanism which can hurt the performance otherwise.
|
|
*/
|
|
|
|
if (channel->signal_policy)
|
|
@@ -666,7 +669,8 @@ int vmbus_sendpacket_ctl(struct vmbus_channel *channel, void *buffer,
|
|
else
|
|
kick_q = true;
|
|
|
|
- if (((ret == 0) && kick_q && signal) || (ret))
|
|
+ if (((ret == 0) && kick_q && signal) ||
|
|
+ (ret && !is_hvsock_channel(channel)))
|
|
vmbus_setevent(channel);
|
|
|
|
return ret;
|
|
--
|
|
2.11.1
|
|
|