From 998ea134e635c2a0478d29aab9bdbe07807e4020 Mon Sep 17 00:00:00 2001 From: Stewart Smith Date: Fri, 19 Aug 2016 15:12:14 +1000 Subject: fast-reset: free fdt on fast reset, count fast reboots A bit of a hack to free the flattened device tree on fast reset. This means we don't leak ~500kb memory every fast reset. We also count the number of fast resets we've done (if enabled), which means that for stress testing, we have a hope of finding out how many we managed to do before we hit a problem. Signed-off-by: Stewart Smith --- core/fast-reboot.c | 6 +++++- core/init.c | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core/fast-reboot.c b/core/fast-reboot.c index cf8b3d4..37744b8 100644 --- a/core/fast-reboot.c +++ b/core/fast-reboot.c @@ -278,9 +278,12 @@ static bool fast_reset_p8(void) return true; } +extern void *fdt; + void fast_reboot(void) { bool success; + static int fast_reboot_count = 0; if (proc_gen != proc_gen_p8) { prlog(PR_DEBUG, @@ -293,7 +296,8 @@ void fast_reboot(void) return; } - prlog(PR_INFO, "RESET: Initiating fast reboot...\n"); + prlog(PR_NOTICE, "RESET: Initiating fast reboot %d...\n", ++fast_reboot_count); + free(fdt); /* XXX We need a way to ensure that no other CPU is in skiboot * holding locks (via the OPAL APIs) and if they are, we need diff --git a/core/init.c b/core/init.c index bc14da7..790db14 100644 --- a/core/init.c +++ b/core/init.c @@ -453,12 +453,13 @@ static void load_initramfs(void) int64_t mem_dump_free(void); +void *fdt; + void __noreturn load_and_boot_kernel(bool is_reboot) { const struct dt_property *memprop; const char *cmdline; uint64_t mem_top; - void *fdt; memprop = dt_find_property(dt_root, DT_PRIVATE "maxmem"); if (memprop) -- cgit v1.1