Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp5623879pxu; Wed, 23 Dec 2020 00:56:06 -0800 (PST) X-Google-Smtp-Source: ABdhPJzqeJAIeHj4qq2vqiXRB7vRK469F/Tc0S+0PXV5OHoHvwY7XrsOdQgdqVOwx/GtE5kRWjt+ X-Received: by 2002:a17:906:39d5:: with SMTP id i21mr22421425eje.339.1608713765766; Wed, 23 Dec 2020 00:56:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1608713765; cv=none; d=google.com; s=arc-20160816; b=WwKAjUaVbeEKKHPkWa6FOqEntTXqp0hBdkNOjYRseuWVwMKcsNCWfWKlIHqek9DIag JqpfllYc2fz0w/PyGweFnAxpQvQhFGXb4n9FucLEUn/RW6bOjW9yVqus6mEiJ/8f7eDx nLKS/jtW6KAWPvILHzdHRwTNLMUGsMkEQBYbFsYUvQ0dbi1icjZ59s0zTbTuvlZEUBXl q3g23Q2yy47nEnI8DUOfIla+prOXCrfYr3Va0+unNpzFYaS8x2HDEe2Tf/hJYiqo/lid Uzy8iQTwkKVro7gbxn3QOoPzhEs2rqCHjRD1/PiaoftY9W+DBqKE2TJpBqWyDczoy36Z H6cw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=7ues6KpTd0xZvaRl6AtS89EJxcg9ra8TZ/k832kpiME=; b=Dzaf9svJA/bOotvN2GzEfGQBTbYDnB5pnTuwfb2c9eJWPOeRYWL3pF9Fv1pVCRuna8 YiS43sWQguulvB2/b+4KIcWLyV+XSwEVsCTrAlnvSmAJ0Xu8plLYcvDK/rRG01euwH7F LtP4W7bdbHRP1XZ02RQtKrXclS0ipyP6Tu8HpDIu6VbjnruErjBlvJyjJqJAEkgq+Esk OB8SHCg0o8KjG8znHbyMg9vvqVRIkvbqxAwoLQUSMMmGIoCESW8QEAkcLBHg0yGTk26O xoin9hCHhhTGt6KldpMeITgmnPXMquNTr9z6zXNvJ3vtWeAKXuJWvwogEo9aAV140S7p 4Ojg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=vpK417Fq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t18si4827440ejc.249.2020.12.23.00.55.43; Wed, 23 Dec 2020 00:56:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=vpK417Fq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728236AbgLWIyF (ORCPT + 99 others); Wed, 23 Dec 2020 03:54:05 -0500 Received: from perceval.ideasonboard.com ([213.167.242.64]:51614 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727050AbgLWIyF (ORCPT ); Wed, 23 Dec 2020 03:54:05 -0500 Received: from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 4577AA32; Wed, 23 Dec 2020 09:53:22 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1608713602; bh=5GX1JyWecfHUWLK8aJoyu/c1Nfv3NybhlapwK2TIvfg=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=vpK417Fq/kdfUVcjxPTtpHUBXkxREiKupacdBYQhgg/YxZXu3QTY1iF7qIuCeU4ID Mz0tjpvl2BMMqDr39rADhH6rbLiETlLPSmmt7JxyMornJ/TZdNjpP76z++EDz/UHx+ rCW/zB7niGjKBlve9Z6jpVnqSE7Tk5gksbR7fUi0= Date: Wed, 23 Dec 2020 10:53:14 +0200 From: Laurent Pinchart To: Ricardo Ribalda Cc: Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v6 04/11] media: uvcvideo: Add uvc_ctrl_status_event_direct Message-ID: References: <20201222230446.1027916-1-ribalda@chromium.org> <20201222230446.1027916-5-ribalda@chromium.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20201222230446.1027916-5-ribalda@chromium.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Ricardo, Thank you for the patch. On Wed, Dec 23, 2020 at 12:04:39AM +0100, Ricardo Ribalda wrote: > Provide a code path for events that can be sent without a work-queue, > this is, that do not belong to an URB and are not handled in the top > half on an irq-handled. > > Signed-off-by: Ricardo Ribalda > --- > drivers/media/usb/uvc/uvc_ctrl.c | 35 +++++++++++++++++++++++++++----- > drivers/media/usb/uvc/uvcvideo.h | 2 ++ > 2 files changed, 32 insertions(+), 5 deletions(-) > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > index 9f6174a10e73..5fe228a3213b 100644 > --- a/drivers/media/usb/uvc/uvc_ctrl.c > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > @@ -1254,17 +1254,14 @@ static void uvc_ctrl_send_slave_event(struct uvc_video_chain *chain, > uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes); > } > > -static void uvc_ctrl_status_event_work(struct work_struct *work) > +static void __uvc_ctrl_status_event(struct uvc_device *dev, > + struct uvc_ctrl_work *w) As this function doesn't deal with the work queue, should it receive the members of uvc_ctrl_work as direct arguments ? You could then drop the separate uvc_ctrl_status_event_direct(), or rather rename this function to uvc_ctrl_status_event_direct(). Speaking of names, maybe uvc_ctrl_status_event() should be renamed to uvc_ctrl_status_event_async(), and this function become uvc_ctrl_status_event() ? > { > - struct uvc_device *dev = container_of(work, struct uvc_device, > - async_ctrl.work); > - struct uvc_ctrl_work *w = &dev->async_ctrl; > struct uvc_video_chain *chain = w->chain; > struct uvc_control_mapping *mapping; > struct uvc_control *ctrl = w->ctrl; > struct uvc_fh *handle; > unsigned int i; > - int ret; > > mutex_lock(&chain->ctrl_mutex); > > @@ -1291,6 +1288,16 @@ static void uvc_ctrl_status_event_work(struct work_struct *work) > } > > mutex_unlock(&chain->ctrl_mutex); > +} > + > +static void uvc_ctrl_status_event_work(struct work_struct *work) > +{ > + struct uvc_device *dev = container_of(work, struct uvc_device, > + async_ctrl.work); > + struct uvc_ctrl_work *w = &dev->async_ctrl; > + int ret; > + > + __uvc_ctrl_status_event(dev, w); > > /* Resubmit the URB. */ > w->urb->interval = dev->int_ep->desc.bInterval; > @@ -1321,6 +1328,24 @@ bool uvc_ctrl_status_event(struct urb *urb, struct uvc_video_chain *chain, > return true; > } > > +void uvc_ctrl_status_event_direct(struct uvc_video_chain *chain, > + struct uvc_control *ctrl, const u8 *data) > +{ > + struct uvc_device *dev = chain->dev; > + struct uvc_ctrl_work w; > + > + if (list_empty(&ctrl->info.mappings)) { > + ctrl->handle = NULL; > + return; > + } > + > + w.data = data; > + w.chain = chain; > + w.ctrl = ctrl; > + > + __uvc_ctrl_status_event(dev, &w); > +} > + > static bool uvc_ctrl_xctrls_has_control(const struct v4l2_ext_control *xctrls, > unsigned int xctrls_count, u32 id) > { > diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h > index c50b0546901f..d7954dcc2b60 100644 > --- a/drivers/media/usb/uvc/uvcvideo.h > +++ b/drivers/media/usb/uvc/uvcvideo.h > @@ -845,6 +845,8 @@ void uvc_ctrl_cleanup_device(struct uvc_device *dev); > int uvc_ctrl_restore_values(struct uvc_device *dev); > bool uvc_ctrl_status_event(struct urb *urb, struct uvc_video_chain *chain, > struct uvc_control *ctrl, const u8 *data); > +void uvc_ctrl_status_event_direct(struct uvc_video_chain *chain, > + struct uvc_control *ctrl, const u8 *data); > > int uvc_ctrl_begin(struct uvc_video_chain *chain); > int __uvc_ctrl_commit(struct uvc_fh *handle, int rollback, -- Regards, Laurent Pinchart