/kernel/trunk/genarch/include/mm/page_pt.h |
---|
84,7 → 84,7 |
#define SET_PTL3_FLAGS(ptl2, i, x) SET_PTL3_FLAGS_ARCH(ptl2, i, x) |
#define SET_FRAME_FLAGS(ptl3, i, x) SET_FRAME_FLAGS_ARCH(ptl3, i, x) |
extern page_operations_t page_pt_operations; |
extern page_mapping_operations_t pt_mapping_operations; |
extern void page_mapping_insert_pt(as_t *as, __address page, __address frame, int flags); |
extern pte_t *page_mapping_find_pt(as_t *as, __address page); |
/kernel/trunk/genarch/include/mm/page_ht.h |
---|
57,9 → 57,8 |
unsigned p : 1; /**< Present. */ |
}; |
extern page_operations_t page_ht_operations; |
extern page_mapping_operations_t ht_mapping_operations; |
extern spinlock_t page_ht_lock; |
extern hash_table_t page_ht; |
extern hash_table_operations_t ht_operations; |
/kernel/trunk/genarch/src/mm/page_pt.c |
---|
40,7 → 40,7 |
static void pt_mapping_insert(as_t *as, __address page, __address frame, int flags); |
static pte_t *pt_mapping_find(as_t *as, __address page); |
page_operations_t page_pt_operations = { |
page_mapping_operations_t pt_mapping_operations = { |
.mapping_insert = pt_mapping_insert, |
.mapping_find = pt_mapping_find |
}; |
/kernel/trunk/genarch/src/mm/page_ht.c |
---|
67,7 → 67,8 |
.remove_callback = remove_callback |
}; |
page_operations_t page_ht_operations = { |
/** Page mapping operations for page hash table architectures. */ |
page_mapping_operations_t ht_mapping_operations = { |
.mapping_insert = ht_mapping_insert, |
.mapping_find = ht_mapping_find |
}; |
119,7 → 120,7 |
/* |
* Convert item to PTE. |
*/ |
t = list_get_instance(item, pte_t, link); |
t = hash_table_get_instance(item, pte_t, link); |
if (keys == PAGE_HT_KEYS) { |
return (key[KEY_AS] == (__address) t->as) && (key[KEY_PAGE] == t->page); |
141,7 → 142,7 |
/* |
* Convert item to PTE. |
*/ |
t = list_get_instance(item, pte_t, link); |
t = hash_table_get_instance(item, pte_t, link); |
free(t); |
} |
199,7 → 200,7 |
hlp = hash_table_find(&page_ht, key); |
if (hlp) |
t = list_get_instance(hlp, pte_t, link); |
t = hash_table_get_instance(hlp, pte_t, link); |
spinlock_unlock(&page_ht_lock); |
return t; |
/kernel/trunk/generic/include/adt/hash_table.h |
---|
66,7 → 66,7 |
void (*remove_callback)(link_t *item); |
}; |
#define hash_table_get_instance(item,type,member) list_get_instance((item),(type),(member)) |
#define hash_table_get_instance(item, type, member) list_get_instance((item), type, member) |
extern void hash_table_create(hash_table_t *h, count_t m, count_t max_keys, hash_table_operations_t *op); |
extern void hash_table_insert(hash_table_t *h, __native key[], link_t *item); |
/kernel/trunk/generic/include/mm/page.h |
---|
60,13 → 60,13 |
#define PAGE_GLOBAL (1<<PAGE_GLOBAL_SHIFT) |
/** Operations to manipulate page mappings. */ |
struct page_operations { |
struct page_mapping_operations { |
void (* mapping_insert)(as_t *as, __address page, __address frame, int flags); |
pte_t *(* mapping_find)(as_t *as, __address page); |
}; |
typedef struct page_operations page_operations_t; |
typedef struct page_mapping_operations page_mapping_operations_t; |
extern page_operations_t *page_operations; |
extern page_mapping_operations_t *page_mapping_operations; |
extern void page_init(void); |
extern void page_mapping_insert(as_t *as, __address page, __address frame, int flags); |
/kernel/trunk/generic/src/mm/page.c |
---|
43,7 → 43,7 |
#include <arch.h> |
/** Virtual operations for page subsystem. */ |
page_operations_t *page_operations = NULL; |
page_mapping_operations_t *page_mapping_operations = NULL; |
void page_init(void) |
{ |
85,10 → 85,10 |
*/ |
void page_mapping_insert(as_t *as, __address page, __address frame, int flags) |
{ |
ASSERT(page_operations); |
ASSERT(page_operations->mapping_insert); |
ASSERT(page_mapping_operations); |
ASSERT(page_mapping_operations->mapping_insert); |
page_operations->mapping_insert(as, page, frame, flags); |
page_mapping_operations->mapping_insert(as, page, frame, flags); |
} |
/** Find mapping for virtual page |
104,8 → 104,8 |
*/ |
pte_t *page_mapping_find(as_t *as, __address page) |
{ |
ASSERT(page_operations); |
ASSERT(page_operations->mapping_find); |
ASSERT(page_mapping_operations); |
ASSERT(page_mapping_operations->mapping_find); |
return page_operations->mapping_find(as, page); |
return page_mapping_operations->mapping_find(as, page); |
} |
/kernel/trunk/arch/sparc64/src/mm/frame.c |
---|
33,8 → 33,8 |
void frame_arch_init(void) |
{ |
/* |
* Workaround to prevent slab allocator from allocating fram 0, |
* which is not, at that time, mapped. |
* Workaround to prevent slab allocator from allocating frame 0, |
* which is not mapped by OFW. |
*/ |
frame_region_not_free(0, FRAME_SIZE); |
/kernel/trunk/arch/sparc64/src/mm/page.c |
---|
31,5 → 31,5 |
void page_arch_init(void) |
{ |
page_operations = &page_ht_operations; |
page_mapping_operations = &ht_mapping_operations; |
} |
/kernel/trunk/arch/ia64/src/mm/page.c |
---|
47,7 → 47,7 |
/** Initialize ia64 virtual address translation subsystem. */ |
void page_arch_init(void) |
{ |
page_operations = &page_ht_operations; |
page_mapping_operations = &ht_mapping_operations; |
pk_disable(); |
set_environment(); |
} |
/kernel/trunk/arch/ppc32/src/mm/page.c |
---|
35,5 → 35,5 |
void page_arch_init(void) |
{ |
page_operations = &page_pt_operations; |
page_mapping_operations = &pt_mapping_operations; |
} |
/kernel/trunk/arch/amd64/src/mm/page.c |
---|
43,7 → 43,7 |
__address cur; |
if (config.cpu_active == 1) { |
page_operations = &page_pt_operations; |
page_mapping_operations = &pt_mapping_operations; |
/* |
* PA2KA(identity) mapping for all frames. |
/kernel/trunk/arch/mips32/src/mm/page.c |
---|
32,5 → 32,5 |
void page_arch_init(void) |
{ |
page_operations = &page_pt_operations; |
page_mapping_operations = &pt_mapping_operations; |
} |
/kernel/trunk/arch/ia32/src/mm/page.c |
---|
47,7 → 47,7 |
__address cur; |
if (config.cpu_active == 1) { |
page_operations = &page_pt_operations; |
page_mapping_operations = &pt_mapping_operations; |
/* |
* PA2KA(identity) mapping for all frames until last_frame. |