[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 7/8] hw/9pfs: annotate V9fsTransport callbacks as coroutine_fn



On Monday, 20 July 2026 09:55:36 CEST Marc-André Lureau wrote:
> All V9fsTransport callbacks are invoked exclusively from coroutine
> context (the v9fs_* PDU handlers). Annotate the function pointer
> types in V9fsTransport and all implementations (virtio and xen
> backends), as well as intermediate callers in 9p.c (pdu_marshal,
> pdu_unmarshal, v9fs_init_qiov_from_pdu, etc.).
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx>
> ---
>  hw/9pfs/9p.h               | 26 +++++++++++++++-----------
>  hw/9pfs/9p.c               | 31 +++++++++++++++++++------------
>  hw/9pfs/virtio-9p-device.c | 24 +++++++++++++-----------
>  hw/9pfs/xen-9p-backend.c   | 34 +++++++++++++++++-----------------
>  4 files changed, 64 insertions(+), 51 deletions(-)
> 
> diff --git a/hw/9pfs/9p.h b/hw/9pfs/9p.h
> index 1a309664f6e..0e52ffbdf38 100644
> --- a/hw/9pfs/9p.h
> +++ b/hw/9pfs/9p.h
> @@ -472,17 +472,21 @@ void pdu_submit(V9fsPDU *pdu, P9MsgHeader *hdr);
>  void v9fs_reset(V9fsState *s);
> 
> 
>  struct V9fsTransport {
> -    ssize_t     (*pdu_vmarshal)(V9fsPDU *pdu, size_t offset, const char *fmt,
> -                                va_list ap);
> -    ssize_t     (*pdu_vunmarshal)(V9fsPDU *pdu, size_t offset, const char 
> *fmt,
> -                                  va_list ap);
> -    void        (*init_in_iov_from_pdu)(V9fsPDU *pdu, struct iovec **piov,
> -                                        unsigned int *pniov, size_t size);
> -    void        (*init_out_iov_from_pdu)(V9fsPDU *pdu, struct iovec **piov,
> -                                         unsigned int *pniov, size_t size);
> -    void        (*push_and_notify)(V9fsPDU *pdu);
> -    size_t      (*msize_limit)(V9fsState *s);
> -    size_t      (*response_buffer_size)(V9fsPDU *pdu);
> +    ssize_t     coroutine_fn (*pdu_vmarshal)(V9fsPDU *pdu, size_t offset,
> +                                             const char *fmt, va_list ap);
> +    ssize_t     coroutine_fn (*pdu_vunmarshal)(V9fsPDU *pdu, size_t offset,
> +                                               const char *fmt, va_list ap);
> +    void        coroutine_fn (*init_in_iov_from_pdu)(V9fsPDU *pdu,
> +                                                     struct iovec **piov,
> +                                                     unsigned int *pniov,
> +                                                     size_t size);
> +    void        coroutine_fn (*init_out_iov_from_pdu)(V9fsPDU *pdu,
> +                                                      struct iovec **piov,
> +                                                      unsigned int *pniov,
> +                                                      size_t size);
> +    void        coroutine_fn (*push_and_notify)(V9fsPDU *pdu);
> +    size_t      coroutine_fn (*msize_limit)(V9fsState *s);
> +    size_t      coroutine_fn (*response_buffer_size)(V9fsPDU *pdu);
>  };

I wonder whether that could be made more diff/blame-friendly. Especially as
this currently only serves documentation purposes.

They way you are positioning coroutine_fn it usually resolves to an attribute
attached to the function's return type, not to the function itself, even
though clang/gcc handling it flexible. For attaching an attribute to the
function itself the attribute should either be attached before the function
declaration or after the function declaration. In both cases you could then
add it to its own, separate line, avoiding a lot of noise.

/Christian






 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.