From: Alison Schofield <alison.schofield@intel.com>
To: Jonathan Cameron <jic23@kernel.org>
Cc: Davidlohr Bueso <dave@stgolabs.net>,
Dave Jiang <dave.jiang@intel.com>,
Vishal Verma <vishal.l.verma@intel.com>,
Ira Weiny <iweiny@kernel.org>, "Li Ming" <ming.li@zohomail.com>,
Robert Richter <rrichter@amd.com>, <linux-cxl@vger.kernel.org>
Subject: Re: [PATCH v5 3/7] cxl/region: Generalize endpoint position mapping
Date: Fri, 18 Sep 2026 16:01:16 -0700 [thread overview]
Message-ID: <aq3CvPcUcsqDUG5P@aschofie-mobl2.lan> (raw)
In-Reply-To: <20260908004207.5875e800@jic23-huawei>
On Tue, Sep 08, 2026 at 12:42:07AM +0100, Jonathan Cameron wrote:
> On Thu, 3 Sep 2026 16:23:45 -0700
> Alison Schofield <alison.schofield@intel.com> wrote:
>
> > Endpoint position calculation currently relies on the requirement that an
> > interleaving root have the same granularity as the region. Auto region
> > creation builds the position by multiplying by the parent decoders' ways,
> > while user region creation selects the root target with 'pos % ways'. Those
> > calculations are sufficient under the current granularity restriction.
> >
> > In order to support mixed-granularity regions, that granularity restriction
> > will need to be removed so decoder granularity can change between levels of
> > the interleave hierarchy. The position calculation needs to account for
> > those changes to produce the correct endpoint ordering.
> >
> > Change the position calculation so each decoder's contribution is weighted
> > by its granularity relative to the region granularity:
> >
> > position += target_pos *
> > (decoder_granularity / region_granularity)
>
> In the code target_pos becomes parent_pos. The parent_pos naming
> seems more logical to me but maybe I'm missing something! (more
> that likely given it is interleave maths!)
Agree. I'll change the messaging above to be parent_pos.
-- Alison
>
> >
> > Use the same relationship to select the root target during user region
> > creation.
> >
> > Weight each level by the region granularity, passed in by the caller,
> > rather than by the granularity programmed in the endpoint decoder. The two
> > are equal for most configurations, but not when Normalized Addressing
> > leaves the endpoint decoder programmed passthrough while the region
> > interleaves.
> >
> > For currently supported regions, the new weighted calculation reduces to
> > the existing position calculation and produces identical endpoint
> > positions. The exception is a region wider than a same-granularity Mod3
> > root, where address bit routing programs the level below the root at the
> > region granularity, so the ratio derives a weight of one rather than three.
> > A later patch in this series rejects that layout.
> >
> > Signed-off-by: Alison Schofield <alison.schofield@intel.com>
> I'll assume you'll clarify the naming thing. Otherwise this LGTM
> Reviewed-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
>
> > ---
> > drivers/cxl/core/region.c | 69 ++++++++++++++++++++++++---------------
> > 1 file changed, 42 insertions(+), 27 deletions(-)
> >
> > diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
> > index 6a698f36aa6d..506b1cba1a92 100644
> > --- a/drivers/cxl/core/region.c
> > +++ b/drivers/cxl/core/region.c
>
> > @@ -1951,24 +1959,29 @@ static int find_pos_and_ways(struct cxl_port *port, struct range *range,
> > * cxl_calc_interleave_pos() - calculate an endpoint position in a region
> > * @cxled: endpoint decoder member of given region
> > * @hpa_range: translated HPA range of the endpoint
> > + * @region_gran: interleave granularity of the region
> > *
> > - * The endpoint position is calculated by traversing the topology from
> > - * the endpoint to the root decoder and iteratively applying this
> > - * calculation:
> > + * A region position is the index of a region-granularity chunk within one full
> > + * pass of the region interleave. The position is calculated by traversing the
> > + * topology from the endpoint to the root decoder and accumulating the
> > + * contribution of each decoder level:
> > *
> > - * position = position * parent_ways + parent_pos;
> > + * position += parent_pos * (parent_granularity / region_gran);
>
> Here is the naming difference from the patch description.
>
> > *
> > - * ...where @position is inferred from switch and root decoder target lists.
> > + * ...where @parent_pos is inferred from switch and root decoder target lists.
> > + * The multiplier is the weight of that level: how many region positions pass
> > + * between successive advances of the level's target index. A level that selects
> > + * a single target contributes nothing.
> > *
> > * Return: position >= 0 on success
> > * -ENXIO on failure
> > */
> > static int cxl_calc_interleave_pos(struct cxl_endpoint_decoder *cxled,
> > - struct range *hpa_range)
> > + struct range *hpa_range, int region_gran)
> > {
> > struct cxl_port *iter, *port = cxled_to_port(cxled);
> > struct cxl_memdev *cxlmd = cxled_to_memdev(cxled);
> > - int parent_ways = 0, parent_pos = 0, pos = 0;
> > + int parent_gran = 0, parent_pos = 0, pos = 0;
> > int rc;
> >
next prev parent reply other threads:[~2026-09-18 23:01 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-03 23:23 [PATCH v5 0/7] cxl: Support mixed-granularity region interleaves Alison Schofield
2026-09-03 23:23 ` [PATCH v5 1/7] Documentation/cxl: Describe mixed-granularity regions Alison Schofield
2026-09-07 23:23 ` Jonathan Cameron
2026-09-16 11:51 ` Robert Richter
2026-09-18 20:48 ` Alison Schofield
2026-09-03 23:23 ` [PATCH v5 2/7] cxl/region: Warn on user region position mismatch Alison Schofield
2026-09-16 12:05 ` Robert Richter
2026-09-18 21:18 ` Alison Schofield
2026-09-25 0:30 ` Alison Schofield
2026-09-03 23:23 ` [PATCH v5 3/7] cxl/region: Generalize endpoint position mapping Alison Schofield
2026-09-07 23:42 ` Jonathan Cameron
2026-09-18 23:01 ` Alison Schofield [this message]
2026-09-16 14:15 ` Robert Richter
2026-09-18 23:20 ` Alison Schofield
2026-09-03 23:23 ` [PATCH v5 4/7] cxl/region: Name the interleave locals in cxl_port_setup_targets() Alison Schofield
2026-09-07 23:50 ` [PATCH v5 4/7] cxo_ol/region: " Jonathan Cameron
2026-09-19 0:42 ` Alison Schofield
2026-09-16 14:34 ` [PATCH v5 4/7] cxl/region: " Robert Richter
2026-09-16 17:45 ` Robert Richter
2026-09-19 0:58 ` Alison Schofield
2026-09-19 0:55 ` Alison Schofield
2026-09-03 23:23 ` [PATCH v5 5/7] cxl/region: Support mixed-granularity auto regions Alison Schofield
2026-09-08 0:02 ` Jonathan Cameron
2026-09-16 18:03 ` Robert Richter
2026-09-03 23:23 ` [PATCH v5 6/7] cxl/region: Support mixed-granularity user created regions Alison Schofield
2026-09-08 0:03 ` Jonathan Cameron
2026-09-16 18:13 ` Robert Richter
2026-09-03 23:23 ` [PATCH v5 7/7] cxl/test: Add a topology to test mixed-granularity regions Alison Schofield
2026-09-08 0:10 ` Jonathan Cameron
2026-09-16 18:19 ` [PATCH v5 0/7] cxl: Support mixed-granularity region interleaves Robert Richter
2026-09-18 19:49 ` Alison Schofield
2026-09-29 22:48 ` Dave Jiang
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=aq3CvPcUcsqDUG5P@aschofie-mobl2.lan \
--to=alison.schofield@intel.com \
--cc=dave.jiang@intel.com \
--cc=dave@stgolabs.net \
--cc=iweiny@kernel.org \
--cc=jic23@kernel.org \
--cc=linux-cxl@vger.kernel.org \
--cc=ming.li@zohomail.com \
--cc=rrichter@amd.com \
--cc=vishal.l.verma@intel.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox