On 11/11/16 02:56, Andrew Pinski wrote: > As I mentioned in my other emails, parsing /proc/cpuinfo has one issue > is that the current parsing assumes many different things about the > format. So the best way to do this is to parse > /sys/devices/system/cpu/cpuN/regs/identification/midr_el1 files > instead. To get which cpu are present (though not necessarily online) > we parse "/sys/devices/system/cpu/present" file. We fall back to > parsing /proc/cpu if any parsing fails of these files including not > finding out which cpu we are on. The main reason why we fall back is > because only newer kernels support exporting this file. To get the > features I just look at the hwcap that the kernel passes to userspace > so I needed to add an extra argument to AARCH64_OPT_EXTENSION. I also > had to define some HWCAP_* macros in driver-aarch64.c since older > kernels headers don't have these values defined. > > It should also be possible to parse > /sys/devices/system/cpu/cpu%d/cache%d directory to get cache > information too but that is left for another patch and another time. > > Since I don't have access to a big.LITTLE system, someone should test > there with a new enough kernel; I was using stock 4.9.0-rc3. > > OK? Bootstrapped and tested on ThunderX on aarch64-linux-gnu with no > regressions and making sure /proc/cpuinfo is not read (by using > strace). > > Thanks, > Andrew Pinski > > ChangeLog: > * config/aarch64/aarch64-option-extensions.def: Document extra > argument to AARCH64_OPT_EXTENSION. Update for the extra argument for > all of the option extensions. > * config/aarch64/driver-aarch64.c: Include sys/auxv.h and asm/hwcap.h.
GCC supports native builds on freebsd as well as linux. Isn't this going to break that? R. > (HWCAP_CRC32): Define if needed. > (HWCAP_ATOMICS): Likewise. > (HWCAP_FPHP): Likewise. > (HWCAP_ASIMDHP): Likewise. > (aarch64_arch_extension): New field hwcap_mask. > (AARCH64_OPT_EXTENSION): Handle extra argument. > (AARCH64_BIG_LITTLE): Always put the larger core number first. > (valid_bL_core_p): Don't check AARCH64_BIG_LITTLE for the opposite > order as it already handles the order. > (implementor_from_midr): New function. > (part_no_from_midr): New function. > (sysfsformat): New define. > (host_detect_local_cpu_sys): New function. > (host_detect_local_cpu): Call host_detect_local_cpu_sys if opening > "/sys/devices/system/cpu/present" file worked. > * common/config/aarch64/aarch64-common.c (AARCH64_OPT_EXTENSION): > Handle extra argument. >