git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 2.0 rc7
[linux-2.6.git]
/
arch
/
ppc
/
kernel
/
dma-mapping.c
diff --git
a/arch/ppc/kernel/dma-mapping.c
b/arch/ppc/kernel/dma-mapping.c
index
59359d8
..
e0c631c
100644
(file)
--- a/
arch/ppc/kernel/dma-mapping.c
+++ b/
arch/ppc/kernel/dma-mapping.c
@@
-219,7
+219,8
@@
__dma_alloc_coherent(size_t size, dma_addr_t *handle, int gfp)
c = vm_region_alloc(&consistent_head, size,
gfp & ~(__GFP_DMA | __GFP_HIGHMEM));
if (c) {
c = vm_region_alloc(&consistent_head, size,
gfp & ~(__GFP_DMA | __GFP_HIGHMEM));
if (c) {
- pte_t *pte = consistent_pte + CONSISTENT_OFFSET(c->vm_start);
+ unsigned long vaddr = c->vm_start;
+ pte_t *pte = consistent_pte + CONSISTENT_OFFSET(vaddr);
struct page *end = page + (1 << order);
/*
struct page *end = page + (1 << order);
/*
@@
-232,9
+233,11
@@
__dma_alloc_coherent(size_t size, dma_addr_t *handle, int gfp)
set_page_count(page, 1);
SetPageReserved(page);
set_page_count(page, 1);
SetPageReserved(page);
- set_pte(pte, mk_pte(page, pgprot_noncached(PAGE_KERNEL)));
+ set_pte_at(&init_mm, vaddr,
+ pte, mk_pte(page, pgprot_noncached(PAGE_KERNEL)));
page++;
pte++;
page++;
pte++;
+ vaddr += PAGE_SIZE;
} while (size -= PAGE_SIZE);
/*
} while (size -= PAGE_SIZE);
/*
@@
-262,7
+265,7
@@
EXPORT_SYMBOL(__dma_alloc_coherent);
void __dma_free_coherent(size_t size, void *vaddr)
{
struct vm_region *c;
void __dma_free_coherent(size_t size, void *vaddr)
{
struct vm_region *c;
- unsigned long flags;
+ unsigned long flags
, addr
;
pte_t *ptep;
size = PAGE_ALIGN(size);
pte_t *ptep;
size = PAGE_ALIGN(size);
@@
-281,11
+284,13
@@
void __dma_free_coherent(size_t size, void *vaddr)
}
ptep = consistent_pte + CONSISTENT_OFFSET(c->vm_start);
}
ptep = consistent_pte + CONSISTENT_OFFSET(c->vm_start);
+ addr = c->vm_start;
do {
do {
- pte_t pte = ptep_get_and_clear(ptep);
+ pte_t pte = ptep_get_and_clear(
&init_mm, addr,
ptep);
unsigned long pfn;
ptep++;
unsigned long pfn;
ptep++;
+ addr += PAGE_SIZE;
if (!pte_none(pte) && pte_present(pte)) {
pfn = pte_pfn(pte);
if (!pte_none(pte) && pte_present(pte)) {
pfn = pte_pfn(pte);