svn commit: r202954 - in head/sys/mips: adm5120 alchemy atheros idt malta sentry5 sibyte

Oleksandr Tymoshenko gonzo at FreeBSD.org
Mon Jan 25 00:44:05 UTC 2010


Author: gonzo
Date: Mon Jan 25 00:44:05 2010
New Revision: 202954
URL: http://svn.freebsd.org/changeset/base/202954

Log:
  - Call post-boot fixup function in order to get proper static
      symbols resolving in DDB
  - When zeroing .bss/.sbss do not round end address to page boundary,
      it's not neccessary and might destroy data pased by trampoline or
      boot loader

Modified:
  head/sys/mips/adm5120/adm5120_machdep.c
  head/sys/mips/alchemy/alchemy_machdep.c
  head/sys/mips/atheros/ar71xx_machdep.c
  head/sys/mips/idt/idt_machdep.c
  head/sys/mips/malta/malta_machdep.c
  head/sys/mips/sentry5/s5_machdep.c
  head/sys/mips/sibyte/sb_machdep.c

Modified: head/sys/mips/adm5120/adm5120_machdep.c
==============================================================================
--- head/sys/mips/adm5120/adm5120_machdep.c	Sun Jan 24 22:33:47 2010	(r202953)
+++ head/sys/mips/adm5120/adm5120_machdep.c	Mon Jan 25 00:44:05 2010	(r202954)
@@ -94,7 +94,7 @@ mips_init(void)
 	}
 
 	/* phys_avail regions are in bytes */
-	phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
+	phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
 	phys_avail[1] = ctob(realmem);
 
 	physmem = realmem;
@@ -153,9 +153,11 @@ platform_start(__register_t a0 __unused,
 	uint64_t platform_counter_freq = 175 * 1000 * 1000;
 
 	/* clear the BSS and SBSS segments */
-	kernend = round_page((vm_offset_t)&end);
+	kernend = (vm_offset_t)&end;
 	memset(&edata, 0, kernend - (vm_offset_t)(&edata));
 
+	mips_postboot_fixup();
+
 	/* Initialize pcpu stuff */
 	mips_pcpu0_init();
 

Modified: head/sys/mips/alchemy/alchemy_machdep.c
==============================================================================
--- head/sys/mips/alchemy/alchemy_machdep.c	Sun Jan 24 22:33:47 2010	(r202953)
+++ head/sys/mips/alchemy/alchemy_machdep.c	Mon Jan 25 00:44:05 2010	(r202954)
@@ -94,7 +94,7 @@ mips_init(void)
 	}
 
 	/* phys_avail regions are in bytes */
-	phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
+	phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
 	phys_avail[1] = ctob(realmem);
 
 	physmem = realmem;
