From 486bfea62ce5a0246451e902da5e0ab463f5dae9 Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jackpot51@gmail.com>
Date: Sat, 10 Sep 2016 19:03:31 -0600
Subject: [PATCH] Remove debugging messages, launch elf on APs

---
 context/mod.rs  |  1 -
 elf.rs          |  5 -----
 lib.rs          | 18 ++++++++++--------
 scheme/debug.rs |  1 -
 syscall/fs.rs   | 23 ++++++++++++-----------
 5 files changed, 22 insertions(+), 26 deletions(-)

diff --git a/context/mod.rs b/context/mod.rs
index a706b2fc..e550b549 100644
--- a/context/mod.rs
+++ b/context/mod.rs
@@ -80,7 +80,6 @@ impl ContextList {
             }
             context.arch.set_stack(stack.as_ptr() as usize + offset);
             context.kstack = Some(stack);
-            println!("{}: {:X}", context.id, func as usize);
         }
         Ok(context_lock)
     }
diff --git a/elf.rs b/elf.rs
index 88e7236e..b379bba6 100644
--- a/elf.rs
+++ b/elf.rs
@@ -56,11 +56,6 @@ impl<'a> Elf<'a> {
         let mut active_table = unsafe { ActivePageTable::new() };
 
         for segment in self.segments() {
-            println!("Segment {:X} flags {:X} off {:X} virt {:X} phys {:X} file {} mem {} align {}",
-                        segment.p_type, segment.p_flags, segment.p_offset,
-                        segment.p_vaddr, segment.p_paddr, segment.p_filesz,
-                        segment.p_memsz, segment.p_align);
-
             if segment.p_type == program_header::PT_LOAD {
                 let start_page = Page::containing_address(VirtualAddress::new(segment.p_vaddr as usize));
                 let end_page = Page::containing_address(VirtualAddress::new((segment.p_vaddr + segment.p_memsz) as usize));
diff --git a/lib.rs b/lib.rs
index 26083023..08c99441 100644
--- a/lib.rs
+++ b/lib.rs
@@ -133,14 +133,9 @@ pub extern fn kmain() {
     let pid = syscall::getpid();
     println!("BSP: {:?}", pid);
 
-    let stdin = syscall::open("debug:".as_bytes(), 0);
-    println!("STDIN: {:?}", stdin);
-
-    let stdout = syscall::open("debug:".as_bytes(), 0);
-    println!("STDOUT: {:?}", stdout);
-
-    let stderr = syscall::open("debug:".as_bytes(), 0);
-    println!("STDERR: {:?}", stderr);
+    assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(0));
+    assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(1));
+    assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(2));
 
     let elf = elf::Elf::from(include_bytes!("../build/userspace/init")).expect("could not load elf");
     elf.run();
@@ -168,6 +163,13 @@ pub extern fn kmain_ap(id: usize) {
     let pid = syscall::getpid();
     println!("AP {}: {:?}", id, pid);
 
+    assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(0));
+    assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(1));
+    assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(2));
+
+    let elf = elf::Elf::from(include_bytes!("../build/userspace/init")).expect("could not load elf");
+    elf.run();
+
     loop {
         unsafe { interrupt::enable_and_halt() }
     }
diff --git a/scheme/debug.rs b/scheme/debug.rs
index 0555b091..35979b35 100644
--- a/scheme/debug.rs
+++ b/scheme/debug.rs
@@ -7,7 +7,6 @@ pub struct DebugScheme;
 
 impl Scheme for DebugScheme {
     fn open(&mut self, path: &[u8], _flags: usize) -> Result<usize> {
-        println!("DebugScheme::open: {}", unsafe { str::from_utf8_unchecked(path) });
         Ok(0)
     }
 
diff --git a/syscall/fs.rs b/syscall/fs.rs
index c61478e0..fed9bc72 100644
--- a/syscall/fs.rs
+++ b/syscall/fs.rs
@@ -7,8 +7,6 @@ use super::{Error, Result};
 
 /// Read syscall
 pub fn read(fd: usize, buf: &mut [u8]) -> Result<usize> {
-    println!("Read {}: {:X} {}", fd, buf.as_ptr() as usize, buf.len());
-
     let file = {
         let contexts = context::contexts();
         let context_lock = contexts.current().ok_or(Error::NoProcess)?;
@@ -17,8 +15,6 @@ pub fn read(fd: usize, buf: &mut [u8]) -> Result<usize> {
         file
     };
 
-    println!("{:?}", file);
-
     let schemes = scheme::schemes();
     let scheme_mutex = schemes.get(file.scheme).ok_or(Error::BadFile)?;
     let result = scheme_mutex.lock().read(file.number, buf);
@@ -27,8 +23,6 @@ pub fn read(fd: usize, buf: &mut [u8]) -> Result<usize> {
 
 /// Write syscall
 pub fn write(fd: usize, buf: &[u8]) -> Result<usize> {
-    println!("Write {}: {:X} {}", fd, buf.as_ptr() as usize, buf.len());
-
     let file = {
         let contexts = context::contexts();
         let context_lock = contexts.current().ok_or(Error::NoProcess)?;
@@ -37,8 +31,6 @@ pub fn write(fd: usize, buf: &[u8]) -> Result<usize> {
         file
     };
 
-    println!("{:?}: {:?}", file, ::core::str::from_utf8(buf));
-
     let schemes = scheme::schemes();
     let scheme_mutex = schemes.get(file.scheme).ok_or(Error::BadFile)?;
     let result = scheme_mutex.lock().write(file.number, buf);
@@ -50,7 +42,6 @@ pub fn open(path: &[u8], flags: usize) -> Result<usize> {
     let mut parts = path.splitn(2, |&b| b == b':');
     let namespace_opt = parts.next();
     let reference_opt = parts.next();
-    println!("Open namespace {:?} reference {:?}: {:X}", namespace_opt.map(::core::str::from_utf8), reference_opt.map(::core::str::from_utf8), flags);
 
     let (scheme_id, file_id) = {
         let namespace = namespace_opt.ok_or(Error::NoEntry)?;
@@ -71,6 +62,16 @@ pub fn open(path: &[u8], flags: usize) -> Result<usize> {
 
 /// Close syscall
 pub fn close(fd: usize) -> Result<usize> {
-    println!("Close {}", fd);
-    Ok(0)
+    let file = {
+        let contexts = context::contexts();
+        let context_lock = contexts.current().ok_or(Error::NoProcess)?;
+        let context = context_lock.read();
+        let file = context.files.get(fd).ok_or(Error::BadFile)?.ok_or(Error::BadFile)?;
+        file
+    };
+
+    let schemes = scheme::schemes();
+    let scheme_mutex = schemes.get(file.scheme).ok_or(Error::BadFile)?;
+    let result = scheme_mutex.lock().close(file.number).and(Ok(0));
+    result
 }
-- 
GitLab