On Wed, Mar 30, 2016 at 1:06 AM, Juha-Matti Tilli < juha-matti.ti...@nokia.com> wrote:
> Previously, the sysinfo cpuinfo parser assumed that every CPU model has > an @ sign, after which comes the maximum CPU frequency. However, many > environments such as virtualized KVM environments have CPU models not > having @ sign such as "Intel Xeon E312xx (Sandy Bridge)". > > The result of the missing @ sign was that the ODP program crashed. > > The fix is to not assume the @ sign is always there. This may leave > cpu_hz_max uninitialized, but then again this is already what is done if > the string after @ does not conform to the pattern. > > Signed-off-by: Juha-Matti Tilli <juha-matti.ti...@nokia.com> > Reviewed-by: Bill Fischofer <bill.fischo...@linaro.org> > --- > platform/linux-generic/arch/x86/odp_sysinfo_parse.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/platform/linux-generic/arch/x86/odp_sysinfo_parse.c > b/platform/linux-generic/arch/x86/odp_sysinfo_parse.c > index 2ef49e4..c1e05c0 100644 > --- a/platform/linux-generic/arch/x86/odp_sysinfo_parse.c > +++ b/platform/linux-generic/arch/x86/odp_sysinfo_parse.c > @@ -24,10 +24,12 @@ int odp_cpuinfo_parser(FILE *file, odp_system_info_t > *sysinfo) > sizeof(sysinfo->model_str[id]) - 1); > > pos = strchr(sysinfo->model_str[id], '@'); > - *(pos - 1) = '\0'; > - if (sscanf(pos, "@ %lfGHz", &ghz) == 1) { > - hz = (uint64_t)(ghz * 1000000000.0); > - sysinfo->cpu_hz_max[id] = hz; > + if (pos) { > + *(pos - 1) = '\0'; > + if (sscanf(pos, "@ %lfGHz", &ghz) == 1) { > + hz = (uint64_t)(ghz * > 1000000000.0); > + sysinfo->cpu_hz_max[id] = hz; > + } > } > id++; > } > -- > 1.8.3.1 > > _______________________________________________ > lng-odp mailing list > lng-odp@lists.linaro.org > https://lists.linaro.org/mailman/listinfo/lng-odp >
_______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp