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.


Reply via email to