Added weak attribute definition
[akaros.git] / kern / include / page_alloc.h
index d2bf5f5..d84e9d0 100644 (file)
@@ -5,8 +5,7 @@
  * Kevin Klues <klueska@cs.berkeley.edu>    
  * Barret Rhoden <brho@cs.berkeley.edu> */
  
-#ifndef PAGE_ALLOC_H
-#define PAGE_ALLOC_H
+#pragma once
 
 #include <atomic.h>
 #include <sys/queue.h>
@@ -24,8 +23,8 @@ struct page_map;              /* preprocessor games */
 struct page;
 typedef size_t ppn_t;
 typedef struct page page_t;
-typedef LIST_HEAD(PageList, page) page_list_t;
-typedef LIST_ENTRY(page) page_list_entry_t;
+typedef BSD_LIST_HEAD(PageList, page) page_list_t;
+typedef BSD_LIST_ENTRY(page) page_list_entry_t;
 
 /* Per-page flag bits related to their state in the page cache */
 #define PG_LOCKED              0x001   /* involved in an IO op */
@@ -41,7 +40,7 @@ typedef LIST_ENTRY(page) page_list_entry_t;
  * an issue, we can dynamically allocate some of these things when we're a
  * buffer page (in a page mapping) */
 struct page {
-       LIST_ENTRY(page)                        pg_link;        /* membership in various lists */
+       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... */
@@ -56,32 +55,29 @@ struct page {
 /******** Externally visible global variables ************/
 extern uint8_t* global_cache_colors_map;
 extern spinlock_t colored_page_free_list_lock;
-extern page_list_t LCKD(&colored_page_free_list_lock) * RO CT(llc_num_colors)
-    colored_page_free_list;
+extern page_list_t *colored_page_free_list;
 
 /*************** Functional Interface *******************/
 void page_alloc_init(struct multiboot_info *mbi);
 void colored_page_alloc_init(void);
 
-error_t upage_alloc(struct proc* p, page_t *SAFE *page, int zero);
-error_t kpage_alloc(page_t *SAFE *page);
+error_t upage_alloc(struct proc* p, page_t **page, int 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 *SAFE *page, size_t ppn);
-error_t kpage_alloc_specific(page_t *SAFE *page, size_t ppn);
+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);
 
-void *CT(1 << order) get_cont_pages(size_t order, int flags);
-void *CT(1 << order) get_cont_pages_node(int node, size_t order, int flags);
+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 *SAFE page);
-void page_decref(page_t *SAFE page);
-void page_setref(page_t *SAFE page, size_t val);
+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);
 void unlock_page(struct page *page);
 void print_pageinfo(struct page *page);
-
-#endif //PAGE_ALLOC_H
-