Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2609678ybl; Sun, 2 Feb 2020 02:32:36 -0800 (PST) X-Google-Smtp-Source: APXvYqzJeiZa2urxgAAGeF7XNzEe8oAuVgrqJHubf3JSDxs0uS/EijV776ABMkIE5/GUvahCY99J X-Received: by 2002:a05:6830:1d7a:: with SMTP id l26mr13465111oti.138.1580639556374; Sun, 02 Feb 2020 02:32:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580639556; cv=none; d=google.com; s=arc-20160816; b=tewIvEGL0Q3Z0dccw142ZhR9wmJubatp9G/julaPuUkpNknRkizIfw9WwH53R+UPq/ +ijQEr/IrNeQBDsMKErMyQwvM2SBLJxXAteK0EPj9stjb7g0JB8SUGC/HUet949mdjiH nBynpRzBedcNfWxw79QMjhQznkG+eh5ggsoBp2aV5B3ol700EA/m8idPnLX78BHSdPnz a+CEf7gOCxP2iiuxOxw6pWd8JapKMneJOJ49cfUFTGMEhh5ag6SnbkhoLomZ1QVn4VMG ORKT9/7SeM4p9tm5CWS5q2Llu3scBriXFn350EYe3eEyNgK77hrO1jKq7HP4YqPS4CRO 4tgg== 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:dkim-signature; bh=iw/jlpnFKgvGjPb/LDuHqevkQbtcEh7gdl9bjXy0GUQ=; b=jTgKGZx7gGmMTpdIDs3NQCbHIkD2Z91ixiTFMzNMCmPxd+hi65EuRwSvq9VEkhwnXy ZwOWTGiZwRvUFgPCLuMW9+z2YNYQpsK+a5dEkdTPFR7r+JG2EHZouuIXiiBzV0t00Kpm /rvpsyESwkfJdxMK/hNxAH07wzTB+wmNI1Ip7AFJgdC5nGSEvbjeofPApQ4zzP3h2eI+ 4i65tVNeUH+9m24GNWH/zLA5Y7cZDXL4+Ke6dHN2UsKyOcneM/7zzoAyDtS4Js7sf3SE VZFHmvN20lFESYVphN/FzdbTy3SlqptHHCjF54TEJu9QoWpjs4aiTjICuDXIDI0Jf75/ FPeQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="VAF6/ziW"; spf=pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m24si7591997otf.101.2020.02.02.02.32.04; Sun, 02 Feb 2020 02:32:36 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-bluetooth-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=@google.com header.s=20161025 header.b="VAF6/ziW"; spf=pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725962AbgBBKcD (ORCPT + 99 others); Sun, 2 Feb 2020 05:32:03 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:36803 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725942AbgBBKcD (ORCPT ); Sun, 2 Feb 2020 05:32:03 -0500 Received: by mail-wr1-f67.google.com with SMTP id z3so14216534wru.3 for ; Sun, 02 Feb 2020 02:32:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=iw/jlpnFKgvGjPb/LDuHqevkQbtcEh7gdl9bjXy0GUQ=; b=VAF6/ziWcVxi2/k+VYwkLV1UnkRdnDHlJJuL7Lo9hBSC9RHDpNe5LEh9quzWpT6EOD WH0oqO7g9d+8B6Mw6eHvltkMWrEjTwIzl67YJ2xPbJYYLj/dCOA6ejkS2oHD3ohTykuG J0q0t66QKkmk3FiRnkJwLcUjXf4/Ra/aKeM5v46K4EDIMarmzLoYd544kfHIQP1ZLjoW 3ICrGkn+kpX44BQBKYNUyuFjyo0QGg+xAY2giMX7CTeXQ8ErXkVpadnQHwqM874ij4k3 LJliSrRz7Nn3pqLq8sAweHRJwWz4NsFHaJqQbmj3ReWqaOTZyq2/N8Xz6NO3Ooj6VRxV ql5A== 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=iw/jlpnFKgvGjPb/LDuHqevkQbtcEh7gdl9bjXy0GUQ=; b=VnLn/+ups6TwhZg9QlJPZ2Sxw0NPRiFnYPn+nUJZfxvXJ2TUUbDjfK+dfgbG7wRA9G zwogt+OuR5Fjs50PiOpRe408vpLIn06B//i+b4tf8E/u6rLQoeX88JL4681HDkFC/m3B M1CeaQ+iY98ulHwYMQLONhsIGqDENghLEKTL64jW9y6Mn/6gDh7x2GgFuxlyvQVZDCqx qONU9P8692GzK2dAkPe5/utyOJmQB2p9uqb/XVp3N+C0mYlFqAIdFLP+cbQ81PiNqXB2 zZyg/1+bdyyoQl72qYwBfLFxLJvSt3iMAI7jqvITtmbS3gOJY390JJASrkH69iY7+2F/ HSUg== X-Gm-Message-State: APjAAAUmERl4MtDToy3cF6wvbwTD71OhpmE3C1UazQ7D7D4Sin/o8Cv6 f/rcfH8KbNrU7qE7KxG4DS+Ap0QyjdDsvn23CxJQJKRU X-Received: by 2002:a5d:484f:: with SMTP id n15mr9627177wrs.365.1580639519796; Sun, 02 Feb 2020 02:31:59 -0800 (PST) MIME-Version: 1.0 References: <20200131220401.27520-1-marcel@holtmann.org> In-Reply-To: <20200131220401.27520-1-marcel@holtmann.org> From: Archie Pusaka Date: Sun, 2 Feb 2020 18:31:47 +0800 Message-ID: Subject: Re: [RFC v2] Bluetooth: Add debugfs option to enable runtime debug statements To: Marcel Holtmann , Alain Michaud Cc: BlueZ Content-Type: text/plain; charset="UTF-8" Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Hi Marcel, Alain, Looks wonderful to me. On Sat, 1 Feb 2020 at 06:04, Marcel Holtmann wrote: > > Signed-off-by: Marcel Holtmann > --- > include/net/bluetooth/bluetooth.h | 8 ++++ > net/bluetooth/Kconfig | 7 +++ > net/bluetooth/af_bluetooth.c | 2 + > net/bluetooth/lib.c | 71 +++++++++++++++++++++++++++++++ > 4 files changed, 88 insertions(+) > > diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h > index e42bb8e03c09..04f122957314 100644 > --- a/include/net/bluetooth/bluetooth.h > +++ b/include/net/bluetooth/bluetooth.h > @@ -129,6 +129,8 @@ void bt_warn(const char *fmt, ...); > __printf(1, 2) > void bt_err(const char *fmt, ...); > __printf(1, 2) > +void bt_dbg(const char *fmt, ...); > +__printf(1, 2) > void bt_warn_ratelimited(const char *fmt, ...); > __printf(1, 2) > void bt_err_ratelimited(const char *fmt, ...); > @@ -136,7 +138,11 @@ void bt_err_ratelimited(const char *fmt, ...); > #define BT_INFO(fmt, ...) bt_info(fmt "\n", ##__VA_ARGS__) > #define BT_WARN(fmt, ...) bt_warn(fmt "\n", ##__VA_ARGS__) > #define BT_ERR(fmt, ...) bt_err(fmt "\n", ##__VA_ARGS__) > +#if IS_ENABLED(CONFIG_BT_DEBUGFS_OPTION) > +#define BT_DBG(fmt, ...) bt_dbg(fmt "\n", ##__VA_ARGS__) > +#else > #define BT_DBG(fmt, ...) pr_debug(fmt "\n", ##__VA_ARGS__) > +#endif > > #define bt_dev_info(hdev, fmt, ...) \ > BT_INFO("%s: " fmt, (hdev)->name, ##__VA_ARGS__) > @@ -393,6 +399,8 @@ void bt_procfs_cleanup(struct net *net, const char *name); > > extern struct dentry *bt_debugfs; > > +void bt_lib_debugfs_init(void); > + > int l2cap_init(void); > void l2cap_exit(void); > > diff --git a/net/bluetooth/Kconfig b/net/bluetooth/Kconfig > index 165148c7c4ce..2871d0770c11 100644 > --- a/net/bluetooth/Kconfig > +++ b/net/bluetooth/Kconfig > @@ -128,4 +128,11 @@ config BT_DEBUGFS > Provide extensive information about internal Bluetooth states > in debugfs. > > + When dynamic debug is not used, then this option also includes > + a switch to enable/disable internal debug statements. > + > +config BT_DEBUGFS_OPTION > + bool > + default y if BT_DEBUGFS && !DYNAMIC_DEBUG > + > source "drivers/bluetooth/Kconfig" > diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c > index 3fd124927d4d..fa0cd665f32a 100644 > --- a/net/bluetooth/af_bluetooth.c > +++ b/net/bluetooth/af_bluetooth.c > @@ -731,6 +731,8 @@ static int __init bt_init(void) > > bt_debugfs = debugfs_create_dir("bluetooth", NULL); > > + bt_lib_debugfs_init(); > + > bt_leds_init(); > > err = bt_sysfs_init(); > diff --git a/net/bluetooth/lib.c b/net/bluetooth/lib.c > index c09e0a3a0ed9..47c7b0244d1d 100644 > --- a/net/bluetooth/lib.c > +++ b/net/bluetooth/lib.c > @@ -27,6 +27,7 @@ > #define pr_fmt(fmt) "Bluetooth: " fmt > > #include > +#include > > #include > > @@ -135,6 +136,57 @@ int bt_to_errno(__u16 code) > } > EXPORT_SYMBOL(bt_to_errno); > > +#ifdef CONFIG_BT_DEBUGFS_OPTION > +static bool debug_enable; > + > +static ssize_t debug_enable_read(struct file *file, char __user *user_buf, > + size_t count, loff_t *ppos) > +{ > + char buf[3]; > + > + buf[0] = debug_enable ? 'Y': 'N'; > + buf[1] = '\n'; > + buf[2] = '\0'; > + return simple_read_from_buffer(user_buf, count, ppos, buf, 2); > +} > + > +static ssize_t debug_enable_write(struct file *file, > + const char __user *user_buf, > + size_t count, loff_t *ppos) > +{ > + bool enable; > + int err; > + > + err = kstrtobool_from_user(user_buf, count, &enable); > + if (err) > + return err; > + > + if (enable == debug_enable) > + return -EALREADY; > + > + debug_enable = enable; > + > + return count; > +} > + > +static const struct file_operations debug_enable_fops = { > + .open = simple_open, > + .read = debug_enable_read, > + .write = debug_enable_write, > + .llseek = default_llseek, > +}; > + > +void bt_lib_debugfs_init(void) > +{ > + debugfs_create_file("debug_enable", 0644, bt_debugfs, NULL, > + &debug_enable_fops); > +} > +#else > +void bt_lib_debugfs_init(void) > +{ > +} > +#endif > + > void bt_info(const char *format, ...) > { > struct va_format vaf; > @@ -183,6 +235,25 @@ void bt_err(const char *format, ...) > } > EXPORT_SYMBOL(bt_err); > > +void bt_dbg(const char *format, ...) > +{ > + struct va_format vaf; > + va_list args; > + > + if (likely(!debug_enable)) > + return; > + > + va_start(args, format); > + > + vaf.fmt = format; > + vaf.va = &args; > + > + printk(KERN_DEBUG pr_fmt("%pV"), &vaf); > + > + va_end(args); > +} > +EXPORT_SYMBOL(bt_dbg); > + > void bt_warn_ratelimited(const char *format, ...) > { > struct va_format vaf; > -- > 2.24.1 >