Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/exynos: g2d: let exynos_g2d_get_ver_ioctl fail

Currently the DRM_IOCTL_EXYNOS_G2D_GET_VER ioctl always succeeds, even
if no G2D support is available. Let the ioctl fail when this is the
case, so that userspace can accurately probe for G2D support.

This also fixes the exynos tests in libdrm. There 'g2d_init' doesn't
fail when G2D is absent, leading to a segfault later.

Signed-off-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
Signed-off-by: INki Dae <inki.dae@samsung.com>

authored by

Tobias Jakobi and committed by
Inki Dae
ef7ce055 1cd1ea56

+15
+15
drivers/gpu/drm/exynos/exynos_drm_g2d.c
··· 1042 1042 int exynos_g2d_get_ver_ioctl(struct drm_device *drm_dev, void *data, 1043 1043 struct drm_file *file) 1044 1044 { 1045 + struct drm_exynos_file_private *file_priv = file->driver_priv; 1046 + struct exynos_drm_g2d_private *g2d_priv = file_priv->g2d_priv; 1047 + struct device *dev; 1048 + struct g2d_data *g2d; 1045 1049 struct drm_exynos_g2d_get_ver *ver = data; 1050 + 1051 + if (!g2d_priv) 1052 + return -ENODEV; 1053 + 1054 + dev = g2d_priv->dev; 1055 + if (!dev) 1056 + return -ENODEV; 1057 + 1058 + g2d = dev_get_drvdata(dev); 1059 + if (!g2d) 1060 + return -EFAULT; 1046 1061 1047 1062 ver->major = G2D_HW_MAJOR_VER; 1048 1063 ver->minor = G2D_HW_MINOR_VER;