cvs add spinlock.h
fix race in schedule()
This commit is contained in:
		
							parent
							
								
									4e8f237be8
								
							
						
					
					
						commit
						664324745e
					
				
					 4 changed files with 17 additions and 3 deletions
				
			
		
							
								
								
									
										7
									
								
								Notes
									
										
									
									
									
								
							
							
						
						
									
										7
									
								
								Notes
									
										
									
									
									
								
							|  | @ -126,3 +126,10 @@ in general, the table locks protect both free-ness and | |||
| why can't i get a lock in console code? | ||||
|   always triple fault | ||||
| lock code shouldn't call cprintf... | ||||
| ide_init doesn't work now? | ||||
| and IOAPIC: read from unsupported address | ||||
|   when running pre-empt user test | ||||
|   so maybe something wrong with clock interrupts | ||||
|   no! if one cpu holds lock w/ curproc0=, | ||||
|     then another cpu can take it, it looks like | ||||
|     a recursive acquire() | ||||
|  |  | |||
							
								
								
									
										3
									
								
								proc.c
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								proc.c
									
										
									
									
									
								
							|  | @ -148,7 +148,6 @@ scheduler(void) | |||
| 
 | ||||
|     if(i < NPROC){ | ||||
|       np->state = RUNNING; | ||||
|       release(&proc_table_lock); | ||||
|       break; | ||||
|     } | ||||
|      | ||||
|  | @ -159,6 +158,8 @@ scheduler(void) | |||
|   cpus[cpu()].lastproc = np; | ||||
|   curproc[cpu()] = np; | ||||
|    | ||||
|   release(&proc_table_lock); | ||||
| 
 | ||||
|   // h/w sets busy bit in TSS descriptor sometimes, and faults
 | ||||
|   // if it's set in LTR. so clear tss descriptor busy bit.
 | ||||
|   np->gdt[SEG_TSS].sd_type = STS_T32A; | ||||
|  |  | |||
							
								
								
									
										6
									
								
								spinlock.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								spinlock.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| struct spinlock { | ||||
|   unsigned int locked; | ||||
|   struct proc *p; | ||||
|   int count; | ||||
|   unsigned locker_pc; | ||||
| }; | ||||
|  | @ -93,8 +93,8 @@ preempt() | |||
| main() | ||||
| { | ||||
|   puts("usertests starting\n"); | ||||
|   pipe1(); | ||||
|   //preempt();
 | ||||
|   //pipe1();
 | ||||
|   preempt(); | ||||
| 
 | ||||
|   while(1) | ||||
|     ; | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue