* [PATCH v3] cxl/test: Enforce PMD alignment for volatile mock regions
@ 2026-05-22 5:44 Richard Cheng
2026-05-26 23:21 ` Alison Schofield
0 siblings, 1 reply; 4+ messages in thread
From: Richard Cheng @ 2026-05-22 5:44 UTC (permalink / raw)
To: dave
Cc: jonathan.cameron, dave.jiang, alison.schofield, vishal.l.verma,
ira.weiny, dan.j.williams, fabio.m.de.francesco, rrichter,
ming.li, linux-cxl, linux-kernel, newtonl, kristinc, kaihengf,
kobak, Richard Cheng
cxl_test allocates synthetic CFMWS HPA windows from a gen_pool with
SZ_256M alignment. On arm64 with CONFIG_ARM64_64K_PAGES=y and
CONFIG_PGTABLE_LEVELS=3, PMD_SIZE is 512M, so every CXL region carved
from a volatile window inherits a non-PMD-aligned start, and
cxl_dax_region_probe() -> alloc_dax_region() fails:
"""
cxl_dax_region dax_region1: probe with driver cxl_dax_region failed
with error -12
"""
Enforce that every volatile mock CFMWS is PMD-aligned in both start and
size
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Acked-by: Kai-Heng Feng <kaihengf@nvidia.com>
Signed-off-by: Richard Cheng <icheng@nvidia.com>
---
Changelog:
v2->v3:
- Correct hunk headers
- Add base commit SHA
v1->v2:
- Reframe from "fix start alignment" to "enforce PMD invariant for
volatile CFMWS"
- Bump cfmws5.window_size to max(SZ_256M, PMD_SIZE)
- Gate populate_cedt() alignment on
ACPI_CEDT_CFMWS_RESTRICT_VOLATILE so PMEM windows stay at SZ_256M
- Add BUILD_BUG_ON for MOCK_AUTO_REGION_SIZE_DEFAULT v.s. PMD_SIZE
in cxl_test_init()
Best regards,
Richard Cheng.
---
tools/testing/cxl/test/cxl.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c
index 418669927fb0..7a1105f9a0bb 100644
--- a/tools/testing/cxl/test/cxl.c
+++ b/tools/testing/cxl/test/cxl.c
@@ -318,7 +318,7 @@ static struct {
.restrictions = ACPI_CEDT_CFMWS_RESTRICT_HOSTONLYMEM |
ACPI_CEDT_CFMWS_RESTRICT_VOLATILE,
.qtg_id = FAKE_QTG_ID,
- .window_size = SZ_256M,
+ .window_size = SZ_256M > PMD_SIZE ? SZ_256M : PMD_SIZE,
},
.target = { 3 },
},
@@ -495,9 +495,12 @@ static int populate_cedt(void)
for (i = cfmws_start; i <= cfmws_end; i++) {
struct acpi_cedt_cfmws *window = mock_cfmws[i];
+ int align = SZ_256M;
cfmws_elc_update(window, i);
- res = alloc_mock_res(window->window_size, SZ_256M);
+ if (window->restrictions & ACPI_CEDT_CFMWS_RESTRICT_VOLATILE)
+ align = max_t(int, SZ_256M, PMD_SIZE);
+ res = alloc_mock_res(window->window_size, align);
if (!res)
return -ENOMEM;
window->base_hpa = res->range.start;
@@ -1826,6 +1829,8 @@ static __init int cxl_test_init(void)
int rc, i;
struct range mappable;
+ BUILD_BUG_ON(!IS_ALIGNED(MOCK_AUTO_REGION_SIZE_DEFAULT, PMD_SIZE));
+
cxl_acpi_test();
cxl_core_test();
cxl_mem_test();
base-commit: 6779b50faa562e6cca1aa6a4649a4d764c6c7e28
--
2.43.0
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH v3] cxl/test: Enforce PMD alignment for volatile mock regions 2026-05-22 5:44 [PATCH v3] cxl/test: Enforce PMD alignment for volatile mock regions Richard Cheng @ 2026-05-26 23:21 ` Alison Schofield 2026-05-27 4:08 ` Richard Cheng 0 siblings, 1 reply; 4+ messages in thread From: Alison Schofield @ 2026-05-26 23:21 UTC (permalink / raw) To: Richard Cheng Cc: dave, jonathan.cameron, dave.jiang, vishal.l.verma, ira.weiny, dan.j.williams, fabio.m.de.francesco, rrichter, ming.li, linux-cxl, linux-kernel, newtonl, kristinc, kaihengf, kobak On Fri, May 22, 2026 at 01:44:57PM +0800, Richard Cheng wrote: > cxl_test allocates synthetic CFMWS HPA windows from a gen_pool with > SZ_256M alignment. On arm64 with CONFIG_ARM64_64K_PAGES=y and > CONFIG_PGTABLE_LEVELS=3, PMD_SIZE is 512M, so every CXL region carved > from a volatile window inherits a non-PMD-aligned start, and > cxl_dax_region_probe() -> alloc_dax_region() fails: > > """ > cxl_dax_region dax_region1: probe with driver cxl_dax_region failed > with error -12 > """ > > Enforce that every volatile mock CFMWS is PMD-aligned in both start and > size > > Reviewed-by: Dave Jiang <dave.jiang@intel.com> > Acked-by: Kai-Heng Feng <kaihengf@nvidia.com> > Signed-off-by: Richard Cheng <icheng@nvidia.com> > --- > Changelog: > > v2->v3: > - Correct hunk headers > - Add base commit SHA > > v1->v2: > - Reframe from "fix start alignment" to "enforce PMD invariant for > volatile CFMWS" > - Bump cfmws5.window_size to max(SZ_256M, PMD_SIZE) > - Gate populate_cedt() alignment on > ACPI_CEDT_CFMWS_RESTRICT_VOLATILE so PMEM windows stay at SZ_256M > - Add BUILD_BUG_ON for MOCK_AUTO_REGION_SIZE_DEFAULT v.s. PMD_SIZE > in cxl_test_init() > > Best regards, > Richard Cheng. > --- > tools/testing/cxl/test/cxl.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c > index 418669927fb0..7a1105f9a0bb 100644 > --- a/tools/testing/cxl/test/cxl.c > +++ b/tools/testing/cxl/test/cxl.c > @@ -318,7 +318,7 @@ static struct { > .restrictions = ACPI_CEDT_CFMWS_RESTRICT_HOSTONLYMEM | > ACPI_CEDT_CFMWS_RESTRICT_VOLATILE, > .qtg_id = FAKE_QTG_ID, > - .window_size = SZ_256M, > + .window_size = SZ_256M > PMD_SIZE ? SZ_256M : PMD_SIZE, Why not this: max_t(resource_size_t, SZ_256M, PMD_SIZE) > }, > .target = { 3 }, > }, > @@ -495,9 +495,12 @@ static int populate_cedt(void) > > for (i = cfmws_start; i <= cfmws_end; i++) { > struct acpi_cedt_cfmws *window = mock_cfmws[i]; > + int align = SZ_256M; > > cfmws_elc_update(window, i); > - res = alloc_mock_res(window->window_size, SZ_256M); > + if (window->restrictions & ACPI_CEDT_CFMWS_RESTRICT_VOLATILE) > + align = max_t(int, SZ_256M, PMD_SIZE); > + res = alloc_mock_res(window->window_size, align); > if (!res) > return -ENOMEM; > window->base_hpa = res->range.start; > @@ -1826,6 +1829,8 @@ static __init int cxl_test_init(void) > int rc, i; > struct range mappable; > > + BUILD_BUG_ON(!IS_ALIGNED(MOCK_AUTO_REGION_SIZE_DEFAULT, PMD_SIZE)); The rule we need to enforce is tha the actual auto region size is PMD aligned, not the default definition. So I think this needs to be a runtime check of IS_ALIGNED(mock_auto_region_size, PMD_SIZE). -- Alison > + > cxl_acpi_test(); > cxl_core_test(); > cxl_mem_test(); > > base-commit: 6779b50faa562e6cca1aa6a4649a4d764c6c7e28 > -- > 2.43.0 > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3] cxl/test: Enforce PMD alignment for volatile mock regions 2026-05-26 23:21 ` Alison Schofield @ 2026-05-27 4:08 ` Richard Cheng 2026-05-27 5:48 ` Alison Schofield 0 siblings, 1 reply; 4+ messages in thread From: Richard Cheng @ 2026-05-27 4:08 UTC (permalink / raw) To: Alison Schofield Cc: dave, jonathan.cameron, dave.jiang, vishal.l.verma, ira.weiny, dan.j.williams, fabio.m.de.francesco, rrichter, ming.li, linux-cxl, linux-kernel, newtonl, kristinc, kaihengf, kobak On Tue, May 26, 2026 at 04:21:30PM +0800, Alison Schofield wrote: > On Fri, May 22, 2026 at 01:44:57PM +0800, Richard Cheng wrote: > > cxl_test allocates synthetic CFMWS HPA windows from a gen_pool with > > SZ_256M alignment. On arm64 with CONFIG_ARM64_64K_PAGES=y and > > CONFIG_PGTABLE_LEVELS=3, PMD_SIZE is 512M, so every CXL region carved > > from a volatile window inherits a non-PMD-aligned start, and > > cxl_dax_region_probe() -> alloc_dax_region() fails: > > > > """ > > cxl_dax_region dax_region1: probe with driver cxl_dax_region failed > > with error -12 > > """ > > > > Enforce that every volatile mock CFMWS is PMD-aligned in both start and > > size > > > > Reviewed-by: Dave Jiang <dave.jiang@intel.com> > > Acked-by: Kai-Heng Feng <kaihengf@nvidia.com> > > Signed-off-by: Richard Cheng <icheng@nvidia.com> > > --- > > Changelog: > > > > v2->v3: > > - Correct hunk headers > > - Add base commit SHA > > > > v1->v2: > > - Reframe from "fix start alignment" to "enforce PMD invariant for > > volatile CFMWS" > > - Bump cfmws5.window_size to max(SZ_256M, PMD_SIZE) > > - Gate populate_cedt() alignment on > > ACPI_CEDT_CFMWS_RESTRICT_VOLATILE so PMEM windows stay at SZ_256M > > - Add BUILD_BUG_ON for MOCK_AUTO_REGION_SIZE_DEFAULT v.s. PMD_SIZE > > in cxl_test_init() > > > > Best regards, > > Richard Cheng. > > --- > > tools/testing/cxl/test/cxl.c | 9 +++++++-- > > 1 file changed, 7 insertions(+), 2 deletions(-) > > > > diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c > > index 418669927fb0..7a1105f9a0bb 100644 > > --- a/tools/testing/cxl/test/cxl.c > > +++ b/tools/testing/cxl/test/cxl.c > > @@ -318,7 +318,7 @@ static struct { > > .restrictions = ACPI_CEDT_CFMWS_RESTRICT_HOSTONLYMEM | > > ACPI_CEDT_CFMWS_RESTRICT_VOLATILE, > > .qtg_id = FAKE_QTG_ID, > > - .window_size = SZ_256M, > > + .window_size = SZ_256M > PMD_SIZE ? SZ_256M : PMD_SIZE, > > Why not this: max_t(resource_size_t, SZ_256M, PMD_SIZE) > Hi Alison, Thanks for the feedback, but I doubt this will work. "max_t()" expands to a statement expression, which isn't a constant expression so it can't be used in this file-scope static initializer. I did the change and compile, the error is """ include/linux/minmax.h:86:9: error: braced-group within expression allowed only inside a function 86 | ({ type ux = (x); type uy = (y); __cmp(op, ux, uy); }) | ^ test/cxl.c:295:40: note: in expansion of macro 'max_t' 295 | .window_size = max_t(resource_size_t, SZ_256M, PMD_SIZE), """ So I don't think this approach works, I would like to stick to ternary form if that's ok for you. > > > }, > > .target = { 3 }, > > }, > > @@ -495,9 +495,12 @@ static int populate_cedt(void) > > > > for (i = cfmws_start; i <= cfmws_end; i++) { > > struct acpi_cedt_cfmws *window = mock_cfmws[i]; > > + int align = SZ_256M; > > > > cfmws_elc_update(window, i); > > - res = alloc_mock_res(window->window_size, SZ_256M); > > + if (window->restrictions & ACPI_CEDT_CFMWS_RESTRICT_VOLATILE) > > + align = max_t(int, SZ_256M, PMD_SIZE); > > + res = alloc_mock_res(window->window_size, align); > > if (!res) > > return -ENOMEM; > > window->base_hpa = res->range.start; > > @@ -1826,6 +1829,8 @@ static __init int cxl_test_init(void) > > int rc, i; > > struct range mappable; > > > > + BUILD_BUG_ON(!IS_ALIGNED(MOCK_AUTO_REGION_SIZE_DEFAULT, PMD_SIZE)); > > The rule we need to enforce is tha the actual auto region size is > PMD aligned, not the default definition. So I think this needs to > be a runtime check of IS_ALIGNED(mock_auto_region_size, PMD_SIZE). > > -- Alison > Thanks for the catch, I'll fix this and send a v4 to make it runtime check. Do you prefer WARN_ON_ONCE() to be ammend or no? I mean """ if (!IS_ALIGNED(mock_auto_region_size, PMD_SIZE)) return -EINVAL; """ or """ if (WARN_ON_ONCE(!IS_ALIGNED(mock_auto_region_size, PMD_SIZE))) return -EINVAL; """ Which one do you prefer ? or any other idea ? please let me know and I'll make the change. Best regards, Richard Cheng. > > + > > cxl_acpi_test(); > > cxl_core_test(); > > cxl_mem_test(); > > > > base-commit: 6779b50faa562e6cca1aa6a4649a4d764c6c7e28 > > -- > > 2.43.0 > > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3] cxl/test: Enforce PMD alignment for volatile mock regions 2026-05-27 4:08 ` Richard Cheng @ 2026-05-27 5:48 ` Alison Schofield 0 siblings, 0 replies; 4+ messages in thread From: Alison Schofield @ 2026-05-27 5:48 UTC (permalink / raw) To: Richard Cheng Cc: dave, jic23, dave.jiang, vishal.l.verma, iweiny, djbw, fabio.m.de.francesco, rrichter, ming.li, linux-cxl, linux-kernel, newtonl, kristinc, kaihengf, kobak On Wed, May 27, 2026 at 12:08:07PM +0800, Richard Cheng wrote: > On Tue, May 26, 2026 at 04:21:30PM +0800, Alison Schofield wrote: > > On Fri, May 22, 2026 at 01:44:57PM +0800, Richard Cheng wrote: snip > > > diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c > > > index 418669927fb0..7a1105f9a0bb 100644 > > > --- a/tools/testing/cxl/test/cxl.c > > > +++ b/tools/testing/cxl/test/cxl.c > > > @@ -318,7 +318,7 @@ static struct { > > > .restrictions = ACPI_CEDT_CFMWS_RESTRICT_HOSTONLYMEM | > > > ACPI_CEDT_CFMWS_RESTRICT_VOLATILE, > > > .qtg_id = FAKE_QTG_ID, > > > - .window_size = SZ_256M, > > > + .window_size = SZ_256M > PMD_SIZE ? SZ_256M : PMD_SIZE, > > > > Why not this: max_t(resource_size_t, SZ_256M, PMD_SIZE) > > > > Hi Alison, > > Thanks for the feedback, but I doubt this will work. > "max_t()" expands to a statement expression, which isn't a constant expression so it can't be used in this file-scope static initializer. > > I did the change and compile, the error is > """ > include/linux/minmax.h:86:9: error: braced-group within expression > allowed only inside a function > 86 | ({ type ux = (x); type uy = (y); __cmp(op, ux, uy); }) > | ^ > test/cxl.c:295:40: note: in expansion of macro 'max_t' > 295 | .window_size = max_t(resource_size_t, SZ_256M, PMD_SIZE), > """ > > So I don't think this approach works, I would like to stick to ternary form if that's ok for you. Sounds good, and right. Thanks for the explanation. > > > + BUILD_BUG_ON(!IS_ALIGNED(MOCK_AUTO_REGION_SIZE_DEFAULT, PMD_SIZE)); > > > > The rule we need to enforce is tha the actual auto region size is > > PMD aligned, not the default definition. So I think this needs to > > be a runtime check of IS_ALIGNED(mock_auto_region_size, PMD_SIZE). > > > > -- Alison > > > > Thanks for the catch, I'll fix this and send a v4 to make it runtime check. > > Do you prefer WARN_ON_ONCE() to be ammend or no? I mean > > """ > if (!IS_ALIGNED(mock_auto_region_size, PMD_SIZE)) > return -EINVAL; > """ > or > """ > if (WARN_ON_ONCE(!IS_ALIGNED(mock_auto_region_size, PMD_SIZE))) > return -EINVAL; > """ > > Which one do you prefer ? or any other idea ? please let me know and I'll make the change. I don't think we need the backtrace of warn, how about this: if (!IS_ALIGNED(mock_auto_region_size, PMD_SIZE)) { pr_err_once("mock_auto_region_size %d must be PMD-aligned\n", mock_auto_region_size); return -EINVAL; } > > Best regards, > Richard Cheng. > > > > + > > > cxl_acpi_test(); > > > cxl_core_test(); > > > cxl_mem_test(); > > > > > > base-commit: 6779b50faa562e6cca1aa6a4649a4d764c6c7e28 > > > -- > > > 2.43.0 > > > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-05-27 5:49 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-05-22 5:44 [PATCH v3] cxl/test: Enforce PMD alignment for volatile mock regions Richard Cheng 2026-05-26 23:21 ` Alison Schofield 2026-05-27 4:08 ` Richard Cheng 2026-05-27 5:48 ` Alison Schofield
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®