[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v10 11/19] multi-process: add proxy communication functions
From: |
elena . ufimtseva |
Subject: |
[PATCH v10 11/19] multi-process: add proxy communication functions |
Date: |
Mon, 5 Oct 2020 11:50:59 -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>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.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 e33181ad80..4bea5daeb4 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
@@ -65,6 +67,8 @@ typedef struct {
int num_fds;
} QEMU_PACKED MPQemuMsg;
+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 8d966820a0..618061753b 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"
/*
* Send message over the ioc QIOChannel.
@@ -207,6 +208,43 @@ fail:
}
}
+/*
+ * Called from VCPU thread in non-coroutine context.
+ */
+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_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);
+
+ return ret;
+}
+
bool mpqemu_msg_valid(MPQemuMsg *msg)
{
if (msg->cmd >= MPQEMU_CMD_MAX && msg->cmd < 0) {
--
2.25.GIT
- [PATCH v10 08/19] multi-process: Associate fd of a PCIDevice with its object, (continued)
- [PATCH v10 08/19] multi-process: Associate fd of a PCIDevice with its object, elena . ufimtseva, 2020/10/05
- [PATCH v10 09/19] multi-process: setup memory manager for remote device, elena . ufimtseva, 2020/10/05
- [PATCH v10 12/19] multi-process: Forward PCI config space acceses to the remote process, elena . ufimtseva, 2020/10/05
- [PATCH v10 10/19] multi-process: introduce proxy object, elena . ufimtseva, 2020/10/05
- [PATCH v10 14/19] multi-process: Synchronize remote memory, elena . ufimtseva, 2020/10/05
- [PATCH v10 16/19] multi-process: Retrieve PCI info from remote process, elena . ufimtseva, 2020/10/05
- [PATCH v10 15/19] multi-process: create IOHUB object to handle irq, elena . ufimtseva, 2020/10/05
- [PATCH v10 04/19] multi-process: setup a machine object for remote device process, elena . ufimtseva, 2020/10/05
- [PATCH v10 11/19] multi-process: add proxy communication functions,
elena . ufimtseva <=
- [PATCH v10 13/19] multi-process: PCI BAR read/write handling for proxy & remote endpoints, elena . ufimtseva, 2020/10/05
- [PATCH v10 17/19] multi-process: perform device reset in the remote process, elena . ufimtseva, 2020/10/05
- [PATCH v10 19/19] multi-process: add configure and usage information, elena . ufimtseva, 2020/10/05
- [PATCH v10 18/19] multi-process: add the concept description to docs/devel/qemu-multiprocess, elena . ufimtseva, 2020/10/05
- Re: [PATCH v10 00/19] Initial support for multi-process Qemu, Stefan Hajnoczi, 2020/10/07