Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/mm/as.h

    r908bb96 rae6021d  
    4242#include <arch/mm/asid.h>
    4343#include <arch/istate.h>
    44 #include <typedefs.h>
    4544#include <synch/spinlock.h>
    4645#include <synch/mutex.h>
     
    4847#include <adt/btree.h>
    4948#include <lib/elf.h>
     49#include <arch.h>
     50
     51#define AS                   THE->as
     52
    5053
    5154/**
     
    140143        /** This structure can be deallocated if refcount drops to 0. */
    141144        size_t refcount;
    142        
     145        /** True if the area has been ever shared. */
     146        bool shared;
     147
    143148        /**
    144149         * B+tree containing complete map of anonymous pages of the shared area.
    145150         */
    146151        btree_t pagemap;
     152
     153        /** Address space area backend. */
     154        struct mem_backend *backend;
     155        /** Address space area shared data. */
     156        void *backend_shared_data;
    147157} share_info_t;
    148158
     
    159169/** Backend data stored in address space area. */
    160170typedef union mem_backend_data {
     171        /* anon_backend members */
     172        struct {
     173        };
     174
    161175        /** elf_backend members */
    162176        struct {
     
    169183                uintptr_t base;
    170184                size_t frames;
     185                bool anonymous;
    171186        };
     187
     188        /** user_backend members */
     189        struct {
     190                as_area_pager_info_t pager_info;
     191        };
     192
    172193} mem_backend_data_t;
    173194
     
    226247        int (* page_fault)(as_area_t *, uintptr_t, pf_access_t);
    227248        void (* frame_free)(as_area_t *, uintptr_t, uintptr_t);
     249
     250        bool (* create_shared_data)(as_area_t *);
     251        void (* destroy_shared_data)(void *);
    228252} mem_backend_t;
    229253
     
    282306extern mem_backend_t elf_backend;
    283307extern mem_backend_t phys_backend;
     308extern mem_backend_t user_backend;
    284309
    285310/* Address space area related syscalls. */
    286 extern sysarg_t sys_as_area_create(uintptr_t, size_t, unsigned int, uintptr_t);
     311extern sysarg_t sys_as_area_create(uintptr_t, size_t, unsigned int, uintptr_t,
     312    as_area_pager_info_t *);
    287313extern sysarg_t sys_as_area_resize(uintptr_t, size_t, unsigned int);
    288314extern sysarg_t sys_as_area_change_flags(uintptr_t, unsigned int);
Note: See TracChangeset for help on using the changeset viewer.