]> granicus.if.org Git - strace/commitdiff
port SSI clustering mods to OpenSSI on Linux
authorJohn Hughes <john@Calva.COM>
Thu, 29 Jan 2004 11:17:50 +0000 (11:17 +0000)
committerJohn Hughes <john@Calva.COM>
Thu, 29 Jan 2004 11:17:50 +0000 (11:17 +0000)
ChangeLog
README-linux
configure.ac
linux/dummy.h
linux/syscall.h
linux/syscallent.h
process.c
system.c

index 5aa3e250c9f4d3bab358115484069178a6c4a75c..e06a8822136aba9246163d08fa9b45a00103e1c4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2004-01-29  John Hughes  <john@calva.com>
+
+       * README-linux: Document method for finding OpenSSI includes.
+
+       * linux/syscallent.h: Add OpenSSI syscalls.
+
+       * linux/syscall.h: Add OpenSSI syscalls.
+
+       * linux/dummy.h: Add OpenSSI syscalls.
+
+       * system.c (tcp;): make sys_ssisys work on Linux.
+
+       * process.c (sys_rfork, sys_rexecve): Add cluster syscalls for Linux.
+
+       * configure.ac: check for cluster/ssisys.h.
+
 2004-01-13  Roland McGrath  <roland@redhat.com>
 
        * stream.c (internal_stream_ioctl): Fix typo strict -> struct.
index e2f9779670301c6e6d1784ee1bcf251567038358..d36eafb10604467377e2ca5f840ff3cd39b3da40 100644 (file)
@@ -30,3 +30,16 @@ There are three ways to compile strace with other kernel headers:
 * you can link /usr/include/linux and /usr/include/asm to the
   corresponding directories in your kernel source-tree.
 
+
+OpenSSI:
+--------
+
+If you want to compile strace with support for the OpenSSI clustering
+software the easy way is to use the CPPFLAGS to point configure to your
+ci source code:
+
+CPPFLAGS="-I path-to-ci/kernel/include" ./configure
+
+Note that I don't know how to strace across rfork.
+
+       - John Hughes <john@calva.com>
index a60b61f78c0cfa9f2b09935c7ad0aa72fc379064..03bb7899ec9f56d348c465f49e514d91890581b3 100644 (file)
@@ -188,7 +188,7 @@ AC_CHECK_LIB(nsl, main)
 fi
 
 AC_CHECK_FUNCS(sigaction strerror strsignal pread sys_siglist _sys_siglist getdents mctl prctl sendmsg inet_ntop if_indextoname)
