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

index d571f2a3ca7403b0889ddd6e2229c555200619dc..8ca65762ea8066c4bdfed78103e107967d2c722f 100644 (file)
 #define IPC_SEMGET     (IPC_BASE+5)
 #define IPC_SEMCTL     (IPC_BASE+6)
 #define IPC_SEMOP      (IPC_BASE+7)
-#      define SEMOP_ID         m2_i1
-#      define SEMOP_OPS        m2_l1
-#      define SEMOP_SIZE       m2_i2
 
 /*===========================================================================*
  *                Messages for Scheduling                                   *
index 328eab4cadf1c3059386370d1fc977ef853da5fb..af25c7777ada854c7b1c6b736495801ac01d298f 100644 (file)
@@ -1817,6 +1817,14 @@ typedef struct {
 } mess_lc_ipc_semctl;
 _ASSERT_MSG_SIZE(mess_lc_ipc_semctl);
 
+typedef struct {
+       int             id;
+       void            *ops;
+       unsigned int    size;
+       uint8_t         padding[42];
+} mess_lc_ipc_semop;
+_ASSERT_MSG_SIZE(mess_lc_ipc_semop);
+
 typedef struct {
        endpoint_t m_source;            /* who sent the message */
        int m_type;                     /* what kind of message is it */
@@ -2049,6 +2057,7 @@ typedef struct {
                mess_lc_ipc_shmctl      m_lc_ipc_shmctl;
                mess_lc_ipc_semget      m_lc_ipc_semget;
                mess_lc_ipc_semctl      m_lc_ipc_semctl;
+               mess_lc_ipc_semop       m_lc_ipc_semop;
 
                mess_vfs_lchardriver_cancel     m_vfs_lchardriver_cancel;
                mess_vfs_lchardriver_openclose  m_vfs_lchardriver_openclose;
index 37d3b3e664e152c9e4f5b969acf975f37122cfd2..7d78e22aa75e537b85205f921a3b927642437340 100644 (file)
@@ -90,9 +90,9 @@ int semop(int semid, struct sembuf *sops, size_t nsops)
        }
 
        memset(&m, 0, sizeof(m));
-       m.SEMOP_ID = semid;
-       m.SEMOP_OPS = (long) sops;
-       m.SEMOP_SIZE = nsops;
+       m.m_lc_ipc_semop.id = semid;
+       m.m_lc_ipc_semop.ops = sops;
+       m.m_lc_ipc_semop.size = nsops;
 
        return _syscall(ipc_pt, IPC_SEMOP, &m);
 }
index 1b37894ed9eb941a630d2572f57d6d328ed624a1..aab65678eb8d88985f31e3f25ccac4de73d55e09 100644 (file)
@@ -445,8 +445,8 @@ int do_semop(message *m)
        struct sem_struct *sem;
        int no_reply = 0;
 
-       id = m->SEMOP_ID;
-       nsops = (unsigned int) m->SEMOP_SIZE;
+       id = m->m_lc_ipc_semop.id;
+       nsops = m->m_lc_ipc_semop.size;
 
        r = EINVAL;
        if (!(sem = sem_find_id(id)))
@@ -469,7 +469,7 @@ int do_semop(message *m)
        sops = malloc(sizeof(struct sembuf) * nsops);
        if (!sops)
                goto out_free;
-       r = sys_datacopy(who_e, (vir_bytes) m->SEMOP_OPS,
+       r = sys_datacopy(who_e, (vir_bytes) m->m_lc_ipc_semop.ops,
                        SELF, (vir_bytes) sops,
                        sizeof(struct sembuf) * nsops);
        if (r != OK) {