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 | } |
|