]> Zhao Yanbai Git Server - minix.git/commitdiff
make getsysinfo() a system-land call
authorDavid van Moolenbroek <david@minix3.org>
Tue, 14 Sep 2010 21:50:05 +0000 (21:50 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Tue, 14 Sep 2010 21:50:05 +0000 (21:50 +0000)
24 files changed:
include/minix/callnr.h
include/minix/com.h
include/minix/sysinfo.h
include/minix/type.h
include/unistd.h
lib/libc/other/Makefile.inc
lib/libc/other/_getsysinfo.c [deleted file]
lib/libc/syscall/Makefile.inc
lib/libc/syscall/getsysinfo.S [deleted file]
lib/libsys/Makefile
lib/libsys/getidle.c
lib/libsys/getsysinfo.c [new file with mode: 0644]
lib/libsys/pci_dev_name.c
servers/ds/inc.h
servers/ds/main.c
servers/is/inc.h
servers/pm/main.c
servers/pm/misc.c
servers/rs/inc.h
servers/rs/main.c
servers/vfs/fscall.c
servers/vfs/main.c
servers/vfs/misc.c
servers/vfs/table.c

index 58c37c7dd6a8ccefc53565ebc09ef22d893d8006..a204e48b4110b1a343163ee96ffa9da33ddc0f73 100644 (file)
@@ -69,8 +69,8 @@
 #define REBOOT           76
 #define SVRCTL           77
 #define SYSUNAME         78
-#define GETSYSINFO       79    /* to PM, VFS, RS, or DS */
-#define GETDENTS         80    /* to FS */
+#define GETSYSINFO       79    /* to PM or VFS (obsolete) */
+#define GETDENTS         80    /* to VFS */
 #define LLSEEK           81    /* to VFS */
 #define FSTATFS                  82    /* to VFS */
 #define STATVFS          83    /* to VFS */
@@ -87,7 +87,7 @@
 #define FTRUNCATE        94    /* to VFS */
 #define FCHMOD           95    /* to VFS */
 #define FCHOWN           96    /* to VFS */
-#define GETSYSINFO_UP    97    /* to PM or VFS */
+#define GETSYSINFO_UP    97    /* to PM (obsolete) */
 #define SPROF             98    /* to PM */
 #define CPROF             99    /* to PM */
 
index 04f289e448b4ca6dfd83b0e3404439af7a381b99..04fc74d9559603156c07076b0f6c778e5f7b3271 100644 (file)
 #define PM_NUID                                        m2_i1
 #define PM_NGID                                        m2_i2
 
-/* Field names for GETSYSINFO_UP (PM). */
+/* Field names for GETSYSINFO_UP (PM) (obsolete). */
 #define SIU_WHAT       m2_i1
+#  define SIU_LOADINFO 1               /* retrieve load info data */
+#  define SIU_SYSTEMHZ 2               /* retrieve system clock frequency */
 #define SIU_LEN                m2_i2
 #define SIU_WHERE      m2_p1
 
 #      define GCOV_BUFF_P  m1_p1
 #      define GCOV_BUFF_SZ m1_i1
 
+/* Common request to several system servers: retrieve system information.
+ * The GETSYSINFO userland call is an (old and deprecated) alias of this, so do
+ * not change the fields or old userland applications may break.
+ */
+#define COMMON_GETSYSINFO      (COMMON_RQ_BASE+2)
+#      define SI_WHAT          m1_i1
+#      define SI_WHERE         m1_p1
+
 /*===========================================================================*
  *                Messages for VM server                                    *
  *===========================================================================*/
index 53f21b1044d04c27723185f30e9d902a7510b0a8..d2b602c7dc5f4d10d6f2e3932b3d858937fc3bf6 100644 (file)
@@ -6,15 +6,15 @@
 #include <minix/type.h>
 
 _PROTOTYPE( int getsysinfo, (endpoint_t who, int what, void *where)       );
-_PROTOTYPE( int minix_getkproctab, (void *pr, int nprocs, int assert));
-_PROTOTYPE( ssize_t getsysinfo_up, (endpoint_t who, int what, size_t size,
-       void *where));
 
-#define SIU_LOADINFO   1       /* retrieve load info data */
-#define SIU_SYSTEMHZ   2       /* retrieve system clock frequency */
-#define SIU_IDLETSC    3       /* retrieve cumulative idle timestamp count */
-
-/* Exported system parameters. */
+/* What system info to retrieve with sysgetinfo(). */
+#define SI_PROC_TAB       2    /* copy of entire process table */
+#define SI_DMAP_TAB       3    /* get device <-> driver mappings */
+#define SI_DATA_STORE     5    /* get copy of data store mappings */
+#define SI_SUBSCRIPTION           6    /* get copy of data store subscriptions */
+#define SI_LOADINFO       7    /* get copy of load average structure */
+#define SI_CALL_STATS     9    /* system call statistics */
+#define SI_PROCPUB_TAB    11   /* copy of public entries of process table */
 
 #endif
 
index c88d8de2e02383df5814a1b9c18bbb7e0df41c71..5dc039f747b5b4610986e58e5fb30341a758f42c 100644 (file)
@@ -198,20 +198,5 @@ struct k_randomness {
   } bin[RANDOM_SOURCES];
 };
 
