summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-graphics/obmc-ikvm/obmc-ikvm/0001-Add-flow-control-to-prevent-buffer-over-run.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-graphics/obmc-ikvm/obmc-ikvm/0001-Add-flow-control-to-prevent-buffer-over-run.patch')
-rw-r--r--meta-openbmc-mods/meta-common/recipes-graphics/obmc-ikvm/obmc-ikvm/0001-Add-flow-control-to-prevent-buffer-over-run.patch121
1 files changed, 0 insertions, 121 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-graphics/obmc-ikvm/obmc-ikvm/0001-Add-flow-control-to-prevent-buffer-over-run.patch b/meta-openbmc-mods/meta-common/recipes-graphics/obmc-ikvm/obmc-ikvm/0001-Add-flow-control-to-prevent-buffer-over-run.patch
deleted file mode 100644
index 70f2da4a0..000000000
--- a/meta-openbmc-mods/meta-common/recipes-graphics/obmc-ikvm/obmc-ikvm/0001-Add-flow-control-to-prevent-buffer-over-run.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From 88337ce8246a453cd3c6e60e96aead43549a5e1d Mon Sep 17 00:00:00 2001
-From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
-Date: Thu, 9 May 2019 16:26:53 -0700
-Subject: [PATCH] Add flow control to prevent buffer over run
-
-This service uses direct frame update with bypassing image
-compression and invalidating logic in libvncserver to achieve
-better performance by using of H/W compressed JPEG frames as those
-come from the video engine driver.
-
-This behavior helps quick frame update using very small amount of
-CPU resources but it causes a side effect which crashes bmcweb
-by OOM killer due to a buffer over run issue. Usually, this issue
-happens often in a slow speed connection because this service
-keeps sending all frames without any handshaking with clients so
-a session buffer in the bmcweb gets bigger and bigger since the
-low speed connection can't send all stream data on time.
-
-To fix this issue, this commit adds flow control logic to make
-frame updating handshakes with client so that it'll send frames
-only when it recieved client frame update messages. All other
-frames when the client doesn't request will be dropped out to
-prevent the buffer over run issue.
-
-Tested:
-bmcweb didn't keep increasing its KVM session buffer.
-KVM worked well with showing good refresh speed.
-
-resolves https://github.com/openbmc/bmcweb/issues/80
-
-Change-Id: I6b09a711137d15a38fce59adada9bf3d00afde86
-Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
----
- ikvm_server.cpp | 20 ++++++++++++++++++++
- ikvm_server.hpp | 11 +++++++++++
- 2 files changed, 31 insertions(+)
-
-diff --git a/ikvm_server.cpp b/ikvm_server.cpp
-index 35310da292be..dfafe3a82e64 100644
---- a/ikvm_server.cpp
-+++ b/ikvm_server.cpp
-@@ -119,6 +119,12 @@ void Server::sendFrame()
- continue;
- }
-
-+ if (!cd->needUpdate)
-+ {
-+ continue;
-+ }
-+ cd->needUpdate = false;
-+
- if (cl->enableLastRectEncoding)
- {
- fu->nRects = 0xFFFF;
-@@ -149,6 +155,19 @@ void Server::sendFrame()
- rfbReleaseClientIterator(it);
- }
-
-+void Server::clientFramebufferUpdateRequest(
-+ rfbClientPtr cl, rfbFramebufferUpdateRequestMsg *furMsg)
-+{
-+ ClientData *cd = (ClientData *)cl->clientData;
-+
-+ if (!cd)
-+ return;
-+
-+ // Ignore the furMsg info. This service uses full frame update always.
-+
-+ cd->needUpdate = true;
-+}
-+
- void Server::clientGone(rfbClientPtr cl)
- {
- Server* server = (Server*)cl->screen->screenData;
-@@ -170,6 +189,7 @@ enum rfbNewClientAction Server::newClient(rfbClientPtr cl)
- cl->clientData =
- new ClientData(server->video.getFrameRate(), &server->input);
- cl->clientGoneHook = clientGone;
-+ cl->clientFramebufferUpdateRequestHook = clientFramebufferUpdateRequest;
- if (!server->numClients++)
- {
- server->pendingResize = false;
-diff --git a/ikvm_server.hpp b/ikvm_server.hpp
-index b8062017b8ca..ebe4ad2b287e 100644
---- a/ikvm_server.hpp
-+++ b/ikvm_server.hpp
-@@ -32,6 +32,7 @@ class Server
- */
- ClientData(int s, Input* i) : skipFrame(s), input(i)
- {
-+ needUpdate = false;
- }
- ~ClientData() = default;
- ClientData(const ClientData&) = default;
-@@ -41,6 +42,7 @@ class Server
-
- int skipFrame;
- Input* input;
-+ bool needUpdate;
- };
-
- /*
-@@ -85,6 +87,15 @@ class Server
-
- private:
- /*
-+ * @brief Handler for a client frame update message
-+ *
-+ * @param[in] cl - Handle to the client object
-+ * @param[in] furMsg - Pointer of the FUR message
-+ */
-+ static void
-+ clientFramebufferUpdateRequest(rfbClientPtr cl,
-+ rfbFramebufferUpdateRequestMsg *furMsg);
-+ /*
- * @brief Handler for a client disconnecting
- *
- * @param[in] cl - Handle to the client object
---
-2.7.4
-