svn commit: r216616 - in head/sys: kern sys
Matthew D Fleming
mdf at FreeBSD.org
Tue Dec 21 16:29:58 UTC 2010
Author: mdf
Date: Tue Dec 21 16:29:58 2010
New Revision: 216616
URL: http://svn.freebsd.org/changeset/base/216616
Log:
Move the fail_point_entry definition from fail.h to kern_fail.c, which
allows putting the enumeration constants of fail point types with the
text string that matches them.
MFC after: 1 week
Modified:
head/sys/kern/kern_fail.c
head/sys/sys/fail.h
Modified: head/sys/kern/kern_fail.c
==============================================================================
--- head/sys/kern/kern_fail.c Tue Dec 21 13:45:29 2010 (r216615)
+++ head/sys/kern/kern_fail.c Tue Dec 21 16:29:58 2010 (r216616)
@@ -76,6 +76,43 @@ MTX_SYSINIT(g_fp_mtx, &g_fp_mtx, "fail p
#define FP_LOCK() mtx_lock(&g_fp_mtx)
#define FP_UNLOCK() mtx_unlock(&g_fp_mtx)
+/**
+ * Failpoint types.
+ * Don't change these without changing fail_type_strings in fail.c.
+ * @ingroup failpoint_private
+ */
+enum fail_point_t {
+ FAIL_POINT_OFF, /**< don't fail */
+ FAIL_POINT_PANIC, /**< panic */
+ FAIL_POINT_RETURN, /**< return an errorcode */
+ FAIL_POINT_BREAK, /**< break into the debugger */
+ FAIL_POINT_PRINT, /**< print a message */
+ FAIL_POINT_SLEEP, /**< sleep for some msecs */
+ FAIL_POINT_INVALID, /**< placeholder */
+};
+
+static const char *fail_type_strings[] = {
+ "off",
+ "panic",
+ "return",
+ "break",
+ "print",
+ "sleep",
+};
+
+/**
+ * Internal structure tracking a single term of a complete failpoint.
+ * @ingroup failpoint_private
+ */
+struct fail_point_entry {
+ enum fail_point_t fe_type; /**< type of entry */
+ int fe_arg; /**< argument to type (e.g. return value) */
+ int fe_prob; /**< likelihood of firing in millionths */
+ int fe_count; /**< number of times to fire, 0 means always */
+
+ TAILQ_ENTRY(fail_point_entry) fe_entries; /**< next entry in fail point */
+};
+
static inline void
fail_point_sleep(struct fail_point *fp, struct fail_point_entry *ent,
int msecs, enum fail_point_return_code *pret)
@@ -102,15 +139,6 @@ enum {
PROB_DIGITS = 6, /* number of zero's in above number */
};
-static const char *fail_type_strings[] = {
- "off",
- "panic",
- "return",
- "break",
- "print",
- "sleep",
-};
-
static char *parse_fail_point(struct fail_point_entries *, char *);
static char *parse_term(struct fail_point_entries *, char *);
static char *parse_number(int *out_units, int *out_decimal, char *);
Modified: head/sys/sys/fail.h
==============================================================================
--- head/sys/sys/fail.h Tue Dec 21 13:45:29 2010 (r216615)
+++ head/sys/sys/fail.h Tue Dec 21 16:29:58 2010 (r216616)
@@ -39,22 +39,6 @@
#include <sys/queue.h>
#include <sys/sysctl.h>
-
-/**
- * Failpoint types.
- * Don't change these without changing fail_type_strings in fail.c.
- * @ingroup failpoint_private
- */
-enum fail_point_t {
- FAIL_POINT_OFF, /**< don't fail */
- FAIL_POINT_PANIC, /**< panic */
- FAIL_POINT_RETURN, /**< return an errorcode */
- FAIL_POINT_BREAK, /**< break into the debugger */
- FAIL_POINT_PRINT, /**< print a message */
- FAIL_POINT_SLEEP, /**< sleep for some msecs */
- FAIL_POINT_INVALID, /**< placeholder */
-};
-
/**
* Failpoint return codes, used internally.
* @ingroup failpoint_private
@@ -65,6 +49,7 @@ enum fail_point_return_code {
FAIL_POINT_RC_QUEUED, /**< sleep_fn will be called */
};
+struct fail_point_entry;
TAILQ_HEAD(fail_point_entries, fail_point_entry);
/**
* Internal failpoint structure, tracking all the current details of the
@@ -84,18 +69,7 @@ struct fail_point {
#define FAIL_POINT_DYNAMIC_NAME 0x01 /**< Must free name on destroy */
-/**
- * Internal structure tracking a single term of a complete failpoint.
- * @ingroup failpoint_private
- */
-struct fail_point_entry {
- enum fail_point_t fe_type; /**< type of entry */
- int fe_arg; /**< argument to type (e.g. return value) */
- int fe_prob; /**< likelihood of firing in millionths */
- int fe_count; /**< number of times to fire, 0 means always */
-
- TAILQ_ENTRY(fail_point_entry) fe_entries; /**< next entry in fail point */
-};
+__BEGIN_DECLS
/* Private failpoint eval function -- use fail_point_eval() instead. */
enum fail_point_return_code fail_point_eval_nontrivial(struct fail_point *,
@@ -152,6 +126,8 @@ fail_point_eval(struct fail_point *fp, i
return (fail_point_eval_nontrivial(fp, ret));
}
+__END_DECLS
+
/* Declare a fail_point and its sysctl in a function. */
#define _FAIL_POINT_NAME(name) _fail_point_##name
#define _STRINGIFY_HELPER(x) #x
@@ -233,7 +209,7 @@ fail_point_eval(struct fail_point *fp, i
NULL, NULL, \
}; \
SYSCTL_OID(parent, OID_AUTO, name, \
- CTLTYPE_STRING | CTLFLAG_RW, \
+ CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_MPSAFE, \
&_FAIL_POINT_NAME(name), 0, fail_point_sysctl, \
"A", ""); \
\
@@ -254,7 +230,7 @@ int fail_point_sysctl(SYSCTL_HANDLER_ARG
/* The fail point sysctl tree. */
SYSCTL_DECL(_debug_fail_point);
+#define DEBUG_FP _debug_fail_point
#endif
-#define DEBUG_FP _debug_fail_point
#endif /* _SYS_FAIL_H_ */
More information about the svn-src-all
mailing list