2018-09-12 14:40:56

by Anup Patel

[permalink] [raw]
Subject: [PATCH] RISC-V: Show CPU ID and Hart ID separately in /proc/cpuinfo

Currently, /proc/cpuinfo show logical CPU ID as Hart ID which
is in-correct. This patch shows CPU ID and Hart ID separately
in /proc/cpuinfo using cpuid_to_hardid_map().

With this patch, contents of /proc/cpuinfo looks as follows:
cpu : 0
hart : 1
isa : rv64imafdcsu
mmu : sv48

cpu : 1
hart : 0
isa : rv64imafdcsu
mmu : sv48

cpu : 2
hart : 3
isa : rv64imafdcsu
mmu : sv48

cpu : 3
hart : 2
isa : rv64imafdcsu
mmu : sv48

Signed-off-by: Anup Patel <[email protected]>
---
arch/riscv/kernel/cpu.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c
index f0f0ec2737b7..7c1342e242e6 100644
--- a/arch/riscv/kernel/cpu.c
+++ b/arch/riscv/kernel/cpu.c
@@ -87,7 +87,8 @@ static int c_show(struct seq_file *m, void *v)
NULL);
const char *compat, *isa, *mmu;

- seq_printf(m, "hart\t: %lu\n", cpu_id);
+ seq_printf(m, "cpu\t: %lu\n", cpu_id);
+ seq_printf(m, "hart\t: %lu\n", cpuid_to_hardid_map(cpu_id));
if (!of_property_read_string(node, "riscv,isa", &isa)
&& isa[0] == 'r'
&& isa[1] == 'v')
--
2.17.1



2018-09-12 16:49:59

by Atish Patra

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Show CPU ID and Hart ID separately in /proc/cpuinfo

On 9/12/18 7:38 AM, Anup Patel wrote:
> Currently, /proc/cpuinfo show logical CPU ID as Hart ID which
> is in-correct. This patch shows CPU ID and Hart ID separately
> in /proc/cpuinfo using cpuid_to_hardid_map().
>
> With this patch, contents of /proc/cpuinfo looks as follows:
> cpu : 0
> hart : 1
> isa : rv64imafdcsu
> mmu : sv48
>
> cpu : 1
> hart : 0
> isa : rv64imafdcsu
> mmu : sv48
>
> cpu : 2
> hart : 3
> isa : rv64imafdcsu
> mmu : sv48
>
> cpu : 3
> hart : 2
> isa : rv64imafdcsu
> mmu : sv48
>
> Signed-off-by: Anup Patel <[email protected]>
> ---
> arch/riscv/kernel/cpu.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c
> index f0f0ec2737b7..7c1342e242e6 100644
> --- a/arch/riscv/kernel/cpu.c
> +++ b/arch/riscv/kernel/cpu.c
> @@ -87,7 +87,8 @@ static int c_show(struct seq_file *m, void *v)
> NULL);
> const char *compat, *isa, *mmu;
>
> - seq_printf(m, "hart\t: %lu\n", cpu_id);
> + seq_printf(m, "cpu\t: %lu\n", cpu_id);
> + seq_printf(m, "hart\t: %lu\n", cpuid_to_hardid_map(cpu_id));
> if (!of_property_read_string(node, "riscv,isa", &isa)
> && isa[0] == 'r'
> && isa[1] == 'v')
>

The extra hart information will not be parsed by lscpu which will make
the cpu information inconsistent between lscpu & /proc/cpuinfo.

Should we patch lscpu as well to show correct hart id as well ?

Regards,
Atish

2018-09-13 03:40:03

by Anup Patel

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Show CPU ID and Hart ID separately in /proc/cpuinfo

