#include <sys/poll.h>
#include <signal.h>
#include <sys/signalfd.h>
+#include <linux/version.h>
#include "libtrace/kbuffer.h"
#include "libtrace/event-parse.h"
#include "ras-mc-handler.h"
#endif
#ifdef HAVE_DISKERROR
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,18,0)
+ rc |= __toggle_ras_mc_event(ras, "block", "block_rq_error", enable);
+#else
rc |= __toggle_ras_mc_event(ras, "block", "block_rq_complete", enable);
#endif
+#endif
#ifdef HAVE_MEMORY_FAILURE
rc |= __toggle_ras_mc_event(ras, "ras", "memory_failure_event", enable);
return rc;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
/*
* Set kernel filter. libtrace doesn't provide an API for setting filters
* in kernel, we have to implement it here.
return 0;
}
+#endif
/*
* Tracing read code
#endif
#ifdef HAVE_DISKERROR
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,18,0)
+ rc = add_event_handler(ras, pevent, page_size, "block",
+ "block_rq_error", ras_diskerror_event_handler,
+ NULL, DISKERROR_EVENT);
+ if (!rc)
+ num_events++;
+ else
+ log(ALL, LOG_ERR, "Can't get traces from %s:%s\n",
+ "block", "block_rq_error");
+#else
rc = filter_ras_mc_event(ras, "block", "block_rq_complete", "error != 0");
if (!rc) {
rc = add_event_handler(ras, pevent, page_size, "block",
"block", "block_rq_complete");
}
#endif
+#endif
#ifdef HAVE_MEMORY_FAILURE
rc = add_event_handler(ras, pevent, page_size, "ras", "memory_failure_event",