Jonathan Cameron wrote: > On Sun, 05 Feb 2023 17:03:02 -0800 > Dan Williams <dan.j.williams@xxxxxxxxx> wrote: > > > Region autodiscovery is the process of kernel creating 'struct > > cxl_region' object to represent active CXL memory ranges it finds > > already active in hardware when the driver loads. Typically this happens > > when platform firmware establishes CXL memory regions and then publishes > > them in the memory map. However, this can also happen in the case of > > kexec-reboot after the kernel has created regions. > > > > In the autodiscovery case the region creation process starts with a > > known endpoint decoder. Refactor attach_target() into a helper that is > > suitable to be called from either sysfs, for runtime region creation, or > > from cxl_port_probe() after it has enumerated all endpoint decoders. > > > > The cxl_port_probe() context is an async device-core probing context, so > > it is not appropriate to allow SIGTERM to interrupt the assembly > > process. Refactor attach_target() to take @cxled and @state as arguments > > where @state indicates whether waiting from the region rwsem is > > interruptible or not. > [..] > > @@ -1418,31 +1418,25 @@ void cxl_decoder_kill_region(struct cxl_endpoint_decoder *cxled) > > up_write(&cxl_region_rwsem); > > } > > > > -static int attach_target(struct cxl_region *cxlr, const char *decoder, int pos) > > +static int attach_target(struct cxl_region *cxlr, > > + struct cxl_endpoint_decoder *cxled, int pos, > > + unsigned int state) > > { > > - struct device *dev; > > - int rc; > > - > > - dev = bus_find_device_by_name(&cxl_bus_type, NULL, decoder); > > - if (!dev) > > - return -ENODEV; > > - > > - if (!is_endpoint_decoder(dev)) { > > - put_device(dev); > > - return -EINVAL; > > - } > > + int rc = 0; > > > > - rc = down_write_killable(&cxl_region_rwsem); > > + if (state == TASK_INTERRUPTIBLE) > > + rc = down_write_killable(&cxl_region_rwsem); > > + else > > + down_write(&cxl_region_rwsem); > > I'd be tempted to do this in two hops for patch readability. First > make the code reorg then follow up with this bit before the use > of it in the next patch. > Sure.