Jinjie Ruan <[email protected]> writes:
> From: Jonathan Cameron <[email protected]>
>
> Add the query-mpam-cache QMP command schema: the MpamBm bitmap
> type, the per-RIS MpamRegs state and the MpamCacheInfo summary of
> a cache MSC, plus an optional cache level filter. The command is
> stubbed to return NULL so the generated marshal links; the real
> implementation walks the device tree in the next patch.
>
> Based on an RFC series by Jonathan Cameron, adapted to the current
> qapi documentation rules.
>
> Signed-off-by: Jonathan Cameron <[email protected]>
> Signed-off-by: Jinjie Ruan <[email protected]>
[...]
> diff --git a/qapi/meson.build b/qapi/meson.build
> index a46269b..c6663e5 100644
> --- a/qapi/meson.build
> +++ b/qapi/meson.build
> @@ -42,6 +42,7 @@ qapi_all_modules = [
> 'machine-s390x',
> 'migration',
> 'misc',
> + 'mpam',
> 'net',
> 'pragma',
> 'qom',
> diff --git a/qapi/mpam.json b/qapi/mpam.json
> new file mode 100644
> index 0000000..ff476a1
> --- /dev/null
> +++ b/qapi/mpam.json
> @@ -0,0 +1,120 @@
> +# -*- Mode: Python -*-
> +# vim: filetype=python
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +
> +##
> +# = ARM MPAM State Introspection
> +##
Special QAPI doc markup that hasn't been recognized in more than a year.
Please build with --enable-docs, and examine
docs/manual/interop/qemu-qmp-ref.html to guard against such mishaps.
Use standard reST markup instead:
##
# ****************************
# ARM MPAM State Introspection
# ****************************
##
Are you *sure* this ought to be between "Miscellanea" and "Audio" and at
the same heading level? Or should it be deeper and/or elsewhere?
> +
> +##
> +# @MpamBm:
> +#
> +# A bitmap control value, as used by MPAM cache-portion (CPBM) and
> +# memory-bandwidth-portion (MBW_PBM) controls. The value is
> +# carried as an array of 32-bit words, least significant first.
> +#
Anti-pattern: the introduction (above) discusses the value of a member
(below).
> +# @words: The bitmap, one element per 32-bits of the control
> +#
> +# Since: 10.1
11.2 now. Same elsewhere, not noting it again.
> +##
> +{ 'struct': 'MpamBm',
> + 'data' : { 'words' : [ 'int' ]
The description says it's 32 bit words. Shouldn't you use 'uint32'
then?
> + }
> +}
> +
> +##
> +# @MpamRegs:
> +#
> +# Per RIS register state of an emulated MPAM Memory System Component.
Please use the current syntax for introductions:
##
# @name: introduction, best to keep it brief, but you may continue it
# like this if necessary. If your text need to refer to
# arguments, it's almost certainly not brief introduction
# anymore.
Same elsewhere, not noting it again.
> +#
> +# @idr: MPAMF_IDR, the MPAM features identification register
> +#
> +# @iidr: MPAMF_IIDR, the MPAM implementer identification register
> +#
> +# @aidr: MPAMF_AIDR, the MPAM architecture identification register
> +#
> +# @cpor-idr: MPAMF_CPOR_IDR, cache-portion feature register
> +#
> +# @ccap-idr: MPAMF_CCAP_IDR, cache-capacity feature register
> +#
> +# @mbw-idr: MPAMF_MBW_IDR, memory-bandwidth feature register
> +#
> +# @pri-idr: MPAMF_PRI_IDR, priority feature register
> +#
> +# @partid-nrw-idr: MPAMF_PARTID_NRW_IDR, PARTID narrowing register
> +#
> +# @msmon-idr: MPAMF_MSMON_IDR, monitor feature register
> +#
> +# @csumon-idr: MPAMF_CSUMON_IDR, cache-usage monitor register
> +#
> +# @mbwumon-idr: MPAMF_MBWUMON_IDR, memory-bandwidth monitor register
> +#
> +# @ecr: MPAMF_ECR, the error control register
> +#
> +# @esr: MPAMF_ESR, the error status register
> +#
> +# @cfg-part-sel: MPAMCFG_PART_SEL, the partition-selection register
> +#
> +# @cfg-cpbm: The configured cache-portion bitmaps, one per
> +# internal PARTID
> +#
> +# Since: 10.1
> +##
> +{ 'struct' : 'MpamRegs',
> + 'data' : { 'idr' : 'int',
> + 'iidr' : 'int',
> + 'aidr' : 'int',
> + 'cpor-idr': 'int',
> + 'ccap-idr': 'int',
> + 'mbw-idr': 'int',
> + 'pri-idr': 'int',
> + 'partid-nrw-idr': 'int',
> + 'msmon-idr': 'int',
> + 'csumon-idr': 'int',
> + 'mbwumon-idr': 'int',
> + 'ecr': 'int',
> + 'esr': 'int',
> + 'cfg-part-sel': 'int',
> + 'cfg-cpbm': ['MpamBm']#lazy
Is the comment an accident?
How wide are these registers? Is 'int' the appropriate type?
> + }
> +}
> +
> +##
> +# @MpamCacheInfo:
> +#
> +# Information about an MPAM cache Memory System Component.
> +#
> +# @cpu: First CPU of the set associated with the cache
> +#
> +# @level: Level of cache
> +#
> +# @type: Type of cache
> +#
> +# @regs: The per RIS register state
> +#
> +# Since: 10.1
> +##
> +{ 'struct': 'MpamCacheInfo',
> + 'data' : { 'cpu' : 'int',
> + 'level' : 'int',
> + 'type' : 'int',
> + 'regs' : ['MpamRegs']
> + }
> +}
> +
> +##
> +# @query-mpam-cache:
> +#
> +# Get a list of MpamCacheInfo for all Cache related MSC
> +#
> +# @level: Provide a cache level to filter against
What exactly does this argument filter out?
Is it really needed? How large can unfiltered output become?
> +#
> +# Returns: a list of @MpamCacheInfo describing all
> +# the MPAM cache MSC instances
This gets rendered like
Return: [MpamCacheInfo] – a list of MpamCacheInfo describing all the
MPAM cache MSC instances
As is, the description is mostly redundant. Do you need a description?
Try building without it, and see how it comes out.
> +#
> +# Since: 10.1
> +##
> +{ 'command': 'query-mpam-cache',
> + 'data': { '*level': 'int' },
> + 'returns' : ['MpamCacheInfo'],
> + 'allow-preconfig': true }
> diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json
> index b93dd68..cef175d 100644
> --- a/qapi/qapi-schema.json
> +++ b/qapi/qapi-schema.json
> @@ -64,6 +64,7 @@
> { 'include': 'replay.json' }
> { 'include': 'yank.json' }
> { 'include': 'misc.json' }
> +{ 'include': 'mpam.json' }
> { 'include': 'misc-arm.json' }
> { 'include': 'misc-i386.json' }
> { 'include': 'audio.json' }