mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
vfio-user: add 'x-msg-timeout' option
By default, the vfio-user subsystem will wait 5 seconds for a message reply from the server. Add an option to allow this to be configurable. Originally-by: John Johnson <john.g.johnson@oracle.com> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/qemu-devel/20250625193012.2316242-16-john.levon@nutanix.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
committed by
Cédric Le Goater
parent
c6ac52a4d8
commit
3358d926ad
@@ -23,6 +23,7 @@ struct VFIOUserPCIDevice {
|
||||
VFIOPCIDevice device;
|
||||
SocketAddress *socket;
|
||||
bool send_queued; /* all sends are queued */
|
||||
uint32_t wait_time; /* timeout for message replies */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -267,6 +268,9 @@ static void vfio_user_pci_realize(PCIDevice *pdev, Error **errp)
|
||||
proxy->flags |= VFIO_PROXY_FORCE_QUEUED;
|
||||
}
|
||||
|
||||
/* user specified or 5 sec default */
|
||||
proxy->wait_time = udev->wait_time;
|
||||
|
||||
if (!vfio_user_validate_version(proxy, errp)) {
|
||||
goto error;
|
||||
}
|
||||
@@ -398,6 +402,7 @@ static const Property vfio_user_pci_dev_properties[] = {
|
||||
DEFINE_PROP_UINT32("x-pci-sub-device-id", VFIOPCIDevice,
|
||||
sub_device_id, PCI_ANY_ID),
|
||||
DEFINE_PROP_BOOL("x-send-queued", VFIOUserPCIDevice, send_queued, false),
|
||||
DEFINE_PROP_UINT32("x-msg-timeout", VFIOUserPCIDevice, wait_time, 5000),
|
||||
};
|
||||
|
||||
static void vfio_user_pci_set_socket(Object *obj, Visitor *v, const char *name,
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
#include "qemu/main-loop.h"
|
||||
#include "system/iothread.h"
|
||||
|
||||
static int wait_time = 5000; /* wait up to 5 sec for busy servers */
|
||||
static IOThread *vfio_user_iothread;
|
||||
|
||||
static void vfio_user_shutdown(VFIOUserProxy *proxy);
|
||||
@@ -686,7 +685,8 @@ bool vfio_user_send_wait(VFIOUserProxy *proxy, VFIOUserHdr *hdr,
|
||||
|
||||
if (ok) {
|
||||
while (!msg->complete) {
|
||||
if (!qemu_cond_timedwait(&msg->cv, &proxy->lock, wait_time)) {
|
||||
if (!qemu_cond_timedwait(&msg->cv, &proxy->lock,
|
||||
proxy->wait_time)) {
|
||||
VFIOUserMsgQ *list;
|
||||
|
||||
list = msg->pending ? &proxy->pending : &proxy->outgoing;
|
||||
@@ -758,7 +758,8 @@ void vfio_user_wait_reqs(VFIOUserProxy *proxy)
|
||||
msg->type = VFIO_MSG_WAIT;
|
||||
proxy->last_nowait = NULL;
|
||||
while (!msg->complete) {
|
||||
if (!qemu_cond_timedwait(&msg->cv, &proxy->lock, wait_time)) {
|
||||
if (!qemu_cond_timedwait(&msg->cv, &proxy->lock,
|
||||
proxy->wait_time)) {
|
||||
VFIOUserMsgQ *list;
|
||||
|
||||
list = msg->pending ? &proxy->pending : &proxy->outgoing;
|
||||
|
||||
@@ -67,6 +67,7 @@ typedef struct VFIOUserProxy {
|
||||
uint64_t max_bitmap;
|
||||
uint64_t migr_pgsize;
|
||||
int flags;
|
||||
uint32_t wait_time;
|
||||
QemuCond close_cv;
|
||||
AioContext *ctx;
|
||||
QEMUBH *req_bh;
|
||||
|
||||
Reference in New Issue
Block a user