Thread (55 messages) 55 messages, 4 authors, 2021-08-10

Re: [PATCH v10 05/17] vhost-vdpa: Fail the vhost_vdpa_set_status() on reset failure

From: Yongji Xie <hidden>
Date: 2021-08-03 09:51:02
Also in: linux-fsdevel, linux-iommu, lkml, netdev

On Tue, Aug 3, 2021 at 4:10 PM Jason Wang [off-list ref] wrote:

在 2021/7/29 下午3:34, Xie Yongji 写道:
quoted
Re-read the device status to ensure it's set to zero during
resetting. Otherwise, fail the vhost_vdpa_set_status() after timeout.

Signed-off-by: Xie Yongji <redacted>
---
  drivers/vhost/vdpa.c | 11 ++++++++++-
  1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
index b07aa161f7ad..dd05c1e1133c 100644
--- a/drivers/vhost/vdpa.c
+++ b/drivers/vhost/vdpa.c
@@ -157,7 +157,7 @@ static long vhost_vdpa_set_status(struct vhost_vdpa *v, u8 __user *statusp)
      struct vdpa_device *vdpa = v->vdpa;
      const struct vdpa_config_ops *ops = vdpa->config;
      u8 status, status_old;
-     int nvqs = v->nvqs;
+     int timeout = 0, nvqs = v->nvqs;
      u16 i;

      if (copy_from_user(&status, statusp, sizeof(status)))
@@ -173,6 +173,15 @@ static long vhost_vdpa_set_status(struct vhost_vdpa *v, u8 __user *statusp)
              return -EINVAL;

      ops->set_status(vdpa, status);
+     if (status == 0) {
+             while (ops->get_status(vdpa)) {
+                     timeout += 20;
+                     if (timeout > VDPA_RESET_TIMEOUT_MS)
+                             return -EIO;
+
+                     msleep(20);
+             }

Spec has introduced the reset a one of the basic facility. And consider
we differ reset here.

This makes me think if it's better to introduce a dedicated vdpa ops for
reset?
Do you mean replace the ops.set_status(vdev, 0) with the ops.reset()?
Then we can remove the timeout processing which is device specific
stuff.

Thanks,
Yongji
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help