From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A9F4EC433DF for ; Fri, 26 Jun 2020 15:45:02 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6D51D207E8 for ; Fri, 26 Jun 2020 15:45:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="IhZR2XKA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6D51D207E8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=OE0PkgJTDNhXMRCM0Mp8Hp94zdFTbEws14EXbYWi980=; b=IhZR2XKABeAEnSfFSmtJ1GdPC 5IGRHYY602A+oDEdYUZhv2q1YdW+rKBYPcyS/SZvzMRJAqEChHYylX66Pr7Nf3g/PkNFTILswyX0H +DUokVOxxJjqywJVSCx1e8f1VKKmgWnmeiy4KPkVrjze5MukDc9ToPvfaSBsS3+bdB5TvE+OoxKxl MbxltLxVq1ppwACIsGRgvsuUD5obr3XTjUgyjPWnCuChkDAPYhIdONANqAEXqoK5l8505/qLdND1e rOr4rKyEEX7GpeVFmERSbcIkHshiOFNLExP4QGxaZa6x5vpna7xHQXPTaF1lYZxcfoR2SCw18NcFg b1XzlSCQg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1joqUk-0001pM-Uk; Fri, 26 Jun 2020 15:42:27 +0000 Received: from mail-ot1-f65.google.com ([209.85.210.65]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1joqUW-0001kg-MR for linux-arm-kernel@lists.infradead.org; Fri, 26 Jun 2020 15:42:15 +0000 Received: by mail-ot1-f65.google.com with SMTP id 72so9026696otc.3 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=rP7ZB/k/3SckDmXH/rrum6dhiDIGbRhdiss8nKG2vBWBad2icLI4GGJbk9ZCTMp25O 7BjC0FmTJJUDQDhZQisayM3pqWB8UrTzskBjeTjQK26R+qMoyKD6DdE+la8GhO2IjxGx fbH1H0X3IQAZw8G9it5cgwnl0mSZCdXeiIX3JHOJ08hDH+7sRJx4qz9jVtv5L9Fi4vSD KpXg4VdERhl6O4KYudyelnmqzlQiX7zfUjb0gLnbMeMbKOZ8/3oJ3DsTRFW/d+lBDDz6 HKz4EAasESRBEt0fBssHSIWCrtNB0DL2gxQ/+16IMHWL9vHWEYcTkhtwYdQKc8HSs0iS jQfQ== X-Gm-Message-State: AOAM533xiVqsHZ2/Is2uV3moJZVBpmpPKFQHOy07hej+IG8yM/meAdWn QvMEc1ycV+QPpIpscRfHxNU+QC8n84sVci6DhmE= X-Google-Smtp-Source: ABdhPJwykW8CrxuR35IBI3mVnWYSs2LHk0wtbO4rVQPPGyV2Q2g7uhLmf3ZijDe7l5lciP0dn5HkBGfAKNH4nhjtUaE= 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 X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jernej Skrabec , "Rafael J. Wysocki" , Greg Kroah-Hartman , Bartlomiej Zolnierkiewicz , Linux Kernel Mailing List , "open list:DRM DRIVERS" , Russell King - ARM Linux , Neil Armstrong , Jonas Karlman , Andy Shevchenko , Mark Brown , Laurent Pinchart , Daniel Vetter , Linux ARM , Marek Szyprowski Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.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 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel