sef: Add fault injection (and EDFI) support.

This commit is contained in:
Cristiano Giuffrida
2014-06-12 17:08:31 +02:00
committed by Lionel Sambuc
parent 9f6977d22d
commit d9cd49c332
7 changed files with 75 additions and 3 deletions

View File

@@ -40,6 +40,7 @@ SRCS+= \
sched_start.c \
sched_stop.c \
sef.c \
sef_fi.c \
sef_init.c \
sef_liveupdate.c \
sef_ping.c \

View File

@@ -27,9 +27,6 @@ char* sef_debug_header(void);
#endif
/* SEF Init prototypes. */
#ifdef USE_COVERAGE
EXTERN int do_sef_gcov_request(message *m_ptr);
#endif
EXTERN int do_sef_rs_init(endpoint_t old_endpoint);
EXTERN int do_sef_init_request(message *m_ptr);
@@ -43,6 +40,14 @@ EXTERN int do_sef_lu_request(message *m_ptr);
/* SEF Signal prototypes. */
EXTERN int do_sef_signal_request(message *m_ptr);
/* SEF GCOV prototypes. */
#ifdef USE_COVERAGE
EXTERN int do_sef_gcov_request(message *m_ptr);
#endif
/* SEF Fault Injection prototypes. */
EXTERN int do_sef_fi_request(message *m_ptr);
/*===========================================================================*
* sef_startup *
*===========================================================================*/
@@ -181,6 +186,15 @@ int sef_receive_status(endpoint_t src, message *m_ptr, int *status_ptr)
}
#endif
#ifdef INTERCEPT_SEF_FI_REQUESTS
/* Intercept Fault injection requests. */
if(IS_SEF_FI_REQUEST(m_ptr, status)) {
if(do_sef_fi_request(m_ptr) == OK) {
continue;
}
}
#endif
/* If we get this far, this is not a valid SEF request, return and
* let the caller deal with that.
*/

21
lib/libsys/sef_fi.c Normal file
View File

@@ -0,0 +1,21 @@
#include "syslib.h"
#include <assert.h>
#include <minix/sysutil.h>
EXTERN __attribute__((weak)) int edfi_ctl_process_request(void *ctl_request);
/*===========================================================================*
* do_sef_fi_request *
*===========================================================================*/
int do_sef_fi_request(message *m_ptr)
{
#if SEF_FI_ALLOW_EDFI
/* Forward the request to the EDFI fault injector, if linked in. */
if(edfi_ctl_process_request)
return edfi_ctl_process_request(m_ptr);
#endif
return ENOSYS;
}