Changeset 0c0410b in mainline
- Timestamp:
- 2006-01-10T13:25:54Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e30bc2a
- Parents:
- 42edee68
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia64/include/mm/page.h
r42edee68 r0c0410b 41 41 #define SET_PTL0_ADDRESS_ARCH(ptl0) 42 42 43 /** Implementation of page hash table interface. */ 44 #define HT_HASH_ARCH(page, asid) 0 45 #define HT_COMPARE_ARCH(page, asid, t) 0 46 #define HT_SLOT_EMPTY_ARCH(t) 1 47 #define HT_GET_NEXT_ARCH(t) 0 48 #define HT_SET_NEXT_ARCH(t, s) 49 #define HT_SET_RECORD_ARCH(t, page, asid, frame, flags) 50 43 51 extern void page_arch_init(void); 44 52 -
arch/sparc64/include/mm/page.h
r42edee68 r0c0410b 42 42 #define SET_PTL0_ADDRESS_ARCH(ptl0) 43 43 44 /** Implementation of page hash table interface. */ 45 #define HT_HASH_ARCH(page, asid) 0 46 #define HT_COMPARE_ARCH(page, asid, t) 0 47 #define HT_SLOT_EMPTY_ARCH(t) 1 48 #define HT_GET_NEXT_ARCH(t) 0 49 #define HT_SET_NEXT_ARCH(t, s) 50 #define HT_SET_RECORD_ARCH(t, page, asid, frame, flags) 51 44 52 union page_address { 45 53 __address address; -
genarch/include/mm/page_ht.h
r42edee68 r0c0410b 29 29 /* 30 30 * This is the generic page hash table interface. 31 * Architectures that use single page hash table for 32 * storing page translations must implement it. 31 33 */ 32 34 … … 36 38 #include <mm/page.h> 37 39 40 /** Hash function. 41 * 42 * @param page Virtual address. Only vpn bits will be used. 43 * @param asid Address space identifier. 44 * 45 * @return Pointer to hash table typed pte_t *. 46 */ 47 #define HT_HASH(page, asid) HT_HASH_ARCH(page, asid) 48 49 /** Compare PTE with page and asid. 50 * 51 * @param page Virtual address. Only vpn bits will be used. 52 * @param asid Address space identifier. 53 * @param t PTE. 54 * 55 * @return 1 on match, 0 otherwise. 56 */ 57 #define HT_COMPARE(page, asid, t) HT_COMPARE_ARCH(page, asid, t) 58 59 /** Identify empty hash table slots. 60 * 61 * @param t Pointer ro hash table typed pte_t *. 62 * 63 * @return 1 if the slot is empty, 0 otherwise. 64 */ 65 #define HT_SLOT_EMPTY(t) HT_SLOT_EMPTY_ARCH(t) 66 67 /** Return next record in collision chain. 68 * 69 * @param t PTE. 70 * 71 * @return Successor of PTE or NULL. 72 */ 73 #define HT_GET_NEXT(t) HT_GET_NEXT_ARCH(t) 74 75 /** Set successor in collision chain. 76 * 77 * @param t PTE. 78 * @param s Successor or NULL. 79 */ 80 #define HT_SET_NEXT(t, s) HT_SET_NEXT_ARCH(t, s) 81 82 /** Set page hash table record. 83 * 84 * @param t PTE. 85 * @param page Virtual address. Only vpn bits will be used. 86 * @param asid Address space identifier. 87 * @param frame Physical address. Only pfn bits will be used. 88 * @param flags Flags. See mm/page.h. 89 */ 90 #define HT_SET_RECORD(t, page, asid, frame, flags) HT_SET_RECORD_ARCH(t, page, asid, frame, flags) 91 38 92 extern page_operations_t page_ht_operations; 39 93 -
genarch/src/mm/page_ht.c
r42edee68 r0c0410b 30 30 #include <mm/page.h> 31 31 #include <mm/frame.h> 32 #include <mm/heap.h> 32 33 #include <arch/mm/asid.h> 33 34 #include <arch/types.h> 34 35 #include <typedefs.h> 35 36 #include <arch/asm.h> 37 #include <debug.h> 36 38 37 39 static void ht_mapping_insert(__address page, asid_t asid, __address frame, int flags, __address root); … … 52 54 * @param frame Physical address of memory frame to which the mapping is done. 53 55 * @param flags Flags to be used for mapping. 54 * @param root Explicit PTL0 address.56 * @param root Ignored. 55 57 */ 56 void ht_mapping_insert(__address page, 58 void ht_mapping_insert(__address page, asid_t asid, __address frame, int flags, __address root) 57 59 { 60 pte_t *t, *u = NULL; 61 62 t = HT_HASH(page, asid); 63 if (!HT_SLOT_EMPTY(t)) { 64 u = (pte_t *) malloc(sizeof(pte_t)); /* FIXME: use slab allocator for this */ 65 if (!u) 66 panic("could not allocate memory for hash table\n"); 67 *u = *t; 68 } 69 HT_SET_NEXT(t, u); 70 HT_SET_RECORD(t, page, asid, frame, flags); 58 71 } 59 72 … … 64 77 * @param page Virtual page. 65 78 * @param asid Address space to wich page belongs. 66 * @param root PTL0 address if non-zero.79 * @param root Ignored. 67 80 * 68 * @return NULL if there is no such mapping; entry from PTL3 describing themapping otherwise.81 * @return NULL if there is no such mapping; requested mapping otherwise. 69 82 */ 70 83 pte_t *ht_mapping_find(__address page, asid_t asid, __address root) 71 84 { 72 return NULL; 85 pte_t *t; 86 87 t = HT_HASH(page, asid); 88 while (!HT_COMPARE(page, asid, t) && HT_GET_NEXT(t)) 89 t = HT_GET_NEXT(t); 90 91 return HT_COMPARE(page, asid, t) ? t : NULL; 73 92 } -
generic/include/mm/page.h
r42edee68 r0c0410b 43 43 #define PAGE_WRITE_SHIFT 4 44 44 #define PAGE_EXEC_SHIFT 5 45 #define PAGE_GLOBAL_SHIFT 6 45 46 46 47 #define PAGE_NOT_CACHEABLE (0<<PAGE_CACHEABLE_SHIFT) … … 57 58 #define PAGE_EXEC (1<<PAGE_EXEC_SHIFT) 58 59 60 #define PAGE_GLOBAL (1<<PAGE_GLOBAL_SHIFT) 61 62 /** Operations to manipulate page mappings. */ 59 63 struct page_operations { 60 64 void (* mapping_insert)(__address page, asid_t asid, __address frame, int flags, __address root); -
generic/src/mm/page.c
r42edee68 r0c0410b 96 96 * @param root PTL0 address if non-zero. 97 97 * 98 * @return NULL if there is no such mapping; entry from PTL3 describing themapping otherwise.98 * @return NULL if there is no such mapping; requested mapping otherwise. 99 99 */ 100 100 pte_t *page_mapping_find(__address page, asid_t asid, __address root)
Note:
See TracChangeset
for help on using the changeset viewer.