mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-12-22 12:17:45 +01:00
We have a lot of old dprintk() call sites that aren't going anywhere anytime soon. At the same time, turning them up is a serious burden on the host due to the console locking overhead. Add a new Kconfig option that redirects dfprintk() output to the trace buffer. This is more efficient than logging to the console and allows for proper interleaving of dprintk and static tracepoint events. Since using trace_printk() causes scary warnings to pop at boot time, this new option defaults to "n". Signed-off-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Chuck Lever <chuck.lever@oracle.com> Reviewed-by: Simon Horman <horms@kernel.org> Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
117 lines
2.4 KiB
C
117 lines
2.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* linux/include/linux/sunrpc/debug.h
|
|
*
|
|
* Debugging support for sunrpc module
|
|
*
|
|
* Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
|
|
*/
|
|
#ifndef _LINUX_SUNRPC_DEBUG_H_
|
|
#define _LINUX_SUNRPC_DEBUG_H_
|
|
|
|
#include <uapi/linux/sunrpc/debug.h>
|
|
|
|
/*
|
|
* Debugging macros etc
|
|
*/
|
|
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
|
|
extern unsigned int rpc_debug;
|
|
extern unsigned int nfs_debug;
|
|
extern unsigned int nfsd_debug;
|
|
extern unsigned int nlm_debug;
|
|
#endif
|
|
|
|
#define dprintk(fmt, ...) \
|
|
dfprintk(FACILITY, fmt, ##__VA_ARGS__)
|
|
#define dprintk_rcu(fmt, ...) \
|
|
dfprintk_rcu(FACILITY, fmt, ##__VA_ARGS__)
|
|
|
|
#undef ifdebug
|
|
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
|
|
# define ifdebug(fac) if (unlikely(rpc_debug & RPCDBG_##fac))
|
|
|
|
# if IS_ENABLED(CONFIG_SUNRPC_DEBUG_TRACE)
|
|
# define __sunrpc_printk(fmt, ...) trace_printk(fmt, ##__VA_ARGS__)
|
|
# else
|
|
# define __sunrpc_printk(fmt, ...) printk(KERN_DEFAULT fmt, ##__VA_ARGS__)
|
|
# endif
|
|
|
|
# define dfprintk(fac, fmt, ...) \
|
|
do { \
|
|
ifdebug(fac) \
|
|
__sunrpc_printk(fmt, ##__VA_ARGS__); \
|
|
} while (0)
|
|
|
|
# define dfprintk_rcu(fac, fmt, ...) \
|
|
do { \
|
|
ifdebug(fac) { \
|
|
rcu_read_lock(); \
|
|
__sunrpc_printk(fmt, ##__VA_ARGS__); \
|
|
rcu_read_unlock(); \
|
|
} \
|
|
} while (0)
|
|
|
|
# define RPC_IFDEBUG(x) x
|
|
#else
|
|
# define ifdebug(fac) if (0)
|
|
# define dfprintk(fac, fmt, ...) do {} while (0)
|
|
# define dfprintk_rcu(fac, fmt, ...) do {} while (0)
|
|
# define RPC_IFDEBUG(x)
|
|
#endif
|
|
|
|
/*
|
|
* Sysctl interface for RPC debugging
|
|
*/
|
|
|
|
struct rpc_clnt;
|
|
struct rpc_xprt;
|
|
|
|
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
|
|
void rpc_register_sysctl(void);
|
|
void rpc_unregister_sysctl(void);
|
|
void sunrpc_debugfs_init(void);
|
|
void sunrpc_debugfs_exit(void);
|
|
void rpc_clnt_debugfs_register(struct rpc_clnt *);
|
|
void rpc_clnt_debugfs_unregister(struct rpc_clnt *);
|
|
void rpc_xprt_debugfs_register(struct rpc_xprt *);
|
|
void rpc_xprt_debugfs_unregister(struct rpc_xprt *);
|
|
#else
|
|
static inline void
|
|
sunrpc_debugfs_init(void)
|
|
{
|
|
return;
|
|
}
|
|
|
|
static inline void
|
|
sunrpc_debugfs_exit(void)
|
|
{
|
|
return;
|
|
}
|
|
|
|
static inline void
|
|
rpc_clnt_debugfs_register(struct rpc_clnt *clnt)
|
|
{
|
|
return;
|
|
}
|
|
|
|
static inline void
|
|
rpc_clnt_debugfs_unregister(struct rpc_clnt *clnt)
|
|
{
|
|
return;
|
|
}
|
|
|
|
static inline void
|
|
rpc_xprt_debugfs_register(struct rpc_xprt *xprt)
|
|
{
|
|
return;
|
|
}
|
|
|
|
static inline void
|
|
rpc_xprt_debugfs_unregister(struct rpc_xprt *xprt)
|
|
{
|
|
return;
|
|
}
|
|
#endif
|
|
|
|
#endif /* _LINUX_SUNRPC_DEBUG_H_ */
|