From: Ben Gras Date: Sat, 26 Jul 2014 11:53:56 +0000 (+0200) Subject: use custom mmap struct type directly X-Git-Tag: v3.3.0~116 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/howto.html?a=commitdiff_plain;h=7cb7ac5b42c2806e0b8930564ce562ba8ecc1a75;p=minix.git use custom mmap struct type directly --- diff --git a/include/minix/com.h b/include/minix/com.h index b284ea330..3cedfe728 100644 --- a/include/minix/com.h +++ b/include/minix/com.h @@ -671,14 +671,6 @@ /* General calls. */ #define VM_MMAP (VM_RQ_BASE+10) -# define VMM_ADDR m_mmap.addr -# define VMM_LEN m_mmap.len -# define VMM_PROT m_mmap.prot -# define VMM_FLAGS m_mmap.flags -# define VMM_FD m_mmap.fd -# define VMM_OFFSET m_mmap.offset -# define VMM_FORWHOM m_mmap.forwhom -# define VMM_RETADDR m_mmap.retaddr #define VM_MUNMAP (VM_RQ_BASE+17) # define VMUM_ADDR m_mmap.addr diff --git a/lib/libc/sys-minix/mmap.c b/lib/libc/sys-minix/mmap.c index d9edeaf36..8503151c5 100644 --- a/lib/libc/sys-minix/mmap.c +++ b/lib/libc/sys-minix/mmap.c @@ -25,16 +25,16 @@ void *minix_mmap_for(endpoint_t forwhom, int r; memset(&m, 0, sizeof(m)); - m.VMM_ADDR = addr; - m.VMM_LEN = len; - m.VMM_PROT = prot; - m.VMM_FLAGS = flags; - m.VMM_FD = fd; - m.VMM_OFFSET = offset; - m.VMM_FORWHOM = forwhom; + m.m_mmap.addr = addr; + m.m_mmap.len = len; + m.m_mmap.prot = prot; + m.m_mmap.flags = flags; + m.m_mmap.fd = fd; + m.m_mmap.offset = offset; + m.m_mmap.forwhom = forwhom; if(forwhom != SELF) { - m.VMM_FLAGS |= MAP_THIRDPARTY; + m.m_mmap.flags |= MAP_THIRDPARTY; } r = _syscall(VM_PROC_NR, VM_MMAP, &m); @@ -43,7 +43,7 @@ void *minix_mmap_for(endpoint_t forwhom, return MAP_FAILED; } - return m.VMM_RETADDR; + return m.m_mmap.retaddr; } int minix_vfs_mmap(endpoint_t who, off_t offset, size_t len, diff --git a/servers/vm/mmap.c b/servers/vm/mmap.c index c87f9e484..a60208bf0 100644 --- a/servers/vm/mmap.c +++ b/servers/vm/mmap.c @@ -167,7 +167,7 @@ static void mmap_file_cont(struct vmproc *vmp, message *replymsg, void *cbarg, int writable = 0; vir_bytes v = (vir_bytes) MAP_FAILED; - if(origmsg->VMM_PROT & PROT_WRITE) + if(origmsg->m_mmap.prot & PROT_WRITE) writable = 1; if(replymsg->VMV_RESULT != OK) { @@ -178,18 +178,18 @@ static void mmap_file_cont(struct vmproc *vmp, message *replymsg, void *cbarg, result = origmsg->VMV_RESULT; } else { /* Finish mmap */ - result = mmap_file(vmp, replymsg->VMV_FD, origmsg->VMM_OFFSET, - origmsg->VMM_FLAGS, + result = mmap_file(vmp, replymsg->VMV_FD, origmsg->m_mmap.offset, + origmsg->m_mmap.flags, replymsg->VMV_INO, replymsg->VMV_DEV, (u64_t) replymsg->VMV_SIZE_PAGES*PAGE_SIZE, - (vir_bytes) origmsg->VMM_ADDR, - origmsg->VMM_LEN, &v, 0, writable, 1); + (vir_bytes) origmsg->m_mmap.addr, + origmsg->m_mmap.len, &v, 0, writable, 1); } /* Unblock requesting process. */ memset(&mmap_reply, 0, sizeof(mmap_reply)); mmap_reply.m_type = result; - mmap_reply.VMM_RETADDR = (void *) v; + mmap_reply.m_mmap.retaddr = (void *) v; if(ipc_send(vmp->vm_endpoint, &mmap_reply) != OK) panic("VM: mmap_file_cont: ipc_send() failed"); @@ -202,18 +202,18 @@ int do_mmap(message *m) { int r, n; struct vmproc *vmp; - vir_bytes addr = (vir_bytes) m->VMM_ADDR; + vir_bytes addr = (vir_bytes) m->m_mmap.addr; struct vir_region *vr = NULL; int execpriv = 0; - size_t len = (vir_bytes) m->VMM_LEN; + size_t len = (vir_bytes) m->m_mmap.len; /* RS and VFS can do slightly more special mmap() things */ if(m->m_source == VFS_PROC_NR || m->m_source == RS_PROC_NR) execpriv = 1; - if(m->VMM_FLAGS & MAP_THIRDPARTY) { + if(m->m_mmap.flags & MAP_THIRDPARTY) { if(!execpriv) return EPERM; - if((r=vm_isokendpt(m->VMM_FORWHOM, &n)) != OK) + if((r=vm_isokendpt(m->m_mmap.forwhom, &n)) != OK) return ESRCH; } else { /* regular mmap, i.e. for caller */ @@ -230,25 +230,25 @@ int do_mmap(message *m) return EINVAL; } - if(m->VMM_FD == -1 || (m->VMM_FLAGS & MAP_ANON)) { + if(m->m_mmap.fd == -1 || (m->m_mmap.flags & MAP_ANON)) { /* actual memory in some form */ mem_type_t *mt = NULL; - if(m->VMM_FD != -1) { - printf("VM: mmap: fd %d, len 0x%x\n", m->VMM_FD, len); + if(m->m_mmap.fd != -1) { + printf("VM: mmap: fd %d, len 0x%x\n", m->m_mmap.fd, len); return EINVAL; } /* Contiguous phys memory has to be preallocated. */ - if((m->VMM_FLAGS & (MAP_CONTIG|MAP_PREALLOC)) == MAP_CONTIG) { + if((m->m_mmap.flags & (MAP_CONTIG|MAP_PREALLOC)) == MAP_CONTIG) { return EINVAL; } - if(m->VMM_FLAGS & MAP_CONTIG) { + if(m->m_mmap.flags & MAP_CONTIG) { mt = &mem_type_anon_contig; } else mt = &mem_type_anon; - if(!(vr = mmap_region(vmp, addr, m->VMM_FLAGS, len, + if(!(vr = mmap_region(vmp, addr, m->m_mmap.flags, len, VR_WRITABLE | VR_ANON, mt, execpriv))) { return ENOMEM; } @@ -259,11 +259,11 @@ int do_mmap(message *m) /* For files, we only can't accept writable MAP_SHARED * mappings. */ - if((m->VMM_FLAGS & MAP_SHARED) && (m->VMM_PROT & PROT_WRITE)) { + if((m->m_mmap.flags & MAP_SHARED) && (m->m_mmap.prot & PROT_WRITE)) { return ENXIO; } - if(vfs_request(VMVFSREQ_FDLOOKUP, m->VMM_FD, vmp, 0, 0, + if(vfs_request(VMVFSREQ_FDLOOKUP, m->m_mmap.fd, vmp, 0, 0, mmap_file_cont, NULL, m, sizeof(*m)) != OK) { printf("VM: vfs_request for mmap failed\n"); return ENXIO; @@ -274,7 +274,7 @@ int do_mmap(message *m) } /* Return mapping, as seen from process. */ - m->VMM_RETADDR = (void *) vr->vaddr; + m->m_mmap.retaddr = (void *) vr->vaddr; return OK; }