Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp724611ybt; Fri, 26 Jun 2020 10:01:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyPRQu6ibBo7DfX8RlWszMVv5gaqiC3Gtw7OcvqSj/kHKWm9kDrlIaVQOoj/8kYPo7gWIPZ X-Received: by 2002:a17:906:b6d1:: with SMTP id ec17mr3360388ejb.486.1593190891069; Fri, 26 Jun 2020 10:01:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593190891; cv=none; d=google.com; s=arc-20160816; b=NB2pk5uippm4oYt638FXYHm+aLKvQCfGSJrWZQCzKO9ITKpmaC9AfuMB5HMz9QgQC+ dwSmB+de+XCgw/K9F2k3oxVhcWsUqF8BxjEdWF3XMBtkiepGbFfaIJdXOuNHqATo1BKB eIuH1ly08DRdGcQFZlgagvzM67ffp2D35NBgaR4hPNI6ROExILbNirl5ABLu90B2h1bZ v7ox+fq//OJ20i9tkPTojlFuYmzHu0u7JB8bhabuFbOXLOvq7AAcTqHb+WaDCuxhP82Z +j5IxvhIBYL7SdujzNZ+WHD0edNMbAhtbQIa3KmO5qkYI1VEsb3f9qJ/i2QfPJDGbrC6 ygNQ== 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; bh=9ude1bR8RU8qUzK94voP4g4TNkMR22P61Cfio3xgn+s=; b=lfz7vbDKXuMqo+nECk4mcgbXqcHNs9TQ04ILDpXBJ0MwWggm6hKAqNa/as/EmiVvRt vXW0QVtVSxMbmfWHmkLUEh/IGtNXpQbUxj/r764zfhU5xzjWAkk+lhTm/Q76fSjNFJ2b r2KoiHz+xH0iybDMvWlKl69WGwvVsmbq05dE3k9Sw1yMQJviL2R5Ukdz9O3CvQBEmImu eg59s5s+nBezoY4tagSH1hnF7w8mmZ9bTcrmZCQC7pn0Xj5GjxeieQYo++cZAHbfp9iG USSFfGwpQfgVSX7qzK2ThTXigkIT46jBGN2P0UcIiSwZn1+apztzhtH7oDjY7T0mF8I3 wH1A== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b10si7172177eja.426.2020.06.26.10.01.08; Fri, 26 Jun 2020 10:01:31 -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; 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=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726976AbgFZPmL (ORCPT + 99 others); Fri, 26 Jun 2020 11:42:11 -0400 Received: from mail-ot1-f68.google.com ([209.85.210.68]:46893 "EHLO mail-ot1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726361AbgFZPmK (ORCPT ); Fri, 26 Jun 2020 11:42:10 -0400 Received: by mail-ot1-f68.google.com with SMTP id n24so6765942otr.13 for ; Fri, 26 Jun 2020 08:42:10 -0700 (PDT) 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=9ude1bR8RU8qUzK94voP4g4TNkMR22P61Cfio3xgn+s=; b=JfJ35XuYTQfpdK1OeS9kdKUHfkmTc6Bw2/HqCozQm06jw4x6bsK/jjzYAJudf+PAIV 9UAbL7O0AvgQziDkCm+YdvDNPR1xOvsVP2zRrb9rtCzPypZU+5paUdU3gtAoO/kEf8y3 B07FqNnxxq17tpYus4hdF7lpgubxptghqTVEQHsi1rsNX94WScoc/cy0pDBAl7S5XRIr 8RCFczK+n7tiuamXbyn8aceQDzrt8In6M9RuUBoglDE4kIaBjdFapVLk1tOkiPSPMd3O o2HxitBHnL2/T0DyJMN5LUwjk3FPoNxVgef0YXQ1H5PON3wHdNS6+v8NHtuh8GNmVGEY CBWA== X-Gm-Message-State: AOAM5316TyXS0PQXLdBG2hM6Jf7LZ3SQgljSKfCrZtpsKmQRo77v/+t4 2Yr/nlpLvafiKZcWfuxbZHQdyxjtrM/iFkKiuzy0sQ== X-Received: by 2002:a9d:7d15:: with SMTP id v21mr2867799otn.118.1593186130046; Fri, 26 Jun 2020 08:42:10 -0700 (PDT) MIME-Version: 1.0 References: <20200626100103.18879-1-a.hajda@samsung.com> <20200626100103.18879-2-a.hajda@samsung.com> In-Reply-To: <20200626100103.18879-2-a.hajda@samsung.com> From: "Rafael J. Wysocki" Date: Fri, 26 Jun 2020 17:41:59 +0200 Message-ID: Subject: Re: [PATCH v6 1/4] driver core: add device probe log helper To: Andrzej Hajda Cc: Greg Kroah-Hartman , Bartlomiej Zolnierkiewicz , Marek Szyprowski , "Rafael J. Wysocki" , Linux Kernel Mailing List , Linux ARM , Andy Shevchenko , Mark Brown , Russell King - ARM Linux , Neil Armstrong , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Daniel Vetter , "open list:DRM DRIVERS" 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 Fri, Jun 26, 2020 at 12:01 PM Andrzej Hajda wrote: > > During probe every time driver gets resource it should usually check for > error printk some message if it is not -EPROBE_DEFER and return the error. > This pattern is simple but requires adding few lines after any resource > acquisition code, as a result it is often omitted or implemented only > partially. > dev_err_probe helps to replace such code sequences with simple call, > so code: > if (err != -EPROBE_DEFER) > dev_err(dev, ...); > return err; > becomes: > return probe_err(dev, err, ...); > > Signed-off-by: Andrzej Hajda Reviewed-by: Rafael J. Wysocki > --- > drivers/base/core.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > include/linux/device.h | 3 +++ > 2 files changed, 45 insertions(+) > > diff --git a/drivers/base/core.c b/drivers/base/core.c > index 67d39a90b45c..3a827c82933f 100644 > --- a/drivers/base/core.c > +++ b/drivers/base/core.c > @@ -3953,6 +3953,48 @@ define_dev_printk_level(_dev_info, KERN_INFO); > > #endif > > +/** > + * dev_err_probe - probe error check and log helper > + * @dev: the pointer to the struct device > + * @err: error value to test > + * @fmt: printf-style format string > + * @...: arguments as specified in the format string > + * > + * This helper implements common pattern present in probe functions for error > + * checking: print debug or error message depending if the error value is > + * -EPROBE_DEFER and propagate error upwards. > + * It replaces code sequence: > + * if (err != -EPROBE_DEFER) > + * dev_err(dev, ...); > + * else > + * dev_dbg(dev, ...); > + * return err; > + * with > + * return dev_err_probe(dev, err, ...); > + * > + * Returns @err. > + * > + */ > +int dev_err_probe(const struct device *dev, int err, const char *fmt, ...) > +{ > + struct va_format vaf; > + va_list args; > + > + va_start(args, fmt); > + vaf.fmt = fmt; > + vaf.va = &args; > + > + if (err != -EPROBE_DEFER) > + dev_err(dev, "error %d: %pV", err, &vaf); > + else > + dev_dbg(dev, "error %d: %pV", err, &vaf); > + > + va_end(args); > + > + return err; > +} > +EXPORT_SYMBOL_GPL(dev_err_probe); > + > static inline bool fwnode_is_primary(struct fwnode_handle *fwnode) > { > return fwnode && !IS_ERR(fwnode->secondary); > diff --git a/include/linux/device.h b/include/linux/device.h > index 15460a5ac024..6b2272ae9af8 100644 > --- a/include/linux/device.h > +++ b/include/linux/device.h > @@ -964,6 +964,9 @@ void device_link_remove(void *consumer, struct device *supplier); > void device_links_supplier_sync_state_pause(void); > void device_links_supplier_sync_state_resume(void); > > +extern __printf(3, 4) > +int dev_err_probe(const struct device *dev, int err, const char *fmt, ...); > + > /* Create alias, so I can be autoloaded. */ > #define MODULE_ALIAS_CHARDEV(major,minor) \ > MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor)) > -- > 2.17.1 >