#include "pager.h"
#include "dm-if.h"
#include "app.h"
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <l4/sys/types.h>
#include <l4/env/errno.h>
#include <l4/sys/ipc.h>
#include <l4/sys/syscalls.h>
#include <l4/sys/kernel.h>
#include <l4/sys/cache.h>
#include <l4/thread/thread.h>
#include <l4/rmgr/librmgr.h>
#include <l4/l4rm/l4rm.h>
#include <l4/util/l4_macros.h>
#include <l4/loader/loader-client.h>
#include <l4/generic_ts/generic_ts.h>
#include <l4/dm_phys/dm_phys.h>
#include <l4/sigma0/sigma0.h>
#include <l4/sigma0/kip.h>
Defines | |
| #define | dbg_pf(x...) |
| #define | dbg_adap_pf(x...) |
| #define | dbg_incoming(x...) |
Functions | |
| static int | pf_in_app (l4_addr_t addr, app_t *app, app_area_t **app_area) |
| Return <>0 if address lays inside an application area. | |
| l4_addr_t fastcall | addr_app_to_here (app_t *app, l4_addr_t addr) |
| Translate app address into here address. | |
| static void | rmgr_memmap_error (const char *format,...) |
| Handle failed rmgr requests. | |
| static void | forward_pf_rmgr (app_t *app, l4_umword_t *dw1, l4_umword_t *dw2, void **reply, unsigned int log2_size) |
| Forward a pagefault to rmgr. | |
| static void | handle_extended_sigma0_request (app_t *app, l4_umword_t *dw1, l4_umword_t *dw2, void **reply) |
| Forward an I/O pagefault to rmgr. | |
| static void | forward_pf_ds (app_t *app, app_area_t *aa, l4_umword_t *dw1, l4_umword_t *dw2, void **reply) |
| Forward a pagefault to dataspace manager. | |
| static int | map_kernel_info_page (void) |
| Map kernel info page from rmgr. | |
| int | is_fiasco (void) |
| static void | app_pager_thread (void *data) |
| Pager thread for the application. | |
| int | start_app_pager (void) |
| Create the application's pager. | |
Variables | |
| l4_threadid_t | app_pager_id = L4_INVALID_ID |
| pager thread. | |
| static l4_addr_t | pager_map_addr_4K = 0 |
| map addr for 4K pages. | |
| static l4_addr_t | pager_map_addr_4M = 0 |
| map addr for 4M pages. | |
| static l4_kernel_info_t * | kip |
| address of KI page. | |
| static l4_threadid_t | _rmgr_pager_id |
| thread id of roottask pager | |
Should be moved to an own L4 server.
| l4_addr_t fastcall addr_app_to_here | ( | app_t * | app, | |
| l4_addr_t | addr | |||
| ) |
Translate app address into here address.
| static void app_pager_thread | ( | void * | data | ) | [static] |
Pager thread for the application.
| data | pointer to parameter struct |
< don't page other regions
< don't page other regions
< forward pagefaults to ds
| static void forward_pf_ds | ( | app_t * | app, | |
| app_area_t * | aa, | |||
| l4_umword_t * | dw1, | |||
| l4_umword_t * | dw2, | |||
| void ** | reply | |||
| ) | [static] |
Forward a pagefault to dataspace manager.
| app | application descriptor | |
| aa | application area descriptor | |
| dw1 | pagefault address | |
| dw2 | pagefault EIP |
| reply | type of reply message |
< don't page superpages
| static void forward_pf_rmgr | ( | app_t * | app, | |
| l4_umword_t * | dw1, | |||
| l4_umword_t * | dw2, | |||
| void ** | reply, | |||
| unsigned int | log2_size | |||
| ) | [static] |
Forward a pagefault to rmgr.
| app | application descriptor | |
| dw1 | pagefault address | |
| dw2 | pagefault EIP |
| reply | type of reply message | |
| log2_size | size of flexpage (4k or 4M) |
| static void handle_extended_sigma0_request | ( | app_t * | app, | |
| l4_umword_t * | dw1, | |||
| l4_umword_t * | dw2, | |||
| void ** | reply | |||
| ) | [static] |
Forward an I/O pagefault to rmgr.
| app | application descriptor | |
| dw1 | pagefault address | |
| dw2 | pagefault EIP |
| reply | type of reply message | |
| skip_reply | don't send a reply message |
| app | application descriptor | |
| dw1 | extended sigma0 code | |
| dw2 | fpage |
| reply | type of reply message |
| static int map_kernel_info_page | ( | void | ) | [static] |
Map kernel info page from rmgr.
| static int pf_in_app | ( | l4_addr_t | addr, | |
| app_t * | app, | |||
| app_area_t ** | app_area | |||
| ) | [inline, static] |
Return <>0 if address lays inside an application area.
| addr | address of the page fault occured where | |
| app | application descriptor |
| app_area | pointer to area the address is situated in |
< entry is valid
| static void rmgr_memmap_error | ( | const char * | format, | |
| ... | ||||
| ) | [static] |
Handle failed rmgr requests.
| int start_app_pager | ( | void | ) |
Create the application's pager.
| l4_threadid_t app_pager_id = L4_INVALID_ID |
pager thread.
l4_kernel_info_t* kip [static] |
address of KI page.
l4_addr_t pager_map_addr_4K = 0 [static] |
map addr for 4K pages.
l4_addr_t pager_map_addr_4M = 0 [static] |
map addr for 4M pages.