/** * handle the fault.* event * * @result: * list.* event */ fmd_event_t * apache_handle_event(fmd_t *pfmd, fmd_event_t *e) { fmd_debug; system("service httpd stop"); system("service httpd start"); return fmd_create_listevent(e, LIST_RECOVER_SUCCESS); }
/** * handle the fault.* event * * @result: * list.* event */ fmd_event_t * sysagent_handle_event(fmd_t *pfmd, fmd_event_t *e) { fmd_debug; int ret = 0; /* offline */ if (strstr(e->ev_class, "fault.cpu.intel.quickpath.mem_page_ce") != NULL) { if ((ret = pages_offline(pfmd, e->ev_rscid)) == 0) return fmd_create_listevent(e, LIST_ISOLATED_SUCCESS); else return fmd_create_listevent(e, LIST_ISOLATED_FAILED); } else { // warning(); return fmd_create_listevent(e, LIST_LOG); } /* never reach */ return fmd_create_listevent(e, LIST_LOG); }
/** * handle the fault.* event * * @result: * list.* event */ fmd_event_t * cpumem_handle_event(fmd_t *pfmd, fmd_event_t *e) { fmd_debug; int ret = 0; /* Memory offline */ if (strstr(e->ev_class, "fault.cpu.intel.mem_dev") != NULL ){ ret = pages_offline(pfmd, e->ev_rscid); if ( ret == 0 ) return fmd_create_listevent(e, LIST_ISOLATED_SUCCESS); else return fmd_create_listevent(e, LIST_ISOLATED_FAILED); } /* CPU offline */ else if (strstr(e->ev_class, "fault.cpu.intel") != NULL) { char buf[64]; int cpu = -1; cpu = topo_cpu_by_cpuid(pfmd, e->ev_rscid); /* get CPUID */ if (cpu < 0) return fmd_create_listevent(e, LIST_ISOLATED_FAILED); memset(buf, 0, 64 * sizeof(char)); sprintf(buf, "/sys/devices/system/cpu/cpu%d/online", cpu); if ((ret = cpu_offline(buf)) == 0) return fmd_create_listevent(e, LIST_ISOLATED_SUCCESS); else return fmd_create_listevent(e, LIST_ISOLATED_FAILED); } return fmd_create_listevent(e, LIST_LOG); // TODO }
fmd_event_t * cpumem_handle_event(fmd_t *pfmd, fmd_event_t *e) { int action = 0; int ret = 0; uint64_t ev_flag; ev_flag = e->ev_flag; wr_log(CMEA_LOG_DOMAIN, WR_LOG_DEBUG, "handle event, class: %s flag: 0X%08x, handle_mode: 0X%08x", e->ev_class, ev_flag, e->handle_mode); __log_event(e); switch (ev_flag) { case AGENT_TODO: wr_log(CMEA_LOG_DOMAIN, WR_LOG_DEBUG, "cpumem agent handle fault event."); if (e->handle_mode & EVENT_HANDLE_MODE_AUTO) ret = __handle_fault_event(e); /* add other handle mode, eg. user-define. */ if(e->handle_mode == EVENT_HANDLE_MODE_MANUAL) ret = LIST_REPAIRED_MANUAL; e->event_type = EVENT_LIST; __log_event(e); action = 1; break; } if (!action) { wr_log(CMEA_LOG_DOMAIN, WR_LOG_DEBUG, "cpumem agent log event."); return NULL; } wr_log(CMEA_LOG_DOMAIN, WR_LOG_DEBUG, "handle event result: %08x", ret); return (fmd_event_t *)fmd_create_listevent(e, ret); }