xref: /minix/minix/servers/vm/sanitycheck.h (revision 7f5f010b)
1 #ifndef _SANITYCHECK_H
2 #define _SANITYCHECK_H 1
3 
4 #include <assert.h>
5 
6 #include "vm.h"
7 
8 #if SANITYCHECKS
9 
10 #define PT_SANE(p) { pt_sanitycheck((p), __FILE__, __LINE__); }
11 
12 /* This macro is used in the sanity check functions, where file and
13  * line are function arguments.
14  */
15 #define MYASSERT(c) do { if(!(c)) { \
16         printf("VM:%s:%d: %s failed (last sanity check %s:%d)\n", file, line, #c, sc_lastfile, sc_lastline); \
17 	panic("sanity check failed"); } } while(0)
18 
19 #define SLABSANITYCHECK(l) if(_minix_kerninfo) { \
20 	slab_sanitycheck(__FILE__, __LINE__); }
21 
22 #define SANITYCHECK(l) if(!nocheck && _minix_kerninfo && 0) {  \
23 		struct vmproc *vmpr;	\
24 		assert(incheck == 0);	\
25 		incheck = 1;		\
26 		usedpages_reset();	\
27 	slab_sanitycheck(__FILE__, __LINE__);	\
28 	for(vmpr = vmproc; vmpr < &vmproc[VMP_NR]; vmpr++) { \
29 		if((vmpr->vm_flags & (VMF_INUSE))) { \
30 			PT_SANE(&vmpr->vm_pt); \
31 		} \
32 	} \
33 	map_sanitycheck(__FILE__, __LINE__); \
34 	mem_sanitycheck(__FILE__, __LINE__); \
35 	assert(incheck == 1);	\
36 	incheck = 0;		\
37 	/* printf("(%s:%d OK) ", __FILE__, __LINE__); */ \
38 	sc_lastfile = __FILE__; sc_lastline = __LINE__; \
39 	}
40 
41 #define SLABSANE(ptr) { \
42 	if(!slabsane_f(__FILE__, __LINE__, ptr, sizeof(*(ptr)))) { \
43 		printf("VM:%s:%d: SLABSANE(%s)\n", __FILE__, __LINE__, #ptr); \
44 		panic("SLABSANE failed");	\
45 	} \
46 }
47 
48 #else
49 #define SANITYCHECK(l)
50 #define SLABSANITYCHECK(l)
51 #define SLABSANE(ptr)
52 #define MYASSERT(c)
53 #define PT_SANE(p)
54 #endif
55 
56 #if MEMPROTECT
57 #define USE(obj, code) do {		\
58 	slabunlock(obj, sizeof(*obj));	\
59 	do {				\
60 		code			\
61 	} while(0);			\
62 	slablock(obj, sizeof(*obj));	\
63 } while(0)
64 #else
65 #define USE(obj, code) do { code } while(0)
66 #endif
67 
68 #endif
69