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 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 91BAEC3DA7A for ; Thu, 5 Jan 2023 22:40:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id ACA0A10E119; Thu, 5 Jan 2023 22:40:35 +0000 (UTC) Received: from sender-of-o50.zoho.in (sender-of-o50.zoho.in [103.117.158.50]) by gabe.freedesktop.org (Postfix) with ESMTPS id 46F2810E119 for ; Thu, 5 Jan 2023 22:40:33 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1672958425; cv=none; d=zohomail.in; s=zohoarc; b=RFOkYgYQqIjAQm8vtWB8yD4skG8GLD1DWsqj2h9xtV1ghTDal9RlLQBSWnYBCG2mewlGSkPfnruK2x4aacV7oWZyDTeOU4ZF70A9/gLW8FfIfvq2+y5EbN6LJgrsZ8CT53Ics8M7Vb0ycrbMS1awaz/Rv9lgeVKKEGqC4jarGQo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.in; s=zohoarc; t=1672958425; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=QevfRHvy+8o04FQ+EPKRp0aSLdrNebm0QLdliOdTgZM=; b=M5cuV3ncnSxBIoCqe/8fFe0zs/burbe7vY3VQAlRMPpKWVAeKnB2q0Gc176vEYCnlqi5xvOsRHZ5UBUXGnSfP7zGzI06ky9Fsf3kx0akWE1vzduaVWuSlwHqN/pi0BdeY2nwjmq6iv4LyGS7OwzvIIfN1lo1DMspc8G7+KK7iR0= ARC-Authentication-Results: i=1; mx.zohomail.in; dkim=pass header.i=siddh.me; spf=pass smtp.mailfrom=code@siddh.me; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1672958425; s=zmail; d=siddh.me; i=code@siddh.me; h=From:From:To:To:Cc:Cc:Message-ID:Subject:Subject:Date:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=QevfRHvy+8o04FQ+EPKRp0aSLdrNebm0QLdliOdTgZM=; b=KjZjUlUGcalW9mb9PkABFVEehaXWQCYh5ULqu04WNYoUH2SROd0tbsQaGLntEGp0 otJjNXkJ6WeYV0LLJSbd+zYwAEdK0AtPdkbMZI/ri6IzCExa1An0OhDeE3LJm2HuPAn odWA0JkqhCitrwSjuYMT46rZOlytNUrEewTZCiW4= Received: from kampyooter.. (110.226.31.37 [110.226.31.37]) by mx.zoho.in with SMTPS id 1672958423846482.43952720964944; Fri, 6 Jan 2023 04:10:23 +0530 (IST) From: Siddh Raman Pant To: code@siddh.me Message-ID: <20230105224018.132302-1-code@siddh.me> Subject: Re: [PATCH 01/10] drm/print: Fix and add support for NULL as first argument in drm_* macros Date: Fri, 6 Jan 2023 04:10:18 +0530 X-Mailer: git-send-email 2.39.0 In-Reply-To: <7acc7401b5ad0aec973948822bfa906a9615c43e.1672957022.git.code@siddh.me> References: <7acc7401b5ad0aec973948822bfa906a9615c43e.1672957022.git.code@siddh.me> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Content-Type: text/plain; charset=utf8 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tzimmermann@suse.de, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Comments say macros DRM_DEBUG_* are deprecated in favor of drm_dbg_*(NULL, ...), but they have broken support for it, as the macro will result in `(NULL) ? (NULL)->dev : NULL`. Thus, fix them by separating logic to get dev ptr in a new function, which will return the dev ptr if arg is not NULL. Use it in drm_dbg_*, and also in __DRM_DEFINE_DBG_RATELIMITED, where a similar (but correct) NULL check was in place. Also, add support for NULL in __drm_printk, so that all the drm_* macros will hence support NULL as the first argument. This also means that deprecation comments mentioning pr_()* can now be changed to the drm equivalents. There is a need to support device pointers, as in some cases, we may not have drm_device but just the device ptr, such as when dealing with struct mipi_dsi_host. Before this change, passing just mipi_dsi_host would have worked, since due to preprocessing, the resultant would be "host->dev", but now due to NULL check that cannot happen. Signed-off-by: Siddh Raman Pant --- I accidentally removed one underscore in Generic before sending the patch. Please use this corrected patch, otherwise build will fail. Sending entire patchset for this unfortunate oversight on my part doesn't seem a good idea, hence sending as a reply. include/drm/drm_print.h | 101 +++++++++++++++++++++++++++++----------- 1 file changed, 73 insertions(+), 28 deletions(-) diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h index a44fb7ef257f..45bf81ce2339 100644 --- a/include/drm/drm_print.h +++ b/include/drm/drm_print.h @@ -34,6 +34,7 @@ #include =20 #include +#include =20 /* Do *not* use outside of drm_print.[ch]! */ extern unsigned long __drm_debug; @@ -451,9 +452,52 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct = device *dev, * Prefer drm_device based logging over device or prink based logging. */ =20 -/* Helper for struct drm_device based logging. */ +/** + * ___drm_get_dev_ptr - Helper function to get device pointer. + * @ptr: struct drm_device pointer, struct device pointer, or NULL. + * @is_drm: True implies @ptr is drm_device pointer, else device pointer. + * + * RETURNS: + * The device pointer (NULL if @ptr is NULL). + */ +static inline struct device *___drm_get_dev_ptr(const void *ptr, bool is_d= rm) +{ +=09if (!ptr) +=09=09return NULL; + +=09if (is_drm) +=09=09return ((struct drm_device *)ptr)->dev; + +=09return (struct device *)ptr; +} + +/** + * __drm_get_dev_ptr - Helper to get device pointer even if NULL is passed= . + *=09=09 Primarily for use in drm_*() print macros, since they + *=09=09 need to handle NULL as the first argument passed. + */ +#define __drm_get_dev_ptr(drm) \ +=09_Generic((drm),=09=09=09=09=09=09=09\ +=09=09struct drm_device * :=09=09=09=09=09\ +=09=09=09___drm_get_dev_ptr((drm), true),=09=09\ +=09=09struct device * :=09=09=09=09=09\ +=09=09=09___drm_get_dev_ptr((drm), false),=09=09\ +=09=09default :=09=09=09=09=09=09\ +=09=09=09NULL=09=09=09=09=09=09\ +=09) + +/** + * Helper for struct drm_device based logging (prefer this over struct dev= ice). + * Also supports struct device ptr as an argument for edge cases. + */ #define __drm_printk(drm, level, type, fmt, ...)=09=09=09\ -=09dev_##level##type((drm)->dev, "[drm] " fmt, ##__VA_ARGS__) +({=09=09=09=09=09=09=09=09=09\ +=09struct device *__dev_ =3D __drm_get_dev_ptr(drm);=09=09=09\ +=09if (__dev_)=09=09=09=09=09=09=09\ +=09=09dev_##level##type(__dev_, "[drm] " fmt, ##__VA_ARGS__);=09\ +=09else=09=09=09=09=09=09=09=09\ +=09=09pr_##level##type("[drm] " fmt, ##__VA_ARGS__);=09=09\ +}) =20 =20 #define drm_info(drm, fmt, ...)=09=09=09=09=09\ @@ -487,25 +531,25 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct= device *dev, =20 =20 #define drm_dbg_core(drm, fmt, ...)=09=09=09=09=09\ -=09drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_CORE, fmt, ##__VA_ARGS__) -#define drm_dbg_driver(drm, fmt, ...)=09=09=09=09=09=09\ -=09drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRIVER, fmt, ##__VA_ARGS_= _) +=09drm_dev_dbg(__drm_get_dev_ptr(drm), DRM_UT_CORE, fmt, ##__VA_ARGS__) +#define drm_dbg_driver(drm, fmt, ...)=09=09=09=09=09\ +=09drm_dev_dbg(__drm_get_dev_ptr(drm), DRM_UT_DRIVER, fmt, ##__VA_ARGS__) #define drm_dbg_kms(drm, fmt, ...)=09=09=09=09=09\ -=09drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_KMS, fmt, ##__VA_ARGS__) +=09drm_dev_dbg(__drm_get_dev_ptr(drm), DRM_UT_KMS, fmt, ##__VA_ARGS__) #define drm_dbg_prime(drm, fmt, ...)=09=09=09=09=09\ -=09drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_PRIME, fmt, ##__VA_ARGS__= ) +=09drm_dev_dbg(__drm_get_dev_ptr(drm), DRM_UT_PRIME, fmt, ##__VA_ARGS__) #define drm_dbg_atomic(drm, fmt, ...)=09=09=09=09=09\ -=09drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_ATOMIC, fmt, ##__VA_ARGS_= _) +=09drm_dev_dbg(__drm_get_dev_ptr(drm), DRM_UT_ATOMIC, fmt, ##__VA_ARGS__) #define drm_dbg_vbl(drm, fmt, ...)=09=09=09=09=09\ -=09drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_VBL, fmt, ##__VA_ARGS__) +=09drm_dev_dbg(__drm_get_dev_ptr(drm), DRM_UT_VBL, fmt, ##__VA_ARGS__) #define drm_dbg_state(drm, fmt, ...)=09=09=09=09=09\ -=09drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_STATE, fmt, ##__VA_ARGS__= ) +=09drm_dev_dbg(__drm_get_dev_ptr(drm), DRM_UT_STATE, fmt, ##__VA_ARGS__) #define drm_dbg_lease(drm, fmt, ...)=09=09=09=09=09\ -=09drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_LEASE, fmt, ##__VA_ARGS__= ) +=09drm_dev_dbg(__drm_get_dev_ptr(drm), DRM_UT_LEASE, fmt, ##__VA_ARGS__) #define drm_dbg_dp(drm, fmt, ...)=09=09=09=09=09\ -=09drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DP, fmt, ##__VA_ARGS__) +=09drm_dev_dbg(__drm_get_dev_ptr(drm), DRM_UT_DP, fmt, ##__VA_ARGS__) #define drm_dbg_drmres(drm, fmt, ...)=09=09=09=09=09\ -=09drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRMRES, fmt, ##__VA_ARGS_= _) +=09drm_dev_dbg(__drm_get_dev_ptr(drm), DRM_UT_DRMRES, fmt, ##__VA_ARGS__) =20 #define drm_dbg(drm, fmt, ...)=09drm_dbg_driver(drm, fmt, ##__VA_ARGS__) =20 @@ -533,31 +577,31 @@ void __drm_err(const char *format, ...); #define _DRM_PRINTK(once, level, fmt, ...)=09=09=09=09\ =09printk##once(KERN_##level "[" DRM_NAME "] " fmt, ##__VA_ARGS__) =20 -/* NOTE: this is deprecated in favor of pr_info(). */ +/* NOTE: this is deprecated in favor of drm_info(NULL, ...). */ #define DRM_INFO(fmt, ...)=09=09=09=09=09=09\ =09_DRM_PRINTK(, INFO, fmt, ##__VA_ARGS__) -/* NOTE: this is deprecated in favor of pr_notice(). */ +/* NOTE: this is deprecated in favor of drm_notice(NULL, ...). */ #define DRM_NOTE(fmt, ...)=09=09=09=09=09=09\ =09_DRM_PRINTK(, NOTICE, fmt, ##__VA_ARGS__) -/* NOTE: this is deprecated in favor of pr_warn(). */ +/* NOTE: this is deprecated in favor of drm_warn(NULL, ...). */ #define DRM_WARN(fmt, ...)=09=09=09=09=09=09\ =09_DRM_PRINTK(, WARNING, fmt, ##__VA_ARGS__) =20 -/* NOTE: this is deprecated in favor of pr_info_once(). */ +/* NOTE: this is deprecated in favor of drm_info_once(NULL, ...). */ #define DRM_INFO_ONCE(fmt, ...)=09=09=09=09=09=09\ =09_DRM_PRINTK(_once, INFO, fmt, ##__VA_ARGS__) -/* NOTE: this is deprecated in favor of pr_notice_once(). */ +/* NOTE: this is deprecated in favor of drm_notice_once(NULL, ...). */ #define DRM_NOTE_ONCE(fmt, ...)=09=09=09=09=09=09\ =09_DRM_PRINTK(_once, NOTICE, fmt, ##__VA_ARGS__) -/* NOTE: this is deprecated in favor of pr_warn_once(). */ +/* NOTE: this is deprecated in favor of drm_warn_once(NULL, ...). */ #define DRM_WARN_ONCE(fmt, ...)=09=09=09=09=09=09\ =09_DRM_PRINTK(_once, WARNING, fmt, ##__VA_ARGS__) =20 -/* NOTE: this is deprecated in favor of pr_err(). */ +/* NOTE: this is deprecated in favor of drm_err(NULL, ...). */ #define DRM_ERROR(fmt, ...)=09=09=09=09=09=09\ =09__drm_err(fmt, ##__VA_ARGS__) =20 -/* NOTE: this is deprecated in favor of pr_err_ratelimited(). */ +/* NOTE: this is deprecated in favor of drm_err_ratelimited(NULL, ...). */ #define DRM_ERROR_RATELIMITED(fmt, ...)=09=09=09=09=09\ =09DRM_DEV_ERROR_RATELIMITED(NULL, fmt, ##__VA_ARGS__) =20 @@ -593,13 +637,14 @@ void __drm_err(const char *format, ...); #define DRM_DEBUG_DP(fmt, ...)=09=09=09=09=09=09\ =09__drm_dbg(DRM_UT_DP, fmt, ## __VA_ARGS__) =20 -#define __DRM_DEFINE_DBG_RATELIMITED(category, drm, fmt, ...)=09=09=09=09= =09\ -({=09=09=09=09=09=09=09=09=09=09=09=09\ -=09static DEFINE_RATELIMIT_STATE(rs_, DEFAULT_RATELIMIT_INTERVAL, DEFAULT_= RATELIMIT_BURST);\ -=09const struct drm_device *drm_ =3D (drm);=09=09=09=09=09=09=09\ -=09=09=09=09=09=09=09=09=09=09=09=09\ -=09if (drm_debug_enabled(DRM_UT_ ## category) && __ratelimit(&rs_))=09=09= =09\ -=09=09drm_dev_printk(drm_ ? drm_->dev : NULL, KERN_DEBUG, fmt, ## __VA_ARG= S__);=09\ +#define __DRM_DEFINE_DBG_RATELIMITED(category, drm, fmt, ...)=09=09\ +({=09=09=09=09=09=09=09=09=09\ +=09static DEFINE_RATELIMIT_STATE(rs_, DEFAULT_RATELIMIT_INTERVAL,=09\ +=09=09=09=09 DEFAULT_RATELIMIT_BURST);=09=09\ +=09=09=09=09=09=09=09=09=09\ +=09if (drm_debug_enabled(DRM_UT_ ## category) && __ratelimit(&rs_))\ +=09=09drm_dev_printk(__drm_get_dev_ptr(drm), KERN_DEBUG,=09\ +=09=09=09 fmt, ## __VA_ARGS__);=09=09=09\ }) =20 #define drm_dbg_kms_ratelimited(drm, fmt, ...) \ --=20 2.39.0