@@ -154,9 +154,11 @@ platform_start(__register_t a0 __unused,
 	uint64_t platform_counter_freq = 175 * 1000 * 1000;
 
 	/* clear the BSS and SBSS segments */
-	kernend = round_page((vm_offset_t)&end);
+	kernend = (vm_offset_t)&end;
 	memset(&edata, 0, kernend - (vm_offset_t)(&edata));
 
+	mips_postboot_fixup();
+
 	/* Initialize pcpu stuff */
 	mips_pcpu0_init();
 

Modified: head/sys/mips/atheros/ar71xx_machdep.c
==============================================================================
--- head/sys/mips/atheros/ar71xx_machdep.c	Sun Jan 24 22:33:47 2010	(r202953)
+++ head/sys/mips/atheros/ar71xx_machdep.c	Mon Jan 25 00:44:05 2010	(r202954)
@@ -57,8 +57,8 @@ __FBSDID("$FreeBSD$");
 
 #include <mips/atheros/ar71xxreg.h>
 
-extern int *edata;
-extern int *end;
+extern char edata[], end[];
+
 uint32_t ar711_base_mac[ETHER_ADDR_LEN];
 /* 4KB static data aread to keep a copy of the bootload env until
    the dynamic kenv is setup */
@@ -142,16 +142,21 @@ void
 platform_start(__register_t a0 __unused, __register_t a1 __unused, 
     __register_t a2 __unused, __register_t a3 __unused)
 {
-	vm_offset_t kernend;
 	uint64_t platform_counter_freq;
 	uint32_t reg;
 	int argc, i, count = 0;
 	char **argv, **envp;
+	vm_offset_t kernend;
 
-	/* clear the BSS and SBSS segments */
-	kernend = round_page((vm_offset_t)&end);
+	/* 
+	 * clear the BSS and SBSS segments, this should be first call in
+	 * the function
+	 */
+	kernend = (vm_offset_t)&end;
 	memset(&edata, 0, kernend - (vm_offset_t)(&edata));
 
+	mips_postboot_fixup();
+
 	/* Initialize pcpu stuff */
 	mips_pcpu0_init();
 
@@ -186,7 +191,7 @@ platform_start(__register_t a0 __unused,
 		realmem = btoc(32*1024*1024);
 
 	/* phys_avail regions are in bytes */
-	phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
+	phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
 	phys_avail[1] = ctob(realmem);
 
 	physmem = realmem;

Modified: head/sys/mips/idt/idt_machdep.c
==============================================================================
--- head/sys/mips/idt/idt_machdep.c	Sun Jan 24 22:33:47 2010	(r202953)
+++ head/sys/mips/idt/idt_machdep.c	Mon Jan 25 00:44:05 2010	(r202954)
@@ -134,9 +134,11 @@ platform_start(__register_t a0, __regist
 
 
 	/* clear the BSS and SBSS segments */
-	kernend = round_page((vm_offset_t)&end);
+	kernend = (vm_offset_t)&end;
 	memset(&edata, 0, kernend - (vm_offset_t)(&edata));
 
+	mips_postboot_fixup();
+
 	/* Initialize pcpu stuff */
 	mips_pcpu0_init();
 
@@ -162,7 +164,7 @@ platform_start(__register_t a0, __regist
 	}
 
 	/* phys_avail regions are in bytes */
-	phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
+	phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
 	phys_avail[1] = ctob(realmem);
 
 	physmem = realmem;

Modified: head/sys/mips/malta/malta_machdep.c
==============================================================================
--- head/sys/mips/malta/malta_machdep.c	Sun Jan 24 22:33:47 2010	(r202953)
+++ head/sys/mips/malta/malta_machdep.c	Mon Jan 25 00:44:05 2010	(r202954)
@@ -178,7 +178,7 @@ mips_init(void)
 	}
 
 	/* phys_avail regions are in bytes */
-	phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
+	phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
 	phys_avail[1] = ctob(realmem);
 
 	physmem = realmem;
@@ -293,9 +293,11 @@ platform_start(__register_t a0, __regist
 	int i;
 
 	/* clear the BSS and SBSS segments */
-	kernend = round_page((vm_offset_t)&end);
+	kernend = (vm_offset_t)&end;
 	memset(&edata, 0, kernend - (vm_offset_t)(&edata));
 
+	mips_postboot_fixup();
+
 	mips_pcpu0_init();
 	platform_counter_freq = malta_cpu_freq();
 	mips_timer_early_init(platform_counter_freq);

Modified: head/sys/mips/sentry5/s5_machdep.c
==============================================================================
--- head/sys/mips/sentry5/s5_machdep.c	Sun Jan 24 22:33:47 2010	(r202953)
+++ head/sys/mips/sentry5/s5_machdep.c	Mon Jan 25 00:44:05 2010	(r202954)
@@ -119,7 +119,7 @@ mips_init(void)
 			 * from CFE, omit the region at the start of physical
 			 * memory where the kernel has been loaded.
 			 */
-			phys_avail[i] += MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
+			phys_avail[i] += MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
 		}
 		phys_avail[i + 1] = addr + len;
 		physmem += len;
@@ -187,9 +187,11 @@ platform_start(__register_t a0, __regist
 	uint64_t platform_counter_freq;
 
 	/* clear the BSS and SBSS segments */
-	kernend = round_page((vm_offset_t)&end);
+	kernend = (vm_offset_t)&end;
 	memset(&edata, 0, kernend - (vm_offset_t)(&edata));
 
+	mips_postboot_fixup();
+
 	/* Initialize pcpu stuff */
 	mips_pcpu0_init();
 

Modified: head/sys/mips/sibyte/sb_machdep.c
==============================================================================
--- head/sys/mips/sibyte/sb_machdep.c	Sun Jan 24 22:33:47 2010	(r202953)
+++ head/sys/mips/sibyte/sb_machdep.c	Mon Jan 25 00:44:05 2010	(r202954)
@@ -169,7 +169,7 @@ mips_init(void)
 			 * from CFE, omit the region at the start of physical
 			 * memory where the kernel has been loaded.
 			 */
-			phys_avail[i] += MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
+			phys_avail[i] += MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
 		}
 		phys_avail[i + 1] = addr + len;
 		physmem += len;
@@ -246,8 +246,6 @@ void
 platform_start(__register_t a0, __register_t a1, __register_t a2,
 	       __register_t a3)
 {
-	vm_offset_t kernend;
-
 	/*
 	 * Make sure that kseg0 is mapped cacheable-coherent
 	 */
@@ -255,7 +253,7 @@ platform_start(__register_t a0, __regist
 
 	/* clear the BSS and SBSS segments */
 	memset(&edata, 0, (vm_offset_t)&end - (vm_offset_t)&edata);
-	kernend = round_page((vm_offset_t)&end);
+	mips_postboot_fixup();
 
 	/* Initialize pcpu stuff */
 	mips_pcpu0_init();


More information about the svn-src-all mailing list