From patchwork Wed Jul 10 11:58:47 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Inki Dae X-Patchwork-Id: 2825646 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 1D835C0AB2 for ; Wed, 10 Jul 2013 12:01:28 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id E72B1201BD for ; Wed, 10 Jul 2013 12:01:26 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 5641C20172 for ; Wed, 10 Jul 2013 12:01:22 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1D45EE5CD5 for ; Wed, 10 Jul 2013 05:01:22 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) by gabe.freedesktop.org (Postfix) with ESMTP id 90A9BE5FBB for ; Wed, 10 Jul 2013 04:58:58 -0700 (PDT) Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout3.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MPP00D0QYLRQM00@mailout3.samsung.com> for dri-devel@lists.freedesktop.org; Wed, 10 Jul 2013 20:58:56 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.114]) by epcpsbgr1.samsung.com (EPCPMTA) with SMTP id 02.25.17404.08C4DD15; Wed, 10 Jul 2013 20:58:56 +0900 (KST) X-AuditID: cbfee68d-b7f096d0000043fc-e8-51dd4c80d98a Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 5B.08.28381.08C4DD15; Wed, 10 Jul 2013 20:58:56 +0900 (KST) Received: from localhost.localdomain ([10.252.81.149]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MPP000XNYM3IX30@mmp2.samsung.com>; Wed, 10 Jul 2013 20:58:56 +0900 (KST) From: Inki Dae To: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org Subject: [RFC PATCH v1 2/2] dma-buf: add lock callback for fcntl system call. Date: Wed, 10 Jul 2013 20:58:47 +0900 Message-id: <1373457527-28263-3-git-send-email-inki.dae@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1373457527-28263-1-git-send-email-inki.dae@samsung.com> References: <1373457527-28263-1-git-send-email-inki.dae@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprEIsWRmVeSWpSXmKPExsWyRsSkSLfB526gwZfrshb/t01ktrjy9T2b xaT7E1gszja9YbfY9Pgaq8WJvg+sFj0btrJaPH16gc3iduMKNovnC38wW+zdOZnRgdtjVkMv m8febwtYPHbOusvucb/7OJPH5iX1Hn1bVjF6fN4kF8AexWWTkpqTWZZapG+XwJXx69NMloJW /orH6/MaGGfzdDFyckgImEj8n3qXHcIWk7hwbz0biC0ksJRRonV6PUzNlA2dTF2MXEDx6YwS F9buZYdw2pgkOs8/ZAWpYhNQlZi44j4bSEJEoJVRYveDbSwgDrPATkaJs39XMoFUCQv4Svzb 0Am2jwWo48CV1SwgNq+Ai8SR1lfMXYwcQPsUJOZMsgExOQVcJZYd14C4yEXiytLnzCAjJQRO sUvcv/aOCWKMgMS3yYdYIFplJTYdYIa4WlLi4IobLBMYhRcwMqxiFE0tSC4oTkovMtQrTswt Ls1L10vOz93ECIyP0/+e9e5gvH3A+hBjMtC4icxSosn5wPjKK4k3NDYzsjA1MTU2Mrc0I01Y SZxXrcU6UEggPbEkNTs1tSC1KL6oNCe1+BAjEwenVAPj9lxNh2maNQGOnEE1qUkv86Qf9wss 1l12+/WT+dtbpQ6mf7fd/p7tOc+WPc1JTw1+W0e2TImdUMMukJv4zSldJfz26XOfPt27aFQW o+qUwxeTGn5sVUn0D/7WdAU/6w/z+f6eO86l/yvk07/LkzMmbnM93enwVdYk786ExUJSKt2y 0qYPGH8qsRRnJBpqMRcVJwIA/nSWY6UCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrAIsWRmVeSWpSXmKPExsVy+t9jQd0Gn7uBBrc/iVj83zaR2eLK1/ds FpPuT2CxONv0ht1i0+NrrBYn+j6wWvRs2Mpq8fTpBTaL240r2CyeL/zBbLF352RGB26PWQ29 bB57vy1g8dg56y67x/3u40wem5fUe/RtWcXo8XmTXAB7VAOjTUZqYkpqkUJqXnJ+SmZeuq2S d3C8c7ypmYGhrqGlhbmSQl5ibqqtkotPgK5bZg7QkUoKZYk5pUChgMTiYiV9O0wTQkPcdC1g GiN0fUOC4HqMDNBAwhrGjF+fZrIUtPJXPF6f18A4m6eLkZNDQsBEYsqGTiYIW0ziwr31bF2M XBxCAtMZJS6s3csO4bQxSXSef8gKUsUmoCoxccV9sCoRgVZGid0PtrGAOMwCOxklzv5dCTZL WMBX4t+GTnYQmwWo48CV1SwgNq+Ai8SR1lfMXYwcQPsUJOZMsgExOQVcJZYd1wCpEAKquLL0 OfMERt4FjAyrGEVTC5ILipPScw31ihNzi0vz0vWS83M3MYLj75nUDsaVDRaHGAU4GJV4eA8o 3AkUYk0sK67MPcQowcGsJMKrbnU3UIg3JbGyKrUoP76oNCe1+BBjMtBNE5mlRJPzgakhryTe 0NjEzMjSyNzQwsjYnDRhJXHeA63WgUIC6YklqdmpqQWpRTBbmDg4pRoY22wMevfohDNrry58 cd1RiemfVZiNR32PQt9F3R9r7jL+1s1reDf5WffpK4eTLZ5LKAeLLQyp+HL6bPWNHFEL2S3r I68tzv53NSPVPm4ro+ytqS6TN+QcORwTozT7o8Mn09Irr+e9S0pW2el7rsp8sbZ/4dFMwWqx QIbZjgXff0RMEDuX8/6qEktxRqKhFnNRcSIAZFlQiAMDAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: kyungmin.park@samsung.com, myungjoo.ham@samsung.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org X-Spam-Status: No, score=-4.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch adds lock callback to dma buf file operations, and this callback will be called by fcntl system call. With this patch, fcntl system call can be used for buffer synchronization between CPU and CPU, and CPU and DMA in user mode. Signed-off-by: Inki Dae Signed-off-by: Kyungmin Park --- drivers/base/dma-buf.c | 34 ++++++++++++++++++++++++++++++++++ 1 files changed, 34 insertions(+), 0 deletions(-) diff --git a/drivers/base/dma-buf.c b/drivers/base/dma-buf.c index fe39120..cd71447 100644 --- a/drivers/base/dma-buf.c +++ b/drivers/base/dma-buf.c @@ -31,6 +31,7 @@ #include #include #include +#include static inline int is_dma_buf_file(struct file *); @@ -82,9 +83,42 @@ static int dma_buf_mmap_internal(struct file *file, struct vm_area_struct *vma) return dmabuf->ops->mmap(dmabuf, vma); } +static int dma_buf_lock(struct file *file, int cmd, struct file_lock *fl) +{ + struct dma_buf *dmabuf; + unsigned int type; + bool wait = false; + + if (!is_dma_buf_file(file)) + return -EINVAL; + + dmabuf = file->private_data; + + if ((fl->fl_type & F_UNLCK) == F_UNLCK) { + dmabuf_sync_single_unlock(dmabuf); + return 0; + } + + /* convert flock type to dmabuf sync type. */ + if ((fl->fl_type & F_WRLCK) == F_WRLCK) + type = DMA_BUF_ACCESS_W; + else if ((fl->fl_type & F_RDLCK) == F_RDLCK) + type = DMA_BUF_ACCESS_R; + else + return -EINVAL; + + if (fl->fl_flags & FL_SLEEP) + wait = true; + + /* TODO. the locking to certain region should also be considered. */ + + return dmabuf_sync_single_lock(dmabuf, type, wait); +} + static const struct file_operations dma_buf_fops = { .release = dma_buf_release, .mmap = dma_buf_mmap_internal, + .lock = dma_buf_lock, }; /*