Blame SOURCES/0006-Add-support-to-record-AER-events.patch

d9e469
From 11004aaa98865dd7c0ee28b4af8d6ba6b6f11507 Mon Sep 17 00:00:00 2001
d9e469
From: Mauro Carvalho Chehab <mchehab@redhat.com>
d9e469
Date: Fri, 31 May 2013 13:54:11 -0300
d9e469
Subject: [PATCH 06/32] Add support to record AER events
d9e469
d9e469
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
d9e469
---
d9e469
 ras-aer-handler.c |    4 ++-
d9e469
 ras-record.c      |   60 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
d9e469
 ras-record.h      |    6 +++++
d9e469
 3 files changed, 68 insertions(+), 2 deletions(-)
d9e469
d9e469
diff --git a/ras-aer-handler.c b/ras-aer-handler.c
d9e469
index ec63e2a..e5abaca 100644
d9e469
--- a/ras-aer-handler.c
d9e469
+++ b/ras-aer-handler.c
d9e469
@@ -111,7 +111,9 @@ int ras_aer_event_handler(struct trace_seq *s,
d9e469
 	trace_seq_puts(s, ev.error_type);
d9e469
 
d9e469
 	/* Insert data into the SGBD */
d9e469
-//	ras_store_aer_event(ras, &ev;;
d9e469
+#ifdef HAVE_SQLITE3
d9e469
+	ras_store_aer_event(ras, &ev;;
d9e469
+#endif
d9e469
 
d9e469
 	return 0;
d9e469
 }
d9e469
diff --git a/ras-record.c b/ras-record.c
d9e469
index 36b3373..cb302ce 100644
d9e469
--- a/ras-record.c
d9e469
+++ b/ras-record.c
d9e469
@@ -26,6 +26,7 @@
d9e469
 #include <unistd.h>
d9e469
 #include "ras-events.h"
d9e469
 #include "ras-mc-handler.h"
d9e469
+#include "ras-aer-handler.h"
d9e469
 #include "ras-logger.h"
d9e469
 
d9e469
 /* #define DEBUG_SQL 1 */
d9e469
@@ -109,6 +110,56 @@ int ras_store_mc_event(struct ras_events *ras, struct ras_mc_event *ev)
d9e469
 	return rc;
d9e469
 }
d9e469
 
d9e469
+/*
d9e469
+ * Table and functions to handle ras:aer
d9e469
+ */
d9e469
+
d9e469
+#ifdef HAVE_AER
d9e469
+static const struct db_fields aer_event_fields[] = {
d9e469
+		{ .name="id",			.type="INTEGER PRIMARY KEY" },
d9e469
+		{ .name="timestamp",		.type="TEXT" },
d9e469
+		{ .name="err_type",		.type="TEXT" },
d9e469
+		{ .name="err_msg",		.type="TEXT" },
d9e469
+};
d9e469
+
d9e469
+static const struct db_table_descriptor aer_event_tab = {
d9e469
+	.name = "aer_event",
d9e469
+	.fields = aer_event_fields,
d9e469
+	.num_fields = ARRAY_SIZE(aer_event_fields),
d9e469
+};
d9e469
+
d9e469
+int ras_store_aer_event(struct ras_events *ras, struct ras_aer_event *ev)
d9e469
+{
d9e469
+	int rc;
d9e469
+	struct sqlite3_priv *priv = ras->db_priv;
d9e469
+
d9e469
+	if (!priv || !priv->stmt_aer_event)
d9e469
+		return 0;
d9e469
+	log(TERM, LOG_INFO, "mc_event store: %p\n", priv->stmt_aer_event);
d9e469
+
d9e469
+	sqlite3_bind_text(priv->stmt_aer_event,  1, ev->timestamp, -1, NULL);
d9e469
+	sqlite3_bind_text(priv->stmt_aer_event,  3, ev->error_type, -1, NULL);
d9e469
+	sqlite3_bind_text(priv->stmt_aer_event,  4, ev->msg, -1, NULL);
d9e469
+
d9e469
+	rc = sqlite3_step(priv->stmt_aer_event);
d9e469
+	if (rc != SQLITE_OK && rc != SQLITE_DONE)
d9e469
+		log(TERM, LOG_ERR,
d9e469
+		    "Failed to do aer_event step on sqlite: error = %d\n", rc);
d9e469
+	rc = sqlite3_reset(priv->stmt_aer_event);
d9e469
+	if (rc != SQLITE_OK && rc != SQLITE_DONE)
d9e469
+		log(TERM, LOG_ERR,
d9e469
+		    "Failed reset aer_event on sqlite: error = %d\n",
d9e469
+		    rc);
d9e469
+	log(TERM, LOG_INFO, "register inserted at db\n");
d9e469
+
d9e469
+	return rc;
d9e469
+}
d9e469
+#endif
d9e469
+
d9e469
+/*
d9e469
+ * Generic code
d9e469
+ */
d9e469
+
d9e469
 static int ras_mc_prepare_stmt(struct sqlite3_priv *priv,
d9e469
 			       sqlite3_stmt **stmt,
d9e469
 			       const struct db_table_descriptor *db_tab)
d9e469
@@ -230,8 +281,15 @@ int ras_mc_event_opendb(unsigned cpu, struct ras_events *ras)
d9e469
 
d9e469
 	rc = ras_mc_create_table(priv, &mc_event_tab);
d9e469
 	if (rc == SQLITE_OK)
d9e469
-		rc = ras_mc_prepare_stmt(priv, &priv->stmt_mc_event, &mc_event_tab);
d9e469
+		rc = ras_mc_prepare_stmt(priv, &priv->stmt_mc_event,
d9e469
+					 &mc_event_tab);
d9e469
 
d9e469
+#ifdef HAVE_AER
d9e469
+	rc = ras_mc_create_table(priv, &aer_event_tab);
d9e469
+	if (rc == SQLITE_OK)
d9e469
+		rc = ras_mc_prepare_stmt(priv, &priv->stmt_aer_event,
d9e469
+					 &aer_event_tab);
d9e469
+#endif
d9e469
 
d9e469
 	ras->db_priv = priv;
d9e469
 	return 0;
d9e469
diff --git a/ras-record.h b/ras-record.h
d9e469
index 9791185..5008906 100644
d9e469
--- a/ras-record.h
d9e469
+++ b/ras-record.h
d9e469
@@ -47,14 +47,20 @@ struct ras_aer_event {
d9e469
 struct sqlite3_priv {
d9e469
 	sqlite3		*db;
d9e469
 	sqlite3_stmt	*stmt_mc_event;
d9e469
+#ifdef HAVE_AER
d9e469
+	sqlite3_stmt	*stmt_aer_event;
d9e469
+#endif
d9e469
 };
d9e469
 
d9e469
 int ras_mc_event_opendb(unsigned cpu, struct ras_events *ras);
d9e469
 int ras_store_mc_event(struct ras_events *ras, struct ras_mc_event *ev);
d9e469
+int ras_store_aer_event(struct ras_events *ras, struct ras_aer_event *ev);
d9e469
 
d9e469
 #else
d9e469
 static inline int ras_mc_event_opendb(unsigned cpu, struct ras_events *ras) { return 0; };
d9e469
 static inline int ras_store_mc_event(struct ras_events *ras, struct ras_mc_event *ev) { return 0; };
d9e469
+static inline int ras_store_aer_event(struct ras_events *ras, struct ras_aer_event *ev) { return 0; };
d9e469
+
d9e469
 #endif
d9e469
 
d9e469
 #endif
d9e469
-- 
d9e469
1.7.1
d9e469