drm/exynos: make sure to handle an error case to vm_mmap call
authorInki Dae <inki.dae@samsung.com>
Fri, 14 Jun 2013 08:54:27 +0000 (17:54 +0900)
committerInki Dae <daeinki@gmail.com>
Fri, 28 Jun 2013 12:13:56 +0000 (21:13 +0900)
vm_mmap function returns unsigned long so addr type should be unsigned long.
a pointer or address variable is required to use unsigned long or uint64_t
type for 64bits address support.

So this patch makes sure that addr has unsigned long type and also
exynos_drm_gem_mmap_ioctl returns correct error type.

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
drivers/gpu/drm/exynos/exynos_drm_gem.c

index 5af1478..c3f15e7 100644 (file)
@@ -420,7 +420,7 @@ int exynos_drm_gem_mmap_ioctl(struct drm_device *dev, void *data,
 {
        struct drm_exynos_gem_mmap *args = data;
        struct drm_gem_object *obj;
-       unsigned int addr;
+       unsigned long addr;
 
        if (!(dev->driver->driver_features & DRIVER_GEM)) {
                DRM_ERROR("does not support GEM.\n");
@@ -462,14 +462,14 @@ int exynos_drm_gem_mmap_ioctl(struct drm_device *dev, void *data,
 
        drm_gem_object_unreference(obj);
 
-       if (IS_ERR((void *)addr)) {
+       if (IS_ERR_VALUE(addr)) {
                /* check filp->f_op, filp->private_data are restored */
                if (file_priv->filp->f_op == &exynos_drm_gem_fops) {
                        file_priv->filp->f_op = fops_get(dev->driver->fops);
                        file_priv->filp->private_data = file_priv;
                }
                mutex_unlock(&dev->struct_mutex);
-               return PTR_ERR((void *)addr);
+               return (int)addr;
        }
 
        mutex_unlock(&dev->struct_mutex);