Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp4178944ybx; Mon, 4 Nov 2019 09:03:25 -0800 (PST) X-Google-Smtp-Source: APXvYqyAAeDN3utP4tYwb6Ojz8xvZcfV8Py/kQmiECjC7Ms07lrTC7mUkPsJVG1g8TxTlufwZwKG X-Received: by 2002:a17:906:1651:: with SMTP id n17mr24473574ejd.220.1572887005125; Mon, 04 Nov 2019 09:03:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1572887005; cv=none; d=google.com; s=arc-20160816; b=YJtqaJmWqq5BUSp0rg6OP8r859ZM2Qt8FHDOZ4/pzYqwzp+Fqo2z//msmQDJBZLtjb XOqqYEYIJnK8b5yZwr0QD1NKBTxYW620oTWvmB8VA2gBn/HCQ+EaA+7+i1cv5tE1WCjs jOnE5l1ZjB/+Or6dlTcuFeVvW9AF50KYZo7NMjlh2PPA/5sXUaUZpVMGR6tp70y1Ykdy jABltZGkGCB8vcnxBvYs+lz8GG/hE/lcS7f6ZxxGW/tIq1hvgrHBbdv0V33LzAjWTJFW owXybGP/9rS9NPxJpQ7TDHeoUswu2xFQQXTSbMJLlXlw1EBFprjJ68vr1XAre6PIR7As bf9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=DJwcj5uTl7zL8xZ2oGV4/1KO+iBKXLAanh9FI4lHjDA=; b=tXieS95FCzDZOJhnMvdXbcfhigpDo/58CSWOZOIIx7OtSnVCe193yGFcXZazj3idC5 GOXkDKX25StjzqHYLoIm165EhW4goWFqd1BEnoagIOqwF+U7VYF5d+2R8v4Sk4L0P78Z /EBQHdsfrJs5pySrX2gTQXQd4vMOrhwlsvPuArCZK3NIirVCWcPV+RZUTdBIE00LpVz0 4U17XukEwV1EaZ+Rujs0qasxZqEvNLeTYHSnMuoUSgV+gERM/79YVWNwo6rSIazdABQz VQrslm1pjFHO3tvjI9JGT6qZDfwWiW4pEC06g6C6SDL2oh1VF62MVEoSzVL0xvDjSwaq +Mnw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=TpQQFTR2; 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=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id gz25si11631998ejb.81.2019.11.04.09.03.00; Mon, 04 Nov 2019 09:03:25 -0800 (PST) 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=@kernel.org header.s=default header.b=TpQQFTR2; 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=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728510AbfKDRBa (ORCPT + 99 others); Mon, 4 Nov 2019 12:01:30 -0500 Received: from mail.kernel.org ([198.145.29.99]:44026 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727989AbfKDRBa (ORCPT ); Mon, 4 Nov 2019 12:01:30 -0500 Received: from mail-qk1-f180.google.com (mail-qk1-f180.google.com [209.85.222.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B38D0214B2; Mon, 4 Nov 2019 17:01:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572886888; bh=+MtZPHtXKdsSw7Bm/k8kkH1yNhktHmkA+OzqMTB1qsw=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=TpQQFTR2EFY00egCJK1oAzh9DT7POr/CTY0WnCUAB/2BeMaio38vdV1yPDdJ7LNmt NJt/IMhJUhKdGJG7+aCn1qhhoFeAnvuKXgFCt9QkUW34dqfkPqMX3Az0KdbZttCrG0 3Q/ZdoRCleOKx/JLAhfQoZedoB1dFhC/6hLxYWsE= Received: by mail-qk1-f180.google.com with SMTP id m125so18267399qkd.8; Mon, 04 Nov 2019 09:01:28 -0800 (PST) X-Gm-Message-State: APjAAAXhazfkjG9F8cx8ZCJKXjBWP9hSwnypZw8+w67wjXD4QB2xq3WG ETqWxS5Nq7F5I+A5K999YnC2RhWe2CHw1dP2jA== X-Received: by 2002:a37:4904:: with SMTP id w4mr17253854qka.119.1572886887790; Mon, 04 Nov 2019 09:01:27 -0800 (PST) MIME-Version: 1.0 References: <20191028220027.251605-1-saravanak@google.com> <20191028220027.251605-5-saravanak@google.com> In-Reply-To: <20191028220027.251605-5-saravanak@google.com> From: Rob Herring Date: Mon, 4 Nov 2019 11:01:16 -0600 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v1 4/5] of: property: Make sure child dependencies don't block probing of parent To: Saravana Kannan Cc: Greg Kroah-Hartman , "Rafael J. Wysocki" , Frank Rowand , Len Brown , Android Kernel Team , "linux-kernel@vger.kernel.org" , devicetree@vger.kernel.org, linux-acpi@vger.kernel.org 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 On Mon, Oct 28, 2019 at 5:00 PM Saravana Kannan wrote: > > When creating device links to proxy the sync_state() needs of child > dependencies, create SYNC_STATE_ONLY device links so that children > dependencies don't block probing of the parent. > > Also, differentiate between missing suppliers of parent device vs > missing suppliers of child devices so that driver core doesn't block > parent device probing when only child supplier dependencies are missing. > > Signed-off-by: Saravana Kannan > --- > drivers/of/property.c | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) Reviewed-by: Rob Herring One nit below: > > diff --git a/drivers/of/property.c b/drivers/of/property.c > index 2808832b2e86..f16f85597ccc 100644 > --- a/drivers/of/property.c > +++ b/drivers/of/property.c > @@ -1032,10 +1032,10 @@ static bool of_is_ancestor_of(struct device_node *test_ancestor, > * - -EINVAL if the supplier link is invalid and should not be created > * - -ENODEV if there is no device that corresponds to the supplier phandle > */ > -static int of_link_to_phandle(struct device *dev, struct device_node *sup_np) > +static int of_link_to_phandle(struct device *dev, struct device_node *sup_np, > + u32 dl_flags) > { > struct device *sup_dev; > - u32 dl_flags = DL_FLAG_AUTOPROBE_CONSUMER; > int ret = 0; > struct device_node *tmp_np = sup_np; > > @@ -1195,13 +1195,20 @@ static int of_link_property(struct device *dev, struct device_node *con_np, > unsigned int i = 0; > bool matched = false; > int ret = 0; > + u32 dl_flags; > + > + if (dev->of_node == con_np) > + dl_flags = DL_FLAG_AUTOPROBE_CONSUMER; > + else > + dl_flags = DL_FLAG_SYNC_STATE_ONLY; > > /* Do not stop at first failed link, link all available suppliers. */ > while (!matched && s->parse_prop) { > while ((phandle = s->parse_prop(con_np, prop_name, i))) { > matched = true; > i++; > - if (of_link_to_phandle(dev, phandle) == -EAGAIN) > + if (of_link_to_phandle(dev, phandle, dl_flags) > + == -EAGAIN) nit: I'd just keep this one line or at least move '==' up. > ret = -EAGAIN; > of_node_put(phandle); > } > @@ -1219,10 +1226,10 @@ static int of_link_to_suppliers(struct device *dev, > > for_each_property_of_node(con_np, p) > if (of_link_property(dev, con_np, p->name)) > - ret = -EAGAIN; > + ret = -ENODEV; > > for_each_child_of_node(con_np, child) > - if (of_link_to_suppliers(dev, child)) > + if (of_link_to_suppliers(dev, child) && !ret) > ret = -EAGAIN; > > return ret; > -- > 2.24.0.rc0.303.g954a862665-goog >