mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 15:42:46 +00:00
vdpasim: allow to enable a vq repeatedly
commit2424369738
upstream. Code must be resilient to enable a queue many times. At the moment the queue is resetting so it's definitely not the expected behavior. v2: set vq->ready = 0 at disable. Fixes:2c53d0f64c
("vdpasim: vDPA device simulator") Cc: stable@vger.kernel.org Signed-off-by: Eugenio Pérez <eperezma@redhat.com> Message-Id: <20220519145919.772896-1-eperezma@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ec029087df
commit
19e5aac38a
1 changed files with 4 additions and 1 deletions
|
@ -473,11 +473,14 @@ static void vdpasim_set_vq_ready(struct vdpa_device *vdpa, u16 idx, bool ready)
|
|||
{
|
||||
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
|
||||
struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
|
||||
bool old_ready;
|
||||
|
||||
spin_lock(&vdpasim->lock);
|
||||
old_ready = vq->ready;
|
||||
vq->ready = ready;
|
||||
if (vq->ready)
|
||||
if (vq->ready && !old_ready) {
|
||||
vdpasim_queue_ready(vdpasim, idx);
|
||||
}
|
||||
spin_unlock(&vdpasim->lock);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue