@@ -681,6 +681,9 @@ void __init mem_init(void)
void free_initmem(void)
{
+#ifdef CONFIG_STRICT_MEMORY_RWX
+ unsigned long reclaimed_initmem;
+#endif
#ifdef CONFIG_HAVE_TCM
extern char __tcm_start, __tcm_end;
@@ -688,9 +691,18 @@ void free_initmem(void)
free_reserved_area(&__tcm_start, &__tcm_end, -1, "TCM link");
#endif
+#ifdef CONFIG_STRICT_MEMORY_RWX
+ poison_init_mem((char *)__arch_info_begin,
+ __init_end - (char *)__arch_info_begin);
+ reclaimed_initmem = free_reserved_area(__arch_info_begin,
+ __init_end, -1,
+ "init");
+ totalram_pages += reclaimed_initmem;
+#else
poison_init_mem(__init_begin, __init_end - __init_begin);
if (!machine_is_integrator() && !machine_is_cintegrator())
free_initmem_default(-1);
+#endif
}
#ifdef CONFIG_BLK_DEV_INITRD