ACLOCAL_AMFLAGS=-I m4
-SUBDIRS = libtrace util man
+SUBDIRS = util man
SYSTEMD_SERVICES_IN = misc/rasdaemon.service.in misc/ras-mc-ctl.service.in
SYSTEMD_SERVICES = $(SYSTEMD_SERVICES_IN:.service.in=.service)
EXTRA_DIST = $(SYSTEMD_SERVICES_IN) misc/rasdaemon.env
if WITH_CPU_FAULT_ISOLATION
rasdaemon_SOURCES += ras-cpu-isolation.c queue.c
endif
-rasdaemon_LDADD = -lpthread $(SQLITE3_LIBS) libtrace/libtrace.a
+rasdaemon_LDADD = -lpthread $(SQLITE3_LIBS) $(LIBTRACEEVENT_LIBS)
+rasdaemon_CFLAGS = $(SQLITE3_CFLAGS) $(LIBTRACEEVENT_CFLAGS)
include_HEADERS = config.h ras-events.h ras-logger.h ras-mc-handler.h \
ras-aer-handler.h ras-mce-handler.h ras-record.h bitfield.h ras-report.h \
autoconf
automake
libtool
+ libtraceevent-devel
tar
sqlite-devel (if sqlite3 will be used)
perl-DBD-SQLite (if sqlite3 will be used)
To install then on Fedora, run:
- yum install -y make gcc autoconf automake libtool tar perl-dbd-sqlite
+ dnf install -y make gcc autoconf automake libtool tar perl-dbd-sqlite libtraceevent-devel
Or, if sqlite3 database will be used to store data:
- yum install -y make gcc autoconf automake libtool tar sqlite-devel
+ dnf install -y make gcc autoconf automake libtool tar sqlite-devel libtraceevent-devel
There are currently 3 features that are enabled optionally, via
./configure parameters:
AC_CONFIG_FILES([
Makefile
- libtrace/Makefile
man/Makefile
man/ras-mc-ctl.8
man/rasdaemon.1
AC_SUBST([SQLITE3_LIBS])
+has_libtraceevent_ver=0
+dnl check for tracevent library
+PKG_CHECK_MODULES([LIBTRACEEVENT], [libtraceevent], [has_libtraceevent_ver=1])
+
+AS_IF([test "$has_libtraceevent_ver" -eq 0], [
+ AC_MSG_ERROR([libtraceevent is required but were not found])
+])
AC_ARG_ENABLE([aer],
AS_HELP_STRING([--enable-aer], [enable PCIe AER events (currently experimental)]))
#define __NON_STANDARD_AMPERE_H
#include "ras-events.h"
-#include "libtrace/event-parse.h"
+#include <traceevent/event-parse.h>
#define SOCKET_NUM(x) ((x >> 14) & 0x3)
#define PAYLOAD_TYPE(x) ((x >> 6) & 0x3)
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "libtrace/kbuffer.h"
+#include <traceevent/kbuffer.h>
#include "ras-aer-handler.h"
#include "ras-record.h"
#include "ras-logger.h"
#define BUF_LEN 1024
int ras_aer_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context)
+ struct tep_record *record,
+ struct tep_event *event, void *context)
{
int len;
unsigned long long severity_val;
"%Y-%m-%d %H:%M:%S %z", tm);
trace_seq_printf(s, "%s ", ev.timestamp);
- ev.dev_name = pevent_get_field_raw(s, event, "dev_name",
+ ev.dev_name = tep_get_field_raw(s, event, "dev_name",
record, &len, 1);
if (!ev.dev_name)
return -1;
trace_seq_printf(s, "%s ", ev.dev_name);
- if (pevent_get_field_val(s, event, "status", record, &status_val, 1) < 0)
+ if (tep_get_field_val(s, event, "status", record, &status_val, 1) < 0)
return -1;
- if (pevent_get_field_val(s, event, "severity", record, &severity_val, 1) < 0)
+ if (tep_get_field_val(s, event, "severity", record, &severity_val, 1) < 0)
return -1;
/* Fills the error buffer. If it is a correctable error then use the
bitfield_msg(buf, sizeof(buf), aer_uncor_errors, 32, 0, 0, status_val);
ev.msg = buf;
- if (pevent_get_field_val(s, event, "tlp_header_valid",
+ if (tep_get_field_val(s, event, "tlp_header_valid",
record, &val, 1) < 0)
return -1;
ev.tlp_header_valid = val;
if (ev.tlp_header_valid) {
- ev.tlp_header = pevent_get_field_raw(s, event, "tlp_header",
+ ev.tlp_header = tep_get_field_raw(s, event, "tlp_header",
record, &len, 1);
snprintf((buf + strlen(ev.msg)), BUF_LEN - strlen(ev.msg),
" TLP Header: %08x %08x %08x %08x",
#define __RAS_AER_HANDLER_H
#include "ras-events.h"
-#include "libtrace/event-parse.h"
+#include <traceevent/event-parse.h>
int ras_aer_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context);
+ struct tep_record *record,
+ struct tep_event *event, void *context);
#endif
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "libtrace/kbuffer.h"
+#include <traceevent/kbuffer.h>
#include "ras-arm-handler.h"
#include "ras-record.h"
#include "ras-logger.h"
}
static int ras_handle_cpu_error(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event,
+ struct tep_record *record,
+ struct tep_event *event,
struct ras_arm_event *ev, time_t now)
{
unsigned long long val;
char *severity;
struct error_info err_info;
- if (pevent_get_field_val(s, event, "cpu", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "cpu", record, &val, 1) < 0)
return -1;
cpu = val;
trace_seq_printf(s, "\n cpu: %d", cpu);
/* record cpu error */
- if (pevent_get_field_val(s, event, "sev", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "sev", record, &val, 1) < 0)
return -1;
/* refer to UEFI_2_9 specification chapter N2.2 Table N-5 */
switch (val) {
#endif
int ras_arm_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context)
+ struct tep_record *record,
+ struct tep_event *event, void *context)
{
unsigned long long val;
struct ras_events *ras = context;
"%Y-%m-%d %H:%M:%S %z", tm);
trace_seq_printf(s, "%s\n", ev.timestamp);
- if (pevent_get_field_val(s, event, "affinity", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "affinity", record, &val, 1) < 0)
return -1;
ev.affinity = val;
trace_seq_printf(s, " affinity: %d", ev.affinity);
- if (pevent_get_field_val(s, event, "mpidr", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "mpidr", record, &val, 1) < 0)
return -1;
ev.mpidr = val;
trace_seq_printf(s, "\n MPIDR: 0x%llx", (unsigned long long)ev.mpidr);
- if (pevent_get_field_val(s, event, "midr", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "midr", record, &val, 1) < 0)
return -1;
ev.midr = val;
trace_seq_printf(s, "\n MIDR: 0x%llx", (unsigned long long)ev.midr);
- if (pevent_get_field_val(s, event, "running_state", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "running_state", record, &val, 1) < 0)
return -1;
ev.running_state = val;
trace_seq_printf(s, "\n running_state: %d", ev.running_state);
- if (pevent_get_field_val(s, event, "psci_state", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "psci_state", record, &val, 1) < 0)
return -1;
ev.psci_state = val;
trace_seq_printf(s, "\n psci_state: %d", ev.psci_state);
- if (pevent_get_field_val(s, event, "pei_len", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "pei_len", record, &val, 1) < 0)
return -1;
ev.pei_len = val;
trace_seq_printf(s, "\n ARM Processor Err Info data len: %d\n",
ev.pei_len);
- ev.pei_error = pevent_get_field_raw(s, event, "buf", record, &len, 1);
+ ev.pei_error = tep_get_field_raw(s, event, "buf", record, &len, 1);
if (!ev.pei_error)
return -1;
display_raw_data(s, ev.pei_error, ev.pei_len);
- if (pevent_get_field_val(s, event, "ctx_len", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "ctx_len", record, &val, 1) < 0)
return -1;
ev.ctx_len = val;
trace_seq_printf(s, "\n ARM Processor Err Context Info data len: %d\n",
ev.ctx_len);
- ev.ctx_error = pevent_get_field_raw(s, event, "buf1", record, &len, 1);
+ ev.ctx_error = tep_get_field_raw(s, event, "buf1", record, &len, 1);
if (!ev.ctx_error)
return -1;
display_raw_data(s, ev.ctx_error, ev.ctx_len);
- if (pevent_get_field_val(s, event, "oem_len", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "oem_len", record, &val, 1) < 0)
return -1;
ev.oem_len = val;
trace_seq_printf(s, "\n Vendor Specific Err Info data len: %d\n",
ev.oem_len);
- ev.vsei_error = pevent_get_field_raw(s, event, "buf2", record, &len, 1);
+ ev.vsei_error = tep_get_field_raw(s, event, "buf2", record, &len, 1);
if (!ev.vsei_error)
return -1;
#define __RAS_ARM_HANDLER_H
#include "ras-events.h"
-#include "libtrace/event-parse.h"
+#include <traceevent/event-parse.h>
/*
* ARM Processor Error Information Structure, According to
#pragma pack()
int ras_arm_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context);
+ struct tep_record *record,
+ struct tep_event *event, void *context);
void display_raw_data(struct trace_seq *s,
const uint8_t *buf,
uint32_t datalen);
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "libtrace/kbuffer.h"
+#include <traceevent/kbuffer.h>
#include "ras-devlink-handler.h"
#include "ras-record.h"
#include "ras-logger.h"
#include "ras-report.h"
int ras_net_xmit_timeout_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context)
+ struct tep_record *record,
+ struct tep_event *event, void *context)
{
unsigned long long val;
int len;
ev.bus_name = "";
ev.reporter_name = "";
- ev.dev_name = pevent_get_field_raw(s, event, "name",
+ ev.dev_name = tep_get_field_raw(s, event, "name",
record, &len, 1);
if (!ev.dev_name)
return -1;
- ev.driver_name = pevent_get_field_raw(s, event, "driver",
+ ev.driver_name = tep_get_field_raw(s, event, "driver",
record, &len, 1);
if (!ev.driver_name)
return -1;
- if (pevent_get_field_val(s, event, "queue_index", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "queue_index", record, &val, 1) < 0)
return -1;
if (asprintf(&ev.msg, "TX timeout on queue: %d\n", (int)val) < 0)
return -1;
}
int ras_devlink_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context)
+ struct tep_record *record,
+ struct tep_event *event, void *context)
{
int len;
struct ras_events *ras = context;
struct devlink_event ev;
if (ras->filters[DEVLINK_EVENT] &&
- pevent_filter_match(ras->filters[DEVLINK_EVENT], record) == FILTER_MATCH)
+ tep_filter_match(ras->filters[DEVLINK_EVENT], record) == FILTER_MATCH)
return 0;
/*
* Newer kernels (3.10-rc1 or upper) provide an uptime clock.
"%Y-%m-%d %H:%M:%S %z", tm);
trace_seq_printf(s, "%s ", ev.timestamp);
- ev.bus_name = pevent_get_field_raw(s, event, "bus_name",
+ ev.bus_name = tep_get_field_raw(s, event, "bus_name",
record, &len, 1);
if (!ev.bus_name)
return -1;
- ev.dev_name = pevent_get_field_raw(s, event, "dev_name",
+ ev.dev_name = tep_get_field_raw(s, event, "dev_name",
record, &len, 1);
if (!ev.dev_name)
return -1;
- ev.driver_name = pevent_get_field_raw(s, event, "driver_name",
+ ev.driver_name = tep_get_field_raw(s, event, "driver_name",
record, &len, 1);
if (!ev.driver_name)
return -1;
- ev.reporter_name = pevent_get_field_raw(s, event, "reporter_name",
+ ev.reporter_name = tep_get_field_raw(s, event, "reporter_name",
record, &len, 1);
if (!ev.reporter_name)
return -1;
- ev.msg = pevent_get_field_raw(s, event, "msg", record, &len, 1);
+ ev.msg = tep_get_field_raw(s, event, "msg", record, &len, 1);
if (!ev.msg)
return -1;
#define __RAS_DEVLINK_HANDLER_H
#include "ras-events.h"
-#include "libtrace/event-parse.h"
+#include <traceevent/event-parse.h>
int ras_net_xmit_timeout_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context);
+ struct tep_record *record,
+ struct tep_event *event, void *context);
int ras_devlink_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context);
+ struct tep_record *record,
+ struct tep_event *event, void *context);
#endif
#include <string.h>
#include <errno.h>
#include <sys/sysmacros.h>
-#include "libtrace/kbuffer.h"
+#include <traceevent/kbuffer.h>
#include "ras-diskerror-handler.h"
#include "ras-record.h"
#include "ras-logger.h"
}
int ras_diskerror_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context)
+ struct tep_record *record,
+ struct tep_event *event, void *context)
{
unsigned long long val;
int len;
"%Y-%m-%d %H:%M:%S %z", tm);
trace_seq_printf(s, "%s ", ev.timestamp);
- if (pevent_get_field_val(s, event, "dev", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "dev", record, &val, 1) < 0)
return -1;
dev = (dev_t)val;
if (asprintf(&ev.dev, "%u:%u", major(dev), minor(dev)) < 0)
return -1;
- if (pevent_get_field_val(s, event, "sector", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "sector", record, &val, 1) < 0)
return -1;
ev.sector = val;
- if (pevent_get_field_val(s, event, "nr_sector", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "nr_sector", record, &val, 1) < 0)
return -1;
ev.nr_sector = (unsigned int)val;
- if (pevent_get_field_val(s, event, "error", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "error", record, &val, 1) < 0)
return -1;
ev.error = get_blk_error((int)val);
- ev.rwbs = pevent_get_field_raw(s, event, "rwbs", record, &len, 1);
+ ev.rwbs = tep_get_field_raw(s, event, "rwbs", record, &len, 1);
if (!ev.rwbs)
return -1;
- ev.cmd = pevent_get_field_raw(s, event, "cmd", record, &len, 1);
+ ev.cmd = tep_get_field_raw(s, event, "cmd", record, &len, 1);
if (!ev.cmd)
return -1;
#define __RAS_DISKERROR_HANDLER_H
#include "ras-events.h"
-#include "libtrace/event-parse.h"
+#include <traceevent/event-parse.h>
int ras_diskerror_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context);
+ struct tep_record *record,
+ struct tep_event *event, void *context);
#endif
#include <signal.h>
#include <sys/signalfd.h>
#include <linux/version.h>
-#include "libtrace/kbuffer.h"
-#include "libtrace/event-parse.h"
+#include <traceevent/kbuffer.h>
+#include <traceevent/event-parse.h>
#include "ras-mc-handler.h"
#include "ras-aer-handler.h"
#include "ras-non-standard-handler.h"
* Tracing read code
*/
-static int get_pagesize(struct ras_events *ras, struct pevent *pevent)
+static int get_pagesize(struct ras_events *ras, struct tep_handle *pevent)
{
int fd, len, page_size = 4096;
char buf[page_size];
len = read(fd, buf, page_size);
if (len <= 0)
goto error;
- if (pevent_parse_header_page(pevent, buf, len, sizeof(long)))
+ if (tep_parse_header_page(pevent, buf, len, sizeof(long)))
goto error;
- page_size = pevent->header_page_data_offset + pevent->header_page_data_size;
-
error:
close(fd);
return page_size;
static void parse_ras_data(struct pthread_data *pdata, struct kbuffer *kbuf,
void *data, unsigned long long time_stamp)
{
- struct pevent_record record;
+ struct tep_record record;
struct trace_seq s;
record.ts = time_stamp;
/* TODO - logging */
trace_seq_init(&s);
- pevent_print_event(pdata->ras->pevent, &s, &record);
+ tep_print_event(pdata->ras->pevent, &s, &record,
+ "%16s-%-5d [%03d] %s %6.1000d %s %s",
+ TEP_PRINT_COMM, TEP_PRINT_PID, TEP_PRINT_CPU,
+ TEP_PRINT_LATENCY, TEP_PRINT_TIME, TEP_PRINT_NAME,
+ TEP_PRINT_INFO);
trace_seq_do_printf(&s);
printf("\n");
fflush(stdout);
return 0;
}
-static int add_event_handler(struct ras_events *ras, struct pevent *pevent,
+static int add_event_handler(struct ras_events *ras, struct tep_handle *pevent,
unsigned page_size, char *group, char *event,
- pevent_event_handler_func func, char *filter_str, int id)
+ tep_event_handler_func func, char *filter_str, int id)
{
int fd, size, rc;
char *page, fname[MAX_PATH + 1];
- struct event_filter * filter = NULL;
+ struct tep_event_filter * filter = NULL;
snprintf(fname, sizeof(fname), "events/%s/%s/format", group, event);
}
/* Registers the special event handlers */
- rc = pevent_register_event_handler(pevent, -1, group, event, func, ras);
- if (rc == PEVENT_ERRNO__MEM_ALLOC_FAILED) {
+ rc = tep_register_event_handler(pevent, -1, group, event, func, ras);
+ if (rc == TEP_ERRNO__MEM_ALLOC_FAILED) {
log(TERM, LOG_ERR, "Can't register event handler for %s:%s\n",
group, event);
free(page);
return EINVAL;
}
- rc = pevent_parse_event(pevent, page, size, group);
+ rc = tep_parse_event(pevent, page, size, group);
if (rc) {
log(TERM, LOG_ERR, "Can't parse event %s:%s\n", group, event);
free(page);
}
if (filter_str) {
- char *error;
+ char error[255];
- filter = pevent_filter_alloc(pevent);
+ filter = tep_filter_alloc(pevent);
if (!filter) {
log(TERM, LOG_ERR,
"Failed to allocate filter for %s/%s.\n", group, event);
free(page);
return EINVAL;
}
- rc = pevent_filter_add_filter_str(filter, filter_str, &error);
- if (rc) {
+ rc = tep_filter_add_filter_str(filter, filter_str);
+ if (rc < 0) {
+ tep_filter_strerror(filter, rc, error, sizeof(error));
log(TERM, LOG_ERR,
"Failed to install filter for %s/%s: %s\n", group, event, error);
- pevent_filter_free(filter);
+ tep_filter_free(filter);
free(page);
return rc;
}
int rc, page_size, i;
int num_events = 0;
unsigned cpus;
- struct pevent *pevent = NULL;
+ struct tep_handle *pevent = NULL;
struct pthread_data *data = NULL;
struct ras_events *ras = NULL;
#ifdef HAVE_DEVLINK
goto err;
}
- pevent = pevent_alloc();
+ pevent = tep_alloc();
if (!pevent) {
log(TERM, LOG_ERR, "Can't allocate pevent\n");
rc = errno;
free(data);
if (pevent)
- pevent_free(pevent);
+ tep_free(pevent);
if (ras) {
for (i = 0; i < NR_EVENTS; i++) {
if (ras->filters[i])
- pevent_filter_free(ras->filters[i]);
+ tep_filter_free(ras->filters[i]);
}
free(ras);
}
struct ras_events {
char debugfs[MAX_PATH + 1];
char tracing[MAX_PATH + 1];
- struct pevent *pevent;
+ struct tep_handle *pevent;
int page_size;
/* Booleans */
/* For ABRT socket*/
int socketfd;
- struct event_filter *filters[NR_EVENTS];
+ struct tep_event_filter *filters[NR_EVENTS];
};
struct pthread_data {
pthread_t thread;
- struct pevent *pevent;
+ struct tep_handle *pevent;
struct ras_events *ras;
int cpu;
};
#include <string.h>
#include <unistd.h>
#include <stdint.h>
-#include "libtrace/kbuffer.h"
+#include <traceevent/kbuffer.h>
#include "ras-extlog-handler.h"
#include "ras-record.h"
#include "ras-logger.h"
static void report_extlog_mem_event(struct ras_events *ras,
- struct pevent_record *record,
+ struct tep_record *record,
struct trace_seq *s,
struct ras_extlog_event *ev)
{
}
int ras_extlog_mem_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context)
+ struct tep_record *record,
+ struct tep_event *event, void *context)
{
int len;
unsigned long long val;
"%Y-%m-%d %H:%M:%S %z", tm);
trace_seq_printf(s, "%s ", ev.timestamp);
- if (pevent_get_field_val(s, event, "etype", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "etype", record, &val, 1) < 0)
return -1;
ev.etype = val;
- if (pevent_get_field_val(s, event, "err_seq", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "err_seq", record, &val, 1) < 0)
return -1;
ev.error_seq = val;
- if (pevent_get_field_val(s, event, "sev", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "sev", record, &val, 1) < 0)
return -1;
ev.severity = val;
- if (pevent_get_field_val(s, event, "pa", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "pa", record, &val, 1) < 0)
return -1;
ev.address = val;
- if (pevent_get_field_val(s, event, "pa_mask_lsb", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "pa_mask_lsb", record, &val, 1) < 0)
return -1;
ev.pa_mask_lsb = val;
- ev.cper_data = pevent_get_field_raw(s, event, "data",
+ ev.cper_data = tep_get_field_raw(s, event, "data",
record, &len, 1);
ev.cper_data_length = len;
- ev.fru_text = pevent_get_field_raw(s, event, "fru_text",
+ ev.fru_text = tep_get_field_raw(s, event, "fru_text",
record, &len, 1);
- ev.fru_id = pevent_get_field_raw(s, event, "fru_id",
+ ev.fru_id = tep_get_field_raw(s, event, "fru_id",
record, &len, 1);
report_extlog_mem_event(ras, record, s, &ev);
#include <stdint.h>
#include "ras-events.h"
-#include "libtrace/event-parse.h"
+#include <traceevent/event-parse.h>
extern int ras_extlog_mem_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context);
+ struct tep_record *record,
+ struct tep_event *event, void *context);
#endif
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "libtrace/kbuffer.h"
+#include <traceevent/kbuffer.h>
#include "ras-mc-handler.h"
#include "ras-record.h"
#include "ras-logger.h"
#include "ras-report.h"
int ras_mc_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context)
+ struct tep_record *record,
+ struct tep_event *event, void *context)
{
int len;
unsigned long long val;
"%Y-%m-%d %H:%M:%S %z", tm);
trace_seq_printf(s, "%s ", ev.timestamp);
- if (pevent_get_field_val(s, event, "error_count", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "error_count", record, &val, 1) < 0)
goto parse_error;
parsed_fields++;
ev.error_count = val;
trace_seq_printf(s, "%d ", ev.error_count);
- if (pevent_get_field_val(s, event, "error_type", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "error_type", record, &val, 1) < 0)
goto parse_error;
parsed_fields++;
else
trace_seq_puts(s, " error:");
- ev.msg = pevent_get_field_raw(s, event, "msg", record, &len, 1);
+ ev.msg = tep_get_field_raw(s, event, "msg", record, &len, 1);
if (!ev.msg)
goto parse_error;
parsed_fields++;
trace_seq_puts(s, ev.msg);
}
- ev.label = pevent_get_field_raw(s, event, "label", record, &len, 1);
+ ev.label = tep_get_field_raw(s, event, "label", record, &len, 1);
if (!ev.label)
goto parse_error;
parsed_fields++;
}
trace_seq_puts(s, " (");
- if (pevent_get_field_val(s, event, "mc_index", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "mc_index", record, &val, 1) < 0)
goto parse_error;
parsed_fields++;
ev.mc_index = val;
trace_seq_printf(s, "mc: %d", ev.mc_index);
- if (pevent_get_field_val(s, event, "top_layer", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "top_layer", record, &val, 1) < 0)
goto parse_error;
parsed_fields++;
ev.top_layer = (signed char) val;
- if (pevent_get_field_val(s, event, "middle_layer", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "middle_layer", record, &val, 1) < 0)
goto parse_error;
parsed_fields++;
ev.middle_layer = (signed char) val;
- if (pevent_get_field_val(s, event, "lower_layer", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "lower_layer", record, &val, 1) < 0)
goto parse_error;
parsed_fields++;
ev.lower_layer = (signed char) val;
trace_seq_printf(s, " location: %d", ev.top_layer);
}
- if (pevent_get_field_val(s, event, "address", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "address", record, &val, 1) < 0)
goto parse_error;
parsed_fields++;
if (ev.address)
trace_seq_printf(s, " address: 0x%08llx", ev.address);
- if (pevent_get_field_val(s, event, "grain_bits", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "grain_bits", record, &val, 1) < 0)
goto parse_error;
parsed_fields++;
trace_seq_printf(s, " grain: %lld", ev.grain);
- if (pevent_get_field_val(s, event, "syndrome", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "syndrome", record, &val, 1) < 0)
goto parse_error;
parsed_fields++;
if (val)
trace_seq_printf(s, " syndrome: 0x%08llx", ev.syndrome);
- ev.driver_detail = pevent_get_field_raw(s, event, "driver_detail", record,
+ ev.driver_detail = tep_get_field_raw(s, event, "driver_detail", record,
&len, 1);
if (!ev.driver_detail)
goto parse_error;
#define __RAS_MC_HANDLER_H
#include "ras-events.h"
-#include "libtrace/event-parse.h"
+#include <traceevent/event-parse.h>
int ras_mc_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context);
+ struct tep_record *record,
+ struct tep_event *event, void *context);
#endif
#include <string.h>
#include <unistd.h>
#include <stdint.h>
-#include "libtrace/kbuffer.h"
+#include <traceevent/kbuffer.h>
#include "ras-mce-handler.h"
#include "ras-record.h"
#include "ras-logger.h"
*/
static void report_mce_event(struct ras_events *ras,
- struct pevent_record *record,
+ struct tep_record *record,
struct trace_seq *s, struct mce_event *e)
{
time_t now;
}
int ras_mce_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context)
+ struct tep_record *record,
+ struct tep_event *event, void *context)
{
unsigned long long val;
struct ras_events *ras = context;
memset(&e, 0, sizeof(e));
/* Parse the MCE error data */
- if (pevent_get_field_val(s, event, "mcgcap", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "mcgcap", record, &val, 1) < 0)
return -1;
e.mcgcap = val;
- if (pevent_get_field_val(s, event, "mcgstatus", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "mcgstatus", record, &val, 1) < 0)
return -1;
e.mcgstatus = val;
- if (pevent_get_field_val(s, event, "status", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "status", record, &val, 1) < 0)
return -1;
e.status = val;
- if (pevent_get_field_val(s, event, "addr", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "addr", record, &val, 1) < 0)
return -1;
e.addr = val;
- if (pevent_get_field_val(s, event, "misc", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "misc", record, &val, 1) < 0)
return -1;
e.misc = val;
- if (pevent_get_field_val(s, event, "ip", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "ip", record, &val, 1) < 0)
return -1;
e.ip = val;
- if (pevent_get_field_val(s, event, "tsc", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "tsc", record, &val, 1) < 0)
return -1;
e.tsc = val;
- if (pevent_get_field_val(s, event, "walltime", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "walltime", record, &val, 1) < 0)
return -1;
e.walltime = val;
- if (pevent_get_field_val(s, event, "cpu", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "cpu", record, &val, 1) < 0)
return -1;
e.cpu = val;
- if (pevent_get_field_val(s, event, "cpuid", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "cpuid", record, &val, 1) < 0)
return -1;
e.cpuid = val;
- if (pevent_get_field_val(s, event, "apicid", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "apicid", record, &val, 1) < 0)
return -1;
e.apicid = val;
- if (pevent_get_field_val(s, event, "socketid", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "socketid", record, &val, 1) < 0)
return -1;
e.socketid = val;
- if (pevent_get_field_val(s, event, "cs", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "cs", record, &val, 1) < 0)
return -1;
e.cs = val;
- if (pevent_get_field_val(s, event, "bank", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "bank", record, &val, 1) < 0)
return -1;
e.bank = val;
- if (pevent_get_field_val(s, event, "cpuvendor", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "cpuvendor", record, &val, 1) < 0)
return -1;
e.cpuvendor = val;
/* Get New entries */
- if (pevent_get_field_val(s, event, "synd", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "synd", record, &val, 1) < 0)
return -1;
e.synd = val;
- if (pevent_get_field_val(s, event, "ipid", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "ipid", record, &val, 1) < 0)
return -1;
e.ipid = val;
#include <stdint.h>
#include "ras-events.h"
-#include "libtrace/event-parse.h"
+#include <traceevent/event-parse.h>
enum cputype {
CPU_GENERIC,
/* register and handling routines */
int register_mce_handler(struct ras_events *ras, unsigned ncpus);
int ras_mce_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context);
+ struct tep_record *record,
+ struct tep_event *event, void *context);
/* enables intel iMC logs */
int set_intel_imc_log(enum cputype cputype, unsigned ncpus);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "libtrace/kbuffer.h"
+#include <traceevent/kbuffer.h>
#include "ras-memory-failure-handler.h"
#include "ras-record.h"
#include "ras-logger.h"
int ras_memory_failure_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context)
+ struct tep_record *record,
+ struct tep_event *event, void *context)
{
unsigned long long val;
struct ras_events *ras = context;
strncpy(ev.timestamp, "1970-01-01 00:00:00 +0000", sizeof(ev.timestamp));
trace_seq_printf(s, "%s ", ev.timestamp);
- if (pevent_get_field_val(s, event, "pfn", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "pfn", record, &val, 1) < 0)
return -1;
sprintf(ev.pfn, "0x%llx", val);
trace_seq_printf(s, "pfn=0x%llx ", val);
- if (pevent_get_field_val(s, event, "type", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "type", record, &val, 1) < 0)
return -1;
ev.page_type = get_page_type(val);
trace_seq_printf(s, "page_type=%s ", ev.page_type);
- if (pevent_get_field_val(s, event, "result", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "result", record, &val, 1) < 0)
return -1;
ev.action_result = get_action_result(val);
trace_seq_printf(s, "action_result=%s ", ev.action_result);
#define __RAS_MEMORY_FAILURE_HANDLER_H
#include "ras-events.h"
-#include "libtrace/event-parse.h"
+#include <traceevent/event-parse.h>
int ras_memory_failure_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context);
+ struct tep_record *record,
+ struct tep_event *event, void *context);
#endif
#include <stdbool.h>
#include <string.h>
#include <unistd.h>
-#include "libtrace/kbuffer.h"
+#include <traceevent/kbuffer.h>
#include "ras-non-standard-handler.h"
#include "ras-record.h"
#include "ras-logger.h"
}
int ras_non_standard_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context)
+ struct tep_record *record,
+ struct tep_event *event, void *context)
{
int len, i, line_count;
unsigned long long val;
"%Y-%m-%d %H:%M:%S %z", tm);
trace_seq_printf(s, "%s ", ev.timestamp);
- if (pevent_get_field_val(s, event, "sev", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "sev", record, &val, 1) < 0)
return -1;
switch (val) {
case GHES_SEV_NO:
}
trace_seq_printf(s, "\n %s", ev.severity);
- ev.sec_type = pevent_get_field_raw(s, event, "sec_type",
+ ev.sec_type = tep_get_field_raw(s, event, "sec_type",
record, &len, 1);
if(!ev.sec_type)
return -1;
else
trace_seq_printf(s, "\n section type: %s",
uuid_le(ev.sec_type));
- ev.fru_text = pevent_get_field_raw(s, event, "fru_text",
+ ev.fru_text = tep_get_field_raw(s, event, "fru_text",
record, &len, 1);
- ev.fru_id = pevent_get_field_raw(s, event, "fru_id",
+ ev.fru_id = tep_get_field_raw(s, event, "fru_id",
record, &len, 1);
trace_seq_printf(s, " fru text: %s fru id: %s ",
ev.fru_text,
uuid_le(ev.fru_id));
- if (pevent_get_field_val(s, event, "len", record, &val, 1) < 0)
+ if (tep_get_field_val(s, event, "len", record, &val, 1) < 0)
return -1;
ev.length = val;
trace_seq_printf(s, "\n length: %d\n", ev.length);
- ev.error = pevent_get_field_raw(s, event, "buf", record, &len, 1);
+ ev.error = tep_get_field_raw(s, event, "buf", record, &len, 1);
if(!ev.error)
return -1;
#define __RAS_NON_STANDARD_HANDLER_H
#include "ras-events.h"
-#include "libtrace/event-parse.h"
+#include <traceevent/event-parse.h>
#define BIT(nr) (1UL << (nr))
#define BIT_ULL(nr) (1ULL << (nr))
};
int ras_non_standard_event_handler(struct trace_seq *s,
- struct pevent_record *record,
- struct event_format *event, void *context);
+ struct tep_record *record,
+ struct tep_event *event, void *context);
void print_le_hex(struct trace_seq *s, const uint8_t *buf, int index);