mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
cxl: Fix match_region_by_range() to use region_res_match_cxl_range()
[ Upstream commitf4d027921c] match_region_by_range() is not using the helper function that also takes extended linear cache size into account when comparing regions. This causes a x2 region to show up as 2 partial incomplete regions rather than a single CXL region with extended linear cache support. Replace the open coded compare logic with the proper helper function for comparison. User visible impact is that when 'cxl list' is issued, no activa CXL region(s) are shown. There may be multiple idle regions present. No actual active CXL region is present in the kernel. [dj: Fix stable address] Fixes:0ec9849b63("acpi/hmat / cxl: Add extended linear cache support for CXL") Cc: stable@vger.kernel.org Reviewed-by: Gregory Price <gourry@gourry.net> Reviewed-by: Alison Schofield <alison.schofield@intel.com> Reviewed-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Dave Jiang <dave.jiang@intel.com> [ constify struct range ] Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
c42f651a76
commit
84c3b52cf6
@@ -831,7 +831,7 @@ static int match_free_decoder(struct device *dev, const void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool region_res_match_cxl_range(const struct cxl_region_params *p,
|
static bool region_res_match_cxl_range(const struct cxl_region_params *p,
|
||||||
struct range *range)
|
const struct range *range)
|
||||||
{
|
{
|
||||||
if (!p->res)
|
if (!p->res)
|
||||||
return false;
|
return false;
|
||||||
@@ -3287,10 +3287,7 @@ static int match_region_by_range(struct device *dev, const void *data)
|
|||||||
p = &cxlr->params;
|
p = &cxlr->params;
|
||||||
|
|
||||||
guard(rwsem_read)(&cxl_rwsem.region);
|
guard(rwsem_read)(&cxl_rwsem.region);
|
||||||
if (p->res && p->res->start == r->start && p->res->end == r->end)
|
return region_res_match_cxl_range(p, r);
|
||||||
return 1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cxl_extended_linear_cache_resize(struct cxl_region *cxlr,
|
static int cxl_extended_linear_cache_resize(struct cxl_region *cxlr,
|
||||||
|
|||||||
Reference in New Issue
Block a user