Received: by 10.223.185.116 with SMTP id b49csp397086wrg; Tue, 20 Feb 2018 23:44:42 -0800 (PST) X-Google-Smtp-Source: AH8x227BG2JzXktCwBFYfRm7qiSeAEhUKgyzdB9CBWe9PloY3jNefawws2EDeHcrNqRJaFx56Q2a X-Received: by 2002:a17:902:6c4c:: with SMTP id h12-v6mr2272216pln.101.1519199082612; Tue, 20 Feb 2018 23:44:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519199082; cv=none; d=google.com; s=arc-20160816; b=U4yJR/KuJ3RFeqxYv8FOqwWCKalvke3zkFgxAkqGONreHefwgtxv1grBMxYBv95Pt3 1rGnjf4q7SFO6AAY8ws6N/Ax0dyOvliUoe0JX+3AmVHn07OC40Ftw3wyIW7N7FDFDiNx UOd2bNT863stIKSFsRYiSqKFFlR4QsZVf3eNG0D/Kc8sMz0Enmml9sa0A7IBDhR5KX0g favUo2Zge9KSG5fC+Fvb2AOP8PvHe4qQE039mZqi6Y867qCRLXZ76IuiYQSK5Wf8xaGO HWbA/76I+uoPE3Buk3Tadw2rULu/CQduj8Gvgi+bFKo6+HDjfF2kXGJAHCnMv5nu6iGl G87g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=n4b6Y5FYQwiYgldZJpd7GPlcpaU6nVaIj7VnA/+vh1c=; b=AVaOwMW5P2jabb4SGV5jZmDyPMuXzbzXiuhkUVn6svwni8ePQqeEyaSA/VZt6x1VOS +64JHrbBoczLnUNfzHXQwDSy6D8CT2bxzTPGL91B4xzyv2JmK4lbV6+NqHtvnYVvEt2x sHEWAc4qgmCskBeAxiLFEGJzxBzgFIepPE28v6EulMT+RAC6r6xkcCoeme++H73X5TvN W+kvvP9tVqisEUK6M1Rx93U3cLv4UTphCXeN2EmQ06iLl7wpcuyRS8HoNbQn9VTIu1MA daqpkfBtYIlyBkDB2AhfNS2CEZiILWLuTbEozCt8R6qy1Hq6fcst56gm5Rvt21jdqWeC bCTg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bg3-v6si1625722plb.28.2018.02.20.23.44.27; Tue, 20 Feb 2018 23:44:42 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751763AbeBUHhz (ORCPT + 99 others); Wed, 21 Feb 2018 02:37:55 -0500 Received: from lb3-smtp-cloud9.xs4all.net ([194.109.24.30]:35042 "EHLO lb3-smtp-cloud9.xs4all.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751369AbeBUHhy (ORCPT ); Wed, 21 Feb 2018 02:37:54 -0500 Received: from [192.168.2.10] ([212.251.195.8]) by smtp-cloud9.xs4all.net with ESMTPA id oOyKePV0UoWCOoOyNenLd2; Wed, 21 Feb 2018 08:37:52 +0100 Subject: Re: [RFCv4 16/21] v4l2: video_device: support for creating requests To: Alexandre Courbot Cc: Mauro Carvalho Chehab , Laurent Pinchart , Pawel Osciak , Marek Szyprowski , Tomasz Figa , Sakari Ailus , Gustavo Padovan , Linux Media Mailing List , LKML References: <20180220044425.169493-1-acourbot@chromium.org> <20180220044425.169493-17-acourbot@chromium.org> From: Hans Verkuil Message-ID: <1da32e17-5bc0-2bf1-c2b5-9dd55fc3c2da@xs4all.nl> Date: Wed, 21 Feb 2018 08:37:48 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-CMAE-Envelope: MS4wfA6ieMO6Wvbqcuts1CKl5z/6Cigfs+x/YbBhlgFh8Hzpdkz/6qkW2mS2fY02nLAN7MgvKqYMEiJR36LZXImw/VlKu3PKfAQq1pU4+SwsWT4BXr1UnQEP Jrou2wDBeCziiz5kYREUtghbqHOMA+7cFhl1fFKItDGNKiH3Ni9FJcukrby4akb3VN5xdOy3NLUh7yWfwiqd5jHd0N5+ORD/JJKC79lEC4wftvNchwevxrPn Dwjwi97mIDyVEfO/bmxPAVvUihcnvDsLgosOf9j7lKKMCgCsjDB/tqf81W8ksIaN6+6v4hkXzU+aw/di/1MKjNwOJkEDq2FNOdMXOFNUrGN2sNK9ZKLrRe7/ 4w4jQCjIwTS0wsCZZYvKH3YMg/7UTGoUpVBJKrlEg7wW5UwBQn1dtsogc6J0AJsQWjREmdK9ebMNgimf3niqYoieSe2yf3ebMQhSxJllLR+l/JOdv4FzZsqY qvkSGC0zS4ZeXbXy Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/21/2018 07:01 AM, Alexandre Courbot wrote: > On Wed, Feb 21, 2018 at 1:35 AM, Hans Verkuil wrote: >> On 02/20/2018 05:44 AM, Alexandre Courbot wrote: >>> Add a new VIDIOC_NEW_REQUEST ioctl, which allows to instanciate requests >>> on devices that support the request API. Requests created that way can >>> only control the device they originate from, making them suitable for >>> simple devices, but not complex pipelines. >>> >>> Signed-off-by: Alexandre Courbot >>> --- >>> Documentation/ioctl/ioctl-number.txt | 1 + >>> drivers/media/v4l2-core/v4l2-dev.c | 2 ++ >>> drivers/media/v4l2-core/v4l2-ioctl.c | 25 +++++++++++++++++++++++++ >>> include/media/v4l2-dev.h | 2 ++ >>> include/uapi/linux/videodev2.h | 3 +++ >>> 5 files changed, 33 insertions(+) >>> >>> diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt >>> index 6501389d55b9..afdc9ed255b0 100644 >>> --- a/Documentation/ioctl/ioctl-number.txt >>> +++ b/Documentation/ioctl/ioctl-number.txt >>> @@ -286,6 +286,7 @@ Code Seq#(hex) Include File Comments >>> >>> 'z' 10-4F drivers/s390/crypto/zcrypt_api.h conflict! >>> '|' 00-7F linux/media.h >>> +'|' 80-9F linux/media-request.h >>> 0x80 00-1F linux/fb.h >>> 0x89 00-06 arch/x86/include/asm/sockios.h >>> 0x89 0B-DF linux/sockios.h >> >> This ^^^^ doesn't belong in this patch. > > Do you mean we need a separate patch for this? Yes. I now also see why you started at 0x80. Let's keep that for now. > >> >>> diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c >>> index 0301fe426a43..062ebee5bffc 100644 >>> --- a/drivers/media/v4l2-core/v4l2-dev.c >>> +++ b/drivers/media/v4l2-core/v4l2-dev.c >>> @@ -559,6 +559,8 @@ static void determine_valid_ioctls(struct video_device *vdev) >>> set_bit(_IOC_NR(VIDIOC_TRY_EXT_CTRLS), valid_ioctls); >>> if (vdev->ctrl_handler || ops->vidioc_querymenu) >>> set_bit(_IOC_NR(VIDIOC_QUERYMENU), valid_ioctls); >>> + if (vdev->req_mgr) >>> + set_bit(_IOC_NR(VIDIOC_NEW_REQUEST), valid_ioctls); >>> SET_VALID_IOCTL(ops, VIDIOC_G_FREQUENCY, vidioc_g_frequency); >>> SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency); >>> SET_VALID_IOCTL(ops, VIDIOC_LOG_STATUS, vidioc_log_status); >>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c >>> index ab4968ea443f..a45fe078f8ae 100644 >>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c >>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c >>> @@ -21,6 +21,7 @@ >>> >>> #include >>> >>> +#include >>> #include >>> #include >>> #include >>> @@ -842,6 +843,13 @@ static void v4l_print_freq_band(const void *arg, bool write_only) >>> p->rangehigh, p->modulation); >>> } >>> >>> +static void vidioc_print_new_request(const void *arg, bool write_only) >>> +{ >>> + const struct media_request_new *new = arg; >>> + >>> + pr_cont("fd=0x%x\n", new->fd); >> >> I'd use %d since fds are typically shown as signed integers. > > Right. > >> >>> +} >>> + >>> static void v4l_print_edid(const void *arg, bool write_only) >>> { >>> const struct v4l2_edid *p = arg; >>> @@ -2486,6 +2494,22 @@ static int v4l_enum_freq_bands(const struct v4l2_ioctl_ops *ops, >>> return -ENOTTY; >>> } >>> >>> +static int vidioc_new_request(const struct v4l2_ioctl_ops *ops, >>> + struct file *file, void *fh, void *arg) >>> +{ >>> +#if IS_ENABLED(CONFIG_MEDIA_REQUEST_API) >>> + struct media_request_new *new = arg; >>> + struct video_device *vfd = video_devdata(file); >>> + >>> + if (!vfd->req_mgr) >>> + return -ENOTTY; >>> + >>> + return media_request_ioctl_new(vfd->req_mgr, new); >>> +#else >>> + return -ENOTTY; >>> +#endif >>> +} >> >> You don't need the #ifdef's here. media_request_ioctl_new() will be stubbed if >> CONFIG_MEDIA_REQUEST_API isn't set. > > Correct. > >> >>> + >>> struct v4l2_ioctl_info { >>> unsigned int ioctl; >>> u32 flags; >>> @@ -2617,6 +2641,7 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = { >>> IOCTL_INFO_FNC(VIDIOC_ENUM_FREQ_BANDS, v4l_enum_freq_bands, v4l_print_freq_band, 0), >>> IOCTL_INFO_FNC(VIDIOC_DBG_G_CHIP_INFO, v4l_dbg_g_chip_info, v4l_print_dbg_chip_info, INFO_FL_CLEAR(v4l2_dbg_chip_info, match)), >>> IOCTL_INFO_FNC(VIDIOC_QUERY_EXT_CTRL, v4l_query_ext_ctrl, v4l_print_query_ext_ctrl, INFO_FL_CTRL | INFO_FL_CLEAR(v4l2_query_ext_ctrl, id)), >>> + IOCTL_INFO_FNC(VIDIOC_NEW_REQUEST, vidioc_new_request, vidioc_print_new_request, 0), >>> }; >>> #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) >>> >>> diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h >>> index 53f32022fabe..e6c4e10889bc 100644 >>> --- a/include/media/v4l2-dev.h >>> +++ b/include/media/v4l2-dev.h >>> @@ -209,6 +209,7 @@ struct v4l2_file_operations { >>> * @entity: &struct media_entity >>> * @intf_devnode: pointer to &struct media_intf_devnode >>> * @pipe: &struct media_pipeline >>> + * @req_mgr: request manager to use if this device supports creating requests >>> * @fops: pointer to &struct v4l2_file_operations for the video device >>> * @device_caps: device capabilities as used in v4l2_capabilities >>> * @dev: &struct device for the video device >>> @@ -251,6 +252,7 @@ struct video_device >>> struct media_intf_devnode *intf_devnode; >>> struct media_pipeline pipe; >>> #endif >>> + struct media_request_mgr *req_mgr; >>> const struct v4l2_file_operations *fops; >>> >>> u32 device_caps; >>> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h >>> index 91cfe0cbd5c5..35706204e81d 100644 >>> --- a/include/uapi/linux/videodev2.h >>> +++ b/include/uapi/linux/videodev2.h >>> @@ -63,6 +63,7 @@ >>> #include >>> #include >>> #include >>> +#include >>> #include >>> #include >>> >>> @@ -2407,6 +2408,8 @@ struct v4l2_create_buffers { >>> >>> #define VIDIOC_QUERY_EXT_CTRL _IOWR('V', 103, struct v4l2_query_ext_ctrl) >>> >>> +#define VIDIOC_NEW_REQUEST _IOWR('V', 104, struct media_request_new) >> >> Hmm, I probably call this VIDIOC_CREATE_REQUEST (analogous to CREATE_BUFS). >> Ditto struct media_create_request and MEDIA_IOC_CREATE_REQUEST. > > Agree, it is better to keep consistency somehow. > >> >> I'm still not convinced this is the right approach (as opposed to using the media >> device node). I plan to dig deeper into the data structures tomorrow morning. > > I see no reason why this would not work. This seems more elegant than > relying on the media node for this, and also does not require pulling > the whole media controller support just to use requests on a simple > codec or m2m device. > > But of course, I may not be seeing everything. :) > > Thanks for the review! > Alex. > Regards, Hans