mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 21:59:12 -04:00
UPSTREAM: amba: Retry adding deferred devices at late_initcall
If amba bus devices defer when adding, the amba bus code simply retries adding the devices every 5 seconds. This doesn't work well as it completely unsynchronized with starting the init process which can happen in less than 5 secs. Add a retry during late_initcall. If the amba devices are added, then deferred probe takes over. If the dependencies have not probed at this point, then there's no improvement over previous behavior. To completely solve this, we'd need to retry after every successful probe as deferred probe does. The list_empty() check now happens outside the mutex, but the mutex wasn't necessary in the first place. This needed to use deferred probe instead of fragile initcall ordering on 32-bit VExpress systems where the apb_pclk has a number of probe dependencies (vexpress-sysregs, vexpress-config). Cc: John Stultz <john.stultz@linaro.org> Cc: Saravana Kannan <saravanak@google.com> Cc: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> Cc: Geert Uytterhoeven <geert+renesas@glider.be> Cc: Russell King <linux@armlinux.org.uk> Tested-by: Sudeep Holla <sudeep.holla@arm.com> Reviewed-by: Sudeep Holla <sudeep.holla@arm.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Rob Herring <robh@kernel.org> Change-Id: Ib5260568396e3beb85baf282c68825da80dad392 (cherry picked from commit 039599c92d3b2e73689e8b6e519d653fd4770abb) Bug: 160030772 Signed-off-by: Saravana Kannan <saravanak@google.com>
This commit is contained in:
parent
191e77e387
commit
85d29c4d6e
1 changed files with 11 additions and 3 deletions
|
|
@ -505,7 +505,7 @@ static DECLARE_DELAYED_WORK(deferred_retry_work, amba_deferred_retry_func);
|
|||
|
||||
#define DEFERRED_DEVICE_TIMEOUT (msecs_to_jiffies(5 * 1000))
|
||||
|
||||
static void amba_deferred_retry_func(struct work_struct *dummy)
|
||||
static int amba_deferred_retry(void)
|
||||
{
|
||||
struct deferred_device *ddev, *tmp;
|
||||
|
||||
|
|
@ -521,11 +521,19 @@ static void amba_deferred_retry_func(struct work_struct *dummy)
|
|||
kfree(ddev);
|
||||
}
|
||||
|
||||
mutex_unlock(&deferred_devices_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
late_initcall(amba_deferred_retry);
|
||||
|
||||
static void amba_deferred_retry_func(struct work_struct *dummy)
|
||||
{
|
||||
amba_deferred_retry();
|
||||
|
||||
if (!list_empty(&deferred_devices))
|
||||
schedule_delayed_work(&deferred_retry_work,
|
||||
DEFERRED_DEVICE_TIMEOUT);
|
||||
|
||||
mutex_unlock(&deferred_devices_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue