Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp510998ybt; Wed, 24 Jun 2020 04:54:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJycOk9iQaQKBaNLj06VRcKg3P/7WzM5ccs3WdlmEGV7fWl6ub33uyLo/kXPjBn3jRikjA78 X-Received: by 2002:a17:907:42cb:: with SMTP id nz19mr19733847ejb.447.1592999689928; Wed, 24 Jun 2020 04:54:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592999689; cv=none; d=google.com; s=arc-20160816; b=t2+pz/pyjgzXGEAbAuksudF0BOBA8jtB3DKcMaTNoqi4KentYWtnWAL3A+jsAjNfRI jLKrH0JDw1QPH4NpU0oUSkfIcOpg903V4TJ9WN6+3QlQZKRrV0C+LF3LATQdWDyZ3hok xEyUrPWZZgcN3DumoTPCTP5rFAEuoJ9Ea7Gn1Ac9e38lBDWpCyHaw9Xzcs+xlsVvSQoa eZEYfzjjAF22FHHbNt69HyslK+nd6RicBPY3PxVt82EZxIJSez0CX7YCBYnTMh3NxTp3 Rv53I/h+Bc/1EMndf6nEVezexoPBVPEAfPsjUzpTDISga6S5fA9a7KBapHLSIyLyhjCI E/Mw== 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=MNOHpEt45vEJASrLn5J9px3ygRO0JRQDAke9QELkVn8=; b=GC3hZ6YMFoN8UHxSEUkXnhXJWqGGfjl/yMRY+/FZ6FAbXa9uvqaOhO1s0REmGUdwdC f02SYebPk1s2HIf6ISurR8UU1D2XdNnU/gy427777zWhk9Yndycf/BuEkc5EO7NWvjr+ ZSd9BNjRyel5CFZS6IyOZ65M4gA1BIkp2Xa+5EKTSsh05QmzA5jR/Vc2Zd3QNNNTEL4P NyeqQiF8oHVINVgRFSDHq6L3FiJZOqkPUsUBsRfE5Y8Ar6/dDqpzQWOFb33bW3djphC+ mVDRLLrdYT4QOQGyrEKDCOMKtzosi+aQIs8jGHDe4r/xmnxSKHsJhKXKF0Ik2VWWNU2I pvvw== 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 fi11si12152770ejb.612.2020.06.24.04.54.27; Wed, 24 Jun 2020 04:54:49 -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 S2390738AbgFXLxM (ORCPT + 99 others); Wed, 24 Jun 2020 07:53:12 -0400 Received: from mail-oi1-f196.google.com ([209.85.167.196]:45853 "EHLO mail-oi1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389075AbgFXLxM (ORCPT ); Wed, 24 Jun 2020 07:53:12 -0400 Received: by mail-oi1-f196.google.com with SMTP id p70so1538516oic.12 for ; Wed, 24 Jun 2020 04:53:11 -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=MNOHpEt45vEJASrLn5J9px3ygRO0JRQDAke9QELkVn8=; b=q/wagShlJbU/X1cJrdOx72YGROFSkM/p8gjXbcAUwF87EhkyCJuGDcOc38d8wD3QhN pceH/u36R2BhfpojBPdzLFUx+9vsJrKUF5vSkwR00JfU36A6zKcA4PXNEgN5MEeUGD44 mwzlJcjqg1v2x6+W5lpkJQZKuA1hEfhSCZ07T1Ah0Y7mkAYVeXbc6iCnr3zvIMN5HLQt Vky10ilcFHYc/es2rKQMqWj+tWYf11C+ScTmdnOXkaOMfd6zG5jajm3BSUu9DqW4HNZF yXYzplSKNLoXTg9RHpKDn6sVRUbet8J8tvoeOGxOpC+eqeIeAs5McTVaLAY2uGMnZjUk IZLw== X-Gm-Message-State: AOAM533E/LkIVc3oBZPxV86J2o/ADq61x2GpNxQ0mcLctv+qJDbJrz/Q hQK2RVeiWINZb8F6Jk+RYnssL4KuX8M8PJiU7mI= X-Received: by 2002:a54:4585:: with SMTP id z5mr1960621oib.110.1592999590943; Wed, 24 Jun 2020 04:53:10 -0700 (PDT) MIME-Version: 1.0 References: <20200624114127.3016-1-a.hajda@samsung.com> <20200624114127.3016-2-a.hajda@samsung.com> In-Reply-To: <20200624114127.3016-2-a.hajda@samsung.com> From: "Rafael J. Wysocki" Date: Wed, 24 Jun 2020 13:52:58 +0200 Message-ID: Subject: Re: [RESEND PATCH v5 1/5] driver core: add probe_err 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 Wed, Jun 24, 2020 at 1:41 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 omited or implemented only partially. > probe_err 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: Javier Martinez Canillas > Reviewed-by: Mark Brown > Reviewed-by: Andy Shevchenko Reviewed-by Rafael J. Wysocki > --- > drivers/base/core.c | 39 +++++++++++++++++++++++++++++++++++++++ > include/linux/device.h | 3 +++ > 2 files changed, 42 insertions(+) > > diff --git a/drivers/base/core.c b/drivers/base/core.c > index 67d39a90b45c..ee9da66bff1b 100644 > --- a/drivers/base/core.c > +++ b/drivers/base/core.c > @@ -3953,6 +3953,45 @@ define_dev_printk_level(_dev_info, KERN_INFO); > > #endif > > +/** > + * probe_err - 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 message if the error is not -EPROBE_DEFER and propagate it. > + * It replaces code sequence: > + * if (err != -EPROBE_DEFER) > + * dev_err(dev, ...); > + * return err; > + * with > + * return probe_err(dev, err, ...); > + * > + * Returns @err. > + * > + */ > +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); > + > + va_end(args); > + > + return err; > +} > +EXPORT_SYMBOL_GPL(probe_err); > + > 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..40a90d9bf799 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 probe_err(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 >