diff options
Diffstat (limited to 'sound/core/misc.c')
| -rw-r--r-- | sound/core/misc.c | 49 | 
1 files changed, 25 insertions, 24 deletions
diff --git a/sound/core/misc.c b/sound/core/misc.c index 2c41825c836..30e027ecf4d 100644 --- a/sound/core/misc.c +++ b/sound/core/misc.c @@ -20,6 +20,8 @@   */  #include <linux/init.h> +#include <linux/export.h> +#include <linux/moduleparam.h>  #include <linux/time.h>  #include <linux/slab.h>  #include <linux/ioport.h> @@ -58,26 +60,6 @@ static const char *sanity_file_name(const char *path)  	else  		return path;  } - -/* print file and line with a certain printk prefix */ -static int print_snd_pfx(unsigned int level, const char *path, int line, -			 const char *format) -{ -	const char *file = sanity_file_name(path); -	char tmp[] = "<0>"; -	const char *pfx = level ? KERN_DEBUG : KERN_DEFAULT; -	int ret = 0; - -	if (format[0] == '<' && format[2] == '>') { -		tmp[1] = format[1]; -		pfx = tmp; -		ret = 1; -	} -	printk("%sALSA %s:%d: ", pfx, file, line); -	return ret; -} -#else -#define print_snd_pfx(level, path, line, format)	0  #endif  #if defined(CONFIG_SND_DEBUG) || defined(CONFIG_SND_VERBOSE_PRINTK) @@ -85,15 +67,34 @@ void __snd_printk(unsigned int level, const char *path, int line,  		  const char *format, ...)  {  	va_list args; -	 -#ifdef CONFIG_SND_DEBUG	 +#ifdef CONFIG_SND_VERBOSE_PRINTK +	int kern_level; +	struct va_format vaf; +	char verbose_fmt[] = KERN_DEFAULT "ALSA %s:%d %pV"; +#endif + +#ifdef CONFIG_SND_DEBUG  	if (debug < level)  		return;  #endif +  	va_start(args, format); -	if (print_snd_pfx(level, path, line, format)) -		format += 3; /* skip the printk level-prefix */ +#ifdef CONFIG_SND_VERBOSE_PRINTK +	vaf.fmt = format; +	vaf.va = &args; + +	kern_level = printk_get_level(format); +	if (kern_level) { +		const char *end_of_header = printk_skip_level(format); +		memcpy(verbose_fmt, format, end_of_header - format); +		vaf.fmt = end_of_header; +	} else if (level) +		memcpy(verbose_fmt, KERN_DEBUG, sizeof(KERN_DEBUG) - 1); +	printk(verbose_fmt, sanity_file_name(path), line, &vaf); + +#else  	vprintk(format, args); +#endif  	va_end(args);  }  EXPORT_SYMBOL_GPL(__snd_printk);  | 
