On 4/3/23 20:29, Stefan Hajnoczi wrote:
> The VuServer object has a refcount field and ref/unref APIs. The name is
> confusing because it's actually an in-flight request counter instead of
> a refcount.
>
> Normally a refcount destroys the object upon reaching zero. The VuServer
> counter is used to wake up the vhost-user coroutine when there are no
> more requests.
>
> Avoid confusing by renaming refcount and ref/unref to in_flight and
> inc/dec.
>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
> include/qemu/vhost-user-server.h | 6 +++---
> block/export/vhost-user-blk-server.c | 11 +++++++----
> util/vhost-user-server.c | 14 +++++++-------
> 3 files changed, 17 insertions(+), 14 deletions(-)
>
> diff --git a/include/qemu/vhost-user-server.h b/include/qemu/vhost-user-server.h
> index 25c72433ca..bc0ac9ddb6 100644
> --- a/include/qemu/vhost-user-server.h
> +++ b/include/qemu/vhost-user-server.h
> @@ -41,7 +41,7 @@ typedef struct {
> const VuDevIface *vu_iface;
>
> /* Protected by ctx lock */
> - unsigned int refcount;
> + unsigned int in_flight;
> bool wait_idle;
> VuDev vu_dev;
> QIOChannel *ioc; /* The I/O channel with the client */
> @@ -60,8 +60,8 @@ bool vhost_user_server_start(VuServer *server,
>
> void vhost_user_server_stop(VuServer *server);
>
> -void vhost_user_server_ref(VuServer *server);
> -void vhost_user_server_unref(VuServer *server);
> +void vhost_user_server_inc_in_flight(VuServer *server);
> +void vhost_user_server_dec_in_flight(VuServer *server);
>
> void vhost_user_server_attach_aio_context(VuServer *server, AioContext *ctx);
> void vhost_user_server_detach_aio_context(VuServer *server);
> diff --git a/block/export/vhost-user-blk-server.c b/block/export/vhost-user-blk-server.c
> index 3409d9e02e..e93f2ed6b4 100644
> --- a/block/export/vhost-user-blk-server.c
> +++ b/block/export/vhost-user-blk-server.c
> @@ -49,7 +49,10 @@ static void vu_blk_req_complete(VuBlkReq *req, size_t in_len)
> free(req);
> }
>
> -/* Called with server refcount increased, must decrease before returning */
> +/*
> + * Called with server in_flight counter increased, must decrease before
> + * returning.
> + */
> static void coroutine_fn vu_blk_virtio_process_req(void *opaque)
> {
> VuBlkReq *req = opaque;
> @@ -67,12 +70,12 @@ static void coroutine_fn vu_blk_virtio_process_req(void *opaque)
> in_num, out_num);
> if (in_len < 0) {
> free(req);
> - vhost_user_server_unref(server);
> + vhost_user_server_dec_in_flight(server);
> return;
> }
>
> vu_blk_req_complete(req, in_len);
> - vhost_user_server_unref(server);
> + vhost_user_server_dec_in_flight(server);
> }
>
> static void vu_blk_process_vq(VuDev *vu_dev, int idx)
> @@ -94,7 +97,7 @@ static void vu_blk_process_vq(VuDev *vu_dev, int idx)
> Coroutine *co =
> qemu_coroutine_create(vu_blk_virtio_process_req, req);
>
> - vhost_user_server_ref(server);
> + vhost_user_server_inc_in_flight(server);
> qemu_coroutine_enter(co);
> }
> }
> diff --git a/util/vhost-user-server.c b/util/vhost-user-server.c
> index 5b6216069c..1622f8cfb3 100644
> --- a/util/vhost-user-server.c
> +++ b/util/vhost-user-server.c
> @@ -75,16 +75,16 @@ static void panic_cb(VuDev *vu_dev, const char *buf)
> error_report("vu_panic: %s", buf);
> }
>
> -void vhost_user_server_ref(VuServer *server)
> +void vhost_user_server_inc_in_flight(VuServer *server)
> {
> assert(!server->wait_idle);
> - server->refcount++;
> + server->in_flight++;
> }
>
> -void vhost_user_server_unref(VuServer *server)
> +void vhost_user_server_dec_in_flight(VuServer *server)
> {
> - server->refcount--;
> - if (server->wait_idle && !server->refcount) {
> + server->in_flight--;
> + if (server->wait_idle && !server->in_flight) {
> aio_co_wake(server->co_trip);
> }
> }
> @@ -192,13 +192,13 @@ static coroutine_fn void vu_client_trip(void *opaque)
> /* Keep running */
> }
>
> - if (server->refcount) {
> + if (server->in_flight) {
> /* Wait for requests to complete before we can unmap the memory */
> server->wait_idle = true;
> qemu_coroutine_yield();
> server->wait_idle = false;
> }
> - assert(server->refcount == 0);
> + assert(server->in_flight == 0);
>
> vu_deinit(vu_dev);
>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>