Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp4950024ybi; Sat, 20 Jul 2019 09:30:01 -0700 (PDT) X-Google-Smtp-Source: APXvYqzhLw6VzyCUq7Aoj2eocnXc4NGSCgIAqqCEITGLCJtJGvvg6lGYanyyPwxdPSJG3f3+b7qO X-Received: by 2002:a17:90a:25c8:: with SMTP id k66mr65251801pje.129.1563640200917; Sat, 20 Jul 2019 09:30:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563640200; cv=none; d=google.com; s=arc-20160816; b=Mr908FTchpY6QqM28KbuyYTTBjCUouhTiErPIu/T2YlGojr0XxjLuq5lVEneJjpE6T X3Sq30OhHcnZDeQvk/YAqhKNrdvQsRrNFshg/y8KVkMsJcUfb9gBNDg1jfWojQDlgcNZ miTyIv21+Gwb8557zKMHLK1tLJyhCuNmwxVvyFlRgXHRJ4VTb+K9jsmiXUzEb9RpqGei OhgzPUmfr11AT5PFQ3iQLsR8yYbgOJINTHr0IKwPW8uEfLhFlox0smPh0XholRmOTcG0 pjJPrDDGKv1JNqFoQcefT0LBcmn+VJnqBIwPtoYjKsQd2C4JyrHW+LjQlWNll8Panqqo 1jEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=MUMtT5fNTfc8RU/9CTuiAA1krAnocmy3WUu1kHP2UCU=; b=TQxtwqyQZ7BHEt2gjctTSoMSbxomJg6d6ZZ/fvgY0iFtcn6/8N3pl5NzATRZFiTPed +UFTSm1/XsC5bXESve5hfYs+Q7D2D6teNgvH+YULahwIDRl1/x4rCgtAnadXNwyegBKj 9JA5btAi9VYCN6shaIGg84HluhMqaoGkEy0BzLpo/FpxTIytVR1FtfQX4pPHr85YqaI4 PMrJP4H3llRL6yB84sEHKqSKegq58HZEBnAZ+bpg8TzZ76tBQZW2IeZ0yu/R9xrqMlS0 0YHtO6o2GNu6+Ft6eXH4Jp5r7T2M04tpAocZN4olCwWpcwIpdRgYqRuOMGQqbkpCqH4m BWPQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=ZcIRGpRC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 69si3991877pgc.40.2019.07.20.09.29.16; Sat, 20 Jul 2019 09:30:00 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=ZcIRGpRC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726415AbfGTGRN (ORCPT + 99 others); Sat, 20 Jul 2019 02:17:13 -0400 Received: from mail-pf1-f202.google.com ([209.85.210.202]:45220 "EHLO mail-pf1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726328AbfGTGRL (ORCPT ); Sat, 20 Jul 2019 02:17:11 -0400 Received: by mail-pf1-f202.google.com with SMTP id i27so20007104pfk.12 for ; Fri, 19 Jul 2019 23:17:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=MUMtT5fNTfc8RU/9CTuiAA1krAnocmy3WUu1kHP2UCU=; b=ZcIRGpRC6ImMsB6lcmhdeaG93F5yso9QsFv9UIzd6S5yw7j2RNg1NtSCBlBy+f4ZAY 6P56F61pR2uLx+g/zNIHkg0JMQe7cIRSmmy4NlCWha09GyVjqC7qfmsGDfQEQxk3AGrP iITpXE9OIe8zumu3B9dSA5PAe+icAYbflENH/oV2phFwkKcYlL9ZClqStukx79N9bG4G mUBTuhquOiEyDSd2g5IlFbuOUWnNu74J3I4FNIYLLE58b54ephRO1JKPUKbApN3lWIe6 1KxQcmRIOOI7Q8+50cLSr0K2fNg3NVl2p56m6tBhN1kAp9Q7+9lTvfpFGSSTcTDSNsFT Uz/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=MUMtT5fNTfc8RU/9CTuiAA1krAnocmy3WUu1kHP2UCU=; b=FpYdNLTxu079OWeti8m5YIGjEpcg348utQ1NzKCmHDR+f881iS0YQKoQJchhB8wbrg 1TxfTboUZtRRc/vnxypQSuw53ljxpaPMtrkQNmSnUM12LUyZeOvJqzWd9k2SC1eoaxEB x/ijcBYx23yGVspq2/hhoaJUKkWdNwSF7f4e7dac2urOD2/xqDuS4mt5EDjMXUcGMhVA Y4mbJgl+j1cM5VSCz9xBYo/9TedXdca7KfKtxnbb0kL1bP8ekQ4/pW9kVdjxLrKPpywm A8jrRpGxcThlDeBrgWYnxjBAbppjRa0JHXT2MeRI1Xl/57zYoJkzvUml4W0Quutkw8De 3psw== X-Gm-Message-State: APjAAAXjfb44UADo62N5EHUt7knbK6ObVISmMLMG37v1+ArAZhaDRsNX YwoGnMQIGJrfttpubCNqDWmF6Ccq9jnonCQ= X-Received: by 2002:a65:6406:: with SMTP id a6mr22156058pgv.393.1563603430627; Fri, 19 Jul 2019 23:17:10 -0700 (PDT) Date: Fri, 19 Jul 2019 23:16:44 -0700 In-Reply-To: <20190720061647.234852-1-saravanak@google.com> Message-Id: <20190720061647.234852-6-saravanak@google.com> Mime-Version: 1.0 References: <20190720061647.234852-1-saravanak@google.com> X-Mailer: git-send-email 2.22.0.657.g960e92d24f-goog Subject: [PATCH v6 5/7] of/platform: Pause/resume sync state during init and of_platform_populate() From: Saravana Kannan To: Rob Herring , Mark Rutland , Greg Kroah-Hartman , "Rafael J. Wysocki" , Frank Rowand Cc: Saravana Kannan , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, David Collins , kernel-team@android.com Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When all the top level devices are populated from DT during kernel init, the supplier devices could be added and probed before the consumer devices are added and linked to the suppliers. To avoid the sync_state() callback from being called prematurely, pause the sync_state() callbacks before populating the devices and resume them at late_initcall_sync(). Similarly, when children devices are populated after kernel init using of_platform_populate(), there could be supplier-consumer dependencies between the children devices that are populated. To avoid the same problem with sync_state() being called prematurely, pause and resume sync_state() callbacks across of_platform_populate(). Signed-off-by: Saravana Kannan --- drivers/of/platform.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/of/platform.c b/drivers/of/platform.c index 88a2086e26fa..d0c2f6443247 100644 --- a/drivers/of/platform.c +++ b/drivers/of/platform.c @@ -486,6 +486,7 @@ int of_platform_populate(struct device_node *root, pr_debug("%s()\n", __func__); pr_debug(" starting at: %pOF\n", root); + device_links_supplier_sync_state_pause(); for_each_child_of_node(root, child) { rc = of_platform_bus_create(child, matches, lookup, parent, true); if (rc) { @@ -493,6 +494,8 @@ int of_platform_populate(struct device_node *root, break; } } + device_links_supplier_sync_state_resume(); + of_node_set_flag(root, OF_POPULATED_BUS); of_node_put(root); @@ -682,6 +685,7 @@ static int __init of_platform_default_populate_init(void) return -ENODEV; platform_bus_type.add_links = of_link_to_suppliers; + device_links_supplier_sync_state_pause(); /* * Handle certain compatibles explicitly, since we don't want to create * platform_devices for every node in /reserved-memory with a @@ -702,6 +706,13 @@ static int __init of_platform_default_populate_init(void) return 0; } arch_initcall_sync(of_platform_default_populate_init); + +static int __init of_platform_sync_state_init(void) +{ + device_links_supplier_sync_state_resume(); + return 0; +} +late_initcall_sync(of_platform_sync_state_init); #endif int of_platform_device_destroy(struct device *dev, void *data) -- 2.22.0.657.g960e92d24f-goog