From: Andy P. <at...@us...> - 2002-04-10 18:39:42
|
Update of /cvsroot/linux-vax/kernel-2.4/arch/m68k/mm In directory usw-pr-cvs1:/tmp/cvs-serv13561/m68k/mm Modified Files: fault.c init.c memory.c motorola.c Log Message: synch 2.4.15 commit 37 Index: fault.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/m68k/mm/fault.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- fault.c 14 Jan 2001 19:40:20 -0000 1.1.1.1 +++ fault.c 10 Apr 2002 14:34:36 -0000 1.2 @@ -101,7 +101,7 @@ if (in_interrupt() || !mm) goto no_context; - down(&mm->mmap_sem); + down_read(&mm->mmap_sem); vma = find_vma(mm, address); if (!vma) @@ -168,7 +168,7 @@ #warning should be obsolete now... if (CPU_IS_040_OR_060) flush_tlb_page(vma, address); - up(&mm->mmap_sem); + up_read(&mm->mmap_sem); return 0; /* @@ -203,6 +203,6 @@ current->thread.faddr = address; send_sig: - up(&mm->mmap_sem); + up_read(&mm->mmap_sem); return send_fault_sig(regs); } Index: init.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/m68k/mm/init.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- init.c 14 Jan 2001 19:40:20 -0000 1.1.1.1 +++ init.c 10 Apr 2002 14:34:36 -0000 1.2 @@ -31,12 +31,11 @@ #ifdef CONFIG_ATARI #include <asm/atari_stram.h> #endif +#include <asm/tlb.h> -static unsigned long totalram_pages; +mmu_gather_t mmu_gathers[NR_CPUS]; -#ifdef CONFIG_SUN3 -void mmu_emu_reserve_pages(unsigned long max_page); -#endif +unsigned long totalram_pages = 0; int do_check_pgt_cache(int low, int high) { @@ -86,7 +85,7 @@ void show_mem(void) { unsigned long i; - int free = 0, total = 0, reserved = 0, nonshared = 0, shared = 0; + int free = 0, total = 0, reserved = 0, shared = 0; int cached = 0; printk("\nMem-info:\n"); @@ -101,15 +100,12 @@ cached++; else if (!page_count(mem_map+i)) free++; - else if (page_count(mem_map+i) == 1) - nonshared++; else shared += page_count(mem_map+i) - 1; } printk("%d pages of RAM\n",total); printk("%d free pages\n",free); printk("%d reserved pages\n",reserved); - printk("%d pages nonshared\n",nonshared); printk("%d pages shared\n",shared); printk("%d pages swap cached\n",cached); printk("%ld pages in page table cache\n",pgtable_cache_size); @@ -137,17 +133,11 @@ #ifdef CONFIG_ATARI if (MACH_IS_ATARI) - atari_stram_reserve_pages( start_mem ); -#endif - -#ifdef CONFIG_SUN3 - /* reserve rom pages */ - mmu_emu_reserve_pages(max_mapnr); + atari_stram_mem_init_hook(); #endif /* this will put all memory onto the freelists */ totalram_pages = free_all_bootmem(); - printk("tp:%ld\n", totalram_pages); for (tmp = PAGE_OFFSET ; tmp < (unsigned long)high_memory; tmp += PAGE_SIZE) { #if 0 @@ -201,13 +191,15 @@ #ifdef CONFIG_BLK_DEV_INITRD void free_initrd_mem(unsigned long start, unsigned long end) { + int pages = 0; for (; start < end; start += PAGE_SIZE) { ClearPageReserved(virt_to_page(start)); set_page_count(virt_to_page(start), 1); free_page(start); totalram_pages++; + pages++; } - printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10); + printk ("Freeing initrd memory: %dk freed\n", pages); } #endif @@ -220,15 +212,8 @@ val->sharedram = 0; val->freeram = nr_free_pages(); val->bufferram = atomic_read(&buffermem_pages); - while (i-- > 0) { - if (PageReserved(mem_map+i)) - continue; - val->totalram++; - if (!page_count(mem_map+i)) - continue; - val->sharedram += page_count(mem_map+i) - 1; - } val->totalhigh = 0; val->freehigh = 0; + val->mem_unit = PAGE_SIZE; return; } Index: memory.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/m68k/mm/memory.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- memory.c 25 Feb 2001 23:15:19 -0000 1.1.1.2 +++ memory.c 10 Apr 2002 14:34:36 -0000 1.2 @@ -39,6 +39,7 @@ pgd_set(pgd, (pmd_t *)BAD_PAGETABLE); } +#if 0 pte_t *get_pte_slow(pmd_t *pmd, unsigned long offset) { pte_t *pte; @@ -63,7 +64,9 @@ } return (pte_t *)__pmd_page(*pmd) + offset; } +#endif +#if 0 pmd_t *get_pmd_slow(pgd_t *pgd, unsigned long offset) { pmd_t *pmd; @@ -84,7 +87,7 @@ } return (pmd_t *)__pgd_page(*pgd) + offset; } - +#endif /* ++andreas: {get,free}_pointer_table rewritten to use unused fields from struct page instead of separately kmalloced struct. Stolen from @@ -246,6 +249,14 @@ voff -= m68k_memory[i].size; } while (++i < m68k_num_memory); + /* As a special case allow `__pa(high_memory)'. */ + if (voff == 0) + return m68k_memory[i-1].addr + m68k_memory[i-1].size; + + /* As a special case allow `__pa(high_memory)'. */ + if (voff == 0) + return m68k_memory[i-1].addr + m68k_memory[i-1].size; + return mm_vtop_fallback(vaddr); } #endif @@ -450,16 +461,21 @@ ".chip 68k" \ : : "a" (paddr)) -/* push and invalidate page in both caches */ +/* push and invalidate page in both caches, must disable ints + * to avoid invalidating valid data */ #define pushcl040(paddr) \ - do { push040(paddr); \ + do { unsigned long flags; \ + save_flags(flags); \ + cli(); \ + push040(paddr); \ if (CPU_IS_060) clear040(paddr); \ + restore_flags(flags); \ } while(0) /* push page in both caches, invalidate in i-cache */ +/* RZ: cpush %bc DOES invalidate %ic, regardless of DPI */ #define pushcli040(paddr) \ do { push040(paddr); \ - if (CPU_IS_060) cleari040(paddr); \ } while(0) Index: motorola.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/m68k/mm/motorola.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- motorola.c 14 Jan 2001 19:40:25 -0000 1.1.1.1 +++ motorola.c 10 Apr 2002 14:34:36 -0000 1.2 @@ -286,6 +286,7 @@ } extern char __init_begin, __init_end; +extern unsigned long totalram_pages; void free_initmem(void) { @@ -296,6 +297,7 @@ virt_to_page(addr)->flags &= ~(1 << PG_reserved); set_page_count(virt_to_page(addr), 1); free_page(addr); + totalram_pages++; } } |