On Tue, 2 Sep 2025 10:59:35 -0500 Ira Weiny <[email protected]> wrote:
> Alireza Sanaee wrote: > > On Thu, 23 May 2024 10:44:51 -0700 > > [email protected] wrote: > > > > > From: Fan Ni <[email protected]> > > > > > > To simulate FM functionalities for initiating Dynamic Capacity Add > > > (Opcode 5604h) and Dynamic Capacity Release (Opcode 5605h) as in > > > CXL spec r3.1 7.6.7.6.5 and 7.6.7.6.6, we implemented two QMP > > > interfaces to issue add/release dynamic capacity extents requests. > > > > > > With the change, we allow to release an extent only when its DPA > > > range is contained by a single accepted extent in the device. > > > That is to say, extent superset release is not supported yet. > > > > > > 1. Add dynamic capacity extents: > > > > > > For example, the command to add two continuous extents (each > > > 128MiB long) to region 0 (starting at DPA offset 0) looks like > > > below: > > > > > > { "execute": "qmp_capabilities" } > > > > > > { "execute": "cxl-add-dynamic-capacity", > > > "arguments": { > > > "path": "/machine/peripheral/cxl-dcd0", > > > "host-id": 0, > > > "selection-policy": "prescriptive", > > > "region": 0, > > > "extents": [ > > > { > > > "offset": 0, > > > "len": 134217728 > > > }, > > > { > > > "offset": 134217728, > > > "len": 134217728 > > > } > > > ] > > > } > > > } > > > > > > 2. Release dynamic capacity extents: > > > > > > For example, the command to release an extent of size 128MiB from > > > region 0 (DPA offset 128MiB) looks like below: > > > > > > { "execute": "cxl-release-dynamic-capacity", > > > "arguments": { > > > "path": "/machine/peripheral/cxl-dcd0", > > > "host-id": 0, > > > "removal-policy":"prescriptive", > > > "region": 0, > > > "extents": [ > > > { > > > "offset": 134217728, > > > "len": 134217728 > > > } > > > ] > > > } > > > } > > > > > > Tested-by: Svetly Todorov <[email protected]> > > > Reviewed-by: Gregory Price <[email protected]> > > > Signed-off-by: Fan Ni <[email protected]> > > [snip] > > > > +## > > > +# @cxl-release-dynamic-capacity: > > > +# > > > +# Command to initiate to release dynamic capacity extents from a > > > +# host. It simulates operations defined in cxl spec r3.1 > > > 7.6.7.6.6. +# > > > +# @path: CXL DCD canonical QOM path. > > > +# > > > +# @host-id: The "Host ID" field as defined in cxl spec r3.1 > > > +# Table 7-71. > > > +# > > > +# @removal-policy: Bit[3:0] of the "Flags" field as defined in > > > cxl +# spec r3.1 Table 7-71. > > > +# > > > +# @forced-removal: Bit[4] of the "Flags" field in cxl spec r3.1 > > > +# Table 7-71. When set, device does not wait for a Release > > > +# Dynamic Capacity command from the host. Host immediately > > > +# loses access to released capacity. > > > +# > > > +# @sanitize-on-release: Bit[5] of the "Flags" field in cxl spec > > > r3.1 +# Table 7-71. When set, device should sanitize all > > > released +# capacity as a result of this request. > > > +# > > > +# @region: The "Region Number" field as defined in cxl spec r3.1 > > > +# Table 7-71. The dynamic capacity region where the capacity > > > +# is being added. Valid range is from 0-7. > > > +# > > > +# @tag: The "Tag" field as defined in cxl spec r3.1 Table 7-71. > > > +# > > > +# @extents: The "Extent List" field as defined in cxl spec r3.1 > > > +# Table 7-71. > > > +# > > > +# Since : 9.1 > > > +## > > > +{ 'command': 'cxl-release-dynamic-capacity', > > > + 'data': { 'path': 'str', > > > + 'host-id': 'uint16', > > > + 'removal-policy': 'CXLExtRemovalPolicy', > > > + '*forced-removal': 'bool', > > > + '*sanitize-on-release': 'bool', > > > + 'region': 'uint8', > > > + '*tag': 'str', > > > + 'extents': [ 'CXLDynamicCapacityExtent' ] > > > + } > > > +} > > > > Although tag-based removal is not implemented yet, but still just > > wanted to leave a comment here that exact extents are not needed > > for tag-based removal and `extents` should be an optional parameter > > here; this is my understanding reading the spec, so I still might > > be wrong, shout if you think it does not make sense. > > It's been a while but I think this allows the removal of non-tagged > extents as well(?) If so the tag would be NULL (or empty-string) and > one can remove a regular extent. > > But I could be miss-remembering something, > Ira > Yes non-tagged is working completely.
