Linux MIPS Architecture development
 help / color / mirror / Atom feed
From: James Hogan <james.hogan@imgtec.com>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: Markos Chandras <markos.chandras@imgtec.com>,
	<linux-mips@linux-mips.org>
Subject: Re: [PATCH] MIPS: MT: proc: Add support for printing VPE and TC ids
Date: Wed, 2 Apr 2014 11:25:16 +0100	[thread overview]
Message-ID: <533BE58C.3010201@imgtec.com> (raw)
In-Reply-To: <20131016151007.GP1615@linux-mips.org>

[-- Attachment #1: Type: text/plain, Size: 5664 bytes --]

On 16/10/13 16:10, Ralf Baechle wrote:
> On Tue, Oct 15, 2013 at 03:13:02PM +0100, Markos Chandras wrote:
> 
>> Add support for including VPE and TC ids in /proc/cpuinfo output as
>> appropriate when MT/SMTC is enabled.
> 
> The pile of #ifdefs cracked my glasses ...
> 
> And there are more CPUs or configuration that want to provide special
> per-CPU information in /proc/cpuinfo.  So I think there needs to be a
> hook mechanism, such as a notifier.
> 
> This is a first cut only; I need to think about what sort of looking
> the notifier needs to have.  But I'd appreciate testing on MT hardware!
> 
> Thanks,
> 
>   Ralf
> 
> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

Hi Ralf,

Both of these patches seem to be applied, Markos' in v3.14-rc1, and your
one in mips-for-linux-next:

$ cat /proc/cpuinfo
...
processor               : 3
...
core                    : 1
VPE                     : 1
VCED exceptions         : not available
VCEI exceptions         : not available
VPE                     : 1

Maybe a revert of Markos' patch could be squashed in to your patch?

Cheers
James

> 
>  arch/mips/include/asm/cpu-info.h | 21 +++++++++++++++++++++
>  arch/mips/kernel/proc.c          | 23 +++++++++++++++++++++++
>  arch/mips/kernel/smp-mt.c        | 22 ++++++++++++++++++++++
>  arch/mips/kernel/smtc-proc.c     | 23 +++++++++++++++++++++++
>  4 files changed, 89 insertions(+)
> 
> diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h
> index 21c8e29..95c1c42 100644
> --- a/arch/mips/include/asm/cpu-info.h
> +++ b/arch/mips/include/asm/cpu-info.h
> @@ -92,4 +92,25 @@ extern void cpu_report(void);
>  extern const char *__cpu_name[];
>  #define cpu_name_string()	__cpu_name[smp_processor_id()]
>  
> +struct seq_file;
> +struct notifier_block;
> +
> +extern int register_proc_cpuinfo_notifier(struct notifier_block *nb);
> +extern int proc_cpuinfo_notifier_call_chain(unsigned long val, void *v);
> +
> +#define proc_cpuinfo_notifier(fn, pri)					\
> +({									\
> +	static struct notifier_block fn##_nb = {			\
> +		.notifier_call = fn,					\
> +		.priority = pri						\
> +	};								\
> +									\
> +	register_proc_cpuinfo_notifier(&fn##_nb);			\
> +})
> +
> +struct proc_cpuinfo_notifier_args {
> +	struct seq_file *m;
> +	unsigned long n;
> +};
> +
>  #endif /* __ASM_CPU_INFO_H */
> diff --git a/arch/mips/kernel/proc.c b/arch/mips/kernel/proc.c
> index 8c58d8a..5ca804d 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;
> @@ -112,6 +128,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;
> diff --git a/arch/mips/kernel/smp-mt.c b/arch/mips/kernel/smp-mt.c
> index 57a3f7a..9a43e78 100644
> --- a/arch/mips/kernel/smp-mt.c
> +++ b/arch/mips/kernel/smp-mt.c
> @@ -285,3 +285,25 @@ struct plat_smp_ops vsmp_smp_ops = {
>  	.smp_setup		= vsmp_smp_setup,
>  	.prepare_cpus		= vsmp_prepare_cpus,
>  };
> +
> +static int proc_cpuinfo_chain_call(struct notifier_block *nfb,
> +	unsigned long action_unused, void *data)
> +{
> +	struct proc_cpuinfo_notifier_args *pcn = data;
> +	struct seq_file *m = pcn->m;
> +	unsigned long n = pcn->n;
> +
> +	if (!cpu_has_mipsmt)
> +		return NOTIFY_OK;
> +
> +	seq_printf(m, "VPE\t\t\t: %d\n", cpu_data[n].vpe_id);
> +
> +	return NOTIFY_OK;
> +}
> +
> +static int __init proc_cpuinfo_notifier_init(void)
> +{
> +	return proc_cpuinfo_notifier(proc_cpuinfo_chain_call, 0);
> +}
> +
> +subsys_initcall(proc_cpuinfo_notifier_init);
> diff --git a/arch/mips/kernel/smtc-proc.c b/arch/mips/kernel/smtc-proc.c
> index c10aa84..38635a9 100644
> --- a/arch/mips/kernel/smtc-proc.c
> +++ b/arch/mips/kernel/smtc-proc.c
> @@ -77,3 +77,26 @@ void init_smtc_stats(void)
>  
>  	proc_create("smtc", 0444, NULL, &smtc_proc_fops);
>  }
> +
> +static int proc_cpuinfo_chain_call(struct notifier_block *nfb,
> +	unsigned long action_unused, void *data)
> +{
> +	struct proc_cpuinfo_notifier_args *pcn = data;
> +	struct seq_file *m = pcn->m;
> +	unsigned long n = pcn->n;
> +
> +	if (!cpu_has_mipsmt)
> +		return NOTIFY_OK;
> +
> +	seq_printf(m, "VPE\t\t\t: %d\n", cpu_data[n].vpe_id);
> +	seq_printf(m, "TC\t\t\t: %d\n", cpu_data[n].tc_id);
> +
> +	return NOTIFY_OK;
> +}
> +
> +static int __init proc_cpuinfo_notifier_init(void)
> +{
> +	return proc_cpuinfo_notifier(proc_cpuinfo_chain_call, 0);
> +}
> +
> +subsys_initcall(proc_cpuinfo_notifier_init);
> 


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: James Hogan <james.hogan@imgtec.com>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: Markos Chandras <markos.chandras@imgtec.com>, linux-mips@linux-mips.org
Subject: Re: [PATCH] MIPS: MT: proc: Add support for printing VPE and TC ids
Date: Wed, 2 Apr 2014 11:25:16 +0100	[thread overview]
Message-ID: <533BE58C.3010201@imgtec.com> (raw)
Message-ID: <20140402102516.QQr-GotZuRprJr6t0TagZIEQgyRaieLiuSK50SH2Jd0@z> (raw)
In-Reply-To: <20131016151007.GP1615@linux-mips.org>

