Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-linus' of git://gitserver.sunplusct.com/linux-2.6-score

* 'for-linus' of git://gitserver.sunplusct.com/linux-2.6-score:
score: include asm-generic/param.h in asm/delay.h.
score: fixed pfn_valid define.
score: add flush_dcahce_page and PG_dcache_dirty define

+31 -9
+3 -1
arch/score/include/asm/cacheflush.h
··· 14 14 extern void flush_icache_all(void); 15 15 extern void flush_icache_range(unsigned long start, unsigned long end); 16 16 extern void flush_dcache_range(unsigned long start, unsigned long end); 17 + extern void flush_dcache_page(struct page *page); 18 + 19 + #define PG_dcache_dirty PG_arch_1 17 20 18 21 #define flush_cache_dup_mm(mm) do {} while (0) 19 22 #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 20 - #define flush_dcache_page(page) do {} while (0) 21 23 #define flush_dcache_mmap_lock(mapping) do {} while (0) 22 24 #define flush_dcache_mmap_unlock(mapping) do {} while (0) 23 25 #define flush_cache_vmap(start, end) do {} while (0)
+2
arch/score/include/asm/delay.h
··· 1 1 #ifndef _ASM_SCORE_DELAY_H 2 2 #define _ASM_SCORE_DELAY_H 3 3 4 + #include <asm-generic/param.h> 5 + 4 6 static inline void __delay(unsigned long loops) 5 7 { 6 8 /* 3 cycles per loop. */
+1 -1
arch/score/include/asm/page.h
··· 74 74 #define page_to_bus(page) (page_to_phys(page)) 75 75 #define phys_to_page(paddr) (pfn_to_page(phys_to_pfn(paddr))) 76 76 77 - #define pfn_valid(pfn) ((pfn) >= min_low_pfn && (pfn) < max_mapnr) 77 + #define pfn_valid(pfn) (((pfn) >= min_low_pfn) && ((pfn) < max_low_pfn)) 78 78 79 79 #define ARCH_PFN_OFFSET (PAGE_OFFSET >> PAGE_SHIFT) 80 80
+1
arch/score/kernel/setup.c
··· 49 49 50 50 min_low_pfn = PFN_UP(MEMORY_START); 51 51 max_low_pfn = PFN_UP(MEMORY_START + MEMORY_SIZE); 52 + max_mapnr = max_low_pfn - min_low_pfn; 52 53 53 54 /* Initialize the boot-time allocator with low memory only. */ 54 55 bootmap_size = init_bootmem_node(NODE_DATA(0), start_pfn,
+24 -2
arch/score/mm/cache.c
··· 29 29 #include <linux/mm.h> 30 30 #include <linux/module.h> 31 31 #include <linux/sched.h> 32 + #include <linux/fs.h> 32 33 33 34 #include <asm/mmu_context.h> 34 35 ··· 52 51 } 53 52 } 54 53 54 + void flush_dcache_page(struct page *page) 55 + { 56 + struct address_space *mapping = page_mapping(page); 57 + unsigned long addr; 58 + 59 + if (PageHighMem(page)) 60 + return; 61 + if (mapping && !mapping_mapped(mapping)) { 62 + set_bit(PG_dcache_dirty, &(page)->flags); 63 + return; 64 + } 65 + 66 + /* 67 + * We could delay the flush for the !page_mapping case too. But that 68 + * case is for exec env/arg pages and those are %99 certainly going to 69 + * get faulted into the tlb (and thus flushed) anyways. 70 + */ 71 + addr = (unsigned long) page_address(page); 72 + flush_data_cache_page(addr); 73 + } 74 + 55 75 /* called by update_mmu_cache. */ 56 76 void __update_cache(struct vm_area_struct *vma, unsigned long address, 57 77 pte_t pte) ··· 85 63 if (unlikely(!pfn_valid(pfn))) 86 64 return; 87 65 page = pfn_to_page(pfn); 88 - if (page_mapping(page) && test_bit(PG_arch_1, &page->flags)) { 66 + if (page_mapping(page) && test_bit(PG_dcache_dirty, &(page)->flags)) { 89 67 addr = (unsigned long) page_address(page); 90 68 if (exec) 91 69 flush_data_cache_page(addr); 92 - clear_bit(PG_arch_1, &page->flags); 70 + clear_bit(PG_dcache_dirty, &(page)->flags); 93 71 } 94 72 } 95 73
-5
arch/score/mm/init.c
··· 83 83 unsigned long codesize, reservedpages, datasize, initsize; 84 84 unsigned long tmp, ram = 0; 85 85 86 - max_mapnr = max_low_pfn; 87 86 high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT); 88 87 totalram_pages += free_all_bootmem(); 89 88 totalram_pages -= setup_zero_page(); /* Setup zeroed pages. */ ··· 99 100 codesize = (unsigned long) &_etext - (unsigned long) &_text; 100 101 datasize = (unsigned long) &_edata - (unsigned long) &_etext; 101 102 initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin; 102 - 103 - kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT); 104 - kclist_add(&kcore_vmalloc, (void *) VMALLOC_START, 105 - VMALLOC_END - VMALLOC_START); 106 103 107 104 printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, " 108 105 "%ldk reserved, %ldk data, %ldk init, %ldk highmem)\n",