-/* information on PCI devices */
-
-#define PCIINFO_ENTRY_SIZE 80
-
-struct pciinfo_entry {
-       u16_t pie_vid;
-       u16_t pie_did;
-       char pie_name[PCIINFO_ENTRY_SIZE];
-};
-
-struct pciinfo {
-       size_t pi_count;
-       struct pciinfo_entry pi_entries[NR_PCIDEV];
-};
-
 #endif /* _TYPE_H */
 
index 24ff7e0a58ec4ea3fb322deb53953495f4724d65..3edcdbf83e4f7e38b2fdb8a9f2d1d33685b6e50c 100644 (file)
 #define _PM_SEG_FLAG (1L << 30)        /* for read() and write() to FS by PM */
 #endif
 
-/* What system info to retrieve with sysgetinfo(). */
-#define SI_KINFO          0    /* get kernel info via PM */
-#define SI_PROC_ADDR      1    /* address of process table */
-#define SI_PROC_TAB       2    /* copy of entire process table */
-#define SI_DMAP_TAB       3    /* get device <-> driver mappings */
-#define SI_MEM_ALLOC      4    /* get memory allocation data */
-#define SI_DATA_STORE     5    /* get copy of data store mappings */
-#define SI_SUBSCRIPTION           6    /* get copy of data store subscriptions */
-#define SI_LOADINFO       7    /* get copy of load average structure */
-#define SI_KPROC_TAB      8    /* copy of kernel process table */
-#define SI_CALL_STATS     9    /* system call statistics */
-#define SI_PCI_INFO       10   /* get kernel info via PM */
-#define SI_PROCPUB_TAB    11   /* copy of public entries of process table */
-
 /* NULL must be defined in <unistd.h> according to POSIX Sec. 2.7.1. */
 #include <sys/null.h>
 
@@ -198,7 +184,6 @@ _PROTOTYPE( char *crypt, (const char *_key, const char *_salt)              );
 #endif
 
 
-_PROTOTYPE( int getsysinfo, (endpoint_t who, int what, void *where)    );
 _PROTOTYPE( int getsigset, (sigset_t *sigset)                          );
 _PROTOTYPE( int getprocnr, (void)                                      );
 _PROTOTYPE( int getnprocnr, (pid_t pid)                                        );
index d8d9026922fd7cfd1e554c9f0dde2aa7b99265e9..5950d97f1b2577b58984fc6c7646b8ebe7457995 100644 (file)
@@ -20,7 +20,6 @@ SRCS+=  \
        _getpprocnr.c \
        _getprocnr.c \
        _getsigset.c \
-       _getsysinfo.c \
        _lseek64.c \
        _mapdriver.c \
        _mcontext.c \
