s390: add DEBUG_RODATA support
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Thu, 17 Mar 2016 11:47:12 +0000 (12:47 +0100)
committerAlex Shi <alex.shi@linaro.org>
Thu, 23 Mar 2017 08:29:32 +0000 (16:29 +0800)
git commit d2aa1acad22f ("mm/init: Add 'rodata=off' boot cmdline
parameter to disable read-only kernel mappings") adds a bogus warning
to the console which states that s390 does not support kernel memory
protection.

This however is not true. We do support that since a couple of years
however in a different way than the author of the above named patch
expected.

To get rid of the misleading message implement the mark_rodata_ro
function and emit a message which states the amount of memory which
was write protected already earlier.

This is the same what parisc currently does.

We currently do not support the kernel parameter "rodata=off" which
would allow to write to the rodata section again. However since we
have this feature since years without any problems there is no reason
to add support for this.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
(cherry picked from commit 91d37211769510ae0b4747045d8f81d3b9dd4278)
Signed-off-by: Alex Shi <alex.shi@linaro.org>
arch/s390/Kconfig
arch/s390/mm/init.c

index 3a55f493c7da72b9ee7ee7ad7c8c76d9e01bed8d..8ddd756faa325cf04a6208a76cb26b29885c8945 100644 (file)
@@ -62,6 +62,9 @@ config PCI_QUIRKS
 config ARCH_SUPPORTS_UPROBES
        def_bool y
 
+config DEBUG_RODATA
+       def_bool y
+
 config S390
        def_bool y
        select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
index c722400c769784d8df6f13507693e117ad942497..9c1b3c5e317484ea6dac9d66339ab3772dad173b 100644 (file)
@@ -108,6 +108,13 @@ void __init paging_init(void)
        free_area_init_nodes(max_zone_pfns);
 }
 
+void mark_rodata_ro(void)
+{
+       /* Text and rodata are already protected. Nothing to do here. */
+       pr_info("Write protecting the kernel read-only data: %luk\n",
+               ((unsigned long)&_eshared - (unsigned long)&_stext) >> 10);
+}
+
 void __init mem_init(void)
 {
        if (MACHINE_HAS_TLB_LC)
@@ -126,9 +133,6 @@ void __init mem_init(void)
        setup_zero_pages();     /* Setup zeroed pages. */
 
        mem_init_print_info(NULL);
-       printk("Write protected kernel read-only data: %#lx - %#lx\n",
-              (unsigned long)&_stext,
-              PFN_ALIGN((unsigned long)&_eshared) - 1);
 }
 
 void free_initmem(void)