alarm: Force unset_alarm to grab the CV lock
[akaros.git] / kern / include / mm.h
index ccb2119..88c7dec 100644 (file)
 #include <sys/queue.h>
 #include <slab.h>
 #include <kref.h>
+#include <rcu.h>
 
-struct file;
 struct chan;
 struct fd_table;
 struct proc;                                                           /* preprocessor games */
 
-#define F_OR_C_NONE 0
-#define F_OR_C_FILE 1
 #define F_OR_C_CHAN 2
 
 struct file_or_chan {
        int type;
-       struct file *file;
        struct chan *chan;
+       struct fs_file *fsf;    /* weak ref, set during mmap. */
        struct kref kref;
+       struct rcu_head rcu;
 };
 
 char *foc_to_name(struct file_or_chan *foc);
@@ -55,6 +54,8 @@ struct vm_region {
        int                                                     vm_flags;
        struct file_or_chan                     *__vm_foc;
        size_t                                          vm_foff;
+       bool                                            vm_ready;       /* racy, for the PM checks */
+       bool                                            vm_shootdown_needed;
 };
 TAILQ_HEAD(vmr_tailq, vm_region);                      /* Declares 'struct vmr_tailq' */
 
@@ -69,19 +70,7 @@ static inline char *vmr_to_filename(struct vm_region *vmr)
        return foc_to_name(vmr->__vm_foc);
 }
 
-/* VM Region Management Functions.  For now, these just maintain themselves -
- * anything related to mapping needs to be done by the caller. */
 void vmr_init(void);
-struct vm_region *create_vmr(struct proc *p, uintptr_t va, size_t len);
-struct vm_region *split_vmr(struct vm_region *vmr, uintptr_t va);
-int merge_vmr(struct vm_region *first, struct vm_region *second);
-struct vm_region *merge_me(struct vm_region *vmr);
-int grow_vmr(struct vm_region *vmr, uintptr_t va);
-int shrink_vmr(struct vm_region *vmr, uintptr_t va);
-void destroy_vmr(struct vm_region *vmr);
-struct vm_region *find_vmr(struct proc *p, uintptr_t va);
-struct vm_region *find_first_vmr(struct proc *p, uintptr_t va);
-void isolate_vmrs(struct proc *p, uintptr_t va, size_t len);
 void unmap_and_destroy_vmrs(struct proc *p);
 int duplicate_vmrs(struct proc *p, struct proc *new_p);
 void print_vmrs(struct proc *p);