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

Commit ce0cd628 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "dd: Invoke one probe retry cycle after every initcall level"

parents dca9fad1 ed41610d
Loading
Loading
Loading
Loading
+27 −6
Original line number Diff line number Diff line
@@ -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