Changeset 9f63a83 in mainline
- Timestamp:
- 2007-01-19T12:21:27Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 718d600
- Parents:
- 81cfefa
- Location:
- kernel
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/include/mm/cache.h
r81cfefa r9f63a83 36 36 #define KERN_sparc64_CACHE_H_ 37 37 38 #include <mm/page.h> 39 #include <mm/frame.h> 40 41 #define dcache_flush_page(p) \ 42 dcache_flush_color(PAGE_COLOR((p))) 43 #define dcache_flush_frame(p, f) \ 44 dcache_flush_tag(PAGE_COLOR((p)), ADDR2PFN((f))); 45 38 46 extern void dcache_flush(void); 47 extern void dcache_flush_color(int c); 48 extern void dcache_flush_tag(int c, pfn_t tag); 39 49 40 50 #endif -
kernel/arch/sparc64/src/mm/cache_asm.S
r81cfefa r9f63a83 29 29 #include <arch/arch.h> 30 30 31 #define DCACHE_SIZE (16 *1024)31 #define DCACHE_SIZE (16 * 1024) 32 32 #define DCACHE_LINE_SIZE 32 33 33 34 #define DCACHE_TAG_SHIFT 2 35 36 .register %g2, #scratch 37 .register %g3, #scratch 38 39 /** Flush the whole D-cache. */ 34 40 .global dcache_flush 35 41 dcache_flush: … … 43 49 membar #Sync 44 50 51 /** Flush only D-cache lines of one virtual color. 52 * 53 * @param o0 Virtual color to be flushed. 54 */ 55 .global dcache_flush_color 56 dcache_flush_color: 57 mov (DCACHE_SIZE / DCACHE_LINE_SIZE) / 2, %g1 58 set DCACHE_SIZE / 2, %g2 59 sllx %g2, %o0, %g2 60 sub %g2, DCACHE_LINE_SIZE, %g2 61 0: stxa %g0, [%g2] ASI_DCACHE_TAG 62 membar #Sync 63 subcc %g1, 1, %g1 64 bnz,pt %xcc, 0b 65 sub %g2, DCACHE_LINE_SIZE, %g2 66 retl 67 nop 68 69 /** Flush only D-cache lines of one virtual color and one tag. 70 * 71 * @param o0 Virtual color to lookup the tag. 72 * @param o1 Tag of the cachelines to be flushed. 73 */ 74 .global dcache_flush_tag 75 dcache_flush_tag: 76 mov (DCACHE_SIZE / DCACHE_LINE_SIZE) / 2, %g1 77 set DCACHE_SIZE / 2, %g2 78 sllx %g2, %o0, %g2 79 sub %g2, DCACHE_LINE_SIZE, %g2 80 0: ldxa [%g2] ASI_DCACHE_TAG, %g3 81 srlx %g3, DCACHE_TAG_SHIFT, %g3 82 cmp %g3, %o1 83 bnz 1f 84 nop 85 stxa %g0, [%g2] ASI_DCACHE_TAG 86 membar #Sync 87 1: subcc %g1, 1, %g1 88 bnz,pt %xcc, 0b 89 sub %g2, DCACHE_LINE_SIZE, %g2 90 retl 91 nop -
kernel/generic/src/mm/backend_anon.c
r81cfefa r9f63a83 51 51 #include <align.h> 52 52 #include <arch.h> 53 54 #ifdef CONFIG_VIRT_IDX_DCACHE 55 #include <arch/mm/cache.h> 56 #endif 53 57 54 58 static int anon_page_fault(as_area_t *area, uintptr_t addr, pf_access_t access); … … 154 158 * 155 159 * @param area Ignored. 156 * @param page Ignored.160 * @param page Virtual address of the page corresponding to the frame. 157 161 * @param frame Frame to be released. 158 162 */ … … 160 164 { 161 165 frame_free(frame); 166 #ifdef CONFIG_VIRT_IDX_DCACHE 167 dcache_flush_frame(page, frame); 168 #endif 162 169 } 163 170 -
kernel/generic/src/mm/backend_elf.c
r81cfefa r9f63a83 51 51 #include <arch.h> 52 52 53 #ifdef CONFIG_VIRT_IDX_DCACHE 54 #include <arch/mm/cache.h> 55 #endif 56 53 57 static int elf_page_fault(as_area_t *area, uintptr_t addr, pf_access_t access); 54 58 static void elf_frame_free(as_area_t *area, uintptr_t page, uintptr_t frame); … … 220 224 */ 221 225 frame_free(frame); 226 #ifdef CONFIG_VIRT_IDX_DCACHE 227 dcache_flush_frame(page, frame); 228 #endif 222 229 } 223 230 } else { … … 228 235 */ 229 236 frame_free(frame); 237 #ifdef CONFIG_VIRT_IDX_DCACHE 238 dcache_flush_frame(page, frame); 239 #endif 230 240 } 231 241 }
Note:
See TracChangeset
for help on using the changeset viewer.