Author: jhb
Date: Sun Jan 25 20:16:45 2015
New Revision: 277713
URL: https://svnweb.freebsd.org/changeset/base/277713

Log:
  If the boot-time memory test is enabled, output a dot ('.') for
  each GB of RAM tested so people watching the console can see that
  the machine is making progress and not hung.
  
  PR:           196650
  Submitted by: Ravi Pokala <rpok...@panasas.com>
  Suggestions from:     Eric van Gyzen <e...@vangyzen.net>
  MFC after:    2 weeks

Modified:
  head/sys/amd64/amd64/machdep.c

Modified: head/sys/amd64/amd64/machdep.c
==============================================================================
--- head/sys/amd64/amd64/machdep.c      Sun Jan 25 19:56:45 2015        
(r277712)
+++ head/sys/amd64/amd64/machdep.c      Sun Jan 25 20:16:45 2015        
(r277713)
@@ -1557,6 +1557,8 @@ native_parse_memmap(caddr_t kmdp, vm_pad
        }
 }
 
+#define        PAGES_PER_GB    (1024 * 1024 * 1024 / PAGE_SIZE)
+
 /*
  * Populate the (physmap) array with base/bound pairs describing the
  * available physical memory in the system, then test this memory and
@@ -1575,6 +1577,7 @@ getmemsize(caddr_t kmdp, u_int64_t first
        u_long physmem_start, physmem_tunable, memtest;
        pt_entry_t *pte;
        quad_t dcons_addr, dcons_size;
+       int page_counter;
 
        bzero(physmap, sizeof(physmap));
        basemem = 0;
@@ -1678,6 +1681,9 @@ getmemsize(caddr_t kmdp, u_int64_t first
         * physmap is in bytes, so when converting to page boundaries,
         * round up the start address and round down the end address.
         */
+       page_counter = 0;
+       if (memtest != 0)
+               printf("Testing system memory");
        for (i = 0; i <= physmap_idx; i += 2) {
                vm_paddr_t end;
 
@@ -1708,6 +1714,14 @@ getmemsize(caddr_t kmdp, u_int64_t first
                                goto skip_memtest;
 
                        /*
+                        * Print a "." every GB to show we're making
+                        * progress.
+                        */
+                       page_counter++;
+                       if ((page_counter % PAGES_PER_GB) == 0)
+                               printf(".");
+
+                       /*
                         * map page into kernel: valid, read/write,non-cacheable
                         */
                        *pte = pa | PG_V | PG_RW | PG_NC_PWT | PG_NC_PCD;
@@ -1794,6 +1808,8 @@ do_next:
        }
        *pte = 0;
        invltlb();
+       if (memtest != 0)
+               printf("\n");
 
        /*
         * XXX
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to