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: 19253 Received: from mail.tu-berlin.de ([130.149.7.33]) by www.linuxtv.org with esmtp (Exim 4.72) (envelope-from ) id 1UxWbN-0008Gp-IM; Fri, 12 Jul 2013 08:13:09 +0200 X-tubIT-Incoming-IP: 209.132.180.67 Received: from vger.kernel.org ([209.132.180.67]) by mail.tu-berlin.de (exim-4.72/mailfrontend-5) with esmtp id 1UxWbL-0005mT-6r; Fri, 12 Jul 2013 08:13:09 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752922Ab3GLGM5 (ORCPT + 1 other); Fri, 12 Jul 2013 02:12:57 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:63275 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752418Ab3GLGMz (ORCPT ); Fri, 12 Jul 2013 02:12:55 -0400 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>; 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 Cc: maarten.lankhorst@canonical.com, daniel@ffwll.ch, robdclark@gmail.com, sumit.semwal@linaro.org, linux@arm.linux.org.uk, kyungmin.park@samsung.com, myungjoo.ham@samsung.com, yj44.cho@samsung.com, Inki Dae 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 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-PMX-Version: 6.0.0.2142326, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2013.7.12.60324 X-PMX-Spam: Gauge=IIIIIIII, Probability=8%, Report=' MULTIPLE_RCPTS 0.1, HTML_00_01 0.05, HTML_00_10 0.05, BODYTEXTP_SIZE_3000_LESS 0, BODY_SIZE_1800_1899 0, BODY_SIZE_2000_LESS 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, URI_ENDS_IN_HTML 0, __ANY_URI 0, __CP_URI_IN_BODY 0, __HAS_FROM 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __HAS_X_MAILING_LIST 0, __IN_REP_TO 0, __MIME_TEXT_ONLY 0, __MULTIPLE_RCPTS_CC_X2 0, __SANE_MSGID 0, __SUBJ_ALPHA_END 0, __TO_MALFORMED_2 0, __TO_NO_NAME 0, __URI_NO_WWW 0, __URI_NS ' 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, }; /*