[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC v5 21/23] vfio-user: add 'x-msg-timeout' option that specifies msg
From: |
John Johnson |
Subject: |
[RFC v5 21/23] vfio-user: add 'x-msg-timeout' option that specifies msg wait times |
Date: |
Thu, 5 May 2022 10:20:04 -0700 |
Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
---
hw/vfio/pci.h | 1 +
hw/vfio/user.h | 1 +
hw/vfio/pci.c | 4 ++++
hw/vfio/user.c | 7 ++++---
4 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
index c207847..ca50858 100644
--- a/hw/vfio/pci.h
+++ b/hw/vfio/pci.h
@@ -197,6 +197,7 @@ struct VFIOUserPCIDevice {
bool secure_dma; /* disable shared mem for DMA */
bool send_queued; /* all sends are queued */
bool no_post; /* all regions write are sync */
+ uint32_t wait_time; /* timeout for message replies */
};
/* Use uin32_t for vendor & device so PCI_ANY_ID expands and cannot match hw */
diff --git a/hw/vfio/user.h b/hw/vfio/user.h
index 902facf..18c6404 100644
--- a/hw/vfio/user.h
+++ b/hw/vfio/user.h
@@ -55,6 +55,7 @@ typedef struct VFIOProxy {
void (*request)(void *opaque, VFIOUserMsg *msg);
void *req_arg;
int flags;
+ uint32_t wait_time;
QemuCond close_cv;
AioContext *ctx;
QEMUBH *req_bh;
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index f4b4a30..b103d08 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -3698,6 +3698,9 @@ static void vfio_user_pci_realize(PCIDevice *pdev, Error
**errp)
if (udev->no_post) {
proxy->flags |= VFIO_PROXY_NO_POST;
}
+ if (udev->wait_time) {
+ proxy->wait_time = udev->wait_time;
+ }
vfio_user_validate_version(vbasedev, &err);
if (err != NULL) {
@@ -3840,6 +3843,7 @@ static Property vfio_user_pci_dev_properties[] = {
DEFINE_PROP_BOOL("secure-dma", VFIOUserPCIDevice, secure_dma, false),
DEFINE_PROP_BOOL("x-send-queued", VFIOUserPCIDevice, send_queued, false),
DEFINE_PROP_BOOL("x-no-posted-writes", VFIOUserPCIDevice, no_post, false),
+ DEFINE_PROP_UINT32("x-msg-timeout", VFIOUserPCIDevice, wait_time, 0),
DEFINE_PROP_END_OF_LIST(),
};
diff --git a/hw/vfio/user.c b/hw/vfio/user.c
index 262d1a7..ec2d89b 100644
--- a/hw/vfio/user.c
+++ b/hw/vfio/user.c
@@ -39,7 +39,7 @@
static uint64_t max_xfer_size = VFIO_USER_DEF_MAX_XFER;
static uint64_t max_send_fds = VFIO_USER_DEF_MAX_FDS;
-static int wait_time = 1000; /* wait 1 sec for replies */
+static uint32_t wait_time = 1000; /* wait 1 sec for replies */
static IOThread *vfio_user_iothread;
static void vfio_user_shutdown(VFIOProxy *proxy);
@@ -718,7 +718,7 @@ static void vfio_user_send_wait(VFIOProxy *proxy,
VFIOUserHdr *hdr,
if (ret == 0) {
while (!msg->complete) {
- if (!qemu_cond_timedwait(&msg->cv, &proxy->lock, wait_time)) {
+ if (!qemu_cond_timedwait(&msg->cv, &proxy->lock,
proxy->wait_time)) {
QTAILQ_REMOVE(&proxy->pending, msg, next);
vfio_user_set_error(hdr, ETIMEDOUT);
break;
@@ -757,7 +757,7 @@ static void vfio_user_wait_reqs(VFIOProxy *proxy)
msg = proxy->last_nowait;
msg->type = VFIO_MSG_WAIT;
while (!msg->complete) {
- if (!qemu_cond_timedwait(&msg->cv, &proxy->lock, wait_time)) {
+ if (!qemu_cond_timedwait(&msg->cv, &proxy->lock,
proxy->wait_time)) {
QTAILQ_REMOVE(&proxy->pending, msg, next);
error_printf("vfio_wait_reqs - timed out\n");
break;
@@ -867,6 +867,7 @@ VFIOProxy *vfio_user_connect_dev(SocketAddress *addr, Error
**errp)
proxy->ioc = ioc;
proxy->flags = VFIO_PROXY_CLIENT;
proxy->state = VFIO_PROXY_CONNECTED;
+ proxy->wait_time = wait_time;
qemu_mutex_init(&proxy->lock);
qemu_cond_init(&proxy->close_cv);
--
1.8.3.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [RFC v5 21/23] vfio-user: add 'x-msg-timeout' option that specifies msg wait times,
John Johnson <=