diff options
author | Bryce Harrington <bryce@canonical.com> | 2013-03-19 12:12:44 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2013-04-08 09:13:05 -0700 |
commit | c31eac647a9ecf0fb20dc98266cadf0ba923ba14 (patch) | |
tree | 8d8831451cbd58f636b97b24660b4a3481f251eb | |
parent | d1cc210de8c13f2db9f6f284ecc652305c28801e (diff) |
xfree86: Keep trying to set interface on drm for 2 seconds.
And if we've had to delay booting due to not being able to set the
interface, fess up.
Signed-off-by: Bryce Harrington <bryce@canonical.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | hw/xfree86/os-support/linux/lnx_platform.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/hw/xfree86/os-support/linux/lnx_platform.c b/hw/xfree86/os-support/linux/lnx_platform.c index 3ae2db1cf..10c8ecf58 100644 --- a/hw/xfree86/os-support/linux/lnx_platform.c +++ b/hw/xfree86/os-support/linux/lnx_platform.c @@ -26,16 +26,26 @@ get_drm_info(struct OdevAttributes *attribs, char *path) char *buf; int fd; int err = 0; + int tries = 0; fd = open(path, O_RDWR, O_CLOEXEC); if (fd == -1) return FALSE; - sv.drm_di_major = 1; - sv.drm_di_minor = 4; - sv.drm_dd_major = -1; /* Don't care */ - sv.drm_dd_minor = -1; /* Don't care */ - err = drmSetInterfaceVersion(fd, &sv); + while (tries++ < 200) { + sv.drm_di_major = 1; + sv.drm_di_minor = 4; + sv.drm_dd_major = -1; /* Don't care */ + sv.drm_dd_minor = -1; /* Don't care */ + + err = drmSetInterfaceVersion(fd, &sv); + if (!err) { + if (tries > 1) + LogMessage(X_INFO, "setversion 1.4 succeeded on try #%d\n", tries); + break; + } + usleep(10000); + } if (err) { ErrorF("setversion 1.4 failed: %s\n", strerror(-err)); goto out; |