Received: by 2002:a05:7412:3784:b0:e2:908c:2ebd with SMTP id jk4csp1349196rdb; Mon, 2 Oct 2023 07:04:51 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGNnbZT7TXJdddm/0NyJr0ILfNSQv/NiaxORyQaOJADZe0dZUql3F88078y8+WME0KZBYko X-Received: by 2002:a17:902:e843:b0:1c7:21cc:2750 with SMTP id t3-20020a170902e84300b001c721cc2750mr17590722plg.28.1696255490953; Mon, 02 Oct 2023 07:04:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696255490; cv=none; d=google.com; s=arc-20160816; b=allRF4Nx++kk9dEznOytf0h6xZHVoutRsVz+o3ZV44QW0b9kNvKQFvtvpsr8rZTtox Fny32JwLr6Am0GNCYhAyeM/1X8HLpUzhy4U7TqugUFYuQsECVhusn9ORnoSzcmXDHC/I C/6RY7oka8qPNm84yFTa1LQQ8L7vJ/8JxnacLJDkAz5lBnHtb/dlfO4g1shrjAhY3/wH yNP1drrTHDSNl24Qio6OEEveByDG+hpWuV3pJ/2cNGgqgObWJxkNu8MIwlUH8JEgbeaC Oag4q1JtxCC2ybbLBwYh6IIHK1iThfYh1Y8VDT/CS18t9a/RnTaTrKXeR0bytRWOGHWP aJ5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=5ISUsPkiz2bS8CAKj9EZdOkw9NDxUzFig1E68GK42LU=; fh=rvfjkWKWQ7H3dxwU/Mrzlf1SBsZ3Tuo/EBElQFetDNM=; b=EtCMPuGkhMd2HThwF3mv/sfzD39b/bh1CbxDOrQLtTgJegmWQ7IC+Jf9vdTqBb1GTk PZ37j/FJfPITK8sHFm3aiAJd6Y2W+YIfwlDTf/8jpQ2aC3IyAMiEXVLQW8nJT5GXxzao eD39t4CTle0hbsMwFpinIpg1J65jBTMnRRt9NfM5khL0DUloMoA5ApXRHWvcuc/ZOV16 Ut7w8YJ7uVzdBmDbPPBI4b2dCFoBlijJOVl6osWTRgV1BNChUJNyp7psR1YCKfLHYo3I tHkWSp3zm6KWkNcEnd/iFTjCp+s9qmSLJCxgS7YrU5r2Rm/+7tV8kHb7SWl4SuJ0XtN1 eUqw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=xs4all.nl Return-Path: Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id p1-20020a170902e74100b001bf559a7bc6si5632380plf.465.2023.10.02.07.04.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Oct 2023 07:04:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=xs4all.nl Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 5AF1F8028A74; Mon, 2 Oct 2023 06:50:36 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237602AbjJBNuS (ORCPT + 99 others); Mon, 2 Oct 2023 09:50:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34480 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237525AbjJBNuJ (ORCPT ); Mon, 2 Oct 2023 09:50:09 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 19F9BEE; Mon, 2 Oct 2023 06:49:52 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D1566C433C8; Mon, 2 Oct 2023 13:49:47 +0000 (UTC) Message-ID: <71d5e43f-fab8-49ea-b5d1-441beb6cf351@xs4all.nl> Date: Mon, 2 Oct 2023 15:49:45 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v8 13/53] media: Report the maximum possible number of buffers for the queue Content-Language: en-US, nl To: Benjamin Gaignard , mchehab@kernel.org, tfiga@chromium.org, m.szyprowski@samsung.com, ming.qian@nxp.com, ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de, gregkh@linuxfoundation.org, nicolas.dufresne@collabora.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev, kernel@collabora.com References: <20230927153558.159278-1-benjamin.gaignard@collabora.com> <20230927153558.159278-14-benjamin.gaignard@collabora.com> <2f1d1983-6038-c216-e362-d08a05c344fc@collabora.com> From: Hans Verkuil In-Reply-To: <2f1d1983-6038-c216-e362-d08a05c344fc@collabora.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 02 Oct 2023 06:50:36 -0700 (PDT) On 02/10/2023 15:46, Benjamin Gaignard wrote: > > Le 02/10/2023 à 15:37, Hans Verkuil a écrit : >> On 27/09/2023 17:35, Benjamin Gaignard wrote: >>> Use one of the struct v4l2_create_buffers reserved bytes to report >>> the maximum possible number of buffers for the queue. >>> V4l2 framework set V4L2_BUF_CAP_SUPPORTS_SET_MAX_BUFS flags in queue >>> capabilities so userland can know when the field is valid. >>> >>> Signed-off-by: Benjamin Gaignard >>> --- >>>   .../userspace-api/media/v4l/vidioc-create-bufs.rst       | 8 ++++++-- >>>   Documentation/userspace-api/media/v4l/vidioc-reqbufs.rst | 1 + >>>   drivers/media/common/videobuf2/videobuf2-v4l2.c          | 9 +++++++-- >>>   drivers/media/v4l2-core/v4l2-ioctl.c                     | 4 ++-- >>>   include/uapi/linux/videodev2.h                           | 7 ++++++- >>>   5 files changed, 22 insertions(+), 7 deletions(-) >>> >>> diff --git a/Documentation/userspace-api/media/v4l/vidioc-create-bufs.rst b/Documentation/userspace-api/media/v4l/vidioc-create-bufs.rst >>> index a048a9f6b7b6..1a46549e7462 100644 >>> --- a/Documentation/userspace-api/media/v4l/vidioc-create-bufs.rst >>> +++ b/Documentation/userspace-api/media/v4l/vidioc-create-bufs.rst >>> @@ -116,9 +116,13 @@ than the number requested. >>>         - ``flags`` >>>         - Specifies additional buffer management attributes. >>>       See :ref:`memory-flags`. >>> - >>>       * - __u32 >>> -      - ``reserved``\ [6] >>> +      - ``max_buffers`` >>> +      - If V4L2_BUF_CAP_SUPPORTS_SET_MAX_BUFS capability flag is set >>> +        this field indicate the maximum possible number of buffers >>> +        for this queue. >>> +    * - __u32 >>> +      - ``reserved``\ [5] >>>         - A place holder for future extensions. Drivers and applications >>>       must set the array to zero. >>>   diff --git a/Documentation/userspace-api/media/v4l/vidioc-reqbufs.rst b/Documentation/userspace-api/media/v4l/vidioc-reqbufs.rst >>> index 099fa6695167..0395187e1a5a 100644 >>> --- a/Documentation/userspace-api/media/v4l/vidioc-reqbufs.rst >>> +++ b/Documentation/userspace-api/media/v4l/vidioc-reqbufs.rst >>> @@ -120,6 +120,7 @@ aborting or finishing any DMA in progress, an implicit >>>   .. _V4L2-BUF-CAP-SUPPORTS-ORPHANED-BUFS: >>>   .. _V4L2-BUF-CAP-SUPPORTS-M2M-HOLD-CAPTURE-BUF: >>>   .. _V4L2-BUF-CAP-SUPPORTS-MMAP-CACHE-HINTS: >>> +.. _V4L2-BUF-CAP-SUPPORTS-SET-MAX-BUFS: >>>     .. raw:: latex >>>   diff --git a/drivers/media/common/videobuf2/videobuf2-v4l2.c b/drivers/media/common/videobuf2/videobuf2-v4l2.c >>> index 278ea1107b01..655133f1ae2b 100644 >>> --- a/drivers/media/common/videobuf2/videobuf2-v4l2.c >>> +++ b/drivers/media/common/videobuf2/videobuf2-v4l2.c >>> @@ -686,6 +686,7 @@ EXPORT_SYMBOL(vb2_querybuf); >>>   static void fill_buf_caps(struct vb2_queue *q, u32 *caps) >>>   { >>>       *caps = V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS; >>> +    *caps |= V4L2_BUF_CAP_SUPPORTS_SET_MAX_BUFS; >>>       if (q->io_modes & VB2_MMAP) >>>           *caps |= V4L2_BUF_CAP_SUPPORTS_MMAP; >>>       if (q->io_modes & VB2_USERPTR) >>> @@ -767,9 +768,13 @@ int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create) >>>         fill_buf_caps(q, &create->capabilities); >>>       validate_memory_flags(q, create->memory, &create->flags); >>> -    create->index = q->num_buffers; >>> -    if (create->count == 0) >>> + >>> +    create->max_buffers = q->max_num_buffers; >>> + >>> +    if (create->count == 0) { >>> +        create->index = vb2_get_num_buffers(q); >> This breaks git bisect: this function isn't introduced until patch 21/53. >> >> Note: with the build scripts you can just run it with: >> >> ./build.sh -patches 53 ... >> >> and it will apply each patch in sequence and attempt to compile it. > > It should  be create->index = q->num_buffers; > The error is also in v9... Sorry, I meant to reply to the v9 patch, so yes, it is also in v9 :-) Hans > >> >> Regards, >> >>     Hans >> >>>           return ret != -EBUSY ? ret : 0; >>> +    } >>>         switch (f->type) { >>>       case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: >>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c >>> index f4d9d6279094..700db197e371 100644 >>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c >>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c >>> @@ -483,9 +483,9 @@ static void v4l_print_create_buffers(const void *arg, bool write_only) >>>   { >>>       const struct v4l2_create_buffers *p = arg; >>>   -    pr_cont("index=%d, count=%d, memory=%s, capabilities=0x%08x, ", >>> +    pr_cont("index=%d, count=%d, memory=%s, capabilities=0x%08x, max buffers=%u", >>>           p->index, p->count, prt_names(p->memory, v4l2_memory_names), >>> -        p->capabilities); >>> +        p->capabilities, p->max_buffers); >>>       v4l_print_format(&p->format, write_only); >>>   } >>>   diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h >>> index 78260e5d9985..b0dbb1be728c 100644 >>> --- a/include/uapi/linux/videodev2.h >>> +++ b/include/uapi/linux/videodev2.h >>> @@ -1034,6 +1034,7 @@ struct v4l2_requestbuffers { >>>   #define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS        (1 << 4) >>>   #define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF    (1 << 5) >>>   #define V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS        (1 << 6) >>> +#define V4L2_BUF_CAP_SUPPORTS_SET_MAX_BUFS        (1 << 7) >>>     /** >>>    * struct v4l2_plane - plane info for multi-planar buffers >>> @@ -2604,6 +2605,9 @@ struct v4l2_dbg_chip_info { >>>    * @flags:    additional buffer management attributes (ignored unless the >>>    *        queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability >>>    *        and configured for MMAP streaming I/O). >>> + * @max_buffers: if V4L2_BUF_CAP_SUPPORTS_SET_MAX_BUFS capability flag is set >>> + *         this field indicate the maximum possible number of buffers >>> + *         for this queue. >>>    * @reserved:    future extensions >>>    */ >>>   struct v4l2_create_buffers { >>> @@ -2613,7 +2617,8 @@ struct v4l2_create_buffers { >>>       struct v4l2_format    format; >>>       __u32            capabilities; >>>       __u32            flags; >>> -    __u32            reserved[6]; >>> +    __u32            max_buffers; >>> +    __u32            reserved[5]; >>>   }; >>>     /* >>