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

Philippe Mathieu-Daudé <[email protected]>
Newsgroups org.xenproject.lists.xen-devel,org.nongnu.qemu-devel
Message-ID <[email protected]>
On 20/7/26 16:02, Christian Schoenebeck wrote:
> 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 <[email protected]>
>> ---
>>   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.

I tend to aggree it would be clearer to have these attributes /before/
the function prototype declaration.

> In both cases you could then
> add it to its own, separate line, avoiding a lot of noise.
> 
> /Christian
> 
> 
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.