diff options
author | Stewart Smith <stewart@linux.vnet.ibm.com> | 2016-08-19 15:12:14 +1000 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2016-10-17 10:33:48 +1100 |
commit | 998ea134e635c2a0478d29aab9bdbe07807e4020 (patch) | |
tree | 311e99b7a23fcdfa5579cda241ce5b7119379628 | |
parent | 0279d8951ead549fdebce93130a2f6c673081862 (diff) | |
download | skiboot-998ea134e635c2a0478d29aab9bdbe07807e4020.zip skiboot-998ea134e635c2a0478d29aab9bdbe07807e4020.tar.gz skiboot-998ea134e635c2a0478d29aab9bdbe07807e4020.tar.bz2 |
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 <stewart@linux.vnet.ibm.com>
-rw-r--r-- | core/fast-reboot.c | 6 | ||||
-rw-r--r-- | 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) |