Stefan Hajnoczi <[email protected]> writes:

> On Mon, May 11, 2026 at 10:04:04PM +0800, Zhang Chen wrote:
>> Currently, IOThreads do not maintain a record of which devices are
>> associated with them. This makes it difficult to monitor the
>> workload distribution of IOThreads, especially in complex
>> hotplug scenarios involving multiple virtio-blk or virtio-scsi devices.
>> 
>> This patch introduces a reference counting and tracking mechanism
>> within the IOThread object:
>> 
>> - iothread_ref(): Prepends the device's QOM path to a list.
>> - iothread_unref(): Searches for the device path using a custom
>>   string comparison (g_strcmp0), releases the associated memory
>>   upon a successful match.
>> - holders: A GList storing the QOM paths of attached devices
>>   for runtime introspection.
>> 
>> A later commit will add QMP commands to let management applications
>> query the attachment status of IOThreads.
>> 
>> Signed-off-by: Zhang Chen <[email protected]>
>> ---
>>  include/system/iothread.h |  5 +++
>>  iothread.c                | 67 +++++++++++++++++++++++++++++++++++++++
>>  qapi/misc.json            | 48 ++++++++++++++++++++++++++++
>>  3 files changed, 120 insertions(+)
>> 
>> diff --git a/include/system/iothread.h b/include/system/iothread.h
>> index a1ef7696cb..2871b06edc 100644
>> --- a/include/system/iothread.h
>> +++ b/include/system/iothread.h
>> @@ -50,6 +50,11 @@ struct IOThread {
>>      bool stopping;              /* has iothread_stop() been called? */
>>      bool running;               /* should iothread_run() continue? */
>>      int thread_id;
>> +    /*
>> +     * The list elements are of type IoThreadHolder, which can
>> +     * represent either a QOM path or a block node name.
>> +     */
>> +    GList *holders;
>>  
>>      /* AioContext poll parameters */
>>      int64_t poll_max_ns;
>> diff --git a/iothread.c b/iothread.c
>> index 3558535b40..b805e4f97d 100644
>> --- a/iothread.c
>> +++ b/iothread.c
>> @@ -25,6 +25,66 @@
>>  #include "qemu/rcu.h"
>>  #include "qemu/main-loop.h"
>>  
>> +/*
>> + * Add the @holder path to the iothread's tracking list.
>> + * The @holder is a QOM path if it starts with '/', else a block node name.
>> + */
>
> It would be cleaner to use IoThreadHolder in the iothread_ref() and
> iothread_unref() APIs instead of a string:
>
>   static void iothread_ref(IOThread *iothread, const IoThreadHolder *holder);
>   static void iothread_unref(IOThread *iothread, const IoThreadHolder 
> *holder);
>
> That way the caller already uses IO_THREAD_HOLDER_KIND_QOM_OBJECT or
> IO_THREAD_HOLDER_KIND_BLOCK_NODE to clearly distinguish QOM paths from
> block node names. No string parsing is necessary.

Exactly.

[...]


Reply via email to