Re: [PATCH v2] dax/bus: Upgrade resource conflict message to dev_err() in alloc_dax_region()

From: Richard Cheng

Date: Tue May 19 2026 - 19:28:17 EST


On Tue, May 19, 2026 at 12:31:12PM +0800, Jonathan Cameron wrote:
> On Tue, 19 May 2026 12:18:32 +0200
> Tomasz Wolski <tomasz.wolski@xxxxxxxxxxx> wrote:
>
> > The dax_region resource conflict in alloc_dax_region() indicates a
> > serious configuration problem — two subsystems (e.g. dax_hmem and
> > dax_cxl) are attempting to register overlapping address ranges. This is
> > not a transient or debug-level condition; it represents a genuine
> > resource conflict that an administrator needs to be aware of.
> >
> > Switch from request_resource() + dev_dbg() to
> > request_resource_conflict() + dev_err() so that the conflict is visible
> > by default and the colliding resource is identified in the message.
> >
> > Suggested-by: Dan Williams <dan.j.williams@xxxxxxxxx>
> > Link: https://lore.kernel.org/linux-cxl/69c1a8d1c0fa9_7ee3100a1@dwillia2-mobl4.notmuch/
> > Signed-off-by: Tomasz Wolski <tomasz.wolski@xxxxxxxxxxx>
> Seems reasonable to me
> Reviewed-by: Jonathan Cameron <jic23@xxxxxxxxxx>

Reviewed-by: Richard Cheng <icheng@xxxxxxxxxx>

Best regards,
Richard Cheng.

> > ---
> > drivers/dax/bus.c | 11 ++++++-----
> > 1 file changed, 6 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
> > index 68437c05e21d..66413c6c2ba0 100644
> > --- a/drivers/dax/bus.c
> > +++ b/drivers/dax/bus.c
> > @@ -637,7 +637,7 @@ struct dax_region *alloc_dax_region(struct device *parent, int region_id,
> > unsigned long flags)
> > {
> > struct dax_region *dax_region;
> > - int rc;
> > + struct resource *conflict;
> >
> > /*
> > * The DAX core assumes that it can store its private data in
> > @@ -670,10 +670,11 @@ struct dax_region *alloc_dax_region(struct device *parent, int region_id,
> > .flags = IORESOURCE_MEM | flags,
> > };
> >
> > - rc = request_resource(&dax_regions, &dax_region->res);
> > - if (rc) {
> > - dev_dbg(parent, "dax_region resource conflict for %pR\n",
> > - &dax_region->res);
> > + conflict = request_resource_conflict(&dax_regions, &dax_region->res);
> > + if (conflict) {
> > + dev_err(parent,
> > + "dax_region: can't claim %pR: address conflict with %s %pR\n",
> > + &dax_region->res, conflict->name, conflict);
> > goto err_res;
> > }
> >
>