]> Zhao Yanbai Git Server - minix.git/commitdiff
custom messages for SHMAT, SHMDT
authorBen Gras <ben@minix3.org>
Sat, 26 Jul 2014 11:53:52 +0000 (13:53 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:06:20 +0000 (17:06 +0200)
include/minix/com.h
include/minix/ipc.h
lib/libc/sys-minix/shmat.c
servers/ipc/shm.c

index 942b131e2d05ba920e3cffa6c65700d04ea6500f..67bc7a1f16fc68494e1bcca4a508a1cedcb22302 100644 (file)
 /* Shared Memory */
 #define IPC_SHMGET     (IPC_BASE+1)
 #define IPC_SHMAT      (IPC_BASE+2)
-#      define SHMAT_ID         m2_i1
-#      define SHMAT_ADDR       m2_l1
-#      define SHMAT_FLAG       m2_i2
-#      define SHMAT_RETADDR    m2_l2
 #define IPC_SHMDT      (IPC_BASE+3)
-#      define SHMDT_ADDR       m2_l1
 #define IPC_SHMCTL     (IPC_BASE+4)
 #      define SHMCTL_ID        m2_i1
 #      define SHMCTL_CMD       m2_i2
index 19aeb8bec29683e885571e91afe3cee59ca0dfb9..374da5358cf3aefd79b2e7a4841483d8df7f0d16 100644 (file)
@@ -1774,6 +1774,21 @@ typedef struct {
 } mess_lc_ipc_shmget;
 _ASSERT_MSG_SIZE(mess_lc_ipc_shmget);
 
+typedef struct {
+       int             id;
+       const void      *addr;
+       int             flag;
+       void            *retaddr;
+       uint8_t         padding[40];
+} mess_lc_ipc_shmat;
+_ASSERT_MSG_SIZE(mess_lc_ipc_shmat);
+
+typedef struct {
+       const void      *addr;
+       uint8_t         padding[52];
+} mess_lc_ipc_shmdt;
+_ASSERT_MSG_SIZE(mess_lc_ipc_shmdt);
+
 typedef struct {
        endpoint_t m_source;            /* who sent the message */
        int m_type;                     /* what kind of message is it */
@@ -2001,6 +2016,8 @@ typedef struct {
                mess_lsys_vm_update     m_lsys_vm_update;
                mess_lsys_vm_watch_exit m_lsys_vm_watch_exit;
                mess_lc_ipc_shmget      m_lc_ipc_shmget;
+               mess_lc_ipc_shmat       m_lc_ipc_shmat;
+               mess_lc_ipc_shmdt       m_lc_ipc_shmdt;
 
                mess_vfs_lchardriver_cancel     m_vfs_lchardriver_cancel;
                mess_vfs_lchardriver_openclose  m_vfs_lchardriver_openclose;
index aa99007b40de9bcb21db5edf9959ea329114a67e..66466d952b63e60ecc1654801f60f780a3229e8a 100644 (file)
@@ -33,14 +33,14 @@ void *shmat(int shmid, const void *shmaddr, int shmflg)
        }
 
        memset(&m, 0, sizeof(m));
-       m.SHMAT_ID = shmid;
-       m.SHMAT_ADDR = (long) shmaddr;
-       m.SHMAT_FLAG = shmflg;
+       m.m_lc_ipc_shmat.id = shmid;
+       m.m_lc_ipc_shmat.addr = shmaddr;
+       m.m_lc_ipc_shmat.flag = shmflg;
 
        r = _syscall(ipc_pt, IPC_SHMAT, &m);
        if (r != OK)
                return (void *) -1;
-       return (void *) m.SHMAT_RETADDR;
+       return m.m_lc_ipc_shmat.retaddr;
 }
 
 /* Deattach shared memory segment. */
@@ -55,7 +55,7 @@ int shmdt(const void *shmaddr)
        }
 
        memset(&m, 0, sizeof(m));
-       m.SHMDT_ADDR = (long) shmaddr;
+       m.m_lc_ipc_shmdt.addr = shmaddr;
 
        return _syscall(ipc_pt, IPC_SHMDT, &m);
 }
index d213301a1abe8091a45273cbf6c080f7f623fd48..da90a9cbd5aea22077bffda266d59e0177058ed4 100644 (file)
@@ -111,9 +111,9 @@ int do_shmat(message *m)
        void *ret;
        struct shm_struct *shm;
 
-       id = m->SHMAT_ID;
-       addr = (vir_bytes) m->SHMAT_ADDR;
-       flag = m->SHMAT_FLAG;
+       id = m->m_lc_ipc_shmat.id;
+       addr = (vir_bytes) m->m_lc_ipc_shmat.addr;
+       flag = m->m_lc_ipc_shmat.flag;
 
        if (addr && (addr % PAGE_SIZE)) {
                if (flag & SHM_RND)
@@ -141,7 +141,7 @@ int do_shmat(message *m)
        shm->shmid_ds.shm_lpid = getnpid(who_e);
        /* nattach is updated lazily */
 
-       m->SHMAT_RETADDR = (long) ret;
+       m->m_lc_ipc_shmat.retaddr = ret;
        return OK;
 }
 
@@ -186,7 +186,7 @@ int do_shmdt(message *m)
        phys_bytes vm_id;
        int i;
 
-       addr = m->SHMDT_ADDR;
+       addr = (vir_bytes) m->m_lc_ipc_shmdt.addr;
 
        if ((vm_id = vm_getphys(who_e, (void *) addr)) == 0)
                return EINVAL;