|
@@ -8,6 +8,7 @@
|
|
|
* Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com
|
|
|
* Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
|
|
|
*/
|
|
|
+#include <linux/bug.h>
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/signal.h>
|
|
@@ -132,6 +133,8 @@ void *kmap_coherent(struct page *page, unsigned long addr)
|
|
|
pte_t pte;
|
|
|
int tlbidx;
|
|
|
|
|
|
+ BUG_ON(Page_dcache_dirty(page));
|
|
|
+
|
|
|
inc_preempt_count();
|
|
|
idx = (addr >> PAGE_SHIFT) & (FIX_N_COLOURS - 1);
|
|
|
#ifdef CONFIG_MIPS_MT_SMTC
|
|
@@ -208,7 +211,7 @@ void copy_user_highpage(struct page *to, struct page *from,
|
|
|
void *vfrom, *vto;
|
|
|
|
|
|
vto = kmap_atomic(to, KM_USER1);
|
|
|
- if (cpu_has_dc_aliases) {
|
|
|
+ if (cpu_has_dc_aliases && !Page_dcache_dirty(from)) {
|
|
|
vfrom = kmap_coherent(from, vaddr);
|
|
|
copy_page(vto, vfrom);
|
|
|
kunmap_coherent();
|