summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryce Harrington <bryce@canonical.com>2013-03-19 12:12:44 -0700
committerKeith Packard <keithp@keithp.com>2013-04-08 09:13:05 -0700
commitc31eac647a9ecf0fb20dc98266cadf0ba923ba14 (patch)
tree8d8831451cbd58f636b97b24660b4a3481f251eb
parentd1cc210de8c13f2db9f6f284ecc652305c28801e (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.c20
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;