This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Thu, Jun 29, 2017 at 10:52 AM, Siddhesh Poyarekar <siddhesh@sourceware.org> wrote: > Add a new tunable (glibc.tune.cpu) to override CPU identification on > aarch64. This is useful in two cases: one where it is desirable to > pretend to be another CPU for purposes of testing or because routines > written for that CPU are beneficial for specific workloads and second > where the underlying kernel does not support emulation of MRS to get > the MIDR of the CPU. How was this tested ? I see breakages because ... <snip> > --- a/sysdeps/unix/sysv/linux/aarch64/cpu-features.c > +++ b/sysdeps/unix/sysv/linux/aarch64/cpu-features.c > @@ -20,18 +20,53 @@ > #include <sys/auxv.h> > #include <elf/dl-hwcaps.h> > > +#if HAVE_TUNABLES > +struct cpu_list > +{ > + const char *name; > + uint64_t midr; > +}; > + > +static struct cpu_list cpu_list[] = { > + {"thunderxt88", 0x430F0A10}, > + {"generic", 0x0} > +}; > + > +static uint64_t > +get_midr_from_mcpu (const char *mcpu) > +{ > + for (int i = 0; i < sizeof (cpu_list) / sizeof (struct cpu_list); i++) > + if (tunable_is_name (mcpu, cpu_list[i].name) == 0) > + return cpu_list[i].midr; > + > + return UINT64_MAX; > +} > +#endif > + > static inline void > init_cpu_features (struct cpu_features *cpu_features) > { > uint64_t hwcap_mask = GET_HWCAP_MASK(); > uint64_t hwcap = GLRO (dl_hwcap) & hwcap_mask; > > - if (hwcap & HWCAP_CPUID) > + register uint64_t midr = UINT64_MAX; > + > +#if HAVE_TUNABLES > + /* Get the tunable override. */ > + const char *mcpu = TUNABLE_GET (glibc, tune, mcpu, const char *, NULL); Shouldn't this be TUNABLE_GET (glibc, tune, cpu, const char * , NULL); I don't have write privileges in glibc but the attached appears to be an obvious fix and allows the build to complete. Are there any tests for tunables btw ? regards Ramana > + if (mcpu != NULL) > + midr = get_midr_from_mcpu (mcpu); > +#endif > + > + /* If there was no useful tunable override, query the MIDR if the kernel > + allows it. */ > + if (midr == UINT64_MAX) > { > - register uint64_t id = 0; > - asm volatile ("mrs %0, midr_el1" : "=r"(id)); > - cpu_features->midr_el1 = id; > + if (hwcap & HWCAP_CPUID) > + asm volatile ("mrs %0, midr_el1" : "=r"(midr)); > + else > + midr = 0; > } > - else > - cpu_features->midr_el1 = 0; > + > + cpu_features->midr_el1 = midr; > } > -- > 2.7.4 >
Attachment:
p1.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |