Export NR_FILE_DESC_MAX to userspace (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 20 Aug 2015 15:45:37 +0000 (11:45 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Sep 2015 19:14:00 +0000 (15:14 -0400)
Partitioning the FD space with NR_FILE_DESC_MAX will help userspace
emulate various Linux functions.  There's a class of facilities that we
can do in userspace, but expect to operate with the kernel via FDs.  For
instance, after an epoll_create(), you call close().  We'll need to
intercept that close() call in glibc and handle it accordingly.

Reinstall your kernel headers.

kern/include/ros/limits.h
kern/include/vfs.h

index 28f31af..b6b8629 100644 (file)
@@ -11,4 +11,8 @@
 /* # bytes of args + environ for exec()  (i.e. max size of argenv) */
 #define ARG_MAX (32 * 4096) /* Good chunk of our 256 page stack */
 
+/* This partitions the FD space.  Negative values are errors (bit 31).  Bits
+ * 0-19 are for kernel FDs.  Bits 20-30 are for userspace shims. */
+#define NR_FILE_DESC_MAX (1 << 19)
+
 #endif /* ROS_INC_LIMITS_H */
index b4d95d4..2c126bc 100644 (file)
@@ -14,6 +14,7 @@
 #define ROS_KERN_VFS_H
 
 #include <ros/common.h>
+#include <ros/limits.h>
 #include <sys/queue.h>
 #include <sys/uio.h>
 #include <bitmask.h>
@@ -348,8 +349,6 @@ struct pipe_inode_info
 /* Per-process structs */
 #define NR_OPEN_FILES_DEFAULT 32
 #define NR_FILE_DESC_DEFAULT 32
-/* this is not in sync with glibc, sysdeps/ros/bits/typesizes.h */
-#define NR_FILE_DESC_MAX (512 * 1024)
 
 /* Bitmask for file descriptors, big for when we exceed the initial small.  We
  * could just use the fd_array to check for openness instead of the bitmask,