blob: eca5a0396599387940ed3d7b6e5550559b75d748 [file] [log] [blame]
/*
* Copyright (C) 2015 Intel Corporation
* Author: Tony Luck
*
* This software may be redistributed and/or modified under the terms of
* the GNU General Public License ("GPL") version 2 only as published by the
* Free Software Foundation.
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
static long sumint(char *s)
{
long total = 0;
char *se;
for (;;) {
total += strtol(s, &se, 10);
if (s == se)
break;
s = se;
}
return total;
}
/*
* Parse /proc/interrupts to sum the number of observed
* machine checks and corrected machine check interrupts
* across all cpus
*/
void proc_interrupts(long *nmce, long *ncmci)
{
FILE *fp = fopen("/proc/interrupts", "r");
char *p, line[4096];
*ncmci = *nmce = -1;
if (fp == NULL)
return;
while (fgets(line, sizeof(line), fp) != NULL) {
for (p = line; isspace(*p); p++)
;
if (strncmp(p, "MCE:", 4) == 0)
*nmce = sumint(p+4);
else if (strncmp(p, "THR:", 4) == 0)
*ncmci = sumint(p+4);
}
fclose(fp);
}