staging: android: ion: Merge ion-ioctl.c into ion.c
The file ion-ioctl.c is now much to small and tightly integrated with the main ion.c file to justify keeping it separate. Merge this file. Signed-off-by: Andrew F. Davis <afd@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2fbe1707ba
commit
4514e79e5a
@ -1,5 +1,5 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
obj-$(CONFIG_ION) += ion.o ion-ioctl.o ion_heap.o
|
obj-$(CONFIG_ION) += ion.o ion_heap.o
|
||||||
obj-$(CONFIG_ION_SYSTEM_HEAP) += ion_system_heap.o ion_page_pool.o
|
obj-$(CONFIG_ION_SYSTEM_HEAP) += ion_system_heap.o ion_page_pool.o
|
||||||
obj-$(CONFIG_ION_CARVEOUT_HEAP) += ion_carveout_heap.o
|
obj-$(CONFIG_ION_CARVEOUT_HEAP) += ion_carveout_heap.o
|
||||||
obj-$(CONFIG_ION_CHUNK_HEAP) += ion_chunk_heap.o
|
obj-$(CONFIG_ION_CHUNK_HEAP) += ion_chunk_heap.o
|
||||||
|
@ -1,86 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2011 Google, Inc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/file.h>
|
|
||||||
#include <linux/fs.h>
|
|
||||||
#include <linux/uaccess.h>
|
|
||||||
|
|
||||||
#include "ion.h"
|
|
||||||
|
|
||||||
union ion_ioctl_arg {
|
|
||||||
struct ion_allocation_data allocation;
|
|
||||||
struct ion_heap_query query;
|
|
||||||
};
|
|
||||||
|
|
||||||
static int validate_ioctl_arg(unsigned int cmd, union ion_ioctl_arg *arg)
|
|
||||||
{
|
|
||||||
switch (cmd) {
|
|
||||||
case ION_IOC_HEAP_QUERY:
|
|
||||||
if (arg->query.reserved0 ||
|
|
||||||
arg->query.reserved1 ||
|
|
||||||
arg->query.reserved2)
|
|
||||||
return -EINVAL;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
union ion_ioctl_arg data;
|
|
||||||
|
|
||||||
if (_IOC_SIZE(cmd) > sizeof(data))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The copy_from_user is unconditional here for both read and write
|
|
||||||
* to do the validate. If there is no write for the ioctl, the
|
|
||||||
* buffer is cleared
|
|
||||||
*/
|
|
||||||
if (copy_from_user(&data, (void __user *)arg, _IOC_SIZE(cmd)))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
ret = validate_ioctl_arg(cmd, &data);
|
|
||||||
if (ret) {
|
|
||||||
pr_warn_once("%s: ioctl validate failed\n", __func__);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(_IOC_DIR(cmd) & _IOC_WRITE))
|
|
||||||
memset(&data, 0, sizeof(data));
|
|
||||||
|
|
||||||
switch (cmd) {
|
|
||||||
case ION_IOC_ALLOC:
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
|
|
||||||
fd = ion_alloc(data.allocation.len,
|
|
||||||
data.allocation.heap_id_mask,
|
|
||||||
data.allocation.flags);
|
|
||||||
if (fd < 0)
|
|
||||||
return fd;
|
|
||||||
|
|
||||||
data.allocation.fd = fd;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case ION_IOC_HEAP_QUERY:
|
|
||||||
ret = ion_query_heaps(&data.query);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -ENOTTY;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_IOC_DIR(cmd) & _IOC_READ) {
|
|
||||||
if (copy_to_user((void __user *)arg, &data, _IOC_SIZE(cmd)))
|
|
||||||
return -EFAULT;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
@ -390,7 +390,7 @@ static const struct dma_buf_ops dma_buf_ops = {
|
|||||||
.unmap = ion_dma_buf_kunmap,
|
.unmap = ion_dma_buf_kunmap,
|
||||||
};
|
};
|
||||||
|
|
||||||
int ion_alloc(size_t len, unsigned int heap_id_mask, unsigned int flags)
|
static int ion_alloc(size_t len, unsigned int heap_id_mask, unsigned int flags)
|
||||||
{
|
{
|
||||||
struct ion_device *dev = internal_dev;
|
struct ion_device *dev = internal_dev;
|
||||||
struct ion_buffer *buffer = NULL;
|
struct ion_buffer *buffer = NULL;
|
||||||
@ -447,7 +447,7 @@ int ion_alloc(size_t len, unsigned int heap_id_mask, unsigned int flags)
|
|||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ion_query_heaps(struct ion_heap_query *query)
|
static int ion_query_heaps(struct ion_heap_query *query)
|
||||||
{
|
{
|
||||||
struct ion_device *dev = internal_dev;
|
struct ion_device *dev = internal_dev;
|
||||||
struct ion_heap_data __user *buffer = u64_to_user_ptr(query->heaps);
|
struct ion_heap_data __user *buffer = u64_to_user_ptr(query->heaps);
|
||||||
@ -492,6 +492,81 @@ out:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
union ion_ioctl_arg {
|
||||||
|
struct ion_allocation_data allocation;
|
||||||
|
struct ion_heap_query query;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int validate_ioctl_arg(unsigned int cmd, union ion_ioctl_arg *arg)
|
||||||
|
{
|
||||||
|
switch (cmd) {
|
||||||
|
case ION_IOC_HEAP_QUERY:
|
||||||
|
if (arg->query.reserved0 ||
|
||||||
|
arg->query.reserved1 ||
|
||||||
|
arg->query.reserved2)
|
||||||
|
return -EINVAL;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
union ion_ioctl_arg data;
|
||||||
|
|
||||||
|
if (_IOC_SIZE(cmd) > sizeof(data))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The copy_from_user is unconditional here for both read and write
|
||||||
|
* to do the validate. If there is no write for the ioctl, the
|
||||||
|
* buffer is cleared
|
||||||
|
*/
|
||||||
|
if (copy_from_user(&data, (void __user *)arg, _IOC_SIZE(cmd)))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
ret = validate_ioctl_arg(cmd, &data);
|
||||||
|
if (ret) {
|
||||||
|
pr_warn_once("%s: ioctl validate failed\n", __func__);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(_IOC_DIR(cmd) & _IOC_WRITE))
|
||||||
|
memset(&data, 0, sizeof(data));
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
case ION_IOC_ALLOC:
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
fd = ion_alloc(data.allocation.len,
|
||||||
|
data.allocation.heap_id_mask,
|
||||||
|
data.allocation.flags);
|
||||||
|
if (fd < 0)
|
||||||
|
return fd;
|
||||||
|
|
||||||
|
data.allocation.fd = fd;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ION_IOC_HEAP_QUERY:
|
||||||
|
ret = ion_query_heaps(&data.query);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -ENOTTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_IOC_DIR(cmd) & _IOC_READ) {
|
||||||
|
if (copy_to_user((void __user *)arg, &data, _IOC_SIZE(cmd)))
|
||||||
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct file_operations ion_fops = {
|
static const struct file_operations ion_fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.unlocked_ioctl = ion_ioctl,
|
.unlocked_ioctl = ion_ioctl,
|
||||||
|
@ -205,10 +205,6 @@ int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,
|
|||||||
int ion_heap_buffer_zero(struct ion_buffer *buffer);
|
int ion_heap_buffer_zero(struct ion_buffer *buffer);
|
||||||
int ion_heap_pages_zero(struct page *page, size_t size, pgprot_t pgprot);
|
int ion_heap_pages_zero(struct page *page, size_t size, pgprot_t pgprot);
|
||||||
|
|
||||||
int ion_alloc(size_t len,
|
|
||||||
unsigned int heap_id_mask,
|
|
||||||
unsigned int flags);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ion_heap_init_shrinker
|
* ion_heap_init_shrinker
|
||||||
* @heap: the heap
|
* @heap: the heap
|
||||||
@ -330,8 +326,4 @@ void ion_page_pool_free(struct ion_page_pool *pool, struct page *page);
|
|||||||
int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
|
int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
|
||||||
int nr_to_scan);
|
int nr_to_scan);
|
||||||
|
|
||||||
long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
|
|
||||||
|
|
||||||
int ion_query_heaps(struct ion_heap_query *query);
|
|
||||||
|
|
||||||
#endif /* _ION_H */
|
#endif /* _ION_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user