-AC_CHECK_HEADERS([sys/reg.h sys/filio.h sys/acl.h sys/asynch.h sys/door.h stropts.h sys/conf.h sys/stream.h sys/tihdr.h sys/tiuser.h sys/sysconfig.h ioctls.h sys/ioctl.h sys/ptrace.h termio.h linux/ptrace.h asm/reg.h sys/uio.h sys/aio.h  poll.h sys/poll.h sys/vfs.h asm/sysmips.h linux/utsname.h sys/nscsys.h], [], [])
+AC_CHECK_HEADERS([sys/reg.h sys/filio.h sys/acl.h sys/asynch.h sys/door.h stropts.h sys/conf.h sys/stream.h sys/tihdr.h sys/tiuser.h sys/sysconfig.h ioctls.h sys/ioctl.h sys/ptrace.h termio.h linux/ptrace.h asm/reg.h sys/uio.h sys/aio.h  poll.h sys/poll.h sys/vfs.h asm/sysmips.h linux/utsname.h sys/nscsys.h cluster/ssisys.h], [], [])
 AC_CHECK_HEADERS([linux/icmp.h linux/in6.h linux/netlink.h linux/if_packet.h],
                  [], [], [#include <linux/socket.h>])
 AC_CHECK_HEADERS([asm/sigcontext.h], [], [], [#include <signal.h>])
index 2cccdead2e246326e77485b4f41529a1dee4e6be..c36c3b8a963117225f8ddd4a1f7b4272ced50cba 100644 (file)
@@ -37,6 +37,7 @@
 #define        sys_bdflush             printargs
 #define        sys_sysfs               printargs
 #define        sys_afs_syscall         printargs
+#define sys_migrate            printargs
 
 /* machine-specific */
 #ifndef I386
@@ -44,6 +45,9 @@
 #define sys_get_thread_area    printargs
 #define sys_set_thread_area    printargs
 #endif
+#ifndef HAVE_CLUSTER_SSISYS_H
+#define sys_ssisys             printargs
+#endif
 
 #define sys_sched_setparam     printargs
 #define sys_sched_getparam     printargs
index 5f5d56e501fc06837a5feec60d05774238eab045..49c44216aadd6da91036ddbf1b2b582a7a061ecd 100644 (file)
@@ -96,6 +96,18 @@ int sys_clock_gettime(), sys_clock_getres(), sys_clock_nanosleep();
 int sys_semtimedop(), sys_statfs64(), sys_fstatfs64(), sys_tgkill();
 
 
+/* OpenSSI cluster syscalls */
+
+int sys_ssisys(), sys_rfork(), sys_rexecve(), sys_migrate();
+
+/* Where are the silly numbers defined? */
+
+#define SYS_ssisys     290
+#define SYS_rfork      (SYS_ssisys + 1)
+#define SYS_rexecve    (SYS_ssisys + 2)
+#define SYS_migrate    (SYS_ssisys + 3)
+
+
 /* sys_socketcall subcalls */
 
 int sys_socket(), sys_bind(), sys_connect(), sys_listen();
index 9b2250e09544be6e22fe9284e7682b5ef887de19..c1ef5ee58bd9b6252cda8c80b344775abd3f896c 100644 (file)
        { 5,    0,      printargs,              "SYS_287"       }, /* 287 */
        { 5,    0,      printargs,              "SYS_288"       }, /* 288 */
        { 5,    0,      printargs,              "SYS_289"       }, /* 289 */
-       { 5,    0,      printargs,              "SYS_290"       }, /* 290 */
-       { 5,    0,      printargs,              "SYS_291"       }, /* 291 */
-       { 5,    0,      printargs,              "SYS_292"       }, /* 292 */
-       { 5,    0,      printargs,              "SYS_293"       }, /* 293 */
+         /* OpenSSI syscalls */
+       { 2,    0,      sys_ssisys,             "ssisys"        }, /* 290 */
+       { 1,    0,      sys_rfork,              "rfork"         }, /* 291 */
+       { 4,    0,      sys_rexecve,            "rexecve"       }, /* 292 */
+       { 1,    0,      sys_migrate,            "migrate"       }, /* 293 */
        { 5,    0,      printargs,              "SYS_294"       }, /* 294 */
        { 5,    0,      printargs,              "SYS_295"       }, /* 295 */
        { 5,    0,      printargs,              "SYS_296"       }, /* 296 */
index de7833f6d8e27e60dce26d670898210d83baf59c..9ae689ea36cafe91455180c136dbe39aa3f9137d 100644 (file)
--- a/process.c
+++ b/process.c
@@ -610,6 +610,19 @@ struct tcb *tcp;
        return 0;
 }
 
+int
+sys_rfork(tcp)
+struct tcb *tcp;
+{
+       if (entering(tcp)) {
+               tprintf ("%ld", tcp->u_arg[0]);
+       }
+       else {
+               return RVAL_UDECIMAL;
+       }
+       return 0;
+}
+
 int
 change_syscall(tcp, new)
 struct tcb *tcp;
@@ -1683,7 +1696,6 @@ struct tcb *tcp;
        return 0;
 }
 
-#if UNIXWARE > 2
 
 int sys_rexecve(tcp)
 struct tcb *tcp;
@@ -1695,7 +1707,6 @@ struct tcb *tcp;
        return 0;
 }
 
-#endif
 
 int
 internal_exec(tcp)
index 4c1aa59486fb363309f4d304f33841a49d66817d..7f22ddf11f61efcd9cb874351f72975e14203d1f 100644 (file)
--- a/system.c
+++ b/system.c
@@ -2008,55 +2008,197 @@ struct tcb *tcp;
        return 0;
 }
 
-#ifdef HAVE_SYS_NSCSYS_H
+#endif /* UNIXWARE > 2 */
 
+#if defined (HAVE_SYS_NSCSYS_H)
 struct cred;
 #include <sys/nscsys.h>
