28c9b13b | 25-Oct-2024 |
Mark Johnston <markj@FreeBSD.org> |
virtio_p9fs: Simplify vt9p_req_wait() a bit
Remove an always-false check for whether the request has already completed before sleeping. Even if the request is complete, the response tag is updated
virtio_p9fs: Simplify vt9p_req_wait() a bit
Remove an always-false check for whether the request has already completed before sleeping. Even if the request is complete, the response tag is updated while holding the channel lock, which is also held here.
No functional change intended.
Sponsored by: Klara, Inc.
show more ...
|
1f6f247b | 25-Oct-2024 |
Mark Johnston <markj@FreeBSD.org> |
virtio_p9fs: Check for completions after enabling interrupts
Otherwise we can end up with a lost interrupt, causing lost request completion wakeups and hangs in the filesystem layer.
Continue proce
virtio_p9fs: Check for completions after enabling interrupts
Otherwise we can end up with a lost interrupt, causing lost request completion wakeups and hangs in the filesystem layer.
Continue processing until we enable interrupts and then observe an empty queue, like other virtio drivers do.
Sponsored by: Klara, Inc.
show more ...
|
fff51811 | 25-Oct-2024 |
Mark Johnston <markj@FreeBSD.org> |
virtio_p9fs: Fix handling of a full request queue
If, when submitting a request, the virtqueue is full, we sleep until an interrupt has fired, then restart the request. However, while sleeping the
virtio_p9fs: Fix handling of a full request queue
If, when submitting a request, the virtqueue is full, we sleep until an interrupt has fired, then restart the request. However, while sleeping the channel lock is dropped, and in the meantime another thread may have reset the per-channel SG list, so upon retrying we'd (re)submit whatever happened to be left over in the previous request.
Fix the problem by rebuilding the SG list after sleeping.
Sponsored by: Klara, Inc.
show more ...
|