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
vserver 1.9.3
[linux-2.6.git]
/
arch
/
ppc
/
mm
/
init.c
diff --git
a/arch/ppc/mm/init.c
b/arch/ppc/mm/init.c
index
b61a61c
..
cbed552
100644
(file)
--- a/
arch/ppc/mm/init.c
+++ b/
arch/ppc/mm/init.c
@@
-104,6
+104,7
@@
extern unsigned long sysmap_size;
* -- Cort
*/
int __map_without_bats;
* -- Cort
*/
int __map_without_bats;
+int __map_without_ltlbs;
/* max amount of RAM to use */
unsigned long __max_memory;
/* max amount of RAM to use */
unsigned long __max_memory;
@@
-118,7
+119,7
@@
void show_mem(void)
printk("Mem-info:\n");
show_free_areas();
printk("Mem-info:\n");
show_free_areas();
- printk("Free swap: %6
dkB\n",
nr_swap_pages<<(PAGE_SHIFT-10));
+ printk("Free swap: %6
ldkB\n",
nr_swap_pages<<(PAGE_SHIFT-10));
i = max_mapnr;
while (i-- > 0) {
total++;
i = max_mapnr;
while (i-- > 0) {
total++;
@@
-204,6
+205,10
@@
void MMU_setup(void)
__map_without_bats = 1;
}
__map_without_bats = 1;
}
+ if (strstr(cmd_line, "noltlbs")) {
+ __map_without_ltlbs = 1;
+ }
+
/* Look for mem= option on command line */
if (strstr(cmd_line, "mem=")) {
char *p, *q;
/* Look for mem= option on command line */
if (strstr(cmd_line, "mem=")) {
char *p, *q;
@@
-253,6
+258,12
@@
void __init MMU_init(void)
if (__max_memory && total_memory > __max_memory)
total_memory = __max_memory;
total_lowmem = total_memory;
if (__max_memory && total_memory > __max_memory)
total_memory = __max_memory;
total_lowmem = total_memory;
+#ifdef CONFIG_FSL_BOOKE
+ /* Freescale Book-E parts expect lowmem to be mapped by fixed TLB
+ * entries, so we need to adjust lowmem to match the amount we can map
+ * in the fixed entries */
+ adjust_total_lowmem();
+#endif /* CONFIG_FSL_BOOKE */
if (total_lowmem > __max_low_memory) {
total_lowmem = __max_low_memory;
#ifndef CONFIG_HIGHMEM
if (total_lowmem > __max_low_memory) {
total_lowmem = __max_low_memory;
#ifndef CONFIG_HIGHMEM
@@
-458,7
+469,7
@@
void __init mem_init(void)
ClearPageReserved(page);
set_bit(PG_highmem, &page->flags);
ClearPageReserved(page);
set_bit(PG_highmem, &page->flags);
-
atomic_set(&page->count
, 1);
+
set_page_count(page
, 1);
__free_page(page);
totalhigh_pages++;
}
__free_page(page);
totalhigh_pages++;
}
@@
-572,6
+583,16
@@
void flush_dcache_page(struct page *page)
clear_bit(PG_arch_1, &page->flags);
}
clear_bit(PG_arch_1, &page->flags);
}
+void flush_dcache_icache_page(struct page *page)
+{
+#ifdef CONFIG_BOOKE
+ __flush_dcache_icache(kmap(page));
+ kunmap(page);
+#else
+ __flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT);
+#endif
+
+}
void clear_user_page(void *page, unsigned long vaddr, struct page *pg)
{
clear_page(page);
void clear_user_page(void *page, unsigned long vaddr, struct page *pg)
{
clear_page(page);
@@
-614,7
+635,7
@@
void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
if (vma->vm_mm == current->active_mm)
__flush_dcache_icache((void *) address);
else
if (vma->vm_mm == current->active_mm)
__flush_dcache_icache((void *) address);
else
-
__flush_dcache_icache_phys(pfn << PAGE_SHIFT
);
+
flush_dcache_icache_page(page
);
set_bit(PG_arch_1, &page->flags);
}
}
set_bit(PG_arch_1, &page->flags);
}
}