On Wed, Sep 12, 2018 at 10:17 PM Atish Patra <[email protected]> wrote:
>
> On 9/12/18 7:38 AM, Anup Patel wrote:
> > Currently, /proc/cpuinfo show logical CPU ID as Hart ID which
> > is in-correct. This patch shows CPU ID and Hart ID separately
> > in /proc/cpuinfo using cpuid_to_hardid_map().
> >
> > With this patch, contents of /proc/cpuinfo looks as follows:
> > cpu : 0
> > hart : 1
> > isa : rv64imafdcsu
> > mmu : sv48
> >
> > cpu : 1
> > hart : 0
> > isa : rv64imafdcsu
> > mmu : sv48
> >
> > cpu : 2
> > hart : 3
> > isa : rv64imafdcsu
> > mmu : sv48
> >
> > cpu : 3
> > hart : 2
> > isa : rv64imafdcsu
> > mmu : sv48
> >
> > Signed-off-by: Anup Patel <[email protected]>
> > ---
> > arch/riscv/kernel/cpu.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c
> > index f0f0ec2737b7..7c1342e242e6 100644
> > --- a/arch/riscv/kernel/cpu.c
> > +++ b/arch/riscv/kernel/cpu.c
> > @@ -87,7 +87,8 @@ static int c_show(struct seq_file *m, void *v)
> > NULL);
> > const char *compat, *isa, *mmu;
> >
> > - seq_printf(m, "hart\t: %lu\n", cpu_id);
> > + seq_printf(m, "cpu\t: %lu\n", cpu_id);
> > + seq_printf(m, "hart\t: %lu\n", cpuid_to_hardid_map(cpu_id));
> > if (!of_property_read_string(node, "riscv,isa", &isa)
> > && isa[0] == 'r'
> > && isa[1] == 'v')
> >
>
> The extra hart information will not be parsed by lscpu which will make
> the cpu information inconsistent between lscpu & /proc/cpuinfo.
>
> Should we patch lscpu as well to show correct hart id as well ?

Yes, we should certainly patch lscpu to parse CPU ID and
HART ID differently.

Regards,
Anup

2018-09-17 14:12:03

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Show CPU ID and Hart ID separately in /proc/cpuinfo

On Wed, Sep 12, 2018 at 09:47:55AM -0700, Atish Patra wrote:
> The extra hart information will not be parsed by lscpu which will make the
> cpu information inconsistent between lscpu & /proc/cpuinfo.
>
> Should we patch lscpu as well to show correct hart id as well ?

It would be good to follow whatever prescedent other architectures
with different logical vs physical cpuids have set.

2018-09-23 13:05:14

by Anup Patel

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Show CPU ID and Hart ID separately in /proc/cpuinfo

On Mon, Sep 17, 2018 at 7:40 PM Christoph Hellwig <[email protected]> wrote:
>
> On Wed, Sep 12, 2018 at 09:47:55AM -0700, Atish Patra wrote:
> > The extra hart information will not be parsed by lscpu which will make the
> > cpu information inconsistent between lscpu & /proc/cpuinfo.
> >
> > Should we patch lscpu as well to show correct hart id as well ?
>
> It would be good to follow whatever prescedent other architectures
> with different logical vs physical cpuids have set.

Most architectures (x86, ARM, ARM64), display logical CPU id as
"processor" attribute. I think we should use same name for logical
CPU id.

Other attributes in /proc/cpuinfo are very different accros architectures.
For e.g. x86 shows physical CPU id as "core id"

I will revise this patch to use "processor" attribute name for
logical CPU id.

Regards,
Anup

2018-09-29 01:47:52

by Palmer Dabbelt

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Show CPU ID and Hart ID separately in /proc/cpuinfo

On Wed, 12 Sep 2018 07:38:22 PDT (-0700), [email protected] wrote:
> Currently, /proc/cpuinfo show logical CPU ID as Hart ID which
> is in-correct. This patch shows CPU ID and Hart ID separately
> in /proc/cpuinfo using cpuid_to_hardid_map().
>
> With this patch, contents of /proc/cpuinfo looks as follows:
> cpu : 0
> hart : 1
> isa : rv64imafdcsu
> mmu : sv48
>
> cpu : 1
> hart : 0
> isa : rv64imafdcsu
> mmu : sv48
>
> cpu : 2
> hart : 3
> isa : rv64imafdcsu
> mmu : sv48
>
> cpu : 3
> hart : 2
> isa : rv64imafdcsu
> mmu : sv48
>
> Signed-off-by: Anup Patel <[email protected]>
> ---
> arch/riscv/kernel/cpu.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c
> index f0f0ec2737b7..7c1342e242e6 100644
> --- a/arch/riscv/kernel/cpu.c
> +++ b/arch/riscv/kernel/cpu.c
> @@ -87,7 +87,8 @@ static int c_show(struct seq_file *m, void *v)
> NULL);
> const char *compat, *isa, *mmu;
>
> - seq_printf(m, "hart\t: %lu\n", cpu_id);
> + seq_printf(m, "cpu\t: %lu\n", cpu_id);
> + seq_printf(m, "hart\t: %lu\n", cpuid_to_hardid_map(cpu_id));
> if (!of_property_read_string(node, "riscv,isa", &isa)
> && isa[0] == 'r'
> && isa[1] == 'v')

I like this, but it doesn't appear to apply. Do you mind sending something
against Linus' master? Then I should be able to sort it out.

Thanks!

2018-09-29 06:13:27

by Anup Patel

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Show CPU ID and Hart ID separately in /proc/cpuinfo

