From: Dan Vacura <w36195@motorola.com>
To: Dan Scally <dan.scally@ideasonboard.com>
Cc: Michael Grzeschik <mgr@pengutronix.de>,
linux-usb@vger.kernel.org,
Thinh Nguyen <Thinh.Nguyen@synopsys.com>,
Jeff Vanhoof <qjv001@motorola.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jonathan Corbet <corbet@lwn.net>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Felipe Balbi <balbi@kernel.org>,
Paul Elder <paul.elder@ideasonboard.com>,
linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org
Subject: Re: [PATCH v3 6/6] usb: gadget: uvc: add configfs option for sg support
Date: Tue, 18 Oct 2022 10:00:06 -0500 [thread overview]
Message-ID: <Y06/dr1SWiwEdo9p@p1g3> (raw)
In-Reply-To: <7df3432a-c725-73f1-a5c7-914849e826e6@ideasonboard.com>
Hi Dan and Michael,
On Tue, Oct 18, 2022 at 03:10:38PM +0100, Dan Scally wrote:
> Hi Michael - again!
>
> On 18/10/2022 15:04, Michael Grzeschik wrote:
> > Hi Dan!
> > Hi Dan!
> >
> > On Tue, Oct 18, 2022 at 02:27:13PM +0100, Dan Scally wrote:
> > > Hi Dan
> > >
> > > On 17/10/2022 21:54, Dan Vacura wrote:
> > > > The scatter gather support doesn't appear to work well with some
> > > > UDC hw.
> > > > Add the ability to turn on the feature depending on the controller in
> > > > use.
> > > >
> > > > Signed-off-by: Dan Vacura <w36195@motorola.com>
> > >
> > >
> > > Nitpick: I would call it use_sg everywhere, but either way:
> >
> > Or even only "scatter_gather". How does that sound?
>
>
> I think I prefer use_sg actually, but I don't have a strong feeling either
> way.
I went with sg_supported since use_sg and scatter_gather may imply that
the feature will be guaranteed to be used if set to 1. I thought that
sg_supported conveyed that the driver supports sg ability and expressed
that it'll be used if the UDC driver supports it. Also, that name is
used in struct usb_gadget, with the similar wording: "true if we can
handle scatter-gather".
>
> >
> > >
> > > Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
> > >
> > > Tested-by: Daniel Scally <dan.scally@ideasonboard.com>
> > >
> > > > ---
> > > > V1 -> V2:
> > > > - no change, new patch in serie
> > > > V2 -> V3:
> > > > - default on, same as baseline
> > > >
> > > > Documentation/ABI/testing/configfs-usb-gadget-uvc | 1 +
> > > > Documentation/usb/gadget-testing.rst | 2 ++
> > > > drivers/usb/gadget/function/f_uvc.c | 2 ++
> > > > drivers/usb/gadget/function/u_uvc.h | 1 +
> > > > drivers/usb/gadget/function/uvc_configfs.c | 2 ++
> > > > drivers/usb/gadget/function/uvc_queue.c | 4 ++--
> > > > 6 files changed, 10 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/Documentation/ABI/testing/configfs-usb-gadget-uvc
> > > > b/Documentation/ABI/testing/configfs-usb-gadget-uvc
> > > > index 5dfaa3f7f6a4..839a75fc28ee 100644
> > > > --- a/Documentation/ABI/testing/configfs-usb-gadget-uvc
> > > > +++ b/Documentation/ABI/testing/configfs-usb-gadget-uvc
> > > > @@ -9,6 +9,7 @@ Description: UVC function directory
> > > > streaming_interval 1..16
> > > > function_name string [32]
> > > > req_int_skip_div unsigned int
> > > > + sg_supported 0..1
> > > > =================== =============================
> > > > What: /config/usb-gadget/gadget/functions/uvc.name/control
> > > > diff --git a/Documentation/usb/gadget-testing.rst
> > > > b/Documentation/usb/gadget-testing.rst
> > > > index f9b5a09be1f4..8e3072d6a590 100644
> > > > --- a/Documentation/usb/gadget-testing.rst
> > > > +++ b/Documentation/usb/gadget-testing.rst
> > > > @@ -796,6 +796,8 @@ The uvc function provides these attributes
> > > > in its function directory:
> > > > function_name name of the interface
> > > > req_int_skip_div divisor of total requests to aid in
> > > > calculating
> > > > interrupt frequency, 0 indicates all interrupt
> > > > + sg_supported allow for scatter gather to be used if the UDC
> > > > + hw supports it
> > > > ===================
> > > > ================================================
> > > > There are also "control" and "streaming" subdirectories, each
> > > > of which contain
> > > > diff --git a/drivers/usb/gadget/function/f_uvc.c
> > > > b/drivers/usb/gadget/function/f_uvc.c
> > > > index e40ca26b9c55..d08ebe3ffeb2 100644
> > > > --- a/drivers/usb/gadget/function/f_uvc.c
> > > > +++ b/drivers/usb/gadget/function/f_uvc.c
> > > > @@ -656,6 +656,7 @@ uvc_function_bind(struct usb_configuration
> > > > *c, struct usb_function *f)
> > > > (opts->streaming_maxburst + 1));
> > > > uvc->config_skip_int_div = opts->req_int_skip_div;
> > > > + uvc->video.queue.use_sg = opts->sg_supported;
> >
> > Why do you set this here?
This is set here to enable or disable the support. I wasn't aware of
direct access to opts in uvcg_queue_init(). I'll update to use it
directly as that'll be more clear.
> >
> > > > /* Allocate endpoints. */
> > > > ep = usb_ep_autoconfig(cdev->gadget, &uvc_control_ep);
> > > > @@ -875,6 +876,7 @@ static struct usb_function_instance
> > > > *uvc_alloc_inst(void)
> > > > opts->streaming_interval = 1;
> > > > opts->streaming_maxpacket = 1024;
> > > > opts->req_int_skip_div = 4;
> > > > + opts->sg_supported = 1;
> > > > snprintf(opts->function_name, sizeof(opts->function_name),
> > > > "UVC Camera");
> > > > ret = uvcg_attach_configfs(opts);
> > > > diff --git a/drivers/usb/gadget/function/u_uvc.h
> > > > b/drivers/usb/gadget/function/u_uvc.h
> > > > index 6f73bd5638ed..5ccced629925 100644
> > > > --- a/drivers/usb/gadget/function/u_uvc.h
> > > > +++ b/drivers/usb/gadget/function/u_uvc.h
> > > > @@ -25,6 +25,7 @@ struct f_uvc_opts {
> > > > unsigned int streaming_maxpacket;
> > > > unsigned int streaming_maxburst;
> > > > unsigned int req_int_skip_div;
> > > > + unsigned int sg_supported;
> > > > unsigned int control_interface;
> > > > unsigned int streaming_interface;
> > > > diff --git a/drivers/usb/gadget/function/uvc_configfs.c
> > > > b/drivers/usb/gadget/function/uvc_configfs.c
> > > > index 419e926ab57e..3784c0e02d01 100644
> > > > --- a/drivers/usb/gadget/function/uvc_configfs.c
> > > > +++ b/drivers/usb/gadget/function/uvc_configfs.c
> > > > @@ -2351,6 +2351,7 @@ UVCG_OPTS_ATTR(streaming_interval,
> > > > streaming_interval, 16);
> > > > UVCG_OPTS_ATTR(streaming_maxpacket, streaming_maxpacket, 3072);
> > > > UVCG_OPTS_ATTR(streaming_maxburst, streaming_maxburst, 15);
> > > > UVCG_OPTS_ATTR(req_int_skip_div, req_int_skip_div, UINT_MAX);
> > > > +UVCG_OPTS_ATTR(sg_supported, sg_supported, 1);
> > > > #undef UVCG_OPTS_ATTR
> > > > @@ -2401,6 +2402,7 @@ static struct configfs_attribute *uvc_attrs[] = {
> > > > &f_uvc_opts_attr_streaming_maxpacket,
> > > > &f_uvc_opts_attr_streaming_maxburst,
> > > > &f_uvc_opts_attr_req_int_skip_div,
> > > > + &f_uvc_opts_attr_sg_supported,
> > > > &f_uvc_opts_string_attr_function_name,
> > > > NULL,
> > > > };
> > > > diff --git a/drivers/usb/gadget/function/uvc_queue.c
> > > > b/drivers/usb/gadget/function/uvc_queue.c
> > > > index 02559906a55a..3c7aa5c4bba2 100644
> > > > --- a/drivers/usb/gadget/function/uvc_queue.c
> > > > +++ b/drivers/usb/gadget/function/uvc_queue.c
> > > > @@ -149,11 +149,11 @@ int uvcg_queue_init(struct uvc_video_queue
> > > > *queue, struct device *dev, enum v4l2
> > > > queue->queue.buf_struct_size = sizeof(struct uvc_buffer);
> > > > queue->queue.ops = &uvc_queue_qops;
> > > > queue->queue.lock = lock;
> > > > - if (cdev->gadget->sg_supported) {
> > > > + if (queue->use_sg && cdev->gadget->sg_supported) {
> > > > queue->queue.mem_ops = &vb2_dma_sg_memops;
> > > > - queue->use_sg = 1;
> > > > } else {
> > > > queue->queue.mem_ops = &vb2_vmalloc_memops;
> > > > + queue->use_sg = false;
> >
> > I am unsure, but can you actually not always use vb2_dma_sg_memops.
> >
> > With my last patch we always set buf->mem to vb2_plane_vaddr(vb, 0);
> >
> > https://lore.kernel.org/linux-usb/20221017221141.3134818-1-m.grzeschik@pengutronix.de/T/#u
> >
> >
> >
> > The condition to decide if encode_isoc_sg or encode_isoc should then
> > remain the last place to switch between sg or not. I would hook the
> > userspace decision in here.
> >
> > You can also directly get to opts->scatter_gather by using
> >
> > struct f_uvc_opts *opts = fi_to_f_uvc_opts(uvc->func.fi);
> >
> > in the function uvcg_video_enable.
> >
> > > > }
> > > > queue->queue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY
> > >
> >
> > Thanks,
> > Michael
> >
next prev parent reply other threads:[~2022-10-18 15:00 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-17 20:54 [PATCH v3 0/6] uvc gadget performance issues Dan Vacura
2022-10-17 20:54 ` [PATCH] usb: gadget: uvc: fix dropped frame after missed isoc Dan Vacura
2022-10-18 1:50 ` Bagas Sanjaya
2022-10-18 2:15 ` Dan Vacura
2022-10-18 5:13 ` Greg Kroah-Hartman
2022-10-17 20:54 ` [PATCH v3 2/6] usb: dwc3: gadget: cancel requests instead of release " Dan Vacura
2022-10-17 21:30 ` Thinh Nguyen
2022-10-18 2:10 ` Dan Vacura
2022-10-18 18:45 ` Thinh Nguyen
2022-10-18 19:13 ` Michael Grzeschik
2022-10-18 22:45 ` Thinh Nguyen
2022-10-19 6:46 ` Michael Grzeschik
2024-02-22 0:02 ` Michael Grzeschik
2024-02-22 1:20 ` Thinh Nguyen
2024-02-27 21:01 ` Michael Grzeschik
2024-03-07 1:57 ` Thinh Nguyen
2024-03-07 16:15 ` Michael Grzeschik
2024-03-08 2:47 ` Thinh Nguyen
2022-10-17 20:54 ` [PATCH v3 3/6] usb: gadget: uvc: fix sg handling in error case Dan Vacura
2022-10-17 20:54 ` [PATCH v3 4/6] usb: gadget: uvc: fix sg handling during video encode Dan Vacura
2022-10-17 20:54 ` [PATCH v3 5/6] usb: gadget: uvc: make interrupt skip logic configurable Dan Vacura
2022-10-17 20:54 ` [PATCH v3 6/6] usb: gadget: uvc: add configfs option for sg support Dan Vacura
2022-10-18 13:27 ` Dan Scally
2022-10-18 14:04 ` Michael Grzeschik
2022-10-18 14:09 ` Dan Scally
2022-10-18 14:10 ` Dan Scally
2022-10-18 15:00 ` Dan Vacura [this message]
2022-10-18 14:32 ` Alan Stern
2022-10-18 15:14 ` Dan Vacura
2022-10-18 15:23 ` Alan Stern
2022-10-18 15:28 ` Michael Grzeschik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y06/dr1SWiwEdo9p@p1g3 \
--to=w36195@motorola.com \
--cc=Thinh.Nguyen@synopsys.com \
--cc=balbi@kernel.org \
--cc=corbet@lwn.net \
--cc=dan.scally@ideasonboard.com \
--cc=gregkh@linuxfoundation.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mgr@pengutronix.de \
--cc=paul.elder@ideasonboard.com \
--cc=qjv001@motorola.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.