On 12/11/25 08:55AM, Dave Jiang wrote:



<snip>

During cxl_pci_probe() we call devm_cxl_add_memdev(struct cxl_memdev_ops *ops)
where function pointer as ops gets registered which gets called in 
cxl_mem_probe()
using cxlmd->ops->probe()

The probe callback runs after the port topology is successfully attached for
the given memdev.

So to use this infra we have to pass cxl_region_discovery() as ops parameter
of devm_cxl_add_memdev() getting called from cxl_pci_probe().
 
In this patch-set cxl_region_discovery() signature is different from 
cxlmd->ops->probe()

   {{{
    void cxl_region_discovery(struct cxl_port *port)
    {
            device_for_each_child(&port->dev, NULL, discover_region);
    }

    struct cxl_memdev_ops {
            int (*probe)(struct cxl_memdev *cxlmd);
    };
   }}}

Even after changing the signature of cxl_region_discovery() as per 
cxlmd->ops->probe()
may create problem as when the ops->probe() fails, then it will halts the probe 
sequence
of cxl_pci_probe()

It is because discover_region() may fail if two memdevs are participating into 
one region

While discover_region() may fail, the return value is ignored. The current code 
disregards failures from device_for_each_child(). And also above, 
cxl_region_discovery() returns void. So I don't follow how ops->probe() would 
fail if we ignore errors from discover_region().

DJ

Hi Dave,

Yes, you are correct. We can just change signature of cxl_region_discovery() as 
per
cxlmd->ops->probe(), anyway we are ignoring errors from discover_region().
With this change we can directly register cxl_region_discovery() with
devm_cxl_add_memdev(struct cxl_memdev_ops *ops) during pci_probe() using Dan's 
Infra.

I will use this new infra for region auto-assembling and share the v4 series 
shortly.


Regards,
Neeraj


Reply via email to