]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cxl: Adjust offset calculation for poison injection
authorDave Jiang <dave.jiang@intel.com>
Fri, 31 Oct 2025 17:32:24 +0000 (10:32 -0700)
committerDave Jiang <dave.jiang@intel.com>
Fri, 7 Nov 2025 16:22:10 +0000 (09:22 -0700)
The HPA to DPA translation for poison injection assumes that the
base address starts from where the CXL region begins. When the
extended linear cache is active, the offset can be within the DRAM
region. Adjust the offset so that it correctly reflects the offset
within the CXL region.

[ dj: Add fixes tag from Alison ]

Fixes: c3dd67681c70 ("cxl/region: Add inject and clear poison by region offset")
Link: https://patch.msgid.link/20251031173224.3537030-5-dave.jiang@intel.com
Reviewed-by: Alison Schofield <alison.schofield@intel.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
drivers/cxl/core/region.c

index b06fee1978ba468e9e2a9bb63148d286c796e288..41b64d871c5a1ea2638aef2976234d235ce4f098 100644 (file)
@@ -3702,6 +3702,7 @@ static int cxl_region_debugfs_poison_inject(void *data, u64 offset)
        if (validate_region_offset(cxlr, offset))
                return -EINVAL;
 
+       offset -= cxlr->params.cache_size;
        rc = region_offset_to_dpa_result(cxlr, offset, &result);
        if (rc || !result.cxlmd || result.dpa == ULLONG_MAX) {
                dev_dbg(&cxlr->dev,
@@ -3734,6 +3735,7 @@ static int cxl_region_debugfs_poison_clear(void *data, u64 offset)
        if (validate_region_offset(cxlr, offset))
                return -EINVAL;
 
+       offset -= cxlr->params.cache_size;
        rc = region_offset_to_dpa_result(cxlr, offset, &result);
        if (rc || !result.cxlmd || result.dpa == ULLONG_MAX) {
                dev_dbg(&cxlr->dev,