+#define SSISYS 1
+#elif defined (HAVE_CLUSTER_SSISYS_H)
+#include <cluster/ssisys.h>
+#define SSISYS 1
+#endif
+
+#ifdef SSISYS
 
 static struct xlat ssi_cmd [] = {
+#ifdef SSISYS_BADOP
        { SSISYS_BADOP, "SSISYS_BADOP"  },
+#endif
+#ifdef SSISYS_LDLVL_INIT
        { SSISYS_LDLVL_INIT,"SSISYS_LDLVL_INIT"},
+#endif
+#ifdef SSISYS_LDLVL_GETVEC
        { SSISYS_LDLVL_GETVEC,"SSISYS_LDLVL_GETVEC"},
+#endif
+#ifdef SSISYS_LDLVL_PUTVEC
        { SSISYS_LDLVL_PUTVEC,"SSISYS_LDLVL_PUTVEC"},
+#endif
+#ifdef SSISYS_LDLVL_PUTRCMDS
        { SSISYS_LDLVL_PUTRCMDS,"SSISYS_LDLVL_PUTRCMDS"},
+#endif
+#ifdef SSISYS_LDLVL_SETREXEC
        { SSISYS_LDLVL_SETREXEC,"SSISYS_LDLVL_SETREXEC"},
+#endif
+#ifdef SSISYS_CMS_CLUSTERID
        { SSISYS_CMS_CLUSTERID,"SSISYS_CMS_CLUSTERID"},
+#endif
+#ifdef SSISYS_CFS_STATVFS
        { SSISYS_CFS_STATVFS,"SSISYS_CFS_STATVFS"},
+#endif
+#ifdef SSISYS_NODE_GETNUM
        { SSISYS_NODE_GETNUM,"SSISYS_NODE_GETNUM"},
+#endif
+#ifdef SSISYS_NODE_TABLE
        { SSISYS_NODE_TABLE,"SSISYS_NODE_TABLE"},
+#endif
+#ifdef SSISYS_NODE_DOWN
        { SSISYS_NODE_DOWN,"SSISYS_NODE_DOWN"},
+#endif
+#ifdef SSISYS_RECLAIM_CHILD
        { SSISYS_RECLAIM_CHILD,"SSISYS_RECLAIM_CHILD"},
+#endif
+#ifdef SSISYS_IPC_GETINFO
        { SSISYS_IPC_GETINFO,"SSISYS_IPC_GETINFO"},
+#endif
+#ifdef SSISYS_ICS_TEST
        { SSISYS_ICS_TEST,"SSISYS_ICS_TEST"},
+#endif
+#ifdef SSISYS_NODE_PID
        { SSISYS_NODE_PID,"SSISYS_NODE_PID"},
+#endif
+#ifdef SSISYS_ISLOCAL
        { SSISYS_ISLOCAL,"SSISYS_ISLOCAL"},
+#endif
+#ifdef SSISYS_CFS_ISSTACKED
        { SSISYS_CFS_ISSTACKED,"SSISYS_CFS_ISSTACKED"},
+#endif
+#ifdef SSISYS_DNET_SYNC
        { SSISYS_DNET_SYNC,"SSISYS_DNET_SYNC"},
+#endif
+#ifdef SSISYS_CFS_WAIT_MODE
        { SSISYS_CFS_WAIT_MODE,"SSISYS_CFS_WAIT_MODE"},
+#endif
+#ifdef SSISYS_CFS_UMOUNT
        { SSISYS_CFS_UMOUNT,"SSISYS_CFS_UMOUNT"},
+#endif
+#ifdef SSISYS_LLSTAT
        { SSISYS_LLSTAT,"SSISYS_LLSTAT" },
+#endif
+#ifdef SSISYS_LTS_PERFTEST
        { SSISYS_LTS_PERFTEST,"SSISYS_LTS_PERFTEST"},
+#endif
+#ifdef SSISYS_LTS_CONFIG
        { SSISYS_LTS_CONFIG,"SSISYS_LTS_CONFIG"},
+#endif
+#ifdef SSISYS_SNET_PERFTEST
        { SSISYS_SNET_PERFTEST,"SSISYS_SNET_PERFTEST"},
+#endif
+#ifdef SSISYS_IGNORE_HALFUP
        { SSISYS_IGNORE_HALFUP,"SSISYS_IGNORE_HALFUP"},
+#endif
+#ifdef SSISYS_NODE_ROOTDEV
        { SSISYS_NODE_ROOTDEV,"SSISYS_NODE_ROOTDEV"},
+#endif
+#ifdef SSISYS_GET_PRIMARY
        { SSISYS_GET_PRIMARY,"SSISYS_GET_PRIMARY"},
+#endif
+#ifdef SSISYS_GET_SECONDARY
        { SSISYS_GET_SECONDARY,"SSISYS_GET_SECONDARY"},
+#endif
+#ifdef SSISYS_GET_ROOTDISK
        { SSISYS_GET_ROOTDISK,"SSISYS_GET_ROOTDISK"},
+#endif
+#ifdef SSISYS_CLUSTERNODE_NUM
        { SSISYS_CLUSTERNODE_NUM,"SSISYS_CLUSTERNODE_NUM"},
+#endif
+#ifdef SSISYS_CLUSTER_MEMBERSHIP
        { SSISYS_CLUSTER_MEMBERSHIP,"SSISYS_CLUSTER_MEMBERSHIP"},
+#endif
+#ifdef SSISYS_CLUSTER_DETAILEDTRANS
        { SSISYS_CLUSTER_DETAILEDTRANS,"SSISYS_CLUSTER_DETAILEDTRANS"},
+#endif
+#ifdef SSISYS_CLUSTERNODE_INFO
        { SSISYS_CLUSTERNODE_INFO,"SSISYS_CLUSTERNODE_INFO"},
+#endif
+#ifdef SSISYS_CLUSTERNODE_SETINFO
        { SSISYS_CLUSTERNODE_SETINFO,"SSISYS_CLUSTERNODE_SETINFO"},
+#endif
+#ifdef SSISYS_CLUSTERNODE_AVAIL
        { SSISYS_CLUSTERNODE_AVAIL,"SSISYS_CLUSTERNODE_AVAIL"},
+#endif
+#ifdef SSISYS_CLUSTER_MAXNODES
        { SSISYS_CLUSTER_MAXNODES,"SSISYS_CLUSTER_MAXNODES"},
+#endif
+#ifdef SSISYS_SET_MEMPRIO
        { SSISYS_SET_MEMPRIO,"SSISYS_SET_MEMPRIO"},
+#endif
+#ifdef SSISYS_GET_USERS
        { SSISYS_GET_USERS,"SSISYS_GET_USERS"},
+#endif
+#ifdef SSISYS_FORCE_ROOT_NODE
        { SSISYS_FORCE_ROOT_NODE,"SSISYS_FORCE_ROOT_NODE"},
+#endif
+#ifdef SSISYS_CVIP_SET
        { SSISYS_CVIP_SET,"SSISYS_CVIP_SET"},
+#endif
+#ifdef SSISYS_CVIP_GET
        { SSISYS_CVIP_GET,"SSISYS_CVIP_GET"},
+#endif
+#ifdef SSISYS_GET_NODE_COUNTS
        { SSISYS_GET_NODE_COUNTS,"SSISYS_GET_NODE_COUNTS"},
+#endif
+#ifdef SSISYS_GET_TRANSPORT
        { SSISYS_GET_TRANSPORT,"SSISYS_GET_TRANSPORT"},
+#endif
+#ifdef SSISYS_CLUSTER_SET_CONFIG
+       { SSISYS_CLUSTER_SET_CONFIG,"SSISYS_CLUSTER_SET_CONFIG"},
+#endif
+#ifdef SSISYS_CLUSTER_INIT_PREROOT
+       { SSISYS_CLUSTER_INIT_PREROOT,"SSISYS_CLUSTER_INIT_PREROOT"},
+#endif
+#ifdef SSISYS_CLUSTER_INIT_POSTROOT
+       { SSISYS_CLUSTER_INIT_POSTROOT,"SSISYS_CLUSTER_INIT_POSTROOT"},
+#endif
+#ifdef SSISYS_CLUSTER_INITPROC
+       { SSISYS_CLUSTER_INITPROC,"SSISYS_CLUSTER_INITPROC"},
+#endif
+#ifdef SSISYS_MOUNT_REMOTE_ROOT
+       { SSISYS_MOUNT_REMOTE_ROOT,"SSISYS_MOUNT_REMOTE_ROOT"},
+#endif
+#ifdef SSISYS_DISCOVER_MOUNTS
+       { SSISYS_DISCOVER_MOUNTS,"SSISYS_DISCOVER_MOUNTS"},
+#endif
+#ifdef SSISYS_CFS_MOUNT
+       { SSISYS_CFS_MOUNT,"SSISYS_CFS_MOUNT"},
+#endif
+#ifdef SSISYS_SET_LVSDIRECTOR
+       { SSISYS_SET_LVSDIRECTOR,"SSISYS_SET_LVSDIRECTOR"},
+#endif
+#ifdef SSISYS_CFS_REMOUNT
+       { SSISYS_CFS_REMOUNT,"SSISYS_CFS_REMOUNT"},
+#endif
+#ifdef SSISYS_CFS_SETROOT
+       { SSISYS_CFS_SETROOT,"SSISYS_CFS_SETROOT"},
+#endif
+#ifdef SSISYS_SET_NODE_CONTEXT
+       { SSISYS_SET_NODE_CONTEXT,"SSISYS_SET_NODE_CONTEXT"},
+#endif
+#ifdef SSISYS_SET_NODENAME
+       { SSISYS_SET_NODENAME,"SSISYS_SET_NODENAME"},
+#endif
+#ifdef SSISYS_SET_IPVSPORTWEIGHT
+       { SSISYS_SET_IPVSPORTWEIGHT,"SSISYS_SET_IPVSPORTWEIGHT"},
+#endif
+#ifdef SSISYS_GET_NODENAME
+       { SSISYS_GET_NODENAME,"SSISYS_GET_NODENAME"},
+#endif
+#ifdef SSISYS_SET_CLUSTERNAME
+       { SSISYS_SET_CLUSTERNAME,"SSISYS_SET_CLUSTERNAME"},
+#endif
+#ifdef SSISYS_GET_CLUSTERNAME
+       { SSISYS_GET_CLUSTERNAME,"SSISYS_GET_CLUSTERNAME"},
+#endif
        { 0,            NULL            },
 };
 
