From patchwork Thu Apr 19 15:41:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Kocialkowski X-Patchwork-Id: 10351087 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E21B56054B for ; Thu, 19 Apr 2018 15:47:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D1A2328785 for ; Thu, 19 Apr 2018 15:47:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C5F4B28747; Thu, 19 Apr 2018 15:47:19 +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=-2.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6BEDF28ADD for ; Thu, 19 Apr 2018 15:47:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=vcDE4GCW+iMZDSHWBPM4SNJJFqq47t13PxjbM/HuNbY=; b=cU9Gs/Xv14AHQu29YGIhPd1+oy eumT0rUqAa+HWAquRTLNhyYxWX80VeDPc0wqVvOEwlS7XKjxVZoxoMOyRTU2RFNyo3kSGeFIOKaRX Zh56kFmG+bNYojCpsh3toM42Su/arvOvtcyvo9zsgZrOr3+Yu5EDam0fS3BFpoU+Pak7cb4bVXs7O LlLB76ROyLeSYjG4OiPAg6alMrqNSxnMx7ylEnLyH/Q4ce71+UMlmp7LYVgrdrQ2RMZSkWB2Zzxl/ d5VDHX8ebiEdjCwM4WzygHo/J4qHmj2yAchVGqclrd9sj0nZ6H985sjea/EHkqAwcePombkPZhl90 jwM0Jexg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1f9Blp-0008Oa-Qr; Thu, 19 Apr 2018 15:46:49 +0000 Received: from mail.bootlin.com ([62.4.15.54]) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1f9Bj6-0005am-VQ for linux-arm-kernel@lists.infradead.org; Thu, 19 Apr 2018 15:44:05 +0000 Received: by mail.bootlin.com (Postfix, from userid 110) id 675D12072F; Thu, 19 Apr 2018 17:43:50 +0200 (CEST) Received: from localhost.localdomain (LStLambert-657-1-97-87.w90-63.abo.wanadoo.fr [90.63.216.87]) by mail.bootlin.com (Postfix) with ESMTPSA id EDB1E2072F; Thu, 19 Apr 2018 17:43:49 +0200 (CEST) From: Paul Kocialkowski To: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com Subject: [PATCH v2 03/10] videobuf2-core: Add helper to get buffer private data from media request Date: Thu, 19 Apr 2018 17:41:17 +0200 Message-Id: <20180419154124.17512-4-paul.kocialkowski@bootlin.com> X-Mailer: git-send-email 2.16.3 In-Reply-To: <20180419154124.17512-1-paul.kocialkowski@bootlin.com> References: <20180419154124.17512-1-paul.kocialkowski@bootlin.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180419_084401_344758_6821E5E9 X-CRM114-Status: GOOD ( 13.94 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Philipp Zabel , Pawel Osciak , Maxime Ripard , Kyungmin Park , Tomasz Figa , Paul Kocialkowski , Chen-Yu Tsai , Rob Herring , Hans Verkuil , Alexandre Courbot , Sakari Ailus , Mauro Carvalho Chehab , Arnd Bergmann , Marek Szyprowski MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP When calling media operation driver callbacks related to media requests, only a pointer to the request itself is provided, which is insufficient to retrieve the driver's context. Since the driver context is usually set as vb2 queue private data and given that the core can determine which objects attached to the request are buffers, it is possible to extract the associated private data for the first buffer found. This is required in order to access the current m2m context from m2m drivers' private data in the context of media request operation callbacks. More specifically, this allows scheduling m2m device runs from the newly-introduced request complete operation. Signed-off-by: Paul Kocialkowski --- drivers/media/common/videobuf2/videobuf2-core.c | 15 +++++++++++++++ include/media/videobuf2-core.h | 1 + 2 files changed, 16 insertions(+) diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c index 13c9d9e243dd..6fa46bfc620f 100644 --- a/drivers/media/common/videobuf2/videobuf2-core.c +++ b/drivers/media/common/videobuf2/videobuf2-core.c @@ -1351,6 +1351,21 @@ bool vb2_core_request_has_buffers(struct media_request *req) } EXPORT_SYMBOL_GPL(vb2_core_request_has_buffers); +void *vb2_core_request_find_buffer_priv(struct media_request *req) +{ + struct media_request_object *obj; + struct vb2_buffer *vb; + + obj = media_request_object_find(req, &vb2_core_req_ops, NULL); + if (!obj) + return NULL; + + vb = container_of(obj, struct vb2_buffer, req_obj); + + return vb2_get_drv_priv(vb->vb2_queue); +} +EXPORT_SYMBOL_GPL(vb2_core_request_find_buffer_priv); + int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb, struct media_request *req) { diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h index 032bd1bec555..65c0cf6afb55 100644 --- a/include/media/videobuf2-core.h +++ b/include/media/videobuf2-core.h @@ -1153,4 +1153,5 @@ int vb2_verify_memory_type(struct vb2_queue *q, enum vb2_memory memory, unsigned int type); bool vb2_core_request_has_buffers(struct media_request *req); +void *vb2_core_request_find_buffer_priv(struct media_request *req); #endif /* _MEDIA_VIDEOBUF2_CORE_H */