From patchwork Fri Jul 12 06:12:46 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Inki Dae X-Patchwork-Id: 2826810 Return-Path: X-Original-To: patchwork-linux-arm@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 5F3B9C0AB2 for ; Fri, 12 Jul 2013 06:14:03 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 8259020136 for ; Fri, 12 Jul 2013 06:14:02 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6161D2012D for ; Fri, 12 Jul 2013 06:14:01 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1UxWbo-0004Is-JY; Fri, 12 Jul 2013 06:13:36 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1UxWbm-00010S-38; Fri, 12 Jul 2013 06:13:34 +0000 Received: from mailout3.samsung.com ([203.254.224.33]) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1UxWbb-0000yQ-E8 for linux-arm-kernel@lists.infradead.org; Fri, 12 Jul 2013 06:13:24 +0000 Received: from epcpsbgr2.samsung.com (u142.gpu120.samsung.co.kr [203.254.230.142]) by mailout3.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MPT007OJ7XGWKQ0@mailout3.samsung.com> for linux-arm-kernel@lists.infradead.org; Fri, 12 Jul 2013 15:12:52 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.116]) by epcpsbgr2.samsung.com (EPCPMTA) with SMTP id 2D.3D.08825.46E9FD15; Fri, 12 Jul 2013 15:12:52 +0900 (KST) X-AuditID: cbfee68e-b7f276d000002279-0c-51df9e64e5f8 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 2C.EB.21068.46E9FD15; Fri, 12 Jul 2013 15:12:52 +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 <0MPT008WA7XDQH20@mmp2.samsung.com>; Fri, 12 Jul 2013 15:12:52 +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: Fri, 12 Jul 2013 15:12:46 +0900 Message-id: <1373609566-10784-3-git-send-email-inki.dae@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1373609566-10784-1-git-send-email-inki.dae@samsung.com> References: <1373609566-10784-1-git-send-email-inki.dae@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrBIsWRmVeSWpSXmKPExsWyRsSkRDdl3v1Ag5k7DCz+b5vIbHHl63s2 i0n3J7BYnG16w26x6fE1VosTfR9YLXo2bGW1uH2Z1+Lp0wtsFrcbV7BZPF/4g9ni1N3P7BZ7 d05mdOD1aGnuYfOY1dDL5rH32wIWj52z7rJ73Lm2h83jfvdxJo/NS+o9+rasYvT4vEkugDOK yyYlNSezLLVI3y6BK+Pl6lNsBbt4K86v+cPUwPiJq4uRk0NCwETi1MqtbBC2mMSFe+uBbC4O IYGljBL3Oh6ywRQde9zIDJGYzigxpe8olNPGJPGz9zJYFZuAqsTEFffB2kUEWhkldj/YxgLi MAu8YpTY1T+JCaRKWMBH4mfDJnYQmwWoo+34BEYQm1fARWLO427WLkYOoH0KEnMm2YCEOQVc JW4vXcgKYgsBlXyaMQ9spoTAW3aJiY9eQc0RkPg2+RALRK+sxKYDzBBnS0ocXHGDZQKj8AJG hlWMoqkFyQXFSelFRnrFibnFpXnpesn5uZsYgbF0+t+zvh2MNw9YH2JMBho3kVlKNDkfGIt5 JfGGxmZGFqYmpsZG5pZmpAkrifOqtVgHCgmkJ5akZqemFqQWxReV5qQWH2Jk4uCUamCcr9t8 qUZj8sbfs6qijbek+C/J0yjrE+mrqO1VXBatU7C96761PYdGWMKyj/dfuRjwbXfpV+yz21V5 R2uSahQ/J9+XQw4bG/2arNpZLGvfPJc6y2L64YPD+nWeW1wFN2jJXOhQc5+myplytvXeHXkl jS+7AqM8r6j4ZhhtZtThWqOSLVbXosRSnJFoqMVcVJwIADKcxVy7AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplleLIzCtJLcpLzFFi42I5/e+xoG7KvPuBBme3aFj83zaR2eLK1/ds FpPuT2CxONv0ht1i0+NrrBYn+j6wWvRs2Mpqcfsyr8XTpxfYLG43rmCzeL7wB7PFqbuf2S32 7pzM6MDr0dLcw+Yxq6GXzWPvtwUsHjtn3WX3uHNtD5vH/e7jTB6bl9R79G1ZxejxeZNcAGdU A6NNRmpiSmqRQmpecn5KZl66rZJ3cLxzvKmZgaGuoaWFuZJCXmJuqq2Si0+ArltmDtDdSgpl iTmlQKGAxOJiJX07TBNCQ9x0LWAaI3R9Q4LgeowM0EDCGsaMl6tPsRXs4q04v+YPUwPjJ64u Rk4OCQETiWOPG5khbDGJC/fWs3UxcnEICUxnlJjSd5QZwmljkvjZe5kNpIpNQFVi4or7YFUi Aq2MErsfbGMBcZgFXjFK7OqfxARSJSzgI/GzYRM7iM0C1NF2fAIjiM0r4CIx53E3axcjB9A+ BYk5k2xAwpwCrhK3ly5kBbGFgEo+zZjHMoGRdwEjwypG0dSC5ILipPRcI73ixNzi0rx0veT8 3E2M4Eh9Jr2DcVWDxSFGAQ5GJR7eghP3AoVYE8uKK3MPMUpwMCuJ8N40ux8oxJuSWFmVWpQf X1Sak1p8iDEZ6KiJzFKiyfnAJJJXEm9obGJmZGlkbmhhZGxOmrCSOO/BVutAIYH0xJLU7NTU gtQimC1MHJxSDYyWN2/4Z/MeNHX/fk7hYnTmn7URihd530jXzzVTWN4uoGWy+tze908WbBCp vmXVyP6ZZ+2d8jKtK+v5V3Ft5OfbF2ZfmO+klsOutNdtopey2JbM/268dnttfdf7OfzYeUzr Kvcm/pAz70XP7/khxxvptF1PY9ZCrrIFl+em7TNRq5zQ73DDOFyJpTgj0VCLuag4EQDNVQ2H GAMAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20130712_021323_735523_E5C5FD27 X-CRM114-Status: GOOD ( 12.67 ) X-Spam-Score: -7.2 (-------) Cc: linux@arm.linux.org.uk, robdclark@gmail.com, yj44.cho@samsung.com, Inki Dae , kyungmin.park@samsung.com, myungjoo.ham@samsung.com, daniel@ffwll.ch, maarten.lankhorst@canonical.com, sumit.semwal@linaro.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.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 | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+), 0 deletions(-) diff --git a/drivers/base/dma-buf.c b/drivers/base/dma-buf.c index 9a26981..e1b8583 100644 --- a/drivers/base/dma-buf.c +++ b/drivers/base/dma-buf.c @@ -80,9 +80,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, }; /*