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=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,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 0F08EC433DF for ; Mon, 29 Jun 2020 16:39:38 +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 CB7A525596 for ; Mon, 29 Jun 2020 16:39:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ExTMJP/y"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="uauVhkLq" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CB7A525596 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com 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=vhyiY1HSUkaIphy0wA7w+NGBiv5e9VI/GcjbWuCX/Sk=; b=ExTMJP/yRiIKUyZqdsAB4OUyj M9LA0bfWFmDQCkGIjVUR6xpEZnUBZv3a0GAPxChvQidjZUJc/GfhdhMRmsKVgxuRmRWQKxjFhKTMZ RS+G9ehAjGJ6rAhE553pOjJbVp35knFf0hVwpLDgoDy4VVVU+KtW6Rd4aA8W3FOvT3yOwzF97cvrQ rXMjNSebw14m20Zf3UyBGSFgf7Q0U3Fy/s6vhN8gnRPHW6LCajtjme0PrfEE4ZFc1lTNU75SaJ3wq RYE+E83eR9Vcvna8TZ+j/r09d7Hx/gP2dRZSKAtrn/H2GtCF8X2JvsBsoN4khphtyP1Qjw2FHkl+U ief4jNQkA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpwnV-0005Fb-F7; Mon, 29 Jun 2020 16:38:21 +0000 Received: from mail-pj1-x1043.google.com ([2607:f8b0:4864:20::1043]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpwnT-0005F8-Sv for linux-arm-kernel@lists.infradead.org; Mon, 29 Jun 2020 16:38:20 +0000 Received: by mail-pj1-x1043.google.com with SMTP id i4so8263309pjd.0 for ; Mon, 29 Jun 2020 09:38:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=kfKoyluBhqQK8WBSpnVThNVVFytFAMIzrkcMglZ8Sh0=; b=uauVhkLqChQY63QDsmizLdb/jQYdWYW2KZ7pDQo7+LSredLUfRUSIycrU7mWGxUqmv UqhWWO75apzhc+4AIvEGjaPBN6DgDsjFKLLbLxodJmTZyv5NWBdEI7SN9qeaem1xeojk 4YuYBBHgFJC1Axa1M4NXPDBt4XfhgZKQAp4wgHVmxX1gQhufADuzSGfbv4UHcpkYfOj7 q1VsVxAKsaF0O5un27MpbU1wyibjF4fizkGKLO2oiNuG3h8NFSAQlD/cwH+02E3TJnUt h1tf5Dv0xt/qmGWxJMBRxbW19fIlwNgnPTt2O9f+wtLKjcFE+X9sFxQyvTbE/GTASltt alBQ== 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=kfKoyluBhqQK8WBSpnVThNVVFytFAMIzrkcMglZ8Sh0=; b=rjipHHnsn4v3u/iEslqfjcO/qhEo5NVEJPpLxJ5Yk8WH/eNJSXVcXhcvXAm+0UrWCb rrcOGbWCKBj4Rlimn76VOUeqBxP2uGPdOMC3hwG/NCf/nm4XQURenRtD/hpentxJxtSB 7Lw0bRYRf5g5oW5SNOy2WI4ROKCYhJcQQZ5/a16OWi56S6Te/1vsmzrMmYTcObXo1X7O J43aIcf2zQdJRAj74dew3U70BKo0EXL+CXimWMmBr6TE7Z96ib/DH8ujON+bFNBSVpg1 wcucAYrQLZRKEaPgZxgDNjTgsMWU5HK8S/hlHj/XNgc4G1DxfUT0yYLD7rJbExqwv9be NHEw== X-Gm-Message-State: AOAM533lLpTiZQRtmkWW3pJ7Z58J/0h1OAmBHe1bCLEemyZw768s+m3R j/OqZA5TrnBYrHqO2Hc6W9B9Qrl6inG33PlwkLc= X-Google-Smtp-Source: ABdhPJyR7dnU1HeSw18RQd4JxqNmjcJaca3SHFEBSw63fP13UbNmoK//y1xzhiGRspEbeWiiZppivaRU9rPhRRIw160= X-Received: by 2002:a17:902:7611:: with SMTP id k17mr14218920pll.255.1593448697956; Mon, 29 Jun 2020 09:38:17 -0700 (PDT) MIME-Version: 1.0 References: <20200629112242.18380-1-a.hajda@samsung.com> <20200629112242.18380-2-a.hajda@samsung.com> In-Reply-To: <20200629112242.18380-2-a.hajda@samsung.com> From: Andy Shevchenko Date: Mon, 29 Jun 2020 19:38:04 +0300 Message-ID: Subject: Re: [PATCH v7 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 , Mark Brown , Laurent Pinchart , Daniel Vetter , linux-arm Mailing List , 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 Mon, Jun 29, 2020 at 2:22 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 dev_err_probe(dev, err, ...); FWIW, Reviewed-by: Andy Shevchenko (I'm fine with current code, though, consider below comments) > 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) Perhaps positive conditional. > + dev_err(dev, "error %d: %pV", err, &vaf); > + else > + dev_dbg(dev, "error %d: %pV", err, &vaf); Perhaps {} to be added here. > + > + 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 > -- With Best Regards, Andy Shevchenko _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel