vserver 2.0 rc7
[linux-2.6.git] / arch / parisc / kernel / pci-dma.c
index 5595f3b..368cc09 100644 (file)
@@ -32,6 +32,7 @@
 #include <asm/pgalloc.h>
 #include <asm/uaccess.h>
 
+
 static struct proc_dir_entry * proc_gsc_root = NULL;
 static int pcxl_proc_info(char *buffer, char **start, off_t offset, int length);
 static unsigned long pcxl_used_bytes = 0;
@@ -91,7 +92,9 @@ static inline int map_pte_uncached(pte_t * pte,
                if (!pte_none(*pte))
                        printk(KERN_ERR "map_pte_uncached: page already exists\n");
                set_pte(pte, __mk_pte(*paddr_ptr, PAGE_KERNEL_UNC));
+               purge_tlb_start();
                pdtlb_kernel(orig_vaddr);
+               purge_tlb_end();
                vaddr += PAGE_SIZE;
                orig_vaddr += PAGE_SIZE;
                (*paddr_ptr) += PAGE_SIZE;
@@ -165,8 +168,10 @@ static inline void unmap_uncached_pte(pmd_t * pmd, unsigned long vaddr,
                end = PMD_SIZE;
        do {
                pte_t page = *pte;
-               pte_clear(pte);
+               pte_clear(&init_mm, vaddr, pte);
+               purge_tlb_start();
                pdtlb_kernel(orig_vaddr);
+               purge_tlb_end();
                vaddr += PAGE_SIZE;
                orig_vaddr += PAGE_SIZE;
                pte++;
@@ -242,10 +247,6 @@ pcxl_alloc_range(size_t size)
        u_long mask, flags;
        unsigned int pages_needed = size >> PAGE_SHIFT;
 
-       ASSERT(pages_needed);
-       ASSERT((pages_needed * PAGE_SIZE) < DMA_CHUNK_SIZE);
-       ASSERT(pages_needed < (BITS_PER_LONG - PAGE_SHIFT));
-
        mask = (u_long) -1L;
        mask >>= BITS_PER_LONG - pages_needed;
 
@@ -289,7 +290,7 @@ resource_found:
 
 #define PCXL_FREE_MAPPINGS(idx, m, size) \
                u##size *res_ptr = (u##size *)&(pcxl_res_map[(idx) + (((size >> 3) - 1) & (~((size >> 3) - 1)))]); \
-               ASSERT((*res_ptr & m) == m); \
+               /* BUG_ON((*res_ptr & m) != m); */ \
                *res_ptr &= ~m;
 
 /*
@@ -302,10 +303,6 @@ pcxl_free_range(unsigned long vaddr, size_t size)
        unsigned int res_idx = (vaddr - pcxl_dma_start) >> (PAGE_SHIFT + 3);
        unsigned int pages_mapped = size >> PAGE_SHIFT;
 
-       ASSERT(pages_mapped);
-       ASSERT((pages_mapped * PAGE_SIZE) < DMA_CHUNK_SIZE);
-       ASSERT(pages_mapped < (BITS_PER_LONG - PAGE_SHIFT));
-
        mask = (u_long) -1L;
        mask >>= BITS_PER_LONG - pages_mapped;