/* * lib/dynamic_debug.c * * make pr_debug()/dev_dbg() calls runtime configurable based upon their * source module. * * Copyright (C) 2008 Jason Baron <jbaron@redhat.com> * By Greg Banks <gnb@melbourne.sgi.com> * Copyright (c) 2008 Silicon Graphics Inc. All Rights Reserved. * Copyright (C) 2011 Bart Van Assche. All Rights Reserved. * Copyright (C) 2013 Du, Changbin <changbin.du@gmail.com> */#define pr_fmt(fmt) "dyndbg: " fmt#include<linux/kernel.h>#include<linux/module.h>#include<linux/moduleparam.h>#include<linux/kallsyms.h>#include<linux/types.h>#include<linux/mutex.h>#include<linux/proc_fs.h>#include<linux/seq_file.h>#include<linux/list.h>#include<linux/sysctl.h>#include<linux/ctype.h>#include<linux/string.h>#include<linux/parser.h>#include<linux/string_helpers.h>#include<linux/uaccess.h>#include<linux/dynamic_debug.h>#include<linux/debugfs.h>#include<linux/slab.h>#include<linux/jump_label.h>#include<linux/hardirq.h>#include<linux/sched.h>#include<linux/device.h>#include<linux/netdevice.h>#include<rdma/ib_verbs.h>externstruct_ddebug__start___dyndbg[];externstruct_ddebug__stop___dyndbg[];externstructddebug_class_map__start___dyndbg_classes[];externstructddebug_class_map__stop___dyndbg_classes[];structddebug_table{structlist_headlink,maps;constchar*mod_name;unsignedintnum_ddebugs;struct_ddebug*ddebugs