/* * edac_exit() * module exit/termination function */ static void __exit edac_exit(void) { edac_dbg(0, "\n"); /* tear down the various subsystems */ edac_workqueue_teardown(); edac_mc_sysfs_exit(); edac_debugfs_exit(); }
/* * edac_init * module initialization entry point */ static int __init edac_init(void) { int err = 0; edac_printk(KERN_INFO, EDAC_MC, EDAC_VERSION "\n"); /* * Harvest and clear any boot/initialization PCI parity errors * * FIXME: This only clears errors logged by devices present at time of * module initialization. We should also do an initial clear * of each newly hotplugged device. */ edac_pci_clear_parity_errors(); err = edac_mc_sysfs_init(); if (err) goto err_sysfs; edac_debugfs_init(); err = edac_workqueue_setup(); if (err) { edac_printk(KERN_ERR, EDAC_MC, "Failure initializing workqueue\n"); goto err_wq; } return 0; err_wq: edac_debugfs_exit(); edac_mc_sysfs_exit(); err_sysfs: return err; }