2023-06-09 13:29:41

by Xianting Tian

[permalink] [raw]
Subject: [PATCH 2/3] virtio_console: fixup potential cpu stall when free unused bufs

Cpu stall issue may happen if device is configured with multi queues
and large queue depth, so fix it.

Signed-off-by: Xianting Tian <[email protected]>
---
drivers/char/virtio_console.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index b65c809a4e97..5ec4cf4ea919 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -1935,6 +1935,7 @@ static void remove_vqs(struct ports_device *portdev)
flush_bufs(vq, true);
while ((buf = virtqueue_detach_unused_buf(vq)))
free_buf(buf, true);
+ cond_resched();
}
portdev->vdev->config->del_vqs(portdev->vdev);
kfree(portdev->in_vqs);
--
2.17.1



2023-06-10 03:25:26

by Xianting Tian

[permalink] [raw]
Subject: Re: [PATCH 2/3] virtio_console: fixup potential cpu stall when free unused bufs


在 2023/6/10 上午12:05, Michael S. Tsirkin 写道:
> On Fri, Jun 09, 2023 at 09:18:16PM +0800, Xianting Tian wrote:
>> Cpu stall issue may happen if device is configured with multi queues
>> and large queue depth, so fix it.
> "may happen" is ambigous.
>
> So is this: "for virtio-net we were getting
> stall on CPU was observed message, this driver is similar
> so theoretically the same logic applies"

It is this one

 “this driver is similar so theoretically the same logic applies”

>
> or is this
>
> "the following error occured: ....."
>
> ?
>
>
>> Signed-off-by: Xianting Tian <[email protected]>
>> ---
>> drivers/char/virtio_console.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
>> index b65c809a4e97..5ec4cf4ea919 100644
>> --- a/drivers/char/virtio_console.c
>> +++ b/drivers/char/virtio_console.c
>> @@ -1935,6 +1935,7 @@ static void remove_vqs(struct ports_device *portdev)
>> flush_bufs(vq, true);
>> while ((buf = virtqueue_detach_unused_buf(vq)))
>> free_buf(buf, true);
>> + cond_resched();
>> }
>> portdev->vdev->config->del_vqs(portdev->vdev);
>> kfree(portdev->in_vqs);
>> --
>> 2.17.1