ion: ioctl compatibility with userland using old api
As far as I can tell, flags passed by userland are now used to determine
buffer caching.
Note in ION_IOC_ALLOC_COMPAT we are currently forcing uncached buffer
allocations (needed to make a choice here). This
may need to change.
Signed-off-by: Flemmard <flemmard@gmail.com>
diff --git a/drivers/gpu/ion/ion.c b/drivers/gpu/ion/ion.c
index d005605..e9b3bb3 100644
--- a/drivers/gpu/ion/ion.c
+++ b/drivers/gpu/ion/ion.c
@@ -1322,6 +1322,24 @@
}
break;
}
+ case ION_IOC_ALLOC_COMPAT:
+ {
+ struct ion_allocation_data_compat data;
+
+ if (copy_from_user(&data, (void __user *)arg, sizeof(data)))
+ return -EFAULT;
+ data.handle = ion_alloc(client, data.len, data.align,
+ ion_full_heap_mask, 0);
+
+ if (IS_ERR(data.handle))
+ return PTR_ERR(data.handle);
+
+ if (copy_to_user((void __user *)arg, &data, sizeof(data))) {
+ ion_free(client, data.handle);
+ return -EFAULT;
+ }
+ break;
+ }
case ION_IOC_FREE:
{
struct ion_handle_data data;
@@ -1358,6 +1376,7 @@
break;
}
case ION_IOC_IMPORT:
+ case ION_IOC_IMPORT_COMPAT:
{
struct ion_fd_data data;
int ret = 0;
@@ -1389,15 +1408,19 @@
return dev->custom_ioctl(client, data.cmd, data.arg);
}
case ION_IOC_CLEAN_CACHES:
+ case ION_IOC_CLEAN_CACHES_COMPAT:
return client->dev->custom_ioctl(client,
ION_IOC_CLEAN_CACHES, arg);
case ION_IOC_INV_CACHES:
+ case ION_IOC_INV_CACHES_COMPAT:
return client->dev->custom_ioctl(client,
ION_IOC_INV_CACHES, arg);
case ION_IOC_CLEAN_INV_CACHES:
+ case ION_IOC_CLEAN_INV_CACHES_COMPAT:
return client->dev->custom_ioctl(client,
ION_IOC_CLEAN_INV_CACHES, arg);
case ION_IOC_GET_FLAGS:
+ case ION_IOC_GET_FLAGS_COMPAT:
return client->dev->custom_ioctl(client,
ION_IOC_GET_FLAGS, arg);
default: