Prefaulting of utcb pages seem to work.

Next: fs0 should shmat() on others' utcbs.
This commit is contained in:
Bahadir Balban
2008-03-22 15:57:20 +00:00
parent 0dfbde6bc0
commit 82a7228d89
9 changed files with 211 additions and 78 deletions

View File

@@ -68,8 +68,9 @@ struct tcb {
unsigned long map_start;
unsigned long map_end;
/* UTCB address */
/* UTCB information */
unsigned long utcb_address;
int utcb_mapped;
/* Virtual memory areas */
struct list_head vm_area_list;
@@ -83,6 +84,6 @@ struct tcb *find_task(int tid);
struct initdata;
void init_pm(struct initdata *initdata);
void send_task_data(l4id_t requester);
int send_task_data(l4id_t requester);
#endif /* __TASK_H__ */

View File

@@ -2,6 +2,7 @@
#define __MM0_UTCB_H__
#include <l4lib/types.h>
#include <task.h>
void *utcb_vaddr_new(void);
int utcb_pool_init(void);
@@ -9,4 +10,7 @@ int utcb_pool_init(void);
/* IPC to send utcb address information to tasks */
int task_send_utcb_address(l4id_t sender, l4id_t taskid);
/* Prefault an *mmaped* utcb */
int utcb_prefault(struct tcb *task, unsigned int vmflags);
#endif

View File

@@ -81,6 +81,7 @@ struct fault_data {
fault_kdata_t *kdata; /* Generic data flonged by the kernel */
unsigned int reason; /* Generic fault reason flags */
unsigned int address; /* Aborted address */
unsigned int pte_flags; /* Generic protection flags on pte */
struct vm_area *vma; /* Inittask-related fault data */
struct tcb *task; /* Inittask-related fault data */
};
@@ -206,7 +207,14 @@ struct vm_file *vm_file_create(void);
int vm_object_delete(struct vm_object *vmo);
void vm_object_print(struct vm_object *vmo);
/* Used for pre-faulting a page from mm0 */
int prefault_page(struct tcb *task, unsigned long address,
unsigned int vmflags);
/* To get currently mapped page of a virtual address on a task */
struct page *task_virt_to_page(struct tcb *t, unsigned long virtual);
/* Main page fault entry point */
void page_fault_handler(l4id_t tid, fault_kdata_t *fkdata);
int page_fault_handler(l4id_t tid, fault_kdata_t *fkdata);
#endif /* __VM_AREA_H__ */