From patchwork Wed Apr 18 03:18:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 10347341 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 38BC060216 for ; Wed, 18 Apr 2018 03:20:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3459327F7F for ; Wed, 18 Apr 2018 03:20:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2930628469; Wed, 18 Apr 2018 03:20:48 +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=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 82E2D27F7F for ; Wed, 18 Apr 2018 03:20:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753883AbeDRDUq (ORCPT ); Tue, 17 Apr 2018 23:20:46 -0400 Received: from mail-cys01nam02on0053.outbound.protection.outlook.com ([104.47.37.53]:19134 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753595AbeDRDTk (ORCPT ); Tue, 17 Apr 2018 23:19:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pitt.onmicrosoft.com; s=selector1-pitt-edu; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=8iTusSR110xcfZttWXdjTrahs0VQT0pl8MYkNj0UGD4=; b=Y+hFvFscLXYvTPqlpsWM9A02QpLgguQMSyJj84x6o/TlMz07JL/0R5F5xm4AHTewMkLJY8pzEl4N0ep6zlEYfcPtWGVLXFDbIzxSyyVAjAAsCXVwpDctfUHkiJLIypiOqpopznubigjytawdvNb0TUtO4aMErJvVg0AoRYyzuYY= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=pitt.edu; Received: from garnet.hsd1.pa.comcast.net (2601:547:500:1222::543d) by CY1PR04MB1926.namprd04.prod.outlook.com (2a01:111:e400:50f1::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.675.9; Wed, 18 Apr 2018 03:19:38 +0000 From: Paul Elder To: linux-usb@vger.kernel.org Cc: Paul Elder , laurent.pinchart@ideasonboard.com Subject: [PATCH 3/4] usb: gadget: uvc: synchronize usb status phase delay for uvc_function_set_alt Date: Tue, 17 Apr 2018 23:18:15 -0400 Message-Id: <9038e42dcda42bbbb6cbd35686785f6be26c268c.1524011428.git.paul.elder@pitt.edu> X-Mailer: git-send-email 2.17.0 In-Reply-To: References: MIME-Version: 1.0 X-Originating-IP: [2601:547:500:1222::543d] X-ClientProxiedBy: BN3PR03CA0105.namprd03.prod.outlook.com (2603:10b6:400:4::23) To CY1PR04MB1926.namprd04.prod.outlook.com (2a01:111:e400:50f1::22) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:(55037057525728); BCL:0; PCL:0; RULEID:(7020095)(4652020)(8989080)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(8990040)(2017052603328)(7153060)(7193020); SRVR:CY1PR04MB1926; X-Microsoft-Exchange-Diagnostics: 1; CY1PR04MB1926; 3:rf6mI6OZ1co3F734nZKJjktOLC6dkb0QqCG7RCaq8XgKLYzS22gj3u6sHQxpkQggSSjYJg19m7F+VM4AlCdJYIZuHUxx7pkN/50/k8VE9vrbAyH9nhl12j0WjD/zn4/z3RmN2m/zAibSjZdYEWA7vwZBDQEvNqTO+19QuZ1IMGniFwidxpYILI+Vkms7gJ9/7lkFDu9DQlFOYa7WKKhpd9k2TGZcpdPkPflYc1Q1bkFy347mvik9x1XL7bmSiVytsdUEj1+Xblbx7WUXj6Zk2sEthw3L5fYleOY8865KPck=; 25:gpSdquC4fVcWrdXjxlFzCV1swPlTjsd6es+SB6jsreN+8bit0Mk618UtBAQrWLOyn0yD0ZNHsK8W0T7Ug+rpFc5rBRHC1mH/mYtwMbRJyKk0CxeqE+HeKunXKVV+YW9A/+CycYCsGhxW4H7Sitac123v0CyRXK0w5U5zq9JoVnLiSEnd6j1BeyE4nwIFABmfP3zyve1A54Q4ovtju+YK/o2OzE4ve4XcIPUGhiV+Q7uP0a/OEsSusmCwmTR2JEpI38DAqP42sobPrQYqxKqoSDVH6G8VchbsCy97aucca/sLLuw1xUDUrcR2XdSjkxEd10u1rFYtfLuhjiybeH+1kw==; 31:ieHQ8BFeED6bibDL7NRueUAgLA3NimcVJC42Md/hH89wsoC4/cnsrmdOvQCuBQxKNQSkuF1ZA9wixc9cT5PxJ98kkhTl46ViG6r1jI6Fr2g1rcq/LL6REC9pGwcGQyNYU32HYQW5QQbeWnvlV5jycAZxJ0kJC9cJvbqQq8DwBkH0WIgfbQFYUqp1OW45HMgD0YlgBAXiNGinDPglwm/k69cY+3R+Rc+RrDxh7NqKlB8= X-MS-TrafficTypeDiagnostic: CY1PR04MB1926: X-Microsoft-Exchange-Diagnostics: 1; CY1PR04MB1926; 20:xp+dhFWLKY4hT9HBwXue+nHxjdBU602CZ12MMcfonHVCaMoZmpIzD6fBCKp1B9RSjaGuwnAqWPVNbdCXFaUrwBIEQBMYd75ovAxPzSrB189UpmZo2MUkANrkrwE9Gd7GD50p0S9Ktw8n9c4ZjiylagDSXGYzZswI09kbUC92xFiMQ9UexRfBqySibz5RPhvDW6rfE6Kg4c9cLlgb/xNUiZOP1W2Pkv4u9f6rEN3eGCyY9I/xExt23JgCnbp9MFF6IhV6dOHNyNtuHkoCVASLnnf/HAEB8oFaAXnf7G9gmz6pri5LaLHh7iq21SGw+hr2GRnz166kgReWFM9jhv6anlopR2iGxMs8Qpqte67w1HY0nl5ui1avWVz5jXcMrZXYydQRGUIL0L/Bl2RssLDNIWFB7RUcxAuCmiyqU9NFYv6hrww3FlLBOb9xMx2xO4+Zz1QQ6m8WksdD/pL/HnM1z6TJfnmK4zcDZpk9w9vjabENhQBbepPTV1kOT/FmTpoK; 4:WAyrKADJor5pV5zxgzWvxb5ckpDhx3yeJ9zPkVhy5jhhkbyJgmJwbw8QlNfcBpkWFqNOkH2OAWckMmVG5YcMScjBoR8qf/BE3cqZdgYMRmE3Bv3gO7uMyGLw0sJXLOtAiiDW7bEcKdlmW7ilN6RitejZVBLhLVTbYkbrnP8nbBcx6/w6d9sWl2akH10222MTlD2f3K+7BVQv4Uhf/BWbasFbqbs5f0FhJViMTz85pjoeQkP/yb+Zdss9ZnqBaXJOzx7Qo45vOIqZj2mH5ggd/XBUTobwci3cbL0pZ9Ybj0DS/uyonwLXzH2cwj1oOXH5 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(55037057525728); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(93006095)(93001095)(3231232)(944501327)(52105095)(10201501046)(6041310)(201703131423095)(201702281529075)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123564045)(20161123558120)(6072148)(201708071742011); SRVR:CY1PR04MB1926; BCL:0; PCL:0; RULEID:; SRVR:CY1PR04MB1926; X-Forefront-PRVS: 06469BCC91 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(376002)(39380400002)(396003)(366004)(346002)(39860400002)(52396003)(16586007)(7736002)(6486002)(476003)(75432002)(786003)(52116002)(2361001)(316002)(6116002)(6506007)(59450400001)(46003)(2616005)(305945005)(478600001)(446003)(11346002)(186003)(16526019)(86362001)(76176011)(25786009)(2906002)(88552002)(48376002)(50226002)(118296001)(4326008)(8676002)(8936002)(50466002)(81166006)(5660300001)(44832011)(36756003)(6916009)(2351001)(6512007)(6666003); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR04MB1926; H:garnet.hsd1.pa.comcast.net; FPR:; SPF:None; LANG:en; MLV:sfv; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR04MB1926; 23:hbxkzel7vpw7Urcdau4ifcyMB98b6pKYnzzm/CPJR?= =?us-ascii?Q?5SbHjaCns1Vtg2r7IVXo9dSlpkxFe8D8IBPLFy4i3aKkU6MDoSQLAewSxqCC?= =?us-ascii?Q?wWUJEwIHEGcfCOjruxYYx1ItUWxBQh7Zo0IAZmg1pP03zenPlR/pS+GFtgbx?= =?us-ascii?Q?2ROx7m29y7Eh3LJVKhNrUGENdFTXx6c7kitPC+uNBv974yI54kubjJ/bdmo8?= =?us-ascii?Q?3zVWfjpid18HOSBJIC1v8i7HoHmHfXJXepsG9uppQabxfzffVBpBHT83DwRW?= =?us-ascii?Q?mP0mQvBZ1Z/urAPAnvJ8wBzKCHf/cmv4UitwslC5UFqPI3u4BLSwozFmmuhz?= =?us-ascii?Q?ojKrQU4wnDcFF6A44ZTfe0TrbgQh4lH0ZVF8z6Mxe1zVTogBrLMJsEhhhS2x?= =?us-ascii?Q?O+x8Jv8Rt0iCyiUAtWu3kOPyGejHj85sA2EEjcXVeyIWq4PTwc+nzrawJJUW?= =?us-ascii?Q?PBaXpTlNQbI8PBstaeDVpErD63U8Mm13v50YbjM6VjXyST1JOHhHo132acWM?= =?us-ascii?Q?gQ+uhhPGFagTDfrMzL3si7VDYDiLD7JWLUoysh4D37H3a8gD8xE71q5PRtkK?= =?us-ascii?Q?g7jrcC70J5Qytv++em4Pdn4qvV0ix/yF58YU6gPtv4DBtY6QWCxLGe5TH9hp?= =?us-ascii?Q?X7JUMYWBROBchdkI1IC0wqV+A7invb8GLlPtkCm3eLiat0AXm7nIJPxjw/8U?= =?us-ascii?Q?T19lPJCjDUTjQ6bJcX5KomDlNzw2+sxwdiv+z7lp9p8qKcbU9wT2JisHaIix?= =?us-ascii?Q?Ps1n9PTBFCmKURuC6QsYD+EJemJJoMCvlS7+RUT2+gO8rtdigGHCcFRoWN7C?= =?us-ascii?Q?2GKiKArKOiiKyvMLm1XaxuZMi+Vejt9S3JaRgjJ9jSTRwqGK1zamqRxB8diH?= =?us-ascii?Q?eo9pmuTvqXfHITzxyPeta4yQAnbf8xvRLrjIgJ9Ea55rWm6fcOpF4OkTVAka?= =?us-ascii?Q?ZfkJeQy74K61+p5eQSewFfQQ6Ndy0iNklRHtV0CN7B/3OMoetBUUJRfCsRk1?= =?us-ascii?Q?Z7/WPrxr6X/7IDfuYlXM1aoUc090+fZj5MGDq2Ew6FURir7ZQuKTxStV56Zt?= =?us-ascii?Q?Yi1ofPfReZUANOeki4dhSVZRoXN?= X-Microsoft-Antispam-Message-Info: ik3mXN62mLAMD+wGWg7fSyIZkZ/ld+sVy8ZZzEmUZuGfpRzU0XeaXQ0A7dswOFiFrnWczA08fflHHPyYLd1j0/muRPzUP7Z8c590ThxfqkyRrU2bxRE6qS/4o87ggi0Dg1LbSFfoEwZjj1E1oD671OKFAWEpXyKwn4l6yyKHD2nEVpbXoXQIw4KMm+84f+M7 X-Microsoft-Exchange-Diagnostics: 1; CY1PR04MB1926; 6:bOQIXZD1B/5v996qRmH6I/AUpsMIkA2FUs4z7+3UYni4CSlkQbg016zVt1Jgtd4lX/rbg25JWqBagB2iIRowS+b6ZcBR9hKK+q8gLJXeK8uNKN53Y9AR9lfwPLxt0kzEvUgxORE2BA1cnaEaFGyzgkTHAzbWMy/EyAXi/YFsZnXRIPt7K7op1/WYbadHaoz0fURZWv5jcSu+qIHhuN37ELf7eLK4qGt5OmxRsGnsUKccGbqHt/kJ5maIK3aHt21BeZ+PqwaT+XazbqSP1L+d6eklIiQY/qHTzsVxo4Joh9bBPQeOwQMsdVu0A0UwIYw468PEErE69eefGxs4XqjWSRhWb2DIk6NdCcvYjLKKXxHULVZpP775VLaUWNRxwB9DcciiLllJpVeUXm2wgQIEYidm3S8o0pc335c4dYM2AZPrdPPJrCtkJL2Mzr3a70hEMJRL2ozeJqjwUd21DA9MpA==; 5:8Fjj8FJBSKwkJkjfqQP8GaPbDB1LVBWj/plRjhD0MynuFgprm12/4IwHEcc3Q50mYJHPCd4wquc8RX7gSLioamRgeq2jzRqdbJLLjy48CZClx2SLYEo25nHtz0tJ48kC0ITnHJzsf0R5O0n6kMkM3FgpmH23+Af0q5lgOrj/gqY=; 24:VXQ6iZOKmH9vwBM9Mb1ZfODpXwZyNVFQiFYFaTlXEY64Oj8z0fQkapQW/OjKMB2aFBwg0sq7MINZ545rSgwndO2EWQien93RajnDOSSwe5M= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR04MB1926; 7:oJkuiuKoTWadbgG87uBiQWV+2Yw5EYRDjUgFHYfSEQ3KQvEZEYAFOTQBDIe6sDPMT1lXCvDXYq3bSNJynYU864Uwz3OBzVuPOwgNOBN24xbODbZyPhbygKs3IyYgLNHN/XcHLPw5tNFJ/Qjkzrpuli4OU/zGbOWmiSL3FSTeEek+jWNnIkFQXcfOykQUgnb8R+CVTr2Zzvrl7DmTkVd9xlMofEvt+aosCrf/VEVyLt954pgbbVKdi+N16i+wLubd X-MS-Office365-Filtering-Correlation-Id: a69a0f47-8f6f-40d6-8407-08d5a4db3864 X-OriginatorOrg: pitt.edu X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2018 03:19:38.9947 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a69a0f47-8f6f-40d6-8407-08d5a4db3864 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 9ef9f489-e0a0-4eeb-87cc-3a526112fd0d X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR04MB1926 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch depends on the previous patch in this series: [PATCH 2/4] usb: gadget: composite: add function to increment delayed_status The completion of the usb status phase from uvc_function_set_alt needs to be delayed until uvc_v4l2_streamon/off. This is currently done by uvc_function_set_alt returning USB_GADGET_DELAYED_STATUS and composite_setup detecting this to increment cdev->delayed_status. However, if uvc_v4l2_streamon/off is called in between this return and increment, uvc_function_setup_continue within uvc_v4l2_streamon/off will WARN that cdev->delayed_status is zero. To fix this, use usb_composite_setup_delay to increment cdev->delayed_status, and then return 0 so that composite_setup doesn't increment cdev->delayed_status again. Signed-off-by: Paul Elder --- drivers/usb/gadget/function/f_uvc.c | 13 ++++++++++++- drivers/usb/gadget/function/uvc_v4l2.c | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c index 9b63b28a1ee3..3324d36e809c 100644 --- a/drivers/usb/gadget/function/f_uvc.c +++ b/drivers/usb/gadget/function/f_uvc.c @@ -334,6 +334,8 @@ uvc_function_set_alt(struct usb_function *f, unsigned interface, unsigned alt) uvc->state = UVC_STATE_STOPPING; + usb_composite_setup_delay(cdev); + memset(&v4l2_event, 0, sizeof(v4l2_event)); v4l2_event.type = UVC_EVENT_STREAMOFF; v4l2_event_queue(&uvc->vdev, &v4l2_event); @@ -358,10 +360,19 @@ uvc_function_set_alt(struct usb_function *f, unsigned interface, unsigned alt) uvc->state = UVC_STATE_STARTING; + usb_composite_setup_delay(cdev); + memset(&v4l2_event, 0, sizeof(v4l2_event)); v4l2_event.type = UVC_EVENT_STREAMON; v4l2_event_queue(&uvc->vdev, &v4l2_event); - return USB_GADGET_DELAYED_STATUS; + + /* + * Normally we would return USB_GADGET_DELAYED_STATUS + * but status phase might try to continue in between + * this function returning and the delayed status + * actually being set + */ + return 0; default: return -EINVAL; diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c index fdf02b6987c0..0592e13d861c 100644 --- a/drivers/usb/gadget/function/uvc_v4l2.c +++ b/drivers/usb/gadget/function/uvc_v4l2.c @@ -235,6 +235,8 @@ uvc_v4l2_streamoff(struct file *file, void *fh, enum v4l2_buf_type type) uvc->state = UVC_STATE_CONNECTED; + uvc_function_setup_continue(uvc); + return 0; }