1 Modifies bitmap_scan() to return a random set of bits instead of the
2 first set. Helps to stress-test VM implementation.
4 Index: pintos/src/lib/kernel/bitmap.c
5 ===================================================================
6 RCS file: /afs/ir.stanford.edu/users/b/l/blp/private/cvs/pintos/src/lib/kernel/bitmap.c,v
7 retrieving revision 1.11
8 diff -u -p -r1.11 bitmap.c
9 --- pintos/src/lib/kernel/bitmap.c 2 Jan 2005 02:09:58 -0000 1.11
10 +++ pintos/src/lib/kernel/bitmap.c 9 Feb 2005 21:45:27 -0000
16 #include "threads/malloc.h"
18 #include "filesys/file.h"
19 @@ -30,6 +31,8 @@ struct bitmap
20 elem_type *bits; /* Elements that represent bits. */
23 +bool randomize_bitmaps;
25 /* Returns the index of the element that contains the bit
28 @@ -227,9 +230,28 @@ bitmap_scan (const struct bitmap *b, siz
30 size_t last = b->bit_cnt - cnt;
34 + /* Count number of matches. */
35 for (i = start; i <= last; i++)
36 - if (!contains (b, i, cnt, !value))
38 + if (!contains (b, i, cnt, !value))
40 + if (randomize_bitmaps)
46 + /* Pick one match. */
50 + n = random_ulong () % n;
51 + for (i = start; i <= last; i++)
52 + if (!contains (b, i, cnt, !value) && n-- == 0)
59 Index: pintos/src/lib/kernel/bitmap.h
60 ===================================================================
61 RCS file: /afs/ir.stanford.edu/users/b/l/blp/private/cvs/pintos/src/lib/kernel/bitmap.h,v
62 retrieving revision 1.5
63 diff -u -p -r1.5 bitmap.h
64 --- pintos/src/lib/kernel/bitmap.h 15 Dec 2004 06:08:55 -0000 1.5
65 +++ pintos/src/lib/kernel/bitmap.h 9 Feb 2005 21:45:27 -0000
66 @@ -44,4 +44,6 @@ size_t bitmap_needed_bytes (size_t bit_c
67 struct bitmap *bitmap_create_preallocated (size_t bit_cnt,
68 void *, size_t byte_cnt);
70 +extern bool randomize_bitmaps;
72 #endif /* lib/kernel/bitmap.h */
73 Index: pintos/src/threads/init.c
74 ===================================================================
75 RCS file: /afs/ir.stanford.edu/users/b/l/blp/private/cvs/pintos/src/threads/init.c,v
76 retrieving revision 1.53
77 diff -u -p -r1.53 init.c
78 --- pintos/src/threads/init.c 7 Feb 2005 05:56:07 -0000 1.53
79 +++ pintos/src/threads/init.c 9 Feb 2005 21:45:28 -0000
85 #include "devices/kbd.h"
86 #include "devices/serial.h"
87 #include "devices/timer.h"
88 @@ -193,6 +194,8 @@ paging_init (void)
89 new page tables immediately. See [IA32-v2a] "MOV--Move
90 to/from Control Registers" and [IA32-v3] 3.7.5. */
91 asm volatile ("mov %%cr3, %0" :: "r" (vtop (base_page_dir)));
93 + randomize_bitmaps = true;
96 /* Parses the command line. */