shiju.jose--- via <qemu-devel@nongnu.org> writes: > From: Shiju Jose <shiju.j...@huawei.com> > > CXL spec 3.2 section 8.2.9.2.1 Table 8-55, Common Event Record > format has updated with optional Maintenance Operation Subclass, > LD ID and ID of the device head information. > > Add updates for the above optional parameters in the related > CXL events reporting and in the QMP commands to inject CXL events. > > Signed-off-by: Jonathan Cameron <jonathan.came...@huawei.com> > Signed-off-by: Shiju Jose <shiju.j...@huawei.com>
[...] > diff --git a/qapi/cxl.json b/qapi/cxl.json > index 8f2e9237b1..c1fe8319c8 100644 > --- a/qapi/cxl.json > +++ b/qapi/cxl.json > @@ -42,6 +42,18 @@ > # @flags: Event Record Flags. See CXL r3.0 Table 8-42 Common Event > # Record Format, Event Record Flags for subfield definitions. > # > +# @maint-op-class: Maintenance operation class the device requests to > initiate. > +# See CXL r3.2 Table 8-55 Common Event Record Format. > +# > +# @maint-op-subclass: Maintenance operation subclass the device requests to > +# initiate. See CXL r3.2 Table 8-55 Common Event Record Format. > +# > +# @ld-id: LD ID of LD from where the event originated. > +# See CXL r3.2 Table 8-55 Common Event Record Format. > +# > +# @head-id: ID of the device head from where the event originated. > +# See CXL r3.2 Table 8-55 Common Event Record Format. > +# > # @dpa: Device Physical Address (relative to @path device). Note > # lower bits include some flags. See CXL r3.0 Table 8-43 General > # Media Event Record, Physical Address. >From docs/devel/qapi-code-gen.rst: For legibility, wrap text paragraphs so every line is at most 70 characters long. Separate sentences with two spaces. > @@ -73,7 +85,9 @@ > # Since: 8.1 > ## > { 'command': 'cxl-inject-general-media-event', > - 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags': 'uint8', > + 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags': 'uint32', > + '*maint-op-class':'uint8', '*maint-op-subclass':'uint8', > + '*ld-id':'uint16', '*head-id':'uint8', > 'dpa': 'uint64', 'descriptor': 'uint8', > 'type': 'uint8', 'transaction-type': 'uint8', > '*channel': 'uint8', '*rank': 'uint8', > @@ -93,6 +107,18 @@ > # @flags: Event Record Flags. See CXL r3.0 Table 8-42 Common Event > # Record Format, Event Record Flags for subfield definitions. > # > +# @maint-op-class: Maintenance operation class the device requests to > initiate. > +# See CXL r3.2 Table 8-55 Common Event Record Format. > +# > +# @maint-op-subclass: Maintenance operation subclass the device requests to > +# initiate. See CXL r3.2 Table 8-55 Common Event Record Format. > +# > +# @ld-id: LD ID of LD from where the event originated. > +# See CXL r3.2 Table 8-55 Common Event Record Format. > +# > +# @head-id: ID of the device head from where the event originated. > +# See CXL r3.2 Table 8-55 Common Event Record Format. > +# > # @dpa: Device Physical Address (relative to @path device). Note > # lower bits include some flags. See CXL r3.0 Table 8-44 DRAM > # Event Record, Physical Address. > @@ -132,7 +158,9 @@ > # Since: 8.1 > ## > { 'command': 'cxl-inject-dram-event', > - 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags': 'uint8', > + 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags': 'uint32', > + '*maint-op-class':'uint8', '*maint-op-subclass':'uint8', > + '*ld-id':'uint16', '*head-id':'uint8', > 'dpa': 'uint64', 'descriptor': 'uint8', > 'type': 'uint8', 'transaction-type': 'uint8', > '*channel': 'uint8', '*rank': 'uint8', '*nibble-mask': 'uint32', > @@ -154,6 +182,18 @@ > # @flags: Event Record Flags. See CXL r3.0 Table 8-42 Common Event > # Record Format, Event Record Flags for subfield definitions. > # > +# @maint-op-class: Maintenance operation class the device requests to > initiate. > +# See CXL r3.2 Table 8-55 Common Event Record Format. > +# > +# @maint-op-subclass: Maintenance operation subclass the device requests to > +# initiate. See CXL r3.2 Table 8-55 Common Event Record Format. > +# > +# @ld-id: LD ID of LD from where the event originated. > +# See CXL r3.2 Table 8-55 Common Event Record Format. > +# > +# @head-id: ID of the device head from where the event originated. > +# See CXL r3.2 Table 8-55 Common Event Record Format. > +# > # @type: Device Event Type. See CXL r3.0 Table 8-45 Memory Module > # Event Record for bit definitions for bit definiions. > # > @@ -184,7 +224,9 @@ > # Since: 8.1 > ## > { 'command': 'cxl-inject-memory-module-event', > - 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags' : 'uint8', > + 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags' : 'uint32', > + '*maint-op-class':'uint8', '*maint-op-subclass':'uint8', > + '*ld-id':'uint16', '*head-id':'uint8', > 'type': 'uint8', 'health-status': 'uint8', > 'media-status': 'uint8', 'additional-status': 'uint8', > 'life-used': 'uint8', 'temperature' : 'int16', This adds identical copies to three commands. You can factor out common command arguments as follows. 1. Switch commands from implicit to explicit argument type. { 'command': 'cmd1', 'data': { ARGS1... } ... } becomes { 'struct': 'Args1', 'data': { ARGS1... } } { 'command': 'cmd1', 'data': 'Args1' ... } 2. Factor common base out of the argument types. { 'struct': 'Args1', 'data': { COMMON-ARGS..., SPECIAL-ARGS1... } } becomes { 'struct': 'Base, 'data': { COMMON-ARGS... } } { 'struct': 'Args1', 'base': 'Base', 'data': { SPECIAL-ARGS1... } } 3. Maybe use 'boxed': true with commands. The C function generated for a command with many arguments can be rather unwieldy. 'boxed': true makes it take the arguments as a single struct type instead. This is not a demand. Just give it a thought.