[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v9 12/20] multi-process: add proxy communication functions
From: |
elena . ufimtseva |
Subject: |
[PATCH v9 12/20] multi-process: add proxy communication functions |
Date: |
Thu, 27 Aug 2020 11:12:23 -0700 |
From: Elena Ufimtseva <elena.ufimtseva@oracle.com>
Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
---
include/io/mpqemu-link.h | 4 ++++
io/mpqemu-link.c | 38 ++++++++++++++++++++++++++++++++++++++
2 files changed, 42 insertions(+)
diff --git a/include/io/mpqemu-link.h b/include/io/mpqemu-link.h
index b348c658d1..62425b8f3b 100644
--- a/include/io/mpqemu-link.h
+++ b/include/io/mpqemu-link.h
@@ -15,6 +15,8 @@
#include "qemu/thread.h"
#include "io/channel.h"
#include "exec/hwaddr.h"
+#include "io/channel-socket.h"
+#include "hw/pci/proxy.h"
#define REMOTE_MAX_FDS 8
@@ -77,6 +79,8 @@ typedef struct MPQemuRequest MPQemuRequest;
void mpqemu_msg_send_in_co(MPQemuRequest *req, QIOChannel *ioc, Error **errp);
void mpqemu_msg_recv_in_co(MPQemuRequest *req, QIOChannel *ioc, Error **errp);
+uint64_t mpqemu_msg_send_and_await_reply(MPQemuMsg *msg, PCIProxyDev *pdev,
+ Error **errp);
void mpqemu_msg_send(MPQemuMsg *msg, QIOChannel *ioc, Error **errp);
void mpqemu_msg_recv(MPQemuMsg *msg, QIOChannel *ioc, Error **errp);
diff --git a/io/mpqemu-link.c b/io/mpqemu-link.c
index 0d1eaaca7f..f5f22267d1 100644
--- a/io/mpqemu-link.c
+++ b/io/mpqemu-link.c
@@ -17,6 +17,7 @@
#include "qemu/iov.h"
#include "qemu/error-report.h"
#include "qemu/main-loop.h"
+#include "io/channel.h"
void mpqemu_msg_send(MPQemuMsg *msg, QIOChannel *ioc, Error **errp)
{
@@ -150,6 +151,43 @@ fail:
}
}
+uint64_t mpqemu_msg_send_and_await_reply(MPQemuMsg *msg, PCIProxyDev *pdev,
+ Error **errp)
+{
+ MPQemuMsg msg_reply = {0};
+ uint64_t ret = UINT64_MAX;
+ Error *local_err = NULL;
+
+ qemu_mutex_unlock_iothread();
+ qemu_mutex_lock(&pdev->io_mutex);
+
+ mpqemu_msg_send(msg, pdev->ioc, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ goto exit_send;
+ }
+
+ mpqemu_msg_recv(&msg_reply, pdev->ioc, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ goto exit_send;
+ }
+
+ if (!mpqemu_msg_valid(&msg_reply) || msg_reply.cmd != RET_MSG) {
+ error_setg(errp, "ERROR: Invalid reply received for command %d",
+ msg->cmd);
+ goto exit_send;
+ } else {
+ ret = msg_reply.data.u64;
+ }
+
+ exit_send:
+ qemu_mutex_unlock(&pdev->io_mutex);
+ qemu_mutex_lock_iothread();
+
+ return ret;
+}
+
static void coroutine_fn mpqemu_msg_send_co(void *data)
{
MPQemuRequest *req = (MPQemuRequest *)data;
--
2.25.GIT
- [PATCH v9 00/20] Initial support for multi-process Qemu, elena . ufimtseva, 2020/08/27
- [PATCH v9 02/20] multi-process: Add config option for multi-process QEMU, elena . ufimtseva, 2020/08/27
- [PATCH v9 03/20] multi-process: setup PCI host bridge for remote device, elena . ufimtseva, 2020/08/27
- [PATCH v9 04/20] multi-process: setup a machine object for remote device process, elena . ufimtseva, 2020/08/27
- [PATCH v9 05/20] multi-process: add qio channel function to transmit, elena . ufimtseva, 2020/08/27
- [PATCH v9 06/20] multi-process: define MPQemuMsg format and transmission functions, elena . ufimtseva, 2020/08/27
- [PATCH v9 09/20] multi-process: Associate fd of a PCIDevice with its object, elena . ufimtseva, 2020/08/27
- [PATCH v9 10/20] multi-process: setup memory manager for remote device, elena . ufimtseva, 2020/08/27
- [PATCH v9 12/20] multi-process: add proxy communication functions,
elena . ufimtseva <=
- [PATCH v9 14/20] multi-process: PCI BAR read/write handling for proxy & remote endpoints, elena . ufimtseva, 2020/08/27
- [PATCH v9 13/20] multi-process: Forward PCI config space acceses to the remote process, elena . ufimtseva, 2020/08/27
- [PATCH v9 15/20] multi-process: Synchronize remote memory, elena . ufimtseva, 2020/08/27
- [PATCH v9 17/20] multi-process: Retrieve PCI info from remote process, elena . ufimtseva, 2020/08/27
- [PATCH v9 18/20] multi-process: perform device reset in the remote process, elena . ufimtseva, 2020/08/27
- [PATCH v9 16/20] multi-process: create IOHUB object to handle irq, elena . ufimtseva, 2020/08/27
- [PATCH v9 20/20] multi-process: add configure and usage information, elena . ufimtseva, 2020/08/27
- [PATCH v9 19/20] multi-process: add the concept description to docs/devel/qemu-multiprocess, elena . ufimtseva, 2020/08/27
- [PATCH v9 01/20] memory: alloc RAM from file at offset, elena . ufimtseva, 2020/08/27
- [PATCH v9 07/20] multi-process: define transmission functions in remote, elena . ufimtseva, 2020/08/27