* [PATCH v2 0/1] Fix hmat_adist_nb for CXL
@ 2026-07-16 18:11 alejandro.lucero-palau
2026-07-16 18:11 ` [PATCH v2 1/1] acpi/hmat: preserve hmat_adist_nb notifier block alejandro.lucero-palau
0 siblings, 1 reply; 4+ messages in thread
From: alejandro.lucero-palau @ 2026-07-16 18:11 UTC (permalink / raw)
To: linux-cxl, linux-acpi, rafael; +Cc: Alejandro Lucero
From: Alejandro Lucero <alucerop@amd.com>
v2:
- Add Fixes (Richarg Cheng)
- Change commit as fix for Type2/Type3 (Richar Cheng)
RFC
===
While working on adding CXL Type2 support I found a problem with
register_mt_adistance_algorithm() which is used inside
cxl_region_probe(). It turns out my kernel config had not
CONFIG_MEMORY_HOTPLUG enabled leading to the hmat_adist_nb notifier
block deleted after kernel initialization without doing any notifer
block unregister, leaving the notifier chain unaware of this. A CXL
Type2 driver can be load after kernel initialization and with a kernel
not enabling memory hotplug, the notifier registration crashes if the
released memory from hmat_adist_nb is reused.
I'm not sure but I do not think this can happen for Type3 devices
because the related CXL driver is used only during kernel initialization
if memory hotplug not enabled. Type2, aka CXL accelerator drivers, is
coming and the problem will arise with certainty.
I have contemplated to modify how the identified __meminit and
__meminitdat are defined in linux/init.h, extending the case for being
empty definitions if CONFIG_CXL_MEM=y, but I think it makes sense to
only avoid the use of __meminit for hmat_adist_nb.
FWIW, a Type2 device should not require CONFIG_MEMORY_HOTPLUG and its
memory is currently initialized by the BIOS. Maybe not having memory
hotplug enabled is unusual and even more with CXL, so another option
could be to enable memory hotplug if CXL mem is enabled.
Alejandro Lucero (1):
acpi/hmat: preserve hmat_adist_nb notifier block
drivers/acpi/numa/hmat.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
base-commit: 8cd9520d35a6c38db6567e97dd93b1f11f185dc6
--
2.34.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 1/1] acpi/hmat: preserve hmat_adist_nb notifier block
2026-07-16 18:11 [PATCH v2 0/1] Fix hmat_adist_nb for CXL alejandro.lucero-palau
@ 2026-07-16 18:11 ` alejandro.lucero-palau
2026-07-16 20:27 ` Dave Jiang
0 siblings, 1 reply; 4+ messages in thread
From: alejandro.lucero-palau @ 2026-07-16 18:11 UTC (permalink / raw)
To: linux-cxl, linux-acpi, rafael; +Cc: Alejandro Lucero
From: Alejandro Lucero <alucerop@amd.com>
Remove __meminitdata from hmat_adist_nb declaration preserving it even
when CONFIG_MEMORY_HOTPLUG is not set. Otherwise further notifier
registrations using register_mt_adistance_algorithm() will find a
notifier chain likely corrupted.
This is the case when cxl_region_probe() calls
register_mt_adistance_algorithm() what can happen when CXL regions
are dynamically created at any time from Type3 device(s) or when a Type2
device is initialized at its driver probe.
Fixes: 3718c02dbd4c ("acpi, hmat: calculate abstract distance with HMAT")
Signed-off-by: Alejandro Lucero <alucerop@amd.com>
---
drivers/acpi/numa/hmat.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/acpi/numa/hmat.c b/drivers/acpi/numa/hmat.c
index 9792dc394756..3006789ae31f 100644
--- a/drivers/acpi/numa/hmat.c
+++ b/drivers/acpi/numa/hmat.c
@@ -995,7 +995,7 @@ static int hmat_calculate_adistance(struct notifier_block *self,
return NOTIFY_STOP;
}
-static struct notifier_block hmat_adist_nb __meminitdata = {
+static struct notifier_block hmat_adist_nb = {
.notifier_call = hmat_calculate_adistance,
.priority = 100,
};
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH v2 1/1] acpi/hmat: preserve hmat_adist_nb notifier block
2026-07-16 18:11 ` [PATCH v2 1/1] acpi/hmat: preserve hmat_adist_nb notifier block alejandro.lucero-palau
@ 2026-07-16 20:27 ` Dave Jiang
2026-07-17 0:20 ` Jonathan Cameron
0 siblings, 1 reply; 4+ messages in thread
From: Dave Jiang @ 2026-07-16 20:27 UTC (permalink / raw)
To: alejandro.lucero-palau, linux-cxl, linux-acpi, rafael; +Cc: Alejandro Lucero
On 7/16/26 11:11 AM, alejandro.lucero-palau@amd.com wrote:
> From: Alejandro Lucero <alucerop@amd.com>
>
> Remove __meminitdata from hmat_adist_nb declaration preserving it even
> when CONFIG_MEMORY_HOTPLUG is not set. Otherwise further notifier
> registrations using register_mt_adistance_algorithm() will find a
> notifier chain likely corrupted.
>
> This is the case when cxl_region_probe() calls
> register_mt_adistance_algorithm() what can happen when CXL regions
> are dynamically created at any time from Type3 device(s) or when a Type2
> device is initialized at its driver probe.
>
> Fixes: 3718c02dbd4c ("acpi, hmat: calculate abstract distance with HMAT")
>
> Signed-off-by: Alejandro Lucero <alucerop@amd.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
> ---
> drivers/acpi/numa/hmat.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/acpi/numa/hmat.c b/drivers/acpi/numa/hmat.c
> index 9792dc394756..3006789ae31f 100644
> --- a/drivers/acpi/numa/hmat.c
> +++ b/drivers/acpi/numa/hmat.c
> @@ -995,7 +995,7 @@ static int hmat_calculate_adistance(struct notifier_block *self,
> return NOTIFY_STOP;
> }
>
> -static struct notifier_block hmat_adist_nb __meminitdata = {
> +static struct notifier_block hmat_adist_nb = {
> .notifier_call = hmat_calculate_adistance,
> .priority = 100,
> };
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH v2 1/1] acpi/hmat: preserve hmat_adist_nb notifier block
2026-07-16 20:27 ` Dave Jiang
@ 2026-07-17 0:20 ` Jonathan Cameron
0 siblings, 0 replies; 4+ messages in thread
From: Jonathan Cameron @ 2026-07-17 0:20 UTC (permalink / raw)
To: Dave Jiang
Cc: alejandro.lucero-palau, linux-cxl, linux-acpi, rafael,
Alejandro Lucero
On Thu, 16 Jul 2026 13:27:56 -0700
Dave Jiang <dave.jiang@intel.com> wrote:
> On 7/16/26 11:11 AM, alejandro.lucero-palau@amd.com wrote:
> > From: Alejandro Lucero <alucerop@amd.com>
> >
> > Remove __meminitdata from hmat_adist_nb declaration preserving it even
> > when CONFIG_MEMORY_HOTPLUG is not set. Otherwise further notifier
> > registrations using register_mt_adistance_algorithm() will find a
> > notifier chain likely corrupted.
> >
> > This is the case when cxl_region_probe() calls
> > register_mt_adistance_algorithm() what can happen when CXL regions
> > are dynamically created at any time from Type3 device(s) or when a Type2
> > device is initialized at its driver probe.
> >
> > Fixes: 3718c02dbd4c ("acpi, hmat: calculate abstract distance with HMAT")
> >
This will trip some of the checker scripts that run on various trees.
No blank lines in a commit tag block. I guess who ever picks this up
can tidy that up though rather than needing a v2.
> > Signed-off-by: Alejandro Lucero <alucerop@amd.com>
>
> Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Seems sensible to me.
Reviewed-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
>
>
> > ---
> > drivers/acpi/numa/hmat.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/acpi/numa/hmat.c b/drivers/acpi/numa/hmat.c
> > index 9792dc394756..3006789ae31f 100644
> > --- a/drivers/acpi/numa/hmat.c
> > +++ b/drivers/acpi/numa/hmat.c
> > @@ -995,7 +995,7 @@ static int hmat_calculate_adistance(struct notifier_block *self,
> > return NOTIFY_STOP;
> > }
> >
> > -static struct notifier_block hmat_adist_nb __meminitdata = {
> > +static struct notifier_block hmat_adist_nb = {
> > .notifier_call = hmat_calculate_adistance,
> > .priority = 100,
> > };
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-07-17 0:20 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-16 18:11 [PATCH v2 0/1] Fix hmat_adist_nb for CXL alejandro.lucero-palau
2026-07-16 18:11 ` [PATCH v2 1/1] acpi/hmat: preserve hmat_adist_nb notifier block alejandro.lucero-palau
2026-07-16 20:27 ` Dave Jiang
2026-07-17 0:20 ` Jonathan Cameron
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.