[Beignet] [PATCH 1/2] Ensure that DRM device uses the i915 driver
Yang, Rong R
rong.r.yang at intel.com
Wed Jan 31 08:33:19 UTC 2018
This patch LGTM, thanks.
> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Mark Thompson
> Sent: Wednesday, January 24, 2018 6:52 AM
> To: beignet at lists.freedesktop.org
> Subject: [Beignet] [PATCH 1/2] Ensure that DRM device uses the i915 driver
>
> This avoids calling random ioctl()s and returning nonsensical errors for
> unsupported devices. In particular, loading is much cleaner on setups where the
> driver needs to iterate over multiple devices to find the correct one because the
> Intel graphics device is not the first DRM device.
> ---
> Fixes this sort of spam from every OpenCL-using application:
>
> $ clinfo
> DRM_IOCTL_I915_GEM_APERTURE failed: Invalid argument Assuming 131072kB
> available aperture size.
> May lead to reduced performance or incorrect rendering.
> get chip id failed: -1 [2]
> param: 4, val: 0
> Number of platforms 1
> Platform Name Intel Gen OCL Driver
> Platform Vendor Intel
> Platform Version OpenCL 2.0 beignet 1.4 (git-d1b99a1d)
> Platform Profile FULL_PROFILE
> Platform Extensions cl_khr_global_int32_base_atomics
> cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics
> cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store
> cl_khr_3d_image_writes cl_khr_image2d_from_buffer cl_khr_depth_images
> cl_khr_spir cl_khr_icd cl_intel_accelerator cl_intel_subgroups
> cl_intel_subgroups_short cl_intel_media_block_io cl_intel_planar_yuv
> cl_khr_gl_sharing
> Platform Extensions function suffix Intel
> DRM_IOCTL_I915_GEM_APERTURE failed: Invalid argument Assuming 131072kB
> available aperture size.
> May lead to reduced performance or incorrect rendering.
> get chip id failed: -1 [2]
> param: 4, val: 0
> DRM_IOCTL_I915_GEM_APERTURE failed: Invalid argument Assuming 131072kB
> available aperture size.
> May lead to reduced performance or incorrect rendering.
> get chip id failed: -1 [2]
> param: 4, val: 0
> DRM_IOCTL_I915_GEM_APERTURE failed: Invalid argument Assuming 131072kB
> available aperture size.
> May lead to reduced performance or incorrect rendering.
> get chip id failed: -1 [2]
> param: 4, val: 0
> DRM_IOCTL_I915_GEM_APERTURE failed: Invalid argument Assuming 131072kB
> available aperture size.
> May lead to reduced performance or incorrect rendering.
> get chip id failed: -1 [2]
> param: 4, val: 0
> DRM_IOCTL_I915_GEM_APERTURE failed: Invalid argument Assuming 131072kB
> available aperture size.
> May lead to reduced performance or incorrect rendering.
> get chip id failed: -1 [2]
> param: 4, val: 0
>
> Platform Name Intel Gen OCL Driver
> Number of devices 1
> DRM_IOCTL_I915_GEM_APERTURE failed: Invalid argument Assuming 131072kB
> available aperture size.
> May lead to reduced performance or incorrect rendering.
> get chip id failed: -1 [2]
> param: 4, val: 0
> DRM_IOCTL_I915_GEM_APERTURE failed: Invalid argument Assuming 131072kB
> available aperture size.
> May lead to reduced performance or incorrect rendering.
> get chip id failed: -1 [2]
> param: 4, val: 0
> ...
>
>
> src/intel/intel_driver.c | 30 ++++++++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
> diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c index
> 45719785..10fe3cc8 100644
> --- a/src/intel/intel_driver.c
> +++ b/src/intel/intel_driver.c
> @@ -312,6 +312,26 @@ return ret;
> }
> #endif
>
> +static int
> +intel_driver_check_device(int dev_fd)
> +{
> + // Ensure that this is actually an i915 DRM device.
> + drmVersion *version;
> + int ret;
> + version = drmGetVersion(dev_fd);
> + if (!version) {
> + fprintf(stderr, "drmGetVersion(%d) failed: %s\n", dev_fd, strerror(errno));
> + close(dev_fd);
> + return 0;
> + }
> + ret = !strcmp(version->name, "i915");
> + drmFreeVersion(version);
> + // Don't print an error here if this device is using a different
> +driver,
> + // because we might be iterating over multiple devices looking for a
> + // compatible one.
> + return ret;
> +}
> +
> LOCAL int
> intel_driver_init_master(intel_driver_t *driver, const char* dev_name) { @@ -
> 326,6 +346,11 @@ if (dev_fd == -1) {
> return 0;
> }
>
> +if (!intel_driver_check_device(dev_fd)) {
> + close(dev_fd);
> + return 0;
> +}
> +
> // Check that we're authenticated
> memset(&client, 0, sizeof(drm_client_t)); ret = ioctl(dev_fd,
> DRM_IOCTL_GET_CLIENT, &client); @@ -356,6 +381,11 @@ dev_fd =
> open(dev_name, O_RDWR); if (dev_fd == -1)
> return 0;
>
> +if (!intel_driver_check_device(dev_fd)) {
> + close(dev_fd);
> + return 0;
> +}
> +
> ret = intel_driver_init(driver, dev_fd); driver->need_close = 1;
>
> --
> 2.11.0
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list