Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp1421050ybx; Tue, 5 Nov 2019 16:02:52 -0800 (PST) X-Google-Smtp-Source: APXvYqwT4k+TMoEt6VTbDW7a4zfInw3k5EkBkEaXI8FYThczfdVkFyi7mgwkndS8pCFvkj3bPQ/y X-Received: by 2002:a05:6402:105a:: with SMTP id e26mr38187368edu.229.1572998571911; Tue, 05 Nov 2019 16:02:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1572998571; cv=none; d=google.com; s=arc-20160816; b=qDWncNDwNKjA5ZIMgRX8Eb7NZwDLaWKj6loRUEEmF+7O1wC9OxXyFUUXnNzibj2jNq zFM901nAVWlnWye/th4AF0/c0Vb3xmTlcJf4mmO467TZfMnDgX81dxcXa2qIRchJ8fHq oC2m6jo3fMGrZbOLTU0dwR5+XfHN9TvlYswGV9jz4LVZFZ8tm0IRcRM+H4sBkBqtMVRM FWs09U4QhHTNJ7UQjiXtneSZttqdNy94UHPHIUBxswS71BhtLhaDNoypEoBQDLKv92FO I8L5kGmmiT7mtPp7P7SoM4Atx21lS14Fqz/fTtOEyj4XLwh5v/eeuG82OVUkgUsrO5qk P9kQ== 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=1hiwhUzBCXtjT83VsDEmYQHpboeTfijrcF+AJ7syBgI=; b=wTS8Fx3SeUkMfMSMaVOTWGRj84wbm51g/F+9ozIQEw6+/DwfILixhfBvExYuomwdHq yQh3Yv/vbe4kn3DH9F9Fjrg6Znwa3vSCpeM722ICeSum6LAbHUstvY4HhISGsPRdhUUd 30KXE7ziSgfRSlgYRXRzNiVXEmj5IFs3NSI3pBjQUn7kHAHQp+Fv+990PxJ+02MFIRK4 cRKNgrB0zRls6f8fnehdDkCuMly9ZVMiC2Jddne6AT/V6cYc6MOvS7l/T+j6omwF1Y0P TL5MAZfFMSMOMBSD9/cCCZ/AFz9xnRdXonr7BctQufPVXVEuZTtbMDgi8Dwiz7I+7lCU oOig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=MbXZiQWc; 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 z15si10183506edd.8.2019.11.05.16.02.02; Tue, 05 Nov 2019 16:02:51 -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=@google.com header.s=20161025 header.b=MbXZiQWc; 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 S1730265AbfKFAA6 (ORCPT + 99 others); Tue, 5 Nov 2019 19:00:58 -0500 Received: from mail-oi1-f196.google.com ([209.85.167.196]:34670 "EHLO mail-oi1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728410AbfKFAA6 (ORCPT ); Tue, 5 Nov 2019 19:00:58 -0500 Received: by mail-oi1-f196.google.com with SMTP id l202so19328818oig.1 for ; Tue, 05 Nov 2019 16:00:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=1hiwhUzBCXtjT83VsDEmYQHpboeTfijrcF+AJ7syBgI=; b=MbXZiQWcxLr/gVCG+4TdqJiu9bk0wCssGuEy3JC0jY361MdKBbNcQEbabZc2GwKXpg cJe54VxnwZZKb1YlthhCkm0wK42efq1vPtHhHFSibIJbMtNoGy6nenFRPVN4rbBfoK57 Sw/B3zSfBx1U4OFn9zi9MHGwJIqq6PsVdOnJXsbSzecojJk5vfAXaNJAMdxFCwKm/BII LOPCWctuW8M2PteNbNjrne7FXwL6ZVAzN9ctKGS4erPZxzyqfjx7oE3+/7SEZVIYj7NW a5wspJqTqOcB8e7AGbAznLFYoM2Mb9pHqtF+afn/bSNz+GkvfTZBR16IW96xlpOfT5n9 mF8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=1hiwhUzBCXtjT83VsDEmYQHpboeTfijrcF+AJ7syBgI=; b=jzEYWVM8yFtZLIlYOO/oC1+jFKnbuLS21s1WFTszQ0hGU3qnRM6CUJR7S1M0xLajMi LADlrzs9Q4qRCCmxz0p2+xA0EiIUMqzWbxszoMbGr0yZd/uEw0pIyJS1mXok2N3Joq9M ONugIYhwL7C+6iuHjhmWbk7aqeF1KaLiyxu2fM1QOoKgXsFUfXSHCtqnAJVWs4xwTt6y mffvO+PIX4xXC1pofiHkmec4GTILK1e1p1zUH0E6/IBBDI9+kZx9rVn/sooHq8ovbcWO f/PB7q/kp+KcOrPtLkY2HGDawybyOdrceW37aCslsOhEutAMQbYXrwGdplVkJI3r2kgf hJ1w== X-Gm-Message-State: APjAAAXDXqTCb1xSiR0XTbizwhXh2xFeEd0TEYjr6ZrGwAS+RPbs/00I Plvkou0961UOJK07sNZozokIuexIKCWGA0qk5wahmQ== X-Received: by 2002:aca:b03:: with SMTP id 3mr1450645oil.24.1572998455036; Tue, 05 Nov 2019 16:00:55 -0800 (PST) MIME-Version: 1.0 References: <20191028220027.251605-1-saravanak@google.com> <20191028220027.251605-4-saravanak@google.com> <7640808.4Pc6YCm0Y9@kreacher> In-Reply-To: From: Saravana Kannan Date: Tue, 5 Nov 2019 16:00:18 -0800 Message-ID: Subject: Re: [PATCH v1 3/5] driver core: Allow fwnode_operations.add_links to differentiate errors To: "Rafael J. Wysocki" Cc: "Rafael J. Wysocki" , Greg Kroah-Hartman , Rob Herring , Frank Rowand , Len Brown , Android Kernel Team , LKML , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , ACPI Devel Maling List 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 Tue, Nov 5, 2019 at 3:07 PM Rafael J. Wysocki wrote: > > On Tue, Nov 5, 2019 at 11:52 PM Saravana Kannan wrote: > > > > Hi Rafael, > > > > Thanks for the review. > > > > On Tue, Nov 5, 2019 at 2:43 PM Rafael J. Wysocki wrote: > > > > > > On Monday, October 28, 2019 11:00:24 PM CET Saravana Kannan wrote: > > > > When add_links() still has suppliers that it needs to link to in the > > > > future, this patch allows it to differentiate between suppliers that are > > > > needed for probing vs suppliers that are needed for sync_state() > > > > correctness. > > > > > > I guess you mean that it will return different error codes in the different > > > cases. > > > > Yes. > > > > > > > > > Signed-off-by: Saravana Kannan > > > > --- > > > > drivers/base/core.c | 12 ++++++++---- > > > > include/linux/fwnode.h | 13 +++++++++---- > > > > 2 files changed, 17 insertions(+), 8 deletions(-) > > > > > > > > diff --git a/drivers/base/core.c b/drivers/base/core.c > > > > index 48cd43a91ce6..e6d3e6d485da 100644 > > > > --- a/drivers/base/core.c > > > > +++ b/drivers/base/core.c > > > > @@ -2297,7 +2297,7 @@ int device_add(struct device *dev) > > > > struct device *parent; > > > > struct kobject *kobj; > > > > struct class_interface *class_intf; > > > > - int error = -EINVAL; > > > > + int error = -EINVAL, fw_ret; > > > > struct kobject *glue_dir = NULL; > > > > > > > > dev = get_device(dev); > > > > @@ -2413,9 +2413,13 @@ int device_add(struct device *dev) > > > > */ > > > > device_link_add_missing_supplier_links(); > > > > > > > > - if (fwnode_has_op(dev->fwnode, add_links) > > > > - && fwnode_call_int_op(dev->fwnode, add_links, dev)) > > > > - device_link_wait_for_mandatory_supplier(dev, true); > > > > + if (fwnode_has_op(dev->fwnode, add_links)) { > > > > > > fw_ret can be defined here and I'd just call it "ret". > > > > I thought that style of variable declaration is frowned up in the > > kernel coding style. > > Well, I'm not aware of that. :-) I've definitely seen such comments before. So I'll leave fw_ret as is. If you and Greg both want to change it to the way you mentioned, I'm happy to do it. > > > > > > > + fw_ret = fwnode_call_int_op(dev->fwnode, add_links, dev); > > > > + if (fw_ret == -ENODEV) > > > > + device_link_wait_for_mandatory_supplier(dev); > > > > + else if (fw_ret) > > > > + device_link_wait_for_optional_supplier(dev); > > > > + } > > > > > > > > bus_probe_device(dev); > > > > if (parent) > > > > diff --git a/include/linux/fwnode.h b/include/linux/fwnode.h > > > > index 25bb81f8ded8..a19134eae5a5 100644 > > > > --- a/include/linux/fwnode.h > > > > +++ b/include/linux/fwnode.h > > > > @@ -96,10 +96,15 @@ struct fwnode_reference_args { > > > > * available suppliers. > > > > * > > > > * Return 0 if device links have been successfully created to all > > > > - * the suppliers of this device or if the supplier information is > > > > - * not known. Return an error if and only if the supplier > > > > - * information is known but some of the suppliers are not yet > > > > - * available to create device links to. > > > > + * the suppliers this device needs to create device links to or if > > > > + * the supplier information is not known. > > > > > > "the known suppliers of this device or if the supplier information is not known." > > > > "suppliers it needs to create device links to" is a subset of known > > suppliers. There's no requirement that fw needs to create links to ALL > > known suppliers. Just a minor distinction. > > That depends on what exactly you mean by "known suppliers". The > suppliers that are not listed by the firmware are not known at this > point. Ok, I'll rephrase my comment: "suppliers it needs to create device links to" is a subset of listed suppliers. There's no requirement that fw needs to create links to ALL listed suppliers. For example, I can't think of any reason for sync_state() to be necessary for an interrupt controller driver. So, fw doesn't need to create device links from consumer to interrupt supplier. So I'm being more explicit and saying "the suppliers this device needs to create device links to" instead of "the listed suppliers of this device". Long story short, I wrote the comment this way intentionally and changing it to what you suggest makes it inaccurate IMHO. But I'm open to other wording suggestions to improve the clarity of this comment. > > > > > + * > > > > + * Return -ENODEV if and only if the suppliers needed for probing > > > > + * the device are not yet available to create device links to. > > > > > > It would be more precise to say something like this: > > > > > > "Return -ENODEV if an attempt to create a device link to one of the device's > > > suppliers needed for probing it fails." > > > > "attempt to create a device link to one of the device's suppliers > > needed for probing it fails" to me means device_link_add() fails. > > But I'm trying to say that it should return an error if the struct > > device isn't even there yet. > > OK, so it should be something like "if the supplier device has not > been registered yet". > > My point is that "not yet available" is kind of ambiguous. Agree, the latest suggestion sounds better. > > > > + * > > > > + * Return -EAGAIN if there are suppliers that need to be linked to > > > > + * that are not yet available but none of those suppliers are > > > > + * necessary for probing this device. > > > > > > "Return -EAGAIN if attempts to create device links to some of the device's > > > suppliers have failed, but those suppliers are not necessary for probing the > > > device." > > > > Same comment as before. The distinction I'm making here is that > > -EAGAIN is needed when the struct device itself isn't there. > > > > Btw, Greg already pulled these into driver-core-next. Let me know if > > you want me to send a delta patch to fix any of these comments. > > Well, it's a Greg's call if he has taken the patches, but it also > depends on you (if you agree with the comments, it would be prudent to > send updates). I don't mind sending updates at all. Just trying to make sure I follow the maintainers' preference in case they don't want trivial (because my current ones aren't terrible :)) comment update patches. Once we agree on all the discussion here, I can send an update patch. Thanks again for your review. -Saravana