Rev 1358 | Rev 1387 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1358 | Rev 1380 | ||
---|---|---|---|
Line 42... | Line 42... | ||
42 | #include <arch/mm/as.h> |
42 | #include <arch/mm/as.h> |
43 | #include <arch/mm/asid.h> |
43 | #include <arch/mm/asid.h> |
44 | #include <arch/types.h> |
44 | #include <arch/types.h> |
45 | #include <typedefs.h> |
45 | #include <typedefs.h> |
46 | #include <synch/spinlock.h> |
46 | #include <synch/spinlock.h> |
- | 47 | #include <synch/mutex.h> |
|
47 | #include <adt/list.h> |
48 | #include <adt/list.h> |
48 | #include <adt/btree.h> |
49 | #include <adt/btree.h> |
49 | 50 | ||
50 | /** Defined to be true if user address space and kernel address space shadow each other. */ |
51 | /** Defined to be true if user address space and kernel address space shadow each other. */ |
51 | #define KERNEL_ADDRESS_SPACE_SHADOWED KERNEL_ADDRESS_SPACE_SHADOWED_ARCH |
52 | #define KERNEL_ADDRESS_SPACE_SHADOWED KERNEL_ADDRESS_SPACE_SHADOWED_ARCH |
Line 64... | Line 65... | ||
64 | 65 | ||
65 | /** Address space area attributes. */ |
66 | /** Address space area attributes. */ |
66 | #define AS_AREA_ATTR_NONE 0 |
67 | #define AS_AREA_ATTR_NONE 0 |
67 | #define AS_AREA_ATTR_PARTIAL 1 /* Not fully initialized area. */ |
68 | #define AS_AREA_ATTR_PARTIAL 1 /* Not fully initialized area. */ |
68 | 69 | ||
69 | #define AS_PF_FAULT 0 /**< The page fault was not resolved by asp_page_fault(). */ |
70 | #define AS_PF_FAULT 0 /**< The page fault was not resolved by as_page_fault(). */ |
70 | #define AS_PF_OK 1 /**< The page fault was resolved by as_page_fault(). */ |
71 | #define AS_PF_OK 1 /**< The page fault was resolved by as_page_fault(). */ |
71 | #define AS_PF_DEFER 2 /**< The page fault was caused by memcpy_from_uspace(). */ |
72 | #define AS_PF_DEFER 2 /**< The page fault was caused by memcpy_from_uspace() |
- | 73 | or memcpy_to_uspace(). */ |
|
72 | 74 | ||
73 | /** Address space area structure. |
75 | /** Address space area structure. |
74 | * |
76 | * |
75 | * Each as_area_t structure describes one contiguous area of virtual memory. |
77 | * Each as_area_t structure describes one contiguous area of virtual memory. |
76 | * In the future, it should not be difficult to support shared areas. |
78 | * In the future, it should not be difficult to support shared areas. |
77 | */ |
79 | */ |
78 | struct as_area { |
80 | struct as_area { |
79 | SPINLOCK_DECLARE(lock); |
81 | mutex_t lock; |
80 | int flags; /**< Flags related to the memory represented by the address space area. */ |
82 | int flags; /**< Flags related to the memory represented by the address space area. */ |
81 | int attributes; /**< Attributes related to the address space area itself. */ |
83 | int attributes; /**< Attributes related to the address space area itself. */ |
82 | count_t pages; /**< Size of this area in multiples of PAGE_SIZE. */ |
84 | count_t pages; /**< Size of this area in multiples of PAGE_SIZE. */ |
83 | __address base; /**< Base address of this area. */ |
85 | __address base; /**< Base address of this area. */ |
84 | }; |
86 | }; |
Line 89... | Line 91... | ||
89 | * pages for one or more tasks. Ranges of kernel memory pages are not |
91 | * pages for one or more tasks. Ranges of kernel memory pages are not |
90 | * supposed to figure in the list as they are shared by all tasks and |
92 | * supposed to figure in the list as they are shared by all tasks and |
91 | * set up during system initialization. |
93 | * set up during system initialization. |
92 | */ |
94 | */ |
93 | struct as { |
95 | struct as { |
94 | /** Protected by asidlock. Must be acquired before as->lock. */ |
96 | /** Protected by asidlock. */ |
95 | link_t inactive_as_with_asid_link; |
97 | link_t inactive_as_with_asid_link; |
96 | 98 | ||
97 | SPINLOCK_DECLARE(lock); |
99 | mutex_t lock; |
98 | 100 | ||
99 | /** Number of processors on wich is this address space active. */ |
101 | /** Number of processors on wich is this address space active. */ |
100 | count_t refcount; |
102 | count_t refcount; |
101 | 103 | ||
102 | /** B+tree of address space areas. */ |
104 | /** B+tree of address space areas. */ |