From patchwork Fri Feb 15 20:24:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: kernel test robot via dri-devel X-Patchwork-Id: 10816693 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1DF3C922 for ; Sat, 16 Feb 2019 20:15:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0D73C2ADF3 for ; Sat, 16 Feb 2019 20:15:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 018DE2AE96; Sat, 16 Feb 2019 20:15:28 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 8EF362ADF3 for ; Sat, 16 Feb 2019 20:15:28 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0414E6EC26; Sat, 16 Feb 2019 20:12:15 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-pf1-x443.google.com (mail-pf1-x443.google.com [IPv6:2607:f8b0:4864:20::443]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6553F6E100 for ; Fri, 15 Feb 2019 20:24:17 +0000 (UTC) Received: by mail-pf1-x443.google.com with SMTP id j18so5359152pfe.1 for ; Fri, 15 Feb 2019 12:24:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=l8LmucLfEKB+cfAfRLnCfkwfcUHBvOoCjWKFJEb2a4A=; b=PjY1SgGVPM0Oq5FOH1phAl3oBvgcwaQJItmeh0HP9Hco09PcwEbxxI+ozH4ki6LAhz F+a5yH0r5BWX4QwWgAve2at1JPtxFIal1zNmy8y4sEyhgfFTBcpc/fMo+zzZ06YhFwrp KKnmhb92enT3jpqg6mjXL/amC2k5tng5D3A3ybBWUGQvqMZX5RiAcbnbWwEj7vFZSFuq Dh1BKNyCHsFCBQKPG8OTDB56ONoNZ3NumghJ7sXeaCpKAEcs5vucPo3GHWn2DIbmMpAh oBbMOc5wxQwk+ELOqO3reOksE+bw+svpVGHpPVOcTeQ+QygOjljIn+f6unsq4sv9nep/ 70CQ== X-Gm-Message-State: AHQUAuZFEpaDoC7hmr5w5gCDnUeZ2eRToqmDE8n/l+9nFubvbQ+3aRTG vrP4nnSYxy/Ax2MSstMOnW8Irg== X-Google-Smtp-Source: AHgI3IZwFDz9ufmc6empzvnFKyBRidpfEM0aaAU1Y497aFf7eV1LiCv/WiOWx0mEPWK7pYrL3osYBA== X-Received: by 2002:a63:545:: with SMTP id 66mr6933595pgf.102.1550262256890; Fri, 15 Feb 2019 12:24:16 -0800 (PST) Received: from localhost.localdomain ([2601:1c2:680:1319:4e72:b9ff:fe99:466a]) by smtp.gmail.com with ESMTPSA id l2sm7593340pgn.52.2019.02.15.12.24.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 15 Feb 2019 12:24:15 -0800 (PST) To: Laura Abbott Subject: [EARLY RFC][PATCH 1/4] ion: Add ION_VERSION ioctl Date: Fri, 15 Feb 2019 12:24:09 -0800 Message-Id: <1550262252-15558-2-git-send-email-john.stultz@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550262252-15558-1-git-send-email-john.stultz@linaro.org> References: <1550262252-15558-1-git-send-email-john.stultz@linaro.org> X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=l8LmucLfEKB+cfAfRLnCfkwfcUHBvOoCjWKFJEb2a4A=; b=W+qEui45OwZvRtcQVAV/tDyjyqZFIcovPkwDB9aPtRZK5sARVU5W2vJtKKtCLnJP+Q jwtK5ekpa8HCbN/fWCTrn/rW90oPL7+Wvim+nyRFr1GILoyYoKqjHiGgBGy21gdp9G4p Jp3p/Bza+ma4JERyQc3OFFGRJpeiPzz3k9yhJZAMth6J3OGmon2MlWNrmnm6pSbZC2Xy cpmX+QXoH05x37xJMc2RoNU2FbcpPxcE7CvDs/U6tike8Q+g/uq/UsKNzgfOUPnrPyP/ Yu02PRGWmdKIJW1gaDl1v4t5jrwCWOAORWEPcMMMxJdlhXl0+AcQmf20NtOvMItohMq3 EaKg== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: John Stultz via dri-devel From: kernel test robot via dri-devel Reply-To: John Stultz Cc: Alistair Strachan , Liam Mark , "Andrew F . Davis" , dri-devel@lists.freedesktop.org MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP With all the slight interface changes ion has had through its time in staging, keeping userland working properly has been a pain. Assuming more churn going forward, provide a proper version interface. Cc: Laura Abbott Cc: Sumit Semwal Cc: Liam Mark Cc: Brian Starkey Cc: Andrew F. Davis Cc: Alistair Strachan Cc: dri-devel@lists.freedesktop.org Signed-off-by: John Stultz --- drivers/staging/android/ion/ion-ioctl.c | 4 ++++ drivers/staging/android/ion/ion.h | 2 ++ drivers/staging/android/uapi/ion.h | 7 +++++++ 3 files changed, 13 insertions(+) diff --git a/drivers/staging/android/ion/ion-ioctl.c b/drivers/staging/android/ion/ion-ioctl.c index a8d3cc4..458a9f2 100644 --- a/drivers/staging/android/ion/ion-ioctl.c +++ b/drivers/staging/android/ion/ion-ioctl.c @@ -13,6 +13,7 @@ union ion_ioctl_arg { struct ion_allocation_data allocation; struct ion_heap_query query; + u32 version; }; static int validate_ioctl_arg(unsigned int cmd, union ion_ioctl_arg *arg) @@ -86,6 +87,9 @@ long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) case ION_IOC_HEAP_QUERY: ret = ion_query_heaps(&data.query); break; + case ION_IOC_VERSION: + data.version = ION_VERSION; + break; default: return -ENOTTY; } diff --git a/drivers/staging/android/ion/ion.h b/drivers/staging/android/ion/ion.h index 47b594c..439e682 100644 --- a/drivers/staging/android/ion/ion.h +++ b/drivers/staging/android/ion/ion.h @@ -21,6 +21,8 @@ #include "../uapi/ion.h" +#define ION_VERSION 3 + /** * struct ion_platform_heap - defines a heap in the given platform * @type: type of the heap from ion_heap_type enum diff --git a/drivers/staging/android/uapi/ion.h b/drivers/staging/android/uapi/ion.h index 5d70098..c480448 100644 --- a/drivers/staging/android/uapi/ion.h +++ b/drivers/staging/android/uapi/ion.h @@ -124,4 +124,11 @@ struct ion_heap_query { #define ION_IOC_HEAP_QUERY _IOWR(ION_IOC_MAGIC, 8, \ struct ion_heap_query) +/** + * DOC: ION_IOC_VERSION - Get ION interface version + * + * Takes a u32 and returns the ION interface version + */ +#define ION_IOC_VERSION _IOR(ION_IOC_MAGIC, 9, u32) + #endif /* _UAPI_LINUX_ION_H */ From patchwork Fri Feb 15 20:24:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: kernel test robot via dri-devel X-Patchwork-Id: 10816009 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AC19F13B5 for ; Fri, 15 Feb 2019 22:15:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 987E12DE12 for ; Fri, 15 Feb 2019 22:15:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8A9A32FFCF; Fri, 15 Feb 2019 22:15:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E76F32DE12 for ; Fri, 15 Feb 2019 22:14:59 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 199306E10D; Fri, 15 Feb 2019 22:14:56 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-pg1-x542.google.com (mail-pg1-x542.google.com [IPv6:2607:f8b0:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1923B6E100 for ; Fri, 15 Feb 2019 20:24:19 +0000 (UTC) Received: by mail-pg1-x542.google.com with SMTP id y1so5297622pgk.11 for ; Fri, 15 Feb 2019 12:24:19 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qgSoL3sPUhUXrm+KHH2TQxC/dij0S3K2jiUD0UBuiec=; b=Hodl2UwGw5wln/RK1Rvcy5AC6kyOWMYQNux3gF1RBnTzLQNOsevJkRGTT+k9OerOxF TCG2v+20Se1FsHKiWCGq6NATJNeZMhYsU8X1fDpSATRxhsCvxxbKWvZ108DkqgWpsn51 BavgI7Y949ecYUd9VCfgkMOI7OCI+ScyVguDTLbRUtpE2JER5cFnISP9zSIFSa8Wzznr jsBtbHrTjrDq0mDxqaQrLv6ms8drlFPc4+t7/GHd7xNMBPwZJYo8qSyCF9fw4f+xT0iN lOlPwLiAuuIYJypMf6C5DvkjAAAziigEP5YiCf2CAtWDbwzf29hYOGuj2dJfaSaTFXMl 28YA== X-Gm-Message-State: AHQUAuY9kzbE8XVP+Uw++6qcH+YG/1oXyi+vESUy04gVxEXH9hd8PKC5 YxGDcUWplEZq+7IC3WCK6jpGmw== X-Google-Smtp-Source: AHgI3IabETWIuKQMQnYeypc6pgbawX8bsnEaBBLfbHArSSd43iihCGS5RxhuMS5vxUM8ZbmSsBHMrA== X-Received: by 2002:a63:e553:: with SMTP id z19mr7033729pgj.331.1550262258524; Fri, 15 Feb 2019 12:24:18 -0800 (PST) Received: from localhost.localdomain ([2601:1c2:680:1319:4e72:b9ff:fe99:466a]) by smtp.gmail.com with ESMTPSA id l2sm7593340pgn.52.2019.02.15.12.24.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 15 Feb 2019 12:24:17 -0800 (PST) To: Laura Abbott Subject: [EARLY RFC][PATCH 2/4] ion: Initial hack to create per heap devices Date: Fri, 15 Feb 2019 12:24:10 -0800 Message-Id: <1550262252-15558-3-git-send-email-john.stultz@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550262252-15558-1-git-send-email-john.stultz@linaro.org> References: <1550262252-15558-1-git-send-email-john.stultz@linaro.org> X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qgSoL3sPUhUXrm+KHH2TQxC/dij0S3K2jiUD0UBuiec=; b=xyT2DagagGyByc7FoMJuoFKQ1YOXjHRdAtRQOYIvmOGjCtmtCX8p+tvm8qFMgQ40XP 8+OVuFjOfnCq3ubO/zie8qeS/APGuJCclzMGdRXIzETcjmoztHre+73VjKDE1nK7dXnf jSnqk6dpObuQwYI+ZXMP+jrjB7pxizohYJpFd7cHLb5Z7tMUshp9mqSRz2K1foR2nUfB PkrXCdm6+sHpg4h2Zf3QJs6qQ1nZCI4JBsyjIwSEdHhj8Y1qX2NlqlomJNqDgvafDrkw BWi3zuZksCfjlibKZhEY1AyymxUq4zLOi1c6rBPB2uO68cUGTUMVnY98nswcEZvfC7ac rdHQ== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: John Stultz via dri-devel From: kernel test robot via dri-devel Reply-To: John Stultz Cc: Alistair Strachan , Liam Mark , "Andrew F . Davis" , dri-devel@lists.freedesktop.org MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP One of the issues w/ the /dev/ion interface is that we have to provide the complexity of a heap query interface and we end up multiplexing all the heap access through that one interface via a bit mask (which currently limits the heaps to 32). There has been a long running todo to provide per-heap devices which would make the heap discovery/query interface "ls", and would allow for different heaps to have different permisisons and sepolicy rules. TODOs: * Android doesn't use udev so "ion_heaps/%s" names don't automatically create a /dev/ subdir. I need to rework from miscdev to creating a proper device class and add a "subsystem" entry for the DeviceHandler to match with * Each CMA region is exposed via a separate heap, not sure if this is desired or not, and we may need to improve the naming. Cc: Laura Abbott Cc: Sumit Semwal Cc: Liam Mark Cc: Brian Starkey Cc: Andrew F. Davis Cc: Alistair Strachan Cc: dri-devel@lists.freedesktop.org Signed-off-by: John Stultz --- drivers/staging/android/ion/ion-ioctl.c | 62 +++++++++++++++++++++++++++++++++ drivers/staging/android/ion/ion.c | 18 ++++++++++ drivers/staging/android/ion/ion.h | 2 ++ drivers/staging/android/uapi/ion.h | 28 +++++++++++++++ 4 files changed, 110 insertions(+) diff --git a/drivers/staging/android/ion/ion-ioctl.c b/drivers/staging/android/ion/ion-ioctl.c index 458a9f2..ea8d263 100644 --- a/drivers/staging/android/ion/ion-ioctl.c +++ b/drivers/staging/android/ion/ion-ioctl.c @@ -12,6 +12,7 @@ union ion_ioctl_arg { struct ion_allocation_data allocation; + struct ion_heap_allocation_data heap_allocation; struct ion_heap_query query; u32 version; }; @@ -100,3 +101,64 @@ long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) } return ret; } + +long ion_heap_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + int ret = 0; + unsigned int dir; + union ion_ioctl_arg data; + + dir = ion_ioctl_dir(cmd); + + 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 (!(dir & _IOC_WRITE)) + memset(&data, 0, sizeof(data)); + + switch (cmd) { + case ION_IOC_HEAP_ALLOC: + { + struct miscdevice *miscdev = filp->private_data; + struct ion_heap *heap; + int fd; + + heap = container_of(miscdev, struct ion_heap, heap_dev); + + fd = ion_alloc(data.heap_allocation.len, + (1 << heap->id), + data.heap_allocation.flags); + if (fd < 0) + return fd; + + data.heap_allocation.fd = fd; + + break; + } + case ION_IOC_VERSION: + data.version = ION_VERSION; + break; + default: + return -ENOTTY; + } + + if (dir & _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 6f5afab..1f7c893 100644 --- a/drivers/staging/android/ion/ion.c +++ b/drivers/staging/android/ion/ion.c @@ -492,6 +492,14 @@ int ion_query_heaps(struct ion_heap_query *query) return ret; } +static const struct file_operations ion_heap_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = ion_heap_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = ion_heap_ioctl, +#endif +}; + static const struct file_operations ion_fops = { .owner = THIS_MODULE, .unlocked_ioctl = ion_ioctl, @@ -540,12 +548,22 @@ void ion_device_add_heap(struct ion_heap *heap) struct ion_device *dev = internal_dev; int ret; struct dentry *heap_root; + char *heap_name; char debug_name[64]; if (!heap->ops->allocate || !heap->ops->free) pr_err("%s: can not add heap with invalid ops struct.\n", __func__); + heap_name = kasprintf(GFP_KERNEL, "ion_heaps/%s", heap->name); + heap->heap_dev.name = heap_name; + heap->heap_dev.minor = MISC_DYNAMIC_MINOR; + heap->heap_dev.fops = &ion_heap_fops; + heap->heap_dev.parent = NULL; + ret = misc_register(&heap->heap_dev); + if (ret) + pr_err("ion: failed to register misc device.\n"); + spin_lock_init(&heap->free_lock); spin_lock_init(&heap->stat_lock); heap->free_list_size = 0; diff --git a/drivers/staging/android/ion/ion.h b/drivers/staging/android/ion/ion.h index 439e682..7ed4a6a 100644 --- a/drivers/staging/android/ion/ion.h +++ b/drivers/staging/android/ion/ion.h @@ -170,6 +170,7 @@ struct ion_heap_ops { */ struct ion_heap { struct plist_node node; + struct miscdevice heap_dev; struct ion_device *dev; enum ion_heap_type type; struct ion_heap_ops *ops; @@ -333,6 +334,7 @@ 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); +long ion_heap_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); int ion_query_heaps(struct ion_heap_query *query); diff --git a/drivers/staging/android/uapi/ion.h b/drivers/staging/android/uapi/ion.h index c480448..20db09f 100644 --- a/drivers/staging/android/uapi/ion.h +++ b/drivers/staging/android/uapi/ion.h @@ -57,6 +57,25 @@ enum ion_heap_type { */ /** + * struct ion_heap_allocation_data - metadata passed from userspace for + * allocations + * @len: size of the allocation + * @heap_id_mask: mask of heap ids to allocate from + * @flags: flags passed to heap + * @handle: pointer that will be populated with a cookie to use to + * refer to this allocation + * + * Provided by userspace as an argument to the ioctl + */ +struct ion_heap_allocation_data { + __u64 len; + __u32 flags; + __u32 fd; + __u32 reserved0; + __u32 reserved1; +}; + +/** * struct ion_allocation_data - metadata passed from userspace for allocations * @len: size of the allocation * @heap_id_mask: mask of heap ids to allocate from @@ -131,4 +150,13 @@ struct ion_heap_query { */ #define ION_IOC_VERSION _IOR(ION_IOC_MAGIC, 9, u32) +/** + * DOC: ION_IOC_HEAP_ALLOC - allocate memory from heap + * + * Takes an ion_heap_allocation_data struct and returns it with the handle field + * populated with the opaque handle for the allocation. + */ +#define ION_IOC_HEAP_ALLOC _IOWR(ION_IOC_MAGIC, 10, \ + struct ion_heap_allocation_data) + #endif /* _UAPI_LINUX_ION_H */ From patchwork Fri Feb 15 20:24:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: kernel test robot via dri-devel X-Patchwork-Id: 10816715 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 36B7D17D5 for ; Sat, 16 Feb 2019 20:16:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 25DA02AB7E for ; Sat, 16 Feb 2019 20:16:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1A3572AE96; Sat, 16 Feb 2019 20:16:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id B10302AB7E for ; Sat, 16 Feb 2019 20:16:00 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 06B896EC13; Sat, 16 Feb 2019 20:12:31 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id 832C76E100 for ; Fri, 15 Feb 2019 20:24:20 +0000 (UTC) Received: by mail-pf1-x442.google.com with SMTP id c123so5361584pfb.0 for ; Fri, 15 Feb 2019 12:24:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=N5a5nZaqsWgGJm38LQouQeiDJ/DSJD63RRCa/mm8Ip8=; b=NMQk9sT/bCuno2///V4kRwO8WGN6+72UK01x7Lumwo1dsaPr5w5zAjc21n+pCIyG06 J1hIDOMl0FJS9WF03gL/9sYZh2OPT3KcJe2VWdB3VYj0jCgmtTB/SuolK1kh36tvyX// GRY1+Tv9xWuYW9evlC5KUUGcmgtxe0Nv+33dB4YiNLF7DE2RLpjQ3c9EZL+zjPTnAj0M PV5mfuHWmcR/H/UkkZBEutKwZB1IGKjy9HvdOnGCRYsNuS16ZML5k0i0E7Y6xmxXbESG 4ComkKKEZztKoaYZ3XHBrcUG9gAjauUq7QscpdNojSAlJqAh9Taqah/orb//fWyfRxDI vt5g== X-Gm-Message-State: AHQUAuZwWohUv8++/nCWH0RA4mQIvd6TYQPB0qoeph74AKHvYW4RJXXu G5lc84/5cw7T7HJB6y/wWyWjWw== X-Google-Smtp-Source: AHgI3Ia7PhtR7y3HyFo2loPhbkSaACN1YSiofUkgC390u4/IQkYp9FkDp9/lY5bLbZtNYx9uZNni3g== X-Received: by 2002:a63:1e17:: with SMTP id e23mr6984808pge.130.1550262260015; Fri, 15 Feb 2019 12:24:20 -0800 (PST) Received: from localhost.localdomain ([2601:1c2:680:1319:4e72:b9ff:fe99:466a]) by smtp.gmail.com with ESMTPSA id l2sm7593340pgn.52.2019.02.15.12.24.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 15 Feb 2019 12:24:19 -0800 (PST) To: Laura Abbott Subject: [EARLY RFC][PATCH 3/4] ion: Add HEAP_INFO ioctl to be able to fetch heap type Date: Fri, 15 Feb 2019 12:24:11 -0800 Message-Id: <1550262252-15558-4-git-send-email-john.stultz@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550262252-15558-1-git-send-email-john.stultz@linaro.org> References: <1550262252-15558-1-git-send-email-john.stultz@linaro.org> X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=N5a5nZaqsWgGJm38LQouQeiDJ/DSJD63RRCa/mm8Ip8=; b=gJHuN1JAxX5Ndch8U8vilfFEsjOsgsaFC9e50UdCpiVQLghsvvCjSOAsGtswpmYmu8 wTp6SX9RYSi9J31vk9xpgTI53od4d7g9ZOkuT5busILitYOCzbpkJ2pxeuVBa+u+cNoO YOiGjdmscJZHWdQOq8amMwmqVdZp3J5f28pGZz+VTWE2J7y6lOZiky74CiJUR2VI8khP 4ZJoQhU7llk/48ubblCLJc7ETr1ju1BqXB/ZnQ6yjNRNXUCRTz6kXncT0Fq+kT54wcfe lwWKHBVWIXLa0z8kHtIQYrWBiQtAuulgyg+vqKrgiDq65NS0GLTHNZZVLKfWL5qbCDhk Xx1w== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: John Stultz via dri-devel From: kernel test robot via dri-devel Reply-To: John Stultz Cc: Alistair Strachan , Liam Mark , "Andrew F . Davis" , dri-devel@lists.freedesktop.org MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP The per-device heaps don't support HEAP_QUERY ioctl, since the name is provided in the devnode path and the heapid isn't useful with the new interface (one uses the fd of heapdevice). But, one missing bit of functionality is a way to find the heap type. So provide a HEAP_INFO ioctl which exposes the heap type out so there is the potential for some sort of dynamic heap matching/discovery. Most likely this IOCTL will be useful when extended to allow some sort of opaque constraint bitfield to be shared so userland can match heaps with devices in a fully dynamic way. Cc: Laura Abbott Cc: Sumit Semwal Cc: Liam Mark Cc: Brian Starkey Cc: Andrew F. Davis Cc: Alistair Strachan Cc: dri-devel@lists.freedesktop.org Signed-off-by: John Stultz --- drivers/staging/android/ion/ion-ioctl.c | 12 ++++++++++++ drivers/staging/android/uapi/ion.h | 22 ++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/drivers/staging/android/ion/ion-ioctl.c b/drivers/staging/android/ion/ion-ioctl.c index ea8d263..6db5969 100644 --- a/drivers/staging/android/ion/ion-ioctl.c +++ b/drivers/staging/android/ion/ion-ioctl.c @@ -14,6 +14,7 @@ union ion_ioctl_arg { struct ion_allocation_data allocation; struct ion_heap_allocation_data heap_allocation; struct ion_heap_query query; + struct ion_heap_info heap_info; u32 version; }; @@ -149,6 +150,17 @@ long ion_heap_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) break; } + case ION_IOC_HEAP_INFO: + { + struct miscdevice *miscdev = filp->private_data; + struct ion_heap *heap; + + heap = container_of(miscdev, struct ion_heap, heap_dev); + + data.heap_info.type = heap->type; + + break; + } case ION_IOC_VERSION: data.version = ION_VERSION; break; diff --git a/drivers/staging/android/uapi/ion.h b/drivers/staging/android/uapi/ion.h index 20db09f..1b3ca1e 100644 --- a/drivers/staging/android/uapi/ion.h +++ b/drivers/staging/android/uapi/ion.h @@ -111,6 +111,19 @@ struct ion_heap_data { }; /** + * struct ion_heap_info - Info about the heap + * + */ +struct ion_heap_info { + __u32 type; + __u32 reserved0; + __u32 reserved1; + __u32 reserved2; + __u32 reserved3; + __u32 reserved4; +}; + +/** * struct ion_heap_query - collection of data about all heaps * @cnt - total number of heaps to be copied * @heaps - buffer to copy heap data @@ -159,4 +172,13 @@ struct ion_heap_query { #define ION_IOC_HEAP_ALLOC _IOWR(ION_IOC_MAGIC, 10, \ struct ion_heap_allocation_data) +/** + * DOC: ION_IOC_HEAP_INFO - allocate memory from heap + * + * Takes an ion_heap_query structure and populates information about + * available Ion heaps. + */ +#define ION_IOC_HEAP_INFO _IOWR(ION_IOC_MAGIC, 11, \ + struct ion_heap_allocation_data) + #endif /* _UAPI_LINUX_ION_H */ From patchwork Fri Feb 15 20:24:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: kernel test robot via dri-devel X-Patchwork-Id: 10816601 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EAD326C2 for ; Sat, 16 Feb 2019 20:13:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DB4162AB54 for ; Sat, 16 Feb 2019 20:13:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CF3452AB6F; Sat, 16 Feb 2019 20:13:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 51D702AB54 for ; Sat, 16 Feb 2019 20:13:38 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AD4B56E4A0; Sat, 16 Feb 2019 20:11:38 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-pg1-x542.google.com (mail-pg1-x542.google.com [IPv6:2607:f8b0:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id 37A516EB2C for ; Fri, 15 Feb 2019 20:24:22 +0000 (UTC) Received: by mail-pg1-x542.google.com with SMTP id q206so5318070pgq.4 for ; Fri, 15 Feb 2019 12:24:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Q5G2GKGbywqAdnaJODcSwGYr0iOLzvSrGO5crfVUvyk=; b=NstagziuRRYEpeCiFB9okuFWqgUrbQJBKQNCp/M7wTLcuN8cqqEf9hAvDwB5JgTwHQ uu6Zc/GNE03V7sOo6urgVQyAS6sGvUci3d74mFJj1Ny89FRBbjXfWZ5XCKCxjrbVROYg Gc6DC+9Ch1vfR4V5yA4txVq6thVa8MBhqGLO3SEa0R5Aim9ixbWmTnGWT/a1GFVsNbIT rFz9Mqq04AZahrAZPSiTMpz3IibyY5A4yWZuF/xnBb0eBYeq4emulRWwHXdRdYWN4ql0 Uf4LeNGUA67Oh6iScQbnqV8BCHm4+uonYhY5MoJLR46XscquD7ZOBQ9CSHc0hzKQEKq8 Xz/g== X-Gm-Message-State: AHQUAuaDtow0W6jWPxqGJDVGhdvySXcQHSLDps7tuf+WqErO1wRfXDYQ FGQxw00XV6E/v3Q3cRqWU2JwJg== X-Google-Smtp-Source: AHgI3IZ4x7fp44gShXXsEXVj8S70EIJVnisXDbNNmgEjjNVjSCGYBrGpt0dPYK9Wjo5lFYYA7PjeYA== X-Received: by 2002:a63:8b4b:: with SMTP id j72mr7040440pge.100.1550262261718; Fri, 15 Feb 2019 12:24:21 -0800 (PST) Received: from localhost.localdomain ([2601:1c2:680:1319:4e72:b9ff:fe99:466a]) by smtp.gmail.com with ESMTPSA id l2sm7593340pgn.52.2019.02.15.12.24.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 15 Feb 2019 12:24:20 -0800 (PST) To: Laura Abbott Subject: [EARLY RFC][PATCH 4/4] ion: Make "legacy" /dev/ion support optional Date: Fri, 15 Feb 2019 12:24:12 -0800 Message-Id: <1550262252-15558-5-git-send-email-john.stultz@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550262252-15558-1-git-send-email-john.stultz@linaro.org> References: <1550262252-15558-1-git-send-email-john.stultz@linaro.org> X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Q5G2GKGbywqAdnaJODcSwGYr0iOLzvSrGO5crfVUvyk=; b=QN4tdNTXPKeyZUXD9Rd25oxEJMMZuwjVgauQFc4/FdPSUsI1l5NZfav2NtbcPzz7j0 eB7cF33o6naOZVbfaex4f8PsN0jvCYikdYtePTqjz0yO2Xp5OYpiBUPIayipPEdz406W nZw04FjZ4tfz0FtzRVXkdS5W7fnRxsm1lijeUfS6P0hMbRu61WACGw91ERljXkXPAryH 5MRoHsxRfyXYq42tjUV7zv5mnXLdDY+R7N7xQltppz9yOoaojY4zAWdkZnZzqy5jCwwm Qfr2n3aBrWXLggG6/XR7qNQIhkAKvK73AwX7bu71RnNMe1V8c5VW2CzfVDb1C974HWyJ LVpA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: John Stultz via dri-devel From: kernel test robot via dri-devel Reply-To: John Stultz Cc: Alistair Strachan , Liam Mark , "Andrew F . Davis" , dri-devel@lists.freedesktop.org MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add a config option to make the "legacy" /dev/ion interface optional. Not yet clear if this will come out of staging or not, but to help with the transition. Cc: Laura Abbott Cc: Sumit Semwal Cc: Liam Mark Cc: Brian Starkey Cc: Andrew F. Davis Cc: Alistair Strachan Cc: dri-devel@lists.freedesktop.org Signed-off-by: John Stultz --- drivers/staging/android/ion/Kconfig | 7 ++++++ drivers/staging/android/ion/ion-ioctl.c | 2 ++ drivers/staging/android/ion/ion.c | 43 +++++++++++++++++++++------------ drivers/staging/android/ion/ion.h | 2 ++ 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/drivers/staging/android/ion/Kconfig b/drivers/staging/android/ion/Kconfig index 0fdda6f..7f5a0b2 100644 --- a/drivers/staging/android/ion/Kconfig +++ b/drivers/staging/android/ion/Kconfig @@ -42,3 +42,10 @@ config ION_CMA_HEAP Choose this option to enable CMA heaps with Ion. This heap is backed by the Contiguous Memory Allocator (CMA). If your system has these regions, you should say Y here. + +config ION_COMPAT_INTERFACE + bool "Legacy /dev/ion interface support" + depends on ION + help + Choose this option to enable the legacy /dev/ion interface which + provides compatibility with userspace designed for 4.12+ kernels diff --git a/drivers/staging/android/ion/ion-ioctl.c b/drivers/staging/android/ion/ion-ioctl.c index 6db5969..427980c 100644 --- a/drivers/staging/android/ion/ion-ioctl.c +++ b/drivers/staging/android/ion/ion-ioctl.c @@ -43,6 +43,7 @@ static unsigned int ion_ioctl_dir(unsigned int cmd) } } +#ifdef CONFIG_ION_COMPAT_INTERFACE long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { int ret = 0; @@ -102,6 +103,7 @@ long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) } return ret; } +#endif long ion_heap_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c index 1f7c893..9a73526 100644 --- a/drivers/staging/android/ion/ion.c +++ b/drivers/staging/android/ion/ion.c @@ -500,14 +500,6 @@ static const struct file_operations ion_heap_fops = { #endif }; -static const struct file_operations ion_fops = { - .owner = THIS_MODULE, - .unlocked_ioctl = ion_ioctl, -#ifdef CONFIG_COMPAT - .compat_ioctl = ion_ioctl, -#endif -}; - static int debug_shrink_set(void *data, u64 val) { struct ion_heap *heap = data; @@ -619,15 +611,19 @@ void ion_device_add_heap(struct ion_heap *heap) } EXPORT_SYMBOL(ion_device_add_heap); -static int ion_device_create(void) +#ifdef CONFIG_ION_COMPAT_INTERFACE +static const struct file_operations ion_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = ion_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = ion_ioctl, +#endif +}; + +static int ion_create_legacy_interface(struct ion_device *idev) { - struct ion_device *idev; int ret; - idev = kzalloc(sizeof(*idev), GFP_KERNEL); - if (!idev) - return -ENOMEM; - idev->dev.minor = MISC_DYNAMIC_MINOR; idev->dev.name = "ion"; idev->dev.fops = &ion_fops; @@ -636,8 +632,25 @@ static int ion_device_create(void) if (ret) { pr_err("ion: failed to register misc device.\n"); kfree(idev); - return ret; } + return ret; +} +#else +#define ion_create_legacy_interface(x) 0 +#endif + +static int ion_device_create(void) +{ + struct ion_device *idev; + int ret; + + idev = kzalloc(sizeof(*idev), GFP_KERNEL); + if (!idev) + return -ENOMEM; + + ret = ion_create_legacy_interface(idev); + if (ret) + return ret; idev->debug_root = debugfs_create_dir("ion", NULL); idev->buffers = RB_ROOT; diff --git a/drivers/staging/android/ion/ion.h b/drivers/staging/android/ion/ion.h index 7ed4a6a..a82178b 100644 --- a/drivers/staging/android/ion/ion.h +++ b/drivers/staging/android/ion/ion.h @@ -333,7 +333,9 @@ 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); +#ifdef CONFIG_ION_COMPAT_INTERFACE long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); +#endif long ion_heap_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); int ion_query_heaps(struct ion_heap_query *query);