On 12/11/25 08:55AM, Dave Jiang wrote: > > >> 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