diff options
Diffstat (limited to 'arch/mips/kernel/proc.c')
| -rw-r--r-- | arch/mips/kernel/proc.c | 64 | 
1 files changed, 44 insertions, 20 deletions
diff --git a/arch/mips/kernel/proc.c b/arch/mips/kernel/proc.c index 8c58d8a84bf..037a44d962f 100644 --- a/arch/mips/kernel/proc.c +++ b/arch/mips/kernel/proc.c @@ -17,8 +17,24 @@  unsigned int vced_count, vcei_count; +/* + *  * No lock; only written during early bootup by CPU 0. + *   */ +static RAW_NOTIFIER_HEAD(proc_cpuinfo_chain); + +int __ref register_proc_cpuinfo_notifier(struct notifier_block *nb) +{ +	return raw_notifier_chain_register(&proc_cpuinfo_chain, nb); +} + +int proc_cpuinfo_notifier_call_chain(unsigned long val, void *v) +{ +	return raw_notifier_call_chain(&proc_cpuinfo_chain, val, v); +} +  static int show_cpuinfo(struct seq_file *m, void *v)  { +	struct proc_cpuinfo_notifier_args proc_cpuinfo_notifier_args;  	unsigned long n = (unsigned long) v - 1;  	unsigned int version = cpu_data[n].processor_id;  	unsigned int fp_vers = cpu_data[n].fpu_id; @@ -65,26 +81,25 @@ static int show_cpuinfo(struct seq_file *m, void *v)  				cpu_data[n].watch_reg_masks[i]);  		seq_printf(m, "]\n");  	} -	if (cpu_has_mips_r) { -		seq_printf(m, "isa\t\t\t: mips1"); -		if (cpu_has_mips_2) -			seq_printf(m, "%s", " mips2"); -		if (cpu_has_mips_3) -			seq_printf(m, "%s", " mips3"); -		if (cpu_has_mips_4) -			seq_printf(m, "%s", " mips4"); -		if (cpu_has_mips_5) -			seq_printf(m, "%s", " mips5"); -		if (cpu_has_mips32r1) -			seq_printf(m, "%s", " mips32r1"); -		if (cpu_has_mips32r2) -			seq_printf(m, "%s", " mips32r2"); -		if (cpu_has_mips64r1) -			seq_printf(m, "%s", " mips64r1"); -		if (cpu_has_mips64r2) -			seq_printf(m, "%s", " mips64r2"); -		seq_printf(m, "\n"); -	} + +	seq_printf(m, "isa\t\t\t: mips1"); +	if (cpu_has_mips_2) +		seq_printf(m, "%s", " mips2"); +	if (cpu_has_mips_3) +		seq_printf(m, "%s", " mips3"); +	if (cpu_has_mips_4) +		seq_printf(m, "%s", " mips4"); +	if (cpu_has_mips_5) +		seq_printf(m, "%s", " mips5"); +	if (cpu_has_mips32r1) +		seq_printf(m, "%s", " mips32r1"); +	if (cpu_has_mips32r2) +		seq_printf(m, "%s", " mips32r2"); +	if (cpu_has_mips64r1) +		seq_printf(m, "%s", " mips64r1"); +	if (cpu_has_mips64r2) +		seq_printf(m, "%s", " mips64r2"); +	seq_printf(m, "\n");  	seq_printf(m, "ASEs implemented\t:");  	if (cpu_has_mips16)	seq_printf(m, "%s", " mips16"); @@ -96,6 +111,8 @@ static int show_cpuinfo(struct seq_file *m, void *v)  	if (cpu_has_mipsmt)	seq_printf(m, "%s", " mt");  	if (cpu_has_mmips)	seq_printf(m, "%s", " micromips");  	if (cpu_has_vz)		seq_printf(m, "%s", " vz"); +	if (cpu_has_msa)	seq_printf(m, "%s", " msa"); +	if (cpu_has_eva)	seq_printf(m, "%s", " eva");  	seq_printf(m, "\n");  	if (cpu_has_mmips) { @@ -112,6 +129,13 @@ static int show_cpuinfo(struct seq_file *m, void *v)  		      cpu_has_vce ? "%u" : "not available");  	seq_printf(m, fmt, 'D', vced_count);  	seq_printf(m, fmt, 'I', vcei_count); + +	proc_cpuinfo_notifier_args.m = m; +	proc_cpuinfo_notifier_args.n = n; + +	raw_notifier_call_chain(&proc_cpuinfo_chain, 0, +				&proc_cpuinfo_notifier_args); +  	seq_printf(m, "\n");  	return 0;  | 
