Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp3981849ybg; Mon, 28 Oct 2019 23:53:43 -0700 (PDT) X-Google-Smtp-Source: APXvYqxz3JcBTgalwnT6pmpxxs83D5OF+MQWgtpWlXJ3r+kJjOM8V/x7cXtJi+1MAmh5TOMxpnEx X-Received: by 2002:a50:ed10:: with SMTP id j16mr24158136eds.227.1572332023395; Mon, 28 Oct 2019 23:53:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572332023; cv=none; d=google.com; s=arc-20160816; b=z9qfbuNo2RnbaCSTz63KSju4yjKRfWZMzvNKfeMph5GDe/ZyC8LcnvW8q0yyqQjpOy /i1DpYJPWmH+waoSLR1+8bFcWWBrD5H4PBjmCT0YZ7kSPqiA1qoQQC9R+65XayzmXBXp rUPo5qiveDoODWHinFRMljYz4XOBMzKIbOv5FjZGttqerXs2vnlDG6hVLKA1mgBo/jnC vJB2Kk6r1qIkYbU/Oj7WApE/fUNjmzLNd2KQ/U63ztTxu/ji7yRu2u+UbF849fhMeBpY BTOoaYbechx/0fRhYTpLWF0IqjiwHffgiZ1/6M+plbXnkOFWa3siNrmjYVNK+zm0Ml+J U1PA== 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=1WpJs4rqFlazEgG1ALqWM9ztjxvHbXQZYC6yFmWs2yk=; b=to9Joa6ObzWd5Rns+zSZ895bjbCyc1zCY60a9jfvR4userilkN2v6QzoTpr+n120Wo EC02p7dkLTHwx25dpBjM100BT1mbTjRcqQVuggRpL2A0XKwCZaaz6Dgz23Z2doGgJ3wu WAXsjfTqJWzIg3vpqGCYz+6BGsD4PMbFeBtGMFu29/3a3qVpe3ZKlOfphZ27dq/oE07s stHTRAHs3nWA25srRPK4Up3TysZC6JzgWruG2FpljwP2eScFCNL9vn/Q+4LP7QDVzCd/ qwVXatj3daGH16hl1dchzBl1r/HLkN6sPLuzcXbNz0fhIocKuOZmE28c5SXYVHIO0REO /rgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=Yk6qAWI2; 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 gy5si7403115ejb.223.2019.10.28.23.53.20; Mon, 28 Oct 2019 23:53:43 -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=Yk6qAWI2; 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 S2390660AbfJ1WAm (ORCPT + 99 others); Mon, 28 Oct 2019 18:00:42 -0400 Received: from mail-pf1-f201.google.com ([209.85.210.201]:38309 "EHLO mail-pf1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390632AbfJ1WAl (ORCPT ); Mon, 28 Oct 2019 18:00:41 -0400 Received: by mail-pf1-f201.google.com with SMTP id d126so9691681pfd.5 for ; Mon, 28 Oct 2019 15:00:41 -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=1WpJs4rqFlazEgG1ALqWM9ztjxvHbXQZYC6yFmWs2yk=; b=Yk6qAWI2BvbfBU05Wsff0PGaMNDhMIm5Rg86/K6xfu7Ma5L7ToyW6RNRjxoM4Zg0TZ G7EswA38UEa/5hWjOs9Rj9+aAM2uTwa/DxQemqAUpjIyuZ01xRkLERXg1ZB4q4hp2Bmb /lK0wtpMAUCxYWy4n40EF5mTihZrzbqmuJuNUzYwBkHijNaSOWbWatRM5osGKG8e5G40 g7xTXzNsFUFuPKgTLNK+cAxfUNPX66DJKbpl6ZuVMygFxzMPMNLx2pczWyj4jM7jF8oQ atYJOzCIhoGGv1hCrpbhZGpW+SA9MrnblLyteW4ZN5WRcvlKTrZXt4paFNSBfkYgtf8S RdHw== 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=1WpJs4rqFlazEgG1ALqWM9ztjxvHbXQZYC6yFmWs2yk=; b=ST0qk5GHgqHhjdPUe8IiYj73aD32xRBlADdMKTkicQnx7vT9W1JBRNaoZPFoM0vU5r k6Fx4Caq5E5AXW17UXMn3JtLaDLa/4avWhpYaIRSo8kuCET4TODucXqn1EX4sz1J/2qU rt9Vq1BHAr1fhahwYljWyo1QLgij1ZWYT9g3MP59uZEeNuC07fCzyy3YSwkndTo1GRE2 fSAwwYHtWYhkojBktFElftkEJKtcBSkFDEquGl8xf6bB8LXuOuQI5NztrUdKtV7+OotW zfZFfFpcR76sWnPm4Cj9R23oFZ6ZDwNv93HBHyITOg1JYh2RuGR4Pv8EyF269kmBO1Qn 7n6w== X-Gm-Message-State: APjAAAViCStAsS0cD/oz9wxnz3ZDuV4gUiosiN0BdHpQWDf0LU/AiFTf ok77PIiJNBENLAtILKfxkYgv5lFFzHj/IUI= X-Received: by 2002:a65:554e:: with SMTP id t14mr21065330pgr.370.1572300040549; Mon, 28 Oct 2019 15:00:40 -0700 (PDT) Date: Mon, 28 Oct 2019 15:00:24 -0700 In-Reply-To: <20191028220027.251605-1-saravanak@google.com> Message-Id: <20191028220027.251605-4-saravanak@google.com> Mime-Version: 1.0 References: <20191028220027.251605-1-saravanak@google.com> X-Mailer: git-send-email 2.24.0.rc0.303.g954a862665-goog Subject: [PATCH v1 3/5] driver core: Allow fwnode_operations.add_links to differentiate errors From: Saravana Kannan To: Greg Kroah-Hartman , "Rafael J. Wysocki" , Rob Herring , Frank Rowand , Len Brown Cc: Saravana Kannan , kernel-team@android.com, 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 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. 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 = 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. + * + * Return -ENODEV if and only if the suppliers needed for probing + * the device are not yet available to create device links to. + * + * 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. */ struct fwnode_operations { struct fwnode_handle *(*get)(struct fwnode_handle *fwnode); -- 2.24.0.rc0.303.g954a862665-goog