Re: [PATCH v2 13/18] cxl/region: Add function to find a port's switch decoder by range
From: Alison Schofield
Date: Fri Feb 07 2025 - 17:22:19 EST
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.
--snip