radv: check driver name before calling amdgpu.

This checks the kernel driver name is amdgpu before calling
libdrm_amdgpu.

This avoids the following error:
amdgpu_device_initialize: DRM version is 1.6.0 but this driver is only compatible with 3.x.x

when run on a machine with i915 graphics as well as amdgpu.

Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2016-10-11 15:21:25 +10:00
parent 6215b47648
commit fc28f89157
1 changed files with 16 additions and 0 deletions

View File

@ -32,6 +32,7 @@
#include "radv_private.h"
#include "util/strtod.h"
#include <xf86drm.h>
#include <amdgpu.h>
#include <amdgpu_drm.h>
#include "amdgpu_id.h"
@ -55,6 +56,7 @@ radv_physical_device_init(struct radv_physical_device *device,
const char *path)
{
VkResult result;
drmVersionPtr version;
int fd;
fd = open(path, O_RDWR | O_CLOEXEC);
@ -62,6 +64,20 @@ radv_physical_device_init(struct radv_physical_device *device,
return vk_errorf(VK_ERROR_INCOMPATIBLE_DRIVER,
"failed to open %s: %m", path);
version = drmGetVersion(fd);
if (!version) {
close(fd);
return vk_errorf(VK_ERROR_INCOMPATIBLE_DRIVER,
"failed to get version %s: %m", path);
}
if (strcmp(version->name, "amdgpu")) {
drmFreeVersion(version);
close(fd);
return VK_ERROR_INCOMPATIBLE_DRIVER;
}
drmFreeVersion(version);
device->_loader_data.loaderMagic = ICD_LOADER_MAGIC;
device->instance = instance;
assert(strlen(path) < ARRAY_SIZE(device->path));