+++ /dev/null
-Modifies bitmap_scan() to return a random set of bits instead of the
-first set. Helps to stress-test VM implementation.
-
-Index: pintos/src/lib/kernel/bitmap.c
-===================================================================
-RCS file: /afs/ir.stanford.edu/users/b/l/blp/private/cvs/pintos/src/lib/kernel/bitmap.c,v
-retrieving revision 1.11
-diff -u -p -r1.11 bitmap.c
---- pintos/src/lib/kernel/bitmap.c 2 Jan 2005 02:09:58 -0000 1.11
-+++ pintos/src/lib/kernel/bitmap.c 9 Feb 2005 21:45:27 -0000
-@@ -3,6 +3,7 @@
- #include <limits.h>
- #include <round.h>
- #include <stdio.h>
-+#include <random.h>
- #include "threads/malloc.h"
- #ifdef FILESYS
- #include "filesys/file.h"
-@@ -30,6 +31,8 @@ struct bitmap
- elem_type *bits; /* Elements that represent bits. */
- };
-
-+bool randomize_bitmaps;
-+
- /* Returns the index of the element that contains the bit
- numbered BIT_IDX. */
- static inline size_t
-@@ -227,9 +230,28 @@ bitmap_scan (const struct bitmap *b, siz
- {
- size_t last = b->bit_cnt - cnt;
- size_t i;
-+ size_t n = 0;
-+
-+ /* Count number of matches. */
- for (i = start; i <= last; i++)
-- if (!contains (b, i, cnt, !value))
-- return i;
-+ if (!contains (b, i, cnt, !value))
-+ {
-+ if (randomize_bitmaps)
-+ n++;
-+ else
-+ return i;
-+ }
-+
-+ /* Pick one match. */
-+ if (n != 0)
-+ {
-+ random_init (0);
-+ n = random_ulong () % n;
-+ for (i = start; i <= last; i++)
-+ if (!contains (b, i, cnt, !value) && n-- == 0)
-+ return i;
-+ NOT_REACHED ();
-+ }
- }
- return BITMAP_ERROR;
- }
-Index: pintos/src/lib/kernel/bitmap.h
-===================================================================
-RCS file: /afs/ir.stanford.edu/users/b/l/blp/private/cvs/pintos/src/lib/kernel/bitmap.h,v
-retrieving revision 1.5
-diff -u -p -r1.5 bitmap.h
---- pintos/src/lib/kernel/bitmap.h 15 Dec 2004 06:08:55 -0000 1.5
-+++ pintos/src/lib/kernel/bitmap.h 9 Feb 2005 21:45:27 -0000
-@@ -44,4 +44,6 @@ size_t bitmap_needed_bytes (size_t bit_c
- struct bitmap *bitmap_create_preallocated (size_t bit_cnt,
- void *, size_t byte_cnt);
-
-+extern bool randomize_bitmaps;
-+
- #endif /* lib/kernel/bitmap.h */
-Index: pintos/src/threads/init.c
-===================================================================
-RCS file: /afs/ir.stanford.edu/users/b/l/blp/private/cvs/pintos/src/threads/init.c,v
-retrieving revision 1.53
-diff -u -p -r1.53 init.c
---- pintos/src/threads/init.c 7 Feb 2005 05:56:07 -0000 1.53
-+++ pintos/src/threads/init.c 9 Feb 2005 21:45:28 -0000
-@@ -8,6 +8,7 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#include <bitmap.h>
- #include "devices/kbd.h"
- #include "devices/serial.h"
- #include "devices/timer.h"
-@@ -193,6 +194,8 @@ paging_init (void)
- new page tables immediately. See [IA32-v2a] "MOV--Move
- to/from Control Registers" and [IA32-v3] 3.7.5. */
- asm volatile ("mov %%cr3, %0" :: "r" (vtop (base_page_dir)));
-+
-+ randomize_bitmaps = true;
- }
-
- /* Parses the command line. */