Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 792 → Rev 793

/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.