Rev 2787 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2787 | Rev 4692 | ||
---|---|---|---|
Line 49... | Line 49... | ||
49 | #include <debug.h> |
49 | #include <debug.h> |
50 | #include <memstr.h> |
50 | #include <memstr.h> |
51 | #include <adt/hash_table.h> |
51 | #include <adt/hash_table.h> |
52 | #include <align.h> |
52 | #include <align.h> |
53 | 53 | ||
54 | static index_t hash(unative_t key[]); |
54 | static size_t hash(unative_t key[]); |
55 | static bool compare(unative_t key[], count_t keys, link_t *item); |
55 | static bool compare(unative_t key[], size_t keys, link_t *item); |
56 | static void remove_callback(link_t *item); |
56 | static void remove_callback(link_t *item); |
57 | 57 | ||
58 | static void ht_mapping_insert(as_t *as, uintptr_t page, uintptr_t frame, |
58 | static void ht_mapping_insert(as_t *as, uintptr_t page, uintptr_t frame, |
59 | int flags); |
59 | int flags); |
60 | static void ht_mapping_remove(as_t *as, uintptr_t page); |
60 | static void ht_mapping_remove(as_t *as, uintptr_t page); |
Line 91... | Line 91... | ||
91 | * |
91 | * |
92 | * @param key Array of two keys (i.e. page and address space). |
92 | * @param key Array of two keys (i.e. page and address space). |
93 | * |
93 | * |
94 | * @return Index into page hash table. |
94 | * @return Index into page hash table. |
95 | */ |
95 | */ |
96 | index_t hash(unative_t key[]) |
96 | size_t hash(unative_t key[]) |
97 | { |
97 | { |
98 | as_t *as = (as_t *) key[KEY_AS]; |
98 | as_t *as = (as_t *) key[KEY_AS]; |
99 | uintptr_t page = (uintptr_t) key[KEY_PAGE]; |
99 | uintptr_t page = (uintptr_t) key[KEY_PAGE]; |
100 | index_t index; |
100 | size_t index; |
101 | 101 | ||
102 | /* |
102 | /* |
103 | * Virtual page addresses have roughly the same probability |
103 | * Virtual page addresses have roughly the same probability |
104 | * of occurring. Least significant bits of VPN compose the |
104 | * of occurring. Least significant bits of VPN compose the |
105 | * hash index. |
105 | * hash index. |
Line 122... | Line 122... | ||
122 | * @param keys Number of keys passed. |
122 | * @param keys Number of keys passed. |
123 | * @param item Item to compare the keys with. |
123 | * @param item Item to compare the keys with. |
124 | * |
124 | * |
125 | * @return true on match, false otherwise. |
125 | * @return true on match, false otherwise. |
126 | */ |
126 | */ |
127 | bool compare(unative_t key[], count_t keys, link_t *item) |
127 | bool compare(unative_t key[], size_t keys, link_t *item) |
128 | { |
128 | { |
129 | pte_t *t; |
129 | pte_t *t; |
130 | 130 | ||
131 | ASSERT(item); |
131 | ASSERT(item); |
132 | ASSERT((keys > 0) && (keys <= PAGE_HT_KEYS)); |
132 | ASSERT((keys > 0) && (keys <= PAGE_HT_KEYS)); |
Line 190... | Line 190... | ||
190 | t->x = (flags & PAGE_EXEC) != 0; |
190 | t->x = (flags & PAGE_EXEC) != 0; |
191 | t->w = (flags & PAGE_WRITE) != 0; |
191 | t->w = (flags & PAGE_WRITE) != 0; |
192 | t->k = !(flags & PAGE_USER); |
192 | t->k = !(flags & PAGE_USER); |
193 | t->c = (flags & PAGE_CACHEABLE) != 0; |
193 | t->c = (flags & PAGE_CACHEABLE) != 0; |
194 | t->p = !(flags & PAGE_NOT_PRESENT); |
194 | t->p = !(flags & PAGE_NOT_PRESENT); |
- | 195 | t->a = false; |
|
- | 196 | t->d = false; |
|
195 | 197 | ||
196 | t->as = as; |
198 | t->as = as; |
197 | t->page = ALIGN_DOWN(page, PAGE_SIZE); |
199 | t->page = ALIGN_DOWN(page, PAGE_SIZE); |
198 | t->frame = ALIGN_DOWN(frame, FRAME_SIZE); |
200 | t->frame = ALIGN_DOWN(frame, FRAME_SIZE); |
199 | 201 |