Message ID | 20230105230119.1.I75494ebee7027a50235ce4b1e930fa73a578fbe2@changeid |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp535342wrt; Thu, 5 Jan 2023 15:06:28 -0800 (PST) X-Google-Smtp-Source: AMrXdXsonZY1RewXt/DFk1sU5uXtN/v6UWxpfsdicefGcvpJ0iSHLdYjozfoHziTqYQ/Rbtjx1JU X-Received: by 2002:aa7:8215:0:b0:580:9151:afe5 with SMTP id k21-20020aa78215000000b005809151afe5mr45933439pfi.22.1672959987961; Thu, 05 Jan 2023 15:06:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672959987; cv=none; d=google.com; s=arc-20160816; b=I3VSPlVLGFO7hKvubmjn2elroVd0WSMBT7LGNYflIhNAzUONc4cl6f3syNS8mADVg9 3RIPOA66+FYP34eklqVc/1pMuXNdu6g/qKAwX9P7XevdrQdlLGGPtStizEXpsC6I3E63 vu/LEsZyk9EaMTZkJIHGOvQASDpYi4j74+qSPsUBTPuLSvMnCP4iCWtfaAIrt0ri9RFm 07vwK+vgAp5sDIEaKj29cD3XjiuQ03ZEycZf/O3pyIS//4N+qct/X1qAauuL/DWGWurR RV7vYQwWJ1dZJuFzmM1a6h+OrKvaFGydnlhkB3Vv4/E/CzvzMbkva67JG+eAbMyTPLKK /wpw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=4PKtGdnj7K1nIf21o9CBuILUH/eT3WWN8YJ/Zsofy54=; b=ud615orMxtJAQ3IGtwLodUIvnzApWLII/2pLs+0o2gGUDU7FEgqoq5V9MF01ML91qK Rq43g/JmTvMOamGs5z5Bm8QE+81AFP07NVHqqKxUSF5T440/nkFKOqO6o5txoWDDAVOV xvWJk71JWc6aei+6Yn6+C20TNBBnPs+t6buTtkiZQwrUKU1dRMolRdWTy63PxEEX7h7Y BHPT7PBF0m4I1T2VGXYV+YlfRvr0QMA0EyoHE+x7SjdnxVRa6u0G/qJrAIVKVMuroslc 0KkKB6OS8MONpyKQrhhL9lALcwpc//oqYlEuDhJi39IxLVQcOQgNuj5bFqwyrkqWdHvp ol0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=e5xCzs9e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b7-20020a056a000cc700b00582b3c894b2si9704236pfv.341.2023.01.05.15.06.14; Thu, 05 Jan 2023 15:06:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=e5xCzs9e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236292AbjAEXDm (ORCPT <rfc822;tmhikaru@gmail.com> + 99 others); Thu, 5 Jan 2023 18:03:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46704 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236273AbjAEXDf (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Thu, 5 Jan 2023 18:03:35 -0500 Received: from mail-io1-xd30.google.com (mail-io1-xd30.google.com [IPv6:2607:f8b0:4864:20::d30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A60D4671AD for <linux-kernel@vger.kernel.org>; Thu, 5 Jan 2023 15:03:34 -0800 (PST) Received: by mail-io1-xd30.google.com with SMTP id b192so20378714iof.8 for <linux-kernel@vger.kernel.org>; Thu, 05 Jan 2023 15:03:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=4PKtGdnj7K1nIf21o9CBuILUH/eT3WWN8YJ/Zsofy54=; b=e5xCzs9eHgOshb4PQlWO3g6CpcSTy9nAAbg6XfYg3NaRY9CT1M2YCGqM+0k2FbaRpp Up/kNOGwIxauumMuFVspQksn2rzRNaML5ce917OqicRwWAe5uUD8XleQAmXpRZ/+bXTB iAjBE1L+LjfhewIcoNlw8nYHwYIAfN7l4TpSE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4PKtGdnj7K1nIf21o9CBuILUH/eT3WWN8YJ/Zsofy54=; b=G7ApB1svGQnPj19RwH08GjcgY5YcvO7bpXj91FXh1i6z8PMgWMdBR4Pz6rydj2Elr9 Ouw27UFLtrrTxL5+c6FIHK91iuOG65dPSJYXUUOvv6dGfL1M99If2i/FSUhE8BJR/7Xu lSLWhv8m2aq25L7aZ7536Grc3c4fze6eLguJtOWW3ZHzR+Gxzt6OP0qMQsLyZhwoa1Om OFUWPGDx3D6ff56bzbGoHVOVHvtjSGsyJyHEU2re2kA8DqMolralDpfI62N4YjXXSB3j OLkeqg5UFviagPsCwEhVGaBaHHYfX19Gu7KuLYL9yp97+UumhoSHvYBR+6Yy1sPg0R/6 gETQ== X-Gm-Message-State: AFqh2koG0eJas/zO+qUVmK8CwV5pK+NgWyQqBA3nyHGytXjm6chZU2Yt neRnzMENhJ1p55goVh1idue2Cw== X-Received: by 2002:a05:6602:1785:b0:6e0:3930:244a with SMTP id y5-20020a056602178500b006e03930244amr34979590iox.9.1672959814020; Thu, 05 Jan 2023 15:03:34 -0800 (PST) Received: from localhost (30.23.70.34.bc.googleusercontent.com. [34.70.23.30]) by smtp.gmail.com with UTF8SMTPSA id i7-20020a02ca47000000b003740de9fb65sm12164782jal.46.2023.01.05.15.03.33 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 05 Jan 2023 15:03:33 -0800 (PST) From: Matthias Kaehlcke <mka@chromium.org> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Johan Hovold <johan@kernel.org>, linux-usb@vger.kernel.org, Stefan Wahren <stefan.wahren@i2se.com>, Alexander Stein <alexander.stein@ew.tq-group.com>, Icenowy Zheng <uwu@icenowy.me>, Douglas Anderson <dianders@chromium.org>, stable@vger.kernel.org, linux-kernel@vger.kernel.org, Matthias Kaehlcke <mka@chromium.org>, Ravi Chandra Sadineni <ravisadineni@chromium.org> Subject: [PATCH 1/2] usb: misc: onboard_hub: Invert driver registration order Date: Thu, 5 Jan 2023 23:03:28 +0000 Message-Id: <20230105230119.1.I75494ebee7027a50235ce4b1e930fa73a578fbe2@changeid> X-Mailer: git-send-email 2.39.0.314.g84b9a713c41-goog MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham 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: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754225692140245599?= X-GMAIL-MSGID: =?utf-8?q?1754225692140245599?= |
Series |
[1/2] usb: misc: onboard_hub: Invert driver registration order
|
|
Commit Message
Matthias Kaehlcke
Jan. 5, 2023, 11:03 p.m. UTC
The onboard_hub 'driver' consists of two drivers, a platform
driver and a USB driver. Currently when the onboard hub driver
is initialized it first registers the platform driver, then the
USB driver. This results in a race condition when the 'attach'
work is executed, which is scheduled when the platform device
is probed. The purpose of fhe 'attach' work is to bind elegible
USB hub devices to the onboard_hub USB driver. This fails if
the work runs before the USB driver has been registered.
Register the USB driver first, then the platform driver. This
increases the chances that the onboard_hub USB devices are probed
before their corresponding platform device, which the USB driver
tries to locate in _probe(). The driver already handles this
situation and defers probing if the onboard hub platform device
doesn't exist yet.
Cc: stable@vger.kernel.org
Fixes: 8bc063641ceb ("usb: misc: Add onboard_usb_hub driver")
Link: https://lore.kernel.org/lkml/Y6W00vQm3jfLflUJ@hovoldconsulting.com/T/#m0d64295f017942fd988f7c53425db302d61952b4
Reported-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
---
drivers/usb/misc/onboard_usb_hub.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
Comments
On Thu, Jan 05, 2023 at 11:03:28PM +0000, Matthias Kaehlcke wrote: > The onboard_hub 'driver' consists of two drivers, a platform > driver and a USB driver. Currently when the onboard hub driver > is initialized it first registers the platform driver, then the > USB driver. This results in a race condition when the 'attach' > work is executed, which is scheduled when the platform device > is probed. The purpose of fhe 'attach' work is to bind elegible > USB hub devices to the onboard_hub USB driver. This fails if > the work runs before the USB driver has been registered. > > Register the USB driver first, then the platform driver. This > increases the chances that the onboard_hub USB devices are probed > before their corresponding platform device, which the USB driver > tries to locate in _probe(). The driver already handles this > situation and defers probing if the onboard hub platform device > doesn't exist yet. > > Cc: stable@vger.kernel.org > Fixes: 8bc063641ceb ("usb: misc: Add onboard_usb_hub driver") > Link: https://lore.kernel.org/lkml/Y6W00vQm3jfLflUJ@hovoldconsulting.com/T/#m0d64295f017942fd988f7c53425db302d61952b4 > Reported-by: Alexander Stein <alexander.stein@ew.tq-group.com> > Signed-off-by: Matthias Kaehlcke <mka@chromium.org> > --- > > drivers/usb/misc/onboard_usb_hub.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) Does this superseed this thread: Link: https://lore.kernel.org/r/20221222022605.v2.1.If5e7ec83b1782e4dffa6ea759416a27326c8231d@changeid or is that also needed? confused, greg k-h
On Fri, Jan 06, 2023 at 04:32:52PM +0100, Greg Kroah-Hartman wrote: > On Thu, Jan 05, 2023 at 11:03:28PM +0000, Matthias Kaehlcke wrote: > > The onboard_hub 'driver' consists of two drivers, a platform > > driver and a USB driver. Currently when the onboard hub driver > > is initialized it first registers the platform driver, then the > > USB driver. This results in a race condition when the 'attach' > > work is executed, which is scheduled when the platform device > > is probed. The purpose of fhe 'attach' work is to bind elegible > > USB hub devices to the onboard_hub USB driver. This fails if > > the work runs before the USB driver has been registered. > > > > Register the USB driver first, then the platform driver. This > > increases the chances that the onboard_hub USB devices are probed > > before their corresponding platform device, which the USB driver > > tries to locate in _probe(). The driver already handles this > > situation and defers probing if the onboard hub platform device > > doesn't exist yet. > > > > Cc: stable@vger.kernel.org > > Fixes: 8bc063641ceb ("usb: misc: Add onboard_usb_hub driver") > > Link: https://lore.kernel.org/lkml/Y6W00vQm3jfLflUJ@hovoldconsulting.com/T/#m0d64295f017942fd988f7c53425db302d61952b4 > > Reported-by: Alexander Stein <alexander.stein@ew.tq-group.com> > > Signed-off-by: Matthias Kaehlcke <mka@chromium.org> > > --- > > > > drivers/usb/misc/onboard_usb_hub.c | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > Does this superseed this thread: > Link: https://lore.kernel.org/r/20221222022605.v2.1.If5e7ec83b1782e4dffa6ea759416a27326c8231d@changeid This series ("usb: misc: onboard_hub: Invert driver registration order" et al) fixes the race condition mentioned in the commit message of the other series ("usb: misc: onboard_usb_hub: Don't create platform devices for DT nodes without 'vdd-supply'" et al), plus another race that was reported later (this patch). > or is that also needed? This series is (mostly) independent from the other one, it should fix the issue that was reported for the RPi 3 B+. It can be landed even if the other one is abandonded. With this series the other one doesn't fix or mitigate any actual issue (AFAIK), it would only be an optimization (don't instantiate the onboard_hub drivers if they'd do nothing). > confused Sorry, hope this clarifies things a bit.
diff --git a/drivers/usb/misc/onboard_usb_hub.c b/drivers/usb/misc/onboard_usb_hub.c index 94e7966e199d..db0844b30bbd 100644 --- a/drivers/usb/misc/onboard_usb_hub.c +++ b/drivers/usb/misc/onboard_usb_hub.c @@ -433,13 +433,13 @@ static int __init onboard_hub_init(void) { int ret; - ret = platform_driver_register(&onboard_hub_driver); + ret = usb_register_device_driver(&onboard_hub_usbdev_driver, THIS_MODULE); if (ret) return ret; - ret = usb_register_device_driver(&onboard_hub_usbdev_driver, THIS_MODULE); + ret = platform_driver_register(&onboard_hub_driver); if (ret) - platform_driver_unregister(&onboard_hub_driver); + usb_deregister_device_driver(&onboard_hub_usbdev_driver); return ret; }