From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ot1-f44.google.com (mail-ot1-f44.google.com [209.85.210.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60D6D378833 for ; Tue, 18 Aug 2026 06:59:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.44 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787036356; cv=none; b=jDscL4XeQcAGvcfQHXeNo91Q9HOVjbeT5uFzYz4Opryy0T3pWkG3KQxvN2lbDPuBLHjSJWNc6bqQGSfVh5Buf/IUK0bIv1fxlZPvBjUvq/+1VxxqjbK8tSfT9IP0ftmkI2UhPEtG5ERER0bEUYuGPe04Qh8z9EGUPFvePmi3mz4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787036356; c=relaxed/simple; bh=lpooMWHv82XIjDvzakLEMxHa3gXYODF/BcalyGR4G3M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AXJJPhXgbHY02kBnV/+He+NQ21atIcsfumtw/sLgcGCCWIl1zb9RXljN7gsTZx69UUEnhFZozJPdstLnwx1Oy3KIzrL6m2LEnVdp1wlqiGJOHa/ry3pmC4q6RRfXSJn4DPC6qfNsQfuF6rU6FYKerTWNtkWiwqa01HSUd2w7t5Q= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DubsuqS8; arc=none smtp.client-ip=209.85.210.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DubsuqS8" Received: by mail-ot1-f44.google.com with SMTP id 46e09a7af769-7e9fc3de7ceso1941204a34.1 for ; Mon, 17 Aug 2026 23:59:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787036345; x=1787641145; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=R217ybDpCpG69XJL0cHI6yEG9QeM+58x/vvK44Pn+nA=; b=DubsuqS8BAwX4BPczSNuq8eqtwVARspkZ/fljGSZOeKK9aemHeN+m0LYYb1lav3CIX 1oeYwJkxw4aTBpa5y7/c/WyB3472I9Y/tvaHZQXUMyVHBzgrv1m+kk346HPAcoaIIExX xvBkZDHsVc6K4QtUJiYlETyrJOyxUQR44NcmHRdNxl+Gq/I6llIudYVqHwEGejHSmEr6 NRidFKmRb/S4BiayjXclMEsgIYopV/tiHIx7xmqT/oQebwx1dwS3cvHAkeI9A1M/vCvN jZ+7VhbUQ9GEo80cysYIt6xl/aIbG+kF5nHhixEQ8Bbmu3SAgWOHmiGlzTSsUg2qkRKF 3vNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787036345; x=1787641145; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=R217ybDpCpG69XJL0cHI6yEG9QeM+58x/vvK44Pn+nA=; b=reHP6tmjBAHW5q/qFHsSQc4/4t4dvSA0HGKTBdgK6nuvEhWLxJisnGlo+i8PXYFEse vaIXJkzSjRkJFR7mxdTLSndRefxD5O1rtIbV58pfM/I8N6/qbgNvMV2q2JGdbtN6OIfm T/Xuk63ZgyemmKdhxEg4/3AiNfsR2v+0iSLQdfD4JWkSV/36Sa3aJCRf09VBshEZtYbK /giuXMSBXez48BcDLmvprAcvko4KMKTtotkb9l15mDmCkSswIcoBg4a7j6IW5Z6TfZYz AfK/xGbAta798Hq/JHDd2H8yVd2iMIEvm9FSMOzZ7KdSroJMFhXVet+bZUPKYJdDEvdy WB7g== X-Forwarded-Encrypted: i=1; AHgh+RpD7dm+WwmwIybKVG6RrMU/o5+E3T1ebY0DSQ7SN+5s8IKQA8UWT0a+FDZw3M5vnjweQPf/mRs2aUs/Lm0=@vger.kernel.org X-Gm-Message-State: AOJu0YxnsDqKP22D/kyXUSooUsGMdcG5qE8XnzeYusgIzFcOTV8fVyZl tHaW/aKnws/n1PxEYvDr2YSe48kCclVEQ9WlaMTx8kQxkLSbNnF//B7X X-Gm-Gg: AR+sD110v/KGiIdhfrkchx7eg/5lIrVsjepZ/BSydFqo2Wg4/fkkTvIPB4a98+345yC H4pdkBF1DNHniCELTXCF30mbJwLzILblxvRKrnG9+hOzZ/iy2ACRAAwYBLOHgpxEO3O4qdnceoF PROcEc9Wx+5GcZ72I3GWttIIW7dE4LW8pgfGx9nxH+RDGNHhvOyFqEH0nvyVAaodHpTnRUDQiMd bNLM+Ftkb3FKN+mRFT2vW7wEzO6FMzyTWx3D0HHnekwJW5iaJTCx623hiXvoYKH5/h05nwYp9xu IKKfQtWxd/rZyrdKOvsbjOuDpY6zoG9qlJPdf+jI7aWTzxPnUSUEEX585cpdD3gCBO9UUi6ZIRY La17mscErTgciAmTYV6brNAM3oIiHiNzJgDT+paadvyFexFOnd9C9N0Emh8qTu/HgKqARklihjl 0TKZybAeL4z1bM2gs4UyOp3XqB/gFimWJE2oTRaQf4j9mqeT80F2Chr+GpOnEQEbci+/rqSrvRR qJyl+nOaqDortSTqy+v3gmf4/CxPKm0lctpTUixQxd0ZBNE2m8kNtdj3oJuOp3rDlHvSr3TkA6m Z/w3fYjvMYEMy2TKMRLK3FtOI5siF3rxSX+5zjdkYiZGfRbj7omcm38wmjz5gNJr1EURpVFa/D9 6Vm2M83KvYWKBbSUwLb+6tFehqss= X-Received: by 2002:a05:6830:3747:b0:7ee:37dc:59e1 with SMTP id 46e09a7af769-7f3de6bbfd5mr32618951a34.16.1787036345565; Mon, 17 Aug 2026 23:59:05 -0700 (PDT) Received: from [127.0.1.1] (184-96-154-59.hlrn.qwest.net. [184.96.154.59]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7f41beef430sm3599463a34.5.2026.08.17.23.59.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 23:59:04 -0700 (PDT) From: James Hilliard Date: Tue, 18 Aug 2026 00:58:59 -0600 Subject: [PATCH net-next v3 3/4] net: mdio: defer supplier sync during OF population Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260818-submit-phy-package-fwdevlink-v1-v3-3-40a905ea16b6@gmail.com> References: <20260818-submit-phy-package-fwdevlink-v1-v3-0-40a905ea16b6@gmail.com> In-Reply-To: <20260818-submit-phy-package-fwdevlink-v1-v3-0-40a905ea16b6@gmail.com> To: Rob Herring , Saravana Kannan , Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich , Jonathan Corbet , Shuah Khan , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , Len Brown , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Christian Marangi Cc: devicetree@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, linux-acpi@vger.kernel.org, netdev@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 The MDIO bus class device is fully added before the OF helper creates its PHY children. Once driverless class devices complete their managed links, the bus proxy links are retired at the end of __mdiobus_register(), before PHY package member links have been installed. Pause supplier sync-state callbacks across both MDIO bus registration and OF child population. Each member PHY acquires its real package supplier links before the matching resume, so suppliers cannot observe the interval between proxy retirement and member registration. Use the existing nestable device-link deferral mechanism, export it for modular OF MDIO code and resume it on every success and error path. Fixes: 385ef48f4686 ("net: phy: add support for scanning PHY in PHY packages nodes") Signed-off-by: James Hilliard --- Changes v2 -> v3: - Replace MDIO-specific proxy-link deletion with scoped sync-state deferral around bus and child population - Put the deferral in place before enabling generic class-device proxy retirement so every intermediate patch remains safe --- drivers/base/core.c | 2 ++ drivers/net/mdio/of_mdio.c | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/base/core.c b/drivers/base/core.c index cf3f4133391d..d2f9ff65138c 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -1256,6 +1256,7 @@ void device_links_supplier_sync_state_pause(void) defer_sync_state_count++; device_links_write_unlock(); } +EXPORT_SYMBOL_GPL(device_links_supplier_sync_state_pause); void device_links_supplier_sync_state_resume(void) { @@ -1284,6 +1285,7 @@ void device_links_supplier_sync_state_resume(void) device_links_flush_sync_list(&sync_list, NULL); } +EXPORT_SYMBOL_GPL(device_links_supplier_sync_state_resume); static int sync_state_resume_initcall(void) { diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c index ff540049b847..9b73fd8eed41 100644 --- a/drivers/net/mdio/of_mdio.c +++ b/drivers/net/mdio/of_mdio.c @@ -243,9 +243,10 @@ int __of_mdiobus_register(struct mii_bus *mdio, struct device_node *np, of_property_read_u32(np, "reset-post-delay-us", &mdio->reset_post_delay_us); /* Register the MDIO bus */ + device_links_supplier_sync_state_pause(); rc = __mdiobus_register(mdio, owner); if (rc) - return rc; + goto resume; /* Loop over the child nodes and register a phy_device for each phy */ rc = __of_mdiobus_parse_phys(mdio, np, &scanphys); @@ -253,7 +254,7 @@ int __of_mdiobus_register(struct mii_bus *mdio, struct device_node *np, goto unregister; if (!scanphys) - return 0; + goto resume; /* auto scan for PHYs with empty reg property */ for_each_available_child_of_node(np, child) { @@ -285,12 +286,15 @@ int __of_mdiobus_register(struct mii_bus *mdio, struct device_node *np, } } - return 0; + rc = 0; + goto resume; put_unregister: of_node_put(child); unregister: mdiobus_unregister(mdio); +resume: + device_links_supplier_sync_state_resume(); return rc; } EXPORT_SYMBOL(__of_mdiobus_register); -- 2.53.0