@@ -2066,6 +2208,7 @@ struct tcb *tcp;
        struct ssisys_iovec iov;
        cls_nodeinfo_args_t cni;
        clusternode_info_t info;
+       clusternode_t node;
 
        if (entering (tcp)) {
                ts_reclaim_child_inargs_t trc;
@@ -2084,7 +2227,7 @@ struct tcb *tcp;
                            umove (tcp, (long) iov.tio_udatain, &trc) < 0)
                                goto bad;
                        tprintf (", in={pid=%ld, start=%ld}",
-                                trc.trc_pid, trc.trc_start);
+                                (long) trc.trc_pid, trc.trc_start);
                        break;
                    case SSISYS_CLUSTERNODE_INFO:
                        if (iov.tio_udatainlen != sizeof cni ||
@@ -2093,6 +2236,15 @@ struct tcb *tcp;
                        tprintf (", in={node=%ld, len=%d}",
                                 cni.nodenum, cni.info_len);
                        break;
+                   case SSISYS_CLUSTERNODE_AVAIL:
+#ifdef SSISYS_SET_NODE_CONTEXT
+                   case SSISYS_SET_NODE_CONTEXT:
+#endif
+                       if (iov.tio_udatainlen != sizeof node ||
+                           umove (tcp, (long) iov.tio_udatain, &node) < 0)
+                               goto bad;
+                       tprintf (", node=%ld", node);
+                       break;
                    default:
                    bad:
                        if (iov.tio_udatainlen) {
@@ -2111,7 +2263,7 @@ struct tcb *tcp;
                            umove (tcp, (long) iov.tio_udatain, &cni) < 0)
                                goto bad_out;
                        if (cni.info_len != sizeof info || 
-                           iov.tio_udataoutlen != sizeof &info ||
+                           /* iov.tio_udataoutlen != sizeof info || */
                            umove (tcp, (long) iov.tio_udataout, &info) < 0)
                                goto bad_out;
                        tprintf (", out={node=%ld, cpus=%d, online=%d}",
@@ -2132,9 +2284,8 @@ struct tcb *tcp;
        return 0;
 }
 
-#endif
+#endif /* SSISYS */
 
-#endif /* UNIXWARE > 2 */
 
 #ifdef MIPS