Merge of Wu's GSOC 09 branch (src.20090525.r4372.wu)
Main changes: - COW optimization for safecopy. - safemap, a grant-based interface for sharing memory regions between processes. - Integration with safemap and complete rework of DS, supporting new data types natively (labels, memory ranges, memory mapped ranges). - For further information: http://wiki.minix3.org/en/SummerOfCode2009/MemoryGrants Additional changes not included in the original Wu's branch: - Fixed unhandled case in VM when using COW optimization for safecopy in case of a block that has already been shared as SMAP. - Better interface and naming scheme for sys_saferevmap and ds_retrieve_map calls. - Better input checking in syslib: check for page alignment when creating memory mapping grants. - DS notifies subscribers when an entry is deleted. - Documented the behavior of indirect grants in case of memory mapping. - Test suite in /usr/src/test/safeperf|safecopy|safemap|ds/* reworked and extended. - Minor fixes and general cleanup. - TO-DO: Grant ids should be generated and managed the way endpoints are to make sure grant slots are never misreused.
This commit is contained in:
+17
-5
@@ -61,7 +61,7 @@ struct proc {
|
||||
* memory that isn't present, VM has to fix it. Until it has asked
|
||||
* what needs to be done and fixed it, save necessary state here.
|
||||
*
|
||||
* The requester gets a copy of its request message in reqmsg and gets
|
||||
* The requestor gets a copy of its request message in reqmsg and gets
|
||||
* VMREQUEST set.
|
||||
*/
|
||||
struct {
|
||||
@@ -70,6 +70,8 @@ struct proc {
|
||||
#define VMSTYPE_SYS_NONE 0
|
||||
#define VMSTYPE_KERNELCALL 1
|
||||
#define VMSTYPE_DELIVERMSG 2
|
||||
#define VMSTYPE_MAP 3
|
||||
|
||||
int type; /* suspended operation */
|
||||
union {
|
||||
/* VMSTYPE_SYS_MESSAGE */
|
||||
@@ -77,10 +79,20 @@ struct proc {
|
||||
} saved;
|
||||
|
||||
/* Parameters of request to VM */
|
||||
vir_bytes start, length; /* memory range */
|
||||
u8_t writeflag; /* nonzero for write access */
|
||||
endpoint_t who;
|
||||
|
||||
int req_type;
|
||||
endpoint_t target;
|
||||
union {
|
||||
struct {
|
||||
vir_bytes start, length; /* memory range */
|
||||
u8_t writeflag; /* nonzero for write access */
|
||||
} check;
|
||||
struct {
|
||||
char writeflag;
|
||||
endpoint_t ep_s;
|
||||
vir_bytes vir_s, vir_d;
|
||||
vir_bytes length;
|
||||
} map;
|
||||
} params;
|
||||
/* VM result when available */
|
||||
int vmresult;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user