Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp541575ybt; Wed, 24 Jun 2020 05:35:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyp2Ts5moTSVBYsdqilirB0X8gRMaN5Fq3/mszfm8SWNGI/y6sxACUDdikkqxQ2OXedxAQT X-Received: by 2002:a17:906:fb9b:: with SMTP id lr27mr23965979ejb.405.1593002147498; Wed, 24 Jun 2020 05:35:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593002147; cv=none; d=google.com; s=arc-20160816; b=FbIzQf8zVAwalA7T53btrL98SG67XtE6Kcb9QEk/KX8wOoNQB6iW+H9+TQpg5Uf4ad eC6wDpMF5P7/etpMJ5HtVOJcNqXWjd5b0HbT9nosHEAi88PS3YthpgEUNBKDyofGAD9X eJj+6bX1g3HtbAfb94zS7ZEdB5OKcRD42FUtI3J6Ziunq7CEKoD+w0IuxRkMQlx0udCS wUI8w1ZmMMNa0vo9+9qtstJCF5fW3etYB22LEIV03cMPzPxww6BvCZca++50666a7QJh V88BkmbZYPM1zbploNb5OnxEzmziQSwnhOqoxZ5YhnBlEPQkPvdqKI5iV/eP1jhX3SMq sccQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=55G98uRUUF3yn+wZl7/r3oZ5zLg4UikGMfzxVDJu55Q=; b=j4llYO123ZhWnHBJZec1wQ9yHXVER4yXFmvTEPMrCpbg16zCYio5h/iL/dZPa1EXk7 aYdUUtYxEQMu3YoliyoFoUBwp3ofFgP9XN9cbRPuWmIl3gUHD6wmuD+op+GuF1s7rlOv 3rU/pKVA4E9GeYvDmAO8mjq2HoSryGAxm36NLBeOFRW5aXSffd6cD4M7H7mmB20gJvRj OZC1HZQQbcdLE/Yu6m8Mamuuw7zjBwwDGU9vKI1NtIclFTQgt1WaCRKh7nhqzKd+Vj+u UrYTSsHIV28z0BmUCQnFy0YWDKprbqwrMC5zCuIdZwHK7gdQ/GSxZDaYBuX/KgQuMZJc x1Bg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=xehCxHf8; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j12si10562425ejs.213.2020.06.24.05.35.24; Wed, 24 Jun 2020 05:35:47 -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=@kernel.org header.s=default header.b=xehCxHf8; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2403913AbgFXMep (ORCPT + 99 others); Wed, 24 Jun 2020 08:34:45 -0400 Received: from mail.kernel.org ([198.145.29.99]:38266 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2403894AbgFXMel (ORCPT ); Wed, 24 Jun 2020 08:34:41 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B57A920E65; Wed, 24 Jun 2020 12:34:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593002080; bh=qfSj1ptFbPtQoHsR9HGcQDGFx6Aq81c6MnnNldPe7+U=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=xehCxHf8eN6B8fsbunRwbnsKFrg8kS7Sq5NLNbcFc7Kwku8wgy4i7dh5fyXhVfd84 WEWAGSLGntFIxaM+1pBzYpDxPRAG3yMn/+GH3N7LYzQQ0+OWEWoGJ84GzjScaAU3iP v5HU5+UYzsLjAvLF9XXUV7fesuail1JrKHzGnvpk= Date: Wed, 24 Jun 2020 14:34:38 +0200 From: Greg Kroah-Hartman To: Andrzej Hajda Cc: Bartlomiej Zolnierkiewicz , Marek Szyprowski , "Rafael J. Wysocki" , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, andy.shevchenko@gmail.com, Mark Brown , Russell King - ARM Linux , Neil Armstrong , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Daniel Vetter , "open list:DRM DRIVERS" Subject: Re: [RESEND PATCH v5 2/5] driver core: add deferring probe reason to devices_deferred property Message-ID: <20200624123438.GC1773782@kroah.com> References: <20200624114127.3016-1-a.hajda@samsung.com> <20200624114127.3016-3-a.hajda@samsung.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200624114127.3016-3-a.hajda@samsung.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jun 24, 2020 at 01:41:24PM +0200, Andrzej Hajda wrote: > /sys/kernel/debug/devices_deferred property contains list of deferred devices. > This list does not contain reason why the driver deferred probe, the patch > improves it. > The natural place to set the reason is probe_err function introduced recently, > ie. if probe_err will be called with -EPROBE_DEFER instead of printk the message > will be attached to deferred device and printed when user read devices_deferred > property. > > Signed-off-by: Andrzej Hajda > Reviewed-by: Mark Brown > Reviewed-by: Javier Martinez Canillas > Reviewed-by: Andy Shevchenko > --- > drivers/base/base.h | 3 +++ > drivers/base/core.c | 10 ++++++---- > drivers/base/dd.c | 21 ++++++++++++++++++++- > 3 files changed, 29 insertions(+), 5 deletions(-) > > diff --git a/drivers/base/base.h b/drivers/base/base.h > index 95c22c0f9036..93ef1c2f4c1f 100644 > --- a/drivers/base/base.h > +++ b/drivers/base/base.h > @@ -93,6 +93,7 @@ struct device_private { > struct klist_node knode_class; > struct list_head deferred_probe; > struct device_driver *async_driver; > + char *deferred_probe_msg; > struct device *device; > u8 dead:1; > }; > @@ -134,6 +135,8 @@ extern void device_release_driver_internal(struct device *dev, > extern void driver_detach(struct device_driver *drv); > extern int driver_probe_device(struct device_driver *drv, struct device *dev); > extern void driver_deferred_probe_del(struct device *dev); > +extern void __deferred_probe_set_msg(const struct device *dev, > + struct va_format *vaf); > static inline int driver_match_device(struct device_driver *drv, > struct device *dev) > { > diff --git a/drivers/base/core.c b/drivers/base/core.c > index ee9da66bff1b..2a96954d5460 100644 > --- a/drivers/base/core.c > +++ b/drivers/base/core.c > @@ -3962,6 +3962,8 @@ define_dev_printk_level(_dev_info, KERN_INFO); > * > * This helper implements common pattern present in probe functions for error > * checking: print message if the error is not -EPROBE_DEFER and propagate it. > + * In case of -EPROBE_DEFER it sets defer probe reason, which can be checked > + * later by reading devices_deferred debugfs attribute. > * It replaces code sequence: > * if (err != -EPROBE_DEFER) > * dev_err(dev, ...); > @@ -3977,14 +3979,14 @@ int probe_err(const struct device *dev, int err, const char *fmt, ...) > struct va_format vaf; > va_list args; > > - if (err == -EPROBE_DEFER) > - return err; > - > va_start(args, fmt); > vaf.fmt = fmt; > vaf.va = &args; > > - dev_err(dev, "error %d: %pV", err, &vaf); > + if (err == -EPROBE_DEFER) > + __deferred_probe_set_msg(dev, &vaf); > + else > + dev_err(dev, "error %d: %pV", err, &vaf); > > va_end(args); > > diff --git a/drivers/base/dd.c b/drivers/base/dd.c > index 9a1d940342ac..f44d26454b6a 100644 > --- a/drivers/base/dd.c > +++ b/drivers/base/dd.c > @@ -27,6 +27,7 @@ > #include > #include > #include > +#include > > #include "base.h" > #include "power/power.h" > @@ -136,6 +137,8 @@ void driver_deferred_probe_del(struct device *dev) > if (!list_empty(&dev->p->deferred_probe)) { > dev_dbg(dev, "Removed from deferred list\n"); > list_del_init(&dev->p->deferred_probe); > + kfree(dev->p->deferred_probe_msg); > + dev->p->deferred_probe_msg = NULL; > } > mutex_unlock(&deferred_probe_mutex); > } > @@ -211,6 +214,21 @@ void device_unblock_probing(void) > driver_deferred_probe_trigger(); > } > > +/* > + * __deferred_probe_set_msg() - Set defer probe reason message for device > + */ > +void __deferred_probe_set_msg(const struct device *dev, struct va_format *vaf) > +{ > + const char *drv = dev_driver_string(dev); > + > + mutex_lock(&deferred_probe_mutex); > + > + kfree(dev->p->deferred_probe_msg); > + dev->p->deferred_probe_msg = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf); What about the device name? Don't you also want that? You want the same format that __dev_printk() outputs, please use that to be consistant with all other messages that drivers are spitting out. thanks, greg k-h