Minor debugging fixes
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Jul 2014 01:26:10 +0000 (18:26 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Jul 2014 01:26:10 +0000 (18:26 -0700)
pip for a DYING process would panic the kernel since the file's in the
file table were garbage.  At a minimum, we should be checking the bit
before checking the pointer.

kern/include/pmap.h
kern/src/process.c
kern/src/syscall.c

index 842865d..a13cd81 100644 (file)
@@ -146,4 +146,9 @@ static inline ppn_t kva2ppn(void* addr)
        return page2ppn(kva2page(addr));
 }
 
+static inline bool is_kaddr(void *addr)
+{
+       return (uintptr_t)addr >= KERNBASE;
+}
+
 #endif /* !ROS_KERN_PMAP_H */
index ad462bd..19efc07 100644 (file)
@@ -2284,7 +2284,8 @@ void print_proc_info(pid_t pid)
        struct files_struct *files = &p->open_files;
        spin_lock(&files->lock);
        for (int i = 0; i < files->max_files; i++)
-               if (files->fd[i].fd_file) {
+               if (GET_BITMASK_BIT(files->open_fds->fds_bits, i) &&
+                   (files->fd[i].fd_file)) {
                        printk("\tFD: %02d, File: %p, File name: %s\n", i,
                               files->fd[i].fd_file, file_name(files->fd[i].fd_file));
                }
index e3976d0..9603478 100644 (file)
@@ -1187,7 +1187,7 @@ static intreg_t sys_close(struct proc *p, int fd)
        if (retval < 0) {
                /* no one checks their retvals.  a double close will cause problems. */
                printk("[kernel] sys_close failed: proc %d fd %d.  Check your rets.\n",
-                      p, fd);
+                      p->pid, fd);
        }
        return retval;
 }