On Sat, Sep 29, 2018 at 7:16 AM Palmer Dabbelt <[email protected]> wrote:
>
> On Wed, 12 Sep 2018 07:38:22 PDT (-0700), [email protected] wrote:
> > Currently, /proc/cpuinfo show logical CPU ID as Hart ID which
> > is in-correct. This patch shows CPU ID and Hart ID separately
> > in /proc/cpuinfo using cpuid_to_hardid_map().
> >
> > With this patch, contents of /proc/cpuinfo looks as follows:
> > cpu : 0
> > hart : 1
> > isa : rv64imafdcsu
> > mmu : sv48
> >
> > cpu : 1
> > hart : 0
> > isa : rv64imafdcsu
> > mmu : sv48
> >
> > cpu : 2
> > hart : 3
> > isa : rv64imafdcsu
> > mmu : sv48
> >
> > cpu : 3
> > hart : 2
> > isa : rv64imafdcsu
> > mmu : sv48
> >
> > Signed-off-by: Anup Patel <[email protected]>
> > ---
> > arch/riscv/kernel/cpu.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c
> > index f0f0ec2737b7..7c1342e242e6 100644
> > --- a/arch/riscv/kernel/cpu.c
> > +++ b/arch/riscv/kernel/cpu.c
> > @@ -87,7 +87,8 @@ static int c_show(struct seq_file *m, void *v)
> > NULL);
> > const char *compat, *isa, *mmu;
> >
> > - seq_printf(m, "hart\t: %lu\n", cpu_id);
> > + seq_printf(m, "cpu\t: %lu\n", cpu_id);
> > + seq_printf(m, "hart\t: %lu\n", cpuid_to_hardid_map(cpu_id));
> > if (!of_property_read_string(node, "riscv,isa", &isa)
> > && isa[0] == 'r'
> > && isa[1] == 'v')
>
> I like this, but it doesn't appear to apply. Do you mind sending something
> against Linus' master? Then I should be able to sort it out.
>

This patch is requires cpuid_to_hardid_map() added by Atish's
patchset so I have requested Atish to make this patch part of
his v6 patchset.

Thanks,
Anup

2018-10-01 16:44:34

by Palmer Dabbelt

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Show CPU ID and Hart ID separately in /proc/cpuinfo

On Fri, 28 Sep 2018 23:12:47 PDT (-0700), [email protected] wrote:
> On Sat, Sep 29, 2018 at 7:16 AM Palmer Dabbelt <[email protected]> wrote:
>>
>> On Wed, 12 Sep 2018 07:38:22 PDT (-0700), [email protected] wrote:
>> > Currently, /proc/cpuinfo show logical CPU ID as Hart ID which
>> > is in-correct. This patch shows CPU ID and Hart ID separately
>> > in /proc/cpuinfo using cpuid_to_hardid_map().
>> >
>> > With this patch, contents of /proc/cpuinfo looks as follows:
>> > cpu : 0
>> > hart : 1
>> > isa : rv64imafdcsu
>> > mmu : sv48
>> >
>> > cpu : 1
>> > hart : 0
>> > isa : rv64imafdcsu
>> > mmu : sv48
>> >
>> > cpu : 2
>> > hart : 3
>> > isa : rv64imafdcsu
>> > mmu : sv48
>> >
>> > cpu : 3
>> > hart : 2
>> > isa : rv64imafdcsu
>> > mmu : sv48
>> >
>> > Signed-off-by: Anup Patel <[email protected]>
>> > ---
>> > arch/riscv/kernel/cpu.c | 3 ++-
>> > 1 file changed, 2 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c
>> > index f0f0ec2737b7..7c1342e242e6 100644
>> > --- a/arch/riscv/kernel/cpu.c
>> > +++ b/arch/riscv/kernel/cpu.c
>> > @@ -87,7 +87,8 @@ static int c_show(struct seq_file *m, void *v)
>> > NULL);
>> > const char *compat, *isa, *mmu;
>> >
>> > - seq_printf(m, "hart\t: %lu\n", cpu_id);
>> > + seq_printf(m, "cpu\t: %lu\n", cpu_id);
>> > + seq_printf(m, "hart\t: %lu\n", cpuid_to_hardid_map(cpu_id));
>> > if (!of_property_read_string(node, "riscv,isa", &isa)
>> > && isa[0] == 'r'
>> > && isa[1] == 'v')
>>
>> I like this, but it doesn't appear to apply. Do you mind sending something
>> against Linus' master? Then I should be able to sort it out.
>>
>
> This patch is requires cpuid_to_hardid_map() added by Atish's
> patchset so I have requested Atish to make this patch part of
> his v6 patchset.

Thanks!