qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: Konstantin Kostiuk <kkostiuk@redhat.com>,
	Michael Roth <michael.roth@amd.com>
Cc: qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>,
	qemu-arm@nongnu.org, qemu-ppc@nongnu.org, qemu-block@nongnu.org,
	qemu-s390x@nongnu.org
Subject: Re: [RFC PATCH v2 21/22] qapi: Inline and remove QERR_UNSUPPORTED definition
Date: Wed, 12 Jun 2024 14:23:09 +0200	[thread overview]
Message-ID: <18739a67-84bb-4fd3-adb6-0db0f0eb7af1@linaro.org> (raw)
In-Reply-To: <87mswx5n63.fsf@pond.sub.org>

Michael, Konstantin, QERR_UNSUPPORTED is only used by QGA.

Do you mind giving our maintainer's position on Markus
analysis so we can know how to proceed with this definition?

Regards,

Phil.

On 5/10/23 13:22, Markus Armbruster wrote:
> Philippe Mathieu-Daudé <philmd@linaro.org> writes:
> 
>> Address the comment added in commit 4629ed1e98
>> ("qerror: Finally unused, clean up"), from 2015:
>>
>>    /*
>>     * These macros will go away, please don't use
>>     * in new code, and do not add new ones!
>>     */
>>
>> Mechanical transformation using:
>>
>>    $ sed -i -e 's/QERR_UNSUPPORTED/"this feature or command is not currently supported"/' \
>>      $(git grep -wl QERR_UNSUPPORTED)
>>
>> then manually removing the definition in include/qapi/qmp/qerror.h.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>> RFC: Not sure what is the best way to change the comment
>>       in qga/qapi-schema.json...
>> ---
>>   qga/qapi-schema.json      |  5 +++--
>>   include/qapi/qmp/qerror.h |  3 ---
>>   qga/commands-bsd.c        |  8 +++----
>>   qga/commands-posix.c      | 46 +++++++++++++++++++--------------------
>>   qga/commands-win32.c      | 22 +++++++++----------
>>   5 files changed, 41 insertions(+), 43 deletions(-)
>>
>> diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
>> index b720dd4379..51683f4dc2 100644
>> --- a/qga/qapi-schema.json
>> +++ b/qga/qapi-schema.json
>> @@ -6,8 +6,9 @@
>     ##
>     # = General note concerning the use of guest agent interfaces
>>   #
>>   # "unsupported" is a higher-level error than the errors that
>>   # individual commands might document.  The caller should always be
>> -# prepared to receive QERR_UNSUPPORTED, even if the given command
>> -# doesn't specify it, or doesn't document any failure mode at all.
>> +# prepared to receive the "this feature or command is not currently supported"
>> +# message, even if the given command doesn't specify it, or doesn't document
>> +# any failure mode at all.
>>   ##
>>   
>>   ##
> 
> The comment is problematic before the patch.  It's a doc comment,
> i.e. it goes into the "QEMU Guest Agent Protocol Reference" manual,
> where QERR_UNSUPPORTED is meaningless.  Back when the comment was added
> (commit 9481ecd737b "qga schema: document generic QERR_UNSUPPORTED"), it
> was still internal documentation, where QERR_UNSUPPORTED made sense.  It
> became external documentation four years later (commit 56e8bdd46a8
> "build-sys: add qapi doc generation targets")
> 
> I'm not sure how useful the comment is.
> 
> I guess we could instead simply point out that clients should always be
> prepared for errors, even when the command doesn't document any, simply
> because commands need not exist in all versions or builds of qemu-ga.
> 
>> diff --git a/include/qapi/qmp/qerror.h b/include/qapi/qmp/qerror.h
>> index 840831cc6a..7606f4525d 100644
>> --- a/include/qapi/qmp/qerror.h
>> +++ b/include/qapi/qmp/qerror.h
>> @@ -17,7 +17,4 @@
>>    * add new ones!
>>    */
>>   
>> -#define QERR_UNSUPPORTED \
>> -    "this feature or command is not currently supported"
>> -
>>   #endif /* QERROR_H */
>> diff --git a/qga/commands-bsd.c b/qga/commands-bsd.c
>> index 17bddda1cf..11536f148f 100644
>> --- a/qga/commands-bsd.c
>> +++ b/qga/commands-bsd.c
>> @@ -152,25 +152,25 @@ int qmp_guest_fsfreeze_do_thaw(Error **errp)
>>   
>>   GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   GuestDiskInfoList *qmp_guest_get_disks(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   GuestDiskStatsInfoList *qmp_guest_get_diskstats(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
> 
> These are all commands that are not supported by this build of qemu-ga.
> We could use the opportunity to improve the error message: scratch
> "feature or ".  Or maybe change the message to "this command is not
> supported in this version of qemu-ga".
> 
> More of the same below, marked [*].
> 
> Taking a step back...  Do we really need to make this a failure of its
> own?  Why not fail exactly as if the command didn't exist?  Why would a
> client ever care for the difference between "command doesn't exist in
> this build of qemu-ga (but it does in other builds of this version of
> qemu-ga)" and "command doesn't exist in this build of qemu-ga (and it
> won't in any build of this version of qemu-ga)"?
> 
> If clients don't care, we could instead unregister these commands,
> i.e. undo qmp_register_command().  The command will then fail exactly
> like any other unknown command.  We still need to provide the functions
> to make the linker happy (unless we play with weak symbols), but they
> can simply abort().
> 
> Michael and/or Konstantin, do you have comments as maintainers?  A
> preference even?
> 
> Hmm, there's yet another mechanism to disable commands:
> qmp_disable_command() & friends.  Looks like its purpose is letting
> guest system administrators disable commands, and also to disable a
> bunch of commands in "frozen state", whatever that is.  Alright, I
> didn't see that, lalala.
> 
>>   #endif /* CONFIG_FSFREEZE */
>> diff --git a/qga/commands-posix.c b/qga/commands-posix.c
>> index 6169bbf7a0..f510add366 100644
>> --- a/qga/commands-posix.c
>> +++ b/qga/commands-posix.c
>> @@ -165,7 +165,7 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
>>       }
>>   
>>       if (!hwclock_available) {
>> -        error_setg(errp, QERR_UNSUPPORTED);
>> +        error_setg(errp, "this feature or command is not currently supported");
>>           return;
>>       }
>>   
> 
> !hwclock_available means /sbin/hwclock grants execute permission for the
> process's real UID and GID.  I'm not sure why we bother to check that.
> Why not let execl() fail, and report that error?  Oh, we don't:
> 
>             /* Use '/sbin/hwclock -w' to set RTC from the system time,
>              * or '/sbin/hwclock -s' to set the system time from RTC. */
>             execl(hwclock_path, "hwclock", has_time ? "-w" : "-s", NULL);
>             _exit(EXIT_FAILURE);
> 
> This is wrong.  We should error_setg_errno(errp, errno, ...); return
> instead.  Not your patch's problem.
> 
> Until we do that: [*]
> 
>> @@ -1540,7 +1540,7 @@ GuestDiskInfoList *qmp_guest_get_disks(Error **errp)
>>   
>>   GuestDiskInfoList *qmp_guest_get_disks(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
> 
> Command not supported by this build of qemu-qa: [*].
> 
>>   
>> @@ -2235,7 +2235,7 @@ void qmp_guest_set_user_password(const char *username,
>>                                    bool crypted,
>>                                    Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>   }
>>   #endif /* __linux__ || __FreeBSD__ */
>>   
>> @@ -2751,47 +2751,47 @@ GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp)
>>   
>>   void qmp_guest_suspend_disk(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>   }
>>   
>>   void qmp_guest_suspend_ram(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>   }
>>   
>>   void qmp_guest_suspend_hybrid(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>   }
>>   
>>   GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return -1;
>>   }
>>   
>>   GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   GuestMemoryBlockResponseList *
>>   qmp_guest_set_memory_blocks(GuestMemoryBlockList *mem_blks, Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   GuestMemoryBlockInfo *qmp_guest_get_memory_block_info(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>> @@ -3056,7 +3056,7 @@ error:
>>   
>>   GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>> @@ -3066,20 +3066,20 @@ GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
>>   
>>   GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>   
>>       return 0;
>>   }
>>   
>>   int64_t qmp_guest_fsfreeze_freeze(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>   
>>       return 0;
>>   }
>> @@ -3088,33 +3088,33 @@ int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints,
>>                                          strList *mountpoints,
>>                                          Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>   
>>       return 0;
>>   }
>>   
>>   int64_t qmp_guest_fsfreeze_thaw(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>   
>>       return 0;
>>   }
>>   
>>   GuestDiskInfoList *qmp_guest_get_disks(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   GuestDiskStatsInfoList *qmp_guest_get_diskstats(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>> @@ -3124,7 +3124,7 @@ GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp)
>>   GuestFilesystemTrimResponse *
>>   qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   #endif
>> @@ -3243,7 +3243,7 @@ GuestUserList *qmp_guest_get_users(Error **errp)
>>   
>>   GuestUserList *qmp_guest_get_users(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>> @@ -3386,7 +3386,7 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
>>   
>>   GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>   
>>       return NULL;
>>   }
> 
> Commands not supported by this build of qemu-qa: [*].
> 
>> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
>> index aa8c9770d4..5c9f8e0923 100644
>> --- a/qga/commands-win32.c
>> +++ b/qga/commands-win32.c
>> @@ -1213,7 +1213,7 @@ GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp)
>>   GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp)
>>   {
>>       if (!vss_initialized()) {
>> -        error_setg(errp, QERR_UNSUPPORTED);
>> +        error_setg(errp, "this feature or command is not currently supported");
>>           return 0;
>>       }
>>   
>> @@ -1241,7 +1241,7 @@ int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints,
>>       Error *local_err = NULL;
>>   
>>       if (!vss_initialized()) {
>> -        error_setg(errp, QERR_UNSUPPORTED);
>> +        error_setg(errp, "this feature or command is not currently supported");
>>           return 0;
>>       }
>>   
>> @@ -1276,7 +1276,7 @@ int64_t qmp_guest_fsfreeze_thaw(Error **errp)
>>       int i;
>>   
>>       if (!vss_initialized()) {
>> -        error_setg(errp, QERR_UNSUPPORTED);
>> +        error_setg(errp, "this feature or command is not currently supported");
>>           return 0;
>>       }
>>   
> 
> !vss_initialized() means qga-vss.dll failed to load and initialize.
> 
> Another [*].
> 
>> @@ -1509,7 +1509,7 @@ out:
>>   
>>   void qmp_guest_suspend_hybrid(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>   }
>>   
>>   static IP_ADAPTER_ADDRESSES *guest_get_adapters_addresses(Error **errp)
>> @@ -1877,7 +1877,7 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
>>   
>>   int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return -1;
>>   }
>>   
> 
> Commands not supported by this build of qemu-qa: [*].
> 
>> @@ -1938,7 +1938,7 @@ void qmp_guest_set_user_password(const char *username,
>>       GError *gerr = NULL;
>>   
>>       if (crypted) {
>> -        error_setg(errp, QERR_UNSUPPORTED);
>> +        error_setg(errp, "this feature or command is not currently supported");
>>           return;
>>       }
> 
> Command does not support "crypted": true in this build of qemu-ga.  The
> error message is crap.  Better would be some variation of "this machine
> supports only clear-text passwords".
> 
>>   
>> @@ -1983,20 +1983,20 @@ done:
>>   
>>   GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   GuestMemoryBlockResponseList *
>>   qmp_guest_set_memory_blocks(GuestMemoryBlockList *mem_blks, Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   GuestMemoryBlockInfo *qmp_guest_get_memory_block_info(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>> @@ -2522,12 +2522,12 @@ char *qga_get_host_name(Error **errp)
>>   
>>   GuestDiskStatsInfoList *qmp_guest_get_diskstats(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
>>   
>>   GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp)
>>   {
>> -    error_setg(errp, QERR_UNSUPPORTED);
>> +    error_setg(errp, "this feature or command is not currently supported");
>>       return NULL;
>>   }
> 
> Commands not supported by this build of qemu-qa: [*].
> 
> Summary of my review:
> 
> * You're unsure about your change to the "General note concerning the
>    use of guest agent interfaces".  I suggested a way to rewrite it.
> 
> * Error messages could use improvement.  Since your patch doesn't change
>    any, feel free to leave that for another day.
> 
> * How we do compiled-out commands could use improvement.  Feel even more
>    free to leave for another day.  I'd like to hear the maintainers'
>    opinion, though.
> 
> 



  parent reply	other threads:[~2024-06-12 12:23 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-05  4:50 [PATCH v2 00/22] qapi: Kill 'qapi/qmp/qerror.h' for good Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 01/22] qapi: Inline and remove QERR_BUS_NO_HOTPLUG definition Philippe Mathieu-Daudé
2023-10-05  5:55   ` Cédric Le Goater
2023-10-20  5:49   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 02/22] qapi: Inline and remove QERR_DEVICE_HAS_NO_MEDIUM definition Philippe Mathieu-Daudé
2023-10-20  6:00   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 03/22] qapi: Inline and remove QERR_DEVICE_IN_USE definition Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 04/22] qapi: Inline and remove QERR_DEVICE_NO_HOTPLUG definition Philippe Mathieu-Daudé
2023-10-20  6:03   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 05/22] qapi: Inline QERR_INVALID_PARAMETER definition (constant parameter) Philippe Mathieu-Daudé
2023-10-20  7:07   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 06/22] qapi: Inline and remove QERR_INVALID_PARAMETER definition Philippe Mathieu-Daudé
2023-10-20  7:16   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 07/22] qapi: Inline QERR_INVALID_PARAMETER_TYPE definition (constant param) Philippe Mathieu-Daudé
2023-10-20  7:18   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 08/22] qapi: Inline QERR_INVALID_PARAMETER_TYPE definition (constant value) Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 09/22] qapi: Inline and remove QERR_INVALID_PARAMETER_TYPE definition Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 10/22] qapi: Correct error message for 'vcpu_dirty_limit' parameter Philippe Mathieu-Daudé
2023-10-05  6:33   ` Juan Quintela
2023-10-20  8:33   ` Markus Armbruster
2023-10-20  9:55     ` Juan Quintela
2023-10-05  4:50 ` [PATCH v2 11/22] qapi: Inline QERR_INVALID_PARAMETER_VALUE definition (constant value) Philippe Mathieu-Daudé
2023-10-05  6:34   ` Juan Quintela
2023-10-20 11:32   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 12/22] qapi: Inline QERR_INVALID_PARAMETER_VALUE definition (constant param) Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 13/22] qapi: Inline and remove QERR_INVALID_PARAMETER_VALUE definition Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 14/22] qapi: Inline and remove QERR_IO_ERROR definition Philippe Mathieu-Daudé
2023-10-20 11:50   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 15/22] qapi: Inline and remove QERR_MIGRATION_ACTIVE definition Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 16/22] qapi: Inline QERR_MISSING_PARAMETER definition (constant parameter) Philippe Mathieu-Daudé
2023-10-20 12:58   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 17/22] qapi: Inline and remove QERR_MISSING_PARAMETER definition Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 18/22] qapi: Inline and remove QERR_PROPERTY_VALUE_BAD definition Philippe Mathieu-Daudé
2023-10-20 13:00   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 19/22] qapi: Inline and remove QERR_PROPERTY_VALUE_OUT_OF_RANGE definition Philippe Mathieu-Daudé
2023-10-20 13:08   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 20/22] qapi: Inline and remove QERR_QGA_COMMAND_FAILED definition Philippe Mathieu-Daudé
2023-10-20 13:03   ` Markus Armbruster
2023-10-05  4:50 ` [RFC PATCH v2 21/22] qapi: Inline and remove QERR_UNSUPPORTED definition Philippe Mathieu-Daudé
2023-10-05 11:22   ` Markus Armbruster
2023-10-05 11:57     ` Markus Armbruster
2024-06-12 12:23     ` Philippe Mathieu-Daudé [this message]
2024-06-12 13:07       ` Markus Armbruster
2024-06-12 13:27         ` Konstantin Kostiuk
2024-06-12 13:45         ` Philippe Mathieu-Daudé
2023-10-05 11:57   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 22/22] qapi: Remove 'qapi/qmp/qerror.h' header Philippe Mathieu-Daudé
2023-10-05  9:26 ` [PATCH v2 00/22] qapi: Kill 'qapi/qmp/qerror.h' for good Markus Armbruster
2023-10-20 13:15 ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=18739a67-84bb-4fd3-adb6-0db0f0eb7af1@linaro.org \
    --to=philmd@linaro.org \
    --cc=armbru@redhat.com \
    --cc=kkostiuk@redhat.com \
    --cc=michael.roth@amd.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).