All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Mario Fleischmann <mario.fleischmann@lauterbach.com>
Cc: qemu-devel@nongnu.org,  alex.bennee@linaro.org,
	 philmd@linaro.org, christian.boenig@lauterbach.com
Subject: Re: [PATCH v2 07/20] mcd: Implement target initialization API
Date: Tue, 20 May 2025 09:13:48 +0200	[thread overview]
Message-ID: <87o6vndaab.fsf@pond.sub.org> (raw)
In-Reply-To: <a71a747f-d8c3-40ac-ab61-0628dffbb2f6@lauterbach.com> (Mario Fleischmann's message of "Mon, 19 May 2025 18:52:05 +0200")

Mario Fleischmann <mario.fleischmann@lauterbach.com> writes:

> On 15.05.2025 15:02, Markus Armbruster wrote:
>
>> Mario Fleischmann <mario.fleischmann@lauterbach.com> writes:
>> 
>>> The target initialization API ensures that the requested and provided
>>> MCD versions are compatible.
>>>
>>> * implement mcd_initialize_f and mcd_qry_error_info_f in mcdserver
>>> * implement QMP stub functionality
>>> * add QTest
>>>
>>> Thanks to the QMP integration in QTest, function arguments and results
>>> can be (de)serialized automatically.
>>>
>>> Signed-off-by: Mario Fleischmann <mario.fleischmann@lauterbach.com>
>> 
>> [...]
>> 
>>> diff --git a/qapi/mcd.json b/qapi/mcd.json
>>> index 701fd03..7b42a74 100644
>>> --- a/qapi/mcd.json
>>> +++ b/qapi/mcd.json
>>> @@ -4,3 +4,186 @@
>>>  ##
>>>  # = Multi-Core Debug (MCD) API
>>>  ##
>>> +
>>> +
>>> +##
>>> +# == Definition of Structures
>>> +##
>>> +
>>> +
>>> +##
>>> +# @MCDAPIVersion:
>>> +#
>>> +# Structure type containing the MCD API version information of the tool.
>>> +#
>>> +# @v-api-major: API major version.
>>> +# @v-api-minor: API minor version.
>>> +# @author:      API name of the author of this MCD API version.
>>> +#
>>> +# Since: 9.1
>>> +##
>>> +{ 'struct': 'MCDAPIVersion',
>>> +  'data': {
>>> +    'v-api-major': 'uint16',
>>> +    'v-api-minor': 'uint16',
>>> +    'author':      'str' } }
>>> +
>>> +
>>> +##
>>> +# @MCDImplVersionInfo:
>>> +#
>>> +# Structure type containing the MCD API implementation information.
>>> +#
>>> +# @v-api:       Implemented API version.
>>> +# @v-imp-major: Major version number of this implementation.
>>> +# @v-imp-minor: Minor version number of this implementation.
>>> +# @v-imp-build: Build number of this implementation.
>>> +# @vendor:      Name of vendor of the implementation.
>>> +# @date:        String from __DATE__ macro at compile time.
>>> +#
>>> +# Since: 9.1
>>> +##
>>> +{ 'struct': 'MCDImplVersionInfo',
>>> +  'data': {
>>> +    'v-api'      : 'MCDAPIVersion',
>>> +    'v-imp-major': 'uint16',
>>> +    'v-imp-minor': 'uint16',
>>> +    'v-imp-build': 'uint16',
>>> +    'vendor'     : 'str',
>>> +    'date'       : 'str' } }
>>> +
>>> +
>>> +##
>>> +# @MCDErrorInfo:
>>> +#
>>> +# Structure type containing the error status and error event notification.
>>> +#
>>> +# @return-status: Return status from the last API call.
>>> +# @error-code:    Detailed error code from the last API call.
>>> +# @error-events:  Detailed event code from the last API call.
>>> +# @error-str:     Detailed error text string from the last API call.
>>> +#
>>> +# Since: 9.1
>>> +##
>>> +{ 'struct': 'MCDErrorInfo',
>>> +  'data': {
>>> +    'return-status': 'uint32',
>>> +    'error-code'   : 'uint32',
>>> +    'error-events' : 'uint32',
>>> +    'error-str'    : 'str' }}
>>> +
>>> +
>>> +##
>>> +# == Target Initialization API
>>> +##
>>> +
>>> +
>>> +##
>>> +# @MCDInitializeResult:
>>> +#
>>> +# Return value of @mcd-initialize.
>>> +#
>>> +# @return-status: Return code.
>>> +#
>>> +# @impl-info: Information about the QEMU build, its version and the version of
>>> +#             the implemented MCD API.
>>> +#
>>> +# Since: 9.1
>>> +##
>>> +{ 'struct': 'MCDInitializeResult',
>>> +  'data': {
>>> +    'return-status': 'uint32',
>>> +    '*impl-info'   : 'MCDImplVersionInfo' } }
>>> +
>>> +
>>> +##
>>> +# @mcd-initialize:
>>> +#
>>> +# Function initializing the interaction between a tool-side implementation and
>>> +# target-side implementation.
>>> +#
>>> +# @version-req: MCD API version as requested by an upper layer.
>>> +#
>>> +# Returns: @MCDInitializeResult
>>> +#
>>> +# Since: 9.1
>>> +#
>>> +# .. qmp-example::
>>> +#    :title: Check compatibility with MCD server
>>> +#
>>> +#     -> { "execute": "mcd-initialize",
>>> +#          "arguments": { "version-req": { "v-api-major": 1,
>>> +#                                          "v-api-minor": 1,
>>> +#                                          "author": "" } } }
>>> +#     <- {
>>> +#            "return": {
>>> +#                "impl-info": {
>>> +#                    "v-api": {
>>> +#                        "v-api-minor": 1,
>>> +#                        "v-api-major": 1,
>>> +#                        "author": "QEMU Release"
>>> +#                    },
>>> +#                    "vendor": "QEMU",
>>> +#                    "v-imp-minor": 2,
>>> +#                    "v-imp-major": 9,
>>> +#                    "v-imp-build": 0,
>>> +#                    "date": "Dec 18 2024"
>>> +#                },
>>> +#                "return-status": 0
>>> +#            }
>>> +#        }
>>> +##
>>> +{ 'command': 'mcd-initialize',
>>> +  'data': { 'version-req': 'MCDAPIVersion' },
>>> +  'returns': 'MCDInitializeResult' }
>>> +
>>> +
>>> +##
>>> +# @mcd-exit:
>>> +#
>>> +# Function cleaning up all core and server connections from a tool.
>>> +#
>>> +# Since: 9.1
>>> +##
>>> +{ 'command': 'mcd-exit' }
>>> +
>>> +
>>> +##
>>> +# == Core Connection API
>>> +##
>>> +
>>> +
>>> +##
>>> +# @mcd-qry-error-info:
>>> +#
>>> +# Function allowing the access to detailed error and/or event information after
>>> +# an API call.
>>> +#
>>> +# Returns: @MCDErrorInfo
>>> +#
>>> +# Since: 9.1
>>> +#
>>> +# .. qmp-example::
>>> +#    :title: Incompatible MCD versions
>>> +#
>>> +#     -> { "execute": "mcd-initialize",
>>> +#          "arguments": { "version-req": { "v-api-major": 2,
>>> +#                                          "v-api-minor": 0,
>>> +#                                          "author": "" } } }
>>> +#     <- {
>>> +#            "return": {
>>> +#                "return-status": 3
>>> +#            }
>>> +#        }
>>> +#     -> { "execute": "mcd-qry-error-info" }
>>> +#     <- {
>>> +#            "return": {
>>> +#                "error-str": "incompatible versions",
>>> +#                "error-code": 3840,
>>> +#                "error-events": 0,
>>> +#                "return-status": 3
>>> +#            }
>>> +#        }
>>> +##
>>> +{ 'command': 'mcd-qry-error-info',
>>> +  'returns': 'MCDErrorInfo' }
>> 
>> You define some types under "Definition of Structures", and some
>> elsewhere.  How do you decide what goes where?  Hmm, looks like you
>> mirror mcd/mcd_api.h.  Correct?
>
> Generally, mcd/qapi-schema.json is intended to stay as close as possible
> to mcd_api.h. However, there are a few exceptions.
>
> If a function "MCDFunction" from the MCD API has multiple return values,
> an additional QAPI struct with the naming scheme "MCDFunctionResult" is
> introduced which will be returned by "MCDFunction".
> Since this struct is intended to be used by only one function, it is
> defined directly before that function.
>
> If the type of an argument or return value cannot be serialized, most
> often because it is a pointer, it is changed to a type which is able to
> carry the same information. In most cases, an int carrying a unique
> identifier suffices. Sometimes, an additional struct is required.
> This struct can possibly be used by multiple functions, so I would
> expect it in the "Definition of Structures" section.

Makes sense.

Suggest to add a suitable varation of this explanation to the .json as a
non-doc comment.  Reminder:

##
# Doc comment
##

#
# Not a doc comment
#



  reply	other threads:[~2025-05-20  7:14 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-30  5:27 [PATCH v2 00/20] Add Multi-Core Debug (MCD) API support Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 01/20] mcd: Introduce Multi-Core Debug (MCD) API Mario Fleischmann
2025-04-30  8:19   ` Daniel P. Berrangé
2025-04-30 12:47     ` Mario Fleischmann
2025-04-30 12:55       ` Daniel P. Berrangé
2025-04-30 15:22         ` Mario Fleischmann
2025-04-30 16:00           ` Daniel P. Berrangé
2025-04-30  5:27 ` [PATCH v2 02/20] meson: Add --enable-mcd option Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 03/20] mcd: Introduce MCD server Mario Fleischmann
2025-05-15  9:46   ` Daniel P. Berrangé
2025-04-30  5:27 ` [PATCH v2 04/20] qapi: Introduce MCD schema Mario Fleischmann
2025-05-08 11:07   ` Markus Armbruster
2025-05-20  7:10     ` Markus Armbruster
2025-04-30  5:27 ` [PATCH v2 05/20] mcd: Introduce MCD server stub Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 06/20] qtest: Introduce MCD test suite Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 07/20] mcd: Implement target initialization API Mario Fleischmann
2025-05-08 12:03   ` Markus Armbruster
2025-05-14 13:59     ` Mario Fleischmann
2025-05-15  9:33       ` Markus Armbruster
2025-05-15 13:02   ` Markus Armbruster
2025-05-19 16:52     ` Mario Fleischmann
2025-05-20  7:13       ` Markus Armbruster [this message]
2025-04-30  5:27 ` [PATCH v2 08/20] mcd: Implement server connection API Mario Fleischmann
2025-05-15  9:58   ` Daniel P. Berrangé
2025-05-19 16:54     ` Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 09/20] mcd: Implement target system query Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 10/20] mcd: Implement core connection control Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 11/20] mcd: Implement memory space query Mario Fleischmann
2025-05-19  9:41   ` Manos Pitsidianakis
2025-05-19 18:24     ` Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 12/20] gdbstub: Expose GDBRegisterState Mario Fleischmann
2025-05-19  8:41   ` Manos Pitsidianakis
2025-05-19 18:26     ` Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 13/20] mcd: Implement register query Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 14/20] mcd: Implement runstate control Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 15/20] mcd test: Implement core state query Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 16/20] gdbstub: Expose gdb_write_register Mario Fleischmann
2025-05-19  8:38   ` Manos Pitsidianakis
2025-04-30  5:27 ` [PATCH v2 17/20] mcd: Implement register/memory access Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 18/20] mcd: Implement single stepping Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 19/20] mcd: Implement trigger control Mario Fleischmann
2025-04-30  5:27 ` [PATCH v2 20/20] mcd: Implement reset control Mario Fleischmann
2025-05-08 11:37 ` [PATCH v2 00/20] Add Multi-Core Debug (MCD) API support Markus Armbruster
2025-05-14 14:05   ` Mario Fleischmann
2025-05-20  7:35 ` Markus Armbruster
2025-05-20 14:16   ` Mario Fleischmann
2025-07-24  5:28 ` 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=87o6vndaab.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=christian.boenig@lauterbach.com \
    --cc=mario.fleischmann@lauterbach.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.