Detecting Power7 in C

Justin Hibbits chmeeedalf at gmail.com
Thu Jun 9 15:47:34 UTC 2016


On Jun 9, 2016, at 9:09 AM, Jason Bacon wrote:

>
> I'm porting the SLURM task/affinity plugin to FreeBSD and wondering  
> what's the best way to detect whether we're running on a power7  
> processor.
>
> The Linux code is below.  I could do something similar with  
> dmesg.boot on FreeBSD, but hoping there's a more elegant way within  
> a C program.
>
> If I have to use dmesg.boot, what string would I be looking for? I  
> don't have a power7 installation at the moment.
>
> Thanks,
>
>    Jason
>
>                FILE *cpu_info_file;
>
>                char buffer[128];
>                char* _cpuinfo_path = "/proc/cpuinfo";
>                cpu_info_file = fopen(_cpuinfo_path, "r");
>                if (cpu_info_file == NULL) {
>                        error("_get_is_power: error %d opening %s",  
> errno,
>                              _cpuinfo_path);
>                        return false;   /* assume not power processor  
> */
>                }
>
>                is_power = 0;
>                while (fgets(buffer, sizeof(buffer), cpu_info_file) ! 
> = NULL) {
>                        if (strstr(buffer, "POWER7")) {
>                                is_power = 1;
>                                break;
>                        }
>                }
>                fclose(cpu_info_file);

You can use the hw.model sysctl.  For POWER7, the string you would  
receive is "POWER7".  For all the model strings you can get, see the  
strings in the models[] table in sys/powerpc/powerpc/cpu.c .

- Justin


More information about the freebsd-ppc mailing list