On Mon, Jun 22, 2020 at 8:49 AM Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> wrote: > > Hi Saravana, > > On Sat, Jun 20, 2020 at 4:33 AM Saravana Kannan <saravanak@xxxxxxxxxx> wrote: > > On Fri, Jun 19, 2020 at 1:07 PM Saravana Kannan <saravanak@xxxxxxxxxx> wrote: > > > I think instead of deferred_probe_work_func() moving the device to the > > > end of the dpm_list, I think the device probing successfully is what > > > should move it to the end of the dpm_list. That way, the dpm_list is > > > actually ordered by when the devices become functional and not the > > > random order in DT or random probe order which can get pretty > > > convoluted with multiple deferred probes. This feels right and will > > > make suspend/resume more robust against DT ordering -- but I'm not > > > sure what other wide ranging impact this has for other platforms. > > > > If you want to play around with a potential fix to test my hypothesis, > > I think it's just adding this one line to driver_bound(): > > ============ > > klist_add_tail(&dev->p->knode_driver, &dev->driver->p->klist_devices); > > device_links_driver_bound(dev); > > +device_pm_move_to_tail(dev); > > > > device_pm_check_callbacks(dev); > > ============ > > Thanks, that seems to fix the issue for me, on both affected systems! > Note that this has quite some impact on the order devices are suspended, > but this seems harmless. > > Will try on more systems later... Thanks for testing. Maybe I should just send that change as a patch and see what Greg/Rafael have to say to that. It's a general fix anyway. So, might as well send it out. -Saravana