Track errno and errstr in the kthread
[akaros.git] / kern / include / page_alloc.h
index 484f62d..9e776da 100644 (file)
@@ -11,7 +11,6 @@
 #include <sys/queue.h>
 #include <error.h>
 #include <arch/mmu.h>
-#include <colored_page_alloc.h>
 #include <process.h>
 #include <kref.h>
 #include <kthread.h>
@@ -41,7 +40,6 @@ typedef BSD_LIST_ENTRY(page) page_list_entry_t;
  * buffer page (in a page mapping) */
 struct page {
        BSD_LIST_ENTRY(page)            pg_link;        /* membership in various lists */
-       struct kref                                     pg_kref;
        atomic_t                                        pg_flags;
        struct page_map                         *pg_mapping; /* for debugging... */
        unsigned long                           pg_index;
@@ -49,33 +47,32 @@ struct page {
        void                                            *pg_private;    /* type depends on page usage */
        struct semaphore                        pg_sem;         /* for blocking on IO */
        uint64_t                                gpa;            /* physical address in guest */
-                                                               /* pg_private is overloaded. */
+
+       bool                                            pg_is_free;     /* TODO: will remove */
 };
 
 /******** Externally visible global variables ************/
-extern uint8_t* global_cache_colors_map;
-extern spinlock_t colored_page_free_list_lock;
-extern page_list_t *colored_page_free_list;
+extern spinlock_t page_list_lock;
+extern page_list_t page_free_list;
 
 /*************** Functional Interface *******************/
-void page_alloc_init(struct multiboot_info *mbi);
-void colored_page_alloc_init(void);
+void base_arena_init(struct multiboot_info *mbi);
 
-error_t upage_alloc(struct proc* p, page_t **page, int zero);
+error_t upage_alloc(struct proc *p, page_t **page, bool zero);
 error_t kpage_alloc(page_t **page);
 void *kpage_alloc_addr(void);
 void *kpage_zalloc_addr(void);
-error_t upage_alloc_specific(struct proc* p, page_t **page, size_t ppn);
-error_t kpage_alloc_specific(page_t **page, size_t ppn);
+
+/* Direct allocation from the kpages arena (instead of kmalloc).  These will
+ * give you PGSIZE quantum. */
+void *kpages_alloc(size_t size, int flags);
+void *kpages_zalloc(size_t size, int flags);
+void kpages_free(void *addr, size_t size);
 
 void *get_cont_pages(size_t order, int flags);
-void *get_cont_pages_node(int node, size_t order, int flags);
-void *get_cont_phys_pages_at(size_t order, physaddr_t at, int flags);
 void free_cont_pages(void *buf, size_t order);
 
-void page_incref(page_t *page);
 void page_decref(page_t *page);
-void page_setref(page_t *page, size_t val);
 
 int page_is_free(size_t ppn);
 void lock_page(struct page *page);