* [PATCH V1] vdpa_sim: reset must not run
@ 2024-01-17 19:23 Steve Sistare
2024-01-22 4:12 ` Jason Wang
2024-01-22 10:21 ` Stefano Garzarella
0 siblings, 2 replies; 6+ messages in thread
From: Steve Sistare @ 2024-01-17 19:23 UTC (permalink / raw)
To: virtualization, linux-kernel
Cc: Michael S. Tsirkin, Jason Wang, Eugenio Perez Martin, Si-Wei Liu,
Stefano Garzarella, Steve Sistare
vdpasim_do_reset sets running to true, which is wrong, as it allows
vdpasim_kick_vq to post work requests before the device has been
configured. To fix, do not set running until VIRTIO_CONFIG_S_FEATURES_OK
is set.
Fixes: 0c89e2a3a9d0 ("vdpa_sim: Implement suspend vdpa op")
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
Reviewed-by: Eugenio Pérez <eperezma@redhat.com>
---
drivers/vdpa/vdpa_sim/vdpa_sim.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c
index be2925d0d283..6304cb0b4770 100644
--- a/drivers/vdpa/vdpa_sim/vdpa_sim.c
+++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c
@@ -160,7 +160,7 @@ static void vdpasim_do_reset(struct vdpasim *vdpasim, u32 flags)
}
}
- vdpasim->running = true;
+ vdpasim->running = false;
spin_unlock(&vdpasim->iommu_lock);
vdpasim->features = 0;
@@ -483,6 +483,7 @@ static void vdpasim_set_status(struct vdpa_device *vdpa, u8 status)
mutex_lock(&vdpasim->mutex);
vdpasim->status = status;
+ vdpasim->running = (status & VIRTIO_CONFIG_S_FEATURES_OK) != 0;
mutex_unlock(&vdpasim->mutex);
}
--
2.39.3
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH V1] vdpa_sim: reset must not run 2024-01-17 19:23 [PATCH V1] vdpa_sim: reset must not run Steve Sistare @ 2024-01-22 4:12 ` Jason Wang 2024-01-22 10:21 ` Stefano Garzarella 1 sibling, 0 replies; 6+ messages in thread From: Jason Wang @ 2024-01-22 4:12 UTC (permalink / raw) To: Steve Sistare Cc: virtualization, linux-kernel, Michael S. Tsirkin, Eugenio Perez Martin, Si-Wei Liu, Stefano Garzarella On Thu, Jan 18, 2024 at 3:23 AM Steve Sistare <steven.sistare@oracle.com> wrote: > > vdpasim_do_reset sets running to true, which is wrong, as it allows > vdpasim_kick_vq to post work requests before the device has been > configured. To fix, do not set running until VIRTIO_CONFIG_S_FEATURES_OK > is set. > > Fixes: 0c89e2a3a9d0 ("vdpa_sim: Implement suspend vdpa op") > Signed-off-by: Steve Sistare <steven.sistare@oracle.com> > Reviewed-by: Eugenio Pérez <eperezma@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Thanks ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH V1] vdpa_sim: reset must not run 2024-01-17 19:23 [PATCH V1] vdpa_sim: reset must not run Steve Sistare 2024-01-22 4:12 ` Jason Wang @ 2024-01-22 10:21 ` Stefano Garzarella 2024-01-22 10:47 ` Eugenio Perez Martin 1 sibling, 1 reply; 6+ messages in thread From: Stefano Garzarella @ 2024-01-22 10:21 UTC (permalink / raw) To: Steve Sistare Cc: virtualization, linux-kernel, Michael S. Tsirkin, Jason Wang, Eugenio Perez Martin, Si-Wei Liu On Wed, Jan 17, 2024 at 11:23:23AM -0800, Steve Sistare wrote: >vdpasim_do_reset sets running to true, which is wrong, as it allows >vdpasim_kick_vq to post work requests before the device has been >configured. To fix, do not set running until VIRTIO_CONFIG_S_FEATURES_OK >is set. > >Fixes: 0c89e2a3a9d0 ("vdpa_sim: Implement suspend vdpa op") >Signed-off-by: Steve Sistare <steven.sistare@oracle.com> >Reviewed-by: Eugenio Pérez <eperezma@redhat.com> >--- > drivers/vdpa/vdpa_sim/vdpa_sim.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > >diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c >index be2925d0d283..6304cb0b4770 100644 >--- a/drivers/vdpa/vdpa_sim/vdpa_sim.c >+++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c >@@ -160,7 +160,7 @@ static void vdpasim_do_reset(struct vdpasim *vdpasim, u32 flags) > } > } > >- vdpasim->running = true; >+ vdpasim->running = false; > spin_unlock(&vdpasim->iommu_lock); > > vdpasim->features = 0; >@@ -483,6 +483,7 @@ static void vdpasim_set_status(struct vdpa_device *vdpa, u8 status) > > mutex_lock(&vdpasim->mutex); > vdpasim->status = status; >+ vdpasim->running = (status & VIRTIO_CONFIG_S_FEATURES_OK) != 0; > mutex_unlock(&vdpasim->mutex); Should we do something similar also in vdpasim_resume() ? I mean something like this: diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c index be2925d0d283..55e4633d5442 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c @@ -520,7 +520,7 @@ static int vdpasim_resume(struct vdpa_device *vdpa) int i; mutex_lock(&vdpasim->mutex); - vdpasim->running = true; + vdpasim->running = (vdpasim->status & VIRTIO_CONFIG_S_FEATURES_OK) != 0; if (vdpasim->pending_kick) { /* Process pending descriptors */ Thanks, Stefano ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH V1] vdpa_sim: reset must not run 2024-01-22 10:21 ` Stefano Garzarella @ 2024-01-22 10:47 ` Eugenio Perez Martin 2024-01-22 10:59 ` Stefano Garzarella 0 siblings, 1 reply; 6+ messages in thread From: Eugenio Perez Martin @ 2024-01-22 10:47 UTC (permalink / raw) To: Stefano Garzarella Cc: Steve Sistare, virtualization, linux-kernel, Michael S. Tsirkin, Jason Wang, Si-Wei Liu On Mon, Jan 22, 2024 at 11:22 AM Stefano Garzarella <sgarzare@redhat.com> wrote: > > On Wed, Jan 17, 2024 at 11:23:23AM -0800, Steve Sistare wrote: > >vdpasim_do_reset sets running to true, which is wrong, as it allows > >vdpasim_kick_vq to post work requests before the device has been > >configured. To fix, do not set running until VIRTIO_CONFIG_S_FEATURES_OK > >is set. > > > >Fixes: 0c89e2a3a9d0 ("vdpa_sim: Implement suspend vdpa op") > >Signed-off-by: Steve Sistare <steven.sistare@oracle.com> > >Reviewed-by: Eugenio Pérez <eperezma@redhat.com> > >--- > > drivers/vdpa/vdpa_sim/vdpa_sim.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > >diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c > >index be2925d0d283..6304cb0b4770 100644 > >--- a/drivers/vdpa/vdpa_sim/vdpa_sim.c > >+++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c > >@@ -160,7 +160,7 @@ static void vdpasim_do_reset(struct vdpasim *vdpasim, u32 flags) > > } > > } > > > >- vdpasim->running = true; > >+ vdpasim->running = false; > > spin_unlock(&vdpasim->iommu_lock); > > > > vdpasim->features = 0; > >@@ -483,6 +483,7 @@ static void vdpasim_set_status(struct vdpa_device *vdpa, u8 status) > > > > mutex_lock(&vdpasim->mutex); > > vdpasim->status = status; > >+ vdpasim->running = (status & VIRTIO_CONFIG_S_FEATURES_OK) != 0; > > mutex_unlock(&vdpasim->mutex); > > Should we do something similar also in vdpasim_resume() ? > > I mean something like this: > > diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c > index be2925d0d283..55e4633d5442 100644 > --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c > +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c > @@ -520,7 +520,7 @@ static int vdpasim_resume(struct vdpa_device *vdpa) > int i; > > mutex_lock(&vdpasim->mutex); > - vdpasim->running = true; > + vdpasim->running = (vdpasim->status & VIRTIO_CONFIG_S_FEATURES_OK) != 0; > > if (vdpasim->pending_kick) { > /* Process pending descriptors */ > > Thanks, > Stefano > The suspend and resume operation should not be called before DRIVER_OK, so maybe we should add that protection at drivers/vhost/vdpa.c actually? Thanks! ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Re: [PATCH V1] vdpa_sim: reset must not run 2024-01-22 10:47 ` Eugenio Perez Martin @ 2024-01-22 10:59 ` Stefano Garzarella 2024-02-09 22:34 ` Steven Sistare 0 siblings, 1 reply; 6+ messages in thread From: Stefano Garzarella @ 2024-01-22 10:59 UTC (permalink / raw) To: Eugenio Perez Martin Cc: Steve Sistare, virtualization, linux-kernel, Michael S. Tsirkin, Jason Wang, Si-Wei Liu On Mon, Jan 22, 2024 at 11:47:22AM +0100, Eugenio Perez Martin wrote: >On Mon, Jan 22, 2024 at 11:22 AM Stefano Garzarella <sgarzare@redhat.com> wrote: >> >> On Wed, Jan 17, 2024 at 11:23:23AM -0800, Steve Sistare wrote: >> >vdpasim_do_reset sets running to true, which is wrong, as it allows >> >vdpasim_kick_vq to post work requests before the device has been >> >configured. To fix, do not set running until VIRTIO_CONFIG_S_FEATURES_OK >> >is set. >> > >> >Fixes: 0c89e2a3a9d0 ("vdpa_sim: Implement suspend vdpa op") >> >Signed-off-by: Steve Sistare <steven.sistare@oracle.com> >> >Reviewed-by: Eugenio Pérez <eperezma@redhat.com> >> >--- >> > drivers/vdpa/vdpa_sim/vdpa_sim.c | 3 ++- >> > 1 file changed, 2 insertions(+), 1 deletion(-) >> > >> >diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c >> >index be2925d0d283..6304cb0b4770 100644 >> >--- a/drivers/vdpa/vdpa_sim/vdpa_sim.c >> >+++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c >> >@@ -160,7 +160,7 @@ static void vdpasim_do_reset(struct vdpasim *vdpasim, u32 flags) >> > } >> > } >> > >> >- vdpasim->running = true; >> >+ vdpasim->running = false; >> > spin_unlock(&vdpasim->iommu_lock); >> > >> > vdpasim->features = 0; >> >@@ -483,6 +483,7 @@ static void vdpasim_set_status(struct vdpa_device *vdpa, u8 status) >> > >> > mutex_lock(&vdpasim->mutex); >> > vdpasim->status = status; >> >+ vdpasim->running = (status & VIRTIO_CONFIG_S_FEATURES_OK) != 0; >> > mutex_unlock(&vdpasim->mutex); >> >> Should we do something similar also in vdpasim_resume() ? >> >> I mean something like this: >> >> diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c >> index be2925d0d283..55e4633d5442 100644 >> --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c >> +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c >> @@ -520,7 +520,7 @@ static int vdpasim_resume(struct vdpa_device *vdpa) >> int i; >> >> mutex_lock(&vdpasim->mutex); >> - vdpasim->running = true; >> + vdpasim->running = (vdpasim->status & VIRTIO_CONFIG_S_FEATURES_OK) != 0; >> >> if (vdpasim->pending_kick) { >> /* Process pending descriptors */ >> >> Thanks, >> Stefano >> > >The suspend and resume operation should not be called before >DRIVER_OK, so maybe we should add that protection at >drivers/vhost/vdpa.c actually? Yeah, I think so! Anyway, IMHO we should at least return an error in vdpa_sim if vdpasim_suspend/resume are called before DRIVER_OK (in another patch of course). Stefano ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH V1] vdpa_sim: reset must not run 2024-01-22 10:59 ` Stefano Garzarella @ 2024-02-09 22:34 ` Steven Sistare 0 siblings, 0 replies; 6+ messages in thread From: Steven Sistare @ 2024-02-09 22:34 UTC (permalink / raw) To: Stefano Garzarella, Eugenio Perez Martin Cc: virtualization, linux-kernel, Michael S. Tsirkin, Jason Wang, Si-Wei Liu On 1/22/2024 5:59 AM, Stefano Garzarella wrote: > On Mon, Jan 22, 2024 at 11:47:22AM +0100, Eugenio Perez Martin wrote: >> On Mon, Jan 22, 2024 at 11:22 AM Stefano Garzarella <sgarzare@redhat.com> wrote: >>> >>> On Wed, Jan 17, 2024 at 11:23:23AM -0800, Steve Sistare wrote: >>> >vdpasim_do_reset sets running to true, which is wrong, as it allows >>> >vdpasim_kick_vq to post work requests before the device has been >>> >configured. To fix, do not set running until VIRTIO_CONFIG_S_FEATURES_OK >>> >is set. >>> > >>> >Fixes: 0c89e2a3a9d0 ("vdpa_sim: Implement suspend vdpa op") >>> >Signed-off-by: Steve Sistare <steven.sistare@oracle.com> >>> >Reviewed-by: Eugenio Pérez <eperezma@redhat.com> >>> >--- >>> > drivers/vdpa/vdpa_sim/vdpa_sim.c | 3 ++- >>> > 1 file changed, 2 insertions(+), 1 deletion(-) >>> > >>> >diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c >>> >index be2925d0d283..6304cb0b4770 100644 >>> >--- a/drivers/vdpa/vdpa_sim/vdpa_sim.c >>> >+++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c >>> >@@ -160,7 +160,7 @@ static void vdpasim_do_reset(struct vdpasim *vdpasim, u32 flags) >>> > } >>> > } >>> > >>> >- vdpasim->running = true; >>> >+ vdpasim->running = false; >>> > spin_unlock(&vdpasim->iommu_lock); >>> > >>> > vdpasim->features = 0; >>> >@@ -483,6 +483,7 @@ static void vdpasim_set_status(struct vdpa_device *vdpa, u8 status) >>> > >>> > mutex_lock(&vdpasim->mutex); >>> > vdpasim->status = status; >>> >+ vdpasim->running = (status & VIRTIO_CONFIG_S_FEATURES_OK) != 0; >>> > mutex_unlock(&vdpasim->mutex); >>> >>> Should we do something similar also in vdpasim_resume() ? >>> >>> I mean something like this: >>> >>> diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c >>> index be2925d0d283..55e4633d5442 100644 >>> --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c >>> +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c >>> @@ -520,7 +520,7 @@ static int vdpasim_resume(struct vdpa_device *vdpa) >>> int i; >>> >>> mutex_lock(&vdpasim->mutex); >>> - vdpasim->running = true; >>> + vdpasim->running = (vdpasim->status & VIRTIO_CONFIG_S_FEATURES_OK) != 0; >>> >>> if (vdpasim->pending_kick) { >>> /* Process pending descriptors */ >>> >>> Thanks, >>> Stefano >>> >> >> The suspend and resume operation should not be called before >> DRIVER_OK, so maybe we should add that protection at >> drivers/vhost/vdpa.c actually? > > Yeah, I think so! > > Anyway, IMHO we should at least return an error in vdpa_sim if vdpasim_suspend/resume are called before DRIVER_OK (in another patch of course). I submitted "vdpa: suspend and resume require DRIVER_OK" to check this in vdpa.c so there is no need to check it in the leaf drivers. I also submitted V2 of this patch, "vdpa_sim: reset must not run". It checks for DRIVER_OK, instead of FEATURES_OK. - Steve ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-02-09 22:34 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-01-17 19:23 [PATCH V1] vdpa_sim: reset must not run Steve Sistare 2024-01-22 4:12 ` Jason Wang 2024-01-22 10:21 ` Stefano Garzarella 2024-01-22 10:47 ` Eugenio Perez Martin 2024-01-22 10:59 ` Stefano Garzarella 2024-02-09 22:34 ` Steven Sistare
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®