Smp (#23)
* Fire up multiple processors * Use IPIs to wake up secondary processors * Much better exception information * Modifications to show more information on fault * WIP: Use real libstd * Add TLS (not complete) * Add random function, export getpid, cleanup * Do not spin APs until new context * Update rust * Update rust * Use rd/wrfsbase * Implement TLS * Implement compiler builtins and update rust * Update rust * Back to Redox libstd * Update rust
This commit is contained in:
		
							parent
							
								
									25dc44b348
								
							
						
					
					
						commit
						149b0297a4
					
				
					 54 changed files with 1121 additions and 380 deletions
				
			
		|  | @ -152,6 +152,19 @@ pub extern fn userspace_init() { | |||
|     panic!("initfs:init returned") | ||||
| } | ||||
| 
 | ||||
| /// Allow exception handlers to send signal to arch-independant kernel
 | ||||
| #[no_mangle] | ||||
| pub extern fn ksignal(signal: usize) { | ||||
|     println!("SIGNAL {}, CPU {}, PID {}", signal, cpu_id(), context::context_id()); | ||||
|     { | ||||
|         let contexts = context::contexts(); | ||||
|         if let Some(context_lock) = contexts.current() { | ||||
|             let context = context_lock.read(); | ||||
|             println!("NAME {}", unsafe { ::core::str::from_utf8_unchecked(&context.name.lock()) }); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[no_mangle] | ||||
| pub extern fn kmain(cpus: usize) { | ||||
|     CPU_ID.store(0, Ordering::SeqCst); | ||||
|  | @ -195,6 +208,14 @@ pub extern fn kmain_ap(id: usize) { | |||
|     println!("AP {}: {:?}", id, pid); | ||||
| 
 | ||||
|     loop { | ||||
|         unsafe { interrupt::enable_and_halt() } | ||||
|         unsafe { | ||||
|             interrupt::disable(); | ||||
|             if context::switch() { | ||||
|                 interrupt::enable_and_nop(); | ||||
|             } else { | ||||
|                 // Enable interrupts, then halt CPU (to save power) until the next interrupt is actually fired.
 | ||||
|                 interrupt::enable_and_halt(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jeremy Soller
						Jeremy Soller