Re: [PATCH v2 13/18] cxl/region: Add function to find a port's switch decoder by range
From: Robert Richter
Date: Mon Feb 10 2025 - 07:35:01 EST
On 07.02.25 14:22:06, Alison Schofield wrote:
> On Fri, Feb 07, 2025 at 04:37:48PM +0100, Robert Richter wrote:
> > Factor out code to find the switch decoder of a port for a specific
> > address range. Reuse the code to search a root decoder, create the
> > function cxl_port_find_switch_decoder() and rework
> > match_root_decoder_by_range() to be usable for switch decoders too.
> >
> > Signed-off-by: Robert Richter <rrichter@xxxxxxx>
> > ---
> > drivers/cxl/core/region.c | 46 +++++++++++++++++++++++----------------
> > 1 file changed, 27 insertions(+), 19 deletions(-)
> >
> > diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
> > index cfcd235f311e..15286acdf6d1 100644
> > --- a/drivers/cxl/core/region.c
> > +++ b/drivers/cxl/core/region.c
>
> snip
>
>
> > @@ -3218,9 +3234,8 @@ cxl_find_root_decoder(struct cxl_endpoint_decoder *cxled)
> > if (!iter)
> > return NULL;
> >
> > - cxlrd_dev = device_find_child(&iter->dev, hpa,
> > - match_root_decoder_by_range);
> > - if (!cxlrd_dev) {
> > + cxld = cxl_port_find_switch_decoder(iter, hpa);
> > + if (!cxld) {
> > dev_err(cxlmd->dev.parent,
> > "%s:%s no CXL window for range %#llx:%#llx\n",
> > dev_name(&cxlmd->dev), dev_name(&cxld->dev),
>
> The dev_err() needs cleanup to align with !cxld.
> As it is now, fails w NULL ptr dereference.
Yes, fixed in v3. Thanks for catching this.
-Robert