Subversion Repositories HelenOS-historic

Rev

Rev 902 | Rev 1044 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 902 Rev 922
Line 39... Line 39...
39
#include <synch/spinlock.h>
39
#include <synch/spinlock.h>
40
#include <arch.h>
40
#include <arch.h>
41
#include <debug.h>
41
#include <debug.h>
42
#include <memstr.h>
42
#include <memstr.h>
43
#include <adt/hash_table.h>
43
#include <adt/hash_table.h>
-
 
44
#include <align.h>
44
 
45
 
45
static index_t hash(__native key[]);
46
static index_t hash(__native key[]);
46
static bool compare(__native key[], count_t keys, link_t *item);
47
static bool compare(__native key[], count_t keys, link_t *item);
47
static void remove_callback(link_t *item);
48
static void remove_callback(link_t *item);
48
 
49
 
Line 162... Line 163...
162
 * @param flags Flags to be used for mapping.
163
 * @param flags Flags to be used for mapping.
163
 */
164
 */
164
void ht_mapping_insert(as_t *as, __address page, __address frame, int flags)
165
void ht_mapping_insert(as_t *as, __address page, __address frame, int flags)
165
{
166
{
166
    pte_t *t;
167
    pte_t *t;
167
    __native key[2] = { (__address) as, page };
168
    __native key[2] = { (__address) as, page = ALIGN_DOWN(page, PAGE_SIZE) };
168
   
169
   
169
    spinlock_lock(&page_ht_lock);
170
    spinlock_lock(&page_ht_lock);
170
 
171
 
171
    if (!hash_table_find(&page_ht, key)) {
172
    if (!hash_table_find(&page_ht, key)) {
172
        t = (pte_t *) malloc(sizeof(pte_t), FRAME_ATOMIC);
173
        t = (pte_t *) malloc(sizeof(pte_t), FRAME_ATOMIC);
Line 200... Line 201...
200
 * @param as Address space to wich page belongs.
201
 * @param as Address space to wich page belongs.
201
 * @param page Virtual address of the page to be demapped.
202
 * @param page Virtual address of the page to be demapped.
202
 */
203
 */
203
void ht_mapping_remove(as_t *as, __address page)
204
void ht_mapping_remove(as_t *as, __address page)
204
{
205
{
205
    __native key[2] = { (__address) as, page };
206
    __native key[2] = { (__address) as, page = ALIGN_DOWN(page, PAGE_SIZE) };
206
   
207
   
207
    spinlock_lock(&page_ht_lock);
208
    spinlock_lock(&page_ht_lock);
208
 
209
 
209
    /*
210
    /*
210
     * Note that removed PTE's will be freed
211
     * Note that removed PTE's will be freed
Line 229... Line 230...
229
 */
230
 */
230
pte_t *ht_mapping_find(as_t *as, __address page)
231
pte_t *ht_mapping_find(as_t *as, __address page)
231
{
232
{
232
    link_t *hlp;
233
    link_t *hlp;
233
    pte_t *t = NULL;
234
    pte_t *t = NULL;
234
    __native key[2] = { (__address) as, page };
235
    __native key[2] = { (__address) as, page = ALIGN_DOWN(page, PAGE_SIZE) };
235
   
236
   
236
    spinlock_lock(&page_ht_lock);
237
    spinlock_lock(&page_ht_lock);
237
 
238
 
238
    hlp = hash_table_find(&page_ht, key);
239
    hlp = hash_table_find(&page_ht, key);
239
    if (hlp)
240
    if (hlp)