mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 11:19:37 +00:00
![Grant Likely](/assets/img/avatar_default.png)
Allow drivers to report at probe time that they cannot get all the resources required by the device, and should be retried at a later time. This should completely solve the problem of getting devices initialized in the right order. Right now this is mostly handled by mucking about with initcall ordering which is a complete hack, and doesn't even remotely handle the case where device drivers are in modules. This approach completely sidesteps the issues by allowing driver registration to occur in any order, and any driver can request to be retried after a few more other drivers get probed. v4: - Integrate Manjunath's addition of a separate workqueue - Change -EAGAIN to -EPROBE_DEFER for drivers to trigger deferral - Update comment blocks to reflect how the code really works v3: - Hold off workqueue scheduling until late_initcall so that the bulk of driver probes are complete before we start retrying deferred devices. - Tested with simple use cases. Still needs more testing though. Using it to get rid of the gpio early_initcall madness, or to replace the ASoC internal probe deferral code would be ideal. v2: - added locking so it should no longer be utterly broken in that regard - remove device from deferred list at device_del time. - Still completely untested with any real use case, but has been boot tested. Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Dilan Lee <dilee@nvidia.com> Cc: Manjunath GKondaiah <manjunath.gkondaiah@linaro.org> Cc: Alan Stern <stern@rowland.harvard.edu> Cc: Tony Lindgren <tony@atomide.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Reviewed-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: David Daney <david.daney@cavium.com> Reviewed-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
35 lines
1.3 KiB
C
35 lines
1.3 KiB
C
#ifndef _LINUX_ERRNO_H
|
|
#define _LINUX_ERRNO_H
|
|
|
|
#include <asm/errno.h>
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
/*
|
|
* These should never be seen by user programs. To return one of ERESTART*
|
|
* codes, signal_pending() MUST be set. Note that ptrace can observe these
|
|
* at syscall exit tracing, but they will never be left for the debugged user
|
|
* process to see.
|
|
*/
|
|
#define ERESTARTSYS 512
|
|
#define ERESTARTNOINTR 513
|
|
#define ERESTARTNOHAND 514 /* restart if no handler.. */
|
|
#define ENOIOCTLCMD 515 /* No ioctl command */
|
|
#define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */
|
|
#define EPROBE_DEFER 517 /* Driver requests probe retry */
|
|
|
|
/* Defined for the NFSv3 protocol */
|
|
#define EBADHANDLE 521 /* Illegal NFS file handle */
|
|
#define ENOTSYNC 522 /* Update synchronization mismatch */
|
|
#define EBADCOOKIE 523 /* Cookie is stale */
|
|
#define ENOTSUPP 524 /* Operation is not supported */
|
|
#define ETOOSMALL 525 /* Buffer or request is too small */
|
|
#define ESERVERFAULT 526 /* An untranslatable error occurred */
|
|
#define EBADTYPE 527 /* Type not supported by server */
|
|
#define EJUKEBOX 528 /* Request initiated, but will not complete before timeout */
|
|
#define EIOCBQUEUED 529 /* iocb queued, will get completion event */
|
|
#define EIOCBRETRY 530 /* iocb queued, will trigger a retry */
|
|
|
|
#endif
|
|
|
|
#endif
|