Rev 792 | Rev 1266 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 792 | Rev 1044 | ||
---|---|---|---|
Line 32... | Line 32... | ||
32 | #include <mm/frame.h> |
32 | #include <mm/frame.h> |
33 | #include <arch/types.h> |
33 | #include <arch/types.h> |
34 | #include <typedefs.h> |
34 | #include <typedefs.h> |
35 | #include <memstr.h> |
35 | #include <memstr.h> |
36 | #include <adt/hash_table.h> |
36 | #include <adt/hash_table.h> |
- | 37 | #include <synch/spinlock.h> |
|
37 | 38 | ||
38 | static pte_t *ht_create(int flags); |
39 | static pte_t *ht_create(int flags); |
39 | 40 | ||
- | 41 | static void ht_lock(as_t *as, bool lock); |
|
- | 42 | static void ht_unlock(as_t *as, bool unlock); |
|
- | 43 | ||
40 | as_operations_t as_ht_operations = { |
44 | as_operations_t as_ht_operations = { |
41 | .page_table_create = ht_create |
45 | .page_table_create = ht_create, |
- | 46 | .page_table_lock = ht_lock, |
|
- | 47 | .page_table_unlock = ht_unlock, |
|
42 | }; |
48 | }; |
43 | 49 | ||
44 | 50 | ||
45 | /** Page hash table create. |
51 | /** Page hash table create. |
46 | * |
52 | * |
Line 56... | Line 62... | ||
56 | if (flags & FLAG_AS_KERNEL) { |
62 | if (flags & FLAG_AS_KERNEL) { |
57 | hash_table_create(&page_ht, PAGE_HT_ENTRIES, 2, &ht_operations); |
63 | hash_table_create(&page_ht, PAGE_HT_ENTRIES, 2, &ht_operations); |
58 | } |
64 | } |
59 | return NULL; |
65 | return NULL; |
60 | } |
66 | } |
- | 67 | ||
- | 68 | /** Lock page table. |
|
- | 69 | * |
|
- | 70 | * Lock address space and page hash table. |
|
- | 71 | * Interrupts must be disabled. |
|
- | 72 | * |
|
- | 73 | * @param as Address space. |
|
- | 74 | * @param lock If false, do not attempt to lock the address space. |
|
- | 75 | */ |
|
- | 76 | void ht_lock(as_t *as, bool lock) |
|
- | 77 | { |
|
- | 78 | if (lock) |
|
- | 79 | spinlock_lock(&as->lock); |
|
- | 80 | spinlock_lock(&page_ht_lock); |
|
- | 81 | } |
|
- | 82 | ||
- | 83 | /** Unlock page table. |
|
- | 84 | * |
|
- | 85 | * Unlock address space and page hash table. |
|
- | 86 | * Interrupts must be disabled. |
|
- | 87 | * |
|
- | 88 | * @param as Address space. |
|
- | 89 | * @param unlock If false, do not attempt to lock the address space. |
|
- | 90 | */ |
|
- | 91 | void ht_unlock(as_t *as, bool unlock) |
|
- | 92 | { |
|
- | 93 | spinlock_unlock(&page_ht_lock); |
|
- | 94 | if (unlock) |
|
- | 95 | spinlock_unlock(&as->lock); |
|
- | 96 | } |