[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CACGkMEv4YxuqrSx_HW2uWgXXSMOFCzTJCCD_EVhMwegsL8SoCg@mail.gmail.com>
Date: Thu, 22 Dec 2022 16:43:09 +0800
From: Jason Wang <jasowang@...hat.com>
To: Alvaro Karsz <alvaro.karsz@...id-run.com>
Cc: mst@...hat.com, davem@...emloft.net, edumazet@...gle.com,
kuba@...nel.org, pabeni@...hat.com,
virtualization@...ts.linux-foundation.org, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org, maxime.coquelin@...hat.com,
eperezma@...hat.com
Subject: Re: [RFC PATCH 4/4] virtio-net: sleep instead of busy waiting for cvq command
Hi Alvaro:
On Thu, Dec 22, 2022 at 2:44 PM Alvaro Karsz <alvaro.karsz@...id-run.com> wrote:
>
> Hi Jason,
>
> Adding timeout to the cvq is a great idea IMO.
>
> > - /* Spin for a response, the kick causes an ioport write, trapping
> > - * into the hypervisor, so the request should be handled immediately.
> > - */
> > - while (!virtqueue_get_buf(vi->cvq, &tmp) &&
> > - !virtqueue_is_broken(vi->cvq))
> > - cpu_relax();
> > + virtqueue_wait_for_used(vi->cvq, &tmp);
>
> Do you think that we should continue like nothing happened in case of a timeout?
We could, but we should not depend on a device to do this since it's
not reliable. More below.
> Shouldn't we reset the device?
We can't depend on device, there's probably another loop in reset():
E.g in vp_reset() we had:
while (vp_modern_get_status(mdev))
msleep(1);
> What happens if a device completes the control command after timeout?
Maybe we could have a BAD_RING() here in this case (and more check in
vq->broken in this case).
Thanks
>
> Thanks
>
> Alvaro
>
Powered by blists - more mailing lists