summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nouveau/nouveau_device.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/nouveau/nouveau_device.c b/nouveau/nouveau_device.c
index c5253914..f450e303 100644
--- a/nouveau/nouveau_device.c
+++ b/nouveau/nouveau_device.c
@@ -26,10 +26,6 @@
#include "nouveau_private.h"
-#if NOUVEAU_DRM_HEADER_PATCHLEVEL != 16
-#error nouveau_drm.h does not match expected patchlevel, update libdrm.
-#endif
-
int
nouveau_device_open_existing(struct nouveau_device **dev, int close,
int fd, drm_context_t ctx)
@@ -42,11 +38,6 @@ nouveau_device_open_existing(struct nouveau_device **dev, int close,
if (!dev || *dev)
return -EINVAL;
- ver = drmGetVersion(fd);
- if (!ver || ver->version_patchlevel != NOUVEAU_DRM_HEADER_PATCHLEVEL)
- return -EINVAL;
- drmFreeVersion(ver);
-
nvdev = calloc(1, sizeof(*nvdev));
if (!nvdev)
return -ENOMEM;
@@ -54,6 +45,18 @@ nouveau_device_open_existing(struct nouveau_device **dev, int close,
nvdev->ctx = ctx;
nvdev->needs_close = close;
+ ver = drmGetVersion(fd);
+ if (!ver)
+ return -EINVAL;
+
+ if ((ver->version_major == 0 && ver->version_patchlevel != 16) &&
+ ver->version_major != 1) {
+ nouveau_device_close((void *)&nvdev);
+ return -EINVAL;
+ }
+
+ drmFreeVersion(ver);
+
ret = nouveau_device_get_param(&nvdev->base,
NOUVEAU_GETPARAM_VM_VRAM_BASE, &value);
if (ret) {