lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Mon, 23 Jul 2018 13:22:50 -0700
From:   rishabhb@...eaurora.org
To:     "Rafael J. Wysocki" <rafael@...nel.org>
Cc:     Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
        ckadabi@...eaurora.org, tsoni@...eaurora.org,
        Vikram Mulukutla <markivx@...eaurora.org>, rjwysocki@...il.com
Subject: Re: [PATCH] dd: Invoke one probe retry cycle after every initcall
 level

On 2018-07-23 04:17, Rafael J. Wysocki wrote:
> On Thu, Jul 19, 2018 at 11:24 PM, Rishabh Bhatnagar
> <rishabhb@...eaurora.org> 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.
> 
>> Signed-off-by: Vikram Mulukutla <markivx@...eaurora.org>
>> Signed-off-by: Rishabh Bhatnagar <rishabhb@...eaurora.org>
>> ---
>>  drivers/base/dd.c | 33 +++++++++++++++++++++++++++------
>>  1 file changed, 27 insertions(+), 6 deletions(-)
>> 
>> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
>> index 1435d72..e6a6821 100644
>> --- a/drivers/base/dd.c
>> +++ b/drivers/base/dd.c
>> @@ -224,23 +224,44 @@ void device_unblock_probing(void)
>>         driver_deferred_probe_trigger();
>>  }
>> 
>> +static void enable_trigger_defer_cycle(void)
>> +{
>> +       driver_deferred_probe_enable = true;
>> +       driver_deferred_probe_trigger();
>> +       /*
>> +        * Sort as many dependencies as possible before the next 
>> initcall
>> +        * level
>> +        */
>> +       flush_work(&deferred_probe_work);
>> +}
>> +
>>  /**
>>   * deferred_probe_initcall() - Enable probing of deferred devices
>>   *
>>   * We don't want to get in the way when the bulk of drivers are 
>> getting probed.
>>   * Instead, this initcall makes sure that deferred probing is delayed 
>> until
>> - * late_initcall time.
>> + * all the registered initcall functions at a particular level are 
>> completed.
>> + * This function is invoked at every *_initcall_sync level.
>>   */
>>  static int deferred_probe_initcall(void)
>>  {
>> -       driver_deferred_probe_enable = true;
>> -       driver_deferred_probe_trigger();
>> -       /* Sort as many dependencies as possible before exiting 
>> initcalls */
>> -       flush_work(&deferred_probe_work);
>> +       enable_trigger_defer_cycle();
>> +       driver_deferred_probe_enable = false;
>> +       return 0;
>> +}
>> +arch_initcall_sync(deferred_probe_initcall);
>> +subsys_initcall_sync(deferred_probe_initcall);
>> +fs_initcall_sync(deferred_probe_initcall);
>> +device_initcall_sync(deferred_probe_initcall);
>> +
>> +static int deferred_probe_enable_fn(void)
>> +{
>> +       /* Enable deferred probing for all time */
>> +       enable_trigger_defer_cycle();
>>         initcalls_done = true;
>>         return 0;
>>  }
>> -late_initcall(deferred_probe_initcall);
>> +late_initcall(deferred_probe_enable_fn);
>> 
>>  /**
>>   * device_is_bound() - Check if device is bound to a driver
>> --
>> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora 
>> Forum,
>> a Linux Foundation Collaborative Project

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