From nobody Mon Apr 6 08:08:17 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D5D48C25B08 for ; Wed, 17 Aug 2022 18:40:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237097AbiHQSkv (ORCPT ); Wed, 17 Aug 2022 14:40:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44702 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241006AbiHQSko (ORCPT ); Wed, 17 Aug 2022 14:40:44 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CCBB5A00EE for ; Wed, 17 Aug 2022 11:40:40 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id d3-20020a170902cec300b0016f04e2e730so8595349plg.1 for ; Wed, 17 Aug 2022 11:40:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:mime-version:message-id:date:from:to:cc; bh=ZYTlBBFnaZ0P/8h1RW7JgkzBP7Qz3/ENWA74waVFHsk=; b=rEKzgG4kB4gJbvdPUY9H+lfnRgqahefKDR5Jl73nA4WKGW5kwuqnE88uTY3v00RzaR P1XqUhHs+w6cV8koRkvS9gXHlJMZFkJO0Bj5DiMro7jSn6MbktfS4XD+brKZjtIQlDvb oF6nNCpMSlQJz8fcZfBUd8ryCNywZ6t4+gIMJS/wasIo4COpmd00eLTiu9rkzKnLBiyj jZPGnBjgNjAqfK+18xRawhoR/RLoAcl5bAavj+iTn+QzSSJGMAzogpo0nyPY7URheaJZ MLzzf2V3uR8cfruliPSKCDP2Qt73gUn9gGO7Y8hp82RFjbgulhTxsLFZyJSWboAG7dMI 6FIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:mime-version:message-id:date:x-gm-message-state :from:to:cc; bh=ZYTlBBFnaZ0P/8h1RW7JgkzBP7Qz3/ENWA74waVFHsk=; b=4DEc/FPpEpJtBVm6bYszy1nwW9He2md+d2JrxIlg65btQrxiWs9fUVmfnVih/HnKDc F+xKbdyR/8T6EeXHni8lz2KUdpvnTBscttYJEMhNkTA4Zh/oi2Ty/t7MXhTyFnMd3IVt RMW22JSAuVCZJ+3BfSrHUoUAnNY/XPogLrmOj6o9nQCsyh4IJ9HyC4yiJwl3GDRRu7Mm 8bOWf3YvPQX1hhCQyat3ZzA7D4z+WasCraF6mRcoL1LJKzVef6k8cOnIhIcF/jkPWlES MMdGLSq86hgACcQVUIBSVFs7IAZFzvowVMUZ8ioxCLN8eI/n6z2DvOS+nVERuougrNLZ wD2A== X-Gm-Message-State: ACgBeo3QswZia55bcIDNiSg7s3J03Mj/m/jxkaBJ2c/5+QsCYWrUTTSr kp8DMuauavvVFvj9Emt46CJDsS/YaaXqhYFZhXGU2w== X-Google-Smtp-Source: AA6agR6CY7WhInmP29tG9He+JFpqE/zTM3C8nWq8t4Z4fQTePSj6YMvMB7iBjRaZ4xlxokQyxFxrdpVFfQgF/p2WMWMGoA== X-Received: from isaacmanjarres.irv.corp.google.com ([2620:15c:2d:3:6c6d:d00:f0dd:6ddf]) (user=isaacmanjarres job=sendgmr) by 2002:a17:90a:bf0a:b0:1fa:b53c:3f3a with SMTP id c10-20020a17090abf0a00b001fab53c3f3amr4095338pjs.126.1660761640140; Wed, 17 Aug 2022 11:40:40 -0700 (PDT) Date: Wed, 17 Aug 2022 11:40:26 -0700 Message-Id: <20220817184026.3468620-1-isaacmanjarres@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.37.1.595.g718a3a8f04-goog Subject: [PATCH v3] driver core: Don't probe devices after bus_type.match() probe deferral From: "Isaac J. Manjarres" To: Greg Kroah-Hartman , "Rafael J. Wysocki" , Russell King , Ulf Hansson , Marek Szyprowski , Tomeu Vizoso Cc: "Isaac J. Manjarres" , stable@vger.kernel.org, Saravana Kannan , Guenter Roeck , kernel-team@android.com, linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Both __device_attach_driver() and __driver_attach() check the return code of the bus_type.match() function to see if the device needs to be added to the deferred probe list. After adding the device to the list, the logic attempts to bind the device to the driver anyway, as if the device had matched with the driver, which is not correct. If __device_attach_driver() detects that the device in question is not ready to match with a driver on the bus, then it doesn't make sense for the device to attempt to bind with the current driver or continue attempting to match with any of the other drivers on the bus. So, update the logic in __device_attach_driver() to reflect this. If __driver_attach() detects that a driver tried to match with a device that is not ready to match yet, then the driver should not attempt to bind with the device. However, the driver can still attempt to match and bind with other devices on the bus, as drivers can be bound to multiple devices. So, update the logic in __driver_attach() to reflect this. Cc: stable@vger.kernel.org Cc: Saravana Kannan Fixes: 656b8035b0ee ("ARM: 8524/1: driver cohandle -EPROBE_DEFER from bus_t= ype.match()") Reported-by: Guenter Roeck Signed-off-by: Isaac J. Manjarres Tested-by: Guenter Roeck Reviewed-by: Saravana Kannan Tested-by: Linus Walleij --- drivers/base/dd.c | 10 ++++++++++ 1 file changed, 10 insertions(+) v1 -> v2: - Fixed the logic in __driver_attach() to allow a driver to continue attempting to match and bind with devices in case of any error, not just probe deferral. v2 -> v3: - Restored the patch back to v1. - Added Guenter's Tested-by tag. - Added Saravana's Reviewed-by tag. - Cc'd stable@vger.kernel.org Greg, This is the final version of this patch. Can you please pick this up? Thanks, Isaac diff --git a/drivers/base/dd.c b/drivers/base/dd.c index 70f79fc71539..90b31fb141a5 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c @@ -881,6 +881,11 @@ static int __device_attach_driver(struct device_driver= *drv, void *_data) dev_dbg(dev, "Device match requests probe deferral\n"); dev->can_match =3D true; driver_deferred_probe_add(dev); + /* + * Device can't match with a driver right now, so don't attempt + * to match or bind with other drivers on the bus. + */ + return ret; } else if (ret < 0) { dev_dbg(dev, "Bus failed to match device: %d\n", ret); return ret; @@ -1120,6 +1125,11 @@ static int __driver_attach(struct device *dev, void = *data) dev_dbg(dev, "Device match requests probe deferral\n"); dev->can_match =3D true; driver_deferred_probe_add(dev); + /* + * Driver could not match with device, but may match with + * another device on the bus. + */ + return 0; } else if (ret < 0) { dev_dbg(dev, "Bus failed to match device: %d\n", ret); return ret; --=20 2.37.1.595.g718a3a8f04-goog