From nobody Mon Dec 8 02:04:31 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B6AA22D8DB9; Mon, 6 Oct 2025 15:58:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759766339; cv=none; b=pPU57TlYS5RRRc2CN//7FrACiT/Z2nuzoJiBQu5KQJkKDOTxZ6lUWgjqj6zr1VON7ta2a+WKtnmrbyx1sDvkEnir1MCiqoZroAsXlHHRA65owW8PFjNpJRUFFJg0ztfAqGTO/DtU39qqA3U4ZeAlorGPvzV6bZmHmtai25vYvCc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759766339; c=relaxed/simple; bh=tICIjNuKpUmKFK93meEYeXqkDKxdYHSUFm3JlHZZWuA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PbdlY0RRaGLsBKJbBmqNS+F0azNB1884nnMbjt3Q++OuYsKZ2oHKkhwcAIKGibnMooeGG51QN0PdqKvn9sizpHub9gzoiZsIMhP5yTzV/3z/Vx/hEolOsxvsc6G6nml51mW52HnUrl8hjxDo6EuRi2ldHZu5vTCdq+DkrS6TWIY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=MG3cTR1V; arc=none smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="MG3cTR1V" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1759766337; x=1791302337; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=tICIjNuKpUmKFK93meEYeXqkDKxdYHSUFm3JlHZZWuA=; b=MG3cTR1Vd9UDT6v/PQ8vCLK05AyUsRf/dAFrWIuxlk2clsExYBPNjWTq +e/SOiY9f0wsmKjM98Gg7qlI6mp41ngytnrb8cYjgGr/7gGwaVtEpnLV6 xRTWpFVUnWCRgw1+vi2Xbky4cLxTUT06DNd2yXApsb3w8uvaJEEWrI7VB hfszO/EArrGNYVWJXmyw0dSPepcs0cuznsRhztXYe/I8jBu4Hfq3+Hokc 8/aoVfMJtmcdOUlNM86lpwZIOOF63e9MSVFLDZmTOj4MXmagrdPtsJLUn 8jxiI94SREUAi3Yp5oGiW9GJyY/FXXDDHxgiIiYaJyaS0v0MhuIpiNn/q A==; X-CSE-ConnectionGUID: t2NhwkHtSFetpd4BeMHcEg== X-CSE-MsgGUID: Cs2LJbkiSKaWzJQc/1uYgw== X-IronPort-AV: E=McAfee;i="6800,10657,11574"; a="61150562" X-IronPort-AV: E=Sophos;i="6.18,320,1751266800"; d="scan'208";a="61150562" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2025 08:58:54 -0700 X-CSE-ConnectionGUID: Bl2oNqNPQgmC5nzGI+gq6Q== X-CSE-MsgGUID: TZbgicnSSvm7lvsVGzj25g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,320,1751266800"; d="scan'208";a="185189577" Received: from fdefranc-mobl3.ger.corp.intel.com (HELO fdefranc-mobl3.intel.com) ([10.245.245.98]) by fmviesa004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2025 08:58:49 -0700 From: "Fabio M. De Francesco" To: linux-cxl@vger.kernel.org Cc: Davidlohr Bueso , Jonathan Cameron , Dave Jiang , Alison Schofield , Vishal Verma , Ira Weiny , Dan Williams , Jonathan Corbet , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Gregory Price , Robert Richter , Cheatham Benjamin , "Fabio M. De Francesco" Subject: [PATCH 1/4 v5] cxl/core: Change match_*_by_range() signatures Date: Mon, 6 Oct 2025 17:58:04 +0200 Message-ID: <20251006155836.791418-2-fabio.m.de.francesco@linux.intel.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251006155836.791418-1-fabio.m.de.francesco@linux.intel.com> References: <20251006155836.791418-1-fabio.m.de.francesco@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace struct range parameter with struct cxl_endpoint_decoder of which range is a member in the match_*_by_range() functions and rename them according to their semantics. This is in preparation for expanding these helpers to perform arch specific Root Decoders and Region matchings with cxl_endpoint_decoder(s). Cc: Alison Schofield Cc: Dan Williams Cc: Dave Jiang Cc: Ira Weiny Reviewed-by: Jonathan Cameron Signed-off-by: Fabio M. De Francesco Reviewed-by: Dave Jiang Reviewed-by: Gregory Price --- drivers/cxl/core/region.c | 62 ++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index e14c1d305b22..43a854036202 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -1766,27 +1766,29 @@ static int cmp_interleave_pos(const void *a, const = void *b) return cxled_a->pos - cxled_b->pos; } =20 -static int match_switch_decoder_by_range(struct device *dev, - const void *data) +static int match_cxlsd_to_cxled_by_range(struct device *dev, const void *d= ata) { + const struct cxl_endpoint_decoder *cxled =3D data; struct cxl_switch_decoder *cxlsd; - const struct range *r1, *r2 =3D data; - + const struct range *r1, *r2; =20 if (!is_switch_decoder(dev)) return 0; =20 cxlsd =3D to_cxl_switch_decoder(dev); r1 =3D &cxlsd->cxld.hpa_range; + r2 =3D &cxled->cxld.hpa_range; =20 if (is_root_decoder(dev)) return range_contains(r1, r2); return (r1->start =3D=3D r2->start && r1->end =3D=3D r2->end); } =20 -static int find_pos_and_ways(struct cxl_port *port, struct range *range, - int *pos, int *ways) +static int find_pos_and_ways(struct cxl_port *port, + struct cxl_endpoint_decoder *cxled, int *pos, + int *ways) { + struct range *range =3D &cxled->cxld.hpa_range; struct cxl_switch_decoder *cxlsd; struct cxl_port *parent; struct device *dev; @@ -1796,8 +1798,8 @@ static int find_pos_and_ways(struct cxl_port *port, s= truct range *range, if (!parent) return rc; =20 - dev =3D device_find_child(&parent->dev, range, - match_switch_decoder_by_range); + dev =3D device_find_child(&parent->dev, cxled, + match_cxlsd_to_cxled_by_range); if (!dev) { dev_err(port->uport_dev, "failed to find decoder mapping %#llx-%#llx\n", @@ -1883,7 +1885,7 @@ static int cxl_calc_interleave_pos(struct cxl_endpoin= t_decoder *cxled) if (is_cxl_root(iter)) break; =20 - rc =3D find_pos_and_ways(iter, range, &parent_pos, &parent_ways); + rc =3D find_pos_and_ways(iter, cxled, &parent_pos, &parent_ways); if (rc) return rc; =20 @@ -3342,24 +3344,30 @@ static int devm_cxl_add_dax_region(struct cxl_regio= n *cxlr) return rc; } =20 -static int match_decoder_by_range(struct device *dev, const void *data) +static int match_cxlrd_to_cxled_by_range(struct device *dev, const void *d= ata) { - const struct range *r1, *r2 =3D data; - struct cxl_decoder *cxld; + const struct cxl_endpoint_decoder *cxled =3D data; + struct cxl_root_decoder *cxlrd; + const struct range *r1, *r2; =20 - if (!is_switch_decoder(dev)) + if (!is_root_decoder(dev)) return 0; =20 - cxld =3D to_cxl_decoder(dev); - r1 =3D &cxld->hpa_range; + cxlrd =3D to_cxl_root_decoder(dev); + r1 =3D &cxlrd->cxlsd.cxld.hpa_range; + r2 =3D &cxled->cxld.hpa_range; + return range_contains(r1, r2); } =20 static struct cxl_decoder * -cxl_port_find_switch_decoder(struct cxl_port *port, struct range *hpa) +cxl_port_find_root_decoder(struct cxl_port *port, + struct cxl_endpoint_decoder *cxled) { - struct device *cxld_dev =3D device_find_child(&port->dev, hpa, - match_decoder_by_range); + struct device *cxld_dev; + + cxld_dev =3D device_find_child(&port->dev, cxled, + match_cxlrd_to_cxled_by_range); =20 return cxld_dev ? to_cxl_decoder(cxld_dev) : NULL; } @@ -3371,9 +3379,8 @@ cxl_find_root_decoder(struct cxl_endpoint_decoder *cx= led) struct cxl_port *port =3D cxled_to_port(cxled); struct cxl_root *cxl_root __free(put_cxl_root) =3D find_cxl_root(port); struct cxl_decoder *root, *cxld =3D &cxled->cxld; - struct range *hpa =3D &cxld->hpa_range; =20 - root =3D cxl_port_find_switch_decoder(&cxl_root->port, hpa); + root =3D cxl_port_find_root_decoder(&cxl_root->port, cxled); if (!root) { dev_err(cxlmd->dev.parent, "%s:%s no CXL window for range %#llx:%#llx\n", @@ -3385,11 +3392,12 @@ cxl_find_root_decoder(struct cxl_endpoint_decoder *= cxled) return to_cxl_root_decoder(&root->dev); } =20 -static int match_region_by_range(struct device *dev, const void *data) +static int match_region_to_cxled_by_range(struct device *dev, const void *= data) { + const struct cxl_endpoint_decoder *cxled =3D data; + const struct range *r =3D &cxled->cxld.hpa_range; struct cxl_region_params *p; struct cxl_region *cxlr; - const struct range *r =3D data; =20 if (!is_cxl_region(dev)) return 0; @@ -3547,12 +3555,13 @@ static struct cxl_region *construct_region(struct c= xl_root_decoder *cxlrd, } =20 static struct cxl_region * -cxl_find_region_by_range(struct cxl_root_decoder *cxlrd, struct range *hpa) +cxl_find_region_by_range(struct cxl_root_decoder *cxlrd, + struct cxl_endpoint_decoder *cxled) { struct device *region_dev; =20 - region_dev =3D device_find_child(&cxlrd->cxlsd.cxld.dev, hpa, - match_region_by_range); + region_dev =3D device_find_child(&cxlrd->cxlsd.cxld.dev, cxled, + match_region_to_cxled_by_range); if (!region_dev) return NULL; =20 @@ -3561,7 +3570,6 @@ cxl_find_region_by_range(struct cxl_root_decoder *cxl= rd, struct range *hpa) =20 int cxl_add_to_region(struct cxl_endpoint_decoder *cxled) { - struct range *hpa =3D &cxled->cxld.hpa_range; struct cxl_region_params *p; bool attach =3D false; int rc; @@ -3577,7 +3585,7 @@ int cxl_add_to_region(struct cxl_endpoint_decoder *cx= led) */ mutex_lock(&cxlrd->range_lock); struct cxl_region *cxlr __free(put_cxl_region) =3D - cxl_find_region_by_range(cxlrd, hpa); + cxl_find_region_by_range(cxlrd, cxled); if (!cxlr) cxlr =3D construct_region(cxlrd, cxled); mutex_unlock(&cxlrd->range_lock); --=20 2.50.1