Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 36009
b: refs/heads/master
c: 585fa72
h: refs/heads/master
i:
  36007: 8ca215b
v: v3
  • Loading branch information
Ralf Baechle committed Sep 27, 2006
1 parent 3142733 commit 8e5f3b2
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 13fdd31abec5f48cf97693bd14d2e11e0779b4ca
refs/heads/master: 585fa72493edd7d5acb308806e7bb609412c6228
2 changes: 1 addition & 1 deletion trunk/arch/mips/mm/c-r3k.c
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ void __init r3k_cache_init(void)
flush_cache_mm = r3k_flush_cache_mm;
flush_cache_range = r3k_flush_cache_range;
flush_cache_page = r3k_flush_cache_page;
flush_icache_page = r3k_flush_icache_page;
__flush_icache_page = r3k_flush_icache_page;
flush_icache_range = r3k_flush_icache_range;

flush_cache_sigtramp = r3k_flush_cache_sigtramp;
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/mips/mm/c-r4k.c
Original file line number Diff line number Diff line change
Expand Up @@ -1291,7 +1291,7 @@ void __init r4k_cache_init(void)
__flush_cache_all = r4k___flush_cache_all;
flush_cache_mm = r4k_flush_cache_mm;
flush_cache_page = r4k_flush_cache_page;
flush_icache_page = r4k_flush_icache_page;
__flush_icache_page = r4k_flush_icache_page;
flush_cache_range = r4k_flush_cache_range;

flush_cache_sigtramp = r4k_flush_cache_sigtramp;
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/mips/mm/c-sb1.c
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,7 @@ void sb1_cache_init(void)

/* These routines are for Icache coherence with the Dcache */
flush_icache_range = sb1_flush_icache_range;
flush_icache_page = sb1_flush_icache_page;
__flush_icache_page = sb1_flush_icache_page;
flush_icache_all = __sb1_flush_icache_all; /* local only */

/* This implies an Icache flush too, so can't be nop'ed */
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/mips/mm/c-tx39.c
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ void __init tx39_cache_init(void)
flush_cache_mm = (void *) tx39h_flush_icache_all;
flush_cache_range = (void *) tx39h_flush_icache_all;
flush_cache_page = (void *) tx39h_flush_icache_all;
flush_icache_page = (void *) tx39h_flush_icache_all;
__flush_icache_page = (void *) tx39h_flush_icache_all;
flush_icache_range = (void *) tx39h_flush_icache_all;

flush_cache_sigtramp = (void *) tx39h_flush_icache_all;
Expand All @@ -408,7 +408,7 @@ void __init tx39_cache_init(void)
flush_cache_mm = tx39_flush_cache_mm;
flush_cache_range = tx39_flush_cache_range;
flush_cache_page = tx39_flush_cache_page;
flush_icache_page = tx39_flush_icache_page;
__flush_icache_page = tx39_flush_icache_page;
flush_icache_range = tx39_flush_icache_range;

flush_cache_sigtramp = tx39_flush_cache_sigtramp;
Expand Down
18 changes: 10 additions & 8 deletions trunk/arch/mips/mm/cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ void (*flush_cache_range)(struct vm_area_struct *vma, unsigned long start,
void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page,
unsigned long pfn);
void (*flush_icache_range)(unsigned long start, unsigned long end);
void (*flush_icache_page)(struct vm_area_struct *vma, struct page *page);
void (*__flush_icache_page)(struct vm_area_struct *vma, struct page *page);

/* MIPS specific cache operations */
void (*flush_cache_sigtramp)(unsigned long addr);
Expand Down Expand Up @@ -70,6 +70,8 @@ void __flush_dcache_page(struct page *page)
struct address_space *mapping = page_mapping(page);
unsigned long addr;

if (PageHighMem(page))
return;
if (mapping && !mapping_mapped(mapping)) {
SetPageDcacheDirty(page);
return;
Expand All @@ -91,16 +93,16 @@ void __update_cache(struct vm_area_struct *vma, unsigned long address,
{
struct page *page;
unsigned long pfn, addr;
int exec = (vma->vm_flags & VM_EXEC) && !cpu_has_ic_fills_f_dc;

pfn = pte_pfn(pte);
if (pfn_valid(pfn) && (page = pfn_to_page(pfn), page_mapping(page)) &&
Page_dcache_dirty(page)) {
if (pages_do_alias((unsigned long)page_address(page),
address & PAGE_MASK)) {
addr = (unsigned long) page_address(page);
if (unlikely(!pfn_valid(pfn)))
return;
page = pfn_to_page(pfn);
if (page_mapping(page) && Page_dcache_dirty(page)) {
addr = (unsigned long) page_address(page);
if (exec || pages_do_alias(addr, address & PAGE_MASK))
flush_data_cache_page(addr);
}

ClearPageDcacheDirty(page);
}
}
Expand Down
12 changes: 8 additions & 4 deletions trunk/include/asm-mips/cacheflush.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
* - flush_cache_range(vma, start, end) flushes a range of pages
* - flush_icache_range(start, end) flush a range of instructions
* - flush_dcache_page(pg) flushes(wback&invalidates) a page for dcache
* - flush_icache_page(vma, pg) flushes(invalidates) a page for icache
*
* MIPS specific flush operations:
*
Expand All @@ -39,16 +38,21 @@ extern void __flush_dcache_page(struct page *page);

static inline void flush_dcache_page(struct page *page)
{
if (cpu_has_dc_aliases)
if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc)
__flush_dcache_page(page);

}

#define flush_dcache_mmap_lock(mapping) do { } while (0)
#define flush_dcache_mmap_unlock(mapping) do { } while (0)

extern void (*flush_icache_page)(struct vm_area_struct *vma,
extern void (*__flush_icache_page)(struct vm_area_struct *vma,
struct page *page);
static inline void flush_icache_page(struct vm_area_struct *vma,
struct page *page)
{
}

extern void (*flush_icache_range)(unsigned long start, unsigned long end);
#define flush_cache_vmap(start, end) flush_cache_all()
#define flush_cache_vunmap(start, end) flush_cache_all()
Expand All @@ -60,7 +64,7 @@ static inline void copy_to_user_page(struct vm_area_struct *vma,
if (cpu_has_dc_aliases)
flush_cache_page(vma, vaddr, page_to_pfn(page));
memcpy(dst, src, len);
flush_icache_page(vma, page);
__flush_icache_page(vma, page);
}

static inline void copy_from_user_page(struct vm_area_struct *vma,
Expand Down
7 changes: 5 additions & 2 deletions trunk/include/asm-mips/page.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@

#ifndef __ASSEMBLY__

#include <asm/cpu-features.h>

extern void clear_page(void * page);
extern void copy_page(void * to, void * from);

Expand All @@ -53,7 +55,7 @@ static inline void clear_user_page(void *addr, unsigned long vaddr,
extern void (*flush_data_cache_page)(unsigned long addr);

clear_page(addr);
if (pages_do_alias((unsigned long) addr, vaddr))
if (pages_do_alias((unsigned long) addr, vaddr & PAGE_MASK))
flush_data_cache_page((unsigned long)addr);
}

Expand All @@ -63,7 +65,8 @@ static inline void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
extern void (*flush_data_cache_page)(unsigned long addr);

copy_page(vto, vfrom);
if (pages_do_alias((unsigned long)vto, vaddr))
if (!cpu_has_ic_fills_f_dc ||
pages_do_alias((unsigned long)vto, vaddr & PAGE_MASK))
flush_data_cache_page((unsigned long)vto);
}

Expand Down

0 comments on commit 8e5f3b2

Please sign in to comment.