diff --git a/lib/libc/other/_getsysinfo.c b/lib/libc/other/_getsysinfo.c
deleted file mode 100644 (file)
index e43b3d4..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-
-#include <lib.h>
-#include <unistd.h>
-#include <timers.h>
-#include <minix/endpoint.h>
-#define getsysinfo     _getsysinfo
-#define getsysinfo_up  _getsysinfo_up
-#include <minix/sysinfo.h>
-#include <minix/const.h>
-
-#include <minix/ipc.h>
-#include <minix/com.h>
-#include <minix/sysinfo.h>
-#include <minix/config.h>
-#include <minix/type.h>
-#include <minix/const.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <machine/archtypes.h>
-#include "../../../kernel/proc.h"
-
-PUBLIC int getsysinfo(who, what, where)
-endpoint_t who;                        /* from whom to request info */
-int what;                      /* what information is requested */
-void *where;                   /* where to put it */
-{
-  message m;
-  m.m1_i1 = what;
-  m.m1_p1 = where;
-  if (_syscall(who, GETSYSINFO, &m) < 0) return(-1);
-  return(0);
-}
-
-PUBLIC int minix_getkproctab(void *vpr, int nprocs, int assert)
-{
-       int r, i, fail = 0;
-       struct proc *pr = vpr;
-
-       if((r=getsysinfo(PM_PROC_NR, SI_KPROC_TAB, pr)) < 0)
-               return r;
-
-       for(i = 0; i < nprocs; i++) {
-               if(pr[i].p_magic != PMAGIC) {
-                       fail = 1;
-                       break;
-               }
-       }
-
-       if(!fail)
-               return 0;
-
-       if(assert) {
-               fprintf(stderr, "%s: process table failed sanity check.\n", getprogname());
-               fprintf(stderr, "is kernel out of sync?\n");
-               exit(1);
-       }
-
-       errno = ENOSYS;
-
-       return -1;
-}
-
-/* Unprivileged variant of getsysinfo. */
-PUBLIC ssize_t getsysinfo_up(who, what, size, where)
-endpoint_t who;                        /* from whom to request info */
-int what;                      /* what information is requested */
-size_t size;                   /* input and output size */
-void *where;                   /* where to put it */
-{
-  message m;
-  m.SIU_WHAT = what;
-  m.SIU_WHERE = where;
-  m.SIU_LEN = size;
-  return _syscall(who, GETSYSINFO_UP, &m);
-}
-
index 05ed54ebf072fb6b5b7eb729c9f6a801266fc01d..6c81ffccec6139fda4277f78a340c684e82698c2 100644 (file)
@@ -56,7 +56,6 @@ SRCS+=  \
        getpprocnr.S \
        getprocnr.S \
        getsigset.S \
-       getsysinfo.S \
        getuid.S \
        ioctl.S \
        isatty.S \
diff --git a/lib/libc/syscall/getsysinfo.S b/lib/libc/syscall/getsysinfo.S
deleted file mode 100644 (file)
index cd413b4..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <machine/asm.h>
-
-IMPORT(_getsysinfo)
-ENTRY(getsysinfo)
-       jmp     _C_LABEL(_getsysinfo)
-
-IMPORT(_getsysinfo_up)
-ENTRY(getsysinfo_up)
-       jmp     _C_LABEL(_getsysinfo_up)
-
index e33d2594294258d8499459c57817af66c65f9a66..f2475d135033079696c4de7a9276d2f198f7811e 100644 (file)
@@ -5,6 +5,7 @@ LIB=            sys
 SRCS=  \
        alloc_util.c \
        assert.c \
+       getsysinfo.c \
        kernel_call.c \
        panic.c \
        pci_attr_r16.c \
index 90893fbfea19e045863cd9dde96480830ece9e21..ce7ddf70d30632c91bbb61e9c79a0b811b17f4d0 100644 (file)
@@ -6,21 +6,19 @@
  *   getidle();
  *   ...
  *   idleperc = getidle();
