Message ID | 20230403183004.347205-5-stefanha@redhat.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | block: remove aio_disable_external() API | expand |
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>
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);
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(-)