git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[pandora-kernel.git]
/
arch
/
powerpc
/
mm
/
pgtable_32.c
diff --git
a/arch/powerpc/mm/pgtable_32.c
b/arch/powerpc/mm/pgtable_32.c
index
e0ff59f
..
2001abd
100644
(file)
--- a/
arch/powerpc/mm/pgtable_32.c
+++ b/
arch/powerpc/mm/pgtable_32.c
@@
-53,9
+53,9
@@
extern void hash_page_sync(void);
#endif
#ifdef HAVE_BATS
#endif
#ifdef HAVE_BATS
-extern
unsigned long
v_mapped_by_bats(unsigned long va);
-extern unsigned long p_mapped_by_bats(
unsigned long
pa);
-void setbat(int index, unsigned long virt,
unsigned long
phys,
+extern
phys_addr_t
v_mapped_by_bats(unsigned long va);
+extern unsigned long p_mapped_by_bats(
phys_addr_t
pa);
+void setbat(int index, unsigned long virt,
phys_addr_t
phys,
unsigned int size, int flags);
#else /* !HAVE_BATS */
unsigned int size, int flags);
#else /* !HAVE_BATS */
@@
-145,13
+145,20
@@
void pte_free(struct mm_struct *mm, pgtable_t ptepage)
void __iomem *
ioremap(phys_addr_t addr, unsigned long size)
{
void __iomem *
ioremap(phys_addr_t addr, unsigned long size)
{
- return __ioremap(addr, size, _PAGE_NO_CACHE);
+ return __ioremap(addr, size, _PAGE_NO_CACHE
| _PAGE_GUARDED
);
}
EXPORT_SYMBOL(ioremap);
void __iomem *
ioremap_flags(phys_addr_t addr, unsigned long size, unsigned long flags)
{
}
EXPORT_SYMBOL(ioremap);
void __iomem *
ioremap_flags(phys_addr_t addr, unsigned long size, unsigned long flags)
{
+ /* writeable implies dirty for kernel addresses */
+ if (flags & _PAGE_RW)
+ flags |= _PAGE_DIRTY | _PAGE_HWWRITE;
+
+ /* we don't want to let _PAGE_USER and _PAGE_EXEC leak out */
+ flags &= ~(_PAGE_USER | _PAGE_EXEC | _PAGE_HWEXEC);
+
return __ioremap(addr, size, flags);
}
EXPORT_SYMBOL(ioremap_flags);
return __ioremap(addr, size, flags);
}
EXPORT_SYMBOL(ioremap_flags);
@@
-163,6
+170,14
@@
__ioremap(phys_addr_t addr, unsigned long size, unsigned long flags)
phys_addr_t p;
int err;
phys_addr_t p;
int err;
+ /* Make sure we have the base flags */
+ if ((flags & _PAGE_PRESENT) == 0)
+ flags |= _PAGE_KERNEL;
+
+ /* Non-cacheable page cannot be coherent */
+ if (flags & _PAGE_NO_CACHE)
+ flags &= ~_PAGE_COHERENT;
+
/*
* Choose an address to map it to.
* Once the vmalloc system is running, we use it.
/*
* Choose an address to map it to.
* Once the vmalloc system is running, we use it.
@@
-219,11
+234,6
@@
__ioremap(phys_addr_t addr, unsigned long size, unsigned long flags)
v = (ioremap_bot -= size);
}
v = (ioremap_bot -= size);
}
- if ((flags & _PAGE_PRESENT) == 0)
- flags |= _PAGE_KERNEL;
- if (flags & _PAGE_NO_CACHE)
- flags |= _PAGE_GUARDED;
-
/*
* Should check if it is a candidate for a BAT mapping
*/
/*
* Should check if it is a candidate for a BAT mapping
*/