mirror of
https://github.com/drasko/codezero.git
synced 2026-01-28 18:53:14 +01:00
Prefaulting of utcb pages seem to work.
Next: fs0 should shmat() on others' utcbs.
This commit is contained in:
@@ -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__ */
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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__ */
|
||||
|
||||
Reference in New Issue
Block a user