]> Zhao Yanbai Git Server - minix.git/commitdiff
Various small IS, TTY, isofs fixes
authorDavid van Moolenbroek <david@minix3.org>
Mon, 2 Nov 2009 23:04:52 +0000 (23:04 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Mon, 2 Nov 2009 23:04:52 +0000 (23:04 +0000)
IS:
- do not use p_getfrom_e for a process that is sending
- register with TTY only function keys that are used
- various header and formatting fixes
- proper shutdown code

TTY:
- restore proper Ctrl+F1 dump contents

isofs:
- don't even try to call sys_exit()

drivers/tty/Makefile
drivers/tty/keyboard.c
servers/is/dmp.c
servers/is/dmp_fs.c
servers/is/dmp_kernel.c
servers/is/dmp_pm.c
servers/is/dmp_rs.c
servers/is/main.c
servers/is/proto.h
servers/iso9660fs/utility.c

index accf129084e2ebeb4b0f747159da5c0f5e23c17e..c1d15301ae15391665c8603cf5cd0aaba473c045 100644 (file)
@@ -14,7 +14,7 @@ d = ..
 # programs, flags, etc.
 MAKE = exec make
 CC =   exec cc
-CPPFLAGS = -I$i 
+CPPFLAGS = -I../../kernel/arch/$(ARCH)/include -I$i 
 CFLAGS = $(CPPFLAGS)
 LDFLAGS = -i
 LIBS =  -lsys -ltimers
index db1a70614104cfd10c1b802038643989b9b661bc..ea5de57cf3a4cd5156e3096a60ea072695e8b810 100644 (file)
 #include <termios.h>
 #include <signal.h>
 #include <unistd.h>
+#include <archtypes.h>
 #include <minix/callnr.h>
 #include <minix/com.h>
 #include <minix/keymap.h>
 #include "tty.h"
+#include "../../kernel/const.h"
+#include "../../kernel/config.h"
+#include "../../kernel/type.h"
+#include "../../kernel/proc.h"
 
 u16_t keymap[NR_SCAN_CODES * MAP_COLS] = {
 #include "keymaps/us-std.src"
@@ -1186,17 +1191,33 @@ int scode;                      /* scan code for a function key */
  *===========================================================================*/
 PRIVATE void show_key_mappings()
 {
-    int i;
+    int i,s;
+    struct proc proc;
+
     printf("\n");
     printf("System information.   Known function key mappings to request debug dumps:\n");
     printf("-------------------------------------------------------------------------\n");
     for (i=0; i<12; i++) {
 
       printf(" %sF%d: ", i+1<10? " ":"", i+1);
-      printf("%-14.14s", "<none>");
+      if (fkey_obs[i].proc_nr != NONE) {
+          if ((s = sys_getproc(&proc, fkey_obs[i].proc_nr))!=OK)
+              printf("%-14.14s", "<unknown>");
+          else
+              printf("%-14.14s", proc.p_name);
+      } else {
+          printf("%-14.14s", "<none>");
+      }
 
       printf("    %sShift-F%d: ", i+1<10? " ":"", i+1);
-      printf("%-14.14s", "<none>");
+      if (sfkey_obs[i].proc_nr != NONE) {
+          if ((s = sys_getproc(&proc, sfkey_obs[i].proc_nr))!=OK)
+              printf("%-14.14s", "<unknown>");
+          else
+              printf("%-14.14s", proc.p_name);
+      } else {
+          printf("%-14.14s", "<none>");
+      }
       printf("\n");
     }
     printf("\n");
index 5294de241af9f769a439ee3ed20ac322cc14149b..75618a0f3338183a128363034f3394da29fc91a9 100644 (file)
@@ -4,7 +4,8 @@
  * corresponding dump procedure is called.  
  *
  * The entry points into this file are
- *   handle_fkey:      handle a function key pressed notification
+ *   map_unmap_fkeys:  register or unregister function key maps with TTY
+ *   do_fkey_pressed:  handle a function key pressed notification
  */
 
 #include "inc.h"
@@ -40,6 +41,31 @@ struct hook_entry {
  */
 #define NHOOKS (sizeof(hooks)/sizeof(hooks[0]))
 
+/*===========================================================================*
+ *                             map_unmap_keys                               *
+ *===========================================================================*/
+PUBLIC void map_unmap_fkeys(map)
+int map;
+{
+  int fkeys, sfkeys;
+  int h, s;
+
+  fkeys = sfkeys = 0;
+
+  for (h = 0; h < NHOOKS; h++) {
+      if (hooks[h].key >= F1 && hooks[h].key <= F12) 
+          bit_set(fkeys, hooks[h].key - F1 + 1);
+      else if (hooks[h].key >= SF1 && hooks[h].key <= SF12)
+          bit_set(sfkeys, hooks[h].key - SF1 + 1);
+  }
+
+  if (map) s = fkey_map(&fkeys, &sfkeys);
+  else s = fkey_unmap(&fkeys, &sfkeys);
+
+  if (s != OK)
+       report("IS", "warning, fkey_ctl failed:", s);
+}
+
 /*===========================================================================*
  *                             handle_fkey                                  *
  *===========================================================================*/
index 8eafb20e81dadbd5f27de8d1cc7d211d30202175..05ddbec82e727a6d24ed1d2f30f1423659397aed 100644 (file)
@@ -35,13 +35,13 @@ PUBLIC void fproc_dmp()
        fp = &fproc[i];
        if (fp->fp_pid <= 0) continue;
        if (++n > 22) break;
-       printf("%3d  %4d  %2d/%d  0x%05x %2d (%d)  %2d (%d)  %3d   %3d %3d ",
+       printf("%3d  %4d  %2d/%d  0x%05x %2d (%2d) %2d (%2d) %3d   %3d %3d ",
                i, fp->fp_pid, 
                ((fp->fp_tty>>MAJOR)&BYTE), ((fp->fp_tty>>MINOR)&BYTE), 
                fp->fp_umask,
                fp->fp_realuid, fp->fp_effuid, fp->fp_realgid, fp->fp_effgid,
                fp->fp_sesldr,
-               fp->fp_blocked_on, fp->fp_revived
+               fp->fp_blocked_on, !!fp->fp_revived
        );
        if (fp->fp_blocked_on == FP_BLOCKED_ON_OTHER)
                printf("%4d\n", fp->fp_task);
index e5c2cc3dd768b04885a64628c5d5267b6636fa0a..d9ba0abae6bc7a641046fdad267aa6a1149f3daa 100644 (file)
 #define PRINTRTS(rp) { \
        char *procname = "";    \
        printf(" %s", p_rts_flags_str(rp->p_rts_flags));        \
-       if (rp->p_rts_flags & (SENDING|RECEIVING)) {            \
+       if (rp->p_rts_flags & SENDING)                          \
+               procname = proc_name(_ENDPOINT_P(rp->p_sendto_e)); \
+       else if (rp->p_rts_flags & RECEIVING)                   \
                procname = proc_name(_ENDPOINT_P(rp->p_getfrom_e)); \
-       } \
        printf(" %-7.7s", procname);    \
 }
 
@@ -312,7 +313,7 @@ PUBLIC void privileges_dmp()
       return;
   }
 
-  printf("\n--nr-id-name---- -flags- -traps- grants -ipc_to-- -ipc_sr-- -system calls--\n");
+  printf("\n--nr-id-name---- -flags- -traps- grants -ipc_to-- -system calls--\n");
 
   PROCLOOP(rp, oldrp)
         r = -1;
@@ -372,7 +373,7 @@ PUBLIC void proctab_dmp()
       return;
   }
 
-  printf("\n-nr-----gen---endpoint-name--- -prior-quant- -user----sys--rts flags\n");
+  printf("\n-nr-----gen---endpoint-name--- -prior-quant- -user----sys-rtsflags-from/to-\n");
 
   PROCLOOP(rp, oldrp)
        text = rp->p_memmap[T].mem_phys;
@@ -380,7 +381,7 @@ PUBLIC void proctab_dmp()
        size = rp->p_memmap[T].mem_len
                + ((rp->p_memmap[S].mem_phys + rp->p_memmap[S].mem_len) - data);
        printf(" %5d %10d ", _ENDPOINT_G(rp->p_endpoint), rp->p_endpoint);
-       printf("%-8.8s %02u/%02u %02d/%02u %6lu %6lu",
+       printf("%-8.8s %02u/%02u %02d/%02u %6lu %6lu ",
               rp->p_name,
               rp->p_priority, rp->p_max_priority,
               rp->p_ticks_left, rp->p_quantum_size, 
index 2c8071901578be600e14bc095d8caa76256de065..b566f559563825b72b19dcae2f341509ad1fdb64 100644 (file)
@@ -82,15 +82,15 @@ PUBLIC void sigaction_dmp()
   getsysinfo(PM_PROC_NR, SI_PROC_TAB, mproc);
   getuptime(&uptime);
 
-  printf("-process- -nr- --ignore- --catch- --block- -tomess-- -pending-- -alarm---\n");
+  printf("-process- -nr- --ignore- --catch- --block- -tomess- -pending- -alarm---\n");
   for (i=prev_i; i<NR_PROCS; i++) {
        mp = &mproc[i];
        if (mp->mp_pid == 0 && i != PM_PROC_NR) continue;
        if (++n > 22) break;
        printf("%8.8s  %3d  ", mp->mp_name, i);
-       printf(" 0x%06x 0x%06x 0x%06x 0x%06x   ", 
+       printf(" %08x %08x %08x %08x  ", 
                mp->mp_ignore, mp->mp_catch, mp->mp_sigmask, mp->mp_sig2mess); 
-       printf("0x%06x  ", mp->mp_sigpending);
+       printf("%08x  ", mp->mp_sigpending);
        if (mp->mp_flags & ALARM_ON) printf("%8u", mp->mp_timer.tmr_exp_time-uptime);
        else printf("       -");
        printf("\n");
index 3602beadb6666fbcce100e98c65e0f8975b0e76d..4b2904b2234fe384c9b865344623b1efab06f150 100644 (file)
@@ -28,7 +28,7 @@ PUBLIC void rproc_dmp()
   getsysinfo(RS_PROC_NR, SI_PROC_TAB, rproc);
 
   printf("Reincarnation Server (RS) system process table dump\n");
-  printf("-----proc---pid-flag--dev- -T---checked----alive-starts-backoff-label command-\n");
+  printf("-endpoint-flag--dev- -T---checked----alive-starts-backoff-label command-\n");
   for (i=prev_i; i<NR_SYS_PROCS; i++) {
        rp = &rproc[i];
        if (! rp->r_flags & RS_IN_USE) continue;
index 63996e502d2cfa7e6f7f4fcd7c461691c04e8eab..15f2b5ee05d6e363c2dee0a11ebd9422c8aa0fdf 100644 (file)
@@ -20,6 +20,7 @@ extern int errno;     /* error number set by system library */
 
 /* Declare some local functions. */
 FORWARD _PROTOTYPE(void init_server, (int argc, char **argv)           );
+FORWARD _PROTOTYPE(void sig_handler, (void)                            );
 FORWARD _PROTOTYPE(void get_work, (void)                               );
 FORWARD _PROTOTYPE(void reply, (int whom, int result)                  );
 
@@ -54,8 +55,8 @@ PUBLIC int main(int argc, char **argv)
                              }
                              continue;
                      case PM_PROC_NR:
-                             result = EDONTREPLY;
-                             break;
+                             sig_handler();
+                             continue;
                      case TTY_PROC_NR:
                              result = do_fkey_pressed(&m_in);
                              break;
@@ -84,8 +85,6 @@ PUBLIC int main(int argc, char **argv)
 PRIVATE void init_server(int argc, char **argv)
 {
 /* Initialize the information service. */
-  int fkeys, sfkeys;
-  int i, s;
   struct sigaction sigact;
 
   /* Install signal handler. Ask PM to transform signal into message. */
@@ -95,12 +94,27 @@ PRIVATE void init_server(int argc, char **argv)
   if (sigaction(SIGTERM, &sigact, NULL) < 0) 
       report("IS","warning, sigaction() failed", errno);
 
-  /* Set key mappings. IS takes all of F1-F12 and Shift+F1-F10. */
-  fkeys = sfkeys = 0;
-  for (i=1; i<=12; i++) bit_set(fkeys, i);
-  for (i=1; i<=10; i++) bit_set(sfkeys, i);
-  if ((s=fkey_map(&fkeys, &sfkeys)) != OK)
-      report("IS", "warning, fkey_map failed:", s);
+  /* Set key mappings. */
+  map_unmap_fkeys(TRUE /*map*/);
+}
+
+/*===========================================================================*
+ *                             sig_handler                                  *
+ *===========================================================================*/
+PRIVATE void sig_handler()
+{
+  sigset_t sigset;
+
+  /* Try to obtain signal set from PM. */
+  if (getsigset(&sigset) != 0) return;
+
+  /* Only check for termination signal. */
+  if (!sigismember(&sigset, SIGTERM)) return;
+
+  /* Shutting down. Unset key mappings, and quit. */
+  map_unmap_fkeys(FALSE /*map*/);
+
+  exit(0);
 }
 
 /*===========================================================================*
index 6d70aa34f93ee0ab3dab9868b73767c848a1e762..fbc531869458fe04aac053e2bde7b8597d61cfb3 100644 (file)
@@ -1,12 +1,13 @@
 /* Function prototypes. */
 
 /* main.c */
-_PROTOTYPE( int  main, (int argc, char **argv)                         );
+_PROTOTYPE( int main, (int argc, char **argv)                          );
 
 /* dmp.c */
+_PROTOTYPE( void map_unmap_fkeys, (int map)                            );
 _PROTOTYPE( int do_fkey_pressed, (message *m)                          );
 _PROTOTYPE( void mapping_dmp, (void)                                   );
-_PROTOTYPE( void vm_dmp, (void)                                        );
+_PROTOTYPE( void vm_dmp, (void)                                                );
 
 /* dmp_kernel.c */
 _PROTOTYPE( void proctab_dmp, (void)                                   );
index 6f4a676aebc51cca28bfb35f6ff1803506008f33..85da41e9e985d69e664d28313ea305270456cb29 100644 (file)
@@ -33,5 +33,5 @@ int num;                      /* number to go with it */
 
   printf("FS panic (%s): %s ", who, mess);
   if (num != NO_NUM) printf("%d",num);
-  sys_exit(SELF);
+  exit(1);
 }