Subversion Repositories HelenOS-historic

Rev

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
}