Self check added to sy1.
This commit is contained in:
		
							
								
								
									
										45
									
								
								kern/include/kern/overwrite.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								kern/include/kern/overwrite.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009 | ||||||
|  |  *	The President and Fellows of Harvard College. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions | ||||||
|  |  * are met: | ||||||
|  |  * 1. Redistributions of source code must retain the above copyright | ||||||
|  |  *    notice, this list of conditions and the following disclaimer. | ||||||
|  |  * 2. Redistributions in binary form must reproduce the above copyright | ||||||
|  |  *    notice, this list of conditions and the following disclaimer in the | ||||||
|  |  *    documentation and/or other materials provided with the distribution. | ||||||
|  |  * 3. Neither the name of the University nor the names of its contributors | ||||||
|  |  *    may be used to endorse or promote products derived from this software | ||||||
|  |  *    without specific prior written permission. | ||||||
|  |  * | ||||||
|  |  * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND | ||||||
|  |  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||||
|  |  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||||
|  |  * ARE DISCLAIMED.  IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE | ||||||
|  |  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||||
|  |  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||||
|  |  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||||
|  |  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||||
|  |  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||||
|  |  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||||
|  |  * SUCH DAMAGE. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * WARNING: All the contents of this file are overwritten during automated | ||||||
|  |  * testing. Please consider this before changing anything in this file. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifndef _OVERWRITE_H_ | ||||||
|  | #define _OVERWRITE_H_ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * You can set a custom prompt here, but the default will be used during | ||||||
|  |  * testing. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #define KERNEL_SECRET 9722720911  | ||||||
|  |  | ||||||
|  | #endif /* _OVERWRITE_H_ */ | ||||||
| @@ -37,6 +37,10 @@ | |||||||
| #include <thread.h> | #include <thread.h> | ||||||
| #include <synch.h> | #include <synch.h> | ||||||
| #include <test.h> | #include <test.h> | ||||||
|  | #include <kern/overwrite.h> | ||||||
|  |  | ||||||
|  | #define SUCCESS 0 | ||||||
|  | #define FAIL 1 | ||||||
|  |  | ||||||
| #define NSEMLOOPS     63 | #define NSEMLOOPS     63 | ||||||
| #define NLOCKLOOPS    120 | #define NLOCKLOOPS    120 | ||||||
| @@ -51,6 +55,9 @@ static struct lock *testlock; | |||||||
| static struct cv *testcv; | static struct cv *testcv; | ||||||
| static struct semaphore *donesem; | static struct semaphore *donesem; | ||||||
|  |  | ||||||
|  | static bool semtest_status; | ||||||
|  | static unsigned long semtest_current; | ||||||
|  |  | ||||||
| static | static | ||||||
| void | void | ||||||
| inititems(void) | inititems(void) | ||||||
| @@ -91,10 +98,16 @@ semtestthread(void *junk, unsigned long num) | |||||||
| 	/* | 	/* | ||||||
| 	 * Only one of these should print at a time. | 	 * Only one of these should print at a time. | ||||||
| 	 */ | 	 */ | ||||||
|  | 	random_yielder(4); | ||||||
| 	P(testsem); | 	P(testsem); | ||||||
|  | 	semtest_current = num; | ||||||
| 	kprintf("Thread %2lu: ", num); | 	kprintf("Thread %2lu: ", num); | ||||||
| 	for (i=0; i<NSEMLOOPS; i++) { | 	for (i=0; i<NSEMLOOPS; i++) { | ||||||
| 		kprintf("%c", (int)num+64); | 		kprintf("%c", (int)num+64); | ||||||
|  | 		random_yielder(4); | ||||||
|  | 		if (semtest_current != num) { | ||||||
|  | 			semtest_status = FAIL; | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	kprintf("\n"); | 	kprintf("\n"); | ||||||
| 	V(donesem); | 	V(donesem); | ||||||
| @@ -109,6 +122,7 @@ semtest(int nargs, char **args) | |||||||
| 	(void)args; | 	(void)args; | ||||||
|  |  | ||||||
| 	inititems(); | 	inititems(); | ||||||
|  | 	semtest_status = SUCCESS; | ||||||
| 	kprintf("Starting semaphore test...\n"); | 	kprintf("Starting semaphore test...\n"); | ||||||
| 	kprintf("If this hangs, it's broken: "); | 	kprintf("If this hangs, it's broken: "); | ||||||
| 	P(testsem); | 	P(testsem); | ||||||
| @@ -132,6 +146,12 @@ semtest(int nargs, char **args) | |||||||
| 	V(testsem); | 	V(testsem); | ||||||
| 	V(testsem); | 	V(testsem); | ||||||
|  |  | ||||||
|  | 	if (semtest_status == SUCCESS) { | ||||||
|  | 		kprintf("SUCCESS: %llu\n", KERNEL_SECRET); | ||||||
|  | 	} else { | ||||||
|  | 		kprintf("FAIL: %llu\n", KERNEL_SECRET); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	kprintf("Semaphore test done.\n"); | 	kprintf("Semaphore test done.\n"); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user