pthread: Make pthread barriers 2LS-independent
[akaros.git] / kern / include / linux_compat.h
index 74daf88..a2ab929 100644 (file)
@@ -25,6 +25,7 @@
 #include <taskqueue.h>
 #include <zlib.h>
 #include <list.h>
+#include <refd_pages.h>
 #include <linux/errno.h>
 /* temporary dumping ground */
 #include "compat_todo.h"
@@ -40,7 +41,9 @@
 #define rcu_read_unlock()
 #define rcu_dereference(x) (x)
 #define rcu_dereference_protected(x, y) (x)
+#ifndef rcu_assign_pointer
 #define rcu_assign_pointer(dst, src) (dst) = (src)
+#endif
 #define RCU_INIT_POINTER(dst, src) rcu_assign_pointer(dst, src)
 #define synchronize_rcu()
 
@@ -86,18 +89,12 @@ enum dma_data_direction {
 static inline void *__dma_alloc_coherent(size_t size, dma_addr_t *dma_handle,
                                          gfp_t flags)
 {
-       size_t order = LOG2_UP(nr_pages(size));
-       /* our shitty allocator doesn't align the higher order allocations, so we
-        * go 2x, and align manually.  we don't save the original pointer, so we
-        * can't free them later. */
-       void *vaddr = get_cont_pages(order > 0 ?  order + 1 : order,
-                                    flags);
+       void *vaddr = get_cont_pages(LOG2_UP(nr_pages(size)), flags);
+
        if (!vaddr) {
                *dma_handle = 0;
                return 0;
        }
-       /* manual alignment.  order 0 allocs are already page aligned */
-       vaddr = ALIGN(vaddr, PGSIZE << order);
        *dma_handle = PADDR(vaddr);
        return vaddr;
 }
@@ -114,12 +111,7 @@ static inline void *__dma_zalloc_coherent(size_t size, dma_addr_t *dma_handle,
 static inline void __dma_free_coherent(size_t size, void *cpu_addr,
                                        dma_addr_t dma_handle)
 {
-       size_t order = LOG2_UP(nr_pages(size));
-       if (order > 0) {
-               warn("Not freeing high order alloc!  Fix the allocator!");
-               return;
-       }
-       free_cont_pages(cpu_addr, order);
+       free_cont_pages(cpu_addr, LOG2_UP(nr_pages(size)));
 }
 
 static inline dma_addr_t __dma_map_single(void *cpu_addr, size_t size,
@@ -168,7 +160,7 @@ static inline int __dma_mapping_error(dma_addr_t dma_addr)
 
 static void *vmalloc(size_t size)
 {
-       void *vaddr = get_cont_pages(LOG2_UP(nr_pages(size)), KMALLOC_WAIT);
+       void *vaddr = get_cont_pages(LOG2_UP(nr_pages(size)), MEM_WAIT);
        /* zalloc, to be safe */
        if (vaddr)
                memset(vaddr, 0, size);
@@ -727,7 +719,7 @@ static inline int request_firmware(const struct firmware **fwp,
                kref_put(&fw_file->f_kref);
                return -1;
        }
-       ret_fw = kmalloc(sizeof(struct firmware), KMALLOC_WAIT);
+       ret_fw = kmalloc(sizeof(struct firmware), MEM_WAIT);
        ret_fw->data = fw_data;
        ret_fw->size = fw_file->f_dentry->d_inode->i_size;
        *fwp = ret_fw;