Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e45ea4d9 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "dd: Invoke one probe retry cycle after every initcall level" into msm-next

parents 682a732b b8d15269
Loading
Loading
Loading
Loading
+27 −6
Original line number Diff line number Diff line
@@ -202,22 +202,43 @@ 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();
	return 0;
}
late_initcall(deferred_probe_initcall);
late_initcall(deferred_probe_enable_fn);

/**
 * device_is_bound() - Check if device is bound to a driver