git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git]
/
arch
/
mips
/
mm
/
c-sb1.c
diff --git
a/arch/mips/mm/c-sb1.c
b/arch/mips/mm/c-sb1.c
index
ad41b2b
..
f9b1294
100644
(file)
--- a/
arch/mips/mm/c-sb1.c
+++ b/
arch/mips/mm/c-sb1.c
@@
-160,8
+160,7
@@
static inline void __sb1_flush_icache_all(void)
* dcache first, then invalidate the icache. If the page isn't
* executable, nothing is required.
*/
* dcache first, then invalidate the icache. If the page isn't
* executable, nothing is required.
*/
-static void local_sb1_flush_cache_page(struct vm_area_struct *vma,
- unsigned long addr)
+static void local_sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn)
{
int cpu = smp_processor_id();
{
int cpu = smp_processor_id();
@@
-183,17
+182,18
@@
static void local_sb1_flush_cache_page(struct vm_area_struct *vma,
struct flush_cache_page_args {
struct vm_area_struct *vma;
unsigned long addr;
struct flush_cache_page_args {
struct vm_area_struct *vma;
unsigned long addr;
+ unsigned long pfn;
};
static void sb1_flush_cache_page_ipi(void *info)
{
struct flush_cache_page_args *args = info;
};
static void sb1_flush_cache_page_ipi(void *info)
{
struct flush_cache_page_args *args = info;
- local_sb1_flush_cache_page(args->vma, args->addr);
+ local_sb1_flush_cache_page(args->vma, args->addr
, args->pfn
);
}
/* Dirty dcache could be on another CPU, so do the IPIs */
}
/* Dirty dcache could be on another CPU, so do the IPIs */
-static void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr)
+static void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr
, unsigned long pfn
)
{
struct flush_cache_page_args args;
{
struct flush_cache_page_args args;
@@
-203,10
+203,11
@@
static void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr)
addr &= PAGE_MASK;
args.vma = vma;
args.addr = addr;
addr &= PAGE_MASK;
args.vma = vma;
args.addr = addr;
+ args.pfn = pfn;
on_each_cpu(sb1_flush_cache_page_ipi, (void *) &args, 1, 1);
}
#else
on_each_cpu(sb1_flush_cache_page_ipi, (void *) &args, 1, 1);
}
#else
-void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr)
+void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr
, unsigned long pfn
)
__attribute__((alias("local_sb1_flush_cache_page")));
#endif
__attribute__((alias("local_sb1_flush_cache_page")));
#endif
@@
-234,7
+235,7
@@
static inline void __sb1_flush_icache_range(unsigned long start,
/*
* Invalidate all caches on this CPU
*/
/*
* Invalidate all caches on this CPU
*/
-static void local_sb1___flush_cache_all(void)
+static void
__attribute_used__
local_sb1___flush_cache_all(void)
{
__sb1_writeback_inv_dcache_all();
__sb1_flush_icache_all();
{
__sb1_writeback_inv_dcache_all();
__sb1_flush_icache_all();
@@
-269,7
+270,7
@@
static void local_sb1_flush_icache_range(unsigned long start,
__sb1_writeback_inv_dcache_all();
else
__sb1_writeback_inv_dcache_range(start, end);
__sb1_writeback_inv_dcache_all();
else
__sb1_writeback_inv_dcache_range(start, end);
-
+
/* Just flush the whole icache if the range is big enough */
if ((end - start) > icache_range_cutoff)
__sb1_flush_icache_all();
/* Just flush the whole icache if the range is big enough */
if ((end - start) > icache_range_cutoff)
__sb1_flush_icache_all();
@@
-491,19
+492,17
@@
static __init void probe_cache_sizes(void)
}
/*
}
/*
- * This is called from
loadmmu
.c. We have to set up all the
+ * This is called from
cache
.c. We have to set up all the
* memory management function pointers, as well as initialize
* the caches and tlbs
*/
* memory management function pointers, as well as initialize
* the caches and tlbs
*/
-void
ld_mmu_sb1
(void)
+void
sb1_cache_init
(void)
{
extern char except_vec2_sb1;
extern char handle_vec2_sb1;
/* Special cache error handler for SB1 */
{
extern char except_vec2_sb1;
extern char handle_vec2_sb1;
/* Special cache error handler for SB1 */
- memcpy((void *)(CAC_BASE + 0x100), &except_vec2_sb1, 0x80);
- memcpy((void *)(UNCAC_BASE + 0x100), &except_vec2_sb1, 0x80);
- memcpy((void *)CKSEG1ADDR(&handle_vec2_sb1), &handle_vec2_sb1, 0x80);
+ set_uncached_handler (0x100, &except_vec2_sb1, 0x80);
probe_cache_sizes();
probe_cache_sizes();
@@
-529,6
+528,7
@@
void ld_mmu_sb1(void)
flush_cache_page = sb1_flush_cache_page;
flush_cache_sigtramp = sb1_flush_cache_sigtramp;
flush_cache_page = sb1_flush_cache_page;
flush_cache_sigtramp = sb1_flush_cache_sigtramp;
+ local_flush_data_cache_page = (void *) sb1_nop;
flush_data_cache_page = (void *) sb1_nop;
/* Full flush */
flush_data_cache_page = (void *) sb1_nop;
/* Full flush */