Re: [PATCH] dd: Invoke one probe retry cycle after every initcall level

From: Rafael J. Wysocki
Date: Wed Aug 01 2018 - 17:21:20 EST


On Wed, Aug 1, 2018 at 11:18 PM, <rishabhb@xxxxxxxxxxxxxx> wrote:
> On 2018-07-24 01:24, Rafael J. Wysocki wrote:
>>
>> On Mon, Jul 23, 2018 at 10:22 PM, <rishabhb@xxxxxxxxxxxxxx> wrote:
>>>
>>> On 2018-07-23 04:17, Rafael J. Wysocki wrote:
>>>>
>>>>
>>>> On Thu, Jul 19, 2018 at 11:24 PM, Rishabh Bhatnagar
>>>> <rishabhb@xxxxxxxxxxxxxx> wrote:
>>>>>
>>>>>
>>>>> Drivers that are registered at an initcall level may have to
>>>>> wait until late_init before the probe deferral mechanism can
>>>>> retry their probe functions. It is possible that their
>>>>> dependencies were resolved much earlier, in some cases even
>>>>> before the next initcall level. Invoke one probe retry cycle
>>>>> at every _sync initcall level, allowing these drivers to be
>>>>> probed earlier.
>>>>
>>>>
>>>>
>>>> Can you please say something about the actual use case this is
>>>> expected to address?
>>>
>>>
>>> We have a display driver that depends 3 other devices to be
>>> probed so that it can bring-up the display. Because of dependencies
>>> not being met the deferral mechanism defers the probes for a later time,
>>> even though the dependencies might be met earlier. With this change
>>> display can be brought up much earlier.
>>
>>
>> OK
>>
>> What runlevel brings up the display after the change?
>>
>> Thanks,
>> Rafael
>
> After the change the display can come up after device_initcall level
> itself.
> The above mentioned 3 devices are probed at 0.503253, 0.505210 and 0.523264
> secs.
> Only the first device is probed successfully. With the current
> deferral mechanism the devices get probed again after late_initcall
> at 9.19 and 9.35 secs. So display can only come up after 9.35 secs.
> With this change the devices are re-probed successfully at 0.60 and
> 0.613 secs. Therefore display can come just after 0.613 secs.

OK, so why do you touch the initcall levels earlier than device_?

> This change helps in overall android bootup as well.

How exactly?