Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp452416pxb; Tue, 14 Sep 2021 01:00:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyz2HyBg+mcL9eNdiKSFyopA5tS0UGOZq2KkIkAHUdtE794k+YWt+1VOWtWbA7gp/D49vkN X-Received: by 2002:a05:6602:1845:: with SMTP id d5mr12497698ioi.23.1631606416180; Tue, 14 Sep 2021 01:00:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631606416; cv=none; d=google.com; s=arc-20160816; b=gKwZyGCHMq7s8viAbjmq5Rs6Rja8RFwa2PINoO5X/+5UhqhA5XwSxU0Lb1SexghnAD ekRcbDDrMvOUlRHzlvtAyI5LR8gE0SFb4LBj3Bxnf+7SAd+AD2bLC3x8XpdMs8mbqLMY RB8leKGDC+D7U9GcQ1eiMiTKKTdqcy9HSDSeyAKoIki7i8EM22emdxiMnkAoN+cJKIQP BbsOu9jtmh3WiAjqE5owSCfkX2gBZGemjdHd1W4wKXAUoThKH26V2hhqIk/s1cyL/Wn0 wzYgdQumRB6vyxX1MkjkCaklZIBw13wqDQukDSjBjBi2dFQKD/2b949Oi+vYyF/J4On8 JjNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=0pwGfJMV7NseEnAXPu8B0bfj+z3LRZz+NIFv3KDIqC8=; b=GySZrYRHU2YBNJsBnUDqhtSBXdAh+w8XhuTQ9UikvRbTg6Sa9b9jw2QnNAqbPVIY31 H0w5W/kpWb4XsfYW8C5fgtMFw7VB6IKA0NgETOUVFwWP6f0+9aDGnWWApUs8L3cRHrQ8 IF67PdPX6zSFLd5ALDTGWDEZSf75iCzrUPYgoRDCZKAIGhUa3cNVjj+j9pJfdcQSH9CG ICWVj/avnZF2DEJ6KRzfmBduwjGKJws8bOuiix8RDQebkKRJ8iUpBTX2ZREAFMngs7+J irJLTVodBq7cHWrk8T69GaLdn9fevJNCtjrlBIvQbglXZia6pAXmHhqSJWyhdFczzjvm RHJw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=c7lpV8oW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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. [23.128.96.18]) by mx.google.com with ESMTP id c32si9281853jaa.44.2021.09.14.01.00.04; Tue, 14 Sep 2021 01:00:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=c7lpV8oW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S229724AbhINIAT (ORCPT + 99 others); Tue, 14 Sep 2021 04:00:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59616 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229477AbhINIAT (ORCPT ); Tue, 14 Sep 2021 04:00:19 -0400 Received: from mail-yb1-xb2a.google.com (mail-yb1-xb2a.google.com [IPv6:2607:f8b0:4864:20::b2a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3CB40C061574 for ; Tue, 14 Sep 2021 00:59:02 -0700 (PDT) Received: by mail-yb1-xb2a.google.com with SMTP id r4so26297468ybp.4 for ; Tue, 14 Sep 2021 00:59:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=0pwGfJMV7NseEnAXPu8B0bfj+z3LRZz+NIFv3KDIqC8=; b=c7lpV8oW8ZCc73QyZnOFvbXq40J312LhEEq1FBJKPqDlu6GlL3LV+/tdN61//RwVqg 4Z1ltcnV4gJzi5pAexn3I2vw99jzl/bYJVy5blKsqlAgD9IC8K+BmOzzk0lUl+uQIpRJ sIZAmuzmbQlctrRQG8Th2pqO2EtKqwSMzlPEn+rTvgwaf6iWJCLhI/fivQJXqUq346HT QbTshs9b7YdKIdy9u/UTBOj21Er8bFXn6qfXMF8qFvA7TtZwN/pbLzb+Wnmk/2MEalzj JPbvdXiTslo0usna3ET9NiOm5jxqSUnJ/RtTRSvsSMF8L5oaSMF9KD6qxk/o7poJ8362 5bzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=0pwGfJMV7NseEnAXPu8B0bfj+z3LRZz+NIFv3KDIqC8=; b=c6KF8R2HfLWEsVo5xgbsmkSpiZDtpTnsQor2QIlp+Xw53TgLAXz8xZ05EiLa1pUw2/ yD7T2MJVzygzRaAEFpbNrR8UNBgcPTPDBWQB8tK8iKHinVs/GlZM7LxBvMaETU0mEuHQ DYrTSk4wENDb2uyr23Uu1uWxTEgPA98QmMfE7Xyteu0PoD6R8GabiZt2zdZPapka1Hjf KSELqzXa7ZK4qOibxDE3aQu3A0EKCfoQij1bxtdqNz6boP7V6HsM8XSlcKNWdMSvyBZA 3yzHgZcbtQT8S+mNfDoVveJ1jNXhdlFrz2izST4nk+ZTVYxP2bEn77+Q8UEOdh9yNpDE bO6Q== X-Gm-Message-State: AOAM533rnu08HqnA8hCIUm7PLX9cm8jOS2zAJvEcsXw812zMuhbgf9Nd ma7USAoef2FVu16+4OtudnNsB5OAjE+wRJZkxVfPgw== X-Received: by 2002:a25:21c5:: with SMTP id h188mr19300583ybh.23.1631606341321; Tue, 14 Sep 2021 00:59:01 -0700 (PDT) MIME-Version: 1.0 References: <20210914043928.4066136-1-saravanak@google.com> <20210914043928.4066136-3-saravanak@google.com> In-Reply-To: From: Saravana Kannan Date: Tue, 14 Sep 2021 00:58:25 -0700 Message-ID: Subject: Re: [PATCH v1 2/5] driver core: Set deferred probe reason when deferred by driver core To: Geert Uytterhoeven Cc: Greg Kroah-Hartman , "Rafael J. Wysocki" , John Stultz , Marek Szyprowski , Rob Herring , Andrew Lunn , Vladimir Oltean , Android Kernel Team , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Sep 14, 2021 at 12:01 AM Geert Uytterhoeven wrote: > > Hi Saravana, > > On Tue, Sep 14, 2021 at 6:39 AM Saravana Kannan wrote: > > When the driver core defers the probe of a device, set the deferred > > probe reason so that it's easier to debug. The deferred probe reason is > > available in debugfs under devices_deferred. > > > > Signed-off-by: Saravana Kannan > > Thanks for your patch! Thanks for the reviews! > > > --- a/drivers/base/core.c > > +++ b/drivers/base/core.c > > @@ -955,6 +955,29 @@ static void device_links_missing_supplier(struct device *dev) > > } > > } > > > > +/** > > + * dev_set_def_probe_reason - Set the deferred probe reason for a device > > + * @dev: the pointer to the struct device > > + * @fmt: printf-style format string > > + * @...: arguments as specified in the format string > > + * > > + * This is a more caller-friendly version of device_set_deferred_probe_reason() > > + * that takes variable argument inputs similar to dev_info(). > > + */ > > +static void dev_set_def_probe_reason(const struct device *dev, const char *fmt, ...) > > So this is indeed similar to device_set_deferred_probe_reason(), > but the function's name is completely different, unlike e.g. > (v)printf()? Yes. > > > +{ > > + struct va_format vaf; > > + va_list args; > > + > > + va_start(args, fmt); > > + vaf.fmt = fmt; > > + vaf.va = &args; > > + > > + device_set_deferred_probe_reason(dev, &vaf); > > + > > + va_end(args); > > +} > > I think you can just make this a macro wrapper calling > dev_err_probe(dev, -EPROBE_DEFER, fmt, ...). > Or open-code that below. Good point. I think I can make it be a wrapper macro. > > > + > > /** > > * device_links_check_suppliers - Check presence of supplier drivers. > > * @dev: Consumer device. > > @@ -975,6 +998,7 @@ int device_links_check_suppliers(struct device *dev) > > { > > struct device_link *link; > > int ret = 0; > > + struct fwnode_handle *sup_fw; > > > > /* > > * Device waiting for supplier to become available is not allowed to > > @@ -983,10 +1007,13 @@ int device_links_check_suppliers(struct device *dev) > > mutex_lock(&fwnode_link_lock); > > if (dev->fwnode && !list_empty(&dev->fwnode->suppliers) && > > !fw_devlink_is_permissive()) { > > + sup_fw = list_first_entry(&dev->fwnode->suppliers, > > + struct fwnode_link, > > + c_hook)->supplier; > > dev_dbg(dev, "probe deferral - wait for supplier %pfwP\n", > > - list_first_entry(&dev->fwnode->suppliers, > > - struct fwnode_link, > > - c_hook)->supplier); > > + sup_fw); > > + dev_set_def_probe_reason(dev, > > + "wait for supplier %pfwP\n", sup_fw); > > dev_err_probe() would replace both the dev_dbg() and the > dev_set_def_probe_reason(). I intentionally didn't use dev_err_probe() because: 1. I wanted the messages to be a bit different -- not have the "probe deferral" in the deferred_devices file but have it in the dmesg logs so that the log is clearer. 2. And more importantly, I'm working on a patch (could take a few weeks) that'll make this place return -EPROBE_DEFER vs -ENODEV (or whatever) for different situations. And using dev_err_probe() with -ENODEV would cause it to print the error (when I don't want it to). And always doing dev_err_probe(dev, -EPROBE_DEFER,...) while returning -ENODEV would be confusing. > > > mutex_unlock(&fwnode_link_lock); > > return -EPROBE_DEFER; > > } > > @@ -1003,6 +1030,9 @@ int device_links_check_suppliers(struct device *dev) > > device_links_missing_supplier(dev); > > dev_dbg(dev, "probe deferral - supplier %s not ready\n", > > dev_name(link->supplier)); > > + dev_set_def_probe_reason(dev, > > + "supplier %s not ready\n", > > + dev_name(link->supplier)); > > Likewise. Same reason as above. I mainly added you for comments on 5/5. Hopefully you'll have some comments on that too by the time I'm up tomorrow :) -Saravana > > > ret = -EPROBE_DEFER; > > break; > > } > > Gr{oetje,eeting}s, > > Geert > > -- > Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org > > In personal conversations with technical people, I call myself a hacker. But > when I'm talking to journalists I just say "programmer" or something like that. > -- Linus Torvalds