]> Zhao Yanbai Git Server - minix.git/commitdiff
Abstract away minix_kerninfo access 76/3176/1
authorDavid van Moolenbroek <david@minix3.org>
Sat, 19 Sep 2015 16:31:12 +0000 (16:31 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Mon, 21 Sep 2015 15:09:04 +0000 (15:09 +0000)
Instead of importing an external _minix_kerninfo variable, any code
using the shared kernel page should now call get_minix_kerninfo(3).
Since this is the only logical name for such a function, rename the
previous get_minix_kerninfo call to ipc_minix_kerninfo.

Change-Id: I2e424b6fb55aa55d3da850187f1f7a0b7cbbf910

19 files changed:
minix/drivers/system/log/diag.c
minix/drivers/tty/tty/tty.c
minix/fs/procfs/root.c
minix/include/lib.h
minix/include/minix/ipc.h
minix/lib/libc/arch/arm/sys/Makefile.inc
minix/lib/libc/arch/arm/sys/ipc_minix_kerninfo.S [moved from minix/lib/libc/arch/arm/sys/get_minix_kerninfo.S with 79% similarity]
minix/lib/libc/arch/i386/sys/Makefile.inc
minix/lib/libc/arch/i386/sys/ipc_minix_kerninfo.S [moved from minix/lib/libc/arch/i386/sys/get_minix_kerninfo.S with 91% similarity]
minix/lib/libc/sys/Makefile.inc
minix/lib/libc/sys/init.c
minix/lib/libc/sys/kernel_utils.c [new file with mode: 0644]
minix/lib/libc/sys/stack_utils.c
minix/lib/libminc/Makefile
minix/lib/libsys/arch/earm/frclock_util.c
minix/servers/is/dmp_kernel.c
minix/servers/rs/exec.c
minix/servers/vfs/exec.c
minix/usr.bin/trace/kernel.c

index 28eb1e7e4aa6bd739b23b1f57441fdcf6aa5a62a..565a51c4151ecc4d16067fb81902d1e3b497648c 100644 (file)
@@ -11,8 +11,6 @@
 
 #include <assert.h>
 
-extern struct minix_kerninfo *_minix_kerninfo;
-
 /*==========================================================================*
  *                             do_new_kmess                                *
  *==========================================================================*/
@@ -24,8 +22,7 @@ void do_new_kmess(void)
   int i, r, next, bytes;
   static int prev_next = 0;
 
-  assert(_minix_kerninfo);
-  kmess = _minix_kerninfo->kmessages;
+  kmess = get_minix_kerninfo()->kmessages;
 
   /* Print only the new part. Determine how many new bytes there are with 
    * help of the current and previous 'next' index. Note that the kernel
index c964d17099e03617d28d7df822b58b9778a42fa3..d017af6eb94efb9c94cd99d4175b50f802deea61 100644 (file)
@@ -140,8 +140,6 @@ static void sef_local_startup(void);
 static int sef_cb_init_fresh(int type, sef_init_info_t *info);
 static void sef_cb_signal_handler(int signo);
 
-extern struct minix_kerninfo *_minix_kerninfo;
-
 /*===========================================================================*
  *                             tty_task                                     *
  *===========================================================================*/
@@ -397,8 +395,7 @@ do_new_kmess(void)
        int next, bytes, copy, restore = 0;
        tty_t *tp, rtp;
 
-       assert(_minix_kerninfo);
-       kmess_ptr = _minix_kerninfo->kmessages;
+       kmess_ptr = get_minix_kerninfo()->kmessages;
 
        /* The kernel buffer is circular; print only the new part. Determine
         * how many new bytes there are with the help of current and
index e3fc217e8e11947685c60c8ac3c91396a7e4f058..83aec45d6f3a4d7c450faecedda9794160b407b0 100644 (file)
@@ -183,7 +183,6 @@ root_dmap(void)
 static void
 root_ipcvecs(void)
 {
-       extern struct minix_kerninfo *_minix_kerninfo;
        extern struct minix_ipcvecs _minix_ipcvecs;
 
        /*
@@ -191,8 +190,7 @@ root_ipcvecs(void)
         * will be using their own in-libc vectors that are normal symbols in
         * the binary.
         */
-       if (!_minix_kerninfo ||
-           !(_minix_kerninfo->ki_flags & MINIX_KIF_IPCVECS))
+       if (!(get_minix_kerninfo()->ki_flags & MINIX_KIF_IPCVECS))
                return;
 
        /*
index e5e1d258261a0686f52c065904912296c4294e64..5caa03ecbe5b201a10d693862c96b04065303f06 100644 (file)
 #include <minix/endpoint.h>
 #include <minix/ipc.h>
 
+struct minix_kerninfo *get_minix_kerninfo(void);
+
 struct ps_strings; /* forward declaration for minix_stack_fill. */
 
-void minix_stack_params(const char *path, char * const *argv, char * const *envp,
-       size_t *stack_size,  char *overflow, int *argc, int *envc);
+void minix_stack_params(const char *path, char * const *argv,
+       char * const *envp, size_t *stack_size, char *overflow, int *argc,
+       int *envc);
 void minix_stack_fill(const char *path, int argc, char * const *argv,
        int envc, char * const *envp, size_t stack_size, char *frame,
        int *vsp, struct ps_strings **psp);
index e9ca594675096a058ce6f7939c19632cda8e449c..9e2eeff4217443f9290fb65f12481fbbf2035723 100644 (file)
@@ -2357,7 +2357,7 @@ int _ipc_senda_intr(asynmsg_t *table, size_t count);
 
 int _do_kernel_call_intr(message *m_ptr);
 
-int get_minix_kerninfo(struct minix_kerninfo **);
+int ipc_minix_kerninfo(struct minix_kerninfo **);
 
 /* Hide names to avoid name space pollution. */
 #define ipc_notify     _ipc_notify
index a915fcc767701ecc06aad2e648549cc1d749fbda..125033e41cfacf784f0535aa353f02e7e7b54064 100644 (file)
@@ -14,7 +14,7 @@ SRCS+=   \
        _do_kernel_call_intr.S \
        _ipc.S \
        brksize.S \
-       get_minix_kerninfo.S \
+       ipc_minix_kerninfo.S \
        ucontext.S
 
 ucontextoffsets.h: ${CF} 
similarity index 79%
rename from minix/lib/libc/arch/arm/sys/get_minix_kerninfo.S
rename to minix/lib/libc/arch/arm/sys/ipc_minix_kerninfo.S
index b5179d19d21c8ad2fbc7a631a2a36540c9eab0bc..98e03b97633b6a53f9d624923adc801d08cb509d 100644 (file)
@@ -1,13 +1,13 @@
 #include <minix/ipcconst.h>
 #include <machine/asm.h>
 
-ENTRY(get_minix_kerninfo)
+ENTRY(ipc_minix_kerninfo)
        push    {fp}
        mov     fp, sp
        push    {r0}
        mov     r1, #0
        mov     r2, #0
-       mov     r0, #MINIX_KERNINFO /* _get_minix_kerninfo() */
+       mov     r0, #MINIX_KERNINFO /* _ipc_minix_kerninfo() */
        mov     r3, #IPCVEC_INTR  /* r3 determines the SVC type */
        svc     #0           /* trap to kernel */
        pop     {r2}         /* r2 = return struct ptr (was r0) */
index a915fcc767701ecc06aad2e648549cc1d749fbda..125033e41cfacf784f0535aa353f02e7e7b54064 100644 (file)
@@ -14,7 +14,7 @@ SRCS+=   \
        _do_kernel_call_intr.S \
        _ipc.S \
        brksize.S \
-       get_minix_kerninfo.S \
+       ipc_minix_kerninfo.S \
        ucontext.S
 
 ucontextoffsets.h: ${CF} 
similarity index 91%
rename from minix/lib/libc/arch/i386/sys/get_minix_kerninfo.S
rename to minix/lib/libc/arch/i386/sys/ipc_minix_kerninfo.S
index 7f62ee1d01f72be1f4c2fa2db38f24b4c81ac3cc..1114e278835fd026eed78bb363292f46f54e1a68 100644 (file)
@@ -1,7 +1,7 @@
 #include <minix/ipcconst.h>
 #include <machine/asm.h>
 
-ENTRY(get_minix_kerninfo)
+ENTRY(ipc_minix_kerninfo)
        push    %ebp
        movl    %esp, %ebp
        push    %ebx
index fe07b48417e892e1bad791bd86a02d94a201a6c7..fb693d64a52b89da2c3f738ab62fd5e4a70ba2e1 100644 (file)
@@ -25,7 +25,7 @@ SRCS+=        accept.c access.c adjtime.c bind.c brk.c sbrk.c m_closefrom.c getsid.c \
        getrusage.c setrlimit.c setpgid.c
 
 # Minix specific syscalls / utils.
-SRCS+= sprofile.c stack_utils.c _mcontext.c
+SRCS+= kernel_utils.c sprofile.c stack_utils.c _mcontext.c
 
 # Emulation for missing lchown/lchmod
 OBJS+= lchown.o lchmod.o
index 2047479e89c13ec6fba012e10d5cf8590b53a300..a7a091b91820daecd5e4a12b1d09f1dd613dd9ca 100644 (file)
@@ -19,7 +19,7 @@ struct minix_ipcvecs _minix_ipcvecs = {
 
 void __minix_init(void)
 {
-       if((get_minix_kerninfo(&_minix_kerninfo) != 0) ||
+       if((ipc_minix_kerninfo(&_minix_kerninfo) != 0) ||
                (_minix_kerninfo->kerninfo_magic != KERNINFO_MAGIC))
        {
                _minix_kerninfo = NULL;
@@ -30,4 +30,3 @@ void __minix_init(void)
                _minix_ipcvecs = *_minix_kerninfo->minix_ipcvecs;
        }
 }
-
diff --git a/minix/lib/libc/sys/kernel_utils.c b/minix/lib/libc/sys/kernel_utils.c
new file mode 100644 (file)
index 0000000..38b3f58
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * This file contains the main routine for retrieval of the kernel information
+ * page.
+ */
+
+#define _MINIX_SYSTEM
+
+#include <sys/cdefs.h>
+#include "namespace.h"
+#include <lib.h>
+#include <assert.h>
+
+extern struct minix_kerninfo *_minix_kerninfo;
+
+/*
+ * Get a pointer to the kernel information page.
+ */
+struct minix_kerninfo *
+get_minix_kerninfo(void)
+{
+
+       assert(_minix_kerninfo != NULL);
+
+       return _minix_kerninfo;
+}
index 95bf5d228206301b6bb1939bb58ab1fc8408acc1..133881acd77aaedd7721527d813abc63a1cb6514 100644 (file)
@@ -16,8 +16,6 @@
 #include <sys/exec_elf.h>
 #include <sys/exec.h>
 
-extern struct minix_kerninfo *_minix_kerninfo;
-
 /* Create a stack image that only needs to be patched up slightly by
  * the kernel to be used for the process to be executed.
  *
@@ -133,7 +131,7 @@ void minix_stack_fill(const char *path, int argc, char * const *argv,
        size_t const min_size = STACK_MIN_SZ;
 
        /* Virtual address of the stack pointer, in new memory space. */
-       *vsp = _minix_kerninfo->kinfo->user_sp - stack_size;
+       *vsp = get_minix_kerninfo()->kinfo->user_sp - stack_size;
 
        /* Fill in the frame now. */
        fpw = (char **) frame;
index ece7b4758799702cde1545a90fcb7e4d716dfc6a..28445f2c133daabb5273f4c5500f1f593300932c 100644 (file)
@@ -286,7 +286,7 @@ CPPFLAGS.strcspn.c+=        -D_LIBC
 .for f in \
        access.o brk.o close.o environ.o execve.o fork.o fsync.o \
        getgid.o getpid.o geteuid.o getuid.o gettimeofday.o getvfsstat.o \
-       init.o link.o loadname.o lseek.o _mcontext.o mknod.o \
+       init.o kernel_utils.o link.o loadname.o lseek.o _mcontext.o mknod.o \
        mmap.o nanosleep.o open.o pread.o pwrite.o read.o sbrk.o \
        select.o setuid.o sigprocmask.o stack_utils.o stat.o stime.o \
        syscall.o _ucontext.o umask.o unlink.o write.o \
@@ -302,7 +302,7 @@ CLEANFILES+= ${f:C/\.o/.bc/}
 .endfor
 
 .for f in \
-       brksize.o _do_kernel_call_intr.o get_minix_kerninfo.o _ipc.o ucontext.o
+       brksize.o _do_kernel_call_intr.o ipc_minix_kerninfo.o _ipc.o ucontext.o
 ${f} ${f:C/\.o/.bc/}:  ${LIBMINIXCARCHDIR}/sys/${f:C/\.o/.S/}
 OBJS+= ${f}
 CLEANFILES+= ${f}
index 086be43bc5d7b8a1b8cebc2980b32d64f796d844..d93198121f92ce3306bc15fc5aefffb85fcee039 100644 (file)
@@ -5,9 +5,9 @@
 
 #include <minix/minlib.h>
 #include <minix/sysutil.h>
-#include <minix/type.h>
 #include <sys/errno.h>
 #include <sys/types.h>
+#include <lib.h>
 #include <assert.h>
 
 #define MICROHZ         1000000ULL     /* number of micros per second */
 
 static u64_t Hz;
 
-extern struct minix_kerninfo *_minix_kerninfo;
-
 int
 micro_delay(u32_t micros)
 {
+       struct minix_kerninfo *minix_kerninfo;
         u64_t start, delta, delta_end;
 
        Hz = sys_hz();
+       minix_kerninfo = get_minix_kerninfo();
 
         /* Start of delay. */
         read_frclock_64(&start);
-       assert(_minix_kerninfo->minix_arm_frclock_hz);
-       delta_end = (_minix_kerninfo->minix_arm_frclock_hz * micros) / MICROHZ;
+       assert(minix_kerninfo->minix_arm_frclock_hz);
+       delta_end = (minix_kerninfo->minix_arm_frclock_hz * micros) / MICROHZ;
 
         /* If we have to wait for at least one HZ tick, use the regular
          * tickdelay first. Round downwards on purpose, so the average
@@ -49,16 +49,20 @@ micro_delay(u32_t micros)
 
 u32_t frclock_64_to_micros(u64_t tsc)
 {
-        return (u32_t) (tsc / (_minix_kerninfo->minix_arm_frclock_hz / MICROHZ));
+        return (u32_t)
+            (tsc / (get_minix_kerninfo()->minix_arm_frclock_hz / MICROHZ));
 }
 
 void
 read_frclock(u32_t *frclk)
 {
+       struct minix_kerninfo *minix_kerninfo = get_minix_kerninfo();
+
        assert(frclk);
-       assert(_minix_kerninfo->minix_frclock_tcrr);
-       assert(_minix_kerninfo->minix_arm_frclock_hz);
-       *frclk = *(volatile u32_t *)((u8_t *) _minix_kerninfo->minix_frclock_tcrr);
+       assert(minix_kerninfo->minix_frclock_tcrr);
+       assert(minix_kerninfo->minix_arm_frclock_hz);
+       *frclk = *(volatile u32_t *)((u8_t *)
+           minix_kerninfo->minix_frclock_tcrr);
 }
 
 u32_t
index 159927821ae98021e132d35dde0ef54db7ee3cf8..3344401946089b223dd247fbcb6b8ad9babfc7f7 100644 (file)
@@ -1,6 +1,7 @@
 /* Debugging dump procedures for the kernel. */
 
 #include "inc.h"
+#include <lib.h>
 #include <minix/timers.h>
 #include <assert.h>
 #include <machine/interrupt.h>
@@ -55,8 +56,6 @@ struct proc proc[NR_TASKS + NR_PROCS];
 struct priv priv[NR_SYS_PROCS];
 struct boot_image image[NR_BOOT_PROCS];
 
-extern struct minix_kerninfo *_minix_kerninfo;
-
 /*===========================================================================*
  *                             kmessages_dmp                                *
  *===========================================================================*/
@@ -68,8 +67,7 @@ void kmessages_dmp()
   int r;
   int size;
 
-  assert(_minix_kerninfo);
-  kmess = _minix_kerninfo->kmessages;
+  kmess = get_minix_kerninfo()->kmessages;
 
   /* Try to print the kernel messages. First determine start and copy the
    * buffer into a print-buffer. This is done because the messages in the
index feb3df4dcdf4efd0d300a7f79384297b95cfe55b..ea332948ee8355ccd87e8ac7c6bd9b95331fe3c2 100644 (file)
@@ -19,8 +19,6 @@ static struct exec_loaders {
        { NULL }
 };
 
-extern struct minix_kerninfo *_minix_kerninfo;
-
 int srv_execve(int proc_e, char *exec, size_t exec_len, char **argv,
        char **envp)
 {
@@ -75,7 +73,7 @@ static int do_exec(int proc_e, char *exec, size_t exec_len, char *progname,
 
        memset(&execi, 0, sizeof(execi));
 
-       execi.stack_high = _minix_kerninfo->kinfo->user_sp;
+       execi.stack_high = get_minix_kerninfo()->kinfo->user_sp;
        execi.stack_size = DEFAULT_STACK_LIMIT;
        execi.proc_e = proc_e;
        execi.hdr = exec;
index 6d105e2dea9caa2b9a2dedc613e89aba0ed0140e..af65b2bc5f410972f6cad8bf7e4563a6ba7b8f4f 100644 (file)
@@ -21,6 +21,7 @@
 #include <minix/endpoint.h>
 #include <minix/com.h>
 #include <minix/u64.h>
+#include <lib.h>
 #include <signal.h>
 #include <stdlib.h>
 #include <string.h>
@@ -82,8 +83,6 @@ static const struct exec_loaders exec_loaders[] = {
 #define lock_exec() lock_proc(fproc_addr(VM_PROC_NR))
 #define unlock_exec() unlock_proc(fproc_addr(VM_PROC_NR))
 
-extern struct minix_kerninfo *_minix_kerninfo;
-
 /*===========================================================================*
  *                             get_read_vp                                  *
  *===========================================================================*/
@@ -215,7 +214,7 @@ int pm_exec(vir_bytes path, size_t path_len, vir_bytes frame, size_t frame_len,
 
   /* passed from exec() libc code */
   execi.userflags = 0;
-  execi.args.stack_high = _minix_kerninfo->kinfo->user_sp;
+  execi.args.stack_high = get_minix_kerninfo()->kinfo->user_sp;
   execi.args.stack_size = DEFAULT_STACK_LIMIT;
 
   fp->text_size = 0;
index 195123049e1c1758698243471001e41b81fcb6bd..4931d7ba9753ea6bb6857d609bc82bbf0c41f179 100644 (file)
 #if defined(__i386__)
 #include "kernel/arch/i386/include/archconst.h" /* for the KTS_ constants */
 #endif
-
+#include <lib.h>
 #include <minix/param.h>
 
-extern struct minix_kerninfo *_minix_kerninfo;
-
 /*
  * Working area.  By obtaining values from the kernel into these local process
  * structures, and then returning them, we gain a little robustness against
@@ -156,7 +154,7 @@ vir_bytes
 kernel_get_stacktop(void)
 {
 
-       return _minix_kerninfo->kinfo->user_sp;
+       return get_minix_kerninfo()->kinfo->user_sp;
 }
 
 /*