On 11/9/22 00:13, John Johnson wrote:
> 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.c | 4 ++++
> hw/vfio/pci.h | 1 +
> hw/vfio/user.c | 7 +++++--
> hw/vfio/user.h | 1 +
> 4 files changed, 11 insertions(+), 2 deletions(-)>
> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> index 005fcf8..3ae3a13 100644
> --- a/hw/vfio/pci.c
> +++ b/hw/vfio/pci.c
> @@ -3729,6 +3729,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(proxy, &err);
> if (err != NULL) {
> @@ -3848,6 +3851,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),
I see that patch 9 introduced :
+static int wait_time = 5000; /* wait up to 5 sec for busy servers */
May be use a define instead and assign "x-msg-timeout" to this default
value.
how do you plan to use the "x-msg-timeout" property ?
Thanks,
C.
> DEFINE_PROP_END_OF_LIST(),
> };
>
> diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
> index c4b8e5c..48b19ee 100644
> --- a/hw/vfio/pci.h
> +++ b/hw/vfio/pci.h
> @@ -199,6 +199,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.c b/hw/vfio/user.c
> index ddf9e13..a9e6cf5 100644
> --- a/hw/vfio/user.c
> +++ b/hw/vfio/user.c
> @@ -717,7 +717,8 @@ 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)) {
> VFIOUserMsgQ *list;
>
> list = msg->pending ? &proxy->pending : &proxy->outgoing;
> @@ -759,7 +760,8 @@ 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)) {
> VFIOUserMsgQ *list;
>
> list = msg->pending ? &proxy->pending : &proxy->outgoing;
> @@ -881,6 +883,7 @@ VFIOProxy *vfio_user_connect_dev(SocketAddress *addr, Error **errp)
>
> 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);
> diff --git a/hw/vfio/user.h b/hw/vfio/user.h
> index d88ffe5..f711861 100644
> --- a/hw/vfio/user.h
> +++ b/hw/vfio/user.h
> @@ -62,6 +62,7 @@ typedef struct VFIOProxy {
> uint64_t max_bitmap;
> uint64_t migr_pgsize;
> int flags;
> + uint32_t wait_time;
> QemuCond close_cv;
> AioContext *ctx;
> QEMUBH *req_bh;