lkml.org 
[lkml]   [2019]   [Jan]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 03/14] staging: android: ion: Merge ion-ioctl.c into ion.c
    Date
    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>
    ---
    drivers/staging/android/ion/Makefile | 2 +-
    drivers/staging/android/ion/ion-ioctl.c | 86 -------------------------
    drivers/staging/android/ion/ion.c | 79 ++++++++++++++++++++++-
    drivers/staging/android/ion/ion.h | 8 ---
    4 files changed, 78 insertions(+), 97 deletions(-)
    delete mode 100644 drivers/staging/android/ion/ion-ioctl.c

    diff --git a/drivers/staging/android/ion/Makefile b/drivers/staging/android/ion/Makefile
    index bb30bf8774a0..17f3a7569e3d 100644
    --- a/drivers/staging/android/ion/Makefile
    +++ b/drivers/staging/android/ion/Makefile
    @@ -1,5 +1,5 @@
    # 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_CARVEOUT_HEAP) += ion_carveout_heap.o
    obj-$(CONFIG_ION_CHUNK_HEAP) += ion_chunk_heap.o
    diff --git a/drivers/staging/android/ion/ion-ioctl.c b/drivers/staging/android/ion/ion-ioctl.c
    deleted file mode 100644
    index b366f97a5728..000000000000
    --- a/drivers/staging/android/ion/ion-ioctl.c
    +++ /dev/null
    @@ -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;
    -}
    diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
    index de1ca5e26a4a..2d6d8c0994b2 100644
    --- a/drivers/staging/android/ion/ion.c
    +++ b/drivers/staging/android/ion/ion.c
    @@ -390,7 +390,7 @@ static const struct dma_buf_ops dma_buf_ops = {
    .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_buffer *buffer = NULL;
    @@ -447,7 +447,7 @@ int ion_alloc(size_t len, unsigned int heap_id_mask, unsigned int flags)
    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_heap_data __user *buffer = u64_to_user_ptr(query->heaps);
    @@ -492,6 +492,81 @@ int ion_query_heaps(struct ion_heap_query *query)
    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 = {
    .owner = THIS_MODULE,
    .unlocked_ioctl = ion_ioctl,
    diff --git a/drivers/staging/android/ion/ion.h b/drivers/staging/android/ion/ion.h
    index ff455fdde1a8..084f246dcfc9 100644
    --- a/drivers/staging/android/ion/ion.h
    +++ b/drivers/staging/android/ion/ion.h
    @@ -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_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
    * @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 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 */
    --
    2.19.1
    \
     
     \ /
      Last update: 2019-01-11 19:07    [W:4.863 / U:0.320 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site