mirror of
https://github.com/linuxkit/linuxkit.git
synced 2026-01-05 03:44:12 +00:00
These are most of the changes to channel.c and channel_mgmt.c from upstream. They are needed to apply a proposed patch to fix yet another kernel crash we reported. This patch is also included. With these patches applied many thousand connections with random data and up to 10 concurrent connections are sustained without kernel crashes. This patch also updates the core Hyper-V socket support to v11 (which also obsoletes the previous patch added to work around a kernel bug) Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
46 lines
1.6 KiB
Diff
46 lines
1.6 KiB
Diff
From 3f1df935d1b5caad3f00a43eb50714375bc32547 Mon Sep 17 00:00:00 2001
|
|
From: Dexuan Cui <decui@microsoft.com>
|
|
Date: Wed, 27 Jan 2016 22:29:39 -0800
|
|
Subject: [PATCH 26/40] 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 dd6de7f..128dcf2 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.8.2
|
|
|