VKernel progress update - 11 Jan 2007

YONETANI Tomokazu qhwt+dfly at les.ath.cx
Fri Jan 12 09:10:37 PST 2007


On Thu, Jan 11, 2007 at 10:08:56PM -0800, Matthew Dillon wrote:
>     The virtual kernel is a lot more stable now.  My vkernel paniced 
>     once while I was doing an installworld... it ran out of room in
>     its kernel_map.  I haven't tracked down the reason for that.

Hi, I played with vkernel for a while today, and here are what I noticed:

- vkernel occasionally fails to find the root fs, and in particular,
  if I start it with MALLOC_OPTIONS=AJ and it always panics right after
  printing the copyright messages:

    panic: pmap_zero_page: CMAP3 busy
    Trace beginning at frame 0xbfbff850


    Fatal trap 12: page fault while in kernel mode
    fault virtual address   = 0x0
    fault code              = supervisor read, page not present
    instruction pointer     = 0x1f:0x81e75c1
    stack pointer           = 0x10:0xbfbff4f8
    frame pointer           = 0x10:0xbfbff7b0
    processor eflags        = interrupt enabled, resume, IOPL = 0
    current process         = 0 ()
    current thread          = pri 76 (CRIT)

    kernel: type 12 trap, code=4
    Stopped at      0x81e75c1:      cmpb    %al,0(%edx)

  using MALLOC_OPTIONS=Z always let me go to single user mode, or
  just before "login:" prompt.

- if I type ctrl+T (SIGINFO) and vkernel immediately terminates, and
  I need to run fsck in the next boot.  Is this intended?

- the vkernel environment won't make it into "login:" prompt (that was
  when I pressed ctrl+T :), and when I dropped into DDB in vkernel,
  I couldn't find getty running.  I don't usually login on the console
  to this machine, is it related?  this is what I got in single user mode
  in vkernel:
    # tty
    /dev/console
    # tty < /dev/ttyv0
    cannot open /dev/ttyv0: Device not configured
    # tty < /dev/ttyp0
    (I pressed ctrl+C here)
    ^Ccannot open /dev/ttyp0: Interrupted system call
  
- how can I boot vkernel in single user mode?  I added the following change
  locally because I couldn't find it elsewhere.  maybe useful for
  maintenance or debugging purpose.

Cheers.

Index: platform/init.c
===================================================================
RCS file: /home/source/dragonfly/cvs/src/sys/machine/vkernel/platform/init.c,v
retrieving revision 1.21
diff -u -r1.21 init.c
--- platform/init.c	11 Jan 2007 10:08:25 -0000	1.21
+++ platform/init.c	12 Jan 2007 16:43:21 -0000
@@ -41,6 +41,7 @@
 #include <sys/mman.h>
 #include <sys/cons.h>
 #include <sys/random.h>
+#include <sys/reboot.h>
 #include <sys/vkernel.h>
 #include <sys/tls.h>
 #include <sys/proc.h>
@@ -114,7 +115,7 @@
 	/*
 	 * Process options
 	 */
-	while ((c = getopt(ac, av, "vm:r:e:I:")) != -1) {
+	while ((c = getopt(ac, av, "svm:r:e:I:")) != -1) {
 		switch(c) {
 		case 'e':
 			/*
@@ -131,6 +132,9 @@
 			kern_envp[i++] = 0;
 			kern_envp[i++] = 0;
 			break;
+		case 's':
+			boothowto |= RB_SINGLE;
+			break;
 		case 'v':
 			bootverbose = 1;
 			break;





More information about the Kernel mailing list