Fix implementation of clone and exec. Now the init process can load and execute the pci driver
This commit is contained in:
		
							parent
							
								
									b01a918556
								
							
						
					
					
						commit
						33e098c124
					
				
					 9 changed files with 233 additions and 78 deletions
				
			
		|  | @ -100,6 +100,8 @@ extern crate bitflags; | |||
| extern crate goblin; | ||||
| extern crate spin; | ||||
| 
 | ||||
| use core::sync::atomic::{AtomicUsize, ATOMIC_USIZE_INIT, Ordering}; | ||||
| 
 | ||||
| /// Context management
 | ||||
| pub mod context; | ||||
| 
 | ||||
|  | @ -117,6 +119,14 @@ pub mod syscall; | |||
| #[cfg(test)] | ||||
| pub mod tests; | ||||
| 
 | ||||
| #[thread_local] | ||||
| static CPU_ID: AtomicUsize = ATOMIC_USIZE_INIT; | ||||
| 
 | ||||
| #[inline(always)] | ||||
| pub fn cpu_id() -> usize { | ||||
|     CPU_ID.load(Ordering::Relaxed) | ||||
| } | ||||
| 
 | ||||
| pub extern fn userspace_init() { | ||||
|     assert_eq!(syscall::open(b"debug:", 0), Ok(0)); | ||||
|     assert_eq!(syscall::open(b"debug:", 0), Ok(1)); | ||||
|  | @ -129,6 +139,8 @@ pub extern fn userspace_init() { | |||
| 
 | ||||
| #[no_mangle] | ||||
| pub extern fn kmain() { | ||||
|     CPU_ID.store(0, Ordering::SeqCst); | ||||
| 
 | ||||
|     context::init(); | ||||
| 
 | ||||
|     let pid = syscall::getpid(); | ||||
|  | @ -144,15 +156,17 @@ pub extern fn kmain() { | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     unsafe { context::switch(); } | ||||
| 
 | ||||
|     loop { | ||||
|         unsafe { interrupt::enable_and_halt(); } | ||||
| 
 | ||||
|         unsafe { context::switch(); } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[no_mangle] | ||||
| pub extern fn kmain_ap(id: usize) { | ||||
|     CPU_ID.store(id, Ordering::SeqCst); | ||||
| 
 | ||||
|     context::init(); | ||||
| 
 | ||||
|     let pid = syscall::getpid(); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jeremy Soller
						Jeremy Soller