drop safemap code
This commit is contained in:
@@ -52,7 +52,6 @@ SRCS= \
|
||||
sys_profbuf.c \
|
||||
sys_runctl.c \
|
||||
sys_safecopy.c \
|
||||
sys_safemap.c \
|
||||
sys_safememset.c \
|
||||
sys_schedctl.c \
|
||||
sys_schedule.c \
|
||||
|
||||
@@ -83,29 +83,6 @@ int ds_publish_mem(const char *ds_name, void *vaddr, size_t length, int flags)
|
||||
return ds_publish_raw(ds_name, vaddr, length, flags | DSF_TYPE_MEM);
|
||||
}
|
||||
|
||||
int ds_publish_map(const char *ds_name, void *vaddr, size_t length, int flags)
|
||||
{
|
||||
cp_grant_id_t gid;
|
||||
int r;
|
||||
|
||||
if(((vir_bytes)vaddr % CLICK_SIZE != 0) || (length % CLICK_SIZE != 0))
|
||||
return EINVAL;
|
||||
|
||||
/* Grant for mapped memory range. */
|
||||
gid = cpf_grant_direct(DS_PROC_NR, (vir_bytes)vaddr, length,
|
||||
CPF_READ | CPF_MAP);
|
||||
if(!GRANT_VALID(gid))
|
||||
return errno;
|
||||
|
||||
m.DS_VAL = gid;
|
||||
m.DS_VAL_LEN = length;
|
||||
m.DS_FLAGS = DSF_TYPE_MAP | flags;
|
||||
|
||||
r = do_invoke_ds(DS_PUBLISH, ds_name);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int ds_snapshot_map(const char *ds_name, int *nr_snapshot)
|
||||
{
|
||||
int r;
|
||||
@@ -175,55 +152,6 @@ int ds_retrieve_mem(const char *ds_name, char *vaddr, size_t *length)
|
||||
return ds_retrieve_raw(ds_name, vaddr, length, DSF_TYPE_MEM);
|
||||
}
|
||||
|
||||
int ds_retrieve_map(const char *ds_name, char *vaddr, size_t *length,
|
||||
int nr_snapshot, int flags)
|
||||
{
|
||||
cp_grant_id_t gid;
|
||||
int r;
|
||||
|
||||
/* Map a mapped memory range. */
|
||||
if(flags & DSMF_MAP_MAPPED) {
|
||||
/* Request DS to grant. */
|
||||
m.DS_FLAGS = DSF_TYPE_MAP | DSMF_MAP_MAPPED;
|
||||
r = do_invoke_ds(DS_RETRIEVE, ds_name);
|
||||
if(r != OK)
|
||||
return r;
|
||||
|
||||
/* Do the safemap. */
|
||||
if(*length > (size_t) m.DS_VAL_LEN)
|
||||
*length = (size_t) m.DS_VAL_LEN;
|
||||
*length = (size_t) CLICK_FLOOR(*length);
|
||||
r = sys_safemap(DS_PROC_NR, m.DS_VAL, 0,
|
||||
(vir_bytes)vaddr, *length, 0);
|
||||
|
||||
/* Copy mapped memory range or a snapshot. */
|
||||
} else if(flags & (DSMF_COPY_MAPPED|DSMF_COPY_SNAPSHOT)) {
|
||||
/* Grant for memory range first. */
|
||||
gid = cpf_grant_direct(DS_PROC_NR, (vir_bytes)vaddr,
|
||||
*length, CPF_WRITE);
|
||||
if(!GRANT_VALID(gid))
|
||||
return errno;
|
||||
|
||||
m.DS_VAL = gid;
|
||||
m.DS_VAL_LEN = *length;
|
||||
if(flags & DSMF_COPY_MAPPED) {
|
||||
m.DS_FLAGS = DSF_TYPE_MAP | DSMF_COPY_MAPPED;
|
||||
}
|
||||
else {
|
||||
m.DS_NR_SNAPSHOT = nr_snapshot;
|
||||
m.DS_FLAGS = DSF_TYPE_MAP | DSMF_COPY_SNAPSHOT;
|
||||
}
|
||||
r = do_invoke_ds(DS_RETRIEVE, ds_name);
|
||||
*length = m.DS_VAL_LEN;
|
||||
cpf_revoke(gid);
|
||||
}
|
||||
else {
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int ds_delete_u32(const char *ds_name)
|
||||
{
|
||||
m.DS_FLAGS = DSF_TYPE_U32;
|
||||
@@ -242,12 +170,6 @@ int ds_delete_mem(const char *ds_name)
|
||||
return do_invoke_ds(DS_DELETE, ds_name);
|
||||
}
|
||||
|
||||
int ds_delete_map(const char *ds_name)
|
||||
{
|
||||
m.DS_FLAGS = DSF_TYPE_MAP;
|
||||
return do_invoke_ds(DS_DELETE, ds_name);
|
||||
}
|
||||
|
||||
int ds_delete_label(const char *ds_name)
|
||||
{
|
||||
m.DS_FLAGS = DSF_TYPE_LABEL;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include <string.h>
|
||||
|
||||
#define ACCESS_CHECK(a) { \
|
||||
if((a) & ~(CPF_READ|CPF_WRITE|CPF_MAP)) { \
|
||||
if((a) & ~(CPF_READ|CPF_WRITE)) { \
|
||||
errno = EINVAL; \
|
||||
return -1; \
|
||||
} \
|
||||
@@ -213,16 +213,8 @@ int
|
||||
cpf_revoke(cp_grant_id_t g)
|
||||
{
|
||||
/* Revoke previously granted access, identified by grant id. */
|
||||
int r;
|
||||
GID_CHECK_USED(g);
|
||||
|
||||
/* If this grant is for memory mapping, revoke the mapping first. */
|
||||
if(grants[g].cp_flags & CPF_MAP) {
|
||||
r = sys_saferevmap_gid(g);
|
||||
if(r != 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Make grant invalid by setting flags to 0, clearing CPF_USED.
|
||||
* This invalidates the grant.
|
||||
*/
|
||||
@@ -274,11 +266,6 @@ int access;
|
||||
GID_CHECK(gid);
|
||||
ACCESS_CHECK(access);
|
||||
|
||||
/* Check click alignment in case of memory mapping grant. */
|
||||
if(access & CPF_MAP) {
|
||||
CLICK_ALIGNMENT_CHECK(addr, bytes);
|
||||
}
|
||||
|
||||
/* Fill in new slot data. */
|
||||
grants[gid].cp_flags = access | CPF_DIRECT | CPF_USED | CPF_VALID;
|
||||
grants[gid].cp_u.cp_direct.cp_who_to = who;
|
||||
@@ -316,11 +303,6 @@ int access;
|
||||
GID_CHECK(gid);
|
||||
ACCESS_CHECK(access);
|
||||
|
||||
/* Check click alignment in case of memory mapping grant. */
|
||||
if(access & CPF_MAP) {
|
||||
CLICK_ALIGNMENT_CHECK(addr, bytes);
|
||||
}
|
||||
|
||||
/* Fill in new slot data. */
|
||||
grants[gid].cp_flags = CPF_USED | CPF_MAGIC | CPF_VALID | access;
|
||||
grants[gid].cp_u.cp_magic.cp_who_to = who_to;
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
|
||||
#include "syslib.h"
|
||||
|
||||
#include <minix/safecopies.h>
|
||||
|
||||
/*===========================================================================*
|
||||
* sys_safemap *
|
||||
*===========================================================================*/
|
||||
int sys_safemap(endpoint_t grantor, cp_grant_id_t grant,
|
||||
vir_bytes grant_offset, vir_bytes my_address,
|
||||
size_t bytes, int writable)
|
||||
{
|
||||
/* Map a block of data for which the other process has previously
|
||||
* granted permission.
|
||||
*/
|
||||
|
||||
message copy_mess;
|
||||
|
||||
copy_mess.SMAP_EP = grantor;
|
||||
copy_mess.SMAP_GID = grant;
|
||||
copy_mess.SMAP_OFFSET = grant_offset;
|
||||
copy_mess.SMAP_ADDRESS = my_address;
|
||||
copy_mess.SMAP_BYTES = bytes;
|
||||
copy_mess.SMAP_FLAG = writable;
|
||||
|
||||
copy_mess.SMAP_SEG_OBSOLETE = (void *) D_OBSOLETE;
|
||||
|
||||
return(_kernel_call(SYS_SAFEMAP, ©_mess));
|
||||
|
||||
}
|
||||
|
||||
/*===========================================================================*
|
||||
* sys_saferevmap_gid *
|
||||
*===========================================================================*/
|
||||
int sys_saferevmap_gid(cp_grant_id_t grant)
|
||||
{
|
||||
/* Grantor revokes safemap by grant id. */
|
||||
message copy_mess;
|
||||
|
||||
copy_mess.SMAP_FLAG = 1;
|
||||
copy_mess.SMAP_GID = grant;
|
||||
|
||||
return(_kernel_call(SYS_SAFEREVMAP, ©_mess));
|
||||
}
|
||||
|
||||
/*===========================================================================*
|
||||
* sys_saferevmap_addr *
|
||||
*===========================================================================*/
|
||||
int sys_saferevmap_addr(vir_bytes addr)
|
||||
{
|
||||
/* Grantor revokes safemap by address. */
|
||||
message copy_mess;
|
||||
|
||||
copy_mess.SMAP_FLAG = 0;
|
||||
copy_mess.SMAP_GID = addr;
|
||||
|
||||
return(_kernel_call(SYS_SAFEREVMAP, ©_mess));
|
||||
}
|
||||
|
||||
/*===========================================================================*
|
||||
* sys_safeunmap *
|
||||
*===========================================================================*/
|
||||
int sys_safeunmap(vir_bytes my_address)
|
||||
{
|
||||
/* Requestor unmaps safemap. */
|
||||
message copy_mess;
|
||||
|
||||
copy_mess.SMAP_ADDRESS = my_address;
|
||||
|
||||
copy_mess.SMAP_SEG_OBSOLETE = (void *) D_OBSOLETE;
|
||||
|
||||
return(_kernel_call(SYS_SAFEUNMAP, ©_mess));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user