diff options
author | Linus Torvalds <torvalds@woody.osdl.org> | 2007-01-02 21:50:57 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2007-01-02 21:50:57 -0500 |
commit | b06b5a53adcc3ace1a82b324edf2b0c37e7be00e (patch) | |
tree | 627599b14a3652778f4ca1f8a42d6627a6c6c84f /arch/arm/mm | |
parent | c6b33cc4e9882b44f1b0c36396f420076e04a4e2 (diff) | |
parent | d02b161eda65528ad3e89d642e416c265c17ceb8 (diff) |
Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm:
[ARM] 4081/1: Add definition for TI Sync Serial Protocol
[ARM] 4080/1: Fix for the SSCR0_SlotsPerFrm macro
[ARM] Fix VFP initialisation issue for SMP systems
[ARM] 4078/1: Fix ARM copypage cache coherency problems
[ARM] 4077/1: iop13xx: fix __io() macro
[ARM] 4074/1: Flat loader stack alignment
[ARM] 4073/1: Prevent s3c24xx drivers from including asm/arch/hardware.h and asm/arch/irqs.h
[ARM] 4071/1: S3C24XX: Documentation update
[ARM] 4066/1: correct a comment about PXA's sched_clock range
[ARM] 4065/1: S3C24XX: dma printk fixes
[ARM] 4064/1: make pxa_get_cycles() static
[ARM] 4063/1: ep93xx: fix IRQ_EP93XX_GPIO?MUX numbering
Diffstat (limited to 'arch/arm/mm')
-rw-r--r-- | arch/arm/mm/copypage-v4mc.c | 6 | ||||
-rw-r--r-- | arch/arm/mm/copypage-v6.c | 4 | ||||
-rw-r--r-- | arch/arm/mm/copypage-xscale.c | 6 |
3 files changed, 16 insertions, 0 deletions
diff --git a/arch/arm/mm/copypage-v4mc.c b/arch/arm/mm/copypage-v4mc.c index 408b05ae6b9b..ded0e96d069d 100644 --- a/arch/arm/mm/copypage-v4mc.c +++ b/arch/arm/mm/copypage-v4mc.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <asm/page.h> | 19 | #include <asm/page.h> |
20 | #include <asm/pgtable.h> | 20 | #include <asm/pgtable.h> |
21 | #include <asm/tlbflush.h> | 21 | #include <asm/tlbflush.h> |
22 | #include <asm/cacheflush.h> | ||
22 | 23 | ||
23 | #include "mm.h" | 24 | #include "mm.h" |
24 | 25 | ||
@@ -69,6 +70,11 @@ mc_copy_user_page(void *from, void *to) | |||
69 | 70 | ||
70 | void v4_mc_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr) | 71 | void v4_mc_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr) |
71 | { | 72 | { |
73 | struct page *page = virt_to_page(kfrom); | ||
74 | |||
75 | if (test_and_clear_bit(PG_dcache_dirty, &page->flags)) | ||
76 | __flush_dcache_page(page_mapping(page), page); | ||
77 | |||
72 | spin_lock(&minicache_lock); | 78 | spin_lock(&minicache_lock); |
73 | 79 | ||
74 | set_pte_ext(TOP_PTE(0xffff8000), pfn_pte(__pa(kfrom) >> PAGE_SHIFT, minicache_pgprot), 0); | 80 | set_pte_ext(TOP_PTE(0xffff8000), pfn_pte(__pa(kfrom) >> PAGE_SHIFT, minicache_pgprot), 0); |
diff --git a/arch/arm/mm/copypage-v6.c b/arch/arm/mm/copypage-v6.c index 865777dec161..3adb79257f43 100644 --- a/arch/arm/mm/copypage-v6.c +++ b/arch/arm/mm/copypage-v6.c | |||
@@ -53,6 +53,10 @@ static void v6_copy_user_page_aliasing(void *kto, const void *kfrom, unsigned lo | |||
53 | { | 53 | { |
54 | unsigned int offset = CACHE_COLOUR(vaddr); | 54 | unsigned int offset = CACHE_COLOUR(vaddr); |
55 | unsigned long from, to; | 55 | unsigned long from, to; |
56 | struct page *page = virt_to_page(kfrom); | ||
57 | |||
58 | if (test_and_clear_bit(PG_dcache_dirty, &page->flags)) | ||
59 | __flush_dcache_page(page_mapping(page), page); | ||
56 | 60 | ||
57 | /* | 61 | /* |
58 | * Discard data in the kernel mapping for the new page. | 62 | * Discard data in the kernel mapping for the new page. |
diff --git a/arch/arm/mm/copypage-xscale.c b/arch/arm/mm/copypage-xscale.c index aea5da723596..2e455f82a4d5 100644 --- a/arch/arm/mm/copypage-xscale.c +++ b/arch/arm/mm/copypage-xscale.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <asm/page.h> | 19 | #include <asm/page.h> |
20 | #include <asm/pgtable.h> | 20 | #include <asm/pgtable.h> |
21 | #include <asm/tlbflush.h> | 21 | #include <asm/tlbflush.h> |
22 | #include <asm/cacheflush.h> | ||
22 | 23 | ||
23 | #include "mm.h" | 24 | #include "mm.h" |
24 | 25 | ||
@@ -91,6 +92,11 @@ mc_copy_user_page(void *from, void *to) | |||
91 | 92 | ||
92 | void xscale_mc_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr) | 93 | void xscale_mc_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr) |
93 | { | 94 | { |
95 | struct page *page = virt_to_page(kfrom); | ||
96 | |||
97 | if (test_and_clear_bit(PG_dcache_dirty, &page->flags)) | ||
98 | __flush_dcache_page(page_mapping(page), page); | ||
99 | |||
94 | spin_lock(&minicache_lock); | 100 | spin_lock(&minicache_lock); |
95 | 101 | ||
96 | set_pte_ext(TOP_PTE(COPYPAGE_MINICACHE), pfn_pte(__pa(kfrom) >> PAGE_SHIFT, minicache_pgprot), 0); | 102 | set_pte_ext(TOP_PTE(COPYPAGE_MINICACHE), pfn_pte(__pa(kfrom) >> PAGE_SHIFT, minicache_pgprot), 0); |