minix/kernel/debug.h
Ben Gras a1636b85b7 kernel: new DEBUG_RACE option. try to provoke race conditions between processes.
it does this by 
  - making all processes interruptible by running out of quantum
  - giving all processes a single tick of quantum
  - picking a random runnable process instead of in order, and
    from a single pool of runnable processes (no priorities)

This together with very high HZ values currently provokes some race conditions
seen earlier only when running with SMP.
2010-05-08 18:00:03 +00:00

74 lines
1.9 KiB
C

#ifndef DEBUG_H
#define DEBUG_H
/* This header file defines all debugging constants and macros, and declares
* some variables. Certain debugging features redefine standard constants
* and macros. Therefore, this header file should be included after the
* other kernel headers.
*/
#include <ansi.h>
#include <minix/debug.h>
#include "config.h"
/* Enable prints such as
* . send/receive failed due to deadlock or dead source or dead destination
* . trap not allowed
* . bogus message pointer
* . kernel call number not allowed by this process
*
* Of course the call still fails, but nothing is printed if these warnings
* are disabled.
*/
#define DEBUG_ENABLE_IPC_WARNINGS 1
#define DEBUG_STACKTRACE 1
#define DEBUG_TIME_LOCKS 1
/* Sanity checks. */
#define DEBUG_SANITYCHECKS 0
/* Verbose messages. */
#define DEBUG_TRACE 0
/* DEBUG_RACE makes every process preemptible, schedules
* every process on the same priority queue, and randomizes
* the next process to run, in order to help catch race
* conditions that could otherwise be masked.
*/
#define DEBUG_RACE 0
#if DEBUG_TRACE
#define VF_SCHEDULING (1L << 1)
#define VF_PICKPROC (1L << 2)
#define TRACE(code, statement) if(verboseflags & code) { printf("%s:%d: ", __FILE__, __LINE__); statement }
#else
#define TRACE(code, statement)
#endif
#define NOT_REACHABLE do { \
panic("NOT_REACHABLE at %s:%d", __FILE__, __LINE__); \
for(;;); \
} while(0)
#define NOT_IMPLEMENTED do { \
panic("NOT_IMPLEMENTED at %s:%d", __FILE__, __LINE__); \
} while(0)
#ifdef CONFIG_BOOT_VERBOSE
#define BOOT_VERBOSE(x) x
#else
#define BOOT_VERBOSE(x)
#endif
#ifdef _SYSTEM
#define DEBUG_PRINT(params, level) do { \
if (verboseboot >= (level)) printf params; } while (0)
#define DEBUGBASIC(params) DEBUG_PRINT(params, VERBOSEBOOT_BASIC)
#define DEBUGMAX(params) DEBUG_PRINT(params, VERBOSEBOOT_MAX)
#endif
#endif /* DEBUG_H */