Thread (39 messages) 39 messages, 8 authors, 2013-04-09

Re: [PATCH 10/10] drivers: misc: use module_platform_driver_probe()

From: Arnd Bergmann <arnd@arndb.de>
Date: 2013-03-20 11:46:48
Also in: linux-arm-kernel, linux-fbdev, linux-ide, linux-media, lkml

On Wednesday 20 March 2013, Fabio Porcedda wrote:
On Wed, Mar 20, 2013 at 11:20 AM, Arnd Bergmann [off-list ref] wrote:
quoted
On Wednesday 20 March 2013, Fabio Porcedda wrote:
quoted
I think we can check inside the  deferred_probe_work_func()
if the dev->probe function pointer is equal to platform_drv_probe_fail().
I think it's too late by then, because that would only warn if we try to probe
it again, but when platform_driver_probe() does not succeed immediately, it
Maybe you mean "does succeed immediately" ?
I mean in this code (simplified for the sake of discussion)

int __init_or_module platform_driver_probe(struct platform_driver *drv,
                int (*probe)(struct platform_device *))
{
        int retval, code;

        drv->probe = probe;
        retval = code = platform_driver_register(drv);

        drv->probe = NULL;
        if (code == 0 && list_empty(&drv->driver.p->klist_devices.k_list))
                retval = -ENODEV;
        drv->driver.probe = platform_drv_probe_fail;

        if (code != retval)
                platform_driver_unregister(drv);
        return retval;
}

we assume that all devices are bound to drivers during the call to
platform_driver_register, and if the device list is empty afterwards,
we unregister the driver and will never get to the deferred probing
stage.

	Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help