/* Provides edac interface to mcelog events * * This file may be distributed under the terms of the * GNU General Public License version 2. * * Copyright (c) 2009 by: * Mauro Carvalho Chehab * * Red Hat Inc. http://www.redhat.com */ #include #include #include int edac_mce_enabled; EXPORT_SYMBOL_GPL(edac_mce_enabled); /* * Extension interface */ static LIST_HEAD(edac_mce_list); static DEFINE_MUTEX(edac_mce_lock); int edac_mce_register(struct edac_mce *edac_mce) { mutex_lock(&edac_mce_lock); list_add_tail(&edac_mce->list, &edac_mce_list); mutex_unlock(&edac_mce_lock); return 0; } EXPORT_SYMBOL(edac_mce_register); void edac_mce_unregister(struct edac_mce *edac_mce) { mutex_lock(&edac_mce_lock); list_del(&edac_mce->list); mutex_unlock(&edac_mce_lock); } EXPORT_SYMBOL(edac_mce_unregister); int edac_mce_parse(struct mce *mce) { struct edac_mce *edac_mce; list_for_each_entry(edac_mce, &edac_mce_list, list) { if (edac_mce->check_error(edac_mce->priv, mce)) return 1; } /* Nobody queued the error */ return 0; } EXPORT_SYMBOL_GPL(edac_mce_parse); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Mauro Carvalho Chehab "); MODULE_AUTHOR("Red Hat Inc. (http://www.redhat.com)"); MODULE_DESCRIPTION("EDAC Driver for mcelog captured errors");