aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Smith <stewart@linux.vnet.ibm.com>2016-08-19 15:12:14 +1000
committerStewart Smith <stewart@linux.vnet.ibm.com>2016-10-17 10:33:48 +1100
commit998ea134e635c2a0478d29aab9bdbe07807e4020 (patch)
tree311e99b7a23fcdfa5579cda241ce5b7119379628
parent0279d8951ead549fdebce93130a2f6c673081862 (diff)
downloadskiboot-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.c6
-rw-r--r--core/init.c3
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)