On May 05, 1999 at 03:38:05AM -0400, Jerry Alexandratos wrote:
> Jonathan Lemon <jle...@americantv.com> says:
> : 
> : Not true.  VM86 is also required to support VESA.  Also, it is used
> : for reliable memory detection (which is why I want to make it mandatory).
> : No more "My Stinkpad only detected 64M, what do I do now??!" questions.
> 
> Actually, even with VM86, the kernel still doesn't correctly detect the
> StinkPad's memory.

Hm, if that's so, then it's an implementation bug.  Can you try the
following patch, boot the system with the -v flag, and mail me back
the result of the dmesg output?
--
Jonathan


Index: i386/i386/vm86.c
===================================================================
RCS file: /tuna/ncvs/src/sys/i386/i386/vm86.c,v
retrieving revision 1.25
diff -u -r1.25 vm86.c
--- vm86.c      1999/05/12 21:38:45     1.25
+++ vm86.c      1999/05/19 15:47:10
@@ -41,6 +41,7 @@
 #include <vm/vm_page.h>
 #include <vm/vm_param.h>
 
+#include <sys/reboot.h>
 #include <sys/user.h>
 
 #include <machine/md_var.h>
@@ -524,6 +525,13 @@
        *pte = (1 << PAGE_SHIFT) | PG_RW | PG_V;
 
        /*
+        * use whatever is leftover of the vm86 page layout as a
+        * message buffer so we can capture early output.
+        */
+       msgbufinit((vm_offset_t)vm86paddr + sizeof(struct vm86_layout),
+           ctob(3) - sizeof(struct vm86_layout));
+
+       /*
         * get memory map with INT 15:E820
         */
 #define SMAPSIZ        sizeof(*smap)
@@ -541,6 +549,13 @@
                i = vm86_datacall(0x15, &vmf, &vmc);
                if (i || vmf.vmf_eax != SMAP_SIG)
                        break;
+               if (boothowto & RB_VERBOSE)
+                       printf("SMAP type=%02x base=%08x %08x len=%08x %08x\n",
+                               smap->type,
+                               *(u_int32_t *)((char *)&smap->base + 4),
+                               (u_int32_t)smap->base,
+                               *(u_int32_t *)((char *)&smap->length + 4),
+                               (u_int32_t)smap->length);
                if (smap->type == 0x01 && smap->base >= highwat) {
                        *extmem += (smap->length / 1024);
                        highwat = smap->base + smap->length;
Index: kern/subr_prf.c
===================================================================
RCS file: /tuna/ncvs/src/sys/kern/subr_prf.c,v
retrieving revision 1.51
diff -u -r1.51 subr_prf.c
--- subr_prf.c  1998/12/03 04:45:56     1.51
+++ subr_prf.c  1999/03/19 19:10:47
@@ -674,10 +674,24 @@
        }
 }
 
+static void
+msgbufcopy(struct msgbuf *oldp)
+{
+       int pos;
+
+       pos = oldp->msg_bufr;
+       while (pos != oldp->msg_bufx) {
+               msglogchar(oldp->msg_ptr[pos], NULL);
+               if (++pos >= oldp->msg_size)
+                       pos = 0;
+       }
+}
+
 void
 msgbufinit(void *ptr, size_t size)
 {
        char *cp;
+       static struct msgbuf *oldp = NULL;
 
        cp = (char *)ptr;
        msgbufp = (struct msgbuf *) (cp + size - sizeof(*msgbufp));
@@ -687,7 +701,10 @@
                msgbufp->msg_size = (char *)msgbufp - cp;
                msgbufp->msg_ptr = cp;
        }
+       if (msgbufmapped && oldp != msgbufp)
+               msgbufcopy(oldp);
        msgbufmapped = 1;
+       oldp = msgbufp;
 }
 
 #include "opt_ddb.h"


To Unsubscribe: send mail to majord...@freebsd.org
with "unsubscribe freebsd-current" in the body of the message

Reply via email to