• Chandler Wilkerson's avatar
    fix incorrect reading of cpuinfo on POWER systems · 962dea86
    Chandler Wilkerson authored
    This patch provides a rewrite of how /proc/cpuinfo is parsed in common_jag.c, as the original code made the incorrect assumption that cpuinfo follows a sane format across architectures ;-)
    
    The motivation for this patch is that the original code was producing stack smashing on a POWER7 running RHEL6.4 Red Hat adds -fstack-protector along with a lot of other protective CFLAGS when building RPMs. The code ran okay with -fno-stack-protector, but that is not the best work-around.
    
    So, the relevant /proc/cpuinfo line on an Intel (Xeon X5675) system looks like:
    
    cpu MHz                : 3066.915
    
    Whereas the relevant line in a POWER7 system is
    
    clock                : 3550.000000MHz
    
    My patch replaces the assumption that the relevant number starts 11 characters into the string with another assumption: That the relevant number starts two characters after a colon in a string that matches (M|G)Hz.
    
    All in all, the function has a few more calls, which may be a performance issue if it has to be called multiple times, but since the section I edited only gets evaluated if we don't know the cpu frequency, getting it right will actually result in fewer string operations and unnecessary opens of /proc/cpuinfo for systems likewise affected.
    
    Finally, I also read the actual value into a double and multiply it up to the size indicated by the suffix, so we end up with KHz? It was unclear what the original code intended, since it matched both MHz and GHz, replaced the decimal point with a zero, and read the result as an int.
    
    --
    Chandler Wilkerson
    Center for Research Computing
    Rice University
    962dea86
To find the state of this project's repository at the time of any of these versions, check out the tags.