diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-19 15:54:22 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-19 15:54:22 -0800 |
commit | d5c67bac833c6c9cc713f6a27daa77dcba898dd8 (patch) | |
tree | f8e405da36b2ad15a8f8171115243228b6cbb4da /arch/mips/mm/init.c | |
parent | 989b0b930218661b504bbb056b309e2c7bcdfb86 (diff) | |
parent | cc2d6f701bed8b5f120314e4df854827d8bac558 (diff) |
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus:
[MIPS] BCM47XX: Use new SSB SPROM data structure
[MIPS] WGT634U: Register MTD as platform device.
[MIPS] BCM47xx: Add defconfig file.
[MIPS] RM: fix EISA=n compilation
[MIPS] PCI: Coding style fixes for pcibios_enable_resources.
[MIPS] PCI: Port i386 PCI fixes.
[MIPS] Qemu: finish platform removal
[MIPS] Wire up the timerfd_*() o32 system calls
[MIPS] IP28: Add defconfig file
[MIPS] SB1: Fix CONFIG_SIBYTE_DMA_PAGEOPS build failure.
[MIPS] BCM1480: Remove stray function call resulting in infinite recursion
[MIPS] Fix buggy invocations of kmap_coherent()
[MIPS] Fix broken rm7000/rm9000 interrupt handling
[MIPS] Handle I-cache coherency in flush_cache_range()
[MIPS] IP27: Add missing ~ in DMA code.
[MIPS] Use find_task_by_vpid in system calls
Diffstat (limited to 'arch/mips/mm/init.c')
-rw-r--r-- | arch/mips/mm/init.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index 480dec04f55..c7aed133d11 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c @@ -211,7 +211,8 @@ void copy_user_highpage(struct page *to, struct page *from, void *vfrom, *vto; vto = kmap_atomic(to, KM_USER1); - if (cpu_has_dc_aliases && page_mapped(from)) { + if (cpu_has_dc_aliases && + page_mapped(from) && !Page_dcache_dirty(from)) { vfrom = kmap_coherent(from, vaddr); copy_page(vto, vfrom); kunmap_coherent(); @@ -234,7 +235,8 @@ void copy_to_user_page(struct vm_area_struct *vma, struct page *page, unsigned long vaddr, void *dst, const void *src, unsigned long len) { - if (cpu_has_dc_aliases && page_mapped(page)) { + if (cpu_has_dc_aliases && + page_mapped(page) && !Page_dcache_dirty(page)) { void *vto = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK); memcpy(vto, src, len); kunmap_coherent(); @@ -253,7 +255,8 @@ void copy_from_user_page(struct vm_area_struct *vma, struct page *page, unsigned long vaddr, void *dst, const void *src, unsigned long len) { - if (cpu_has_dc_aliases && page_mapped(page)) { + if (cpu_has_dc_aliases && + page_mapped(page) && !Page_dcache_dirty(page)) { void *vfrom = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK); memcpy(dst, vfrom, len); kunmap_coherent(); |