Clean up stack checking code
Several small improvements of the stack checking code: - move the CPU0 stack check right before jumping to the payload and out of hardwaremain (that file is too crowded anyways) - fix prototype in lib.h - print size of used stack - use checkstack function both on CPU0 and CPU1-x - print amount of stack used per core Signed-off-by: Stefan Reinauer <reinauer@google.com> Test: Boot coreboot on Link, see the following output: ... CPU1: stack: 00156000 - 00157000, lowest used address 00156c68, stack used: 920 bytes CPU2: stack: 00155000 - 00156000, lowest used address 00155c68, stack used: 920 bytes CPU3: stack: 00154000 - 00155000, lowest used address 00154c68, stack used: 920 bytes ... Jumping to boot code at 1110008 CPU0: stack: 00157000 - 00158000, lowest used address 00157af8, stack used: 1288 bytes Change-Id: I7b83eeee0186559a0a62daa12e3f7782990fd2df Reviewed-on: http://review.coreboot.org/1787 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 Stefan Reinauer
						Stefan Reinauer
					
				
			
			
				
	
			
			
			
						parent
						
							4221a19574
						
					
				
				
					commit
					75dbc389ec
				
			| @@ -22,6 +22,7 @@ | ||||
|  | ||||
| #include <cpu/x86/lapic.h> | ||||
| #include <delay.h> | ||||
| #include <lib.h> | ||||
| #include <string.h> | ||||
| #include <console/console.h> | ||||
| #include <arch/hlt.h> | ||||
| @@ -240,7 +241,6 @@ volatile unsigned int secondary_cpu_index; | ||||
|  | ||||
| int start_cpu(device_t cpu) | ||||
| { | ||||
| 	extern unsigned char _estack[]; | ||||
| 	struct cpu_info *info; | ||||
| 	unsigned long stack_end; | ||||
| 	unsigned long stack_base; | ||||
| @@ -503,21 +503,8 @@ static void wait_other_cpus_stop(struct bus *cpu_bus) | ||||
| 		} | ||||
| 	} | ||||
| 	printk(BIOS_DEBUG, "All AP CPUs stopped (%ld loops)\n", loopcount); | ||||
| 	for(i = 1; i <= last_cpu_index; i++){ | ||||
| 		unsigned long *stack = stacks[i]; | ||||
| 		int lowest; | ||||
| 		int maxstack = (CONFIG_STACK_SIZE - sizeof(struct cpu_info)) | ||||
| 					/sizeof(*stack) - 1; | ||||
| 		if (stack[0] != 0xDEADBEEF) | ||||
| 			printk(BIOS_ERR, "CPU%d overran its stack\n", i); | ||||
| 		for(lowest = 0; lowest < maxstack; lowest++) | ||||
| 			if (stack[lowest] != 0xDEADBEEF) | ||||
| 				break; | ||||
| 		printk(BIOS_SPEW, "CPU%d: stack allocated from %p to %p:", i, | ||||
| 			stack, &stack[maxstack]); | ||||
| 		printk(BIOS_SPEW, "lowest stack address was %p\n", | ||||
| 			&stack[lowest]); | ||||
| 	} | ||||
| 	for(i = 1; i <= last_cpu_index; i++) | ||||
| 		checkstack((void *)stacks[i] + CONFIG_STACK_SIZE, i); | ||||
| } | ||||
|  | ||||
| #endif /* CONFIG_SMP */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user