[PATCH] virtio_net: Revert "virtio_net: set the default max ring size by find_vqs()"

Michael S. Tsirkin
Mon, 15 Aug 2022 21:39:08 -0000

On Mon, Aug 15, 2022 at 02:28:39PM -0700, Andres Freund
wrote:
> Hi,
>
> On 2022-08-15 17:04:10 -0400, Michael S. Tsirkin wrote:
> > So virtio has a queue_size register. When read, it will give you
> > originally the maximum queue size. Normally we just read it and
> > use it as queue size.
> >
> > However, when queue memory allocation fails, and unconditionally with
a
> > network device with the problematic patch, driver is asking the
> > hypervisor to make the ring smaller by writing a smaller value into
this
> > register.
> >
> > I suspect that what happens is hypervisor still uses the original
value
> > somewhere.
>
> It looks more like the host is never told about the changed size for legacy
> devices...
>
> Indeed, adding a vp_legacy_set_queue_size() & call to it to setup_vq(),
makes
> 5.19 + restricting queue sizes to 1024 boot again.

Interesting, the register is RO in the legacy interface.
And to be frank I can't find where is vp_legacy_set_queue_size
even implemented. It's midnight here too ...

>  I'd bet that it also would
> fix 6.0rc1, but I'm running out of time to test that.
>
> Greetings,
>
> Andres Freund

Yes I figured this out too. And I was able to reproduce on qemu now.

Andres thanks a lot for the help!

I'm posting a new patchset reverting all the handing of resize
restrictions, I think we should rethink it for the next release.

Thanks everyone for the help!

--
MST