[Beignet] [PATCH 1/3] Ensure that DRM device uses the i915 driver

Yang, Rong R rong.r.yang at intel.com
Mon Feb 5 07:30:56 UTC 2018


The patchset LGTM, pushed, thanks.

> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Mark Thompson
> Sent: Thursday, February 1, 2018 3:58 AM
> To: beignet at lists.freedesktop.org
> Subject: [Beignet] [PATCH 1/3] 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.
> 
> Signed-off-by: Mark Thompson <sw at jkqxz.net>
> ---
>  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