Messages in this thread | | | Subject | Re: [PATCH] LoongArch: Fix cpu name after s3/s4 | From | Jianmin Lv <> | Date | Thu, 29 Sep 2022 16:39:43 +0800 |
| |
Good idea, agree, I'll change it, thanks.
On 2022/9/29 下午4:31, Huacai Chen wrote: > Hi, Jianmin, > > How about do it like this? > > diff --git a/arch/loongarch/kernel/cpu-probe.c > b/arch/loongarch/kernel/cpu-probe.c > index 1bc9fec4e474..1734362d1fa9 100644 > --- a/arch/loongarch/kernel/cpu-probe.c > +++ b/arch/loongarch/kernel/cpu-probe.c > @@ -265,7 +265,9 @@ static inline void cpu_probe_loongson(struct > cpuinfo_loongarch *c, unsigned int > uint64_t *vendor = (void *)(&cpu_full_name[VENDOR_OFFSET]); > uint64_t *cpuname = (void *)(&cpu_full_name[CPUNAME_OFFSET]); > > - __cpu_full_name[cpu] = cpu_full_name; > + if (!__cpu_full_name[cpu]) > + __cpu_full_name[cpu] = cpu_full_name; > + > *vendor = iocsr_read64(LOONGARCH_IOCSR_VENDOR); > *cpuname = iocsr_read64(LOONGARCH_IOCSR_CPUNAME); > > Huacai > > On Thu, Sep 29, 2022 at 3:36 PM Jianmin Lv <lvjianmin@loongson.cn> wrote: >> >> On coming back from s3/s4, the cpu name will be overwritten >> in cpu_probe path of seconary cpu, so we adjust the postion >> of using cpu name existed in cpu hardware register, and only >> use it while failing to get cpu name from SMBIOS. >> >> Signed-off-by: Jianmin Lv <lvjianmin@loongson.cn> >> >> diff --git a/arch/loongarch/include/asm/cpu-info.h b/arch/loongarch/include/asm/cpu-info.h >> index b6c4f96079df..937dce2a930a 100644 >> --- a/arch/loongarch/include/asm/cpu-info.h >> +++ b/arch/loongarch/include/asm/cpu-info.h >> @@ -64,6 +64,7 @@ extern void cpu_probe(void); >> >> extern const char *__cpu_family[]; >> extern const char *__cpu_full_name[]; >> +extern char cpu_full_name[]; >> #define cpu_family_string() __cpu_family[raw_smp_processor_id()] >> #define cpu_full_name_string() __cpu_full_name[raw_smp_processor_id()] >> >> diff --git a/arch/loongarch/kernel/cpu-probe.c b/arch/loongarch/kernel/cpu-probe.c >> index 529ab8f44ec6..a548b2197224 100644 >> --- a/arch/loongarch/kernel/cpu-probe.c >> +++ b/arch/loongarch/kernel/cpu-probe.c >> @@ -180,14 +180,13 @@ static void cpu_probe_common(struct cpuinfo_loongarch *c) >> #define VENDOR_OFFSET 0 >> #define CPUNAME_OFFSET 9 >> >> -static char cpu_full_name[MAX_NAME_LEN] = " - "; >> +char cpu_full_name[MAX_NAME_LEN] = " - "; >> >> static inline void cpu_probe_loongson(struct cpuinfo_loongarch *c, unsigned int cpu) >> { >> uint64_t *vendor = (void *)(&cpu_full_name[VENDOR_OFFSET]); >> uint64_t *cpuname = (void *)(&cpu_full_name[CPUNAME_OFFSET]); >> >> - __cpu_full_name[cpu] = cpu_full_name; >> *vendor = iocsr_read64(LOONGARCH_IOCSR_VENDOR); >> *cpuname = iocsr_read64(LOONGARCH_IOCSR_CPUNAME); >> >> diff --git a/arch/loongarch/kernel/env.c b/arch/loongarch/kernel/env.c >> index 82b478a5c665..955d82aa298e 100644 >> --- a/arch/loongarch/kernel/env.c >> +++ b/arch/loongarch/kernel/env.c >> @@ -44,6 +44,9 @@ static int __init init_cpu_fullname(void) >> if (loongson_sysconf.cpuname && !strncmp(loongson_sysconf.cpuname, "Loongson", 8)) { >> for (cpu = 0; cpu < NR_CPUS; cpu++) >> __cpu_full_name[cpu] = loongson_sysconf.cpuname; >> + } else { >> + for (cpu = 0; cpu < NR_CPUS; cpu++) >> + __cpu_full_name[cpu] = cpu_full_name; >> } >> return 0; >> } >> -- >> 2.31.1 >>
| |