Messages in this thread | | | Date | Wed, 8 Mar 2023 01:55:39 +0530 | Subject | Re: [PATCH V6 8/8] soundwire: amd: add pm_prepare callback and pm ops support | From | "Mukunda,Vijendar" <> |
| |
On 07/03/23 20:58, Pierre-Louis Bossart wrote: >> +static int amd_resume_child_device(struct device *dev, void *data) >> +{ >> + struct sdw_slave *slave = dev_to_sdw_dev(dev); >> + int ret; >> + >> + if (!slave->probed) { >> + dev_dbg(dev, "skipping device, no probed driver\n"); >> + return 0; >> + } >> + if (!slave->dev_num_sticky) { >> + dev_dbg(dev, "skipping device, never detected on bus\n"); >> + return 0; >> + } >> + if (!pm_runtime_suspended(dev)) >> + return 0; >> + ret = pm_request_resume(dev); > I still don't get why the test above was needed. It's racy and brings > limited benefits. As explained below thread,
https://lore.kernel.org/lkml/acd3a560-1218-9f1d-06ec-19e4d3d4e2c9@amd.com
Our scenario is multiple peripheral devices are connected over the same link.
In our implementation, device_for_each_child() function invokes amd_resume_child_device callback for each child. When any one of the child device is active, It will break the iteration, which results in failure resuming all child devices.
If we skip , pm_suspended check , it will not resume all peripheral devices when any one of the peripheral device is active. > >> + if (ret < 0) >> + dev_err(dev, "pm_request_resume failed: %d\n", ret); >> + >> + return ret; >> +}
| |