diff mbox series

[v1,22/24] vfio-user: add 'x-msg-timeout' option that specifies msg wait times

Message ID c7fc9005cc61d7ca53156ee5ece4c17980a78b15.1667542066.git.john.g.johnson@oracle.com (mailing list archive)
State New, archived
Headers show
Series vfio-user client | expand

Commit Message

John Johnson Nov. 8, 2022, 11:13 p.m. UTC
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(-)

Comments

John Levon Dec. 9, 2022, 6:14 p.m. UTC | #1
LGTM

Reviewed-by: John Levon <john.levon@nutanix.com>

regards
john
Cédric Le Goater Dec. 15, 2022, 12:56 p.m. UTC | #2
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;
John Johnson Dec. 16, 2022, 4:22 a.m. UTC | #3
> On Dec 15, 2022, at 4:56 AM, Cédric Le Goater <clg@redhat.com> wrote:
> 
> On 11/9/22 00:13, John Johnson wrote:
>> 
>> +    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 ?
> 

	It was originally used to empirically discover a value that wouldn't
timeout with the device servers we’re using.  I kept in case new devices with
longer response times are encountered.

							JJ
diff mbox series

Patch

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),
     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;