- *   printf("CPU usage: %lg%%\n", 100.0 - idleperc);
+ *   if (idleperc >= 0.0)
+ *     printf("CPU usage: %lg%%\n", 100.0 - idleperc);
  *
- * This routine goes through PM to get the idle time, rather than making the
- * sys_getinfo() call to the kernel directly. This means that it can be used
- * by non-system processes as well, but it will incur some extra overhead in
- * the system case. The overhead does not end up being measured, because the
- * system is clearly not idle while the system calls are being made. In any
- * case, for this reason, only one getidle() run is allowed at a time.
+ * Notes:
+ * - This functionality can only be used by system processes.
+ * - The kernel has to be compiled with CONFIG_IDLE_TSC support.
+ * - Only one getidle() run is allowed per process at a time.
  *
- * Note that the kernel has to be compiled with CONFIG_IDLE_TSC support.
  */
 
 #define _MINIX 1
 #define _SYSTEM 1
-#include <minix/sysinfo.h>
+#include <lib.h>
 #include <minix/u64.h>
 #include <minix/sysutil.h>
 
@@ -52,8 +50,7 @@ double getidle(void)
   int r;
 
   if (!running) {
-       r = getsysinfo_up(PM_PROC_NR, SIU_IDLETSC, sizeof(idle), &idle);
-       if (r != sizeof(idle))
+       if ((r = sys_getidletsc(&idle)) != OK)
                return -1.0;
 
        running = 1;
@@ -67,8 +64,7 @@ double getidle(void)
 
        running = 0;
 
-       r = getsysinfo_up(PM_PROC_NR, SIU_IDLETSC, sizeof(idle2), &idle2);
-       if (r != sizeof(idle2))
+       if ((r = sys_getidletsc(&idle2)) != OK)
                return -1.0;
 
        idelta = sub64(idle2, idle);
diff --git a/lib/libsys/getsysinfo.c b/lib/libsys/getsysinfo.c
new file mode 100644 (file)
index 0000000..575a900
--- /dev/null
@@ -0,0 +1,16 @@
+
+#include <lib.h>
+#include <minix/sysinfo.h>
+#include <minix/com.h>
+
+PUBLIC int getsysinfo(who, what, where)
+endpoint_t who;                        /* from whom to request info */
+int what;                      /* what information is requested */
+void *where;                   /* where to put it */
+{
+  message m;
+  m.SI_WHAT = what;
+  m.SI_WHERE = where;
+  if (_syscall(who, COMMON_GETSYSINFO, &m) < 0) return(-1);
+  return(0);
+}
index f9ca48472662481a141153581eb71c88f915f66f..b4dfb1ba1dc0ec40e42dc52c00872017fcb091ad 100644 (file)
@@ -11,7 +11,7 @@ pci_dev_name.c
  *===========================================================================*/
 PUBLIC char *pci_dev_name(u16_t vid, u16_t did)
 {
-       static char name[PCIINFO_ENTRY_SIZE];   /* We need a better interface for this */
+       static char name[80];   /* We need a better interface for this */
 
        int r;
        cp_grant_id_t gid;
index 34064bd26a26e01a478ba77a6fde35ec65600b48..66f282415471bd07626c7658cb1f4baf05aa9b30 100644 (file)
@@ -21,6 +21,7 @@
 #include <minix/com.h>
 #include <minix/ds.h>
 #include <minix/syslib.h>
+#include <minix/sysinfo.h>
 #include <minix/sysutil.h>
 #include <minix/keymap.h>
 #include <minix/bitmap.h>
@@ -29,7 +30,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-#include <unistd.h>
 #include <signal.h>
 
 #include "proto.h"
index 27a59a9e17fb2826492bbb034ddf5dca14afce3b..0b7ba6f8e319d3677050dc6a0104142bd8e4482c 100644 (file)
@@ -72,7 +72,7 @@ PUBLIC int main(int argc, char **argv)
       case DS_SNAPSHOT:
          result = do_snapshot(&m);
          break;
-      case GETSYSINFO:
+      case COMMON_GETSYSINFO:
          result = do_getsysinfo(&m);
          break;
       default: 
index 08174df46a2d657c0c88f126a06ca8207c8b84c7..11e397f5b3d6746c722aef21729d01f93af16d2e 100644 (file)
@@ -18,6 +18,7 @@
 #include <minix/const.h>
 #include <minix/com.h>
 #include <minix/syslib.h>
+#include <minix/sysinfo.h>
 #include <minix/sysutil.h>
 #include <minix/keymap.h>
 #include <minix/bitmap.h>
@@ -25,7 +26,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-#include <unistd.h>
 #include <signal.h>
 
 #include <machine/archtypes.h>
index 3032ff22a2c5867b914dcef285fab84128757580..09dbda2e3d4e035ce4ecbf016dc127f711ca93e2 100644 (file)
@@ -128,6 +128,9 @@ PUBLIC int main()
                else
                        result= ENOSYS;
                break;
+       case COMMON_GETSYSINFO:
+               result = do_getsysinfo();
+               break;
        default:
                /* Else, if the system call number is valid, perform the
                 * call.
index 4efccf2ce0cbcb41d25c196c4e65df5f8c56b790..fa5a2f2a1fd805debb23d7ecbdc59358b5235f5e 100644 (file)
@@ -60,8 +60,6 @@ PRIVATE char *uts_tbl[] = {
 PUBLIC unsigned long calls_stats[NCALLS];
 #endif
 
-FORWARD _PROTOTYPE( int getpciinfo, (struct pciinfo *pciinfo)          );
-
 /*===========================================================================*
  *                             do_procstat                                  *
  *===========================================================================*/
@@ -160,7 +158,6 @@ PUBLIC int do_getsysinfo()
   vir_bytes src_addr, dst_addr;
   struct kinfo kinfo;
   struct loadinfo loadinfo;
-  struct pciinfo pciinfo;
   static struct proc proctab[NR_PROCS+NR_TASKS];
   size_t len;
   int s, r;
@@ -174,38 +171,25 @@ PUBLIC int do_getsysinfo()
        return EPERM;
   }
 
+  /* This call should no longer be used by user applications. In the future,
+   * requests from non-system processes should be denied. For now, just warn.
+   */
+  if (call_nr == GETSYSINFO)
+  {
+       printf("PM: obsolete call of do_getsysinfo() by proc %d '%s'\n",
+               mp->mp_endpoint, mp->mp_name);
+  }
+
   switch(m_in.info_what) {
-  case SI_KINFO:                       /* kernel info is obtained via PM */
-        sys_getkinfo(&kinfo);
-        src_addr = (vir_bytes) &kinfo;
-        len = sizeof(struct kinfo);
-        break;
-  case SI_PROC_ADDR:                   /* get address of PM process table */
-       proc_addr = &mproc[0];
-       src_addr = (vir_bytes) &proc_addr;
-       len = sizeof(struct mproc *);
-       break; 
   case SI_PROC_TAB:                    /* copy entire process table */
         src_addr = (vir_bytes) mproc;
         len = sizeof(struct mproc) * NR_PROCS;
         break;
-  case SI_KPROC_TAB:                   /* copy entire process table */
-       if((r=sys_getproctab(proctab)) != OK)
-               return r;
-       src_addr = (vir_bytes) proctab;
-       len = sizeof(proctab);
-        break;
   case SI_LOADINFO:                    /* loadinfo is obtained via PM */
         sys_getloadinfo(&loadinfo);
         src_addr = (vir_bytes) &loadinfo;
         len = sizeof(struct loadinfo);
         break;
-  case SI_PCI_INFO:                    /* PCI info is obtained via PM */
-        if ((r=getpciinfo(&pciinfo)) != OK)
-                       return r;
-        src_addr = (vir_bytes) &pciinfo;
-        len = sizeof(struct pciinfo);
-        break;
 #if ENABLE_SYSCALL_STATS
   case SI_CALL_STATS:
        src_addr = (vir_bytes) calls_stats;
@@ -230,9 +214,11 @@ PUBLIC int do_getsysinfo_up()
   vir_bytes src_addr, dst_addr;
   struct loadinfo loadinfo;
   size_t len, real_len;
-  u64_t idle_tsc;
   int s;
 
+  printf("PM: obsolete call of do_getsysinfo_up() by proc %d '%s'\n",
+       mp->mp_endpoint, mp->mp_name);
+
   switch(m_in.SIU_WHAT) {
   case SIU_LOADINFO:                   /* loadinfo is obtained via PM */
         if ((s = sys_getloadinfo(&loadinfo)) != OK)
@@ -244,12 +230,6 @@ PUBLIC int do_getsysinfo_up()
         src_addr = (vir_bytes) &system_hz;
         real_len = sizeof(system_hz);
        break;
-  case SIU_IDLETSC:
-       if ((s = sys_getidletsc(&idle_tsc)) != OK)
-               return s;
-       src_addr = (vir_bytes) &idle_tsc;
-       real_len = sizeof(idle_tsc);
-       break;
   default:
        return(EINVAL);
   }
@@ -580,45 +560,3 @@ char *brk_addr;
        _brksize = brk_addr;
        return 0;
 }
-
-/*===========================================================================*
- *                             getpciinfo                                   *
- *===========================================================================*/
-
-PRIVATE int getpciinfo(pciinfo)
-struct pciinfo *pciinfo;
-{
-       int devind, r;
-       struct pciinfo_entry *entry;
-       char *name;
-       u16_t vid, did;
-
-       /* look up PCI process number */
-       pci_init();
-
-       /* start enumerating devices */
-       entry = pciinfo->pi_entries;
-       r = pci_first_dev(&devind, &vid, &did);
-       while (r)
-       {
-               /* fetch device name */
-               name = pci_dev_name(vid, did);
-               if (!name)
-                       name = "";
-
-               /* store device information in table */
-               assert((char *) entry < (char *) (pciinfo + 1));
-               entry->pie_vid = vid;
-               entry->pie_did = did;
-               strncpy(entry->pie_name, name, sizeof(entry->pie_name));
-               entry->pie_name[sizeof(entry->pie_name) - 1] = 0;
-               entry++;
-               
-               /* continue with the next device */
-               r = pci_next_dev(&devind, &vid, &did);
-       }
-       
-       /* store number of entries */
-       pciinfo->pi_count = entry - pciinfo->pi_entries;
-       return OK;
-}
index 9c4cbba52858dcb3345201ed6e8c50263f75eca2..70bd8b7fc11150ce6f0495781077c9048148738c 100644 (file)
@@ -26,6 +26,7 @@
 #include <minix/const.h>
 #include <minix/com.h>
 #include <minix/syslib.h>
+#include <minix/sysinfo.h>
 #include <minix/sysutil.h>
 #include <minix/keymap.h>
 #include <minix/bitmap.h>
@@ -46,7 +47,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-#include <unistd.h>
 #include <signal.h>
 #include <assert.h>
 #include <sys/param.h>
index a314938f87d55e7baa00ebc7d6ba6dca22a6335c..a5293e3faa7421b224693a43f5973936d97fe0c5 100644 (file)
@@ -91,7 +91,7 @@ PUBLIC int main(void)
        * Handle the request and send a reply to the caller. 
        */
       else {
-         if (call_nr != GETSYSINFO && 
+         if (call_nr != COMMON_GETSYSINFO && 
                (call_nr < RS_RQ_BASE || call_nr >= RS_RQ_BASE+0x100))
          {
                /* Ignore invalid requests. Do not try to reply. */
@@ -111,7 +111,8 @@ PUBLIC int main(void)
           case RS_UPDATE:      result = do_update(&m);         break;
           case RS_CLONE:       result = do_clone(&m);          break;
           case RS_EDIT:        result = do_edit(&m);           break;
-          case GETSYSINFO:     result = do_getsysinfo(&m);     break;
+          case COMMON_GETSYSINFO: 
+                               result = do_getsysinfo(&m);     break;
          case RS_LOOKUP:       result = do_lookup(&m);         break;
          /* Ready messages. */
          case RS_INIT:         result = do_init_ready(&m);     break;
index c6026ef4aa2c1f1667c5f2b2d65b64e12dff8b51..249c41efc515ed3cc7dd8457e192227c1dfbf434 100644 (file)
@@ -130,18 +130,14 @@ message *m;                               /* request/reply message pointer */
        /* Initialize global variables for the nested call */
        set_globals(m);
 
-       /* Perform the nested call */
-       if (call_nr < 0 || call_nr >= NCALLS) {
+       /* Perform the nested call - only getsysinfo() is allowed right now */
+       if (call_nr == COMMON_GETSYSINFO) {
+               r = do_getsysinfo();
+       } else {
                printf("VFS: invalid nested call %d from FS %d\n", call_nr,
                        who_e);
 
                r = ENOSYS;
-       } else {
-#if ENABLE_SYSCALL_STATS
-               calls_stats[call_nr]++;
-#endif
-
-               r = (*call_vec[call_nr])();
        }
 
        /* Store the result, and restore original global variables */
index 0a1b6a1f35758c2ac88e14853773cc63b6e525cf..5588dc71e08c4e5f7c0aea3bb9aa42187550c116 100644 (file)
@@ -162,7 +162,10 @@ PUBLIC int main(void)
                error= do_mapdriver();
                if (error != SUSPEND) reply(who_e, error);
                break;
-
+             case COMMON_GETSYSINFO:
+               error= do_getsysinfo();
+               if (error != SUSPEND) reply(who_e, error);
+               break;
              default:
                /* Call the internal function that does the work. */
                if (call_nr < 0 || call_nr >= NCALLS) { 
index 620db3c1c9ef2b922b839c61798533d051fe270c..924803a6c1ed4c91f929754198aac26935b92526 100644 (file)
@@ -26,6 +26,7 @@
 #include <minix/safecopies.h>
 #include <minix/endpoint.h>
 #include <minix/com.h>
+#include <minix/sysinfo.h>
 #include <minix/u64.h>
 #include <sys/ptrace.h>
 #include <sys/svrctl.h>
@@ -72,12 +73,15 @@ PUBLIC int do_getsysinfo()
 
   if (!super_user) return(EPERM);
 
+  /* This call should no longer be used by user applications. In the future,
+   * requests from non-system processes should be denied. For now, just warn.
+   */
+  if (call_nr == GETSYSINFO) {
+       printf("VFS: obsolete call of do_getsysinfo() by proc %d\n",
+               fp->fp_endpoint);
+  }
+
   switch(m_in.info_what) {
-  case SI_PROC_ADDR:
-       proc_addr = &fproc[0];
-       src_addr = (vir_bytes) &proc_addr;
-       len = sizeof(struct fproc *);
-       break; 
   case SI_PROC_TAB:
        src_addr = (vir_bytes) fproc;
        len = sizeof(struct fproc) * NR_PROCS;
index c46a04cca592001ffe9380468e717a80c3636802..b2557df8ae299d42d28eaaae1cb2fae6af276389 100644 (file)
@@ -112,7 +112,7 @@ PUBLIC _PROTOTYPE (int (*call_vec[]), (void) ) = {
        do_ftruncate,   /* 94 = truncate */
        do_chmod,       /* 95 = fchmod */
        do_chown,       /* 96 = fchown */
-       no_sys,         /* 97 = getsysinfo_up */
+       no_sys,         /* 97 = (getsysinfo_up) */
        no_sys,         /* 98 = (sprofile) */
        no_sys,         /* 99 = (cprofile) */
        /* THE MINIX3 ABI ENDS HERE */