Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp1253816imm; Wed, 19 Sep 2018 15:06:26 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYlbHj2ZjIqHPca1kBiuS3+PzaXfWZYWWZot5spFOk2ROb53ZWkVGteCvqx3CFiSqD0ZMZX X-Received: by 2002:a17:902:24e:: with SMTP id 72-v6mr36254109plc.74.1537394786670; Wed, 19 Sep 2018 15:06:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537394786; cv=none; d=google.com; s=arc-20160816; b=acEOMBjsRYOWfOOeopwq1jGyjQYEcD32VTBSP48CaEhRYMXMysDod8Ywqpxh3PBMel YU8HnmTR1uyLm/TdCnemSch/L5XTkBizBmG584T1tNN//xyawkIg0seTkt9WI3lLy/yK UzoZMKwlQR+/NtiVcGm7iz65L/8ac0JIg20bB/S4996mXahNfjVDDc0ySUPlhd1Co5Qb 7SDV8mfCrd6x5mLq76L5kqNxWllkjUUb9E3hXcr7Dm7Uv9nuOY+PyNHWydx02y5Vsu9Z cTYi0Q8tLNBDzNzeS2HJO4AVH0TWaKHDdo2ktMWZ1itAHyNIAchYfagq/R1dY+UiyjQt AVuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=rhTN80KIGMXY8QDeATsRJD8wo06KKUTBtr9XgTEHd6o=; b=lNHVBpjYGKxYdXZ/uHvN+LA4ir36x8pbd9lAC/Ooy07SRqtdNHzQ4ZrPS/n8CC+h+m pKNYFm9iyPbSOSzHkiavjaGcpRfKtvM1YODfmXplbacCUvPfgoTRcp/Km11TbutvALy9 Mg0cCbB4ZVJQxbxxoAuZMlEhIqXWx016S2CEhwQ6BuGlpfU1hn1J6uwy6taMfdyBxtWe k3roUSwVayDqpI7Arrsm2C9BWiVPigxDKhHcP/XBKtRGjjJBo+Y3C7mYrHElKKtXAkCH yBKLJ3cL9yHavF3NH01hjiVtJas05+siljPtmnnL2cjI6TCvja1m2Cy6dxIv1PP+0P/E j7kg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rasmusvillemoes.dk header.s=google header.b=VZwmP4V8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h65-v6si23999847pfb.70.2018.09.19.15.06.10; Wed, 19 Sep 2018 15:06:26 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@rasmusvillemoes.dk header.s=google header.b=VZwmP4V8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387587AbeITDpf (ORCPT + 99 others); Wed, 19 Sep 2018 23:45:35 -0400 Received: from mail-ed1-f66.google.com ([209.85.208.66]:43238 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731366AbeITDpe (ORCPT ); Wed, 19 Sep 2018 23:45:34 -0400 Received: by mail-ed1-f66.google.com with SMTP id z27-v6so6148391edb.10 for ; Wed, 19 Sep 2018 15:05:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rasmusvillemoes.dk; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=rhTN80KIGMXY8QDeATsRJD8wo06KKUTBtr9XgTEHd6o=; b=VZwmP4V8U7Tvpa3DekdlZWV0jFduXrzVJLgMdDAu4s6obAETRX56LpaRQ6kTVQgs4l tgvv9sHJwKYIfkCDN+khlKy9PxG6+B0HwxME9pXHViCK5//H7FIAiFblYJby37TxSYfI 6P3hWVeWyJGiBsh2luEGqJ5aQEZEaOEyGTwVE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=rhTN80KIGMXY8QDeATsRJD8wo06KKUTBtr9XgTEHd6o=; b=O6SvgqpLZUuLIVP0I1EEcoR/324x1ha6ObVlYaFYdfYp7VRNFOFogEgGR9zj3YZpuW CdH5RMCGeXrCT1SiTCHNQLwHbuhI42JIb45CRUk2vQ0ZtGQHTEhF2nwslxSMv9/yATJI QFrrKYnGa++3bROT9mVSymG0G8lLoXqhcKYs98NiLaAmHEEZDdWNKs9IYhLZ5UXrpQyt OYbPBAjBNZK8OkyqtFfBtyc2NqHjIsWjarO/HXhpLMYIO2sr+01pOPu1C1A2d7iTdzvy Gtg7CSUxiwqf7KVsUiMSfYvA2YI8iaCyvkMrVTHLJvgiu9ik/OTVKmIWsvLE7is9ygcd eVBA== X-Gm-Message-State: APzg51D1RIf9bhbY1L5vRE2X5azUR2MuMmU/6yFVUSyIXKXaGWmIOOU0 MdLWGvHoFA4XcwabxEnzVqXV0g== X-Received: by 2002:a50:d01a:: with SMTP id j26-v6mr63252008edf.15.1537394736052; Wed, 19 Sep 2018 15:05:36 -0700 (PDT) Received: from prevas-ravi.waoo.dk (dhcp-5-186-115-161.cgn.ip.fibianet.dk. [5.186.115.161]) by smtp.gmail.com with ESMTPSA id a9-v6sm2798edi.26.2018.09.19.15.05.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 19 Sep 2018 15:05:35 -0700 (PDT) From: Rasmus Villemoes To: Jason Baron , Andrew Morton Cc: linux-kernel@vger.kernel.org, Rasmus Villemoes Subject: [PATCH 20/22] dynamic_debug: introduce CONFIG_DYNAMIC_DEBUG_RELATIVE_POINTERS Date: Thu, 20 Sep 2018 00:04:42 +0200 Message-Id: <20180919220444.23190-21-linux@rasmusvillemoes.dk> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180919220444.23190-1-linux@rasmusvillemoes.dk> References: <20180919220444.23190-1-linux@rasmusvillemoes.dk> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Based on the same idea for struct bug_entry, an architecture can opt-in to use relative pointers in struct _ddebug. It only makes sense for 64 bit architectures, where one saves 16 bytes per entry (out of 40 or 56, depending on CONFIG_JUMP_LABEL). The architecture is responsible for providing a suitable DEFINE_DYNAMIC_DEBUG_METADATA macro in . Signed-off-by: Rasmus Villemoes --- include/linux/dynamic_debug.h | 14 ++++++++++++++ lib/Kconfig.debug | 3 +++ lib/dynamic_debug.c | 20 ++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index e1be30e8422b..cc4222a20aa1 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -16,10 +16,17 @@ struct _ddebug { * These fields are used to drive the user interface * for selecting and displaying debug callsites. */ +#ifdef CONFIG_DYNAMIC_DEBUG_RELATIVE_POINTERS + signed int modname_disp; + signed int function_disp; + signed int filename_disp; + signed int format_disp; +#else const char *modname; const char *function; const char *filename; const char *format; +#endif /* * The flags field controls the behaviour at the callsite. * The bits here are changed dynamically when the user @@ -70,6 +77,12 @@ void __dynamic_netdev_dbg(struct _ddebug *descriptor, const struct net_device *dev, const char *fmt, ...); +#ifdef CONFIG_DYNAMIC_DEBUG_RELATIVE_POINTERS +#include +#ifndef DEFINE_DYNAMIC_DEBUG_METADATA +# error "asm/dynamic_debug.h must provide definition of DEFINE_DYNAMIC_DEBUG_METADATA" +#endif +#else #define DEFINE_DYNAMIC_DEBUG_METADATA(name, fmt) \ static struct _ddebug __aligned(8) \ __attribute__((section("__verbose"))) name = { \ @@ -80,6 +93,7 @@ void __dynamic_netdev_dbg(struct _ddebug *descriptor, .flags_lineno = _DPRINTK_FLAGS_LINENO_INIT, \ _DPRINTK_KEY_INIT \ } +#endif #ifdef HAVE_JUMP_LABEL diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 4966c4fbe7f7..a4113f746826 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -146,6 +146,9 @@ config DYNAMIC_DEBUG See Documentation/admin-guide/dynamic-debug-howto.rst for additional information. +config DYNAMIC_DEBUG_RELATIVE_POINTERS + bool + endmenu # "printk and dmesg options" menu "Compile-time checks and compiler options" diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 9d4c840ff0de..61e61b36e479 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -37,6 +37,24 @@ #include #include +#ifdef CONFIG_DYNAMIC_DEBUG_RELATIVE_POINTERS +static inline const char *dd_modname(const struct _ddebug *dd) +{ + return (const char *)dd + dd->modname_disp; +} +static inline const char *dd_function(const struct _ddebug *dd) +{ + return (const char *)dd + dd->function_disp; +} +static inline const char *dd_filename(const struct _ddebug *dd) +{ + return (const char *)dd + dd->filename_disp; +} +static inline const char *dd_format(const struct _ddebug *dd) +{ + return (const char *)dd + dd->format_disp; +} +#else static inline const char *dd_modname(const struct _ddebug *dd) { return dd->modname; @@ -53,6 +71,8 @@ static inline const char *dd_format(const struct _ddebug *dd) { return dd->format; } +#endif + static inline unsigned dd_lineno(const struct _ddebug *dd) { return dd->flags_lineno >> 8; -- 2.16.4