lkml.org 
[lkml]   [2014]   [Jul]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/3] driver core: enable drivers to use deferred probe from init
    On Mon, Jul 28, 2014 at 03:12:11PM +0000, Yuval Mintz wrote:
    > > +static int __driver_probe_device(struct device_driver *drv, struct
    > > +device *dev) {
    > > + if (drv->delay_probe && !dev->init_delayed_probe) {
    > > + dev_info(dev, "Driver %s requests probe deferral on init\n",
    > > + drv->name);
    > > + dev->init_delayed_probe = true;
    > > + driver_deferred_probe_add(dev);
    > > + return -EPROBE_DEFER;
    > > + }
    > > +
    > > + return really_probe(dev, drv);
    > > +}
    >
    > Perhaps this is a silly question, but what guarantees that the deferred probe
    > list will actually be triggered, e.g., in case the delayed device is the last device
    > in the system?

    The dev->init_delayed_probe is used to ensure that we'd add the device to the
    deferred probe list once making this a per device thing if the driver has the
    field delay_probe set to true. This technically also allows this to be a per
    device thing so with some more work we could enable drivers to only enable this
    for specific devices but at this point this did not seem required.

    > [From drivers/base/dd.c - "A successful driver probe will trigger moving all
    > devices from the pending to the active list so that the workqueue will
    > eventually retry them]

    I had not noticed this, thanks for pointing this out, in this case
    if __driver_probe_device() is still used to retrigger a probe it will
    be added back to the deferred list but since dev->init_delayed_probe
    is still false. I checked the original commit that added this feature
    d1c3414c but in the code I see that bus_probe_device(dev) is used and
    I only see the device itself being removed from the deferred probe list,
    nothing else.

    Luis


    \
     
     \ /
      Last update: 2014-07-28 18:21    [W:3.794 / U:0.316 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site