[-- Attachment #1: Type: text/plain, Size: 5664 bytes --]

On 16/10/13 16:10, Ralf Baechle wrote:
> On Tue, Oct 15, 2013 at 03:13:02PM +0100, Markos Chandras wrote:
> 
>> Add support for including VPE and TC ids in /proc/cpuinfo output as
>> appropriate when MT/SMTC is enabled.
> 
> The pile of #ifdefs cracked my glasses ...
> 
> And there are more CPUs or configuration that want to provide special
> per-CPU information in /proc/cpuinfo.  So I think there needs to be a
> hook mechanism, such as a notifier.
> 
> This is a first cut only; I need to think about what sort of looking
> the notifier needs to have.  But I'd appreciate testing on MT hardware!
> 
> Thanks,
> 
>   Ralf
> 
> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

Hi Ralf,

Both of these patches seem to be applied, Markos' in v3.14-rc1, and your
one in mips-for-linux-next:

$ cat /proc/cpuinfo
...
processor               : 3
...
core                    : 1
VPE                     : 1
VCED exceptions         : not available
VCEI exceptions         : not available
VPE                     : 1

Maybe a revert of Markos' patch could be squashed in to your patch?

Cheers
James

> 
>  arch/mips/include/asm/cpu-info.h | 21 +++++++++++++++++++++
>  arch/mips/kernel/proc.c          | 23 +++++++++++++++++++++++
>  arch/mips/kernel/smp-mt.c        | 22 ++++++++++++++++++++++
>  arch/mips/kernel/smtc-proc.c     | 23 +++++++++++++++++++++++
>  4 files changed, 89 insertions(+)
> 
> diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h
> index 21c8e29..95c1c42 100644
> --- a/arch/mips/include/asm/cpu-info.h
> +++ b/arch/mips/include/asm/cpu-info.h
> @@ -92,4 +92,25 @@ extern void cpu_report(void);
>  extern const char *__cpu_name[];
>  #define cpu_name_string()	__cpu_name[smp_processor_id()]
>  
> +struct seq_file;
> +struct notifier_block;
> +
> +extern int register_proc_cpuinfo_notifier(struct notifier_block *nb);
> +extern int proc_cpuinfo_notifier_call_chain(unsigned long val, void *v);
> +
> +#define proc_cpuinfo_notifier(fn, pri)					\
> +({									\
> +	static struct notifier_block fn##_nb = {			\
> +		.notifier_call = fn,					\
> +		.priority = pri						\
> +	};								\
> +									\
> +	register_proc_cpuinfo_notifier(&fn##_nb);			\
> +})
> +
> +struct proc_cpuinfo_notifier_args {
> +	struct seq_file *m;
> +	unsigned long n;
> +};
> +
>  #endif /* __ASM_CPU_INFO_H */
> diff --git a/arch/mips/kernel/proc.c b/arch/mips/kernel/proc.c
> index 8c58d8a..5ca804d 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;
> @@ -112,6 +128,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;
> diff --git a/arch/mips/kernel/smp-mt.c b/arch/mips/kernel/smp-mt.c
> index 57a3f7a..9a43e78 100644
> --- a/arch/mips/kernel/smp-mt.c
> +++ b/arch/mips/kernel/smp-mt.c
> @@ -285,3 +285,25 @@ struct plat_smp_ops vsmp_smp_ops = {
>  	.smp_setup		= vsmp_smp_setup,
>  	.prepare_cpus		= vsmp_prepare_cpus,
>  };
> +
> +static int proc_cpuinfo_chain_call(struct notifier_block *nfb,
> +	unsigned long action_unused, void *data)
> +{
> +	struct proc_cpuinfo_notifier_args *pcn = data;
> +	struct seq_file *m = pcn->m;
> +	unsigned long n = pcn->n;
> +
> +	if (!cpu_has_mipsmt)
> +		return NOTIFY_OK;
> +
> +	seq_printf(m, "VPE\t\t\t: %d\n", cpu_data[n].vpe_id);
> +
> +	return NOTIFY_OK;
> +}
> +
> +static int __init proc_cpuinfo_notifier_init(void)
> +{
> +	return proc_cpuinfo_notifier(proc_cpuinfo_chain_call, 0);
> +}
> +
> +subsys_initcall(proc_cpuinfo_notifier_init);
> diff --git a/arch/mips/kernel/smtc-proc.c b/arch/mips/kernel/smtc-proc.c
> index c10aa84..38635a9 100644
> --- a/arch/mips/kernel/smtc-proc.c
> +++ b/arch/mips/kernel/smtc-proc.c
> @@ -77,3 +77,26 @@ void init_smtc_stats(void)
>  
>  	proc_create("smtc", 0444, NULL, &smtc_proc_fops);
>  }
> +
> +static int proc_cpuinfo_chain_call(struct notifier_block *nfb,
> +	unsigned long action_unused, void *data)
> +{
> +	struct proc_cpuinfo_notifier_args *pcn = data;
> +	struct seq_file *m = pcn->m;
> +	unsigned long n = pcn->n;
> +
> +	if (!cpu_has_mipsmt)
> +		return NOTIFY_OK;
> +
> +	seq_printf(m, "VPE\t\t\t: %d\n", cpu_data[n].vpe_id);
> +	seq_printf(m, "TC\t\t\t: %d\n", cpu_data[n].tc_id);
> +
> +	return NOTIFY_OK;
> +}
> +
> +static int __init proc_cpuinfo_notifier_init(void)
> +{
> +	return proc_cpuinfo_notifier(proc_cpuinfo_chain_call, 0);
> +}
> +
> +subsys_initcall(proc_cpuinfo_notifier_init);
> 


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

  reply	other threads:[~2014-04-02 10:25 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-15 14:13 [PATCH] MIPS: MT: proc: Add support for printing VPE and TC ids Markos Chandras
2013-10-15 14:13 ` Markos Chandras
2013-10-16 15:10 ` Ralf Baechle
2014-04-02 10:25   ` James Hogan [this message]
2014-04-02 10:25     ` James Hogan
2014-04-02 10:32     ` Ralf Baechle
2014-04-03 11:20     ` Ralf Baechle
2014-04-03 11:24       ` James Hogan
2014-04-03 11:24         ` James Hogan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=533BE58C.3010201@imgtec.com \
    --to=james.hogan@imgtec.com \
    --cc=linux-mips@linux-mips.org \
    --cc=markos.chandras@imgtec.com \
    --cc=ralf@linux-mips.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox